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. // a terminal range kind, cannot be combined with another range kind.
TPrimaryRange = (prString1, prString2, prBlockCom1, prBlockCom2, prBlockDoc1, prBlockDoc2); TPrimaryRange = (prString1, prString2, prBlockCom1, prBlockCom2, prBlockDoc1, prBlockDoc2);
// can be combined to an primary range // can be combined to a primary range
TSecondaryRange = (srTokenString, srActiveVersion, srInactiveVersion); TSecondaryRange = (srTokenString, srActiveVersion, srInactiveVersion, srAssembly);
// used by the secondary ranges to transform the standard token attributes. // used by the secondary ranges to transform the standard token attributes.
TAttributeTransform = (taFontStyle, taFontColor, taBackColor); TAttributeTransform = (taFontStyle, taFontColor, taBackColor);
@ -695,6 +695,22 @@ begin
exit; exit;
end else readerReset; 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 // numbers 1
if (isNumber(reader^)) then if (isNumber(reader^)) then
begin begin
@ -703,7 +719,7 @@ begin
exit; exit;
end; end;
// symbols 1: ponctuation // symbChars 1: ponctuation
if isSymbol(reader^) then if isSymbol(reader^) then
begin begin
fTokKind := tkSymbl; fTokKind := tkSymbl;
@ -715,7 +731,7 @@ begin
exit; exit;
end; end;
// symbols 2: operators // symbChars 2: operators
if isOperator1(reader^) then if isOperator1(reader^) then
begin begin
fTokKind := tkSymbl; fTokKind := tkSymbl;
@ -740,7 +756,7 @@ begin
if not isOperator1(reader^) then exit; if not isOperator1(reader^) then exit;
end; end;
end; end;
fTokKind := tkIdent; fTokKind := tkIdent; // invalid op not colorized.
end; end;
// Keyword - Identifier // Keyword - Identifier

View File

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

View File

@ -15,7 +15,8 @@ const
stringPrefixes: TCharSet = ['r', 'x', '"']; stringPrefixes: TCharSet = ['r', 'x', '"'];
stringStopChecks: TCharSet = ['\', '"']; stringStopChecks: TCharSet = ['\', '"'];
charStopChecks: TCharSet = ['\', #39]; 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 isWhite(const c: Char): boolean; {$IFNDEF DEBUG}inline;{$ENDIF}
function isSpace(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: 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 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: 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 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 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 implementation
{$BOOLEVAL ON} {$BOOLEVAL ON}
@ -199,17 +204,6 @@ begin
exit(true); exit(true);
end; 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; function readUntilAmong(var aReader: PChar; var aPosition: Integer; const aDelim: TCharSet): boolean;
begin begin
while not (aReader^ in aDelim) do while not (aReader^ in aDelim) do
@ -222,6 +216,29 @@ begin
exit(true); exit(true);
end; 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; function readDelim(var aReader: PChar; var aPosition: Integer; const aDelim: Char): boolean;
begin begin
if aReader^ <> aDelim then if aReader^ <> aDelim then
@ -256,4 +273,30 @@ begin
exit(true); exit(true);
end; 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. end.