]> granicus.if.org Git - vim/commitdiff
patch 8.0.0659: no test for conceal mode v8.0.0659
authorBram Moolenaar <Bram@vim.org>
Thu, 22 Jun 2017 20:00:50 +0000 (22:00 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 22 Jun 2017 20:00:50 +0000 (22:00 +0200)
Problem:    No test for conceal mode.
Solution:   Add a conceal mode test. (Dominique Pelle, closes #1783)

runtime/doc/eval.txt
src/evalfunc.c
src/testdir/test_syntax.vim
src/version.c

index 818a0d7b4cc1d78bcda8c7db747be8f067bdf05b..04cad9dcd22d683c2feeade1301c0668ef62fb01 100644 (file)
@@ -7655,17 +7655,20 @@ synIDtrans({synID})                                     *synIDtrans()*
                ":highlight link" are followed.
 
 synconcealed({lnum}, {col})                            *synconcealed()*
-               The result is a List. The first item in the list is 0 if the
-               character at the position {lnum} and {col} is not part of a
-               concealable region, 1 if it is. The second item in the list is
-               a string. If the first item 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'. 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 .
+               The result is a List with currently three items:
+               1. The first item in the list is 0 if the character at the
+                  position {lnum} and {col} is not part of a concealable
+                  region, 1 if it is.
+               2. The second item in the list is a string. If the first item
+                  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 .
 
 
 synstack({lnum}, {col})                                        *synstack()*
index 2bbdefc6ef2d254d3f0df992e888e3bb73716865..7c781d8b916220488c0e025ba101e1f94e71a87d 100644 (file)
@@ -11841,8 +11841,8 @@ f_synconcealed(typval_T *argvars UNUSED, typval_T *rettv)
            if ((syntax_flags & HL_CONCEAL) && curwin->w_p_cole < 3)
            {
                cchar = syn_get_sub_char();
-               if (cchar == NUL && curwin->w_p_cole == 1 && lcs_conceal != NUL)
-                   cchar = lcs_conceal;
+               if (cchar == NUL && curwin->w_p_cole == 1)
+                   cchar = (lcs_conceal == NUL) ? ' ' : lcs_conceal;
                if (cchar != NUL)
                {
 # ifdef FEAT_MBYTE
index 427ed7b4f0ae5f3d1a24cdea9eddc530c72bfc03..0b1b4e46b3d1708a5d60ac8f181654a84318b681 100644 (file)
@@ -4,6 +4,8 @@ if !has("syntax")
   finish
 endif
 
+source view_util.vim
+
 func GetSyntaxItem(pat)
   let c = ''
   let a = ['a', getreg('a'), getregtype('a')]
@@ -458,3 +460,46 @@ func Test_syntax_hangs()
   set redrawtime&
   bwipe!
 endfunc
+
+
+func Test_conceal()
+  if !has('conceal')
+    return
+  endif
+
+  new
+  call setline(1, ['', '123456'])
+  syn match test23 "23" conceal cchar=X
+  syn match test45 "45" 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]'))
+
+  set conceallevel=1
+  call assert_equal('1X 6   ', ScreenLines(2, 7)[0])
+  " FIXME: with conceallevel=1, I would expect that the portion "45" of
+  " the line to be replaced with a space since ":help 'conceallevel'
+  " states that if listchars is not set, then the default replacement
+  " should be a space. But synconcealed() gives an empty string in
+  " the 2nd value of the returned list. Bug?
+  " So for now, the following line is commented out:
+  call assert_equal([[0, ''], [1, 'X'], [1, 'X'], [1, ' '], [1, ' '], [0, '']], map(range(1, 6), 'synconcealed(2, v:val)[0:1]'))
+
+  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('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]'))
+
+  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]'))
+
+  syn clear
+  set conceallevel&
+  bw!
+endfunc
index ab0381cc8fb910eef8d9242b2226aef7e9cd1095..cb4ac7f0b1cc500b41a5bc69a394aa494e6c9851 100644 (file)
@@ -764,6 +764,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    659,
 /**/
     658,
 /**/