mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 15:39:32 +02:00
SynEdit: Markup fold color, debugln/ifdef, patch 18 from issue #30421 by Pascal R.
git-svn-id: trunk@54038 -
This commit is contained in:
parent
569ab1781a
commit
4b29d6ac2a
@ -132,6 +132,7 @@ uses
|
|||||||
SynEditMiscProcs,
|
SynEditMiscProcs,
|
||||||
{$IFDEF SynEditMarkupFoldColoringDebug}
|
{$IFDEF SynEditMarkupFoldColoringDebug}
|
||||||
SynHighlighterPas,
|
SynHighlighterPas,
|
||||||
|
strutils,
|
||||||
{$endif}
|
{$endif}
|
||||||
Dialogs;
|
Dialogs;
|
||||||
|
|
||||||
@ -362,6 +363,9 @@ begin
|
|||||||
i := 0;
|
i := 0;
|
||||||
while i < NestCount do begin
|
while i < NestCount do begin
|
||||||
TmpNode := FNestList.HLNode[i];
|
TmpNode := FNestList.HLNode[i];
|
||||||
|
{$IFDEF SynEditMarkupFoldColoringDebug}
|
||||||
|
//DebugLn(' O: %s %s %s', [IfThen(sfaOutline in TmpNode.FoldAction, 'X', '-'), IfThen(sfaClose in TmpNode.FoldAction, 'C ', IfThen(sfaOpen in TmpNode.FoldAction, 'O ', '??')),FoldTypeToStr(TmpNode.FoldType)]);
|
||||||
|
{$ENDIF}
|
||||||
if (sfaOutline in TmpNode.FoldAction)
|
if (sfaOutline in TmpNode.FoldAction)
|
||||||
and not (sfaInvalid in TmpNode.FoldAction) then
|
and not (sfaInvalid in TmpNode.FoldAction) then
|
||||||
//avoid bug of IncludeOpeningOnLine := False;
|
//avoid bug of IncludeOpeningOnLine := False;
|
||||||
@ -418,16 +422,22 @@ var
|
|||||||
var x,j : integer;
|
var x,j : integer;
|
||||||
begin
|
begin
|
||||||
x := ANode.LogXStart + 1;
|
x := ANode.LogXStart + 1;
|
||||||
if ANode.LogXStart < ANode.LogXEnd then
|
if ANode.LogXStart < ANode.LogXEnd then begin
|
||||||
for j := 0 to FFoldColorInfosCount - 1 do
|
{$IFDEF SynEditMarkupFoldColoringDebug}
|
||||||
if (FFoldColorInfos[j].X = x)
|
//DebugLn(' %d < %d', [ANode.LogXStart, ANode.LogXEnd]);
|
||||||
and (FFoldColorInfos[j].Border)
|
{$ENDIF}
|
||||||
and (FFoldColorInfos[j].SrcNode.FoldType = ANode.FoldType )
|
for j := 0 to FFoldColorInfosCount - 1 do
|
||||||
and (FFoldColorInfos[j].SrcNode.FoldLvlEnd = ANode.FoldLvlStart )
|
if (FFoldColorInfos[j].X = x)
|
||||||
then begin
|
and (FFoldColorInfos[j].Border)
|
||||||
FFoldColorInfos[j].X2 := ANode.LogXEnd + 1;
|
and (FFoldColorInfos[j].SrcNode.FoldType = ANode.FoldType )
|
||||||
FFoldColorInfos[j].Border := False
|
and (FFoldColorInfos[j].SrcNode.FoldLvlEnd = ANode.FoldLvlStart ) then begin
|
||||||
end;
|
{$IFDEF SynEditMarkupFoldColoringDebug}
|
||||||
|
//DebugLn(' X2: %d->%d', [FFoldColorInfos[j].X2, ANode.LogXEnd + 1]);
|
||||||
|
{$ENDIF}
|
||||||
|
FFoldColorInfos[j].X2 := ANode.LogXEnd + 1;
|
||||||
|
FFoldColorInfos[j].Border := False
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
SetFoldColorInfosCount(FFoldColorInfosCount + 1);
|
SetFoldColorInfosCount(FFoldColorInfosCount + 1);
|
||||||
with FFoldColorInfos[FFoldColorInfosCount - 1] do begin
|
with FFoldColorInfos[FFoldColorInfosCount - 1] do begin
|
||||||
@ -467,6 +477,11 @@ begin
|
|||||||
repeat
|
repeat
|
||||||
TmpNode := NodeList[i];
|
TmpNode := NodeList[i];
|
||||||
|
|
||||||
|
{$IFDEF SynEditMarkupFoldColoringDebug}
|
||||||
|
//if not (sfaInvalid in TmpNode.FoldAction) then
|
||||||
|
// DebugLn(' C: %s %s', [IfThen(sfaClose in TmpNode.FoldAction, 'C ', IfThen(sfaOpen in TmpNode.FoldAction, 'O ', '??')),FoldTypeToStr(TmpNode.FoldType)]);
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
if not (sfaInvalid in TmpNode.FoldAction)
|
if not (sfaInvalid in TmpNode.FoldAction)
|
||||||
and (sfaOutline in TmpNode.FoldAction) then begin
|
and (sfaOutline in TmpNode.FoldAction) then begin
|
||||||
if sfaOpen in TmpNode.FoldAction then begin
|
if sfaOpen in TmpNode.FoldAction then begin
|
||||||
@ -482,6 +497,10 @@ begin
|
|||||||
// inc(lvl);
|
// inc(lvl);
|
||||||
|
|
||||||
AddHighlight(TmpNode);
|
AddHighlight(TmpNode);
|
||||||
|
{$IFDEF SynEditMarkupFoldColoringDebug}
|
||||||
|
//with FFoldColorInfos[FFoldColorInfosCount - 1] do
|
||||||
|
// DebugLn(' %d-%d', [x, x2]);
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
//if (FFoldColorInfosCount - 1 > 0)
|
//if (FFoldColorInfosCount - 1 > 0)
|
||||||
//and (FFoldColorInfos[FFoldColorInfosCount - 1].X = FFoldColorInfos[FFoldColorInfosCount - 2].X) then
|
//and (FFoldColorInfos[FFoldColorInfosCount - 1].X = FFoldColorInfos[FFoldColorInfosCount - 2].X) then
|
||||||
@ -527,6 +546,10 @@ begin
|
|||||||
end;
|
end;
|
||||||
if Found then begin
|
if Found then begin
|
||||||
AddHighlight(TmpNode);
|
AddHighlight(TmpNode);
|
||||||
|
{$IFDEF SynEditMarkupFoldColoringDebug}
|
||||||
|
//with FFoldColorInfos[FFoldColorInfosCount - 1] do
|
||||||
|
// DebugLn(' %d-%d', [x, x2]);
|
||||||
|
{$ENDIF}
|
||||||
with FFoldColorInfos[FFoldColorInfosCount - 1] do begin
|
with FFoldColorInfos[FFoldColorInfosCount - 1] do begin
|
||||||
LevelBefore := lvlB;
|
LevelBefore := lvlB;
|
||||||
LevelAfter := lvlA;
|
LevelAfter := lvlA;
|
||||||
@ -570,6 +593,12 @@ begin
|
|||||||
DoMarkupParentFoldAtRow(aRow);
|
DoMarkupParentFoldAtRow(aRow);
|
||||||
DoMarkupParentCloseFoldAtRow(aRow);
|
DoMarkupParentCloseFoldAtRow(aRow);
|
||||||
|
|
||||||
|
{$IFDEF SynEditMarkupFoldColoringDebug}
|
||||||
|
for i := 0 to FFoldColorInfosCount - 1 do with FFoldColorInfos[i] do begin
|
||||||
|
DebugLn(' %.5d %.2d-%.2d: %d - %s %s', [y, x, X2, ColorIdx, IfThen(sfaClose in SrcNode.FoldAction, 'C ', IfThen(sfaOpen in SrcNode.FoldAction, 'O ', '??')),FoldTypeToStr(SrcNode.FoldType)]);
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
// delete parents with bigger x
|
// delete parents with bigger x
|
||||||
// to keep out mis indented blocks
|
// to keep out mis indented blocks
|
||||||
LastX := MaxInt;
|
LastX := MaxInt;
|
||||||
@ -713,14 +742,14 @@ begin
|
|||||||
{$IFDEF SynEditMarkupFoldColoringDebug}
|
{$IFDEF SynEditMarkupFoldColoringDebug}
|
||||||
//DebugLn(' Nodes at Start:');
|
//DebugLn(' Nodes at Start:');
|
||||||
//for i := 0 to length(lStartNestList) - 1 do with lStartNestList[i] do
|
//for i := 0 to length(lStartNestList) - 1 do with lStartNestList[i] do
|
||||||
// DebugLn(' x=%.03d l=%.5d %s %s %s %s lvl=%d/%d endline=%d (cache) -> %d (HL)', [LogXStart, ToPos(LineIndex), IfThen(sfaOpen in FoldAction, 'O', IfThen(sfaClose in FoldAction, 'C', ' ')), IfThen(sfaOutlineKeepLevel{OnSameLine} in FoldAction ,'K', ' '), IfThen(sfaOutlineForceIndent in FoldAction, '+', IfThen(sfaOutlineMergeParent in FoldAction, '-', ' ')) ,FoldTypeToStr(FoldType), FoldLvlStart, FoldLvlEnd, FEndLine[LineIndex], ToPos(FHighlighter.FoldEndLine(LineIndex, 0))]);
|
// DebugLn(' x=%.03d l=%.5d %s %s %s %s lvl=%d/%d endline=%d (cache) -> %d (HL)', [LogXStart, ToPos(LineIndex), IfThen(sfaOpen in FoldAction, 'O', IfThen(sfaClose in FoldAction, 'C', ' ')), IfThen(sfaOutlineKeepLevel{OnSameLine} in FoldAction ,'K', ' '), IfThen(sfaOutlineForceIndent in FoldAction, '+', IfThen(sfaOutlineMergeParent in FoldAction, '-', ' ')) ,FoldTypeToStr(FoldType), FoldLvlStart, FoldLvlEnd, ToPos(NodeIndex), ToPos(FHighlighter.FoldEndLine(LineIndex, 0))]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
FillNestList(lEndNestList, EndLine + 1, FNestList);
|
FillNestList(lEndNestList, EndLine + 1, FNestList);
|
||||||
{$IFDEF SynEditMarkupFoldColoringDebug}
|
{$IFDEF SynEditMarkupFoldColoringDebug}
|
||||||
//DebugLn(' Nodes at End:');
|
//DebugLn(' Nodes at End:');
|
||||||
//for i := 0 to length(lEndNestList) - 1 do with lEndNestList[i] do
|
//for i := 0 to length(lEndNestList) - 1 do with lEndNestList[i] do
|
||||||
// DebugLn(' x=%.03d l=%.5d %s %s %s %s lvl=%d/%d endline=%d (cache) -> %d (HL)', [LogXStart, ToPos(LineIndex), IfThen(sfaOpen in FoldAction, 'O', IfThen(sfaClose in FoldAction, 'C', ' ')), IfThen(sfaOutlineKeepLevel{OnSameLine} in FoldAction ,'K', ' '), IfThen(sfaOutlineForceIndent in FoldAction, '+', IfThen(sfaOutlineMergeParent in FoldAction, '-', ' ')) ,FoldTypeToStr(FoldType), FoldLvlStart, FoldLvlEnd, FEndLine[LineIndex], ToPos(FHighlighter.FoldEndLine(LineIndex, 0))]);
|
// DebugLn(' x=%.03d l=%.5d %s %s %s %s lvl=%d/%d endline=%d (cache) -> %d (HL)', [LogXStart, ToPos(LineIndex), IfThen(sfaOpen in FoldAction, 'O', IfThen(sfaClose in FoldAction, 'C', ' ')), IfThen(sfaOutlineKeepLevel{OnSameLine} in FoldAction ,'K', ' '), IfThen(sfaOutlineForceIndent in FoldAction, '+', IfThen(sfaOutlineMergeParent in FoldAction, '-', ' ')) ,FoldTypeToStr(FoldType), FoldLvlStart, FoldLvlEnd, ToPos(NodeIndex), ToPos(FHighlighter.FoldEndLine(LineIndex, 0))]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
// delete all nodes in lEndNodeList which where active at StartLine
|
// delete all nodes in lEndNodeList which where active at StartLine
|
||||||
@ -746,7 +775,7 @@ begin
|
|||||||
{$IFDEF SynEditMarkupFoldColoringDebug}
|
{$IFDEF SynEditMarkupFoldColoringDebug}
|
||||||
//DebugLn(' Remaining Nodes:');
|
//DebugLn(' Remaining Nodes:');
|
||||||
//for i := 0 to length(lEndNestList) - 1 do with lEndNestList[i] do
|
//for i := 0 to length(lEndNestList) - 1 do with lEndNestList[i] do
|
||||||
// DebugLn(' x=%.03d l=%.5d %s %s %s %s lvl=%d/%d endline=%d (cache) -> %d (HL)', [LogXStart, ToPos(LineIndex), IfThen(sfaOpen in FoldAction, 'O', IfThen(sfaClose in FoldAction, 'C', ' ')), IfThen(sfaOutlineKeepLevel{OnSameLine} in FoldAction ,'K', ' '), IfThen(sfaOutlineForceIndent in FoldAction, '+', IfThen(sfaOutlineMergeParent in FoldAction, '-', ' ')) ,FoldTypeToStr(FoldType), FoldLvlStart, FoldLvlEnd, FEndLine[LineIndex], ToPos(FHighlighter.FoldEndLine(LineIndex, 0))]);
|
// DebugLn(' x=%.03d l=%.5d %s %s %s %s lvl=%d/%d endline=%d (cache) -> %d (HL)', [LogXStart, ToPos(LineIndex), IfThen(sfaOpen in FoldAction, 'O', IfThen(sfaClose in FoldAction, 'C', ' ')), IfThen(sfaOutlineKeepLevel{OnSameLine} in FoldAction ,'K', ' '), IfThen(sfaOutlineForceIndent in FoldAction, '+', IfThen(sfaOutlineMergeParent in FoldAction, '-', ' ')) ,FoldTypeToStr(FoldType), FoldLvlStart, FoldLvlEnd, ToPos(NodeIndex), ToPos(FHighlighter.FoldEndLine(LineIndex, 0))]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
// does position of first character change for remaining node?
|
// does position of first character change for remaining node?
|
||||||
if FirstCharacterColumn[lEndNestList[0].LineIndex] <> FFirstCharacterColumnCache[lEndNestList[0].LineIndex] then
|
if FirstCharacterColumn[lEndNestList[0].LineIndex] <> FFirstCharacterColumnCache[lEndNestList[0].LineIndex] then
|
||||||
@ -763,7 +792,7 @@ begin
|
|||||||
lEndLine := Max(lEndLine, Max(l, FEndLineCache[LineIndex]));
|
lEndLine := Max(lEndLine, Max(l, FEndLineCache[LineIndex]));
|
||||||
FEndLineCache[LineIndex] := l;
|
FEndLineCache[LineIndex] := l;
|
||||||
{$IFDEF SynEditMarkupFoldColoringDebug}
|
{$IFDEF SynEditMarkupFoldColoringDebug}
|
||||||
//DebugLn(' ** x=%.03d l=%.5d %s %s %s %s lvl=%d/%d endline=%d -> %d', [LogXStart, ToPos(LineIndex), IfThen(sfaOpen in FoldAction, 'O', IfThen(sfaClose in FoldAction, 'C', ' ')), IfThen(sfaOutlineKeepLevel{OnSameLine} in FoldAction ,'K', ' '), IfThen(sfaOutlineForceIndent in FoldAction, '+', IfThen(sfaOutlineMergeParent in FoldAction, '-', ' ')) ,FoldTypeToStr(FoldType), FoldLvlStart, FoldLvlEnd, FEndLine[LineIndex], ToPos(FHighlighter.FoldEndLine(LineIndex, 0))]);
|
//DebugLn(' ** x=%.03d l=%.5d %s %s %s %s lvl=%d/%d endline=%d -> %d', [LogXStart, ToPos(LineIndex), IfThen(sfaOpen in FoldAction, 'O', IfThen(sfaClose in FoldAction, 'C', ' ')), IfThen(sfaOutlineKeepLevel{OnSameLine} in FoldAction ,'K', ' '), IfThen(sfaOutlineForceIndent in FoldAction, '+', IfThen(sfaOutlineMergeParent in FoldAction, '-', ' ')) ,FoldTypeToStr(FoldType), FoldLvlStart, FoldLvlEnd, ToPos(NodeIndex), ToPos(FHighlighter.FoldEndLine(LineIndex, 0))]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user