SynEdit, pas-HL: clean up (remove workaround foldgroup=4)

git-svn-id: trunk@37892 -
This commit is contained in:
martin 2012-07-07 12:25:47 +00:00
parent 37ea4a51d6
commit 3414a1253c
5 changed files with 38 additions and 62 deletions

View File

@ -245,7 +245,7 @@ type
FNode: TSynTextFoldAVLNode; // AvlFoldNode FNode: TSynTextFoldAVLNode; // AvlFoldNode
Text, Keyword: String; Text, Keyword: String;
LineNum, ColIndex: Integer; LineNum, ColIndex: Integer;
OpenCount: Integer; OpenCount: Integer; // Highlighter-Nodes opening on this line (limited to the FoldGroup requested)
end; end;
TSynEditFoldLineCapability = ( TSynEditFoldLineCapability = (

View File

@ -155,12 +155,14 @@ type
procedure DoFilter(MinIndex: Integer = -1); procedure DoFilter(MinIndex: Integer = -1);
procedure SetLine(ALine: TLineIdx); procedure SetLine(ALine: TLineIdx);
procedure SetLineClean(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 Add(const AnInfo: TSynFoldNodeInfo);
procedure Delete(AnIndex: Integer = -1); procedure Delete(AnIndex: Integer = -1);
function CountAll: Integer; function CountAll: Integer;
property ItemPointer[AnIndex: Integer]: PSynFoldNodeInfo read GetItemPointer; property ItemPointer[AnIndex: Integer]: PSynFoldNodeInfo read GetItemPointer;
property LastItemPointer: PSynFoldNodeInfo read GetLastItemPointer; property LastItemPointer: PSynFoldNodeInfo read GetLastItemPointer;
property HighLighter: TSynCustomFoldHighlighter read FHighLighter write FHighLighter;
protected protected
function DefaultGroup: Integer; virtual; function DefaultGroup: Integer; virtual;
function MinCapacity: Integer; virtual; function MinCapacity: Integer; virtual;
@ -651,7 +653,8 @@ end;
function TLazSynFoldNodeInfoList.Match(const AnInfo: TSynFoldNodeInfo; function TLazSynFoldNodeInfoList.Match(const AnInfo: TSynFoldNodeInfo;
AnActionFilter: TSynFoldActions; AGroupFilter: Integer): Boolean; AnActionFilter: TSynFoldActions; AGroupFilter: Integer): Boolean;
begin begin
Result := (AnActionFilter = []) and (AGroupFilter = DefaultGroup); Result := (AnInfo.FoldAction * AnActionFilter = AnActionFilter) and
( (AGroupFilter = 0) or (AnInfo.FoldGroup = AGroupFilter) );
end; end;
function TLazSynFoldNodeInfoList.DefaultGroup: Integer; function TLazSynFoldNodeInfoList.DefaultGroup: Integer;

View File

@ -279,14 +279,6 @@ type
// DecLastLineCodeFoldLevelFix <> DecLastLinePasFoldFix // DecLastLineCodeFoldLevelFix <> DecLastLinePasFoldFix
end; end;
{ TLazSynPasFoldNodeInfoList }
TLazSynPasFoldNodeInfoList = class(TLazSynFoldNodeInfoList)
protected
function Match(const AnInfo: TSynFoldNodeInfo;
AnActionFilter: TSynFoldActions; AGroupFilter: Integer = 0): Boolean; override;
end;
TProcTableProc = procedure of object; TProcTableProc = procedure of object;
PIdentFuncTableFunc = ^TIdentFuncTableFunc; PIdentFuncTableFunc = ^TIdentFuncTableFunc;
@ -333,7 +325,7 @@ type
FCompilerMode: TPascalCompilerMode; FCompilerMode: TPascalCompilerMode;
fD4syntax: boolean; fD4syntax: boolean;
FCatchNodeInfo: Boolean; FCatchNodeInfo: Boolean;
FCatchNodeInfoList: TLazSynPasFoldNodeInfoList; FCatchNodeInfoList: TLazSynFoldNodeInfoList;
// Divider // Divider
FDividerDrawConfig: Array [TSynPasDividerDrawLocation] of TSynDividerDrawConfig; FDividerDrawConfig: Array [TSynPasDividerDrawLocation] of TSynDividerDrawConfig;
@ -502,7 +494,8 @@ type
procedure InitFoldNodeInfo(AList: TLazSynFoldNodeInfoList; Line: TLineIdx); override; procedure InitFoldNodeInfo(AList: TLazSynFoldNodeInfoList; Line: TLineIdx); override;
protected 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 // Divider
function GetDrawDivider(Index: integer): TSynDividerDrawConfigSetting; override; function GetDrawDivider(Index: integer): TSynDividerDrawConfigSetting; override;
@ -673,18 +666,6 @@ begin
end; end;
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; procedure TSynPasSyn.InitIdent;
var var
I: Integer; I: Integer;
@ -3384,30 +3365,26 @@ begin
dec(Result); dec(Result);
end; end;
function TSynPasSyn.LastLinePasFoldLevelFix(Index: Integer; AType: Integer = 1): integer; function TSynPasSyn.LastLinePasFoldLevelFix(Index: Integer; AType: Integer;
AIncludeDisabled: Boolean): integer;
var var
r: TSynPasSynRange; r: TSynPasSynRange;
begin begin
// AIncludeDisabled only works for Pascal Nodes
case AType of case AType of
2: Result := 0; 2: Result := 0;
3: 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 else
begin begin
if (Index < 0) or (Index >= CurrentLines.Count) then if (Index < 0) or (Index >= CurrentLines.Count) then
exit(0); exit(0);
r := TSynPasSynRange(CurrentRanges[Index]); r := TSynPasSynRange(CurrentRanges[Index]);
if (r <> nil) and (Pointer(r) <> NullRange) then if (r <> nil) and (Pointer(r) <> NullRange) then begin
Result := r.PasFoldFixLevel if AIncludeDisabled then
Result := r.LastLineCodeFoldLevelFix // all pascal nodes (incl. not folded)
else
Result := r.PasFoldFixLevel
end
else else
Result := 0; Result := 0;
end; end;
@ -3542,7 +3519,7 @@ end;
function TSynPasSyn.CreateFoldNodeInfoList: TLazSynFoldNodeInfoList; function TSynPasSyn.CreateFoldNodeInfoList: TLazSynFoldNodeInfoList;
begin begin
Result := TLazSynPasFoldNodeInfoList.Create; Result := TLazSynFoldNodeInfoList.Create;
end; end;
procedure TSynPasSyn.InitFoldNodeInfo(AList: TLazSynFoldNodeInfoList; Line: TLineIdx); procedure TSynPasSyn.InitFoldNodeInfo(AList: TLazSynFoldNodeInfoList; Line: TLineIdx);
@ -3551,14 +3528,14 @@ var
i: Integer; i: Integer;
begin begin
FCatchNodeInfo := True; FCatchNodeInfo := True;
FCatchNodeInfoList := TLazSynPasFoldNodeInfoList(AList); FCatchNodeInfoList := TLazSynFoldNodeInfoList(AList);
StartAtLineIndex(Line); StartAtLineIndex(Line);
fStringLen := 0; fStringLen := 0;
NextToEol; NextToEol;
fStringLen := 0; 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 while i < 0 do begin
EndPascalCodeFoldBlock; EndPascalCodeFoldBlock;
inc(i); inc(i);
@ -3737,10 +3714,10 @@ begin
// SetRange[Index] has the folds at the start of this line // SetRange[Index] has the folds at the start of this line
// ClosedByNextLine: Folds closed by the next lines LastLineFix // ClosedByNextLine: Folds closed by the next lines LastLineFix
// must be taken from SetRange[Index+1] (end of this line) // 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 // ClosedInLastLine: Folds Closed by this lines LastLineFix
// must be ignored. (They are part of SetRange[Index] / this line) // 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 // Get the highest close-offset
i := ClosedByNextLine - 1; i := ClosedByNextLine - 1;

View File

@ -1843,7 +1843,6 @@ begin
TheList.Line := 2; TheList.Line := 2;
TheList.FoldGroup := 0; TheList.FoldGroup := 0;
TheList.FoldFlags := []; TheList.FoldFlags := [];
TheList.Count; TheList.HLNode[0]; TheList.Debug;
AssertEquals(BaseTestName + 'Cnt', 3, TheList.Count); 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[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]); 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.IncludeOpeningOnLine := True;
TheList.FoldGroup := 0; TheList.FoldGroup := 0;
TheList.FoldFlags := []; TheList.FoldFlags := [];
TheList.Count; TheList.HLNode[0]; TheList.Debug;
AssertEquals(BaseTestName + 'Cnt', 3, TheList.Count); 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[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]); 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.IncludeOpeningOnLine := False;
TheList.FoldGroup := 0; TheList.FoldGroup := 0;
TheList.FoldFlags := []; TheList.FoldFlags := [];
TheList.Count; TheList.HLNode[0]; TheList.Debug;
AssertEquals(BaseTestName + 'Cnt', 2, TheList.Count); 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[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]); 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.IncludeOpeningOnLine := True;
TheList.FoldGroup := FOLDGROUP_IFDEF; TheList.FoldGroup := FOLDGROUP_IFDEF;
TheList.FoldFlags := []; TheList.FoldFlags := [];
TheList.Count; TheList.HLNode[0]; TheList.Debug;
AssertEquals(BaseTestName + 'Cnt', 2, TheList.Count); 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[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]); 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.IncludeOpeningOnLine := False;
TheList.FoldGroup := FOLDGROUP_IFDEF; TheList.FoldGroup := FOLDGROUP_IFDEF;
TheList.FoldFlags := []; TheList.FoldFlags := [];
TheList.Count; TheList.HLNode[0]; TheList.Debug; //TheList.Count; TheList.HLNode[0]; TheList.Debug;
AssertEquals(BaseTestName + 'Cnt', 1, TheList.Count); 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]); CheckNode(TheList.HLNode[0], 3, 0, 1, 7, 0, 1, 0, 1, 18, 18, FOLDGROUP_IFDEF, [sfaOpen,sfaMarkup,sfaFold,sfaFoldFold]);

View File

@ -1148,38 +1148,38 @@ begin
CheckNode(11, [], 1, 1, 2, 2, 1, 0, 1, 0, 22, 22, 1, [sfaOneLineClose,sfaLastLineClose]); CheckNode(11, [], 1, 1, 2, 2, 1, 0, 1, 0, 22, 22, 1, [sfaOneLineClose,sfaLastLineClose]);
{%endregion TEXT 1 -- [cfbtBeginEnd..cfbtNone], [] grp=1} {%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'); PopPushBaseName('Text 1 -- [cfbtBeginEnd,cfbtIfDef], [], grp=4');
SetLines(TestTextFoldInfo1); SetLines(TestTextFoldInfo1);
EnableFolds([cfbtBeginEnd,cfbtIfDef], []); EnableFolds([cfbtBeginEnd,cfbtIfDef], []);
//DebugFoldInfo([],4); //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; //### 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; //### 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: 2 PasMinLvl=0 EndLvl=0 : {$IFDEF A}
//### Foldinfo Line: 3 PasMinLvl=0 EndLvl=0 : begin //### 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: 4 PasMinLvl=0 EndLvl=0 : {$ENDIF}
//### Foldinfo Line: 5 PasMinLvl=0 EndLvl=1 : {$IFDEF B} if a then begin {$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: 6 PasMinLvl=1 EndLvl=1 : writeln()
//### Foldinfo Line: 7 PasMinLvl=0 EndLvl=0 : end; //### 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; //### 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, [], 1, 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, 1, 0, 3, 2, 2, 2, 1, 3, 3, 1, [sfaClose,sfaMarkup]); // end;
//### Foldinfo Line: 9 PasMinLvl=0 EndLvl=1 : begin //### 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. //### 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, [], 1, 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, 1, 0, 3, 1, 1, 1, 0, 10, 10, 1, [sfaClose,sfaMarkup]); // end.
//### Foldinfo Line: 11 PasMinLvl=0 EndLvl=0 : // //### Foldinfo Line: 11 PasMinLvl=0 EndLvl=0 : //
CheckNode(11, [], 4, 0, 0, 2, 0, 0, 0, 1, 22, 22, 1, [sfaOpen]); // // CheckNode(11, [], 1, 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, 1, 2, 2, 1, 1, 1, 0, 22, 22, 1, [sfaClose,sfaLastLineClose]); // /
{%endregion TEXT 1 -- [cfbtBeginEnd..cfbtNone], [] grp=4} {%endregion TEXT 1 -- [cfbtBeginEnd..cfbtNone], [] grp=4}
{%region TEXT 1 -- [cfbtBeginEnd..cfbtNone], [sfaFold]} {%region TEXT 1 -- [cfbtBeginEnd..cfbtNone], [sfaFold]}