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

📄 cedtdocanal.cpp

📁 Crimson编辑器的英文版,完成从韩文版变成英文版的移植,并且附带可执行文件和注册表文件,无需原先的安装包,是改写编辑器的最理想选择.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				_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 + -