SynEdit: Fixed folding IFDEF / broken in rev 24622 #ae416f6a77

git-svn-id: trunk@24638 -
This commit is contained in:
martin 2010-04-15 22:11:43 +00:00
parent 585da14064
commit 10ffed1014

View File

@ -484,6 +484,7 @@ type
function FoldTypeCount: integer; override;
function FoldTypeAtNodeIndex(ALineIndex, FoldIndex: Integer;
UseCloseNodes: boolean = false): integer; override;
function FoldLineLength(ALineIndex, FoldIndex: Integer): integer; override;
// Pascal coe only // TODO: make private
function MinimumFoldLevel(Index: Integer): integer; override;
@ -2871,6 +2872,26 @@ begin
end;
end;
function TSynPasSyn.FoldLineLength(ALineIndex, FoldIndex: Integer): integer;
var
i, lvl, cnt, atype : Integer;
e, m: Integer;
begin
atype := FoldTypeAtNodeIndex(ALineIndex, FoldIndex);
cnt := CurrentLines.Count;
e := EndPasFoldLevel(ALineIndex, atype);
m := MinimumPasFoldLevel(ALineIndex, atype);
lvl := Min(m+1+FoldIndex, e);
i := ALineIndex + 1;
while (i < cnt) and (MinimumPasFoldLevel(i, atype) >= lvl) do inc(i);
// check if fold last line of block (not mixed "end begin")
// and not lastlinefix
if (i = cnt) or (EndPasFoldLevel(i, atype) > MinimumPasFoldLevel(i, atype)) then
dec(i);
// Amount of lines, that will become invisible (excludes the cfCollapsed line)
Result := i - ALineIndex;
end;
function TSynPasSyn.MinimumPasFoldLevel(Index: Integer; AType: Integer = 1): integer;
var
r: TSynPasSynRange;