changeset 11579:52e3a77c097b v8.0.0672

patch 8.0.0672: third item of synconcealed() changes too often commit https://github.com/vim/vim/commit/cc0750dc6e878394ab0fd922b7ea4280918ae406 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jun 24 22:29:24 2017 +0200 patch 8.0.0672: third item of synconcealed() changes too often Problem: Third item of synconcealed() changes too often. (Dominique Pelle) Solution: Reset the sequence number at the start of each line.
author Christian Brabandt <cb@256bit.org>
date Sat, 24 Jun 2017 22:30:03 +0200
parents c2d4de06dc92
children 03d7eb8a9468
files runtime/doc/eval.txt src/syntax.c src/testdir/test_syntax.vim src/version.c
diffstat 4 files changed, 26 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 8.0.  Last change: 2017 Jun 23
+*eval.txt*	For Vim version 8.0.  Last change: 2017 Jun 24
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -7663,12 +7663,21 @@ synconcealed({lnum}, {col})				*synconce
 		   is 1, the second item contains the text which will be
 		   displayed in place of the concealed text, depending on the
 		   current setting of 'conceallevel' and 'listchars'.
-		3. The third and final item in the list is a unique number
-		   representing the specific syntax region matched. This
-		   allows detection of the beginning of a new concealable
-		   region if there are two consecutive regions with the same
-		   replacement character.  For an example use see
-		   $VIMRUNTIME/syntax/2html.vim .
+		3. The third and final item in the list is a number
+		   representing the specific syntax region matched in the
+		   line. When the character is not concealed the value is
+		   zero. This allows detection of the beginning of a new
+		   concealable region if there are two consecutive regions
+		   with the same replacement character.  For an example, if
+		   the text is "123456" and both "23" and "45" are concealed
+		   and replace by the character "X", then:
+			call			returns ~
+		   	synconcealed(lnum, 1)   [0, '', 0]
+		   	synconcealed(lnum, 2)   [1, 'X', 1]
+		   	synconcealed(lnum, 3)   [1, 'X', 1]
+		   	synconcealed(lnum, 4)   [1, 'X', 2]
+		   	synconcealed(lnum, 5)   [1, 'X', 2]
+		   	synconcealed(lnum, 6)   [0, '', 0]
 
 
 synstack({lnum}, {col})					*synstack()*
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -1061,6 +1061,7 @@ syn_start_line(void)
 
     next_match_idx = -1;
     ++current_line_id;
+    next_seqnr = 1;
 }
 
 /*
@@ -1857,6 +1858,7 @@ get_syntax_attr(
 #endif
 #ifdef FEAT_CONCEAL
 	current_flags = 0;
+	current_seqnr = 0;
 #endif
 	return 0;
     }
@@ -2346,6 +2348,7 @@ syn_current_attr(
 #endif
 #ifdef FEAT_CONCEAL
     current_flags = 0;
+    current_seqnr = 0;
 #endif
     if (cur_si != NULL)
     {
--- a/src/testdir/test_syntax.vim
+++ b/src/testdir/test_syntax.vim
@@ -474,24 +474,24 @@ func Test_conceal()
 
   set conceallevel=0
   call assert_equal('123456 ', ScreenLines(2, 7)[0])
-  call assert_equal([[0, ''], [0, ''], [0, ''], [0, ''], [0, ''], [0, '']], map(range(1, 6), 'synconcealed(2, v:val)[0:1]'))
+  call assert_equal([[0, '', 0], [0, '', 0], [0, '', 0], [0, '', 0], [0, '', 0], [0, '', 0]], map(range(1, 6), 'synconcealed(2, v:val)'))
 
   set conceallevel=1
   call assert_equal('1X 6   ', ScreenLines(2, 7)[0])
-  call assert_equal([[0, ''], [1, 'X'], [1, 'X'], [1, ' '], [1, ' '], [0, '']], map(range(1, 6), 'synconcealed(2, v:val)[0:1]'))
+  call assert_equal([[0, '', 0], [1, 'X', 1], [1, 'X', 1], [1, ' ', 2], [1, ' ', 2], [0, '', 0]], map(range(1, 6), 'synconcealed(2, v:val)'))
 
   set conceallevel=1
   set listchars=conceal:Y
-  call assert_equal([[0, ''], [1, 'X'], [1, 'X'], [1, 'Y'], [1, 'Y'], [0, '']], map(range(1, 6), 'synconcealed(2, v:val)[0:1]'))
+  call assert_equal([[0, '', 0], [1, 'X', 1], [1, 'X', 1], [1, 'Y', 2], [1, 'Y', 2], [0, '', 0]], map(range(1, 6), 'synconcealed(2, v:val)'))
   call assert_equal('1XY6   ', ScreenLines(2, 7)[0])
 
   set conceallevel=2
   call assert_match('1X6    ', ScreenLines(2, 7)[0])
-  call assert_equal([[0, ''], [1, 'X'], [1, 'X'], [1, ''], [1, ''], [0, '']], map(range(1, 6), 'synconcealed(2, v:val)[0:1]'))
+  call assert_equal([[0, '', 0], [1, 'X', 1], [1, 'X', 1], [1, '', 2], [1, '', 2], [0, '', 0]], map(range(1, 6), 'synconcealed(2, v:val)'))
 
   set conceallevel=3
   call assert_match('16     ', ScreenLines(2, 7)[0])
-  call assert_equal([[0, ''], [1, ''], [1, ''], [1, ''], [1, ''], [0, '']], map(range(1, 6), 'synconcealed(2, v:val)[0:1]'))
+  call assert_equal([[0, '', 0], [1, '', 1], [1, '', 1], [1, '', 2], [1, '', 2], [0, '', 0]], map(range(1, 6), 'synconcealed(2, v:val)'))
 
   syn clear
   set conceallevel&
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    672,
+/**/
     671,
 /**/
     670,