Patch 7.4.771
Problem:    Search does not handle multi-byte character at the start position
            correctly.
Solution:   Take byte size of character into account. (Yukihiro Nakadaira)
Files:      src/search.c, src/testdir/Make_amiga.mak,
            src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
            src/testdir/Make_os2.mak, src/testdir/Make_vms.mms,
            src/testdir/Makefile, src/testdir/test_search_mbyte.in,
            src/testdir/test_search_mbyte.ok


*** ../vim-7.4.770/src/search.c 2015-03-13 15:02:46.254059251 +0100
--- src/search.c        2015-07-10 14:37:49.055931842 +0200
***************
*** 548,553 ****
--- 548,554 ----
      pos_T     start_pos;
      int               at_first_line;
      int               extra_col;
+     int               start_char_len;
      int               match_ok;
      long      nmatched;
      int               submatch = 0;
***************
*** 574,596 ****
        /* When not accepting a match at the start position set "extra_col" to
         * a non-zero value.  Don't do that when starting at MAXCOL, since
         * MAXCOL + 1 is zero. */
!       if ((options & SEARCH_START) || pos->col == MAXCOL)
!           extra_col = 0;
  #ifdef FEAT_MBYTE
        /* Watch out for the "col" being MAXCOL - 2, used in a closed fold. */
!       else if (dir != BACKWARD && has_mbyte
!                    && pos->lnum >= 1 && pos->lnum <= buf->b_ml.ml_line_count
!                                                    && pos->col < MAXCOL - 2)
        {
            ptr = ml_get_buf(buf, pos->lnum, FALSE) + pos->col;
            if (*ptr == NUL)
!               extra_col = 1;
            else
!               extra_col = (*mb_ptr2len)(ptr);
        }
  #endif
        else
!           extra_col = 1;
  
        start_pos = *pos;       /* remember start pos for detecting no match */
        found = 0;              /* default: not found */
--- 575,611 ----
        /* When not accepting a match at the start position set "extra_col" to
         * a non-zero value.  Don't do that when starting at MAXCOL, since
         * MAXCOL + 1 is zero. */
!       if (pos->col == MAXCOL)
!           start_char_len = 0;
  #ifdef FEAT_MBYTE
        /* Watch out for the "col" being MAXCOL - 2, used in a closed fold. */
!       else if (has_mbyte
!                   && pos->lnum >= 1 && pos->lnum <= buf->b_ml.ml_line_count
!                                                   && pos->col < MAXCOL - 2)
        {
            ptr = ml_get_buf(buf, pos->lnum, FALSE) + pos->col;
            if (*ptr == NUL)
!               start_char_len = 1;
            else
!               start_char_len = (*mb_ptr2len)(ptr);
        }
  #endif
        else
!           start_char_len = 1;
!       if (dir == FORWARD)
!       {
!           if (options & SEARCH_START)
!               extra_col = 0;
!           else
!               extra_col = start_char_len;
!       }
!       else
!       {
!           if (options & SEARCH_START)
!               extra_col = start_char_len;
!           else
!               extra_col = 0;
!       }
  
        start_pos = *pos;       /* remember start pos for detecting no match */
        found = 0;              /* default: not found */
***************
*** 779,793 ****
                                        || (lnum + regmatch.endpos[0].lnum
                                                             == start_pos.lnum
                                             && (int)regmatch.endpos[0].col - 1
!                                                                  + extra_col
!                                                       <= (int)start_pos.col))
                                    : (lnum + regmatch.startpos[0].lnum
                                                              < start_pos.lnum
                                        || (lnum + regmatch.startpos[0].lnum
                                                             == start_pos.lnum
                                             && (int)regmatch.startpos[0].col
!                                                                  + extra_col
!                                                     <= (int)start_pos.col))))
                            {
                                match_ok = TRUE;
                                matchpos = regmatch.startpos[0];
--- 794,808 ----
                                        || (lnum + regmatch.endpos[0].lnum
                                                             == start_pos.lnum
                                             && (int)regmatch.endpos[0].col - 1
!                                                       < (int)start_pos.col
!                                                               + extra_col))
                                    : (lnum + regmatch.startpos[0].lnum
                                                              < start_pos.lnum
                                        || (lnum + regmatch.startpos[0].lnum
                                                             == start_pos.lnum
                                             && (int)regmatch.startpos[0].col
!                                                     < (int)start_pos.col
!                                                             + extra_col))))
                            {
                                match_ok = TRUE;
                                matchpos = regmatch.startpos[0];
*** ../vim-7.4.770/src/testdir/Make_amiga.mak   2015-06-25 13:57:20.033431073 
+0200
--- src/testdir/Make_amiga.mak  2015-07-10 14:36:33.776641084 +0200
***************
*** 57,62 ****
--- 57,63 ----
                test_perl.out \
                test_qf_title.out \
                test_ruby.out \
+               test_search_mbyte.out \
                test_set.out \
                test_signs.out \
                test_textobjects.out \
***************
*** 205,210 ****
--- 206,212 ----
  test_perl.out: test_perl.in
  test_qf_title.out: test_qf_title.in
  test_ruby.out: test_ruby.in
+ test_search_mbyte.out: test_search_mbyte.in
  test_set.out: test_set.in
  test_signs.out: test_signs.in
  test_textobjects.out: test_textobjects.in
*** ../vim-7.4.770/src/testdir/Make_dos.mak     2015-06-25 13:57:20.033431073 
+0200
--- src/testdir/Make_dos.mak    2015-07-10 14:36:43.384550582 +0200
***************
*** 56,61 ****
--- 56,62 ----
                test_perl.out \
                test_qf_title.out \
                test_ruby.out \
+               test_search_mbyte.out \
                test_set.out \
                test_signs.out \
                test_textobjects.out \
*** ../vim-7.4.770/src/testdir/Make_ming.mak    2015-06-25 13:57:20.033431073 
+0200
--- src/testdir/Make_ming.mak   2015-07-10 14:36:50.716481518 +0200
***************
*** 78,83 ****
--- 78,84 ----
                test_perl.out \
                test_qf_title.out \
                test_ruby.out \
+               test_search_mbyte.out \
                test_set.out \
                test_signs.out \
                test_textobjects.out \
*** ../vim-7.4.770/src/testdir/Make_os2.mak     2015-06-25 13:57:20.033431073 
+0200
--- src/testdir/Make_os2.mak    2015-07-10 14:36:52.820461700 +0200
***************
*** 58,63 ****
--- 58,64 ----
                test_perl.out \
                test_qf_title.out \
                test_ruby.out \
+               test_search_mbyte.out \
                test_set.out \
                test_signs.out \
                test_textobjects.out \
*** ../vim-7.4.770/src/testdir/Make_vms.mms     2015-06-25 13:57:20.033431073 
+0200
--- src/testdir/Make_vms.mms    2015-07-10 14:36:58.240410647 +0200
***************
*** 4,10 ****
  # Authors:    Zoltan Arpadffy, <[email protected]>
  #             Sandor Kopanyi,  <[email protected]>
  #
! # Last change:  2015 Jun 19
  #
  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
  # Edit the lines in the Configuration section below to select.
--- 4,10 ----
  # Authors:    Zoltan Arpadffy, <[email protected]>
  #             Sandor Kopanyi,  <[email protected]>
  #
! # Last change:  2015 Jul 10
  #
  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
  # Edit the lines in the Configuration section below to select.
***************
*** 117,122 ****
--- 117,123 ----
         test_perl.out \
         test_qf_title.out \
         test_ruby.out \
+        test_search_mbyte.out \
         test_set.out \
         test_signs.out \
         test_textobjects.out \
*** ../vim-7.4.770/src/testdir/Makefile 2015-06-25 13:57:20.033431073 +0200
--- src/testdir/Makefile        2015-07-10 14:37:09.404305492 +0200
***************
*** 54,59 ****
--- 54,60 ----
                test_perl.out \
                test_qf_title.out \
                test_ruby.out \
+               test_search_mbyte.out \
                test_set.out \
                test_signs.out \
                test_textobjects.out \
*** ../vim-7.4.770/src/testdir/test_search_mbyte.in     2015-07-10 
14:42:43.513156459 +0200
--- src/testdir/test_search_mbyte.in    2015-07-10 14:33:38.430293025 +0200
***************
*** 0 ****
--- 1,15 ----
+ Test for search('multi-byte char', 'bce')
+ 
+ STARTTEST
+ :source small.vim
+ :source mbyte.vim
+ :set encoding=utf-8
+ :/^Test bce:/+1
+ :$put =search('A', 'bce', line('.'))
+ :1;/^Results:/,$wq! test.out
+ ENDTEST
+ 
+ Results:
+ 
+ Test bce:
+ A
*** ../vim-7.4.770/src/testdir/test_search_mbyte.ok     2015-07-10 
14:42:43.517156422 +0200
--- src/testdir/test_search_mbyte.ok    2015-07-10 14:34:23.409869226 +0200
***************
*** 0 ****
--- 1,5 ----
+ Results:
+ 
+ Test bce:
+ A
+ 15
*** ../vim-7.4.770/src/version.c        2015-07-10 14:05:03.930436893 +0200
--- src/version.c       2015-07-10 14:37:46.207958692 +0200
***************
*** 743,744 ****
--- 743,746 ----
  {   /* Add new patch number below this line */
+ /**/
+     771,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
197. Your desk collapses under the weight of your computer peripherals.

 /// 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