|
@@ -52,6 +52,7 @@ interface
|
|
|
|
|
|
{$IFDEF FPC}
|
|
{$IFDEF FPC}
|
|
{$MODE DELPHI} // Delphi-compatible mode in FreePascal
|
|
{$MODE DELPHI} // Delphi-compatible mode in FreePascal
|
|
|
|
+ {$INLINE ON}
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
|
|
|
|
// ======== Determine compiler
|
|
// ======== Determine compiler
|
|
@@ -209,6 +210,8 @@ type
|
|
|
|
|
|
TRegExprReplaceFunction = function (ARegExpr : TRegExpr): RegExprString of object;
|
|
TRegExprReplaceFunction = function (ARegExpr : TRegExpr): RegExprString of object;
|
|
|
|
|
|
|
|
+ { TRegExpr }
|
|
|
|
+
|
|
TRegExpr = class
|
|
TRegExpr = class
|
|
private
|
|
private
|
|
startp : array [0 .. NSUBEXP - 1] of PRegExprChar; // founded expr starting points
|
|
startp : array [0 .. NSUBEXP - 1] of PRegExprChar; // founded expr starting points
|
|
@@ -289,6 +292,7 @@ type
|
|
{$IFNDEF UniCode}
|
|
{$IFNDEF UniCode}
|
|
fLineSeparatorsSet : set of REChar;
|
|
fLineSeparatorsSet : set of REChar;
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
|
|
+ Function IsSpaceChar(AChar : PRegExprChar) : Boolean; inline;
|
|
|
|
|
|
// Mark programm as having to be [re]compiled
|
|
// Mark programm as having to be [re]compiled
|
|
procedure InvalidateProgramm;
|
|
procedure InvalidateProgramm;
|
|
@@ -1474,6 +1478,11 @@ procedure TRegExpr.SetModifier (AIndex : integer; ASet : boolean);
|
|
{==================== Compiler section =======================}
|
|
{==================== Compiler section =======================}
|
|
{=============================================================}
|
|
{=============================================================}
|
|
|
|
|
|
|
|
+function TRegExpr.IsSpaceChar(AChar: PRegExprChar): Boolean;
|
|
|
|
+begin
|
|
|
|
+ Result:=Pos(AChar^,fSpaceChars)>0;
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TRegExpr.InvalidateProgramm;
|
|
procedure TRegExpr.InvalidateProgramm;
|
|
begin
|
|
begin
|
|
if programm <> nil then begin
|
|
if programm <> nil then begin
|
|
@@ -2798,13 +2807,13 @@ function TRegExpr.regrepeat (p : PRegExprChar; AMax : PtrInt) : PtrInt;
|
|
end;
|
|
end;
|
|
ANYSPACE:
|
|
ANYSPACE:
|
|
while (Result < TheMax) and
|
|
while (Result < TheMax) and
|
|
- (Pos (scan^, fSpaceChars) > 0) do begin
|
|
|
|
|
|
+ IsSpaceChar(scan) do begin
|
|
inc (Result);
|
|
inc (Result);
|
|
inc (scan);
|
|
inc (scan);
|
|
end;
|
|
end;
|
|
NOTSPACE:
|
|
NOTSPACE:
|
|
while (Result < TheMax) and
|
|
while (Result < TheMax) and
|
|
- (Pos (scan^, fSpaceChars) <= 0) do begin
|
|
|
|
|
|
+ Not IsSpaceChar(scan) do begin
|
|
inc (Result);
|
|
inc (Result);
|
|
inc (scan);
|
|
inc (scan);
|
|
end;
|
|
end;
|
|
@@ -3004,12 +3013,12 @@ function TRegExpr.MatchPrim (prog : PRegExprChar) : boolean;
|
|
inc (reginput);
|
|
inc (reginput);
|
|
end;
|
|
end;
|
|
ANYSPACE: begin
|
|
ANYSPACE: begin
|
|
- if (reginput^ = #0) or not (Pos (reginput^, fSpaceChars) > 0) //###0.943
|
|
|
|
|
|
+ if (reginput^ = #0) or not IsSpaceChar(reginput) //###0.943
|
|
then EXIT;
|
|
then EXIT;
|
|
inc (reginput);
|
|
inc (reginput);
|
|
end;
|
|
end;
|
|
NOTSPACE: begin
|
|
NOTSPACE: begin
|
|
- if (reginput^ = #0) or (Pos (reginput^, fSpaceChars) > 0) //###0.943
|
|
|
|
|
|
+ if (reginput^ = #0) or IsSpaceChar(reginput) //###0.943
|
|
then EXIT;
|
|
then EXIT;
|
|
inc (reginput);
|
|
inc (reginput);
|
|
end;
|
|
end;
|
|
@@ -3652,6 +3661,7 @@ function TRegExpr.ExecPrim (AOffset: PtrInt) : boolean;
|
|
end; { of function TRegExpr.ExecPrim
|
|
end; { of function TRegExpr.ExecPrim
|
|
--------------------------------------------------------------}
|
|
--------------------------------------------------------------}
|
|
|
|
|
|
|
|
+
|
|
function TRegExpr.ExecNext : boolean;
|
|
function TRegExpr.ExecNext : boolean;
|
|
var offset : PtrInt;
|
|
var offset : PtrInt;
|
|
begin
|
|
begin
|