📄 synhighlighterjava.pas
字号:
fTokenID := tkSymbol;
FExtTokenID := xtkLessThan;
end;
end;
end;
procedure TSynJavaSyn.MinusProc;
begin
case FLine[Run + 1] of
'=': {subtract assign}
begin
inc(Run, 2);
fTokenID := tkSymbol;
FExtTokenID := xtkSubtractAssign;
end;
'-': {decrement}
begin
inc(Run, 2);
fTokenID := tkSymbol;
FExtTokenID := xtkDecrement;
end;
else {subtract}
begin
inc(Run);
fTokenID := tkSymbol;
FExtTokenID := xtkSubtract;
end;
end;
end;
procedure TSynJavaSyn.MultiplyProc;
begin
case FLine[Run + 1] of
'=': {multiply assign}
begin
inc(Run, 2);
fTokenID := tkSymbol;
FExtTokenID := xtkMultiplyAssign;
end;
else {multiply}
begin
inc(Run);
fTokenID := tkSymbol;
FExtTokenID := xtkMultiply;
end;
end;
end;
procedure TSynJavaSyn.NotSymbolProc;
begin
case FLine[Run + 1] of
'=': {not equal}
begin
inc(Run, 2);
fTokenID := tkSymbol;
FExtTokenID := xtkNotEqual;
end;
else {logical complement}
begin
inc(Run);
fTokenID := tkSymbol;
FExtTokenID := xtkLogComplement;
end;
end;
end;
procedure TSynJavaSyn.NullProc;
begin
fTokenID := tkNull;
fEol := True;
end;
procedure TSynJavaSyn.NumberProc;
begin
inc(Run);
fTokenID := tkNumber;
while FLine[Run] in
['0'..'9', '.', '-', 'l', 'L', 'x', 'X', 'A'..'F', 'a'..'f'] do
begin
case FLine[Run] of
'.':
if FLine[Run + 1] = '.' then break;
end;
inc(Run);
end;
end;
procedure TSynJavaSyn.OrSymbolProc;
begin
case FLine[Run + 1] of
'=': {inclusive or assign}
begin
inc(Run, 2);
fTokenID := tkSymbol;
FExtTokenID := xtkIncOrAssign;
end;
'|': {conditional or}
begin
inc(Run, 2);
fTokenID := tkSymbol;
FExtTokenID := xtkCondOr;
end;
else {inclusive or}
begin
inc(Run);
fTokenID := tkSymbol;
FExtTokenID := xtkIncOr;
end;
end;
end;
procedure TSynJavaSyn.PlusProc;
begin
case FLine[Run + 1] of
'=': {add assign}
begin
inc(Run, 2);
fTokenID := tkSymbol;
FExtTokenID := xtkAddAssign;
end;
'+': {increment}
begin
inc(Run, 2);
fTokenID := tkSymbol;
FExtTokenID := xtkIncrement;
end;
else {add}
begin
inc(Run);
fTokenID := tkSymbol;
FExtTokenID := xtkAdd;
end;
end;
end;
procedure TSynJavaSyn.PointProc;
begin
inc(Run); {point}
if FLine[Run] in ['0'..'9'] then
begin
NumberProc;
Exit;
end;
fTokenID := tkSymbol;
FExtTokenID := xtkPoint;
end;
procedure TSynJavaSyn.PoundProc;
begin
inc(Run);
fTokenID := tkInvalid;
end;
procedure TSynJavaSyn.QuestionProc;
begin
fTokenID := tkSymbol; {question mark - conditional}
FExtTokenID := xtkQuestion;
inc(Run);
end;
procedure TSynJavaSyn.RemainderSymbolProc;
begin
case FLine[Run + 1] of
'=': {remainder assign}
begin
inc(Run, 2);
fTokenID := tkSymbol;
FExtTokenID := xtkRemainderAssign;
end;
else {remainder}
begin
inc(Run);
fTokenID := tkSymbol;
FExtTokenID := xtkRemainder;
end;
end;
end;
procedure TSynJavaSyn.RoundCloseProc;
begin
inc(Run);
fTokenID := tkSymbol;
FExtTokenID := xtkRoundClose;
dec(FRoundCount);
end;
procedure TSynJavaSyn.RoundOpenProc;
begin
inc(Run);
FTokenID := tkSymbol;
FExtTokenID := xtkRoundOpen;
inc(FRoundCount);
end;
procedure TSynJavaSyn.SemiColonProc;
begin
inc(Run); {semicolon}
fTokenID := tkSymbol;
FExtTokenID := xtkSemiColon;
end;
procedure TSynJavaSyn.SlashProc;
begin
case FLine[Run + 1] of
'/': {c++ style comments}
begin
inc(Run, 2);
fTokenID := tkComment;
while FLine[Run] <> #0 do
begin
case FLine[Run] of
#10, #13: break;
end;
inc(Run);
end;
end;
'*':
begin
if fLine[Run+2] = '*' then {documentation comment}
begin
fRange := rsDocument;
fTokenID := tkDocument;
inc(Run);
end
else {c style comment}
begin
fRange := rsComment;
fTokenID := tkComment;
end;
inc(Run,2);
while fLine[Run] <> #0 do
case fLine[Run] of
'*':
if fLine[Run + 1] = '/' then
begin
inc(Run, 2);
fRange := rsUnknown;
break;
end else inc(Run);
#10: break;
#13: break;
else
inc(Run);
end;
end;
'=': {division assign}
begin
inc(Run, 2);
fTokenID := tkSymbol;
FExtTokenID := xtkDivideAssign;
end;
else {division}
begin
inc(Run);
fTokenID := tkSymbol;
FExtTokenID := xtkDivide;
end;
end;
end;
procedure TSynJavaSyn.SpaceProc;
begin
inc(Run);
fTokenID := tkSpace;
while FLine[Run] in [#1..#9, #11, #12, #14..#32] do inc(Run);
end;
procedure TSynJavaSyn.SquareCloseProc;
begin
inc(Run);
fTokenID := tkSymbol;
FExtTokenID := xtkSquareClose;
dec(FSquareCount);
end;
procedure TSynJavaSyn.SquareOpenProc;
begin
inc(Run);
fTokenID := tkSymbol;
FExtTokenID := xtkSquareOpen;
inc(FSquareCount);
end;
procedure TSynJavaSyn.StringProc;
begin
fTokenID := tkString;
if (FLine[Run + 1] = #34) and (FLine[Run + 2] = #34) then inc(Run, 2);
repeat
case FLine[Run] of
#0, #10, #13: break;
#92: Inc(Run); // Backslash, if we have an escaped charcter it can be skipped
end;
if FLine[Run] <> #0 then inc(Run); //Add check here to prevent overrun from backslash being last char
until FLine[Run] = #34;
if FLine[Run] <> #0 then inc(Run);
end;
procedure TSynJavaSyn.TildeProc;
begin
inc(Run); {bitwise complement}
fTokenId := tkSymbol;
FExtTokenID := xtkBitComplement;
end;
procedure TSynJavaSyn.XOrSymbolProc;
begin
Case FLine[Run + 1] of
'=': {xor assign}
begin
inc(Run, 2);
fTokenID := tkSymbol;
FExtTokenID := xtkXorAssign;
end;
else {xor}
begin
inc(Run);
fTokenID := tkSymbol;
FExtTokenID := xtkXor;
end;
end;
end;
procedure TSynJavaSyn.UnknownProc;
begin
{$IFDEF SYN_MBCSSUPPORT}
if FLine[Run] in LeadBytes then
Inc(Run,2)
else
{$ENDIF}
inc(Run);
fTokenID := tkUnknown;
end;
procedure TSynJavaSyn.Next;
begin
fTokenPos := Run;
Case fRange of
rsComment: CommentProc;
rsDocument: CommentProc;
else
begin
fRange := rsUnknown;
fProcTable[fLine[Run]];
end;
end;
end;
function TSynJavaSyn.GetDefaultAttribute(Index: integer): TSynHighlighterAttributes;
begin
case Index of
SYN_ATTR_COMMENT: Result := fCommentAttri;
SYN_ATTR_IDENTIFIER: Result := fIdentifierAttri;
SYN_ATTR_KEYWORD: Result := fKeyAttri;
SYN_ATTR_STRING: Result := fStringAttri;
SYN_ATTR_WHITESPACE: Result := fSpaceAttri;
SYN_ATTR_SYMBOL: Result := fSymbolAttri;
else Result := nil;
end;
end;
function TSynJavaSyn.GetEol: Boolean;
begin
Result := fTokenID = tkNull;
end;
function TSynJavaSyn.GetRange: Pointer;
begin
Result := Pointer(fRange);
end;
procedure TSynJavaSyn.ReSetRange;
begin
fRange := rsUnknown;
end;
procedure TSynJavaSyn.SetRange(Value: Pointer);
begin
fRange := TRangeState(Value);
end;
function TSynJavaSyn.GetToken: String;
var
Len: LongInt;
begin
Len := Run - fTokenPos;
SetString(Result, (FLine + fTokenPos), Len);
end;
function TSynJavaSyn.GetTokenID: TtkTokenKind;
begin
Result := fTokenId;
end;
function TSynJavaSyn.GetExtTokenID: TxtkTokenKind;
begin
Result := FExtTokenID;
end;
function TSynJavaSyn.GetTokenAttribute: TSynHighlighterAttributes;
begin
case fTokenID of
tkComment: Result := fCommentAttri;
tkDocument: Result := fDocumentAttri;
tkIdentifier: Result := fIdentifierAttri;
tkInvalid: Result := fInvalidAttri;
tkKey: Result := fKeyAttri;
tkNumber: Result := fNumberAttri;
tkSpace: Result := fSpaceAttri;
tkString: Result := fStringAttri;
tkSymbol: Result := fSymbolAttri;
tkUnknown: Result := fInvalidAttri;
else Result := nil;
end;
end;
function TSynJavaSyn.GetTokenKind: integer;
begin
Result := Ord(fTokenId);
end;
function TSynJavaSyn.GetTokenPos: Integer;
begin
Result := fTokenPos;
end;
function TSynJavaSyn.GetIdentChars: TSynIdentChars;
begin
Result := ['_', '$', '0'..'9', 'a'..'z', 'A'..'Z'] + TSynSpecialChars;
end;
class function TSynJavaSyn.GetLanguageName: string;
begin
Result := SYNS_LangJava;
end;
function TSynJavaSyn.GetSampleSource: string;
begin
Result := '/* Java syntax highlighting */'#13#10 +
'import java.util.*;'#13#10 +
#13#10 +
'/** Example class */'#13#10 +
'public class Sample {'#13#10 +
' public static void main(String[] args) {'#13#10 +
' int i = 0;'#13#10 +
' for(i = 0; i < 10; i++)'#13#10 +
' System.out.println("Hello world");'#13#10 +
' }'#13#10 +
'}';
end;
initialization
MakeIdentTable;
{$IFNDEF SYN_CPPB_1} //mh 2000-07-14
RegisterPlaceableHighlighter(TSynJavaSyn);
{$ENDIF}
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -