summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-06-22 22:00:50 +0200
committerBram Moolenaar <Bram@vim.org>2017-06-22 22:00:50 +0200
commit4d785895d1f8b54cdd3fabd87446ca692f49e94e (patch)
treed542ce7d05e2d7875f2d2523bbd16281cd0ca830
parentd2c061d24c0534f1f1b92f3462ed6ae8fa848a9a (diff)
downloadvim-4d785895d1f8b54cdd3fabd87446ca692f49e94e.zip
patch 8.0.0659: no test for conceal mode
Problem: No test for conceal mode. Solution: Add a conceal mode test. (Dominique Pelle, closes #1783)
-rw-r--r--runtime/doc/eval.txt25
-rw-r--r--src/evalfunc.c4
-rw-r--r--src/testdir/test_syntax.vim45
-rw-r--r--src/version.c2
4 files changed, 63 insertions, 13 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 818a0d7b4..04cad9dcd 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -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()*
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 2bbdefc6e..7c781d8b9 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -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
diff --git a/src/testdir/test_syntax.vim b/src/testdir/test_syntax.vim
index 427ed7b4f..0b1b4e46b 100644
--- a/src/testdir/test_syntax.vim
+++ b/src/testdir/test_syntax.vim
@@ -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
diff --git a/src/version.c b/src/version.c
index ab0381cc8..cb4ac7f0b 100644
--- 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 */
/**/
+ 659,
+/**/
658,
/**/
657,