mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-22 15:19:35 +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
|
||||
// regex case insensitive, regex multi line forward,
|
||||
// regex multi line whole word
|
||||
repeat
|
||||
|
||||
if fRegExpr then begin
|
||||
// ************ RegExp ************
|
||||
// prepare for firs iteration
|
||||
LineStr:=Lines[y];
|
||||
if ASupportUnicodeCase and (not fSensitive) and (not fRegExpr) then LineStr := UTF8LowerCase(LineStr);
|
||||
LineLen:=length(LineStr);
|
||||
Line:=PChar(LineStr);
|
||||
if not IsFirstLine then begin
|
||||
if FBackwards then begin
|
||||
if fRegExpr then
|
||||
x:=LineLen-1
|
||||
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
|
||||
if IsFirstLine then begin
|
||||
if FBackwards then
|
||||
x:=EndPos.X-2
|
||||
else
|
||||
x:=StartPos.X-1;
|
||||
end;
|
||||
end else begin
|
||||
if FBackwards then
|
||||
x:=LineLen-1
|
||||
else
|
||||
x:=0;
|
||||
end;
|
||||
x:=MinMax(x,0,LineLen-1);
|
||||
//DebugLn(['TSynEditSearch.FindNextOne Line="',LineStr,'" x=',x,' LineLen=',LineLen]);
|
||||
|
||||
// search in the line
|
||||
if fRegExpr then begin
|
||||
// regular expression
|
||||
repeat
|
||||
// search in the line
|
||||
if SearchRegExprInLine(Max(1,x+1),LineStr) then begin
|
||||
//DebugLn(['TSynEditSearch.FindNextOne Found RegExpr']);
|
||||
FoundStartPos:=Point(RegExprEngine.MatchPos[0],y+1);
|
||||
@ -856,8 +849,48 @@ begin
|
||||
fRegExprReplace:=RegExprEngine.Substitute(Replacement);
|
||||
exit;
|
||||
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
|
||||
// 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;
|
||||
if (SearchLen=0) and ((LineLen=0) or IsMultiLinePattern) then
|
||||
begin
|
||||
@ -912,13 +945,26 @@ begin
|
||||
inc(x,xStep);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
// next line
|
||||
if FBackwards then
|
||||
dec(y)
|
||||
else
|
||||
inc(y);
|
||||
until (y<MinY) or (y>MaxY);
|
||||
|
||||
// next line
|
||||
if FBackwards then
|
||||
dec(y)
|
||||
else
|
||||
inc(y);
|
||||
|
||||
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;
|
||||
|
||||
destructor TSynEditSearch.Destroy;
|
||||
|
Loading…
Reference in New Issue
Block a user