[vim] - patchlevel 1117

Karsten Hopp karsten at fedoraproject.org
Thu Jun 13 22:30:21 UTC 2013


commit 7918ec00154ed66982feae71f5bd762652908cdb
Author: Karsten Hopp <karsten at redhat.com>
Date:   Fri Jun 14 00:28:01 2013 +0200

    - patchlevel 1117

 7.3.1117 |  337 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 337 insertions(+), 0 deletions(-)
---
diff --git a/7.3.1117 b/7.3.1117
new file mode 100644
index 0000000..524cafe
--- /dev/null
+++ b/7.3.1117
@@ -0,0 +1,337 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.1117
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.1117
+Problem:    New regexp engine: \%[abc] not supported.
+Solution:   Implement \%[abc].  Add tests.
+Files:	    src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+
+*** ../vim-7.3.1116/src/regexp_nfa.c	2013-06-05 11:01:59.000000000 +0200
+--- src/regexp_nfa.c	2013-06-05 11:03:19.000000000 +0200
+***************
+*** 61,66 ****
+--- 61,67 ----
+      NFA_COMPOSING,		    /* Next nodes in NFA are part of the
+  				       composing multibyte char */
+      NFA_END_COMPOSING,		    /* End of a composing char in the NFA */
++     NFA_OPT_CHARS,		    /* \%[abc] */
+  
+      /* The following are used only in the postfix form, not in the NFA */
+      NFA_PREV_ATOM_NO_WIDTH,	    /* Used for \@= */
+***************
+*** 972,979 ****
+  #endif
+  
+  		case '[':
+! 		    /* TODO: \%[abc] not supported yet */
+! 		    return FAIL;
+  
+  		default:
+  		    {
+--- 973,993 ----
+  #endif
+  
+  		case '[':
+! 		    {
+! 			int	    n;
+! 
+! 			/* \%[abc] */
+! 			for (n = 0; (c = getchr()) != ']'; ++n)
+! 			{
+! 			    if (c == NUL)
+! 				EMSG2_RET_FAIL(_(e_missing_sb),
+! 						      reg_magic == MAGIC_ALL);
+! 			    EMIT(c);
+! 			}
+! 			EMIT(NFA_OPT_CHARS);
+! 			EMIT(n);
+! 			break;
+! 		    }
+  
+  		default:
+  		    {
+***************
+*** 989,995 ****
+  			}
+  			if (c == 'l' || c == 'c' || c == 'v')
+  			{
+- 			    EMIT(n);
+  			    if (c == 'l')
+  				/* \%{n}l  \%{n}<l  \%{n}>l  */
+  				EMIT(cmp == '<' ? NFA_LNUM_LT :
+--- 1003,1008 ----
+***************
+*** 1002,1015 ****
+  				/* \%{n}v  \%{n}<v  \%{n}>v  */
+  				EMIT(cmp == '<' ? NFA_VCOL_LT :
+  				     cmp == '>' ? NFA_VCOL_GT : NFA_VCOL);
+  			    break;
+  			}
+  			else if (c == '\'' && n == 0)
+  			{
+  			    /* \%'m  \%<'m  \%>'m  */
+- 			    EMIT(getchr());
+  			    EMIT(cmp == '<' ? NFA_MARK_LT :
+  				 cmp == '>' ? NFA_MARK_GT : NFA_MARK);
+  			    break;
+  			}
+  		    }
+--- 1015,1029 ----
+  				/* \%{n}v  \%{n}<v  \%{n}>v  */
+  				EMIT(cmp == '<' ? NFA_VCOL_LT :
+  				     cmp == '>' ? NFA_VCOL_GT : NFA_VCOL);
++ 			    EMIT(n);
+  			    break;
+  			}
+  			else if (c == '\'' && n == 0)
+  			{
+  			    /* \%'m  \%<'m  \%>'m  */
+  			    EMIT(cmp == '<' ? NFA_MARK_LT :
+  				 cmp == '>' ? NFA_MARK_GT : NFA_MARK);
++ 			    EMIT(getchr());
+  			    break;
+  			}
+  		    }
+***************
+*** 1885,1890 ****
+--- 1899,1905 ----
+  
+  	case NFA_COMPOSING:	    STRCPY(code, "NFA_COMPOSING"); break;
+  	case NFA_END_COMPOSING:	    STRCPY(code, "NFA_END_COMPOSING"); break;
++ 	case NFA_OPT_CHARS:	    STRCPY(code, "NFA_OPT_CHARS"); break;
+  
+  	case NFA_MOPEN:
+  	case NFA_MOPEN1:
+***************
+*** 2558,2567 ****
+--- 2573,2621 ----
+  	    PUSH(frag(s, list1(&s->out)));
+  	    break;
+  
++ 	case NFA_OPT_CHARS:
++ 	  {
++ 	    int    n;
++ 
++ 	    /* \%[abc] */
++ 	    n = *++p; /* get number of characters */
++ 	    if (nfa_calc_size == TRUE)
++ 	    {
++ 		nstate += n;
++ 		break;
++ 	    }
++ 	    e1.out = NULL; /* stores list with out1's */
++ 	    s1 = NULL; /* previous NFA_SPLIT to connect to */
++ 	    while (n-- > 0)
++ 	    {
++ 		e = POP(); /* get character */
++ 		s = alloc_state(NFA_SPLIT, e.start, NULL);
++ 		if (s == NULL)
++ 		    goto theend;
++ 		if (e1.out == NULL)
++ 		    e1 = e;
++ 		patch(e.out, s1);
++ 		append(e1.out, list1(&s->out1));
++ 		s1 = s;
++ 	    }
++ 	    PUSH(frag(s, e1.out));
++ 	    break;
++ 	  }
++ 
+  	case NFA_PREV_ATOM_NO_WIDTH:
+  	case NFA_PREV_ATOM_NO_WIDTH_NEG:
+  	case NFA_PREV_ATOM_JUST_BEFORE:
+  	case NFA_PREV_ATOM_JUST_BEFORE_NEG:
++ 	  {
++ 	    int neg = (*p == NFA_PREV_ATOM_NO_WIDTH_NEG
++ 				      || *p == NFA_PREV_ATOM_JUST_BEFORE_NEG);
++ 	    int before = (*p == NFA_PREV_ATOM_JUST_BEFORE
++ 				      || *p == NFA_PREV_ATOM_JUST_BEFORE_NEG);
++ 	    int n;
++ 
++ 	    if (before)
++ 		n = *++p; /* get the count */
++ 
+  	    /* The \@= operator: match the preceding atom with zero width.
+  	     * The \@! operator: no match for the preceding atom.
+  	     * The \@<= operator: match for the preceding atom.
+***************
+*** 2583,2603 ****
+  	    s = alloc_state(NFA_START_INVISIBLE, e.start, s1);
+  	    if (s == NULL)
+  		goto theend;
+! 	    if (*p == NFA_PREV_ATOM_NO_WIDTH_NEG
+! 				       || *p == NFA_PREV_ATOM_JUST_BEFORE_NEG)
+  	    {
+  		s->negated = TRUE;
+  		s1->negated = TRUE;
+  	    }
+! 	    if (*p == NFA_PREV_ATOM_JUST_BEFORE
+! 				       || *p == NFA_PREV_ATOM_JUST_BEFORE_NEG)
+  	    {
+! 		s->val = *++p; /* get the count */
+  		++s->c; /* NFA_START_INVISIBLE -> NFA_START_INVISIBLE_BEFORE */
+  	    }
+  
+  	    PUSH(frag(s, list1(&s1->out)));
+  	    break;
+  
+  #ifdef FEAT_MBYTE
+  	case NFA_COMPOSING:	/* char with composing char */
+--- 2637,2656 ----
+  	    s = alloc_state(NFA_START_INVISIBLE, e.start, s1);
+  	    if (s == NULL)
+  		goto theend;
+! 	    if (neg)
+  	    {
+  		s->negated = TRUE;
+  		s1->negated = TRUE;
+  	    }
+! 	    if (before)
+  	    {
+! 		s->val = n; /* store the count */
+  		++s->c; /* NFA_START_INVISIBLE -> NFA_START_INVISIBLE_BEFORE */
+  	    }
+  
+  	    PUSH(frag(s, list1(&s1->out)));
+  	    break;
++ 	  }
+  
+  #ifdef FEAT_MBYTE
+  	case NFA_COMPOSING:	/* char with composing char */
+***************
+*** 2750,2767 ****
+  	case NFA_MARK:
+  	case NFA_MARK_GT:
+  	case NFA_MARK_LT:
+  	    if (nfa_calc_size == TRUE)
+  	    {
+  		nstate += 1;
+  		break;
+  	    }
+! 	    e1 = POP();
+! 	    s = alloc_state(*p, NULL, NULL);
+  	    if (s == NULL)
+  		goto theend;
+! 	    s->val = e1.start->c; /* lnum, col or mark name */
+  	    PUSH(frag(s, list1(&s->out)));
+  	    break;
+  
+  	case NFA_ZSTART:
+  	case NFA_ZEND:
+--- 2803,2823 ----
+  	case NFA_MARK:
+  	case NFA_MARK_GT:
+  	case NFA_MARK_LT:
++ 	  {
++ 	    int n = *++p; /* lnum, col or mark name */
++ 
+  	    if (nfa_calc_size == TRUE)
+  	    {
+  		nstate += 1;
+  		break;
+  	    }
+! 	    s = alloc_state(p[-1], NULL, NULL);
+  	    if (s == NULL)
+  		goto theend;
+! 	    s->val = n;
+  	    PUSH(frag(s, list1(&s->out)));
+  	    break;
++ 	  }
+  
+  	case NFA_ZSTART:
+  	case NFA_ZEND:
+*** ../vim-7.3.1116/src/testdir/test64.in	2013-06-04 21:27:33.000000000 +0200
+--- src/testdir/test64.in	2013-06-04 23:45:44.000000000 +0200
+***************
+*** 352,357 ****
+--- 352,370 ----
+  :call add(tl, [2, '\%u0020', 'yes no', ' '])
+  :call add(tl, [2, '\%U00000020', 'yes no', ' '])
+  :"
++ :""""" \%[abc]
++ :call add(tl, [2, 'foo\%[bar]', 'fobar'])
++ :call add(tl, [2, 'foo\%[bar]', 'foobar', 'foobar'])
++ :call add(tl, [2, 'foo\%[bar]', 'fooxx', 'foo'])
++ :call add(tl, [2, 'foo\%[bar]', 'foobxx', 'foob'])
++ :call add(tl, [2, 'foo\%[bar]', 'foobaxx', 'fooba'])
++ :call add(tl, [2, 'foo\%[bar]', 'foobarxx', 'foobar'])
++ :call add(tl, [2, 'foo\%[bar]x', 'foobxx', 'foobx'])
++ :call add(tl, [2, 'foo\%[bar]x', 'foobarxx', 'foobarx'])
++ :call add(tl, [2, '\%[bar]x', 'barxx', 'barx'])
++ :call add(tl, [2, '\%[bar]x', 'bxx', 'bx'])
++ :call add(tl, [2, '\%[bar]x', 'xxx', 'x'])
++ :"
+  :"""" Alternatives, must use first longest match
+  :call add(tl, [2, 'goo\|go', 'google', 'goo'])
+  :call add(tl, [2, '\<goo\|\<go', 'google', 'goo'])
+*** ../vim-7.3.1116/src/testdir/test64.ok	2013-06-04 21:27:33.000000000 +0200
+--- src/testdir/test64.ok	2013-06-04 23:50:43.000000000 +0200
+***************
+*** 797,802 ****
+--- 797,835 ----
+  OK 0 - \%U00000020
+  OK 1 - \%U00000020
+  OK 2 - \%U00000020
++ OK 0 - foo\%[bar]
++ OK 1 - foo\%[bar]
++ OK 2 - foo\%[bar]
++ OK 0 - foo\%[bar]
++ OK 1 - foo\%[bar]
++ OK 2 - foo\%[bar]
++ OK 0 - foo\%[bar]
++ OK 1 - foo\%[bar]
++ OK 2 - foo\%[bar]
++ OK 0 - foo\%[bar]
++ OK 1 - foo\%[bar]
++ OK 2 - foo\%[bar]
++ OK 0 - foo\%[bar]
++ OK 1 - foo\%[bar]
++ OK 2 - foo\%[bar]
++ OK 0 - foo\%[bar]
++ OK 1 - foo\%[bar]
++ OK 2 - foo\%[bar]
++ OK 0 - foo\%[bar]x
++ OK 1 - foo\%[bar]x
++ OK 2 - foo\%[bar]x
++ OK 0 - foo\%[bar]x
++ OK 1 - foo\%[bar]x
++ OK 2 - foo\%[bar]x
++ OK 0 - \%[bar]x
++ OK 1 - \%[bar]x
++ OK 2 - \%[bar]x
++ OK 0 - \%[bar]x
++ OK 1 - \%[bar]x
++ OK 2 - \%[bar]x
++ OK 0 - \%[bar]x
++ OK 1 - \%[bar]x
++ OK 2 - \%[bar]x
+  OK 0 - goo\|go
+  OK 1 - goo\|go
+  OK 2 - goo\|go
+*** ../vim-7.3.1116/src/version.c	2013-06-05 11:01:59.000000000 +0200
+--- src/version.c	2013-06-05 11:04:15.000000000 +0200
+***************
+*** 730,731 ****
+--- 730,733 ----
+  {   /* Add new patch number below this line */
++ /**/
++     1117,
+  /**/
+
+-- 
+From "know your smileys":
+ :-)	Funny
+ |-)	Funny Oriental
+ (-:	Funny Australian
+
+ /// Bram Moolenaar -- Bram at 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    ///


More information about the scm-commits mailing list