⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scsdoc.cpp

📁 将源代码转换成html,支持多操作系统
💻 CPP
字号:
// SCSDoc.cpp : implementation of the CSCSDoc class
//

#include "stdafx.h"
#include "WinMkSCS.h"

#include "SCSDoc.h"
//#include <atlutil.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSCSDoc

IMPLEMENT_DYNCREATE(CSCSDoc, CDocument)

BEGIN_MESSAGE_MAP(CSCSDoc, CDocument)
	//{{AFX_MSG_MAP(CSCSDoc)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSCSDoc construction/destruction

CSCSDoc::CSCSDoc()
{
	setTypical();
	Background = "";
}

CSCSDoc::~CSCSDoc()
{
}

BOOL CSCSDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	setTypical();
	return TRUE;
}

void CSCSDoc::setTypical() {

	Colours2[BGCOLOR] = 0xf1f1f1;
	Colours2[PREPROC] = 0xa900a9;
	Colours2[NORTEXT] = 0x000000;
	Colours2[SYMBOLS] = 0xdd7700;
	Colours2[KEYWORD] = 0xff4f22;
	Colours2[KEYTYPE] = 0x3399ff;
	Colours2[INTEGER] = 0x3200ff;
	Colours2[FLOATPT] = 0xa623ff;
	Colours2[DBLQUOT] = 0x00b800;
	Colours2[SINQUOT] = 0x6bb800;
	Colours2[COMMENT] = 0x666666;
}

/////////////////////////////////////////////////////////////////////////////
// CSCSDoc serialization

void CSCSDoc::Serialize(CArchive& ar)
{

	if (ar.IsStoring())
	{
		CString Element;
		BYTE r,g,b;

		// write XML header information
		ar.WriteString("<?xml version=\"1.0\"?>\r\n");
		ar.WriteString("<!DOCTYPE SyntaxColourScheme2 SYSTEM \"WebcppScheme2.dtd\">\r\n");
		ar.WriteString("<SyntaxColourScheme2>\r\n");

		for(int i=BGCOLOR; i <= COMMENT; i++) {

			r = GetRValue(Colours2[i]);
			g = GetGValue(Colours2[i]);
			b = GetBValue(Colours2[i]);
			// convert data from bgr to rgb
			Temp.Format("%.2x%.2x%.2x", r,g,b);

			Element = colourSwitch(i).data();
/*
			switch(i) {
			
				case BGCOLOR: Element = "bgcolor"; break;
				case PREPROC: Element = "preproc"; break;
				case NORTEXT: Element = "nortext"; break;
				case SYMBOLS: Element = "symbols"; break;
				case KEYWORD: Element = "keyword"; break;
				case KEYTYPE: Element = "keytype"; break;
				case INTEGER: Element = "integer"; break;
				case FLOATPT: Element = "floatpt"; break;
				case DBLQUOT: Element = "dblquot"; break;
				case SINQUOT: Element = "sinquot"; break;
				case COMMENT: Element = "comment"; break;			
			}
*/
			// write the highlighting element data
			ar.WriteString("  <" + Element + ">");
			ar.Write(Temp,6);
			ar.WriteString("</" + Element + ">\r\n");
		}
		if(Background != "") {
			ar.WriteString("  <background>" + Background + "</background>\r\n");
		}
		ar.WriteString("</SyntaxColourScheme2>\r\n");
		// end XML Scs2 entry
	}
	else
	{
		CFdatapair ScsXml;

		// check for xml tag
		ar.ReadString(Temp);
		if(Temp.Find("<?xml version=\"1.0\"") == -1)
		{return;}
		// check for the document type
		ar.ReadString(Temp);
		if(Temp.Find("<!DOCTYPE SyntaxColourScheme2") == -1)
		{return;}
		// check for Scs2 data section
		ar.ReadString(Temp);
		if(Temp.Find("<SyntaxColourScheme2>") == -1)
		{return;}

		ScsVec.clear();

		// read the Scs2 elements
		ar.ReadString(Temp);
		while(Temp.Find("</SyntaxColourScheme2>") == -1) {

			ScsXml << (LPCSTR)Temp;
			ScsVec.push_back(ScsXml);
			ar.ReadString(Temp);
		}

		for(int i=BGCOLOR; i <= COMMENT; i++) {

			Colours2[i] = hexTranslate(colourSwitch(i));
		}

		Background = getColour("background").data();
/*
		// sort the Scs2 data
		Colours2[BGCOLOR] = hexTranslate("bgcolor");
		Colours2[PREPROC] = hexTranslate("preproc");
		Colours2[NORTEXT] = hexTranslate("nortext");
		Colours2[SYMBOLS] = hexTranslate("symbols");
		Colours2[KEYWORD] = hexTranslate("keyword");
		Colours2[KEYTYPE] = hexTranslate("keytype");
		Colours2[INTEGER] = hexTranslate("integer");
		Colours2[FLOATPT] = hexTranslate("floatpt");
		Colours2[DBLQUOT] = hexTranslate("dblquot");
		Colours2[SINQUOT] = hexTranslate("sinquot");
		Colours2[COMMENT] = hexTranslate("comment");
*/
	}
}

/////////////////////////////////////////////////////////////////////////////
// CSCSDoc diagnostics

#ifdef _DEBUG
void CSCSDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CSCSDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CSCSDoc commands
string	CSCSDoc::colourSwitch(int index) {

	switch(index) {

		case BGCOLOR: return "bgcolor";
		case PREPROC: return "preproc";
		case NORTEXT: return "nortext";
		case SYMBOLS: return "symbols";
		case KEYWORD: return "keyword";
		case KEYTYPE: return "keytype";
		case INTEGER: return "integer";
		case FLOATPT: return "floatpt";
		case DBLQUOT: return "dblquot";
		case SINQUOT: return "sinquot";
		case COMMENT: return "comment";			
	}
	return "nortext";
}
// return the hex value of the name in string format
string	CSCSDoc::getColour(string Name) {

	for(int i=0; i < ScsVec.size(); i++) {

		if(ScsVec[i].getname() == Name)
			return ScsVec[i].getvalue();
	}
	return "\0";
}
// convert string hex data into raw hex data for the colour element
COLORREF CSCSDoc::hexTranslate(string Colour) {

	DWORD  hex;
	BYTE   r,g,b;
	string value;

	// get the value
	value = getColour(Colour);
	Temp = value.data();
	Temp = Temp.Right(6);
	sscanf(Temp,"%6x",&hex);

	b = GetRValue(hex);
	g = GetGValue(hex);
	r = GetBValue(hex);
	// fotmat rgb to bgr			
	Temp.Format("%.2x%.2x%.2x", b,g,r);
	sscanf(Temp, "%6x", &hex);

	return hex; // return converted hex data
}
//-----------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -