Blob Blame History Raw
To: vim_dev@googlegroups.com
Subject: Patch 7.3.1019
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
------------

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 -- Bram@Moolenaar.net -- 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    ///