mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-30 07:44:13 +02:00
SynEdit: Ifdef highlight, more verbose assert.
git-svn-id: trunk@43064 -
This commit is contained in:
parent
82ba28e80b
commit
af8af08094
@ -115,6 +115,7 @@ type
|
|||||||
procedure SetStateByUser(AValue: Boolean);
|
procedure SetStateByUser(AValue: Boolean);
|
||||||
protected
|
protected
|
||||||
procedure SetNodeType(ANodeType: TSynMarkupIfdefNodeType);
|
procedure SetNodeType(ANodeType: TSynMarkupIfdefNodeType);
|
||||||
|
function DebugText(Short: Boolean = False): String;
|
||||||
public
|
public
|
||||||
constructor Create;
|
constructor Create;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -194,6 +195,7 @@ type
|
|||||||
protected
|
protected
|
||||||
procedure AdjustPositionOffset(AnAdjustment: integer); // Caller is responsible for staying between neighbours
|
procedure AdjustPositionOffset(AnAdjustment: integer); // Caller is responsible for staying between neighbours
|
||||||
property NextDispose: TSynSizedDifferentialAVLNode read FParent write FParent;
|
property NextDispose: TSynSizedDifferentialAVLNode read FParent write FParent;
|
||||||
|
function DebugText: String;
|
||||||
public
|
public
|
||||||
constructor Create;
|
constructor Create;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -238,6 +240,7 @@ type
|
|||||||
procedure SetScanEndLine(AValue: Integer);
|
procedure SetScanEndLine(AValue: Integer);
|
||||||
procedure SetScanEndOffs(AValue: Integer);
|
procedure SetScanEndOffs(AValue: Integer);
|
||||||
procedure SetStartLine(AValue: Integer); // Caller is responsible for staying between neighbours
|
procedure SetStartLine(AValue: Integer); // Caller is responsible for staying between neighbours
|
||||||
|
function DebugText: String;
|
||||||
public
|
public
|
||||||
procedure ClearInfo;
|
procedure ClearInfo;
|
||||||
procedure InitForNode(ANode: TSynMarkupHighIfDefLinesNode; ALine: Integer);
|
procedure InitForNode(ANode: TSynMarkupHighIfDefLinesNode; ALine: Integer);
|
||||||
@ -504,6 +507,7 @@ function dbgs(AFlag: TSynMarkupIfDefNodeFlag): String; overload;
|
|||||||
function dbgs(AFlags: SynMarkupIfDefNodeFlags): String; overload;
|
function dbgs(AFlags: SynMarkupIfDefNodeFlags): String; overload;
|
||||||
function dbgs(AFlag: TSynMarkupIfdefNodeType): String; overload;
|
function dbgs(AFlag: TSynMarkupIfdefNodeType): String; overload;
|
||||||
function dbgs(AFlag: TSynMarkupIfdefNodeStateEx): String; overload;
|
function dbgs(AFlag: TSynMarkupIfdefNodeStateEx): String; overload;
|
||||||
|
function dbgs(APeerType: TSynMarkupIfdefPeerType): String; overload;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -588,6 +592,12 @@ begin
|
|||||||
WriteStr(Result, AFlag);
|
WriteStr(Result, AFlag);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function dbgs(APeerType: TSynMarkupIfdefPeerType): String;
|
||||||
|
begin
|
||||||
|
Result := '';
|
||||||
|
WriteStr(Result, APeerType);
|
||||||
|
end;
|
||||||
|
|
||||||
{ TSynEditMarkupIfDefNodes }
|
{ TSynEditMarkupIfDefNodes }
|
||||||
|
|
||||||
function TSynEditMarkupIfDefNodes.GetMarkupInfo: TSynSelectedColor;
|
function TSynEditMarkupIfDefNodes.GetMarkupInfo: TSynSelectedColor;
|
||||||
@ -787,7 +797,7 @@ end;
|
|||||||
|
|
||||||
function TSynMarkupHighIfDefLinesNodeInfoList.GetNode(AIndex: Integer): TSynMarkupHighIfDefLinesNodeInfo;
|
function TSynMarkupHighIfDefLinesNodeInfoList.GetNode(AIndex: Integer): TSynMarkupHighIfDefLinesNodeInfo;
|
||||||
begin
|
begin
|
||||||
Assert((AIndex < Count) and (AIndex >= 0), 'TSynMarkupHighIfDefLinesNodeInfoList.GetNode Index');
|
Assert((AIndex < Count) and (AIndex >= 0), 'TSynMarkupHighIfDefLinesNodeInfoList.GetNode Index='+IntToStr(AIndex)+' Cnt='+IntToStr(Count));
|
||||||
Result := FNestOpenNodes[AIndex];
|
Result := FNestOpenNodes[AIndex];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -811,7 +821,7 @@ end;
|
|||||||
procedure TSynMarkupHighIfDefLinesNodeInfoList.SetNode( AIndex: Integer;
|
procedure TSynMarkupHighIfDefLinesNodeInfoList.SetNode( AIndex: Integer;
|
||||||
AValue: TSynMarkupHighIfDefLinesNodeInfo);
|
AValue: TSynMarkupHighIfDefLinesNodeInfo);
|
||||||
begin
|
begin
|
||||||
Assert(( AIndex < Count) and ( AIndex >= 0), 'TSynMarkupHighIfDefLinesNodeInfoList.SetNode Index');
|
Assert(( AIndex < Count) and ( AIndex >= 0), 'TSynMarkupHighIfDefLinesNodeInfoList.SetNode Index='+IntToStr(AIndex)+' Cnt='+IntToStr(Count));
|
||||||
FNestOpenNodes[ AIndex] := AValue;
|
FNestOpenNodes[ AIndex] := AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1029,7 +1039,7 @@ begin
|
|||||||
if (ClosingPeer <> nil) then
|
if (ClosingPeer <> nil) then
|
||||||
ClosingPeer.SetOpeningPeerNodeState(NodeState, NodeStateForPeer(ClosingPeer.NodeType))
|
ClosingPeer.SetOpeningPeerNodeState(NodeState, NodeStateForPeer(ClosingPeer.NodeType))
|
||||||
end;
|
end;
|
||||||
idnCommentedNode: Assert(AValue = idnUnknown, 'SetOpeningPeerNodeState for idnCommentedIfdef not possible');
|
idnCommentedNode: Assert(AValue = idnUnknown, 'SetOpeningPeerNodeState for idnCommentedIfdef not possible. '+DebugText);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1041,13 +1051,13 @@ end;
|
|||||||
procedure TSynMarkupHighIfDefEntry.SetPeer(APeerType: TSynMarkupIfdefPeerType;
|
procedure TSynMarkupHighIfDefEntry.SetPeer(APeerType: TSynMarkupIfdefPeerType;
|
||||||
ANewPeer: TSynMarkupHighIfDefEntry);
|
ANewPeer: TSynMarkupHighIfDefEntry);
|
||||||
begin
|
begin
|
||||||
assert( ((APeerType=idpOpeningPeer) and (NodeType <> idnIfdef)) OR ((APeerType=idpClosingPeer) and (NodeType <> idnEndIf)), 'Invalid peertype for this node');
|
assert( ((APeerType=idpOpeningPeer) and (NodeType <> idnIfdef)) OR ((APeerType=idpClosingPeer) and (NodeType <> idnEndIf)), 'Invalid peertype ('+dbgs(APeerType)+') for this node'+DebugText+' NEWNODE='+ANewPeer.DebugText(True));
|
||||||
assert((ANewPeer=nil) OR
|
assert((ANewPeer=nil) OR
|
||||||
((APeerType=idpOpeningPeer) and (ANewPeer.NodeType <> idnEndIf)) OR ((APeerType=idpClosingPeer) and (ANewPeer.NodeType <> idnIfdef))
|
((APeerType=idpOpeningPeer) and (ANewPeer.NodeType <> idnEndIf)) OR ((APeerType=idpClosingPeer) and (ANewPeer.NodeType <> idnIfdef))
|
||||||
, 'New peer not allowed for peertype');
|
, 'New peer not allowed for peertype ('+dbgs(APeerType)+') Node:'+DebugText+' NEWNODE='+ANewPeer.DebugText(True));
|
||||||
if FPeers[APeerType] = ANewPeer then begin
|
if FPeers[APeerType] = ANewPeer then begin
|
||||||
assert((ANewPeer = nil) or (ANewPeer.GetPeer(ReversePeerType[APeerType]) = self), 'Peer does not point back to self');
|
assert((ANewPeer = nil) or (ANewPeer.GetPeer(ReversePeerType[APeerType]) = self), 'Peer does not point back to self. Node:'+DebugText+' NEWNODE='+ANewPeer.DebugText(True));
|
||||||
assert((NodeType in [idnElse, idnElseIf]) or (FPeers[idpOpeningPeer] = nil) or (FPeers[idpClosingPeer] = nil), 'Only ELSE has 2 peers');
|
assert((NodeType in [idnElse, idnElseIf]) or (FPeers[idpOpeningPeer] = nil) or (FPeers[idpClosingPeer] = nil), 'Only ELSE has 2 peers. Node:'+DebugText+' NEWNODE='+ANewPeer.DebugText(True));
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1061,7 +1071,7 @@ begin
|
|||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
// If new peer is part of another pair, disolve that pair. This may set FPeers[APeerType] = nil, if new pair points to this node
|
// If new peer is part of another pair, disolve that pair. This may set FPeers[APeerType] = nil, if new pair points to this node
|
||||||
assert(ANewPeer.GetPeer(ReversePeerType[APeerType]) <> self, 'New peer points to this, but was not known by this / link is not bidirectional');
|
assert(ANewPeer.GetPeer(ReversePeerType[APeerType]) <> self, 'New peer points to this, but was not known by this / link is not bidirectional. Node:'+DebugText+' NEWNODE='+ANewPeer.DebugText(True));
|
||||||
ANewPeer.ClearPeerField(ReversePeerType[APeerType]);
|
ANewPeer.ClearPeerField(ReversePeerType[APeerType]);
|
||||||
|
|
||||||
ANewPeer.FPeers[ReversePeerType[APeerType]] := Self;
|
ANewPeer.FPeers[ReversePeerType[APeerType]] := Self;
|
||||||
@ -1072,7 +1082,7 @@ begin
|
|||||||
else
|
else
|
||||||
SetOpeningPeerNodeState(FPeers[APeerType].NodeState, FPeers[APeerType].NodeStateForPeer(NodeType));
|
SetOpeningPeerNodeState(FPeers[APeerType].NodeState, FPeers[APeerType].NodeStateForPeer(NodeType));
|
||||||
end;
|
end;
|
||||||
assert((NodeType in [idnElse, idnElseIf]) or (FPeers[idpOpeningPeer] = nil) or (FPeers[idpClosingPeer] = nil), 'Only ELSE has 2 peers');
|
assert((NodeType in [idnElse, idnElseIf]) or (FPeers[idpOpeningPeer] = nil) or (FPeers[idpClosingPeer] = nil), 'Only ELSE has 2 peers. Node:'+DebugText+' NEWNODE='+ANewPeer.DebugText(True));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynMarkupHighIfDefEntry.MakeDisabled;
|
procedure TSynMarkupHighIfDefEntry.MakeDisabled;
|
||||||
@ -1133,7 +1143,7 @@ end;
|
|||||||
procedure TSynMarkupHighIfDefEntry.ClearPeerField(APeerType: TSynMarkupIfdefPeerType);
|
procedure TSynMarkupHighIfDefEntry.ClearPeerField(APeerType: TSynMarkupIfdefPeerType);
|
||||||
begin
|
begin
|
||||||
if FPeers[APeerType] = nil then exit;
|
if FPeers[APeerType] = nil then exit;
|
||||||
assert(FPeers[APeerType].GetPeer(ReversePeerType[APeerType]) = self, 'ClearPeerField: Peer does not point back to self');
|
assert(FPeers[APeerType].GetPeer(ReversePeerType[APeerType]) = self, 'ClearPeerField('+dbgs(APeerType)+'): Peer does not point back to self. '+DebugText);
|
||||||
|
|
||||||
if APeerType = idpClosingPeer then
|
if APeerType = idpClosingPeer then
|
||||||
FPeers[APeerType].SetOpeningPeerNodeState(idnUnknown, idnUnknown)
|
FPeers[APeerType].SetOpeningPeerNodeState(idnUnknown, idnUnknown)
|
||||||
@ -1187,7 +1197,7 @@ procedure TSynMarkupHighIfDefEntry.SetStartColumn(AValue: Integer);
|
|||||||
begin
|
begin
|
||||||
if FStartColumn = AValue then Exit;
|
if FStartColumn = AValue then Exit;
|
||||||
FStartColumn := AValue;
|
FStartColumn := AValue;
|
||||||
Assert(AValue>0, 'Startcol negative');
|
Assert(AValue>0, 'Startcol negative'+DebugText);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynMarkupHighIfDefEntry.SetStateByUser(AValue: Boolean);
|
procedure TSynMarkupHighIfDefEntry.SetStateByUser(AValue: Boolean);
|
||||||
@ -1206,6 +1216,26 @@ begin
|
|||||||
ApplyNodeStateToLine;
|
ApplyNodeStateToLine;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TSynMarkupHighIfDefEntry.DebugText(Short: Boolean): String;
|
||||||
|
begin
|
||||||
|
If Self = nil then
|
||||||
|
exit('NODE IS NIL');
|
||||||
|
Result := Format('Line=%d NType=%s State=%s OpenState=%s Flags=%s ' +
|
||||||
|
' StartCol=%d EndCol=%d',
|
||||||
|
[FLine, dbgs(FNodeType), dbgs(FNodeState), dbgs(FOpeningPeerNodeState) ,
|
||||||
|
dbgs(FNodeFlags), FStartColumn, FEndColumn]
|
||||||
|
);
|
||||||
|
if Short or (FPeers[idpOpeningPeer] = nil) then
|
||||||
|
Result := Result + ' OpenPeer='+dbgs(FPeers[idpOpeningPeer])
|
||||||
|
else
|
||||||
|
Result := Result + ' OpenPeer='+FPeers[idpOpeningPeer].DebugText(True);
|
||||||
|
|
||||||
|
if Short or (FPeers[idpClosingPeer] = nil) then
|
||||||
|
Result := Result + ' ClosePeer='+dbgs(FPeers[idpClosingPeer])
|
||||||
|
else
|
||||||
|
Result := Result + ' OpenPeer='+FPeers[idpClosingPeer].DebugText(True);
|
||||||
|
end;
|
||||||
|
|
||||||
function TSynMarkupHighIfDefEntry.NodeStateForPeer(APeerType: TSynMarkupIfdefNodeType): TSynMarkupIfdefNodeStateEx;
|
function TSynMarkupHighIfDefEntry.NodeStateForPeer(APeerType: TSynMarkupIfdefNodeType): TSynMarkupIfdefNodeStateEx;
|
||||||
const
|
const
|
||||||
NodeStateMap: array [Boolean] of TSynMarkupIfdefNodeStateEx =
|
NodeStateMap: array [Boolean] of TSynMarkupIfdefNodeStateEx =
|
||||||
@ -1214,7 +1244,7 @@ const
|
|||||||
(idnTempDisabled, idnTempEnabled); // False, True
|
(idnTempDisabled, idnTempEnabled); // False, True
|
||||||
begin
|
begin
|
||||||
Result := idnUnknown;
|
Result := idnUnknown;
|
||||||
Assert((NodeType <> APeerType) or (NodeType = idnElseIf), 'NodeStateForPeer: NodeType <> APeerType');
|
Assert((NodeType <> APeerType) or (NodeType = idnElseIf), 'NodeStateForPeer: NodeType <> APeerType'+dbgs(APeerType)+' Node:'+DebugText);
|
||||||
case NodeState of
|
case NodeState of
|
||||||
idnEnabled: begin
|
idnEnabled: begin
|
||||||
case NodeType of
|
case NodeType of
|
||||||
@ -1328,8 +1358,8 @@ end;
|
|||||||
|
|
||||||
procedure TSynMarkupHighIfDefLinesNode.AdjustPositionOffset(AnAdjustment: integer);
|
procedure TSynMarkupHighIfDefLinesNode.AdjustPositionOffset(AnAdjustment: integer);
|
||||||
begin
|
begin
|
||||||
Assert((Successor = nil) or (GetPosition + AnAdjustment < Successor.GetPosition), 'GetPosition + AnAdjustment < Successor.GetPosition');
|
Assert((Successor = nil) or (GetPosition + AnAdjustment < Successor.GetPosition), 'GetPosition + AnAdjustment < Successor.GetPosition '+DebugText);
|
||||||
Assert((Precessor = nil) or (GetPosition + AnAdjustment > Precessor.GetPosition), 'GetPosition + AnAdjustment > Precessor.GetPosition');
|
Assert((Precessor = nil) or (GetPosition + AnAdjustment > Precessor.GetPosition), 'GetPosition + AnAdjustment > Precessor.GetPosition '+DebugText);
|
||||||
FPositionOffset := FPositionOffset + AnAdjustment;
|
FPositionOffset := FPositionOffset + AnAdjustment;
|
||||||
if FLeft <> nil then
|
if FLeft <> nil then
|
||||||
TSynMarkupHighIfDefLinesNode(FLeft).FPositionOffset :=
|
TSynMarkupHighIfDefLinesNode(FLeft).FPositionOffset :=
|
||||||
@ -1339,6 +1369,17 @@ begin
|
|||||||
TSynMarkupHighIfDefLinesNode(FRight).FPositionOffset - AnAdjustment;
|
TSynMarkupHighIfDefLinesNode(FRight).FPositionOffset - AnAdjustment;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TSynMarkupHighIfDefLinesNode.DebugText: String;
|
||||||
|
begin
|
||||||
|
if self = nil then
|
||||||
|
exit('NODE IN NIL');
|
||||||
|
Result := Format('Pos=%d Flags=%s ECnt=%d LastEOffs=%d ScanEndOffs=%d ' +
|
||||||
|
' DisEOpen=%d DisEClose=%d',
|
||||||
|
[GetPosition, dbgs(FLineFlags), FEntryCount, FLastEntryEndLineOffs,
|
||||||
|
FScanEndOffs, FDisabledEntryOpenCount, FDisabledEntryCloseCount
|
||||||
|
]);
|
||||||
|
end;
|
||||||
|
|
||||||
constructor TSynMarkupHighIfDefLinesNode.Create;
|
constructor TSynMarkupHighIfDefLinesNode.Create;
|
||||||
begin
|
begin
|
||||||
FSize := 1; // used for index
|
FSize := 1; // used for index
|
||||||
@ -1356,7 +1397,7 @@ begin
|
|||||||
FLineFlags := [idlDisposed] + FLineFlags * [idlInGlobalClear];
|
FLineFlags := [idlDisposed] + FLineFlags * [idlInGlobalClear];
|
||||||
while EntryCount > 0 do
|
while EntryCount > 0 do
|
||||||
DeletEntry(EntryCount-1, True);
|
DeletEntry(EntryCount-1, True);
|
||||||
assert((idlInGlobalClear in LineFlags) or ((FDisabledEntryOpenCount =0) and (FDisabledEntryCloseCount = 0)), 'no close count left over');
|
assert((idlInGlobalClear in LineFlags) or ((FDisabledEntryOpenCount =0) and (FDisabledEntryCloseCount = 0)), 'no close count left over'+DebugText);
|
||||||
FDisabledEntryOpenCount := 0;
|
FDisabledEntryOpenCount := 0;
|
||||||
FDisabledEntryCloseCount := 0;
|
FDisabledEntryCloseCount := 0;
|
||||||
end;
|
end;
|
||||||
@ -1367,11 +1408,11 @@ var
|
|||||||
begin
|
begin
|
||||||
c := EntryCount;
|
c := EntryCount;
|
||||||
EntryCount := c + 1;
|
EntryCount := c + 1;
|
||||||
assert(FEntries[c]=nil, 'FEntries[c]=nil');
|
assert(FEntries[c]=nil, 'FEntries[c]=nil Aindex='+IntToStr(AIndex)+' '+DebugText);
|
||||||
Result := TSynMarkupHighIfDefEntry.Create;
|
Result := TSynMarkupHighIfDefEntry.Create;
|
||||||
Result.Line := Self;
|
Result.Line := Self;
|
||||||
if (AIndex >= 0) then begin
|
if (AIndex >= 0) then begin
|
||||||
Assert(AIndex <= c, 'Add node index <= count');
|
Assert(AIndex <= c, 'Add node index ('+IntToStr(AIndex)+') <= count c='+IntToStr(c)+' '+DebugText);
|
||||||
while c > AIndex do begin
|
while c > AIndex do begin
|
||||||
FEntries[c] := FEntries[c - 1];
|
FEntries[c] := FEntries[c - 1];
|
||||||
dec(c);
|
dec(c);
|
||||||
@ -1382,7 +1423,7 @@ end;
|
|||||||
|
|
||||||
procedure TSynMarkupHighIfDefLinesNode.DeletEntry(AIndex: Integer; AFree: Boolean);
|
procedure TSynMarkupHighIfDefLinesNode.DeletEntry(AIndex: Integer; AFree: Boolean);
|
||||||
begin
|
begin
|
||||||
Assert((AIndex >= 0) and (AIndex < FEntryCount), 'DeletEntry');
|
Assert((AIndex >= 0) and (AIndex < FEntryCount), 'DeletEntry Aindex='+IntToStr(AIndex)+' '+DebugText);
|
||||||
if AFree then
|
if AFree then
|
||||||
FEntries[AIndex].Free
|
FEntries[AIndex].Free
|
||||||
else
|
else
|
||||||
@ -1411,12 +1452,21 @@ end;
|
|||||||
|
|
||||||
procedure TSynMarkupHighIfDefLinesNodeInfo.SetStartLine(AValue: Integer);
|
procedure TSynMarkupHighIfDefLinesNodeInfo.SetStartLine(AValue: Integer);
|
||||||
begin
|
begin
|
||||||
Assert(FNode <> nil, 'TSynMarkupHighIfDefLinesNodeInfo.SetStartLine has node');
|
Assert(FNode <> nil, 'TSynMarkupHighIfDefLinesNodeInfo.SetStartLine has node '+DebugText);
|
||||||
if FStartLine = AValue then Exit;
|
if FStartLine = AValue then Exit;
|
||||||
FNode.AdjustPositionOffset(AValue - FStartLine);
|
FNode.AdjustPositionOffset(AValue - FStartLine);
|
||||||
FStartLine := AValue;
|
FStartLine := AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TSynMarkupHighIfDefLinesNodeInfo.DebugText: String;
|
||||||
|
begin
|
||||||
|
Result := ' Startline='+IntToStr(FStartLine);
|
||||||
|
if FNode <> nil then
|
||||||
|
Result := Result + ' '+FNode.DebugText
|
||||||
|
else
|
||||||
|
Result := Result + ' Node is nil';
|
||||||
|
end;
|
||||||
|
|
||||||
function TSynMarkupHighIfDefLinesNodeInfo.GetLineFlags: SynMarkupIfDefLineFlags;
|
function TSynMarkupHighIfDefLinesNodeInfo.GetLineFlags: SynMarkupIfDefLineFlags;
|
||||||
begin
|
begin
|
||||||
if not HasNode then
|
if not HasNode then
|
||||||
@ -1440,7 +1490,7 @@ end;
|
|||||||
|
|
||||||
function TSynMarkupHighIfDefLinesNodeInfo.GetEntry(AIndex: Integer): TSynMarkupHighIfDefEntry;
|
function TSynMarkupHighIfDefLinesNodeInfo.GetEntry(AIndex: Integer): TSynMarkupHighIfDefEntry;
|
||||||
begin
|
begin
|
||||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.GetEntry');
|
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.GetEntry'+DebugText);
|
||||||
Result := FNode.Entry[AIndex];
|
Result := FNode.Entry[AIndex];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1471,31 +1521,31 @@ end;
|
|||||||
procedure TSynMarkupHighIfDefLinesNodeInfo.SetEntry(AIndex: Integer;
|
procedure TSynMarkupHighIfDefLinesNodeInfo.SetEntry(AIndex: Integer;
|
||||||
AValue: TSynMarkupHighIfDefEntry);
|
AValue: TSynMarkupHighIfDefEntry);
|
||||||
begin
|
begin
|
||||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetEntry');
|
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetEntry'+DebugText);
|
||||||
FNode.Entry[AIndex] := AValue;
|
FNode.Entry[AIndex] := AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynMarkupHighIfDefLinesNodeInfo.SetEntryCount(AValue: Integer);
|
procedure TSynMarkupHighIfDefLinesNodeInfo.SetEntryCount(AValue: Integer);
|
||||||
begin
|
begin
|
||||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetEntryCount');
|
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetEntryCount'+DebugText);
|
||||||
FNode.EntryCount := AValue;
|
FNode.EntryCount := AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynMarkupHighIfDefLinesNodeInfo.SetLastEntryEndLineOffs(AValue: Integer);
|
procedure TSynMarkupHighIfDefLinesNodeInfo.SetLastEntryEndLineOffs(AValue: Integer);
|
||||||
begin
|
begin
|
||||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetEndLineOffs');
|
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetEndLineOffs'+DebugText);
|
||||||
FNode.LastEntryEndLineOffs := AValue;
|
FNode.LastEntryEndLineOffs := AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynMarkupHighIfDefLinesNodeInfo.SetScanEndLine(AValue: Integer);
|
procedure TSynMarkupHighIfDefLinesNodeInfo.SetScanEndLine(AValue: Integer);
|
||||||
begin
|
begin
|
||||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetScanEndLine');
|
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetScanEndLine'+DebugText);
|
||||||
ScanEndOffs := AValue - StartLine;
|
ScanEndOffs := AValue - StartLine;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynMarkupHighIfDefLinesNodeInfo.SetScanEndOffs(AValue: Integer);
|
procedure TSynMarkupHighIfDefLinesNodeInfo.SetScanEndOffs(AValue: Integer);
|
||||||
begin
|
begin
|
||||||
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetScanEndOffs');
|
Assert(HasNode, 'HasNode for TSynMarkupHighIfDefLinesNodeInfo.SetScanEndOffs'+DebugText);
|
||||||
FNode.ScanEndOffs := AValue;
|
FNode.ScanEndOffs := AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1570,7 +1620,7 @@ end;
|
|||||||
|
|
||||||
function TSynMarkupHighIfDefLinesNodeInfo.NestMinimumDepthAtNode: Integer;
|
function TSynMarkupHighIfDefLinesNodeInfo.NestMinimumDepthAtNode: Integer;
|
||||||
begin
|
begin
|
||||||
assert(FTree <> nil, 'NestWinimumDepthAtNode has tree');
|
assert(FTree <> nil, 'NestWinimumDepthAtNode has tree'+DebugText);
|
||||||
if FCacheNestMinimum < 0 then
|
if FCacheNestMinimum < 0 then
|
||||||
FCacheNestMinimum :=
|
FCacheNestMinimum :=
|
||||||
FTree.GetHighLighterWithLines.FoldBlockMinLevel(ToIdx(StartLine), FOLDGROUP_IFDEF,
|
FTree.GetHighLighterWithLines.FoldBlockMinLevel(ToIdx(StartLine), FOLDGROUP_IFDEF,
|
||||||
@ -1580,7 +1630,7 @@ end;
|
|||||||
|
|
||||||
function TSynMarkupHighIfDefLinesNodeInfo.NestDepthAtNodeStart: Integer;
|
function TSynMarkupHighIfDefLinesNodeInfo.NestDepthAtNodeStart: Integer;
|
||||||
begin
|
begin
|
||||||
assert(FTree <> nil, 'NestDepthAtNodeStart has tree');
|
assert(FTree <> nil, 'NestDepthAtNodeStart has tree'+DebugText);
|
||||||
if FCacheNestStart < 0 then
|
if FCacheNestStart < 0 then
|
||||||
FCacheNestStart :=
|
FCacheNestStart :=
|
||||||
FTree.GetHighLighterWithLines.FoldBlockEndLevel(ToIdx(StartLine)-1, FOLDGROUP_IFDEF,
|
FTree.GetHighLighterWithLines.FoldBlockEndLevel(ToIdx(StartLine)-1, FOLDGROUP_IFDEF,
|
||||||
@ -1590,7 +1640,7 @@ end;
|
|||||||
|
|
||||||
function TSynMarkupHighIfDefLinesNodeInfo.NestDepthAtNodeEnd: Integer;
|
function TSynMarkupHighIfDefLinesNodeInfo.NestDepthAtNodeEnd: Integer;
|
||||||
begin
|
begin
|
||||||
assert(FTree <> nil, 'NestDepthAtNodeEnd has tree');
|
assert(FTree <> nil, 'NestDepthAtNodeEnd has tree'+DebugText);
|
||||||
if FCacheNestEnd < 0 then
|
if FCacheNestEnd < 0 then
|
||||||
FCacheNestEnd :=
|
FCacheNestEnd :=
|
||||||
FTree.GetHighLighterWithLines.FoldBlockEndLevel(ToIdx(StartLine), FOLDGROUP_IFDEF,
|
FTree.GetHighLighterWithLines.FoldBlockEndLevel(ToIdx(StartLine), FOLDGROUP_IFDEF,
|
||||||
@ -1607,7 +1657,7 @@ begin
|
|||||||
|
|
||||||
if ScanEndOffs >= 0 then begin
|
if ScanEndOffs >= 0 then begin
|
||||||
Result := StartLine + ScanEndOffs;
|
Result := StartLine + ScanEndOffs;
|
||||||
assert((not ANextNode.HasNode) or (Result<ANextNode.StartLine), '(ANextNode=nil) or (Result<ANextNode.StartLine)');
|
assert((not ANextNode.HasNode) or (Result<ANextNode.StartLine), '(ANextNode=nil) or (Result<ANextNode.StartLine)'+DebugText);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if ANextNode.HasNode then
|
if ANextNode.HasNode then
|
||||||
@ -1714,7 +1764,7 @@ procedure TSynMarkupHighIfDefLinesTree.MaybeExtendNodeBackward(var ANode: TSynMa
|
|||||||
var
|
var
|
||||||
Line: Integer;
|
Line: Integer;
|
||||||
begin
|
begin
|
||||||
Assert(ANode.HasNode, 'ANode.HasNode in MaybeExtendNodeDownwards');
|
Assert(ANode.HasNode, 'ANode.HasNode in MaybeExtendNodeDownwards'+ANode.DebugText+ ' Stopline='+IntToStr(AStopAtLine));
|
||||||
MaybeValidateNode(ANode);
|
MaybeValidateNode(ANode);
|
||||||
if (ANode.EntryCount = 0) then begin
|
if (ANode.EntryCount = 0) then begin
|
||||||
// ANode is a Scan-Start-Marker and may be extended downto StartLine
|
// ANode is a Scan-Start-Marker and may be extended downto StartLine
|
||||||
@ -2588,7 +2638,7 @@ begin
|
|||||||
|
|
||||||
LogStartX := ToPos(fn.LogXStart)-1; // LogXStart is at "$", we need "{"
|
LogStartX := ToPos(fn.LogXStart)-1; // LogXStart is at "$", we need "{"
|
||||||
if (LogStartX < 1) or (LogStartX > LineLen) then begin
|
if (LogStartX < 1) or (LogStartX > LineLen) then begin
|
||||||
assert(false, '(LogStartX < 1) or (LogStartX > LineLen) ');
|
assert(false, '(LogStartX < 1) or (LogStartX > LineLen) LogX='+IntToStr(LogStartX)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||||
continue;
|
continue;
|
||||||
end;
|
end;
|
||||||
// assert(LogStartX >= LogEndX, 'ifdef xpos found before end of previous ifdef');
|
// assert(LogStartX >= LogEndX, 'ifdef xpos found before end of previous ifdef');
|
||||||
@ -2598,39 +2648,39 @@ begin
|
|||||||
case TheDict.GetMatchAtChar(@LineTextLower[LogStartX], LineLen + 1 - LogStartX) of
|
case TheDict.GetMatchAtChar(@LineTextLower[LogStartX], LineLen + 1 - LogStartX) of
|
||||||
1: // ifdef
|
1: // ifdef
|
||||||
begin
|
begin
|
||||||
assert(sfaOpen in fn.FoldAction, 'sfaOpen in fn.FoldAction');
|
assert(sfaOpen in fn.FoldAction, 'sfaOpen in fn.FoldAction LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||||
NType := idnIfdef;
|
NType := idnIfdef;
|
||||||
//inc(RelNestDepthNext);
|
//inc(RelNestDepthNext);
|
||||||
end;
|
end;
|
||||||
2: // else
|
2: // else
|
||||||
begin
|
begin
|
||||||
assert(i < c, '$ELSE i < c');
|
assert(i < c, '$ELSE i < c LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||||
inc(i);
|
inc(i);
|
||||||
fn2 := FoldNodeInfoList[i];
|
fn2 := FoldNodeInfoList[i];
|
||||||
assert(sfaClose in fn.FoldAction, 'sfaClose in fn.FoldAction');
|
assert(sfaClose in fn.FoldAction, 'sfaClose in fn.FoldAction LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||||
assert(sfaOpen in fn2.FoldAction, 'sfaOpen in fn2.FoldAction');
|
assert(sfaOpen in fn2.FoldAction, 'sfaOpen in fn2.FoldAction LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||||
assert(fn.LogXStart = fn2.LogXStart, 'sfaOpen in fn2.FoldAction');
|
assert(fn.LogXStart = fn2.LogXStart, 'sfaOpen in fn2.FoldAction LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||||
NType := idnElse;
|
NType := idnElse;
|
||||||
end;
|
end;
|
||||||
3: // endif
|
3: // endif
|
||||||
begin
|
begin
|
||||||
assert(sfaClose in fn.FoldAction, 'sfaOpen in fn.FoldAction');
|
assert(sfaClose in fn.FoldAction, 'sfaOpen in fn.FoldAction LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||||
NType := idnEndIf;
|
NType := idnEndIf;
|
||||||
//dec(RelNestDepthNext);
|
//dec(RelNestDepthNext);
|
||||||
end;
|
end;
|
||||||
4: // ElseIf
|
4: // ElseIf
|
||||||
begin
|
begin
|
||||||
assert(i < c, '$ELSE i < c');
|
assert(i < c, '$ELSE i < c LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||||
inc(i);
|
inc(i);
|
||||||
fn2 := FoldNodeInfoList[i];
|
fn2 := FoldNodeInfoList[i];
|
||||||
assert(sfaClose in fn.FoldAction, 'sfaClose in fn.FoldAction');
|
assert(sfaClose in fn.FoldAction, 'sfaClose in fn.FoldAction LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||||
assert(sfaOpen in fn2.FoldAction, 'sfaOpen in fn2.FoldAction');
|
assert(sfaOpen in fn2.FoldAction, 'sfaOpen in fn2.FoldAction LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||||
assert(fn.LogXStart = fn2.LogXStart, 'sfaOpen in fn2.FoldAction');
|
assert(fn.LogXStart = fn2.LogXStart, 'sfaOpen in fn2.FoldAction LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||||
NType := idnElseIf;
|
NType := idnElseIf;
|
||||||
end;
|
end;
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
assert(false, 'not found ifdef');
|
assert(false, 'not found ifdef LogX='+IntToStr(LogStartX)+ ' FldAct='+dbgs(fn.FoldAction)+ ' Line='+IntToStr(ALine)+' Txt='+LineTextLower);
|
||||||
continue;
|
continue;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user