SynEdit IFDEF: fix crash with comments

git-svn-id: trunk@41847 -
This commit is contained in:
martin 2013-06-23 18:19:50 +00:00
parent e02311e159
commit c692aea81a
2 changed files with 46 additions and 2 deletions

View File

@ -2856,6 +2856,9 @@ XXXCurTree := self; try
Assert(TmpNode.HasNode, 'TmpNode.HasNode');
Assert(NextNode.EntryCount > 0, 'NextNode.EntryCount > 0');
Node := TmpNode;
CheckNextNodeForEmpty(NextNode, Node.LastEntryEndLine);
if not NextNode.HasNode then
break;
TmpNode.ClearInfo;
while Node.ScanEndLine + 1 < NextNode.StartLine do begin
MaybeExtendNodeForward(Node, TmpNode, NextNode.StartLine);

View File

@ -56,6 +56,7 @@ type
function TestText7: TStringArray;
function TestText8: TStringArray;
function TestText9: TStringArray;
function TestText10: TStringArray;
procedure CheckOpenCloseCount(AName: String; ALine: Integer;
AExpOpenCnt, AExpCloseCnt: Integer);
@ -653,6 +654,26 @@ begin
end;
function TTestMarkupIfDef.TestText10: TStringArray;
procedure AddLine(s: String);
begin
SetLength(Result, Length(Result)+1);
Result[Length(Result)-1] := s;
end;
begin
// 1
AddLine('//' );
AddLine('{$IFDEF a}' );
AddLine('' );
AddLine('' );
// 5
AddLine('' );
AddLine('' );
AddLine('{$IFDEF a}' );
AddLine('//' );
AddLine('' );
end;
procedure TTestMarkupIfDef.CheckOpenCloseCount(AName: String; ALine: Integer; AExpOpenCnt,
AExpCloseCnt: Integer);
var
@ -1941,13 +1962,13 @@ procedure TTestMarkupIfDef.TestIfDefTreePeerConnect;
{%endregion }
{%region }
n := 'scan new unfinished node, next node will be comment';
n := 'multi elseif open';
ReCreateEditForTreeTest(TestText9);
FTestTree.ValidateRange(1, 18, FOpenings);
//CheckNodes(n, 2, [ ExpN( 1,11, idnIfdef), ExpN(13,21, idnEndIf) ]);
n := 'scan new unfinished node, next node will be comment';
//n := '';
ReCreateEditForTreeTest(TestText9);
FTestTree.ValidateRange(11, 18, FOpenings);
//CheckNodes(n, 2, [ ExpN( 1,11, idnIfdef), ExpN(13,21, idnEndIf) ]);
@ -1957,6 +1978,26 @@ procedure TTestMarkupIfDef.TestIfDefTreePeerConnect;
{%region }
n := '';
ReCreateEditForTreeTest(TestText10);
FTestTree.ValidateRange(1, 9, FOpenings);
FTestTree.SetNodeState(7, 1, idnDisabled);
//CheckNodes(n, 2, [ ExpN( 1,11, idnIfdef), ExpN(13,21, idnEndIf) ]);
SynEdit.TextBetweenPoints[point(1, 4),point(1, 4)] := '{$endi';
FTestTree.ValidateRange(1, 9, FOpenings);
SynEdit.TextBetweenPoints[point(7, 4),point(7, 4)] := 'f';
FTestTree.ValidateRange(1, 9, FOpenings);
SynEdit.TextBetweenPoints[point(12, 4),point(12, 4)] := '} ';
FTestTree.ValidateRange(1, 9, FOpenings);
{%endregion }
FTestTree.DiscardOpeningList(FOpenings);
FOpenings := nil;