internal methods added for HL

This commit is contained in:
Basile Burg 2014-08-30 10:13:59 +02:00
parent 902d979e1a
commit 101a9f16b8
3 changed files with 79 additions and 20 deletions

View File

@ -63,8 +63,8 @@ type
// a terminal range kind, cannot be combined with another range kind.
TPrimaryRange = (prString1, prString2, prBlockCom1, prBlockCom2, prBlockDoc1, prBlockDoc2);
// can be combined to an primary range
TSecondaryRange = (srTokenString, srActiveVersion, srInactiveVersion);
// can be combined to a primary range
TSecondaryRange = (srTokenString, srActiveVersion, srInactiveVersion, srAssembly);
// used by the secondary ranges to transform the standard token attributes.
TAttributeTransform = (taFontStyle, taFontColor, taBackColor);
@ -695,6 +695,22 @@ begin
exit;
end else readerReset;
// hex litterals
{if readDelim(reader, fTokStop, '0x') then
begin
readWhile(reader, fTokStop, hexaChars);
if not tryReadDelim(reader, fTokStop, 'Lu') then
if not tryReadDelim(reader, fTokStop, 'LU') then
if not tryReadDelim(reader, fTokStop, 'uL') then
if not tryReadDelim(reader, fTokStop, 'UL') then
if not tryReadDelim(reader, fTokStop, 'L') then
if not tryReadDelim(reader, fTokStop, 'u') then
tryReadDelim(reader, fTokStop, 'U');
fTokKind := tkNumbr;
exit;
end else readerReset;}
// numbers 1
if (isNumber(reader^)) then
begin
@ -703,7 +719,7 @@ begin
exit;
end;
// symbols 1: ponctuation
// symbChars 1: ponctuation
if isSymbol(reader^) then
begin
fTokKind := tkSymbl;
@ -715,7 +731,7 @@ begin
exit;
end;
// symbols 2: operators
// symbChars 2: operators
if isOperator1(reader^) then
begin
fTokKind := tkSymbl;
@ -740,7 +756,7 @@ begin
if not isOperator1(reader^) then exit;
end;
end;
fTokKind := tkIdent;
fTokKind := tkIdent; // invalid op not colorized.
end;
// Keyword - Identifier

View File

@ -617,7 +617,7 @@ begin
continue;
end;
// symbols
// symbChars
if isSymbol(reader.head^) then
begin
identifier += reader.head^;

View File

@ -15,7 +15,8 @@ const
stringPrefixes: TCharSet = ['r', 'x', '"'];
stringStopChecks: TCharSet = ['\', '"'];
charStopChecks: TCharSet = ['\', #39];
symbols: TCharSet = [';', '{', '}', '(', ')', '[', ']', ',', '.', ':', '?', '$', '"', #39];
symbChars: TCharSet = [';', '{', '}', '(', ')', '[', ']', ',', '.', ':', '?', '$', '"', #39];
hexaChars: TCharSet = ['0'..'9', 'a'..'f', 'A'..'F', '_'];
function isWhite(const c: Char): boolean; {$IFNDEF DEBUG}inline;{$ENDIF}
function isSpace(const c: Char): boolean; {$IFNDEF DEBUG}inline;{$ENDIF}
@ -40,14 +41,18 @@ function readLine(var aReader: PChar; var aPosition: Integer): boolean; {$IFNDEF
function readUntil(var aReader: PChar; var aPosition: Integer; const aDelim: Char): boolean; overload; {$IFNDEF DEBUG}inline;{$ENDIF}
function readUntil(var aReader: PChar; var aPosition: Integer; const aDelim: string): boolean; overload; {$IFNDEF DEBUG}inline;{$ENDIF}
function readWhile(var aReader: PChar; var aPosition: Integer; const aDelim: Char): boolean; {$IFNDEF DEBUG}inline;{$ENDIF}
function readUntilAmong(var aReader: PChar; var aPosition: Integer; const aDelim: TCharSet): boolean; {$IFNDEF DEBUG}inline;{$ENDIF}
function readUntilAmong(var aReader: PChar; var aPosition: Integer; const aDelim: TCharSet): boolean; {$IFNDEF DEBUG}inline;{$ENDIF}
function readWhile(var aReader: PChar; var aPosition: Integer; const aDelim: Char): boolean; overload; {$IFNDEF DEBUG}inline;{$ENDIF}
function readWhile(var aReader: PChar; var aPosition: Integer; const aDelim: TCharSet): boolean; overload;{$IFNDEF DEBUG}inline;{$ENDIF}
function readDelim(var aReader: PChar; var aPosition: Integer; const aDelim: Char): boolean; overload; {$IFNDEF DEBUG}inline;{$ENDIF}
function readDelim(var aReader: PChar; var aPosition: Integer; const aDelim: string): boolean; overload; {$IFNDEF DEBUG}inline;{$ENDIF}
function readDelim(var aReader: PChar; var aPosition: Integer; const aDelims: TCharSet): boolean; overload; {$IFNDEF DEBUG}inline;{$ENDIF}
function tryReadDelim(var aReader: PChar; var aPosition: Integer; const aDelim: Char): boolean; overload; {$IFNDEF DEBUG}inline;{$ENDIF}
function tryReadDelim(var aReader: PChar; var aPosition: Integer; const aDelim: string): boolean; overload; {$IFNDEF DEBUG}inline;{$ENDIF}
implementation
{$BOOLEVAL ON}
@ -199,17 +204,6 @@ begin
exit(true);
end;
function readWhile(var aReader: PChar; var aPosition: Integer; const aDelim: Char): boolean;
begin
result := false;
while aReader^ = aDelim do
begin
inc(aReader);
inc(aPosition);
result := true;
end;
end;
function readUntilAmong(var aReader: PChar; var aPosition: Integer; const aDelim: TCharSet): boolean;
begin
while not (aReader^ in aDelim) do
@ -222,6 +216,29 @@ begin
exit(true);
end;
function readWhile(var aReader: PChar; var aPosition: Integer; const aDelim: Char): boolean;
begin
result := false;
while aReader^ = aDelim do
begin
inc(aReader);
inc(aPosition);
result := true;
end;
end;
function readWhile(var aReader: PChar; var aPosition: Integer; const aDelim: TCharSet): boolean;
begin
result := false;
while aReader^ in aDelim do
begin
inc(aReader);
inc(aPosition);
result := true;
end;
end;
function readDelim(var aReader: PChar; var aPosition: Integer; const aDelim: Char): boolean;
begin
if aReader^ <> aDelim then
@ -256,4 +273,30 @@ begin
exit(true);
end;
function tryReadDelim(var aReader: PChar; var aPosition: Integer; const aDelim: Char): boolean;
var
savedReader: PChar;
savedPos: Integer;
begin
savedReader := aReader;
savedPos := aPosition;
if readDelim(aReader, aPosition, aDelim) then exit(true);
aReader := savedReader;
aPosition := savedPos;
exit(false);
end;
function tryReadDelim(var aReader: PChar; var aPosition: Integer; const aDelim: string): boolean;
var
savedReader: PChar;
savedPos: Integer;
begin
savedReader := aReader;
savedPos := aPosition;
if readDelim(aReader, aPosition, aDelim) then exit(true);
aReader := savedReader;
aPosition := savedPos;
exit(false);
end;
end.