mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-21 07:19:59 +01:00
SynEdit: Rewritten Multi Highlighter
git-svn-id: trunk@25056 -
This commit is contained in:
parent
9fde93411b
commit
686f8c56be
@ -69,7 +69,7 @@ type
|
|||||||
protected
|
protected
|
||||||
function ItemSize: Integer; override;
|
function ItemSize: Integer; override;
|
||||||
protected
|
protected
|
||||||
procedure LineTextChanged(AIndex: Integer); override;
|
procedure LineTextChanged(AIndex: Integer; ACount: Integer = 1); override;
|
||||||
procedure InsertedLines(AIndex, ACount: Integer); override;
|
procedure InsertedLines(AIndex, ACount: Integer); override;
|
||||||
procedure DeletedLines(AIndex, ACount: Integer); override;
|
procedure DeletedLines(AIndex, ACount: Integer); override;
|
||||||
public
|
public
|
||||||
@ -209,6 +209,17 @@ type
|
|||||||
property OnChange: TNotifyEvent read fOnChange write fOnChange;
|
property OnChange: TNotifyEvent read fOnChange write fOnChange;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TSynEditLinesList }
|
||||||
|
|
||||||
|
TSynEditLinesList=class(TFPList)
|
||||||
|
private
|
||||||
|
function GetSynString(Index: Integer): TSynEditStringsBase;
|
||||||
|
procedure PutSynStrings(Index: Integer; const AValue: TSynEditStringsBase);
|
||||||
|
public
|
||||||
|
property Items[Index: Integer]: TSynEditStringsBase
|
||||||
|
read GetSynString write PutSynStrings; default;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TSynCustomHighlighter }
|
{ TSynCustomHighlighter }
|
||||||
|
|
||||||
TSynCustomHighlighter = class(TComponent)
|
TSynCustomHighlighter = class(TComponent)
|
||||||
@ -216,6 +227,7 @@ type
|
|||||||
fAttributes: TStringList;
|
fAttributes: TStringList;
|
||||||
fAttrChangeHooks: TMethodList;
|
fAttrChangeHooks: TMethodList;
|
||||||
FCapabilities: TSynHighlighterCapabilities;
|
FCapabilities: TSynHighlighterCapabilities;
|
||||||
|
FKnownLines: TSynEditLinesList;
|
||||||
FCurrentLines: TSynEditStringsBase;
|
FCurrentLines: TSynEditStringsBase;
|
||||||
FCurrentRanges: TSynHighlighterRangeList;
|
FCurrentRanges: TSynHighlighterRangeList;
|
||||||
FDrawDividerLevel: Integer;
|
FDrawDividerLevel: Integer;
|
||||||
@ -225,7 +237,7 @@ type
|
|||||||
fEnabled: Boolean;
|
fEnabled: Boolean;
|
||||||
fWordBreakChars: TSynIdentChars;
|
fWordBreakChars: TSynIdentChars;
|
||||||
FIsScanning: Boolean;
|
FIsScanning: Boolean;
|
||||||
procedure SetCurrentLines(const AValue: TSynEditStringsBase);
|
function GetKnownRanges(Index: Integer): TSynHighlighterRangeList;
|
||||||
procedure SetDrawDividerLevel(const AValue: Integer);
|
procedure SetDrawDividerLevel(const AValue: Integer);
|
||||||
procedure SetEnabled(const Value: boolean); //DDH 2001-10-23
|
procedure SetEnabled(const Value: boolean); //DDH 2001-10-23
|
||||||
protected
|
protected
|
||||||
@ -247,15 +259,22 @@ type
|
|||||||
procedure SetAttributesOnChange(AEvent: TNotifyEvent);
|
procedure SetAttributesOnChange(AEvent: TNotifyEvent);
|
||||||
procedure SetDefaultFilter(Value: string); virtual;
|
procedure SetDefaultFilter(Value: string); virtual;
|
||||||
procedure SetSampleSource(Value: string); virtual;
|
procedure SetSampleSource(Value: string); virtual;
|
||||||
function CreateRangeList: TSynHighlighterRangeList; virtual;
|
function GetRangeIdentifier: Pointer; virtual;
|
||||||
|
function CreateRangeList(ALines: TSynEditStringsBase): TSynHighlighterRangeList; virtual;
|
||||||
|
procedure AfterAttachedToRangeList(ARangeList: TSynHighlighterRangeList); virtual;
|
||||||
|
procedure BeforeDetachedFromRangeList(ARangeList: TSynHighlighterRangeList); virtual;
|
||||||
function UpdateRangeInfoAtLine(Index: Integer): Boolean; virtual; // Returns true if range changed
|
function UpdateRangeInfoAtLine(Index: Integer): Boolean; virtual; // Returns true if range changed
|
||||||
// code fold - only valid if hcCodeFolding in Capabilities
|
// code fold - only valid if hcCodeFolding in Capabilities
|
||||||
|
procedure SetCurrentLines(const AValue: TSynEditStringsBase); virtual;
|
||||||
property LineIndex: Integer read FLineIndex;
|
property LineIndex: Integer read FLineIndex;
|
||||||
property CurrentRanges: TSynHighlighterRangeList read FCurrentRanges;
|
property CurrentRanges: TSynHighlighterRangeList read FCurrentRanges;
|
||||||
function GetDrawDivider(Index: integer): TSynDividerDrawConfigSetting; virtual;
|
function GetDrawDivider(Index: integer): TSynDividerDrawConfigSetting; virtual;
|
||||||
function GetDividerDrawConfig(Index: Integer): TSynDividerDrawConfig; virtual;
|
function GetDividerDrawConfig(Index: Integer): TSynDividerDrawConfig; virtual;
|
||||||
function GetDividerDrawConfigCount: Integer; virtual;
|
function GetDividerDrawConfigCount: Integer; virtual;
|
||||||
|
function PerformScan(StartIndex, EndIndex: Integer): Integer; virtual;
|
||||||
property IsScanning: Boolean read FIsScanning;
|
property IsScanning: Boolean read FIsScanning;
|
||||||
|
property KnownRanges[Index: Integer]: TSynHighlighterRangeList read GetKnownRanges;
|
||||||
|
property KnownLines: TSynEditLinesList read FKnownLines;
|
||||||
public
|
public
|
||||||
procedure DefHighlightChange(Sender: TObject);
|
procedure DefHighlightChange(Sender: TObject);
|
||||||
property AttributeChangeNeedScan: Boolean read FAttributeChangeNeedScan;
|
property AttributeChangeNeedScan: Boolean read FAttributeChangeNeedScan;
|
||||||
@ -283,7 +302,7 @@ type
|
|||||||
function GetEndOfLineAttribute: TSynHighlighterAttributes; virtual;
|
function GetEndOfLineAttribute: TSynHighlighterAttributes; virtual;
|
||||||
function GetTokenAttribute: TSynHighlighterAttributes; virtual; abstract;
|
function GetTokenAttribute: TSynHighlighterAttributes; virtual; abstract;
|
||||||
function GetTokenKind: integer; virtual; abstract;
|
function GetTokenKind: integer; virtual; abstract;
|
||||||
function GetTokenPos: Integer; virtual; abstract;
|
function GetTokenPos: Integer; virtual; abstract; // 0-based
|
||||||
function IsKeyword(const AKeyword: string): boolean; virtual; // DJLP 2000-08-09
|
function IsKeyword(const AKeyword: string): boolean; virtual; // DJLP 2000-08-09
|
||||||
procedure Next; virtual; abstract;
|
procedure Next; virtual; abstract;
|
||||||
procedure NextToEol;
|
procedure NextToEol;
|
||||||
@ -886,6 +905,18 @@ begin
|
|||||||
end;
|
end;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
|
{ TSynEditLinesList }
|
||||||
|
|
||||||
|
function TSynEditLinesList.GetSynString(Index: Integer): TSynEditStringsBase;
|
||||||
|
begin
|
||||||
|
Result := TSynEditStringsBase(inherited Items[Index]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynEditLinesList.PutSynStrings(Index: Integer; const AValue: TSynEditStringsBase);
|
||||||
|
begin
|
||||||
|
inherited Items[Index] := AValue;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TSynCustomHighlighter }
|
{ TSynCustomHighlighter }
|
||||||
|
|
||||||
constructor TSynCustomHighlighter.Create(AOwner: TComponent);
|
constructor TSynCustomHighlighter.Create(AOwner: TComponent);
|
||||||
@ -893,6 +924,7 @@ begin
|
|||||||
{$IFDEF SYN_LAZARUS}
|
{$IFDEF SYN_LAZARUS}
|
||||||
FCapabilities:=GetCapabilities;
|
FCapabilities:=GetCapabilities;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
FKnownLines := TSynEditLinesList.Create;
|
||||||
inherited Create(AOwner);
|
inherited Create(AOwner);
|
||||||
fWordBreakChars := TSynWordBreakChars;
|
fWordBreakChars := TSynWordBreakChars;
|
||||||
fAttributes := TStringList.Create;
|
fAttributes := TStringList.Create;
|
||||||
@ -908,6 +940,7 @@ begin
|
|||||||
fAttributes.Free;
|
fAttributes.Free;
|
||||||
fAttrChangeHooks.Free;
|
fAttrChangeHooks.Free;
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
|
FreeAndNil(FKnownLines);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynCustomHighlighter.BeginUpdate;
|
procedure TSynCustomHighlighter.BeginUpdate;
|
||||||
@ -1215,11 +1248,24 @@ procedure TSynCustomHighlighter.SetSampleSource(Value: string);
|
|||||||
begin
|
begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynCustomHighlighter.CreateRangeList: TSynHighlighterRangeList;
|
function TSynCustomHighlighter.GetRangeIdentifier: Pointer;
|
||||||
|
begin
|
||||||
|
Result := self;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynCustomHighlighter.CreateRangeList(ALines: TSynEditStringsBase): TSynHighlighterRangeList;
|
||||||
begin
|
begin
|
||||||
Result := TSynHighlighterRangeList.Create;
|
Result := TSynHighlighterRangeList.Create;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSynCustomHighlighter.AfterAttachedToRangeList(ARangeList: TSynHighlighterRangeList);
|
||||||
|
begin // empty base
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynCustomHighlighter.BeforeDetachedFromRangeList(ARangeList: TSynHighlighterRangeList);
|
||||||
|
begin // empty base
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSynCustomHighlighter.UnhookAttrChangeEvent(ANotifyEvent: TNotifyEvent);
|
procedure TSynCustomHighlighter.UnhookAttrChangeEvent(ANotifyEvent: TNotifyEvent);
|
||||||
begin
|
begin
|
||||||
fAttrChangeHooks.Remove(TMethod(ANotifyEvent));
|
fAttrChangeHooks.Remove(TMethod(ANotifyEvent));
|
||||||
@ -1237,31 +1283,36 @@ end;
|
|||||||
|
|
||||||
procedure TSynCustomHighlighter.ScanRanges;
|
procedure TSynCustomHighlighter.ScanRanges;
|
||||||
var
|
var
|
||||||
StartIndex, EndIndex, CurrentIndex, c: Integer;
|
StartIndex, EndIndex: Integer;
|
||||||
begin
|
begin
|
||||||
StartIndex := CurrentRanges.NeedsReScanStartIndex;
|
StartIndex := CurrentRanges.NeedsReScanStartIndex;
|
||||||
if (StartIndex < 0) or (StartIndex >= CurrentRanges.Count) then exit;
|
if (StartIndex < 0) or (StartIndex >= CurrentRanges.Count) then exit;
|
||||||
EndIndex := CurrentRanges.NeedsReScanEndIndex + 1;
|
EndIndex := CurrentRanges.NeedsReScanEndIndex + 1;
|
||||||
CurrentIndex := StartIndex;
|
|
||||||
c := CurrentLines.Count;
|
|
||||||
FIsScanning := True;
|
FIsScanning := True;
|
||||||
try
|
try
|
||||||
StartAtLineIndex(CurrentIndex);
|
EndIndex := PerformScan(StartIndex, EndIndex);
|
||||||
NextToEol;
|
|
||||||
while UpdateRangeInfoAtLine(CurrentIndex) or
|
|
||||||
(CurrentIndex <= EndIndex)
|
|
||||||
do begin
|
|
||||||
inc(CurrentIndex);
|
|
||||||
if CurrentIndex = c then
|
|
||||||
break;
|
|
||||||
ContinueNextLine;
|
|
||||||
NextToEol;
|
|
||||||
end;
|
|
||||||
finally
|
finally
|
||||||
FIsScanning := False;
|
FIsScanning := False;
|
||||||
end;
|
end;
|
||||||
CurrentRanges.ClearReScanNeeded;
|
CurrentRanges.ClearReScanNeeded;
|
||||||
CurrentLines.SendHighlightChanged(StartIndex, CurrentIndex - StartIndex + 1);
|
CurrentLines.SendHighlightChanged(StartIndex, EndIndex - StartIndex + 1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynCustomHighlighter.PerformScan(StartIndex, EndIndex: Integer): Integer;
|
||||||
|
var
|
||||||
|
c: Integer;
|
||||||
|
begin
|
||||||
|
Result := StartIndex;
|
||||||
|
c := CurrentLines.Count;
|
||||||
|
StartAtLineIndex(Result);
|
||||||
|
NextToEol;
|
||||||
|
while UpdateRangeInfoAtLine(Result) or (Result <= EndIndex) do begin
|
||||||
|
inc(Result);
|
||||||
|
if Result = c then
|
||||||
|
break;
|
||||||
|
ContinueNextLine;
|
||||||
|
NextToEol;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynCustomHighlighter.ScanAllRanges;
|
procedure TSynCustomHighlighter.ScanAllRanges;
|
||||||
@ -1287,21 +1338,23 @@ begin
|
|||||||
if AValue = FCurrentLines then
|
if AValue = FCurrentLines then
|
||||||
exit;
|
exit;
|
||||||
FCurrentLines := AValue;
|
FCurrentLines := AValue;
|
||||||
FCurrentRanges := TSynHighlighterRangeList(AValue.Ranges[ClassType]);
|
FCurrentRanges := TSynHighlighterRangeList(AValue.Ranges[GetRangeIdentifier]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynCustomHighlighter.AttachToLines(Lines: TSynEditStringsBase);
|
procedure TSynCustomHighlighter.AttachToLines(Lines: TSynEditStringsBase);
|
||||||
var
|
var
|
||||||
r: TSynHighlighterRangeList;
|
r: TSynHighlighterRangeList;
|
||||||
begin
|
begin
|
||||||
r := TSynHighlighterRangeList(Lines.Ranges[ClassType]);
|
r := TSynHighlighterRangeList(Lines.Ranges[GetRangeIdentifier]);
|
||||||
if assigned(r) then
|
if assigned(r) then
|
||||||
r.IncRefCount
|
r.IncRefCount
|
||||||
else begin
|
else begin
|
||||||
r := CreateRangeList;
|
FKnownLines.Add(Lines);
|
||||||
Lines.Ranges[ClassType] := r;
|
r := CreateRangeList(Lines);
|
||||||
|
Lines.Ranges[GetRangeIdentifier] := r;
|
||||||
r.InvalidateAll;
|
r.InvalidateAll;
|
||||||
end;
|
end;
|
||||||
|
AfterAttachedToRangeList(r); // RefCount already increased
|
||||||
FCurrentLines := nil;
|
FCurrentLines := nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1309,13 +1362,15 @@ procedure TSynCustomHighlighter.DetachFromLines(Lines: TSynEditStringsBase);
|
|||||||
var
|
var
|
||||||
r: TSynHighlighterRangeList;
|
r: TSynHighlighterRangeList;
|
||||||
begin
|
begin
|
||||||
r := TSynHighlighterRangeList(Lines.Ranges[ClassType]);
|
r := TSynHighlighterRangeList(Lines.Ranges[GetRangeIdentifier]);
|
||||||
if not assigned(r) then exit;
|
if not assigned(r) then exit;
|
||||||
r.DecRefCount;
|
r.DecRefCount;
|
||||||
|
BeforeDetachedFromRangeList(r); // RefCount already decreased
|
||||||
if r.RefCount = 0 then begin
|
if r.RefCount = 0 then begin
|
||||||
Lines.Ranges[ClassType] := nil;
|
Lines.Ranges[GetRangeIdentifier] := nil;
|
||||||
r.Free;
|
r.Free;
|
||||||
end;
|
end;
|
||||||
|
FKnownLines.Remove(Lines);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynCustomHighlighter.SetDrawDividerLevel(const AValue: Integer);
|
procedure TSynCustomHighlighter.SetDrawDividerLevel(const AValue: Integer);
|
||||||
@ -1325,6 +1380,11 @@ begin
|
|||||||
//DefHighlightChange(Self);
|
//DefHighlightChange(Self);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TSynCustomHighlighter.GetKnownRanges(Index: Integer): TSynHighlighterRangeList;
|
||||||
|
begin
|
||||||
|
Result := TSynHighlighterRangeList(KnownLines[Index].Ranges[GetRangeIdentifier]);
|
||||||
|
end;
|
||||||
|
|
||||||
function TSynCustomHighlighter.GetDrawDivider(Index: integer): TSynDividerDrawConfigSetting;
|
function TSynCustomHighlighter.GetDrawDivider(Index: integer): TSynDividerDrawConfigSetting;
|
||||||
begin
|
begin
|
||||||
result := SynEmptyDividerDrawConfigSetting;
|
result := SynEmptyDividerDrawConfigSetting;
|
||||||
@ -1357,16 +1417,16 @@ begin
|
|||||||
Result := SizeOf(Pointer);
|
Result := SizeOf(Pointer);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynHighlighterRangeList.LineTextChanged(AIndex: Integer);
|
procedure TSynHighlighterRangeList.LineTextChanged(AIndex: Integer; ACount: Integer = 1);
|
||||||
begin
|
begin
|
||||||
if FNeedsReScanStartIndex < 0 then begin
|
if FNeedsReScanStartIndex < 0 then begin
|
||||||
FNeedsReScanStartIndex := AIndex;
|
FNeedsReScanStartIndex := AIndex;
|
||||||
FNeedsReScanEndIndex := AIndex;
|
FNeedsReScanEndIndex := AIndex + ACount - 1;
|
||||||
end
|
end
|
||||||
else if AIndex < FNeedsReScanStartIndex then
|
else if AIndex < FNeedsReScanStartIndex then
|
||||||
FNeedsReScanStartIndex := AIndex
|
FNeedsReScanStartIndex := AIndex
|
||||||
else if AIndex > FNeedsReScanEndIndex then
|
else if AIndex + ACount - 1 > FNeedsReScanEndIndex then
|
||||||
FNeedsReScanEndIndex := AIndex;
|
FNeedsReScanEndIndex := AIndex + ACount - 1;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynHighlighterRangeList.InsertedLines(AIndex, ACount: Integer);
|
procedure TSynHighlighterRangeList.InsertedLines(AIndex, ACount: Integer);
|
||||||
|
|||||||
@ -31,7 +31,8 @@ interface
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
SysUtils, Classes, math, LCLType,
|
SysUtils, Classes, math, LCLType,
|
||||||
SynEditTypes, SynEditTextBuffer, SynEditHighlighter, SynEditHighlighterFoldBase;
|
SynEditTypes, SynEditTextBase, SynEditTextBuffer,
|
||||||
|
SynEditHighlighter, SynEditHighlighterFoldBase;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
@ -63,7 +64,7 @@ type
|
|||||||
FXmlRangeInfoOpenPos: integer;
|
FXmlRangeInfoOpenPos: integer;
|
||||||
FXmlRangeInfoClosePos: integer;
|
FXmlRangeInfoClosePos: integer;
|
||||||
protected
|
protected
|
||||||
function CreateRangeList: TSynHighlighterRangeList; override;
|
function CreateRangeList(ALines: TSynEditStringsBase): TSynHighlighterRangeList; override;
|
||||||
function UpdateRangeInfoAtLine(Index: Integer): Boolean; override; // Returns true if range changed
|
function UpdateRangeInfoAtLine(Index: Integer): Boolean; override; // Returns true if range changed
|
||||||
|
|
||||||
function StartXmlCodeFoldBlock(ABlockType: Integer): TSynCustomCodeFoldBlock;
|
function StartXmlCodeFoldBlock(ABlockType: Integer): TSynCustomCodeFoldBlock;
|
||||||
@ -87,7 +88,7 @@ implementation
|
|||||||
const
|
const
|
||||||
MaxFoldNestDeep = 500;
|
MaxFoldNestDeep = 500;
|
||||||
|
|
||||||
function TSynCustomXmlHighlighter.CreateRangeList: TSynHighlighterRangeList;
|
function TSynCustomXmlHighlighter.CreateRangeList(ALines: TSynEditStringsBase): TSynHighlighterRangeList;
|
||||||
begin
|
begin
|
||||||
Result := TSynHighlighterXmlRangeList.Create;
|
Result := TSynHighlighterXmlRangeList.Create;
|
||||||
end;
|
end;
|
||||||
|
|||||||
@ -78,7 +78,7 @@ type
|
|||||||
procedure InsertRows(AIndex, ACount: Integer); virtual;
|
procedure InsertRows(AIndex, ACount: Integer); virtual;
|
||||||
procedure DeleteRows(AIndex, ACount: Integer); virtual;
|
procedure DeleteRows(AIndex, ACount: Integer); virtual;
|
||||||
property Capacity: Integer read FCapacity write SetCapacity;
|
property Capacity: Integer read FCapacity write SetCapacity;
|
||||||
// Count must be maintained by owner
|
// Capacity must be maintained by owner (Shrink)
|
||||||
property Count: Integer read FCount write SetCount;
|
property Count: Integer read FCount write SetCount;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ type
|
|||||||
TSynManagedStorageMem = class(TSynEditStorageMem)
|
TSynManagedStorageMem = class(TSynEditStorageMem)
|
||||||
protected
|
protected
|
||||||
// Todo: Add Flags,which updates are required
|
// Todo: Add Flags,which updates are required
|
||||||
procedure LineTextChanged(AIndex: Integer); virtual;
|
procedure LineTextChanged(AIndex: Integer; ACount: Integer = 1); virtual;
|
||||||
procedure InsertedLines(AIndex, ACount: Integer); virtual;
|
procedure InsertedLines(AIndex, ACount: Integer); virtual;
|
||||||
procedure DeletedLines(AIndex, ACount: Integer); virtual;
|
procedure DeletedLines(AIndex, ACount: Integer); virtual;
|
||||||
end;
|
end;
|
||||||
@ -98,19 +98,21 @@ type
|
|||||||
TSynManagedStorageMemList = class
|
TSynManagedStorageMemList = class
|
||||||
private
|
private
|
||||||
FStorageMemList: Array of TSynManagedStorageMem;
|
FStorageMemList: Array of TSynManagedStorageMem;
|
||||||
FClassList: Array of TClass;
|
FClassList: Array of Pointer;
|
||||||
function GetStorageMems(Index: TClass): TSynManagedStorageMem;
|
function GetStorageMems(Index: Pointer): TSynManagedStorageMem;
|
||||||
procedure SetStorageMems(Index: TClass; const AValue: TSynManagedStorageMem);
|
procedure SetStorageMems(Index: Pointer; const AValue: TSynManagedStorageMem);
|
||||||
procedure SetChildCapacities(const AValue: Integer);
|
procedure SetChildCapacities(const AValue: Integer);
|
||||||
procedure SetChildCounts(const AValue: Integer);
|
procedure SetChildCounts(const AValue: Integer);
|
||||||
public
|
public
|
||||||
|
procedure ChildInsertRows(AIndex, ACount: Integer);
|
||||||
|
procedure ChildDeleteRows(AIndex, ACount: Integer);
|
||||||
procedure CallMove(AFrom, ATo, ALen: Integer);
|
procedure CallMove(AFrom, ATo, ALen: Integer);
|
||||||
procedure CallLineTextChanged(AIndex: Integer);
|
procedure CallLineTextChanged(AIndex: Integer; ACount: Integer = 1);
|
||||||
procedure CallInsertedLines(AIndex, ACount: Integer);
|
procedure CallInsertedLines(AIndex, ACount: Integer);
|
||||||
procedure CallDeletedLines(AIndex, ACount: Integer);
|
procedure CallDeletedLines(AIndex, ACount: Integer);
|
||||||
property ChildCapacities: Integer write SetChildCapacities;
|
property ChildCapacities: Integer write SetChildCapacities;
|
||||||
property ChildCounts: Integer write SetChildCounts;
|
property ChildCounts: Integer write SetChildCounts;
|
||||||
property StorageMems[Index: TClass]: TSynManagedStorageMem
|
property StorageMems[Index: Pointer]: TSynManagedStorageMem
|
||||||
read GetStorageMems write SetStorageMems; default;
|
read GetStorageMems write SetStorageMems; default;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -118,11 +120,11 @@ type
|
|||||||
|
|
||||||
TSynEditStringsBase = class(TStrings)
|
TSynEditStringsBase = class(TStrings)
|
||||||
protected
|
protected
|
||||||
function GetRange(Index: TClass): TSynEditStorageMem; virtual; abstract;
|
function GetRange(Index: Pointer): TSynManagedStorageMem; virtual; abstract;
|
||||||
procedure PutRange(Index: TClass; const ARange: TSynEditStorageMem); virtual; abstract;
|
procedure PutRange(Index: Pointer; const ARange: TSynManagedStorageMem); virtual; abstract;
|
||||||
public
|
public
|
||||||
procedure SendHighlightChanged(aIndex, aCount: Integer); virtual; abstract;
|
procedure SendHighlightChanged(aIndex, aCount: Integer); virtual; abstract;
|
||||||
property Ranges[Index: TClass]: TSynEditStorageMem read GetRange write PutRange;
|
property Ranges[Index: Pointer]: TSynManagedStorageMem read GetRange write PutRange;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TSynEditStrings }
|
{ TSynEditStrings }
|
||||||
@ -219,8 +221,8 @@ type
|
|||||||
function GetIsUtf8 : Boolean; override;
|
function GetIsUtf8 : Boolean; override;
|
||||||
procedure SetIsUtf8(const AValue : Boolean); override;
|
procedure SetIsUtf8(const AValue : Boolean); override;
|
||||||
|
|
||||||
function GetRange(Index: TClass): TSynEditStorageMem; override;
|
function GetRange(Index: Pointer): TSynManagedStorageMem; override;
|
||||||
procedure PutRange(Index: TClass; const ARange: TSynEditStorageMem); override;
|
procedure PutRange(Index: Pointer; const ARange: TSynManagedStorageMem); override;
|
||||||
|
|
||||||
function GetAttribute(const Owner: TClass; const Index: Integer): Pointer; override;
|
function GetAttribute(const Owner: TClass; const Index: Integer): Pointer; override;
|
||||||
procedure SetAttribute(const Owner: TClass; const Index: Integer; const AValue: Pointer); override;
|
procedure SetAttribute(const Owner: TClass; const Index: Integer; const AValue: Pointer); override;
|
||||||
@ -650,12 +652,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
//Ranges
|
//Ranges
|
||||||
function TSynEditStringsLinked.GetRange(Index: TClass): TSynEditStorageMem;
|
function TSynEditStringsLinked.GetRange(Index: Pointer): TSynManagedStorageMem;
|
||||||
begin
|
begin
|
||||||
Result:= fSynStrings.Ranges[Index];
|
Result:= fSynStrings.Ranges[Index];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynEditStringsLinked.PutRange(Index: TClass; const ARange: TSynEditStorageMem);
|
procedure TSynEditStringsLinked.PutRange(Index: Pointer; const ARange: TSynManagedStorageMem);
|
||||||
begin
|
begin
|
||||||
fSynStrings.Ranges[Index] := ARange;
|
fSynStrings.Ranges[Index] := ARange;
|
||||||
end;
|
end;
|
||||||
@ -1248,7 +1250,7 @@ begin
|
|||||||
if (AIndex < 0) or (AIndex > Count) then
|
if (AIndex < 0) or (AIndex > Count) then
|
||||||
ListIndexOutOfBounds(AIndex);
|
ListIndexOutOfBounds(AIndex);
|
||||||
if Capacity < Count + ACount then
|
if Capacity < Count + ACount then
|
||||||
SetCapacity(Count + ACount);
|
SetCapacity(Count + ACount + 8);
|
||||||
if AIndex < Count then
|
if AIndex < Count then
|
||||||
Move(AIndex, AIndex + ACount, Count - AIndex);
|
Move(AIndex, AIndex + ACount, Count - AIndex);
|
||||||
Count := Count + ACount;
|
Count := Count + ACount;
|
||||||
@ -1264,6 +1266,8 @@ begin
|
|||||||
if LinesAfter > 0 then
|
if LinesAfter > 0 then
|
||||||
Move(AIndex + ACount, AIndex, LinesAfter);
|
Move(AIndex + ACount, AIndex, LinesAfter);
|
||||||
Count := Count - ACount;
|
Count := Count - ACount;
|
||||||
|
if (Capacity > 16) and (Capacity > Count * 2) then
|
||||||
|
Capacity := Capacity - (Count div 2);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynEditStorageMem.Move(AFrom, ATo, ALen: Integer);
|
procedure TSynEditStorageMem.Move(AFrom, ATo, ALen: Integer);
|
||||||
@ -1283,7 +1287,7 @@ end;
|
|||||||
|
|
||||||
{ TSynManagedStorageMem }
|
{ TSynManagedStorageMem }
|
||||||
|
|
||||||
procedure TSynManagedStorageMem.LineTextChanged(AIndex: Integer);
|
procedure TSynManagedStorageMem.LineTextChanged(AIndex: Integer; ACount: Integer = 1);
|
||||||
begin // empty base class
|
begin // empty base class
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1297,7 +1301,7 @@ end;
|
|||||||
|
|
||||||
{ TSynManagedStorageMemList }
|
{ TSynManagedStorageMemList }
|
||||||
|
|
||||||
function TSynManagedStorageMemList.GetStorageMems(Index: TClass): TSynManagedStorageMem;
|
function TSynManagedStorageMemList.GetStorageMems(Index: Pointer): TSynManagedStorageMem;
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
@ -1310,7 +1314,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynManagedStorageMemList.SetStorageMems(Index: TClass;
|
procedure TSynManagedStorageMemList.SetStorageMems(Index: Pointer;
|
||||||
const AValue: TSynManagedStorageMem);
|
const AValue: TSynManagedStorageMem);
|
||||||
var
|
var
|
||||||
i, j: Integer;
|
i, j: Integer;
|
||||||
@ -1361,6 +1365,22 @@ begin
|
|||||||
FStorageMemList[i].Count := AValue;
|
FStorageMemList[i].Count := AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSynManagedStorageMemList.ChildInsertRows(AIndex, ACount: Integer);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
for i := 0 to high(FStorageMemList) do
|
||||||
|
FStorageMemList[i].InsertRows(AIndex, ACount);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynManagedStorageMemList.ChildDeleteRows(AIndex, ACount: Integer);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
for i := 0 to high(FStorageMemList) do
|
||||||
|
FStorageMemList[i].DeleteRows(AIndex, ACount);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSynManagedStorageMemList.CallMove(AFrom, ATo, ALen: Integer);
|
procedure TSynManagedStorageMemList.CallMove(AFrom, ATo, ALen: Integer);
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
@ -1369,12 +1389,12 @@ begin
|
|||||||
FStorageMemList[i].Move(AFrom, ATo, ALen);
|
FStorageMemList[i].Move(AFrom, ATo, ALen);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynManagedStorageMemList.CallLineTextChanged(AIndex: Integer);
|
procedure TSynManagedStorageMemList.CallLineTextChanged(AIndex: Integer; ACount: Integer = 1);
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
for i := 0 to high(FStorageMemList) do
|
for i := 0 to high(FStorageMemList) do
|
||||||
FStorageMemList[i].LineTextChanged(AIndex);
|
FStorageMemList[i].LineTextChanged(AIndex, ACount);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynManagedStorageMemList.CallInsertedLines(AIndex, ACount: Integer);
|
procedure TSynManagedStorageMemList.CallInsertedLines(AIndex, ACount: Integer);
|
||||||
|
|||||||
@ -90,12 +90,12 @@ type
|
|||||||
function GetAttribute(Index: Integer; Pos: Integer; Size: Word): Pointer;
|
function GetAttribute(Index: Integer; Pos: Integer; Size: Word): Pointer;
|
||||||
function GetAttributeSize: Integer;
|
function GetAttributeSize: Integer;
|
||||||
function GetObject(Index: Integer): TObject;
|
function GetObject(Index: Integer): TObject;
|
||||||
function GetRange(Index: TClass): TSynManagedStorageMem;
|
function GetRange(Index: Pointer): TSynManagedStorageMem;
|
||||||
function GetString(Index: Integer): String;
|
function GetString(Index: Integer): String;
|
||||||
procedure SetAttribute(Index: Integer; Pos: Integer; Size: Word; const AValue: Pointer);
|
procedure SetAttribute(Index: Integer; Pos: Integer; Size: Word; const AValue: Pointer);
|
||||||
procedure SetAttributeSize(const AValue: Integer);
|
procedure SetAttributeSize(const AValue: Integer);
|
||||||
procedure SetObject(Index: Integer; const AValue: TObject);
|
procedure SetObject(Index: Integer; const AValue: TObject);
|
||||||
procedure SetRange(Index: TClass; const AValue: TSynManagedStorageMem);
|
procedure SetRange(Index: Pointer; const AValue: TSynManagedStorageMem);
|
||||||
procedure SetString(Index: Integer; const AValue: String);
|
procedure SetString(Index: Integer; const AValue: String);
|
||||||
protected
|
protected
|
||||||
procedure Move(AFrom, ATo, ALen: Integer); override;
|
procedure Move(AFrom, ATo, ALen: Integer); override;
|
||||||
@ -114,7 +114,7 @@ type
|
|||||||
read GetAttribute write SetAttribute;
|
read GetAttribute write SetAttribute;
|
||||||
property AttributeSize: Integer read GetAttributeSize write SetAttributeSize;
|
property AttributeSize: Integer read GetAttributeSize write SetAttributeSize;
|
||||||
|
|
||||||
property RangeList[Index: TClass]: TSynManagedStorageMem read GetRange write SetRange;
|
property RangeList[Index: Pointer]: TSynManagedStorageMem read GetRange write SetRange;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TSynEditStringList }
|
{ TSynEditStringList }
|
||||||
@ -163,8 +163,8 @@ type
|
|||||||
procedure IgnoreSendNotification(AReason: TSynEditNotifyReason;
|
procedure IgnoreSendNotification(AReason: TSynEditNotifyReason;
|
||||||
IncIgnore: Boolean); override;
|
IncIgnore: Boolean); override;
|
||||||
|
|
||||||
function GetRange(Index: TClass): TSynEditStorageMem; override;
|
function GetRange(Index: Pointer): TSynManagedStorageMem; override;
|
||||||
procedure PutRange(Index: TClass; const ARange: TSynEditStorageMem); override;
|
procedure PutRange(Index: Pointer; const ARange: TSynManagedStorageMem); override;
|
||||||
function GetAttribute(const Owner: TClass; const Index: Integer): Pointer; override;
|
function GetAttribute(const Owner: TClass; const Index: Integer): Pointer; override;
|
||||||
procedure SetAttribute(const Owner: TClass; const Index: Integer; const AValue: Pointer); override;
|
procedure SetAttribute(const Owner: TClass; const Index: Integer; const AValue: Pointer); override;
|
||||||
function Get(Index: integer): string; override;
|
function Get(Index: integer): string; override;
|
||||||
@ -709,7 +709,7 @@ begin
|
|||||||
Result := nil;
|
Result := nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynEditStringList.GetRange(Index: TClass): TSynEditStorageMem;
|
function TSynEditStringList.GetRange(Index: Pointer): TSynManagedStorageMem;
|
||||||
begin
|
begin
|
||||||
Result := FList.RangeList[Index];
|
Result := FList.RangeList[Index];
|
||||||
end;
|
end;
|
||||||
@ -820,9 +820,9 @@ begin
|
|||||||
EndUpdate;
|
EndUpdate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynEditStringList.PutRange(Index: TClass; const ARange: TSynEditStorageMem);
|
procedure TSynEditStringList.PutRange(Index: Pointer; const ARange: TSynManagedStorageMem);
|
||||||
begin
|
begin
|
||||||
FList.RangeList[Index] := ARange as TSynManagedStorageMem;
|
FList.RangeList[Index] := ARange;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynEditStringList.GetAttribute(const Owner: TClass; const Index: Integer): Pointer;
|
function TSynEditStringList.GetAttribute(const Owner: TClass; const Index: Integer): Pointer;
|
||||||
@ -1213,7 +1213,7 @@ begin
|
|||||||
Result := (PObject(Mem + Index * FAttributeSize + SizeOf(String)))^;
|
Result := (PObject(Mem + Index * FAttributeSize + SizeOf(String)))^;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynEditStringMemory.GetRange(Index: TClass): TSynManagedStorageMem;
|
function TSynEditStringMemory.GetRange(Index: Pointer): TSynManagedStorageMem;
|
||||||
begin
|
begin
|
||||||
Result := FRangeList[Index];
|
Result := FRangeList[Index];
|
||||||
end;
|
end;
|
||||||
@ -1223,7 +1223,7 @@ begin
|
|||||||
(PObject(Mem + Index * FAttributeSize + SizeOf(String)))^ := AValue;
|
(PObject(Mem + Index * FAttributeSize + SizeOf(String)))^ := AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynEditStringMemory.SetRange(Index: TClass; const AValue: TSynManagedStorageMem);
|
procedure TSynEditStringMemory.SetRange(Index: Pointer; const AValue: TSynManagedStorageMem);
|
||||||
begin
|
begin
|
||||||
FRangeList[Index] := AValue;
|
FRangeList[Index] := AValue;
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -58,7 +58,7 @@ uses
|
|||||||
Windows, Messages,
|
Windows, Messages,
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
Classes, Registry, Graphics, SynEditHighlighterFoldBase, SynEditMiscProcs,
|
Classes, Registry, Graphics, SynEditHighlighterFoldBase, SynEditMiscProcs,
|
||||||
SynEditTypes, SynEditHighlighter, SynEditTextBuffer,
|
SynEditTypes, SynEditHighlighter, SynEditTextBase, SynEditTextBuffer,
|
||||||
SynEditStrConst;
|
SynEditStrConst;
|
||||||
|
|
||||||
type
|
type
|
||||||
@ -414,7 +414,7 @@ type
|
|||||||
protected
|
protected
|
||||||
function GetRangeClass: TSynCustomHighlighterRangeClass; override;
|
function GetRangeClass: TSynCustomHighlighterRangeClass; override;
|
||||||
procedure CreateRootCodeFoldBlock; override;
|
procedure CreateRootCodeFoldBlock; override;
|
||||||
function CreateRangeList: TSynHighlighterRangeList; override;
|
function CreateRangeList(ALines: TSynEditStringsBase): TSynHighlighterRangeList; override;
|
||||||
function UpdateRangeInfoAtLine(Index: Integer): Boolean; override; // Returns true if range changed
|
function UpdateRangeInfoAtLine(Index: Integer): Boolean; override; // Returns true if range changed
|
||||||
|
|
||||||
function StartPascalCodeFoldBlock
|
function StartPascalCodeFoldBlock
|
||||||
@ -3366,7 +3366,7 @@ begin
|
|||||||
cfbtAsm, cfbtRegion];
|
cfbtAsm, cfbtRegion];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.CreateRangeList: TSynHighlighterRangeList;
|
function TSynPasSyn.CreateRangeList(ALines: TSynEditStringsBase): TSynHighlighterRangeList;
|
||||||
begin
|
begin
|
||||||
Result := TSynHighlighterPasRangeList.Create;
|
Result := TSynHighlighterPasRangeList.Create;
|
||||||
end;
|
end;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user