synhighlighterunreal.pas
来自「一个mwEdit控件原码,比mwCuuEdit0.92a功能先进.」· PAS 代码 · 共 2,004 行 · 第 1/5 页
PAS
2,004 行
FExtTokenID := xtkColon;
end;
end;
end;
procedure TSynUnrealSyn.CommaProc;
begin
inc(Run);
fTokenID := tkSymbol;
FExtTokenID := xtkComma;
end;
procedure TSynUnrealSyn.DirectiveProc;
begin
{begin} //mh 1999-12-05
(*
repeat
case FLine[Run] of
#0, #10, #13: break;
end;
inc(Run);
until FLine[Run] = #0;
*)
if fLine[Run] in [#0, #10, #13] then begin
if (Run <= 0) or (fLine[Run - 1] <> '\') then
fRange := rsUnknown;
fProcTable[fLine[Run]];
end else begin
fTokenID := tkDirective;
while TRUE do
case fLine[Run] of
'/': // comment?
begin
if fLine[Run + 1] = '/' then // is end of directive as well
break
else if fLine[Run + 1] = '*' then begin // might be embedded only
fRange := rsDirectiveComment;
break;
end else
Inc(Run);
end;
'\': // directive continued on next line?
begin
Inc(Run);
if fLine[Run] in [#0, #10, #13] then begin
fRange := rsDirective;
break;
end;
end;
#0, #10, #13:
begin
fRange := rsUnknown;
break;
end;
else Inc(Run);
end;
end;
{end} //mh 1999-12-05
end;
procedure TSynUnrealSyn.EqualProc;
begin
fTokenID := tkSymbol; //mh 1999-12-06
case FLine[Run + 1] of
'=': {logical equal}
begin
inc(Run, 2);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkLogEqual;
end;
else {assign}
begin
inc(Run);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkAssign;
end;
end;
end;
procedure TSynUnrealSyn.GreaterProc;
begin
fTokenID := tkSymbol; //mh 1999-12-06
Case FLine[Run + 1] of
'=': {greater than or equal to}
begin
inc(Run, 2);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkGreaterThanEqual;
end;
'>':
begin
if FLine[Run + 2] = '=' then {shift right assign}
begin
inc(Run, 3);
FExtTokenID := xtkShiftRightAssign;
end
else {shift right}
begin
inc(Run, 2);
FExtTokenID := xtkShiftRight;
end;
// fTokenID := tkSymbol; //mh 1999-12-06
end;
else {greater than}
begin
inc(Run);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkGreaterThan;
end;
end;
end;
procedure TSynUnrealSyn.QuestionProc;
begin
fTokenID := tkSymbol; {conditional}
FExtTokenID := xtkQuestion;
inc(Run);
end;
procedure TSynUnrealSyn.IdentProc;
begin
fTokenID := IdentKind((fLine + Run));
inc(Run, fStringLen);
while Identifiers[fLine[Run]] do inc(Run);
end;
procedure TSynUnrealSyn.LFProc;
begin
fTokenID := tkSpace;
inc(Run);
end;
procedure TSynUnrealSyn.LowerProc;
begin
fTokenID := tkSymbol; //mh 1999-12-06
case FLine[Run + 1] of
'=': {less than or equal to}
begin
inc(Run, 2);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkLessThanEqual;
end;
'<':
begin
if FLine[Run + 2] = '=' then {shift left assign}
begin
inc(Run, 3);
FExtTokenID := xtkShiftLeftAssign;
end
else {shift left}
begin
inc(Run, 2);
FExtTokenID := xtkShiftLeft;
end;
// fTokenID := tkSymbol; //mh 1999-12-06
end;
else {less than}
begin
inc(Run);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkLessThan;
end;
end;
end;
procedure TSynUnrealSyn.MinusProc;
begin
fTokenID := tkSymbol; //mh 1999-12-06
case FLine[Run + 1] of
'=': {subtract assign}
begin
inc(Run, 2);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkSubtractAssign;
end;
'-': {decrement}
begin
inc(Run, 2);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkDecrement;
end;
'>': {arrow}
begin
inc(Run, 2);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkArrow;
end;
else {subtract}
begin
inc(Run);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkSubtract;
end;
end;
end;
procedure TSynUnrealSyn.ModSymbolProc;
begin
fTokenID := tkSymbol; //mh 1999-12-06
case FLine[Run + 1] of
'=': {mod assign}
begin
inc(Run, 2);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkModAssign;
end;
else {mod}
begin
inc(Run);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkMod;
end;
end;
end;
procedure TSynUnrealSyn.NotSymbolProc;
begin
fTokenID := tkSymbol; //mh 1999-12-06
case FLine[Run + 1] of
'=': {not equal}
begin
inc(Run, 2);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkNotEqual;
end;
else {not}
begin
inc(Run);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkLogComplement;
end;
end;
end;
procedure TSynUnrealSyn.NullProc;
begin
fTokenID := tkNull;
end;
procedure TSynUnrealSyn.NumberProc;
begin
inc(Run);
fTokenID := tkNumber;
while FLine[Run] in
['0'..'9', 'A'..'F', 'a'..'f', '.', 'u', 'U', 'l', 'L', 'x', 'X'] do
begin
case FLine[Run] of
'.':
if FLine[Run + 1] = '.' then break;
end;
inc(Run);
end;
end;
procedure TSynUnrealSyn.OrSymbolProc;
begin
fTokenID := tkSymbol; //mh 1999-12-06
case FLine[Run + 1] of
'=': {or assign}
begin
inc(Run, 2);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkIncOrAssign;
end;
'|': {logical or}
begin
inc(Run, 2);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkLogOr;
end;
else {or}
begin
inc(Run);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkIncOr;
end;
end;
end;
procedure TSynUnrealSyn.PlusProc;
begin
fTokenID := tkSymbol; //mh 1999-12-06
case FLine[Run + 1] of
'=': {add assign}
begin
inc(Run, 2);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkAddAssign;
end;
'+': {increment}
begin
inc(Run, 2);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkIncrement;
end;
else {add}
begin
inc(Run);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkAdd;
end;
end;
end;
procedure TSynUnrealSyn.PointProc;
begin
fTokenID := tkSymbol; //mh 1999-12-06
if (FLine[Run + 1] = '.') and (FLine[Run + 2] = '.') then
begin {ellipse}
inc(Run, 3);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkEllipse;
end
else {point}
begin
inc(Run);
// fTokenID := tkSymbol; //mh 1999-12-06
FExtTokenID := xtkPoint;
end;
end;
procedure TSynUnrealSyn.RoundCloseProc;
begin
inc(Run);
fTokenID := tkSymbol;
FExtTokenID := xtkRoundClose;
dec(FRoundCount);
end;
procedure TSynUnrealSyn.RoundOpenProc;
begin
inc(Run);
FTokenID := tkSymbol;
FExtTokenID := xtkRoundOpen;
inc(FRoundCount);
end;
procedure TSynUnrealSyn.SemiColonProc;
begin
inc(Run);
fTokenID := tkSymbol;
FExtTokenID := xtkSemiColon;
end;
procedure TSynUnrealSyn.SlashProc;
begin
case FLine[Run + 1] of
'/': {c++ style comments}
begin
fTokenID := tkComment;
inc(Run, 2);
{begin} //mh 1999-12-05
(*
while FLine[Run] <> #0 do
begin
case FLine[Run] of
#10, #13: break;
end;
inc(Run);
end;
*)
while not (fLine[Run] in [#0, #10, #13]) do Inc(Run);
{end} //mh 1999-12-05
end;
'*': {c style comments}
begin
fTokenID := tkComment;
if fRange <> rsDirectiveComment then
fRange := rsAnsiC;
inc(Run, 2);
while fLine[Run] <> #0 do
case fLine[Run] of
'*':
if fLine[Run + 1] = '/' then
begin
inc(Run, 2);
{begin} //mh 1999-12-05
if fRange = rsDirectiveComment then
fRange := rsDirective
else
{end} //mh 1999-12-05
fRange := rsUnKnown;
break;
end else inc(Run);
{begin} //mh 1999-12-05
// #10: break;
// #13: break;
#10, #13:
begin
if fRange = rsDirectiveComment then
fRange := rsAnsiC;
break;
end;
{end} //mh 1999-12-05
else inc(Run);
end;
end;
'=': {divide assign}
begin
inc(Run, 2);
fTokenID := tkSymbol;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?