Patch 8.0.0250
Problem:    When virtcol() gets a column that is not the first byte of a
            multi-byte character the result is unpredictable. (Christian
            Ludwig)
Solution:   Correct the column to the first byte of a multi-byte character.
            Change the utf-8 test to new style.
Files:      src/charset.c, src/testdir/test_utf8.in, src/testdir/test_utf8.ok,
            src/testdir/test_utf8.vim, src/Makefile, src/testdir/Make_all.mak,
            src/testdir/test_alot_utf8.vim


*** ../vim-8.0.0249/src/charset.c       2017-01-22 18:34:53.680030808 +0100
--- src/charset.c       2017-01-28 13:09:08.113016078 +0100
***************
*** 1296,1302 ****
--- 1296,1309 ----
      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.
*** ../vim-8.0.0249/src/testdir/test_utf8.in    2015-11-22 15:04:56.000000000 
+0100
--- src/testdir/test_utf8.in    1970-01-01 01:00:00.000000000 +0100
***************
*** 1,46 ****
- 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:
--- 0 ----
*** ../vim-8.0.0249/src/testdir/test_utf8.ok    2015-11-19 18:42:47.000000000 
+0100
--- src/testdir/test_utf8.ok    1970-01-01 01:00:00.000000000 +0100
***************
*** 1,22 ****
- start:
- axaa
- xあああ
- bxbb
- 1
- 1
- 1
- 3
- 3
- 3
- 2
- 2
- 1
- 3
- 3
- 1
- 1
- 1
- 1
- Test1 
- Test2 あた
- Test3 N
--- 0 ----
*** ../vim-8.0.0249/src/testdir/test_utf8.vim   2017-01-28 13:46:00.323189782 
+0100
--- src/testdir/test_utf8.vim   2017-01-28 13:36:55.086595457 +0100
***************
*** 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
*** ../vim-8.0.0249/src/Makefile        2017-01-24 18:58:14.910505196 +0100
--- src/Makefile        2017-01-28 13:13:36.431338517 +0100
***************
*** 2058,2064 ****
        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 \
--- 2058,2063 ----
***************
*** 2183,2188 ****
--- 2182,2188 ----
        test_undo \
        test_unlet \
        test_usercommands \
+       test_utf8 \
        test_viminfo \
        test_viml \
        test_visual \
*** ../vim-8.0.0249/src/testdir/Make_all.mak    2017-01-24 18:58:14.910505196 
+0100
--- src/testdir/Make_all.mak    2017-01-28 13:13:49.311257953 +0100
***************
*** 84,90 ****
        test_listchars.out \
        test_listlbr.out \
        test_search_mbyte.out \
-       test_utf8.out \
        test_wordcount.out
  
  
--- 84,89 ----
*** ../vim-8.0.0249/src/testdir/test_alot_utf8.vim      2016-08-17 
21:29:14.000000000 +0200
--- src/testdir/test_alot_utf8.vim      2017-01-28 13:14:29.783004807 +0100
***************
*** 9,11 ****
--- 9,12 ----
  source test_matchadd_conceal_utf8.vim
  source test_regexp_utf8.vim
  source test_source_utf8.vim
+ source test_utf8.vim
*** ../vim-8.0.0249/src/version.c       2017-01-27 22:20:09.539496898 +0100
--- src/version.c       2017-01-28 13:45:18.595450378 +0100
***************
*** 766,767 ****
--- 766,769 ----
  {   /* Add new patch number below this line */
+ /**/
+     250,
  /**/

-- 
MARTHA'S WAY: Don't throw out all that leftover wine. Freeze into ice cubes
              for future use in casseroles and sauces.
MY WAY:       What leftover wine?

 /// Bram Moolenaar -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui