From d93e43d19689ff7ebcdcd81d25cdde7e7c6a075b Mon Sep 17 00:00:00 2001 From: martin Date: Wed, 29 Aug 2012 20:06:42 +0000 Subject: [PATCH] SynEdit, MultiHighlighter: fix adding text/sections at EOL. issue #0022745 git-svn-id: trunk@38428 - --- components/synedit/synhighlightermulti.pas | 6 +- .../synedit/test/testhighlightmulti.pas | 56 +++++++++++++++++++ 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/components/synedit/synhighlightermulti.pas b/components/synedit/synhighlightermulti.pas index 22eed20b44..da85c23e89 100644 --- a/components/synedit/synhighlightermulti.pas +++ b/components/synedit/synhighlightermulti.pas @@ -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) diff --git a/components/synedit/test/testhighlightmulti.pas b/components/synedit/test/testhighlightmulti.pas index 46b0e9624b..9cdb0921de 100644 --- a/components/synedit/test/testhighlightmulti.pas +++ b/components/synedit/test/testhighlightmulti.pas @@ -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, ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); + SynEdit.TestTypeText( ''+#13); +//DumpAll(MultiHl); + + FinishMultiXmlPasHl; + PopBaseName; + + + + + PushBaseName('0022745'); // Issue 0022745 + SynEdit.ClearAll; + InitMultiXmlPasHl; + + SynEdit.TestTypeText(1, 1, + ''+#13+ + ''+#13+ + ''+#13+ + ''+#13+ + ''+#13+ + ''+#13, + True + ); + + //PushBaseName('Insert ""'); + // 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