📄 scsdoc.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 + -