1
0
forked from aniani/vim

patch 8.2.1056: wrong display when mixing match conceal and syntax conceal

Problem:    Wrong display when mixing match conceal and syntax conceal.
Solution:   Adjust how conceal flags are used. (closes #6327, closes #6303)
This commit is contained in:
Bram Moolenaar
2020-06-25 20:07:04 +02:00
parent 73b4465ba7
commit 211dd3fd82
4 changed files with 90 additions and 30 deletions

View File

@@ -63,9 +63,9 @@ func Test_matchadd_and_conceallevel_3()
setlocal filetype=conf
syntax on
1put='# This is a Test'
" 1234567890123456
let expect = '#ThisisaTest'
1put='# This is a Test $'
" 1234567890123
let expect = '#ThisisaTest$'
call cursor(1, 1)
call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'X'})
@@ -73,22 +73,25 @@ func Test_matchadd_and_conceallevel_3()
let lnum = 2
call assert_equal(expect, Screenline(lnum))
call assert_equal(screenattr(lnum, 1), screenattr(lnum, 2))
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
call assert_equal(screenattr(lnum, 1), screenattr(lnum, 7))
call assert_equal(screenattr(lnum, 1), screenattr(lnum, 10))
call assert_equal(screenattr(lnum, 1), screenattr(lnum, 12))
call assert_equal(screenattr(lnum, 1), screenattr(lnum, 13))
call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 14))
call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 16))
" more matchadd()
" 1234567890123456
let expect = '#Thisisa Test'
" 12345678901234
let expect = '#Thisisa Test$'
call matchadd('ErrorMsg', '\%2l Test', 20, -1, {'conceal': 'X'})
redraw!
call assert_equal(expect, Screenline(lnum))
call assert_equal(screenattr(lnum, 1) , screenattr(lnum, 2))
call assert_equal(screenattr(lnum, 2) , screenattr(lnum, 7))
call assert_equal(screenattr(lnum, 1) , screenattr(lnum, 7))
call assert_notequal(screenattr(lnum, 1) , screenattr(lnum, 10))
call assert_equal(screenattr(lnum, 10), screenattr(lnum, 12))
call assert_equal(screenattr(lnum, 10), screenattr(lnum, 13))
call assert_equal(screenattr(lnum, 1), screenattr(lnum, 14))
call assert_notequal(screenattr(lnum, 1) , screenattr(lnum, 16))
call assert_notequal(screenattr(lnum, 10), screenattr(lnum, 16))
@@ -136,15 +139,18 @@ func Test_syn_and_match_conceal()
new
setlocal concealcursor=n conceallevel=1
1put='# This is a Test'
" 1234567890123456
let expect = '#ZThisZisZaZTest'
1put='# This is a Test '
call cursor(1, 1)
call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'Z'})
syntax match MyConceal /\%2l / conceal containedin=ALL cchar=*
redraw!
let lnum = 2
call cursor(1, 1)
" 123456789012345678
let expect = '#ZThisZisZaZTestZZ'
call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'Z'})
syntax match MyConceal /\%2l / conceal containedin=ALL
hi MyConceal ctermbg=4 ctermfg=2
redraw!
call assert_equal(expect, Screenline(lnum))
call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
@@ -152,8 +158,19 @@ func Test_syn_and_match_conceal()
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
" 1234567890123456
let expect = '#*This*is*a*Test'
syntax clear MyConceal
syntax match MyConceal /\%2l / conceal containedin=ALL cchar=*
redraw!
call assert_equal(expect, Screenline(lnum))
call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
" 123456789012345678
let expect = '#*This*is*a*Test**'
call clearmatches()
redraw!
@@ -164,6 +181,48 @@ func Test_syn_and_match_conceal()
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
" 123456789012345678
let expect = '#*ThisXis*a*Test**'
call matchadd('Conceal', '\%2l\%7c ', 10, -1, {'conceal': 'X'})
redraw!
call assert_equal(expect, Screenline(lnum))
call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
" 123456789012345678
let expect = '#*ThisXis*a*Test**'
call matchadd('ErrorMsg', '\%2l Test', 20, -1)
redraw!
call assert_equal(expect, Screenline(lnum))
call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
call assert_notequal(screenattr(lnum, 12), screenattr(lnum, 13))
call assert_equal(screenattr(lnum, 13), screenattr(lnum, 16))
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 17))
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 18))
call assert_notequal(screenattr(lnum, 18), screenattr(lnum, 19))
" 123456789012345678
let expect = '# ThisXis a Test'
syntax clear MyConceal
syntax match MyConceal /\%2l / conceal containedin=ALL
redraw!
call assert_equal(expect, Screenline(lnum))
call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 12))
call assert_notequal(screenattr(lnum, 12), screenattr(lnum, 13))
call assert_equal(screenattr(lnum, 13), screenattr(lnum, 16))
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 17))
call assert_equal(screenattr(lnum, 2), screenattr(lnum, 18))
call assert_notequal(screenattr(lnum, 18), screenattr(lnum, 19))
syntax off
quit!
endfunc