diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile | 2 | ||||
-rw-r--r-- | src/charset.c | 7 | ||||
-rw-r--r-- | src/testdir/Make_all.mak | 1 | ||||
-rw-r--r-- | src/testdir/test_alot_utf8.vim | 1 | ||||
-rw-r--r-- | src/testdir/test_utf8.in | 46 | ||||
-rw-r--r-- | src/testdir/test_utf8.ok | 22 | ||||
-rw-r--r-- | src/testdir/test_utf8.vim | 65 | ||||
-rw-r--r-- | src/version.c | 2 |
8 files changed, 76 insertions, 70 deletions
diff --git a/src/Makefile b/src/Makefile index a58821994..f993c8528 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2058,7 +2058,6 @@ test1 \ test_listlbr \ test_listlbr_utf8 \ test_search_mbyte \ - test_utf8 \ test_wordcount \ test3 test4 test5 test6 test7 test8 test9 \ test11 test12 test14 test15 test17 test18 test19 \ @@ -2183,6 +2182,7 @@ test_arglist \ test_undo \ test_unlet \ test_usercommands \ + test_utf8 \ test_viminfo \ test_viml \ test_visual \ diff --git a/src/charset.c b/src/charset.c index c047afec7..e766fa5f6 100644 --- a/src/charset.c +++ b/src/charset.c @@ -1296,7 +1296,14 @@ getvcol( if (pos->col == MAXCOL) posptr = NULL; /* continue until the NUL */ else + { posptr = ptr + pos->col; +#ifdef FEAT_MBYTE + if (has_mbyte) + /* always start on the first byte */ + posptr -= (*mb_head_off)(line, posptr); +#endif + } /* * This function is used very often, do some speed optimizations. diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak index 613b86804..c3db6fe30 100644 --- a/src/testdir/Make_all.mak +++ b/src/testdir/Make_all.mak @@ -84,7 +84,6 @@ SCRIPTS_ALL = \ test_listchars.out \ test_listlbr.out \ test_search_mbyte.out \ - test_utf8.out \ test_wordcount.out diff --git a/src/testdir/test_alot_utf8.vim b/src/testdir/test_alot_utf8.vim index 539e0e1e4..90b2aab46 100644 --- a/src/testdir/test_alot_utf8.vim +++ b/src/testdir/test_alot_utf8.vim @@ -9,3 +9,4 @@ source test_expr_utf8.vim source test_matchadd_conceal_utf8.vim source test_regexp_utf8.vim source test_source_utf8.vim +source test_utf8.vim diff --git a/src/testdir/test_utf8.in b/src/testdir/test_utf8.in deleted file mode 100644 index 1d6a7a44e..000000000 --- a/src/testdir/test_utf8.in +++ /dev/null @@ -1,46 +0,0 @@ -Tests for Unicode manipulations vim: set ft=vim : - -STARTTEST -:so small.vim -:set encoding=utf-8 -:" -:" Visual block Insert adjusts for multi-byte char -:new -:call setline(1, ["aaa", "あああ", "bbb"]) -:exe ":norm! gg0l\<C-V>jjIx\<Esc>" -:let r = getline(1, '$') -:" -:bwipeout! -:$put=r -:" -:" Test for built-in function strchars() -:for str in ["a", "あいa", "A\u20dd", "A\u20dd\u20dd", "\u20dd"] -: $put=strchars(str) -: $put=strchars(str, 0) -: $put=strchars(str, 1) -:endfor -:" -:" Test for customlist completion -:function! CustomComplete1(lead, line, pos) -: return ['あ', 'い'] -:endfunction -:command -nargs=1 -complete=customlist,CustomComplete1 Test1 echo -:call feedkeys(":Test1 \<C-L>'\<C-B>$put='\<CR>", 'it') -:" -:function! CustomComplete2(lead, line, pos) -: return ['あたし', 'あたま', 'あたりめ'] -:endfunction -:command -nargs=1 -complete=customlist,CustomComplete2 Test2 echo -:call feedkeys(":Test2 \<C-L>'\<C-B>$put='\<CR>", 'it') -:" -:function! CustomComplete3(lead, line, pos) -: return ['Nこ', 'Nん', 'Nぶ'] -:endfunction -:command -nargs=1 -complete=customlist,CustomComplete3 Test3 echo -:call feedkeys(":Test3 \<C-L>'\<C-B>$put='\<CR>", 'it') -:" -:call garbagecollect(1) -:/^start:/,$wq! test.out -ENDTEST - -start: diff --git a/src/testdir/test_utf8.ok b/src/testdir/test_utf8.ok deleted file mode 100644 index c6559226a..000000000 --- a/src/testdir/test_utf8.ok +++ /dev/null @@ -1,22 +0,0 @@ -start: -axaa -xあああ -bxbb -1 -1 -1 -3 -3 -3 -2 -2 -1 -3 -3 -1 -1 -1 -1 -Test1 -Test2 あた -Test3 N diff --git a/src/testdir/test_utf8.vim b/src/testdir/test_utf8.vim new file mode 100644 index 000000000..24e3db86f --- /dev/null +++ b/src/testdir/test_utf8.vim @@ -0,0 +1,65 @@ +" Tests for Unicode manipulations +if !has('multi_byte') + finish +endif + + +" Visual block Insert adjusts for multi-byte char +func Test_visual_block_insert() + new + call setline(1, ["aaa", "あああ", "bbb"]) + exe ":norm! gg0l\<C-V>jjIx\<Esc>" + call assert_equal(['axaa', 'xあああ', 'bxbb'], getline(1, '$')) + bwipeout! +endfunc + +" Test for built-in function strchars() +func Test_strchars() + let inp = ["a", "あいa", "A\u20dd", "A\u20dd\u20dd", "\u20dd"] + let exp = [[1, 1, 1], [3, 3, 3], [2, 2, 1], [3, 3, 1], [1, 1, 1]] + for i in range(len(inp)) + call assert_equal(exp[i][0], strchars(inp[i])) + call assert_equal(exp[i][1], strchars(inp[i], 0)) + call assert_equal(exp[i][2], strchars(inp[i], 1)) + endfor +endfunc + +" Test for customlist completion +function! CustomComplete1(lead, line, pos) + return ['あ', 'い'] +endfunction + +function! CustomComplete2(lead, line, pos) + return ['あたし', 'あたま', 'あたりめ'] +endfunction + +function! CustomComplete3(lead, line, pos) + return ['Nこ', 'Nん', 'Nぶ'] +endfunction + +func Test_customlist_completion() + command -nargs=1 -complete=customlist,CustomComplete1 Test1 echo + call feedkeys(":Test1 \<C-L>\<C-B>\"\<CR>", 'itx') + call assert_equal('"Test1 ', getreg(':')) + + command -nargs=1 -complete=customlist,CustomComplete2 Test2 echo + call feedkeys(":Test2 \<C-L>\<C-B>\"\<CR>", 'itx') + call assert_equal('"Test2 あた', getreg(':')) + + command -nargs=1 -complete=customlist,CustomComplete3 Test3 echo + call feedkeys(":Test3 \<C-L>\<C-B>\"\<CR>", 'itx') + call assert_equal('"Test3 N', getreg(':')) + + call garbagecollect(1) +endfunc + +" Yank one 3 byte character and check the mark columns. +func Test_getvcol() + new + call setline(1, "x\u2500x") + normal 0lvy + call assert_equal(2, col("'[")) + call assert_equal(4, col("']")) + call assert_equal(2, virtcol("'[")) + call assert_equal(2, virtcol("']")) +endfunc diff --git a/src/version.c b/src/version.c index b543b273a..94b47bb81 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 */ /**/ + 250, +/**/ 249, /**/ 248, |