To: vim_dev@googlegroups.com Subject: Patch 8.0.0659 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.0.0659 Problem: No test for conceal mode. Solution: Add a conceal mode test. (Dominique Pelle, closes #1783) Files: runtime/doc/eval.txt, src/evalfunc.c, src/testdir/test_syntax.vim *** ../vim-8.0.0658/runtime/doc/eval.txt 2017-06-22 21:29:17.205398557 +0200 --- runtime/doc/eval.txt 2017-06-22 21:56:10.516378889 +0200 *************** *** 7647,7663 **** ":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 . synstack({lnum}, {col}) *synstack()* --- 7655,7674 ---- ":highlight link" are followed. synconcealed({lnum}, {col}) *synconcealed()* ! 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()* *** ../vim-8.0.0658/src/evalfunc.c 2017-06-17 18:44:17.006000891 +0200 --- src/evalfunc.c 2017-06-22 21:49:30.759602715 +0200 *************** *** 11841,11848 **** 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) { # ifdef FEAT_MBYTE --- 11841,11848 ---- if ((syntax_flags & HL_CONCEAL) && curwin->w_p_cole < 3) { cchar = syn_get_sub_char(); ! if (cchar == NUL && curwin->w_p_cole == 1) ! cchar = (lcs_conceal == NUL) ? ' ' : lcs_conceal; if (cchar != NUL) { # ifdef FEAT_MBYTE *** ../vim-8.0.0658/src/testdir/test_syntax.vim 2017-06-18 22:40:36.532444606 +0200 --- src/testdir/test_syntax.vim 2017-06-22 21:49:30.759602715 +0200 *************** *** 4,9 **** --- 4,11 ---- finish endif + source view_util.vim + func GetSyntaxItem(pat) let c = '' let a = ['a', getreg('a'), getregtype('a')] *************** *** 458,460 **** --- 460,505 ---- 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 *** ../vim-8.0.0658/src/version.c 2017-06-22 21:42:43.794885033 +0200 --- src/version.c 2017-06-22 21:50:50.550958982 +0200 *************** *** 766,767 **** --- 766,769 ---- { /* Add new patch number below this line */ + /**/ + 659, /**/ -- hundred-and-one symptoms of being an internet addict: 63. You start using smileys in your snail mail. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///