📄 cedtdocanal.cpp
字号:
_WordFound(wcount++, WT_RANGE2END, RT_GLOBAL, beg-str, fwd-beg);
_NEXT_WORD(0x0000);
} else {
_ROLL_BACK(0x0400);
}
break;
case 0x0400: // CHECK HEXADECIMAL NUMBERS
if( HEX[0] && ! _strnicmp(fwd, HEX, lenHEX) && _CHCK_SIZE(fwd, lenHEX) ) {
fwd += lenHEX; while( * fwd && isxdigit(* fwd) && ! _CHCK_DBCS(fwd) && _CHCK_SIZE(fwd, 1) ) fwd++;
_WordFound(wcount++, WT_CONSTANT, RT_GLOBAL, beg-str, fwd-beg);
_NEXT_WORD(0x0000);
} else {
_ROLL_BACK(0x0450);
}
break;
case 0x0450: // NUMBERS AND FLOATING POINT NUMBERS
if( isdigit(* fwd) && _CHCK_SIZE(fwd, 1) ) {
fwd++; while( * fwd && (isdigit(* fwd) || * fwd == '.') && ! _CHCK_DBCS(fwd) && _CHCK_SIZE(fwd, 1) ) fwd++;
_JUMP_ADDR(0x0451);
} else {
_ROLL_BACK(0x0500);
}
break;
case 0x0451:
if( * fwd && (* fwd == 'E' || * fwd == 'e') && _CHCK_SIZE(fwd, 1) ) {
fwd++;
_JUMP_ADDR(0x0452);
} else {
_WordFound(wcount++, WT_CONSTANT, RT_GLOBAL, beg-str, fwd-beg);
_NEXT_WORD(0x0000);
}
break;
case 0x0452:
if( * fwd && (* fwd == '+' || * fwd == '-' || isdigit(* fwd)) && ! _CHCK_DBCS(fwd) && _CHCK_SIZE(fwd, 1) ) {
fwd++; while( * fwd && (isdigit(* fwd)) && ! _CHCK_DBCS(fwd) && _CHCK_SIZE(fwd, 1) ) fwd++;
_WordFound(wcount++, WT_CONSTANT, RT_GLOBAL, beg-str, fwd-beg);
_NEXT_WORD(0x0000);
} else {
_WordFound(wcount++, WT_CONSTANT, RT_GLOBAL, beg-str, fwd-beg);
_NEXT_WORD(0x0000);
}
break;
case 0x0500: // CHECK KEYWORD BEGINNING WITH PREFIX
if( PRE[0] && strchr(PRE, * fwd) && _CHCK_SIZE(fwd, 1) ) {
fwd++;
_JUMP_ADDR(0x0501);
} else {
_ROLL_BACK(0x0600);
}
break;
case 0x0501:
if( _KeyLookup(type, range, beg, fwd-beg) ) {
_WordFound(wcount++, type, range, beg-str, fwd-beg);
_NEXT_WORD(0x0000);
} else if( * fwd && strchr( PRE, * fwd ) && ! _CHCK_DBCS(fwd) && _CHCK_SIZE(fwd, 1) ) {
fwd++;
_JUMP_ADDR(0x0501);
} else {
while( * fwd && ! isspace(* fwd) && ! strchr(DEL, * fwd) && ! _CHCK_DBCS(fwd) && _CHCK_SIZE(fwd, 1) ) fwd++;
_JUMP_ADDR(0x0502);
}
break;
case 0x0502:
if( _KeyLookup(type, range, beg, fwd-beg) ) {
_WordFound(wcount++, type, range, beg-str, fwd-beg);
_NEXT_WORD(0x0000);
} else {
_ROLL_BACK(0x0600);
}
break;
case 0x0600: // CHECK VARIABLE BEGINING WITH PREFIX
if( VAR[0] && strchr(VAR, * fwd) && _CHCK_SIZE(fwd, 1) ) {
fwd++;
_JUMP_ADDR(0x0601);
} else {
_ROLL_BACK(0x0700);
}
break;
case 0x0601:
if( * fwd && VEB[0] && * fwd == VEB[0] && _CHCK_SIZE(fwd, 1) ) {
fwd++; while( * fwd && ! isspace(* fwd) && ! strchr(VEB, * fwd) && ! _CHCK_DBCS(fwd) && _CHCK_SIZE(fwd, 1) ) fwd++;
_JUMP_ADDR(0x0602);
} else if( * fwd && SVC[0] && strchr(SVC, * fwd) && ! _CHCK_DBCS(fwd) && _CHCK_SIZE(fwd, 1) ) {
fwd++; while( * fwd && strchr(SVC, * fwd) && ! _CHCK_DBCS(fwd) && _CHCK_SIZE(fwd, 1) ) fwd++;
_JUMP_ADDR(0x0603);
} else if( * fwd && ! isspace(* fwd) && ! strchr(DEL, * fwd) && ! _CHCK_DBCS(fwd) && _CHCK_SIZE(fwd, 1) ) {
fwd++; while( * fwd && ! isspace(* fwd) && ! strchr(DEL, * fwd) && ! _CHCK_DBCS(fwd) && _CHCK_SIZE(fwd, 1) ) fwd++;
_WordFound(wcount++, WT_VARIABLE, RT_GLOBAL, beg-str, fwd-beg);
_NEXT_WORD(0x0000);
} else {
_ROLL_BACK(0x0700);
}
break;
case 0x0602:
if( * fwd && VEB[1] && * fwd == VEB[1] && _CHCK_SIZE(fwd, 1) ) {
fwd++;
_WordFound(wcount++, WT_VARIABLE, RT_GLOBAL, beg-str, fwd-beg);
_NEXT_WORD(0x0000);
} else {
_ROLL_BACK(0x0700);
}
break;
case 0x0603:
if( * fwd && ! isspace(* fwd) && ! strchr(DEL, * fwd) && ! _CHCK_DBCS(fwd) && _CHCK_SIZE(fwd, 1) ) {
fwd++; while( * fwd && ! isspace(* fwd) && ! strchr(DEL, * fwd) && ! _CHCK_DBCS(fwd) && _CHCK_SIZE(fwd, 1) ) fwd++;
_WordFound(wcount++, WT_VARIABLE, RT_GLOBAL, beg-str, fwd-beg);
_NEXT_WORD(0x0000);
} else {
_WordFound(wcount++, WT_VARIABLE, RT_GLOBAL, beg-str, fwd-beg);
_NEXT_WORD(0x0000);
}
break;
case 0x0700: // CHECK IDENTIFIER
if( ! strchr(DEL, * fwd) && ! _CHCK_DBCS(fwd) && _CHCK_SIZE(fwd, 1) ) {
fwd++; while( * fwd && ! isspace(* fwd) && ! strchr(DEL, * fwd) && ! _CHCK_DBCS(fwd) && _CHCK_SIZE(fwd, 1) ) fwd++;
_JUMP_ADDR(0x0701);
} else {
_ROLL_BACK(0x0800);
}
break;
case 0x0701:
if( _KeyLookup(type, range, beg, fwd-beg) ) {
_WordFound(wcount++, type, range, beg-str, fwd-beg);
_NEXT_WORD(0x0000);
} else if( _bDICLOADED && ! _DicLookup(beg, fwd-beg) ) {
_WordFound(wcount++, WT_WRONGWORD, RT_GLOBAL, beg-str, fwd-beg);
_NEXT_WORD(0x0000);
} else {
_WordFound(wcount++, WT_WORD, RT_GLOBAL, beg-str, fwd-beg);
_NEXT_WORD(0x0000);
}
break;
case 0x0800: // CHECK DELIMITERS
if( isprint(* fwd) && strchr(DEL, * fwd) && _CHCK_SIZE(fwd, 1) ) {
fwd++;
_WordFound(wcount++, WT_DELIMITER, RT_GLOBAL, beg-str, fwd-beg);
_NEXT_WORD(0x0000);
} else {
fwd++;
_WordFound(wcount++, WT_GRAPH, RT_GLOBAL, beg-str, fwd-beg);
_NEXT_WORD(0x0000);
}
break;
}
}
BOOL bOverflow = (is_finished < 0) ? TRUE : FALSE;
_FinishLine(wcount, bOverflow, rLine);
}
INT CCedtDoc::GetCharType(TCHAR nChar)
{
BOOL bDBCS = CCedtApp::m_bDoubleByteCharacterSet;
DEL = m_clsLangSpec.m_szDelimiters;
if( bDBCS && IsDBCSLeadByte(nChar) ) return CH_CHARACTER;
else if( isspace(nChar) || ! nChar ) return CH_WHITESPACE;
else if( isprint(nChar) && strchr(DEL, nChar) ) return CH_DELIMITER;
else return CH_CHARACTER;
}
void CCedtDoc::AnalyzeText(INT nIndex, INT nCount)
{
// save settings to global variables
_pKEY = & m_clsKeywords; _bCASESENSITIVE = m_clsLangSpec.m_bCaseSensitive;
_pDIC = & m_clsDictionary; _bDICLOADED = m_bDictionaryLoaded;
// langage specification
ESC = m_clsLangSpec.m_chEscapeChar; QU1 = m_clsLangSpec.m_chQuotationMark1;
QU2 = m_clsLangSpec.m_chQuotationMark2; QU3 = m_clsLangSpec.m_chQuotationMark3;
rngQU1 = m_clsLangSpec.m_ucQuotationMarkRange;
rngLC1 = m_clsLangSpec.m_ucLineCommentRange;
rngBC1 = m_clsLangSpec.m_ucBlockCommentRange;
LF1 = m_clsLangSpec.m_szLineComment1OnFirstPosition;
LF2 = m_clsLangSpec.m_szLineComment2OnFirstPosition;
LC1 = m_clsLangSpec.m_szLineComment1; LC2 = m_clsLangSpec.m_szLineComment2;
C1B = m_clsLangSpec.m_szBlockComment1On; C1E = m_clsLangSpec.m_szBlockComment1Off;
C2B = m_clsLangSpec.m_szBlockComment2On; C2E = m_clsLangSpec.m_szBlockComment2Off;
SDB = m_clsLangSpec.m_szShadowOn; SDE = m_clsLangSpec.m_szShadowOff;
HLB = m_clsLangSpec.m_szHighlightOn; HLE = m_clsLangSpec.m_szHighlightOff;
R1B = m_clsLangSpec.m_szRange1Beg; R1E = m_clsLangSpec.m_szRange1End;
R2B = m_clsLangSpec.m_szRange2Beg; R2E = m_clsLangSpec.m_szRange2End;
DEL = m_clsLangSpec.m_szDelimiters; PRE = m_clsLangSpec.m_szKeywordPrefix;
VAR = m_clsLangSpec.m_szVariablePrefix; VEB = m_clsLangSpec.m_szVariableEnclosedBy;
SVC = m_clsLangSpec.m_szSpecialVariableChars; HEX = m_clsLangSpec.m_szHexaDecimalMark;
lenLF1 = strlen(LF1); lenLF2 = strlen(LF2); lenLC1 = strlen(LC1); lenLC2 = strlen(LC2);
lenC1B = strlen(C1B); lenC1E = strlen(C1E); lenC2B = strlen(C2B); lenC2E = strlen(C2E);
lenSDB = strlen(SDB); lenSDE = strlen(SDE); lenHLB = strlen(HLB); lenHLE = strlen(HLE);
lenR1B = strlen(R1B); lenR1E = strlen(R1E); lenR2B = strlen(R2B); lenR2E = strlen(R2E);
lenHEX = strlen(HEX);
// now start analyzing text
CMainFrame * pMainFrame = (CMainFrame *)AfxGetMainWnd(); ASSERT( pMainFrame );
INT nProcess = 0; CWaitCursor * pWait = NULL;
if( nCount > 1000 ) {
pWait = new CWaitCursor;
pMainFrame->BeginProgress("Analyzing...");
}
POSITION pos = m_clsAnalyzedText.FindIndex( nIndex );
while( pos && nProcess < nCount ) {
_AnalyzeLine( m_clsAnalyzedText.GetNext( pos ), CCedtApp::m_bDoubleByteCharacterSet );
if( nCount > 1000 && ! (nProcess % 20) ) pMainFrame->SetProgress(100 * nProcess / nCount);
nProcess++;
}
if( nCount > 1000 ) {
delete pWait;
pMainFrame->EndProgress();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -