mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-15 06:09:30 +02:00
SynEdit, pas-HL: clean up (remove workaround foldgroup=4)
git-svn-id: trunk@37892 -
This commit is contained in:
parent
37ea4a51d6
commit
3414a1253c
@ -245,7 +245,7 @@ type
|
||||
FNode: TSynTextFoldAVLNode; // AvlFoldNode
|
||||
Text, Keyword: String;
|
||||
LineNum, ColIndex: Integer;
|
||||
OpenCount: Integer;
|
||||
OpenCount: Integer; // Highlighter-Nodes opening on this line (limited to the FoldGroup requested)
|
||||
end;
|
||||
|
||||
TSynEditFoldLineCapability = (
|
||||
|
@ -155,12 +155,14 @@ type
|
||||
procedure DoFilter(MinIndex: Integer = -1);
|
||||
procedure SetLine(ALine: TLineIdx);
|
||||
procedure SetLineClean(ALine: TLineIdx);
|
||||
property HighLighter: TSynCustomFoldHighlighter read FHighLighter write FHighLighter;
|
||||
public
|
||||
// used by HighLighters to add data
|
||||
procedure Add(const AnInfo: TSynFoldNodeInfo);
|
||||
procedure Delete(AnIndex: Integer = -1);
|
||||
function CountAll: Integer;
|
||||
property ItemPointer[AnIndex: Integer]: PSynFoldNodeInfo read GetItemPointer;
|
||||
property LastItemPointer: PSynFoldNodeInfo read GetLastItemPointer;
|
||||
property HighLighter: TSynCustomFoldHighlighter read FHighLighter write FHighLighter;
|
||||
protected
|
||||
function DefaultGroup: Integer; virtual;
|
||||
function MinCapacity: Integer; virtual;
|
||||
@ -651,7 +653,8 @@ end;
|
||||
function TLazSynFoldNodeInfoList.Match(const AnInfo: TSynFoldNodeInfo;
|
||||
AnActionFilter: TSynFoldActions; AGroupFilter: Integer): Boolean;
|
||||
begin
|
||||
Result := (AnActionFilter = []) and (AGroupFilter = DefaultGroup);
|
||||
Result := (AnInfo.FoldAction * AnActionFilter = AnActionFilter) and
|
||||
( (AGroupFilter = 0) or (AnInfo.FoldGroup = AGroupFilter) );
|
||||
end;
|
||||
|
||||
function TLazSynFoldNodeInfoList.DefaultGroup: Integer;
|
||||
|
@ -279,14 +279,6 @@ type
|
||||
// DecLastLineCodeFoldLevelFix <> DecLastLinePasFoldFix
|
||||
end;
|
||||
|
||||
{ TLazSynPasFoldNodeInfoList }
|
||||
|
||||
TLazSynPasFoldNodeInfoList = class(TLazSynFoldNodeInfoList)
|
||||
protected
|
||||
function Match(const AnInfo: TSynFoldNodeInfo;
|
||||
AnActionFilter: TSynFoldActions; AGroupFilter: Integer = 0): Boolean; override;
|
||||
end;
|
||||
|
||||
TProcTableProc = procedure of object;
|
||||
|
||||
PIdentFuncTableFunc = ^TIdentFuncTableFunc;
|
||||
@ -333,7 +325,7 @@ type
|
||||
FCompilerMode: TPascalCompilerMode;
|
||||
fD4syntax: boolean;
|
||||
FCatchNodeInfo: Boolean;
|
||||
FCatchNodeInfoList: TLazSynPasFoldNodeInfoList;
|
||||
FCatchNodeInfoList: TLazSynFoldNodeInfoList;
|
||||
// Divider
|
||||
FDividerDrawConfig: Array [TSynPasDividerDrawLocation] of TSynDividerDrawConfig;
|
||||
|
||||
@ -502,7 +494,8 @@ type
|
||||
procedure InitFoldNodeInfo(AList: TLazSynFoldNodeInfoList; Line: TLineIdx); override;
|
||||
|
||||
protected
|
||||
function LastLinePasFoldLevelFix(Index: Integer; AType: Integer = 1): integer; // TODO deprecated; // foldable nodes
|
||||
function LastLinePasFoldLevelFix(Index: Integer; AType: Integer = 1;
|
||||
AIncludeDisabled: Boolean = False): integer; // TODO deprecated; // foldable nodes
|
||||
|
||||
// Divider
|
||||
function GetDrawDivider(Index: integer): TSynDividerDrawConfigSetting; override;
|
||||
@ -673,18 +666,6 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TLazSynPasFoldNodeInfoList }
|
||||
|
||||
function TLazSynPasFoldNodeInfoList.Match(const AnInfo: TSynFoldNodeInfo;
|
||||
AnActionFilter: TSynFoldActions; AGroupFilter: Integer): Boolean;
|
||||
begin
|
||||
Result := (AnInfo.FoldAction * AnActionFilter = AnActionFilter) and
|
||||
( (AGroupFilter = 0) or
|
||||
( (AGroupFilter in [1..3]) and (AnInfo.FoldGroup = AGroupFilter) ) or
|
||||
( (AGroupFilter = 4) and (AnInfo.FoldGroup in [1,4]) )
|
||||
);
|
||||
end;
|
||||
|
||||
procedure TSynPasSyn.InitIdent;
|
||||
var
|
||||
I: Integer;
|
||||
@ -3384,30 +3365,26 @@ begin
|
||||
dec(Result);
|
||||
end;
|
||||
|
||||
function TSynPasSyn.LastLinePasFoldLevelFix(Index: Integer; AType: Integer = 1): integer;
|
||||
function TSynPasSyn.LastLinePasFoldLevelFix(Index: Integer; AType: Integer;
|
||||
AIncludeDisabled: Boolean): integer;
|
||||
var
|
||||
r: TSynPasSynRange;
|
||||
begin
|
||||
// AIncludeDisabled only works for Pascal Nodes
|
||||
case AType of
|
||||
2: Result := 0;
|
||||
3: Result := 0;
|
||||
4: // all pascal nodes (incl. not folded)
|
||||
begin
|
||||
if (Index < 0) or (Index >= CurrentLines.Count) then
|
||||
exit(0);
|
||||
r := TSynPasSynRange(CurrentRanges[Index]);
|
||||
if (r <> nil) and (Pointer(r) <> NullRange) then
|
||||
Result := r.LastLineCodeFoldLevelFix
|
||||
else
|
||||
Result := 0;
|
||||
end;
|
||||
else
|
||||
begin
|
||||
if (Index < 0) or (Index >= CurrentLines.Count) then
|
||||
exit(0);
|
||||
r := TSynPasSynRange(CurrentRanges[Index]);
|
||||
if (r <> nil) and (Pointer(r) <> NullRange) then
|
||||
Result := r.PasFoldFixLevel
|
||||
if (r <> nil) and (Pointer(r) <> NullRange) then begin
|
||||
if AIncludeDisabled then
|
||||
Result := r.LastLineCodeFoldLevelFix // all pascal nodes (incl. not folded)
|
||||
else
|
||||
Result := r.PasFoldFixLevel
|
||||
end
|
||||
else
|
||||
Result := 0;
|
||||
end;
|
||||
@ -3542,7 +3519,7 @@ end;
|
||||
|
||||
function TSynPasSyn.CreateFoldNodeInfoList: TLazSynFoldNodeInfoList;
|
||||
begin
|
||||
Result := TLazSynPasFoldNodeInfoList.Create;
|
||||
Result := TLazSynFoldNodeInfoList.Create;
|
||||
end;
|
||||
|
||||
procedure TSynPasSyn.InitFoldNodeInfo(AList: TLazSynFoldNodeInfoList; Line: TLineIdx);
|
||||
@ -3551,14 +3528,14 @@ var
|
||||
i: Integer;
|
||||
begin
|
||||
FCatchNodeInfo := True;
|
||||
FCatchNodeInfoList := TLazSynPasFoldNodeInfoList(AList);
|
||||
FCatchNodeInfoList := TLazSynFoldNodeInfoList(AList);
|
||||
|
||||
StartAtLineIndex(Line);
|
||||
fStringLen := 0;
|
||||
NextToEol;
|
||||
|
||||
fStringLen := 0;
|
||||
i := LastLinePasFoldLevelFix(Line+1, 4);
|
||||
i := LastLinePasFoldLevelFix(Line+1, FOLDGROUP_PASCAL, True); // all pascal nodes (incl. not folded)
|
||||
while i < 0 do begin
|
||||
EndPascalCodeFoldBlock;
|
||||
inc(i);
|
||||
@ -3737,10 +3714,10 @@ begin
|
||||
// SetRange[Index] has the folds at the start of this line
|
||||
// ClosedByNextLine: Folds closed by the next lines LastLineFix
|
||||
// must be taken from SetRange[Index+1] (end of this line)
|
||||
ClosedByNextLine := -LastLinePasFoldLevelFix(Index + 1, 4);
|
||||
ClosedByNextLine := -LastLinePasFoldLevelFix(Index + 1, FOLDGROUP_PASCAL, True);
|
||||
// ClosedInLastLine: Folds Closed by this lines LastLineFix
|
||||
// must be ignored. (They are part of SetRange[Index] / this line)
|
||||
ClosedInLastLine := -LastLinePasFoldLevelFix(Index, 4);
|
||||
ClosedInLastLine := -LastLinePasFoldLevelFix(Index, FOLDGROUP_PASCAL, True);
|
||||
|
||||
// Get the highest close-offset
|
||||
i := ClosedByNextLine - 1;
|
||||
|
@ -1843,7 +1843,6 @@ begin
|
||||
TheList.Line := 2;
|
||||
TheList.FoldGroup := 0;
|
||||
TheList.FoldFlags := [];
|
||||
TheList.Count; TheList.HLNode[0]; TheList.Debug;
|
||||
AssertEquals(BaseTestName + 'Cnt', 3, TheList.Count);
|
||||
CheckNode(TheList.HLNode[2], 2, 0, 0, 5, 2, 3, 2, 3, 1, 0, 1, [sfaOpen,sfaMarkup,sfaFold,sfaFoldFold]);
|
||||
CheckNode(TheList.HLNode[1], 1, 0, 0, 9, 1, 2, 1, 2, 3, 3, 1, [sfaOpen,sfaMarkup,sfaFold,sfaFoldFold]);
|
||||
@ -2143,7 +2142,6 @@ TheList.Count; TheList.HLNode[0]; TheList.Debug;
|
||||
TheList.IncludeOpeningOnLine := True;
|
||||
TheList.FoldGroup := 0;
|
||||
TheList.FoldFlags := [];
|
||||
TheList.Count; TheList.HLNode[0]; TheList.Debug;
|
||||
AssertEquals(BaseTestName + 'Cnt', 3, TheList.Count);
|
||||
CheckNode(TheList.HLNode[2], 4, 0, 14, 20, 0, 1, 0, 1, 18, 18, FOLDGROUP_IFDEF, [sfaOpen,sfaMarkup,sfaFold,sfaFoldFold]);
|
||||
CheckNode(TheList.HLNode[1], 3, 0, 1, 7, 0, 1, 0, 1, 18, 18, FOLDGROUP_IFDEF, [sfaOpen,sfaMarkup,sfaFold,sfaFoldFold]);
|
||||
@ -2155,7 +2153,6 @@ TheList.Count; TheList.HLNode[0]; TheList.Debug;
|
||||
TheList.IncludeOpeningOnLine := False;
|
||||
TheList.FoldGroup := 0;
|
||||
TheList.FoldFlags := [];
|
||||
TheList.Count; TheList.HLNode[0]; TheList.Debug;
|
||||
AssertEquals(BaseTestName + 'Cnt', 2, TheList.Count);
|
||||
CheckNode(TheList.HLNode[1], 3, 0, 1, 7, 0, 1, 0, 1, 18, 18, FOLDGROUP_IFDEF, [sfaOpen,sfaMarkup,sfaFold,sfaFoldFold]);
|
||||
CheckNode(TheList.HLNode[0], 0, 0, 0, 7, 0, 1, 0, 1, 10, 10, FOLDGROUP_PASCAL, [sfaOpen,sfaMarkup,sfaFold,sfaFoldFold]);
|
||||
@ -2167,7 +2164,6 @@ TheList.Count; TheList.HLNode[0]; TheList.Debug;
|
||||
TheList.IncludeOpeningOnLine := True;
|
||||
TheList.FoldGroup := FOLDGROUP_IFDEF;
|
||||
TheList.FoldFlags := [];
|
||||
TheList.Count; TheList.HLNode[0]; TheList.Debug;
|
||||
AssertEquals(BaseTestName + 'Cnt', 2, TheList.Count);
|
||||
CheckNode(TheList.HLNode[1], 4, 0, 14, 20, 0, 1, 0, 1, 18, 18, FOLDGROUP_IFDEF, [sfaOpen,sfaMarkup,sfaFold,sfaFoldFold]);
|
||||
CheckNode(TheList.HLNode[0], 3, 0, 1, 7, 0, 1, 0, 1, 18, 18, FOLDGROUP_IFDEF, [sfaOpen,sfaMarkup,sfaFold,sfaFoldFold]);
|
||||
@ -2178,7 +2174,7 @@ TheList.Count; TheList.HLNode[0]; TheList.Debug;
|
||||
TheList.IncludeOpeningOnLine := False;
|
||||
TheList.FoldGroup := FOLDGROUP_IFDEF;
|
||||
TheList.FoldFlags := [];
|
||||
TheList.Count; TheList.HLNode[0]; TheList.Debug;
|
||||
//TheList.Count; TheList.HLNode[0]; TheList.Debug;
|
||||
AssertEquals(BaseTestName + 'Cnt', 1, TheList.Count);
|
||||
CheckNode(TheList.HLNode[0], 3, 0, 1, 7, 0, 1, 0, 1, 18, 18, FOLDGROUP_IFDEF, [sfaOpen,sfaMarkup,sfaFold,sfaFoldFold]);
|
||||
|
||||
|
@ -1148,38 +1148,38 @@ begin
|
||||
CheckNode(11, [], 1, 1, 2, 2, 1, 0, 1, 0, 22, 22, 1, [sfaOneLineClose,sfaLastLineClose]);
|
||||
{%endregion TEXT 1 -- [cfbtBeginEnd..cfbtNone], [] grp=1}
|
||||
|
||||
{%region TEXT 1 -- [cfbtBeginEnd,cfbtIfDef], [] grp=4}
|
||||
{%region TEXT 1 -- [cfbtBeginEnd,cfbtIfDef], [] grp=1}
|
||||
PopPushBaseName('Text 1 -- [cfbtBeginEnd,cfbtIfDef], [], grp=4');
|
||||
SetLines(TestTextFoldInfo1);
|
||||
EnableFolds([cfbtBeginEnd,cfbtIfDef], []);
|
||||
//DebugFoldInfo([],4);
|
||||
|
||||
CheckFoldInfoCounts('', [], 4, [1, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 2]);
|
||||
CheckFoldInfoCounts('', [], 1, [1, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 2]);
|
||||
|
||||
//### Foldinfo Line: 0 PasMinLvl=0 EndLvl=0 : program Foo;
|
||||
CheckNode( 0, [], 4, 0, 0, 7, 0, 0, 0, 1, 10, 10, 1, [sfaOpen,sfaMarkup]); // program
|
||||
CheckNode( 0, [], 1, 0, 0, 7, 0, 0, 0, 1, 10, 10, 1, [sfaOpen,sfaMarkup]); // program
|
||||
//### Foldinfo Line: 1 PasMinLvl=0 EndLvl=0 : procedure a;
|
||||
CheckNode( 1, [], 4, 0, 0, 9, 1, 1, 1, 2, 3, 3, 1, [sfaOpen,sfaMarkup]); // procedure
|
||||
CheckNode( 1, [], 1, 0, 0, 9, 1, 1, 1, 2, 3, 3, 1, [sfaOpen,sfaMarkup]); // procedure
|
||||
//### Foldinfo Line: 2 PasMinLvl=0 EndLvl=0 : {$IFDEF A}
|
||||
//### Foldinfo Line: 3 PasMinLvl=0 EndLvl=0 : begin
|
||||
CheckNode( 3, [], 4, 0, 0, 5, 2, 2, 2, 3, 1, 0, 1, [sfaOpen,sfaMarkup]); // begin
|
||||
CheckNode( 3, [], 1, 0, 0, 5, 2, 2, 2, 3, 1, 0, 1, [sfaOpen,sfaMarkup]); // begin
|
||||
//### Foldinfo Line: 4 PasMinLvl=0 EndLvl=0 : {$ENDIF}
|
||||
//### Foldinfo Line: 5 PasMinLvl=0 EndLvl=1 : {$IFDEF B} if a then begin {$ENDIF}
|
||||
CheckNode( 5, [], 4, 0, 23, 28, 0, 1, 3, 4, 0, 0, 1, [sfaOpen,sfaMarkup,sfaFold,sfaFoldFold]); // begin
|
||||
CheckNode( 5, [], 1, 0, 23, 28, 0, 1, 3, 4, 0, 0, 1, [sfaOpen,sfaMarkup,sfaFold,sfaFoldFold]); // begin
|
||||
//### Foldinfo Line: 6 PasMinLvl=1 EndLvl=1 : writeln()
|
||||
//### Foldinfo Line: 7 PasMinLvl=0 EndLvl=0 : end;
|
||||
CheckNode( 7, [], 4, 0, 2, 5, 1, 0, 4, 3, 0, 0, 1, [sfaClose,sfaMarkup,sfaFold]); // end
|
||||
CheckNode( 7, [], 1, 0, 2, 5, 1, 0, 4, 3, 0, 0, 1, [sfaClose,sfaMarkup,sfaFold]); // end
|
||||
//### Foldinfo Line: 8 PasMinLvl=0 EndLvl=0 : end;
|
||||
CheckNode( 8, [], 4, 0, 0, 3, 3, 3, 3, 2, 1, 0, 1, [sfaClose,sfaMarkup]); // end;
|
||||
CheckNode( 8, [], 4, 1, 0, 3, 2, 2, 2, 1, 3, 3, 1, [sfaClose,sfaMarkup]); // end;
|
||||
CheckNode( 8, [], 1, 0, 0, 3, 3, 3, 3, 2, 1, 0, 1, [sfaClose,sfaMarkup]); // end;
|
||||
CheckNode( 8, [], 1, 1, 0, 3, 2, 2, 2, 1, 3, 3, 1, [sfaClose,sfaMarkup]); // end;
|
||||
//### Foldinfo Line: 9 PasMinLvl=0 EndLvl=1 : begin
|
||||
CheckNode( 9, [], 4, 0, 0, 5, 0, 1, 1, 2, 0, 0, 1, [sfaOpen,sfaMarkup,sfaFold,sfaFoldFold]); // begin
|
||||
CheckNode( 9, [], 1, 0, 0, 5, 0, 1, 1, 2, 0, 0, 1, [sfaOpen,sfaMarkup,sfaFold,sfaFoldFold]); // begin
|
||||
//### Foldinfo Line: 10 PasMinLvl=0 EndLvl=0 : end.
|
||||
CheckNode(10, [], 4, 0, 0, 3, 1, 0, 2, 1, 0, 0, 1, [sfaClose,sfaMarkup,sfaFold]); // end.
|
||||
CheckNode(10, [], 4, 1, 0, 3, 1, 1, 1, 0, 10, 10, 1, [sfaClose,sfaMarkup]); // end.
|
||||
CheckNode(10, [], 1, 0, 0, 3, 1, 0, 2, 1, 0, 0, 1, [sfaClose,sfaMarkup,sfaFold]); // end.
|
||||
CheckNode(10, [], 1, 1, 0, 3, 1, 1, 1, 0, 10, 10, 1, [sfaClose,sfaMarkup]); // end.
|
||||
//### Foldinfo Line: 11 PasMinLvl=0 EndLvl=0 : //
|
||||
CheckNode(11, [], 4, 0, 0, 2, 0, 0, 0, 1, 22, 22, 1, [sfaOpen]); // //
|
||||
CheckNode(11, [], 4, 1, 2, 2, 1, 1, 1, 0, 22, 22, 1, [sfaClose,sfaLastLineClose]); // /
|
||||
CheckNode(11, [], 1, 0, 0, 2, 0, 0, 0, 1, 22, 22, 1, [sfaOpen]); // //
|
||||
CheckNode(11, [], 1, 1, 2, 2, 1, 1, 1, 0, 22, 22, 1, [sfaClose,sfaLastLineClose]); // /
|
||||
{%endregion TEXT 1 -- [cfbtBeginEnd..cfbtNone], [] grp=4}
|
||||
|
||||
{%region TEXT 1 -- [cfbtBeginEnd..cfbtNone], [sfaFold]}
|
||||
|
Loading…
Reference in New Issue
Block a user