forked from aniani/vim
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)
This commit is contained in:
parent
d2c061d24c
commit
4d785895d1
@ -7655,17 +7655,20 @@ synIDtrans({synID}) *synIDtrans()*
|
|||||||
":highlight link" are followed.
|
":highlight link" are followed.
|
||||||
|
|
||||||
synconcealed({lnum}, {col}) *synconcealed()*
|
synconcealed({lnum}, {col}) *synconcealed()*
|
||||||
The result is a List. The first item in the list is 0 if the
|
The result is a List with currently three items:
|
||||||
character at the position {lnum} and {col} is not part of a
|
1. The first item in the list is 0 if the character at the
|
||||||
concealable region, 1 if it is. The second item in the list is
|
position {lnum} and {col} is not part of a concealable
|
||||||
a string. If the first item is 1, the second item contains the
|
region, 1 if it is.
|
||||||
text which will be displayed in place of the concealed text,
|
2. The second item in the list is a string. If the first item
|
||||||
depending on the current setting of 'conceallevel'. The third
|
is 1, the second item contains the text which will be
|
||||||
and final item in the list is a unique number representing the
|
displayed in place of the concealed text, depending on the
|
||||||
specific syntax region matched. This allows detection of the
|
current setting of 'conceallevel' and 'listchars'.
|
||||||
beginning of a new concealable region if there are two
|
3. The third and final item in the list is a unique number
|
||||||
consecutive regions with the same replacement character.
|
representing the specific syntax region matched. This
|
||||||
For an example use see $VIMRUNTIME/syntax/2html.vim .
|
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()*
|
synstack({lnum}, {col}) *synstack()*
|
||||||
|
@ -11841,8 +11841,8 @@ f_synconcealed(typval_T *argvars UNUSED, typval_T *rettv)
|
|||||||
if ((syntax_flags & HL_CONCEAL) && curwin->w_p_cole < 3)
|
if ((syntax_flags & HL_CONCEAL) && curwin->w_p_cole < 3)
|
||||||
{
|
{
|
||||||
cchar = syn_get_sub_char();
|
cchar = syn_get_sub_char();
|
||||||
if (cchar == NUL && curwin->w_p_cole == 1 && lcs_conceal != NUL)
|
if (cchar == NUL && curwin->w_p_cole == 1)
|
||||||
cchar = lcs_conceal;
|
cchar = (lcs_conceal == NUL) ? ' ' : lcs_conceal;
|
||||||
if (cchar != NUL)
|
if (cchar != NUL)
|
||||||
{
|
{
|
||||||
# ifdef FEAT_MBYTE
|
# ifdef FEAT_MBYTE
|
||||||
|
@ -4,6 +4,8 @@ if !has("syntax")
|
|||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
source view_util.vim
|
||||||
|
|
||||||
func GetSyntaxItem(pat)
|
func GetSyntaxItem(pat)
|
||||||
let c = ''
|
let c = ''
|
||||||
let a = ['a', getreg('a'), getregtype('a')]
|
let a = ['a', getreg('a'), getregtype('a')]
|
||||||
@ -458,3 +460,46 @@ func Test_syntax_hangs()
|
|||||||
set redrawtime&
|
set redrawtime&
|
||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
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
|
||||||
|
@ -764,6 +764,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
659,
|
||||||
/**/
|
/**/
|
||||||
658,
|
658,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user