mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-19 10:49:44 +02:00
SynEdit: fixed TSynSizedDifferentialAVLTree.FindNodeAtPosition, left-side-count-sum was wrong. Fixed AdjustForLinesDeleted.
git-svn-id: trunk@62607 -
This commit is contained in:
parent
0fbdea80f8
commit
10729ff5a2
@ -3029,11 +3029,13 @@ begin
|
||||
|
||||
else
|
||||
if APosition = aStartPosition then begin
|
||||
aSizesBeforeSum := aSizesBeforeSum + Result.FLeftSizeSum;
|
||||
break;
|
||||
end
|
||||
|
||||
else
|
||||
if aStartPosition < APosition then begin
|
||||
aSizesBeforeSum := aSizesBeforeSum + Result.FLeftSizeSum;
|
||||
if (Result.FRight = nil) then begin
|
||||
case AMode of
|
||||
afmCreate: Result := CreateRight(Result, aStartPosition);
|
||||
@ -3044,7 +3046,7 @@ begin
|
||||
break;
|
||||
end;
|
||||
Store(0, Result); // Precessor
|
||||
aSizesBeforeSum := aSizesBeforeSum + Result.FLeftSizeSum + Result.FSize;
|
||||
aSizesBeforeSum := aSizesBeforeSum + Result.FSize;
|
||||
Result := Result.FRight;
|
||||
end;
|
||||
end; // while
|
||||
@ -3078,20 +3080,26 @@ end;
|
||||
procedure TSynSizedDifferentialAVLTree.AdjustForLinesDeleted(AStartLine, ALineCount: Integer);
|
||||
var
|
||||
Current : TSynSizedDifferentialAVLNode;
|
||||
CurrentLine, LastLineToDelete: Integer;
|
||||
CurrentLine: Integer;
|
||||
begin
|
||||
Current := TSynSizedDifferentialAVLNode(fRoot);
|
||||
CurrentLine := FRootOffset;;
|
||||
LastLineToDelete := AStartLine + ALineCount - 1; // only valid for delete; ALineCount < 0
|
||||
// LastLineToDelete := AStartLine + ALineCount - 1; // only valid for delete; ALineCount < 0
|
||||
|
||||
while (Current <> nil) do begin
|
||||
CurrentLine := CurrentLine + Current.FPositionOffset;
|
||||
|
||||
if (AStartLine = CurrentLine) or
|
||||
((AStartLine < CurrentLine) and (LastLineToDelete >= CurrentLine)) then begin
|
||||
{ $IFDEF AssertSynMemIndex}
|
||||
raise Exception.Create('TSynEditMarkLineList.AdjustForLinesDeleted node to remove');
|
||||
{ $ENDIF}
|
||||
if (AStartLine = CurrentLine) then begin
|
||||
Current := Current.FRight;
|
||||
if Current = nil then
|
||||
break;
|
||||
assert((Current.FPositionOffset > ALineCount), 'TSynSizedDifferentialAVLTree.AdjustForLinesDeleted: (Current=nil) or (Current.FPositionOffset > ALineCount)');
|
||||
Current.FPositionOffset := Current.FPositionOffset - ALineCount;
|
||||
break;
|
||||
// ((AStartLine < CurrentLine) and (LastLineToDelete >= CurrentLine)) then begin
|
||||
//{ $IFDEF AssertSynMemIndex}
|
||||
//raise Exception.Create('TSynEditMarkLineList.AdjustForLinesDeleted node to remove');
|
||||
//{ $ENDIF}
|
||||
end
|
||||
|
||||
else if AStartLine < CurrentLine then begin
|
||||
|
Loading…
Reference in New Issue
Block a user