mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-22 14:39:13 +02:00
SynEdit: Refactored search replace / Combined many small if blocks (regex) into one big / moved calculation for first iteration out of the loop (FirstLine)
git-svn-id: trunk@47506 -
This commit is contained in:
parent
ea99a9bc11
commit
928215038f
@ -815,36 +815,29 @@ begin
|
|||||||
// multi line pattern forward, multi line pattern backward
|
// multi line pattern forward, multi line pattern backward
|
||||||
// regex case insensitive, regex multi line forward,
|
// regex case insensitive, regex multi line forward,
|
||||||
// regex multi line whole word
|
// regex multi line whole word
|
||||||
repeat
|
|
||||||
|
if fRegExpr then begin
|
||||||
|
// ************ RegExp ************
|
||||||
|
// prepare for firs iteration
|
||||||
LineStr:=Lines[y];
|
LineStr:=Lines[y];
|
||||||
if ASupportUnicodeCase and (not fSensitive) and (not fRegExpr) then LineStr := UTF8LowerCase(LineStr);
|
|
||||||
LineLen:=length(LineStr);
|
LineLen:=length(LineStr);
|
||||||
Line:=PChar(LineStr);
|
Line:=PChar(LineStr);
|
||||||
if not IsFirstLine then begin
|
if IsFirstLine then begin
|
||||||
if FBackwards then begin
|
if FBackwards then
|
||||||
if fRegExpr then
|
x:=EndPos.X-2
|
||||||
x:=LineLen-1
|
else
|
||||||
else
|
|
||||||
x:=LineLen-SearchLen;
|
|
||||||
end else
|
|
||||||
x:=0;
|
|
||||||
end else begin
|
|
||||||
IsFirstLine:=false;
|
|
||||||
if FBackwards then begin
|
|
||||||
if fRegExpr then
|
|
||||||
x:=EndPos.X-2
|
|
||||||
else
|
|
||||||
x:=EndPos.X-SearchLen-1;
|
|
||||||
end else begin
|
|
||||||
x:=StartPos.X-1;
|
x:=StartPos.X-1;
|
||||||
end;
|
end else begin
|
||||||
|
if FBackwards then
|
||||||
|
x:=LineLen-1
|
||||||
|
else
|
||||||
|
x:=0;
|
||||||
end;
|
end;
|
||||||
x:=MinMax(x,0,LineLen-1);
|
x:=MinMax(x,0,LineLen-1);
|
||||||
//DebugLn(['TSynEditSearch.FindNextOne Line="',LineStr,'" x=',x,' LineLen=',LineLen]);
|
//DebugLn(['TSynEditSearch.FindNextOne Line="',LineStr,'" x=',x,' LineLen=',LineLen]);
|
||||||
|
|
||||||
// search in the line
|
repeat
|
||||||
if fRegExpr then begin
|
// search in the line
|
||||||
// regular expression
|
|
||||||
if SearchRegExprInLine(Max(1,x+1),LineStr) then begin
|
if SearchRegExprInLine(Max(1,x+1),LineStr) then begin
|
||||||
//DebugLn(['TSynEditSearch.FindNextOne Found RegExpr']);
|
//DebugLn(['TSynEditSearch.FindNextOne Found RegExpr']);
|
||||||
FoundStartPos:=Point(RegExprEngine.MatchPos[0],y+1);
|
FoundStartPos:=Point(RegExprEngine.MatchPos[0],y+1);
|
||||||
@ -856,8 +849,48 @@ begin
|
|||||||
fRegExprReplace:=RegExprEngine.Substitute(Replacement);
|
fRegExprReplace:=RegExprEngine.Substitute(Replacement);
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
// next line
|
||||||
|
if FBackwards then
|
||||||
|
dec(y)
|
||||||
|
else
|
||||||
|
inc(y);
|
||||||
|
|
||||||
|
LineStr:=Lines[y];
|
||||||
|
LineLen:=length(LineStr);
|
||||||
|
Line:=PChar(LineStr);
|
||||||
|
if FBackwards then
|
||||||
|
x:=LineLen-1
|
||||||
|
else
|
||||||
|
x:=0;
|
||||||
|
x:=MinMax(x,0,LineLen-1);
|
||||||
|
//DebugLn(['TSynEditSearch.FindNextOne Line="',LineStr,'" x=',x,' LineLen=',LineLen]);
|
||||||
|
until (y<MinY) or (y>MaxY);
|
||||||
|
|
||||||
|
end // fRegExpr
|
||||||
|
else begin
|
||||||
|
// ************ NOT RegExp ************
|
||||||
|
// prepare for firs iteration
|
||||||
|
LineStr:=Lines[y];
|
||||||
|
if ASupportUnicodeCase and (not fSensitive) then LineStr := UTF8LowerCase(LineStr);
|
||||||
|
LineLen:=length(LineStr);
|
||||||
|
Line:=PChar(LineStr);
|
||||||
|
if IsFirstLine then begin
|
||||||
|
if FBackwards then
|
||||||
|
x:=EndPos.X-SearchLen-1
|
||||||
|
else
|
||||||
|
x:=StartPos.X-1;
|
||||||
end else begin
|
end else begin
|
||||||
// normal search
|
if FBackwards then
|
||||||
|
x:=LineLen-SearchLen
|
||||||
|
else
|
||||||
|
x:=0;
|
||||||
|
end;
|
||||||
|
x:=MinMax(x,0,LineLen-1);
|
||||||
|
//DebugLn(['TSynEditSearch.FindNextOne Line="',LineStr,'" x=',x,' LineLen=',LineLen]);
|
||||||
|
|
||||||
|
repeat
|
||||||
|
// search in the line
|
||||||
MaxPos:=LineLen-SearchLen;
|
MaxPos:=LineLen-SearchLen;
|
||||||
if (SearchLen=0) and ((LineLen=0) or IsMultiLinePattern) then
|
if (SearchLen=0) and ((LineLen=0) or IsMultiLinePattern) then
|
||||||
begin
|
begin
|
||||||
@ -912,13 +945,26 @@ begin
|
|||||||
inc(x,xStep);
|
inc(x,xStep);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
|
||||||
// next line
|
// next line
|
||||||
if FBackwards then
|
if FBackwards then
|
||||||
dec(y)
|
dec(y)
|
||||||
else
|
else
|
||||||
inc(y);
|
inc(y);
|
||||||
until (y<MinY) or (y>MaxY);
|
|
||||||
|
LineStr:=Lines[y];
|
||||||
|
if ASupportUnicodeCase and (not fSensitive) then LineStr := UTF8LowerCase(LineStr);
|
||||||
|
LineLen:=length(LineStr);
|
||||||
|
Line:=PChar(LineStr);
|
||||||
|
if FBackwards then
|
||||||
|
x:=LineLen-SearchLen
|
||||||
|
else
|
||||||
|
x:=0;
|
||||||
|
x:=MinMax(x,0,LineLen-1);
|
||||||
|
//DebugLn(['TSynEditSearch.FindNextOne Line="',LineStr,'" x=',x,' LineLen=',LineLen]);
|
||||||
|
until (y<MinY) or (y>MaxY);
|
||||||
|
|
||||||
|
end; // NOT RegExp
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TSynEditSearch.Destroy;
|
destructor TSynEditSearch.Destroy;
|
||||||
|
Loading…
Reference in New Issue
Block a user