Patch 7.3.1019
Problem:    These do not work with the new regexp engine: \%o123, \%x123,
            \%d123, \%u123 and \%U123.
Solution:   Implement these items.
Files:      src/regexp_nfa.c


*** ../vim-7.3.1018/src/regexp_nfa.c    2013-05-25 21:18:30.000000000 +0200
--- src/regexp_nfa.c    2013-05-25 21:56:16.000000000 +0200
***************
*** 604,610 ****
      char_u    *endp;
  #ifdef FEAT_MBYTE
      char_u    *old_regparse = regparse;
-     int               clen;
      int               i;
  #endif
      int               extra = 0;
--- 604,609 ----
***************
*** 623,637 ****
      cpo_bsl = vim_strchr(p_cpo, CPO_BACKSL) != NULL;
  
      c = getchr();
- 
- #ifdef FEAT_MBYTE
-     /* clen has the length of the current char, without composing chars */
-     clen = (*mb_char2len)(c);
-     if (has_mbyte && clen > 1)
-       goto nfa_do_multibyte;
- #endif
      switch (c)
      {
        case Magic('^'):
            EMIT(NFA_BOL);
            break;
--- 622,633 ----
      cpo_bsl = vim_strchr(p_cpo, CPO_BACKSL) != NULL;
  
      c = getchr();
      switch (c)
      {
+       case NUL:
+           syntax_error = TRUE;
+           EMSG_RET_FAIL(_("E865: (NFA) Regexp end encountered prematurely"));
+ 
        case Magic('^'):
            EMIT(NFA_BOL);
            break;
***************
*** 747,756 ****
                return FAIL;        /* cascaded error */
            break;
  
-       case NUL:
-           syntax_error = TRUE;
-           EMSG_RET_FAIL(_("E865: (NFA) Regexp end encountered prematurely"));
- 
        case Magic('|'):
        case Magic('&'):
        case Magic(')'):
--- 743,748 ----
***************
*** 834,844 ****
                case 'x':   /* %xab hex 2 */
                case 'u':   /* %uabcd hex 4 */
                case 'U':   /* %U1234abcd hex 8 */
!                   /* Not yet supported */
!                   return FAIL;
  
!                   c = coll_get_char();
!                   EMIT(c);
                    break;
  
                /* Catch \%^ and \%$ regardless of where they appear in the
--- 826,851 ----
                case 'x':   /* %xab hex 2 */
                case 'u':   /* %uabcd hex 4 */
                case 'U':   /* %U1234abcd hex 8 */
!                   {
!                       int i;
  
!                       switch (c)
!                       {
!                           case 'd': i = getdecchrs(); break;
!                           case 'o': i = getoctchrs(); break;
!                           case 'x': i = gethexchrs(2); break;
!                           case 'u': i = gethexchrs(4); break;
!                           case 'U': i = gethexchrs(8); break;
!                           default:  i = -1; break;
!                       }
! 
!                       if (i < 0)
!                           EMSG2_RET_FAIL(
!                              _("E678: Invalid character after %s%%[dxouU]"),
!                                   reg_magic == MAGIC_ALL);
!                       /* TODO: what if a composing character follows? */
!                       EMIT(i);
!                   }
                    break;
  
                /* Catch \%^ and \%$ regardless of where they appear in the
***************
*** 1217,1225 ****
                int     plen;
  
  nfa_do_multibyte:
!               /* Length of current char with composing chars. */
!               if (enc_utf8 && (clen != (plen = (*mb_ptr2len)(old_regparse))
!                           || utf_iscomposing(c)))
                {
                    /* A base character plus composing characters, or just one
                     * or more composing characters.
--- 1224,1233 ----
                int     plen;
  
  nfa_do_multibyte:
!               /* plen is length of current char with composing chars */
!               if (enc_utf8 && ((*mb_char2len)(c)
!                           != (plen = (*mb_ptr2len)(old_regparse))
!                                                      || utf_iscomposing(c)))
                {
                    /* A base character plus composing characters, or just one
                     * or more composing characters.
*** ../vim-7.3.1018/src/version.c       2013-05-25 21:18:30.000000000 +0200
--- src/version.c       2013-05-25 22:00:51.000000000 +0200
***************
*** 730,731 ****
--- 730,733 ----
  {   /* Add new patch number below this line */
+ /**/
+     1019,
  /**/

-- 
The budget process was invented by an alien race of sadistic beings who
resemble large cats.
                                (Scott Adams - The Dilbert principle)

 /// 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/groups/opt_out.


Raspunde prin e-mail lui