SynEdit, MultiHighlighter: fix adding text/sections at EOL. issue #0022745

git-svn-id: trunk@38428 -
This commit is contained in:
martin 2012-08-29 20:06:42 +00:00
parent 56079e50f0
commit d93e43d196
2 changed files with 60 additions and 2 deletions

View File

@ -683,9 +683,9 @@ begin
FSectionList.Delete(FRegionScanRangeIndex);
VDiff := 0;
{$IFDEF SynDebugMultiHL}
DebugLn(SYNDEBUG_MULTIHL, ['***** ', FRegionScanStartRangeIndex, ' cnt ', Count]);
DebugLn(SYNDEBUG_MULTIHL, ['***** ', FRegionScanStartRangeIndex, ' cnt ', FSectionList.Count]);
{$ENDIF}
if FRegionScanStartRangeIndex < Count then begin
if FRegionScanStartRangeIndex < FSectionList.Count then begin
// fix virtual lines on sections
if (FRegionScanStartRangeIndex > 0) then begin
s := FSectionList.Sections[FRegionScanStartRangeIndex-1];
@ -1077,6 +1077,7 @@ var
var
pt: TPoint;
begin
//debugln(['StartScheme NewScheme=',dbgs(NewScheme),' StartAtLine=',StartAtLine,' StartAtChar=',StartAtChar,' TokenAtChar=',TokenAtChar]);
pt := Point(TokenAtChar-1, StartAtLine);
if CurRegStart.y < 0 then
DefaultVirtualLines.RegionScanUpdateFirstRegionEnd(pt, 0)
@ -1094,6 +1095,7 @@ var
var
pt: TPoint;
begin
//debugln(['EndScheme EndAtLine=',EndAtLine,' EndAtChar=',EndAtChar,' TokenAtChar=',TokenEndChar]);
pt := Point(EndAtChar, EndAtLine);
if CurRegStart.y < 0 then
FCurScheme.VirtualLines.RegionScanUpdateFirstRegionEnd(pt, TokenEndChar)

View File

@ -905,7 +905,63 @@ var
end;
begin
TSynEditStringList(SynEdit.TextBuffer).AddChangeHandler(senrHighlightChanged, @DoHighlightChanged);
{%region Issue 0022745}
PushBaseName('Insert at end, create new section at end'); // Issue 0022745
SynEdit.ClearAll;
InitMultiXmlPasHl;
SynEdit.TestTypeText(1, 1, '<html>'+#13);
SynEdit.TestTypeText( ''+#13);
SynEdit.TestTypeText( '<pas>'+#13);
SynEdit.TestTypeText( '</pas>'+#13);
SynEdit.TestTypeText( '<pas>'+#13);
SynEdit.TestTypeText( '</pas>'+#13);
SynEdit.TestTypeText( '<pas>'+#13);
SynEdit.TestTypeText( '</pas>'+#13);
SynEdit.TestTypeText( '<pas>'+#13);
SynEdit.TestTypeText( '</pas>'+#13);
SynEdit.TestTypeText( ''+#13);
SynEdit.TestTypeText( '<pas>'+#13);
SynEdit.TestTypeText( '</pas>'+#13);
SynEdit.TestTypeText( '<pas>'+#13);
SynEdit.TestTypeText( '</pas>'+#13);
SynEdit.TestTypeText( '<pas>'+#13);
SynEdit.TestTypeText( ''+#13);
SynEdit.TestTypeText( '</pas>'+#13);
SynEdit.TestTypeText( '<pas>'+#13);
SynEdit.TestTypeText( '</pas>'+#13);
//DumpAll(MultiHl);
FinishMultiXmlPasHl;
PopBaseName;
PushBaseName('0022745'); // Issue 0022745
SynEdit.ClearAll;
InitMultiXmlPasHl;
SynEdit.TestTypeText(1, 1,
'<html>'+#13+
''+#13+
'<pas>'+#13+
'</pas>'+#13+
'<pas>'+#13+
'</pas>'+#13,
True
);
//PushBaseName('Insert "<pas>"');
// CheckTokensForLine('1st line=html', MultiHl, 0, [AtPasMark]);
// CheckTokensForLine('2nd line=html', MultiHl, 1, [AtPasMark]);
// AssertEquals(BaseTestName + 'Section Count def', 0, MultiHl.DefaultVirtualLines.SectionList.Count);
// AssertEquals(BaseTestName + 'Section Count pas', 1, PasScheme.VirtualLines.SectionList.Count);
FinishMultiXmlPasHl;
PopBaseName;
{%endregion}
{%region Issue 0022519}
PushBaseName('append after EOT (default scheme)'); // Issue 0022519