Patch 7.4.2222
Problem:    Sourcing a script where a character has 0x80 as a second byte does
            not work. (Filipe L B Correia)
Solution:   Turn 0x80 into K_SPECIAL KS_SPECIAL KE_FILLER. (Christian
            Brabandt, closes #728)  Add a test case.
Files:      src/getchar.c, src/proto/getchar.pro, src/misc1.c,
            src/testdir/test_regexp_utf8.vim


*** ../vim-7.4.2221/src/getchar.c       2016-06-04 20:25:01.181991001 +0200
--- src/getchar.c       2016-08-16 22:46:18.568743633 +0200
***************
*** 3060,3066 ****
      if (typebuf_changed(tb_change_cnt))
        return 0;
  
!     return fix_input_buffer(buf, len, script_char >= 0);
  }
  
  /*
--- 3060,3066 ----
      if (typebuf_changed(tb_change_cnt))
        return 0;
  
!     return fix_input_buffer(buf, len);
  }
  
  /*
***************
*** 3069,3078 ****
   * Returns the new length.
   */
      int
! fix_input_buffer(
!     char_u    *buf,
!     int               len,
!     int               script)         /* TRUE when reading from a script */
  {
      int               i;
      char_u    *p = buf;
--- 3069,3075 ----
   * Returns the new length.
   */
      int
! fix_input_buffer(char_u *buf, int len)
  {
      int               i;
      char_u    *p = buf;
***************
*** 3083,3089 ****
       * Replace             NUL by K_SPECIAL KS_ZERO    KE_FILLER
       * Replace K_SPECIAL by K_SPECIAL KS_SPECIAL KE_FILLER
       * Replace       CSI by K_SPECIAL KS_EXTRA   KE_CSI
-      * Don't replace K_SPECIAL when reading a script file.
       */
      for (i = len; --i >= 0; ++p)
      {
--- 3080,3085 ----
***************
*** 3106,3112 ****
        }
        else
  #endif
!       if (p[0] == NUL || (p[0] == K_SPECIAL && !script
  #ifdef FEAT_AUTOCMD
                    /* timeout may generate K_CURSORHOLD */
                    && (i < 2 || p[1] != KS_EXTRA || p[2] != (int)KE_CURSORHOLD)
--- 3102,3108 ----
        }
        else
  #endif
!       if (p[0] == NUL || (p[0] == K_SPECIAL
  #ifdef FEAT_AUTOCMD
                    /* timeout may generate K_CURSORHOLD */
                    && (i < 2 || p[1] != KS_EXTRA || p[2] != (int)KE_CURSORHOLD)
*** ../vim-7.4.2221/src/proto/getchar.pro       2016-06-04 13:32:31.042331459 
+0200
--- src/proto/getchar.pro       2016-08-16 22:46:46.660486711 +0200
***************
*** 47,53 ****
  int vpeekc_any(void);
  int char_avail(void);
  void vungetc(int c);
! int fix_input_buffer(char_u *buf, int len, int script);
  int input_available(void);
  int do_map(int maptype, char_u *arg, int mode, int abbrev);
  int get_map_mode(char_u **cmdp, int forceit);
--- 47,53 ----
  int vpeekc_any(void);
  int char_avail(void);
  void vungetc(int c);
! int fix_input_buffer(char_u *buf, int len);
  int input_available(void);
  int do_map(int maptype, char_u *arg, int mode, int abbrev);
  int get_map_mode(char_u **cmdp, int forceit);
*** ../vim-7.4.2221/src/misc1.c 2016-07-24 21:58:39.708057598 +0200
--- src/misc1.c 2016-08-16 22:46:33.996602532 +0200
***************
*** 3416,3422 ****
        if (n > 0)
        {
            /* Replace zero and CSI by a special key code. */
!           n = fix_input_buffer(buf + len, n, FALSE);
            len += n;
            waited = 0;
        }
--- 3416,3422 ----
        if (n > 0)
        {
            /* Replace zero and CSI by a special key code. */
!           n = fix_input_buffer(buf + len, n);
            len += n;
            waited = 0;
        }
*** ../vim-7.4.2221/src/testdir/test_regexp_utf8.vim    2016-07-21 
20:33:28.835262339 +0200
--- src/testdir/test_regexp_utf8.vim    2016-08-16 22:42:47.786671780 +0200
***************
*** 25,35 ****
--- 25,37 ----
  func Test_equivalence_re1()
    set re=1
    call s:equivalence_test()
+   set re=0
  endfunc
  
  func Test_equivalence_re2()
    set re=2
    call s:equivalence_test()
+   set re=0
  endfunc
  
  func s:classes_test()
***************
*** 82,90 ****
--- 84,109 ----
  func Test_classes_re1()
    set re=1
    call s:classes_test()
+   set re=0
  endfunc
  
  func Test_classes_re2()
    set re=2
    call s:classes_test()
+   set re=0
+ endfunc
+ 
+ func Test_source_utf8()
+   " check that sourcing a script with 0x80 as second byte works
+   new
+   call setline(1, [':%s/àx/--à1234--/g', ':%s/Àx/--À1234--/g'])
+   write! Xscript
+   bwipe!
+   new
+   call setline(1, [' àx ', ' Àx '])
+   source! Xscript | echo
+   call assert_equal(' --à1234-- ', getline(1))
+   call assert_equal(' --À1234-- ', getline(2))
+   bwipe!
+   call delete('Xscript')
  endfunc
*** ../vim-7.4.2221/src/version.c       2016-08-16 21:58:36.726878365 +0200
--- src/version.c       2016-08-16 22:49:49.850811543 +0200
***************
*** 765,766 ****
--- 765,768 ----
  {   /* Add new patch number below this line */
+ /**/
+     2222,
  /**/

-- 
How To Keep A Healthy Level Of Insanity:
15. Five days in advance, tell your friends you can't attend their
    party because you're not in the mood.

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