mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-13 13:59:13 +02:00
Merged revision(s) 55604 #11a202ca0f, 55606 #c02c9089b0, 55613 #5e2dd67c2e from trunk:
SynEdit: assert correct method types ........ SynEdit: fix range error. Issue #0032067 Patch by Pascal R. ........ SynEdit: fix crash in fold structure code TLazSynEditNestedFoldsList. Issue #0032223 ........ git-svn-id: branches/fixes_1_8@55628 -
This commit is contained in:
parent
f313d9def0
commit
8f8abcc6b9
@ -50,7 +50,7 @@ type
|
||||
TSynEditNotifyReason = ( // TStringListLineCountEvent
|
||||
senrLineCount, // Lines Inserted or Deleted (if not empty, they will trigger senrLineChange too)
|
||||
senrLineChange, // Lines modified (also triggered by senrEditAction)
|
||||
senrLinesModified, // Send once in "EndUpdate". Modified, inserted or deleted
|
||||
senrLinesModified, //TStringListLinesModifiedEvent: Send once in "EndUpdate". Modified, inserted or deleted
|
||||
senrHighlightChanged, // used by Highlighter (invalidate and fold checks needed)
|
||||
// TStringListLineEditEvent
|
||||
senrEditAction, // EditInsert, EditDelete, EditLineBreak, ...
|
||||
@ -280,6 +280,12 @@ type
|
||||
procedure DoGetPhysicalCharWidths(Line: PChar; LineLen, Index: Integer; PWidths: PPhysicalCharWidth); virtual; abstract;
|
||||
|
||||
function GetDisplayView: TLazSynDisplayView; virtual;
|
||||
|
||||
procedure AddGenericHandler(AReason: TSynEditNotifyReason;
|
||||
AHandler: TMethod); virtual; abstract;
|
||||
procedure RemoveGenericHandler(AReason: TSynEditNotifyReason;
|
||||
AHandler: TMethod); virtual; abstract;
|
||||
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
@ -292,8 +298,6 @@ type
|
||||
procedure InsertLines(Index, NumLines: integer); virtual; abstract;
|
||||
procedure InsertStrings(Index: integer; NewStrings: TStrings); virtual; abstract;
|
||||
|
||||
procedure AddGenericHandler(AReason: TSynEditNotifyReason;
|
||||
AHandler: TMethod); virtual; abstract;
|
||||
procedure AddModifiedHandler(AReason: TSynEditNotifyReason;
|
||||
AHandler: TStringListLinesModifiedEvent);
|
||||
procedure AddChangeHandler(AReason: TSynEditNotifyReason;
|
||||
@ -301,8 +305,6 @@ type
|
||||
procedure AddNotifyHandler(AReason: TSynEditNotifyReason;
|
||||
AHandler: TNotifyEvent);
|
||||
|
||||
procedure RemoveGenericHandler(AReason: TSynEditNotifyReason;
|
||||
AHandler: TMethod); virtual; abstract;
|
||||
procedure RemoveModifiedHandler(AReason: TSynEditNotifyReason;
|
||||
AHandler: TStringListLinesModifiedEvent);
|
||||
procedure RemoveChangeHandler(AReason: TSynEditNotifyReason;
|
||||
@ -988,12 +990,14 @@ end;
|
||||
procedure TSynEditStrings.AddChangeHandler(AReason: TSynEditNotifyReason;
|
||||
AHandler: TStringListLineCountEvent);
|
||||
begin
|
||||
assert(AReason in [senrLineCount, senrLineChange, senrHighlightChanged], 'AddChangeHandler');
|
||||
AddGenericHandler(AReason, TMethod(AHandler));
|
||||
end;
|
||||
|
||||
procedure TSynEditStrings.AddNotifyHandler(AReason: TSynEditNotifyReason;
|
||||
AHandler: TNotifyEvent);
|
||||
begin
|
||||
assert(AReason in [senrCleared..senrTextBufferChanged], 'AddNotifyHandler');
|
||||
AddGenericHandler(AReason, TMethod(AHandler));
|
||||
end;
|
||||
|
||||
@ -1007,12 +1011,14 @@ end;
|
||||
procedure TSynEditStrings.RemoveChangeHandler(AReason: TSynEditNotifyReason;
|
||||
AHandler: TStringListLineCountEvent);
|
||||
begin
|
||||
assert(AReason in [senrLineCount, senrLineChange, senrHighlightChanged], 'RemoveChangeHandler');
|
||||
RemoveGenericHandler(AReason, TMethod(AHandler));
|
||||
end;
|
||||
|
||||
procedure TSynEditStrings.RemoveNotifyHandler(AReason: TSynEditNotifyReason;
|
||||
AHandler: TNotifyEvent);
|
||||
begin
|
||||
assert(AReason in [senrCleared..senrTextBufferChanged], 'RemoveNotifyHandler');
|
||||
RemoveGenericHandler(AReason, TMethod(AHandler));
|
||||
end;
|
||||
|
||||
|
@ -632,10 +632,10 @@ function dbgs(ANode: TSynFoldNodeInfo): string;
|
||||
begin
|
||||
with ANode do
|
||||
if sfaInvalid in FoldAction then
|
||||
Result := Format('L=%3d I=%d X=%2d-%2d Fld=%d-%d Nst=%d-%d FT=%d FTC=%d Grp=%d A=%s',
|
||||
Result := Format('L=%3d I=%d X=%2d-%2d Fld=%d-%d Nst=%d-%d FT=%2d FTC=%2d Grp=%d A=%s',
|
||||
[LineIndex, NodeIndex, 0, 0, 0, 0, 0, 0, 0, 0, 0, dbgs(FoldAction)])
|
||||
else
|
||||
Result := Format('L=%3d I=%d X=%2d-%2d Fld=%d-%d Nst=%d-%d FT=%d FTC=%d Grp=%d A=%s',
|
||||
Result := Format('L=%3d I=%d X=%2d-%2d Fld=%d-%d Nst=%d-%d FT=%2d FTC=%2d Grp=%d A=%s',
|
||||
[LineIndex, NodeIndex, LogXStart, LogXEnd,
|
||||
FoldLvlStart, FoldLvlEnd, NestLvlStart, NestLvlEnd,
|
||||
PtrUInt(FoldType), PtrUInt(FoldTypeCompatible), FoldGroup,
|
||||
@ -682,8 +682,16 @@ begin
|
||||
end;
|
||||
|
||||
function dbgs(ANestInfo: TLazSynEditNestedFoldsListEntry): String;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
Result := 'LineIdx='+dbgs(ANestInfo.LineIdx)+' '+dbgs(ANestInfo.HNode);
|
||||
Result := Format('LineIdx:%4d', [ANestInfo.LineIdx ])
|
||||
+' HNode: '+dbgs(ANestInfo.HNode)
|
||||
+' | PrevCnt: '+dbgs(length(ANestInfo.PrevNodeAtSameLevel))
|
||||
+' MinLvl: [';
|
||||
for i := 0 to high(ANestInfo.FGroupMinLevels) do
|
||||
Result := Result+inttostr(ANestInfo.FGroupMinLevels[i])+',';
|
||||
Result := Result+']';
|
||||
end;
|
||||
|
||||
{ TLazSynFoldNodeInfoList }
|
||||
@ -1243,6 +1251,9 @@ var
|
||||
c1 := FGroupEndLevelsAtEval[i] - l;
|
||||
FGroupEndLevelsAtEval[i] := l;
|
||||
c := c + c1;
|
||||
end
|
||||
else begin
|
||||
FPreviousNestInfo[pcnt].FGroupMinLevels[i] := FGroupEndLevelsAtEval[i];
|
||||
end;
|
||||
dec(i);
|
||||
end;
|
||||
@ -1252,6 +1263,9 @@ var
|
||||
if (l < FGroupEndLevelsAtEval[0]) then begin
|
||||
c := FGroupEndLevelsAtEval[0] - l;
|
||||
FGroupEndLevelsAtEval[0] := l;
|
||||
end
|
||||
else begin
|
||||
FPreviousNestInfo[pcnt].FGroupMinLevels[0] := FGroupEndLevelsAtEval[0];
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -594,7 +594,12 @@ begin
|
||||
if Result <> 0 then
|
||||
exit;
|
||||
|
||||
Result := PtrInt(m2) - PtrInt(m1);
|
||||
if Mark2 > Mark1 then
|
||||
Result := 1
|
||||
else if Mark1 > Mark2 then
|
||||
Result := -1
|
||||
else
|
||||
Result := 0;
|
||||
end;
|
||||
|
||||
procedure TSynEditMarkLine.Sort(PrimaryOrder: TSynEditMarkSortOrder;
|
||||
|
@ -3925,8 +3925,8 @@ end;
|
||||
procedure TSynEditMarkupIfDef.SetLines(const AValue: TSynEditStrings);
|
||||
begin
|
||||
if Lines <> nil then begin
|
||||
Lines.RemoveGenericHandler(senrTextBufferChanged, TMethod(@DoBufferChanged));
|
||||
Lines.RemoveGenericHandler(senrTextBufferChanging, TMethod(@DoBufferChanging));
|
||||
Lines.RemoveNotifyHandler(senrTextBufferChanged, @DoBufferChanged);
|
||||
Lines.RemoveNotifyHandler(senrTextBufferChanging, @DoBufferChanging);
|
||||
//FLines.RemoveEditHandler(@DoLinesEdited);
|
||||
// FLines.RemoveChangeHandler(senrHighlightChanged, @DoHighlightChanged);
|
||||
end;
|
||||
@ -3936,8 +3936,8 @@ begin
|
||||
FOuterLines.Lines := AValue;
|
||||
|
||||
if Lines <> nil then begin
|
||||
Lines.AddGenericHandler(senrTextBufferChanged, TMethod(@DoBufferChanged));
|
||||
Lines.AddGenericHandler(senrTextBufferChanging, TMethod(@DoBufferChanging));
|
||||
Lines.AddNotifyHandler(senrTextBufferChanged, @DoBufferChanged);
|
||||
Lines.AddNotifyHandler(senrTextBufferChanging, @DoBufferChanging);
|
||||
//FLines.AddChangeHandler(senrHighlightChanged, @DoHighlightChanged);
|
||||
// FLines.AddEditHandler(@DoLinesEdited);
|
||||
end;
|
||||
|
@ -205,6 +205,11 @@ type
|
||||
function LogicPosIsCombining(const AChar: PChar): Boolean; inline;
|
||||
|
||||
function GetDisplayView: TLazSynDisplayView; override;
|
||||
|
||||
procedure AddGenericHandler(AReason: TSynEditNotifyReason;
|
||||
AHandler: TMethod); override;
|
||||
procedure RemoveGenericHandler(AReason: TSynEditNotifyReason;
|
||||
AHandler: TMethod); override;
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
@ -219,10 +224,6 @@ type
|
||||
function GetPChar(ALineIndex: Integer; out ALen: Integer): PChar; override; // experimental
|
||||
procedure MarkModified(AFirst, ALast: Integer);
|
||||
procedure MarkSaved;
|
||||
procedure AddGenericHandler(AReason: TSynEditNotifyReason;
|
||||
AHandler: TMethod); override;
|
||||
procedure RemoveGenericHandler(AReason: TSynEditNotifyReason;
|
||||
AHandler: TMethod); override;
|
||||
procedure SendNotification(AReason: TSynEditNotifyReason;
|
||||
ASender: TSynEditStrings; aIndex, aCount: Integer); override;
|
||||
procedure SendNotification(AReason: TSynEditNotifyReason;
|
||||
|
@ -76,8 +76,8 @@ procedure TSynGutterLineNumber.Init;
|
||||
begin
|
||||
inherited Init;
|
||||
FTextDrawer := Gutter.TextDrawer;
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrLineCount, TMethod(@LineCountChanged));
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TMethod(@BufferChanged));
|
||||
TSynEditStringList(TextBuffer).AddChangeHandler(senrLineCount, @LineCountChanged);
|
||||
TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
|
||||
FTextDrawer.RegisterOnFontChangeHandler(@FontChanged);
|
||||
LineCountchanged(nil, 0, 0);
|
||||
end;
|
||||
@ -196,8 +196,8 @@ end;
|
||||
procedure TSynGutterLineNumber.BufferChanged(Sender: TObject);
|
||||
begin
|
||||
TSynEditStringList(Sender).RemoveHanlders(self);
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrLineCount, TMethod(@LineCountChanged));
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TMethod(@BufferChanged));
|
||||
TSynEditStringList(TextBuffer).AddChangeHandler(senrLineCount, @LineCountChanged);
|
||||
TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
|
||||
LineCountChanged(nil, 0, 0);
|
||||
end;
|
||||
|
||||
|
@ -1112,7 +1112,7 @@ procedure TSynGutterLOvProviderModifiedLines.BufferChanged(Sender: TObject);
|
||||
begin
|
||||
TSynEditStringList(Sender).RemoveHanlders(self);
|
||||
TSynEditStringList(TextBuffer).AddModifiedHandler(senrLinesModified, @LineModified);
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TMethod(@BufferChanged));
|
||||
TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
|
||||
end;
|
||||
|
||||
procedure TSynGutterLOvProviderModifiedLines.LineModified(Sender: TSynEditStrings; aIndex,
|
||||
@ -1145,7 +1145,7 @@ constructor TSynGutterLOvProviderModifiedLines.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
TSynEditStringList(TextBuffer).AddModifiedHandler(senrLinesModified, @LineModified);
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TMethod(@BufferChanged));
|
||||
TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
|
||||
TCustomSynEdit(SynEdit).RegisterStatusChangedHandler(@SynStatusChanged, [scModified]);
|
||||
FFirstTextLineChanged := -1;
|
||||
FLastTextLineChanged := -1;
|
||||
@ -1257,8 +1257,8 @@ var
|
||||
i: Integer;
|
||||
begin
|
||||
TSynEditStringList(Sender).RemoveHanlders(self);
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanging, TMethod(@BufferChanging));
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TMethod(@BufferChanged));
|
||||
TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanging, @BufferChanging);
|
||||
TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
|
||||
TCustomSynEdit(SynEdit).Marks.RegisterChangeHandler(@DoMarkChange,
|
||||
[smcrAdded, smcrRemoved, smcrLine, smcrVisible, smcrChanged]);
|
||||
|
||||
@ -1278,8 +1278,8 @@ var
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
Color := clBlue;
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanging, TMethod(@BufferChanging));
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TMethod(@BufferChanged));
|
||||
TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanging, @BufferChanging);
|
||||
TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
|
||||
|
||||
TCustomSynEdit(SynEdit).Marks.RegisterChangeHandler(@DoMarkChange,
|
||||
[smcrAdded, smcrRemoved, smcrLine, smcrVisible, smcrChanged]);
|
||||
@ -1316,8 +1316,8 @@ end;
|
||||
procedure TSynGutterLineOverview.Init;
|
||||
begin
|
||||
inherited Init;
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrLineCount, TMethod(@LineCountChanged));
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TMethod(@BufferChanged));
|
||||
TSynEditStringList(TextBuffer).AddChangeHandler(senrLineCount, @LineCountChanged);
|
||||
TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
|
||||
FWinControl := TSynChildWinControl.Create(Self);
|
||||
FWinControl.Parent := SynEdit;
|
||||
FWinControl.DoubleBuffered := SynEdit.DoubleBuffered;
|
||||
@ -1353,8 +1353,8 @@ end;
|
||||
procedure TSynGutterLineOverview.BufferChanged(Sender: TObject);
|
||||
begin
|
||||
TSynEditStringList(Sender).RemoveHanlders(self);
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrLineCount, TMethod(@LineCountChanged));
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged, TMethod(@BufferChanged));
|
||||
TSynEditStringList(TextBuffer).AddChangeHandler(senrLineCount, @LineCountChanged);
|
||||
TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged, @BufferChanged);
|
||||
LineCountChanged(nil, 0, 0);
|
||||
end;
|
||||
|
||||
|
@ -1692,14 +1692,14 @@ begin
|
||||
ViewedTextBuffer.RemoveNotifyHandler(senrAfterDecPaintLock, @DoAfterDecPaintLock);
|
||||
ViewedTextBuffer.RemoveNotifyHandler(senrBeforeIncPaintLock, @DoBeforeIncPaintLock);
|
||||
ViewedTextBuffer.RemoveEditHandler(@DoLinesEdited);
|
||||
ViewedTextBuffer.RemoveGenericHandler(senrTextBufferChanged, TMethod(@DoBufferChanged));
|
||||
ViewedTextBuffer.RemoveNotifyHandler(senrTextBufferChanged, @DoBufferChanged);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSynPluginMultiCaretBase.DoEditorAdded(AValue: TCustomSynEdit);
|
||||
begin
|
||||
if Editor <> nil then begin
|
||||
ViewedTextBuffer.AddGenericHandler(senrTextBufferChanged, TMethod(@DoBufferChanged));
|
||||
ViewedTextBuffer.AddNotifyHandler(senrTextBufferChanged, @DoBufferChanged);
|
||||
ViewedTextBuffer.AddEditHandler(@DoLinesEdited);
|
||||
ViewedTextBuffer.AddNotifyHandler(senrBeforeIncPaintLock, @DoBeforeIncPaintLock);
|
||||
ViewedTextBuffer.AddNotifyHandler(senrAfterDecPaintLock, @DoAfterDecPaintLock);
|
||||
|
@ -774,8 +774,8 @@ begin
|
||||
Active := False;
|
||||
if Editor <> nil then begin
|
||||
if not FTextBufferChanging then begin
|
||||
ViewedTextBuffer.RemoveGenericHandler(senrTextBufferChanging, TMethod(@DoBufferChanging));
|
||||
ViewedTextBuffer.RemoveGenericHandler(senrTextBufferChanged, TMethod(@DoBufferChanged));
|
||||
ViewedTextBuffer.RemoveNotifyHandler(senrTextBufferChanging, @DoBufferChanging);
|
||||
ViewedTextBuffer.RemoveNotifyHandler(senrTextBufferChanged, @DoBufferChanged);
|
||||
end;
|
||||
ViewedTextBuffer.RemoveEditHandler(@DoLinesEdited);
|
||||
ViewedTextBuffer.RemoveNotifyHandler(senrAfterIncPaintLock, @DoIncPaintLock);
|
||||
@ -810,8 +810,8 @@ begin
|
||||
ViewedTextBuffer.AddNotifyHandler(senrAfterIncPaintLock, @DoIncPaintLock);
|
||||
ViewedTextBuffer.AddNotifyHandler(senrBeforeDecPaintLock, @DoDecPaintLock);
|
||||
if not FTextBufferChanging then begin
|
||||
ViewedTextBuffer.AddGenericHandler(senrTextBufferChanging, TMethod(@DoBufferChanging));
|
||||
ViewedTextBuffer.AddGenericHandler(senrTextBufferChanged, TMethod(@DoBufferChanged));
|
||||
ViewedTextBuffer.AddNotifyHandler(senrTextBufferChanging, @DoBufferChanging);
|
||||
ViewedTextBuffer.AddNotifyHandler(senrTextBufferChanged, @DoBufferChanged);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
@ -1858,10 +1858,10 @@ end;
|
||||
procedure TIDESynGutterLOvProviderPascal.BufferChanged(Sender: TObject);
|
||||
begin
|
||||
TSynEditStringList(Sender).RemoveHanlders(self);
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrHighlightChanged,
|
||||
TMethod(@HighlightChanged));
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged,
|
||||
TMethod(@BufferChanged));
|
||||
TSynEditStringList(TextBuffer).AddChangeHandler(senrHighlightChanged,
|
||||
@HighlightChanged);
|
||||
TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged,
|
||||
@BufferChanged);
|
||||
//LineCountChanged(nil, 0, 0);
|
||||
HighlightChanged(nil,-1,-1);
|
||||
end;
|
||||
@ -2038,10 +2038,10 @@ begin
|
||||
SingleLine := False;
|
||||
Color := $D4D4D4;
|
||||
Color2 := $E8E8E8;
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrHighlightChanged,
|
||||
TMethod(@HighlightChanged));
|
||||
TSynEditStringList(TextBuffer).AddGenericHandler(senrTextBufferChanged,
|
||||
TMethod(@BufferChanged));
|
||||
TSynEditStringList(TextBuffer).AddChangeHandler(senrHighlightChanged,
|
||||
@HighlightChanged);
|
||||
TSynEditStringList(TextBuffer).AddNotifyHandler(senrTextBufferChanged,
|
||||
@BufferChanged);
|
||||
end;
|
||||
|
||||
destructor TIDESynGutterLOvProviderPascal.Destroy;
|
||||
|
Loading…
Reference in New Issue
Block a user