mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-12-07 02:37:16 +01:00
SynEdit, pascal-highlighter: added handling of binary/octal numbers (patch by dmitry boyarintsev)
git-svn-id: trunk@22180 -
This commit is contained in:
parent
89e1df3d7f
commit
2f5b7af7e3
@ -382,7 +382,9 @@ type
|
||||
procedure DirectiveProc;
|
||||
{$ENDIF}
|
||||
procedure IdentProc;
|
||||
procedure IntegerProc;
|
||||
procedure HexProc;
|
||||
procedure BinaryProc;
|
||||
procedure OctalProc;
|
||||
procedure LFProc;
|
||||
procedure LowerProc;
|
||||
procedure NullProc;
|
||||
@ -567,13 +569,11 @@ var
|
||||
Identifiers: array[#0..#255] of ByteBool;
|
||||
mHashTable: array[#0..#255] of Integer;
|
||||
KeywordsList: TStringList;
|
||||
{$IFDEF SYN_LAZARUS}
|
||||
IsIntegerChar: array[char] of Boolean;
|
||||
IsNumberChar: array[char] of Boolean;
|
||||
IsSpaceChar: array[char] of Boolean;
|
||||
IsUnderScoreOrNumberChar: array[char] of Boolean;
|
||||
IsLetterChar: array[char] of Boolean;
|
||||
{$ENDIF}
|
||||
|
||||
procedure MakeIdentTable;
|
||||
var
|
||||
@ -590,13 +590,11 @@ begin
|
||||
'a'..'z', 'A'..'Z', '_': mHashTable[I] := Ord(J) - 64;
|
||||
else mHashTable[Char(I)] := 0;
|
||||
end;
|
||||
{$IFDEF SYN_LAZARUS}
|
||||
IsIntegerChar[I]:=(I in ['0'..'9', 'A'..'F', 'a'..'f']);
|
||||
IsNumberChar[I]:=(I in ['0'..'9', '.', 'e', 'E']);
|
||||
IsSpaceChar[I]:=(I in [#1..#9, #11, #12, #14..#32]);
|
||||
IsUnderScoreOrNumberChar[I]:=(I in ['_','0'..'9']);
|
||||
IsLetterChar[I]:=(I in ['a'..'z','A'..'Z']);
|
||||
{$ENDIF}
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -1832,13 +1830,15 @@ begin
|
||||
#1..#9, #11, #12, #14..#32:
|
||||
fProcTable[I] := @SpaceProc;
|
||||
'#': fProcTable[I] := @AsciiCharProc;
|
||||
'$': fProcTable[I] := @IntegerProc;
|
||||
'$': fProcTable[I] := @HexProc;
|
||||
'%': fProcTable[I] := @BinaryProc;
|
||||
'&': fProcTable[I] := @OctalProc;
|
||||
#39: fProcTable[I] := @StringProc;
|
||||
'0'..'9': fProcTable[I] := @NumberProc;
|
||||
'A'..'Z', 'a'..'z', '_':
|
||||
fProcTable[I] := @IdentProc;
|
||||
'{': fProcTable[I] := @BraceOpenProc;
|
||||
'}', '!', '"', '%', '&', '('..'/', ':'..'@', '['..'^', '`', '~':
|
||||
'}', '!', '"', '('..'/', ':'..'@', '['..'^', '`', '~':
|
||||
begin
|
||||
case I of
|
||||
'(': fProcTable[I] := @RoundOpenProc;
|
||||
@ -1867,7 +1867,7 @@ begin
|
||||
#1..#9, #11, #12, #14..#32:
|
||||
fProcTable[I] := SpaceProc;
|
||||
'#': fProcTable[I] := AsciiCharProc;
|
||||
'$': fProcTable[I] := IntegerProc;
|
||||
'$': fProcTable[I] := HexProc;
|
||||
#39: fProcTable[I] := StringProc;
|
||||
'0'..'9': fProcTable[I] := NumberProc;
|
||||
'A'..'Z', 'a'..'z', '_':
|
||||
@ -2183,17 +2183,40 @@ begin
|
||||
while Identifiers[fLine[Run]] do inc(Run);
|
||||
end;
|
||||
|
||||
procedure TSynPasSyn.IntegerProc;
|
||||
procedure TSynPasSyn.HexProc;
|
||||
begin
|
||||
inc(Run);
|
||||
fTokenID := tkNumber;
|
||||
{$IFDEF SYN_LAZARUS}
|
||||
while (IsIntegerChar[FLine[Run]]) do inc(Run);
|
||||
{$ELSE}
|
||||
while FLine[Run] in ['0'..'9', 'A'..'F', 'a'..'f'] do inc(Run);
|
||||
{$ENDIF}
|
||||
if (IsIntegerChar[FLine[Run]]) then begin
|
||||
fTokenID := tkNumber;
|
||||
while (IsIntegerChar[FLine[Run]]) do inc(Run);
|
||||
end
|
||||
else
|
||||
fTokenID := tkSymbol;
|
||||
end;
|
||||
|
||||
procedure TSynPasSyn.BinaryProc;
|
||||
begin
|
||||
inc(Run);
|
||||
if FLine[Run] in ['0'..'1'] then begin
|
||||
fTokenID := tkNumber;
|
||||
while FLine[Run] in ['0'..'1'] do inc(Run);
|
||||
end
|
||||
else
|
||||
fTokenID := tkSymbol;
|
||||
end;
|
||||
|
||||
procedure TSynPasSyn.OctalProc;
|
||||
begin
|
||||
inc(Run);
|
||||
if FLine[Run] in ['0'..'7'] then begin
|
||||
fTokenID := tkNumber;
|
||||
while FLine[Run] in ['0'..'7'] do inc(Run);
|
||||
end
|
||||
else
|
||||
fTokenID := tkSymbol;
|
||||
end;
|
||||
|
||||
|
||||
procedure TSynPasSyn.LFProc;
|
||||
begin
|
||||
fTokenID := tkSpace;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user