Karsten Hopp 805a36
Patch 7.3.1111
Karsten Hopp 805a36
Problem:    nfa_recognize_char_class() implementation is inefficient.
Karsten Hopp 805a36
Solution:   Use bits in an int instead of chars in a string. (Dominique Pelle)
Karsten Hopp 805a36
Files:      src/regexp_nfa.c, src/testdir/test36.in, src/testdir/test36.ok
Karsten Hopp 805a36
Comment:    Karsten Hopp: manually redone patch as it didn't apply
Karsten Hopp 805a36
Karsten Hopp 805a36
Karsten Hopp 805a36
Karsten Hopp 805a36
diff -up vim73/src/regexp_nfa.c.1111 vim73/src/regexp_nfa.c
Karsten Hopp 805a36
--- vim73/src/regexp_nfa.c.1111	2013-07-09 14:56:29.355057017 +0200
Karsten Hopp 805a36
+++ vim73/src/regexp_nfa.c	2013-07-09 15:04:06.283217016 +0200
Karsten Hopp 805a36
@@ -380,38 +380,18 @@ nfa_recognize_char_class(start, end, ext
Karsten Hopp 805a36
     char_u  *end;
Karsten Hopp 805a36
     int	    extra_newl;
Karsten Hopp 805a36
 {
Karsten Hopp 805a36
-    int		i;
Karsten Hopp 805a36
-    /* Each of these variables takes up a char in "config[]",
Karsten Hopp 805a36
-     * in the order they are here. */
Karsten Hopp 805a36
-    int		not = FALSE, af = FALSE, AF = FALSE, az = FALSE, AZ = FALSE,
Karsten Hopp 805a36
-		o7 = FALSE, o9 = FALSE, underscore = FALSE, newl = FALSE;
Karsten Hopp 805a36
+#   define CLASS_not          0x80
Karsten Hopp 805a36
+#   define CLASS_af           0x40
Karsten Hopp 805a36
+#   define CLASS_AF           0x20
Karsten Hopp 805a36
+#   define CLASS_az           0x10
Karsten Hopp 805a36
+#   define CLASS_AZ           0x08
Karsten Hopp 805a36
+#   define CLASS_o7           0x04
Karsten Hopp 805a36
+#   define CLASS_o9           0x02
Karsten Hopp 805a36
+#   define CLASS_underscore   0x01
Karsten Hopp 805a36
+
Karsten Hopp 805a36
+    int               newl = FALSE;
Karsten Hopp 805a36
     char_u	*p;
Karsten Hopp 805a36
-#define NCONFIGS 16
Karsten Hopp 805a36
-    int		classid[NCONFIGS] = {
Karsten Hopp 805a36
-	NFA_DIGIT, NFA_NDIGIT, NFA_HEX, NFA_NHEX,
Karsten Hopp 805a36
-	NFA_OCTAL, NFA_NOCTAL, NFA_WORD, NFA_NWORD,
Karsten Hopp 805a36
-	NFA_HEAD, NFA_NHEAD, NFA_ALPHA, NFA_NALPHA,
Karsten Hopp 805a36
-	NFA_LOWER, NFA_NLOWER, NFA_UPPER, NFA_NUPPER
Karsten Hopp 805a36
-    };
Karsten Hopp 805a36
-    char_u	myconfig[10];
Karsten Hopp 805a36
-    char_u	config[NCONFIGS][9] = {
Karsten Hopp 805a36
-	"000000100",	/* digit */
Karsten Hopp 805a36
-	"100000100",	/* non digit */
Karsten Hopp 805a36
-	"011000100",	/* hex-digit */
Karsten Hopp 805a36
-	"111000100",	/* non hex-digit */
Karsten Hopp 805a36
-	"000001000",	/* octal-digit */
Karsten Hopp 805a36
-	"100001000",	/* [^0-7] */
Karsten Hopp 805a36
-	"000110110",	/* [0-9A-Za-z_]	*/
Karsten Hopp 805a36
-	"100110110",	/* [^0-9A-Za-z_] */
Karsten Hopp 805a36
-	"000110010",	/* head of word */
Karsten Hopp 805a36
-	"100110010",	/* not head of word */
Karsten Hopp 805a36
-	"000110000",	/* alphabetic char a-z */
Karsten Hopp 805a36
-	"100110000",	/* non alphabetic char */
Karsten Hopp 805a36
-	"000100000",	/* lowercase letter */
Karsten Hopp 805a36
-	"100100000",	/* non lowercase */
Karsten Hopp 805a36
-	"000010000",	/* uppercase */
Karsten Hopp 805a36
-	"100010000"	/* non uppercase */
Karsten Hopp 805a36
-    };
Karsten Hopp 805a36
+    int               config = 0;
Karsten Hopp 805a36
 
Karsten Hopp 805a36
     if (extra_newl == TRUE)
Karsten Hopp 805a36
 	newl = TRUE;
Karsten Hopp 805a36
@@ -421,7 +401,7 @@ nfa_recognize_char_class(start, end, ext
Karsten Hopp 805a36
     p = start;
Karsten Hopp 805a36
     if (*p == '^')
Karsten Hopp 805a36
     {
Karsten Hopp 805a36
-	not = TRUE;
Karsten Hopp 805a36
+	config |= CLASS_not;
Karsten Hopp 805a36
 	p++;
Karsten Hopp 805a36
     }
Karsten Hopp 805a36
 
Karsten Hopp 805a36
@@ -434,37 +414,37 @@ nfa_recognize_char_class(start, end, ext
Karsten Hopp 805a36
 		case '0':
Karsten Hopp 805a36
 		    if (*(p + 2) == '9')
Karsten Hopp 805a36
 		    {
Karsten Hopp 805a36
-			o9 = TRUE;
Karsten Hopp 805a36
+			config |= CLASS_o9;
Karsten Hopp 805a36
 			break;
Karsten Hopp 805a36
 		    }
Karsten Hopp 805a36
 		    else
Karsten Hopp 805a36
 		    if (*(p + 2) == '7')
Karsten Hopp 805a36
 		    {
Karsten Hopp 805a36
-			o7 = TRUE;
Karsten Hopp 805a36
+			config |= CLASS_o7;
Karsten Hopp 805a36
 			break;
Karsten Hopp 805a36
 		    }
Karsten Hopp 805a36
 		case 'a':
Karsten Hopp 805a36
 		    if (*(p + 2) == 'z')
Karsten Hopp 805a36
 		    {
Karsten Hopp 805a36
-			az = TRUE;
Karsten Hopp 805a36
+			config |= CLASS_az;
Karsten Hopp 805a36
 			break;
Karsten Hopp 805a36
 		    }
Karsten Hopp 805a36
 		    else
Karsten Hopp 805a36
 		    if (*(p + 2) == 'f')
Karsten Hopp 805a36
 		    {
Karsten Hopp 805a36
-			af = TRUE;
Karsten Hopp 805a36
+			config |= CLASS_af;
Karsten Hopp 805a36
 			break;
Karsten Hopp 805a36
 		    }
Karsten Hopp 805a36
 		case 'A':
Karsten Hopp 805a36
 		    if (*(p + 2) == 'Z')
Karsten Hopp 805a36
 		    {
Karsten Hopp 805a36
-			AZ = TRUE;
Karsten Hopp 805a36
+			config |= CLASS_AZ;
Karsten Hopp 805a36
 			break;
Karsten Hopp 805a36
 		    }
Karsten Hopp 805a36
 		    else
Karsten Hopp 805a36
 		    if (*(p + 2) == 'F')
Karsten Hopp 805a36
 		    {
Karsten Hopp 805a36
-			AF = TRUE;
Karsten Hopp 805a36
+			config |= CLASS_AF;
Karsten Hopp 805a36
 			break;
Karsten Hopp 805a36
 		    }
Karsten Hopp 805a36
 		/* FALLTHROUGH */
Karsten Hopp 805a36
@@ -480,7 +460,7 @@ nfa_recognize_char_class(start, end, ext
Karsten Hopp 805a36
 	}
Karsten Hopp 805a36
 	else if (*p == '_')
Karsten Hopp 805a36
 	{
Karsten Hopp 805a36
-	    underscore = TRUE;
Karsten Hopp 805a36
+	    config |= CLASS_underscore;
Karsten Hopp 805a36
 	    p ++;
Karsten Hopp 805a36
 	}
Karsten Hopp 805a36
 	else if (*p == '\n')
Karsten Hopp 805a36
@@ -495,38 +475,45 @@ nfa_recognize_char_class(start, end, ext
Karsten Hopp 805a36
     if (p != end)
Karsten Hopp 805a36
 	return FAIL;
Karsten Hopp 805a36
 
Karsten Hopp 805a36
-    /* build the config that represents the ranges we gathered */
Karsten Hopp 805a36
-    STRCPY(myconfig, "000000000");
Karsten Hopp 805a36
-    if (not == TRUE)
Karsten Hopp 805a36
-	myconfig[0] = '1';
Karsten Hopp 805a36
-    if (af == TRUE)
Karsten Hopp 805a36
-	myconfig[1] = '1';
Karsten Hopp 805a36
-    if (AF == TRUE)
Karsten Hopp 805a36
-	myconfig[2] = '1';
Karsten Hopp 805a36
-    if (az == TRUE)
Karsten Hopp 805a36
-	myconfig[3] = '1';
Karsten Hopp 805a36
-    if (AZ == TRUE)
Karsten Hopp 805a36
-	myconfig[4] = '1';
Karsten Hopp 805a36
-    if (o7 == TRUE)
Karsten Hopp 805a36
-	myconfig[5] = '1';
Karsten Hopp 805a36
-    if (o9 == TRUE)
Karsten Hopp 805a36
-	myconfig[6] = '1';
Karsten Hopp 805a36
-    if (underscore == TRUE)
Karsten Hopp 805a36
-	myconfig[7] = '1';
Karsten Hopp 805a36
     if (newl == TRUE)
Karsten Hopp 805a36
-    {
Karsten Hopp 805a36
-	myconfig[8] = '1';
Karsten Hopp 805a36
 	extra_newl = ADD_NL;
Karsten Hopp 805a36
-    }
Karsten Hopp 805a36
-    /* try to recognize character classes */
Karsten Hopp 805a36
-    for (i = 0; i < NCONFIGS; i++)
Karsten Hopp 805a36
-	if (STRNCMP(myconfig, config[i], 8) == 0)
Karsten Hopp 805a36
-	    return classid[i] + extra_newl;
Karsten Hopp 805a36
 
Karsten Hopp 805a36
-    /* fallthrough => no success so far */
Karsten Hopp 805a36
+    switch (config)
Karsten Hopp 805a36
+    {
Karsten Hopp 805a36
+      case CLASS_o9:
Karsten Hopp 805a36
+          return extra_newl + NFA_DIGIT;
Karsten Hopp 805a36
+      case CLASS_not |  CLASS_o9:
Karsten Hopp 805a36
+          return extra_newl + NFA_NDIGIT;
Karsten Hopp 805a36
+      case CLASS_af | CLASS_AF | CLASS_o9:
Karsten Hopp 805a36
+          return extra_newl + NFA_HEX;
Karsten Hopp 805a36
+      case CLASS_not | CLASS_af | CLASS_AF | CLASS_o9:
Karsten Hopp 805a36
+          return extra_newl + NFA_NHEX;
Karsten Hopp 805a36
+      case CLASS_o7:
Karsten Hopp 805a36
+          return extra_newl + NFA_OCTAL;
Karsten Hopp 805a36
+      case CLASS_not | CLASS_o7:
Karsten Hopp 805a36
+          return extra_newl + NFA_NOCTAL;
Karsten Hopp 805a36
+      case CLASS_az | CLASS_AZ | CLASS_o9 | CLASS_underscore:
Karsten Hopp 805a36
+          return extra_newl + NFA_WORD;
Karsten Hopp 805a36
+      case CLASS_not | CLASS_az | CLASS_AZ | CLASS_o9 | CLASS_underscore:
Karsten Hopp 805a36
+          return extra_newl + NFA_NWORD;
Karsten Hopp 805a36
+      case CLASS_az | CLASS_AZ | CLASS_underscore:
Karsten Hopp 805a36
+          return extra_newl + NFA_HEAD;
Karsten Hopp 805a36
+      case CLASS_not | CLASS_az | CLASS_AZ | CLASS_underscore:
Karsten Hopp 805a36
+          return extra_newl + NFA_NHEAD;
Karsten Hopp 805a36
+      case CLASS_az | CLASS_AZ:
Karsten Hopp 805a36
+          return extra_newl + NFA_ALPHA;
Karsten Hopp 805a36
+      case CLASS_not | CLASS_az | CLASS_AZ:
Karsten Hopp 805a36
+          return extra_newl + NFA_NALPHA;
Karsten Hopp 805a36
+      case CLASS_az:
Karsten Hopp 805a36
+         return extra_newl + NFA_LOWER;
Karsten Hopp 805a36
+      case CLASS_not | CLASS_az:
Karsten Hopp 805a36
+          return extra_newl + NFA_NLOWER;
Karsten Hopp 805a36
+      case CLASS_AZ:
Karsten Hopp 805a36
+          return extra_newl + NFA_UPPER;
Karsten Hopp 805a36
+      case CLASS_not | CLASS_AZ:
Karsten Hopp 805a36
+          return extra_newl + NFA_NUPPER;
Karsten Hopp 805a36
+    }
Karsten Hopp 805a36
     return FAIL;
Karsten Hopp 805a36
-
Karsten Hopp 805a36
-#undef NCONFIGS
Karsten Hopp 805a36
 }
Karsten Hopp 805a36
 
Karsten Hopp 805a36
 /*
Karsten Hopp 805a36
@@ -900,7 +887,7 @@ nfa_regatom()
Karsten Hopp 805a36
 			EMSG_RET_FAIL(_(e_z1_not_allowed));
Karsten Hopp 805a36
 		    EMIT(NFA_ZREF1 + (no_Magic(c) - '1'));
Karsten Hopp 805a36
 		    /* No need to set nfa_has_backref, the sub-matches don't
Karsten Hopp 805a36
-		     * change when \z1 .. \z9 maches or not. */
Karsten Hopp 805a36
+		     * change when \z1 .. \z9 matches or not. */
Karsten Hopp 805a36
 		    re_has_z = REX_USE;
Karsten Hopp 805a36
 		    break;
Karsten Hopp 805a36
 		case '(':
Karsten Hopp 805a36
@@ -4658,7 +4645,7 @@ nfa_regmatch(prog, start, submatch, m)
Karsten Hopp 805a36
 		    }
Karsten Hopp 805a36
 		    else
Karsten Hopp 805a36
 		    {
Karsten Hopp 805a36
-			/* skip ofer the matched characters, set character
Karsten Hopp 805a36
+			/* skip over the matched characters, set character
Karsten Hopp 805a36
 			 * count in NFA_SKIP */
Karsten Hopp 805a36
 			ll = nextlist;
Karsten Hopp 805a36
 			add_state = t->state->out;
Karsten Hopp 805a36
diff -up vim73/src/testdir/test36.in.1111 vim73/src/testdir/test36.in
Karsten Hopp 805a36
--- vim73/src/testdir/test36.in.1111	2013-07-09 15:04:36.243178056 +0200
Karsten Hopp 805a36
+++ vim73/src/testdir/test36.in	2013-07-09 15:06:54.077397744 +0200
Karsten Hopp 805a36
@@ -1,40 +1,105 @@
Karsten Hopp 805a36
-Test character classes in regexp
Karsten Hopp 805a36
+Test character classes in regexp using regexpengine 0, 1, 2.
Karsten Hopp 805a36
 
Karsten Hopp 805a36
 STARTTEST
Karsten Hopp 805a36
-/^start-here
Karsten Hopp 805a36
-j:s/\d//g
Karsten Hopp 805a36
-j:s/\D//g
Karsten Hopp 805a36
-j:s/\o//g
Karsten Hopp 805a36
-j:s/\O//g
Karsten Hopp 805a36
-j:s/\x//g
Karsten Hopp 805a36
-j:s/\X//g
Karsten Hopp 805a36
-j:s/\w//g
Karsten Hopp 805a36
-j:s/\W//g
Karsten Hopp 805a36
-j:s/\h//g
Karsten Hopp 805a36
-j:s/\H//g
Karsten Hopp 805a36
-j:s/\a//g
Karsten Hopp 805a36
-j:s/\A//g
Karsten Hopp 805a36
-j:s/\l//g
Karsten Hopp 805a36
-j:s/\L//g
Karsten Hopp 805a36
-j:s/\u//g
Karsten Hopp 805a36
-j:s/\U//g
Karsten Hopp 805a36
+/^start-here/+1
Karsten Hopp 805a36
+Y:s/\%#=0\d//g
Karsten Hopp 805a36
+p:s/\%#=1\d//g
Karsten Hopp 805a36
+p:s/\%#=2\d//g
Karsten Hopp 805a36
+p:s/\%#=0[0-9]//g
Karsten Hopp 805a36
+p:s/\%#=1[0-9]//g
Karsten Hopp 805a36
+p:s/\%#=2[0-9]//g
Karsten Hopp 805a36
+p:s/\%#=0\D//g
Karsten Hopp 805a36
+p:s/\%#=1\D//g
Karsten Hopp 805a36
+p:s/\%#=2\D//g
Karsten Hopp 805a36
+p:s/\%#=0[^0-9]//g
Karsten Hopp 805a36
+p:s/\%#=1[^0-9]//g
Karsten Hopp 805a36
+p:s/\%#=2[^0-9]//g
Karsten Hopp 805a36
+p:s/\%#=0\o//g
Karsten Hopp 805a36
+p:s/\%#=1\o//g
Karsten Hopp 805a36
+p:s/\%#=2\o//g
Karsten Hopp 805a36
+p:s/\%#=0[0-7]//g
Karsten Hopp 805a36
+p:s/\%#=1[0-7]//g
Karsten Hopp 805a36
+p:s/\%#=2[0-7]//g
Karsten Hopp 805a36
+p:s/\%#=0\O//g
Karsten Hopp 805a36
+p:s/\%#=1\O//g
Karsten Hopp 805a36
+p:s/\%#=2\O//g
Karsten Hopp 805a36
+p:s/\%#=0[^0-7]//g
Karsten Hopp 805a36
+p:s/\%#=1[^0-7]//g
Karsten Hopp 805a36
+p:s/\%#=2[^0-7]//g
Karsten Hopp 805a36
+p:s/\%#=0\x//g
Karsten Hopp 805a36
+p:s/\%#=1\x//g
Karsten Hopp 805a36
+p:s/\%#=2\x//g
Karsten Hopp 805a36
+p:s/\%#=0[0-9A-Fa-f]//g
Karsten Hopp 805a36
+p:s/\%#=1[0-9A-Fa-f]//g
Karsten Hopp 805a36
+p:s/\%#=2[0-9A-Fa-f]//g
Karsten Hopp 805a36
+p:s/\%#=0\X//g
Karsten Hopp 805a36
+p:s/\%#=1\X//g
Karsten Hopp 805a36
+p:s/\%#=2\X//g
Karsten Hopp 805a36
+p:s/\%#=0[^0-9A-Fa-f]//g
Karsten Hopp 805a36
+p:s/\%#=1[^0-9A-Fa-f]//g
Karsten Hopp 805a36
+p:s/\%#=2[^0-9A-Fa-f]//g
Karsten Hopp 805a36
+p:s/\%#=0\w//g
Karsten Hopp 805a36
+p:s/\%#=1\w//g
Karsten Hopp 805a36
+p:s/\%#=2\w//g
Karsten Hopp 805a36
+p:s/\%#=0[0-9A-Za-z_]//g
Karsten Hopp 805a36
+p:s/\%#=1[0-9A-Za-z_]//g
Karsten Hopp 805a36
+p:s/\%#=2[0-9A-Za-z_]//g
Karsten Hopp 805a36
+p:s/\%#=0\W//g
Karsten Hopp 805a36
+p:s/\%#=1\W//g
Karsten Hopp 805a36
+p:s/\%#=2\W//g
Karsten Hopp 805a36
+p:s/\%#=0[^0-9A-Za-z_]//g
Karsten Hopp 805a36
+p:s/\%#=1[^0-9A-Za-z_]//g
Karsten Hopp 805a36
+p:s/\%#=2[^0-9A-Za-z_]//g
Karsten Hopp 805a36
+p:s/\%#=0\h//g
Karsten Hopp 805a36
+p:s/\%#=1\h//g
Karsten Hopp 805a36
+p:s/\%#=2\h//g
Karsten Hopp 805a36
+p:s/\%#=0[A-Za-z_]//g
Karsten Hopp 805a36
+p:s/\%#=1[A-Za-z_]//g
Karsten Hopp 805a36
+p:s/\%#=2[A-Za-z_]//g
Karsten Hopp 805a36
+p:s/\%#=0\H//g
Karsten Hopp 805a36
+p:s/\%#=1\H//g
Karsten Hopp 805a36
+p:s/\%#=2\H//g
Karsten Hopp 805a36
+p:s/\%#=0[^A-Za-z_]//g
Karsten Hopp 805a36
+p:s/\%#=1[^A-Za-z_]//g
Karsten Hopp 805a36
+p:s/\%#=2[^A-Za-z_]//g
Karsten Hopp 805a36
+p:s/\%#=0\a//g
Karsten Hopp 805a36
+p:s/\%#=1\a//g
Karsten Hopp 805a36
+p:s/\%#=2\a//g
Karsten Hopp 805a36
+p:s/\%#=0[A-Za-z]//g
Karsten Hopp 805a36
+p:s/\%#=1[A-Za-z]//g
Karsten Hopp 805a36
+p:s/\%#=2[A-Za-z]//g
Karsten Hopp 805a36
+p:s/\%#=0\A//g
Karsten Hopp 805a36
+p:s/\%#=1\A//g
Karsten Hopp 805a36
+p:s/\%#=2\A//g
Karsten Hopp 805a36
+p:s/\%#=0[^A-Za-z]//g
Karsten Hopp 805a36
+p:s/\%#=1[^A-Za-z]//g
Karsten Hopp 805a36
+p:s/\%#=2[^A-Za-z]//g
Karsten Hopp 805a36
+p:s/\%#=0\l//g
Karsten Hopp 805a36
+p:s/\%#=1\l//g
Karsten Hopp 805a36
+p:s/\%#=2\l//g
Karsten Hopp 805a36
+p:s/\%#=0[a-z]//g
Karsten Hopp 805a36
+p:s/\%#=1[a-z]//g
Karsten Hopp 805a36
+p:s/\%#=2[a-z]//g
Karsten Hopp 805a36
+p:s/\%#=0\L//g
Karsten Hopp 805a36
+p:s/\%#=1\L//g
Karsten Hopp 805a36
+p:s/\%#=2\L//g
Karsten Hopp 805a36
+p:s/\%#=0[^a-z]//g
Karsten Hopp 805a36
+p:s/\%#=1[^a-z]//g
Karsten Hopp 805a36
+p:s/\%#=2[^a-z]//g
Karsten Hopp 805a36
+p:s/\%#=0\u//g
Karsten Hopp 805a36
+p:s/\%#=1\u//g
Karsten Hopp 805a36
+p:s/\%#=2\u//g
Karsten Hopp 805a36
+p:s/\%#=0[A-Z]//g
Karsten Hopp 805a36
+p:s/\%#=1[A-Z]//g
Karsten Hopp 805a36
+p:s/\%#=2[A-Z]//g
Karsten Hopp 805a36
+p:s/\%#=0\U//g
Karsten Hopp 805a36
+p:s/\%#=1\U//g
Karsten Hopp 805a36
+p:s/\%#=2\U//g
Karsten Hopp 805a36
+p:s/\%#=0[^A-Z]//g
Karsten Hopp 805a36
+p:s/\%#=1[^A-Z]//g
Karsten Hopp 805a36
+p:s/\%#=2[^A-Z]//g
Karsten Hopp 805a36
 :/^start-here/+1,$wq! test.out
Karsten Hopp 805a36
 ENDTEST
Karsten Hopp 805a36
 
Karsten Hopp 805a36
 start-here
Karsten Hopp 805a36
 	
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
-	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
-	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
-	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
-	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
-	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
-	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
-	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
-	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
-	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
-	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
-	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
-	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
-	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
-	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
-	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
diff -up vim73/src/testdir/test36.ok.1111 vim73/src/testdir/test36.ok
Karsten Hopp 805a36
--- vim73/src/testdir/test36.ok.1111	2013-07-09 15:07:04.737028021 +0200
Karsten Hopp 805a36
+++ vim73/src/testdir/test36.ok	2013-07-09 15:10:07.822677205 +0200
Karsten Hopp 805a36
@@ -1,16 +1,96 @@
Karsten Hopp 805a36
 	
 !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+0123456789
Karsten Hopp 805a36
+0123456789
Karsten Hopp 805a36
+0123456789
Karsten Hopp 805a36
+0123456789
Karsten Hopp 805a36
+0123456789
Karsten Hopp 805a36
 0123456789
Karsten Hopp 805a36
 	
 !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+01234567
Karsten Hopp 805a36
+01234567
Karsten Hopp 805a36
+01234567
Karsten Hopp 805a36
+01234567
Karsten Hopp 805a36
+01234567
Karsten Hopp 805a36
 01234567
Karsten Hopp 805a36
 	
 !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+0123456789ABCDEFabcdef
Karsten Hopp 805a36
+0123456789ABCDEFabcdef
Karsten Hopp 805a36
+0123456789ABCDEFabcdef
Karsten Hopp 805a36
+0123456789ABCDEFabcdef
Karsten Hopp 805a36
+0123456789ABCDEFabcdef
Karsten Hopp 805a36
 0123456789ABCDEFabcdef
Karsten Hopp 805a36
 	
 !"#$%&'()#+'-./:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
Karsten Hopp 805a36
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
Karsten Hopp 805a36
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
Karsten Hopp 805a36
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
Karsten Hopp 805a36
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
Karsten Hopp 805a36
 0123456789ABCDEFGHIXYZ_abcdefghiwxyz
Karsten Hopp 805a36
 	
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+ABCDEFGHIXYZ_abcdefghiwxyz
Karsten Hopp 805a36
+ABCDEFGHIXYZ_abcdefghiwxyz
Karsten Hopp 805a36
+ABCDEFGHIXYZ_abcdefghiwxyz
Karsten Hopp 805a36
+ABCDEFGHIXYZ_abcdefghiwxyz
Karsten Hopp 805a36
+ABCDEFGHIXYZ_abcdefghiwxyz
Karsten Hopp 805a36
 ABCDEFGHIXYZ_abcdefghiwxyz
Karsten Hopp 805a36
 	
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+ABCDEFGHIXYZabcdefghiwxyz
Karsten Hopp 805a36
+ABCDEFGHIXYZabcdefghiwxyz
Karsten Hopp 805a36
+ABCDEFGHIXYZabcdefghiwxyz
Karsten Hopp 805a36
+ABCDEFGHIXYZabcdefghiwxyz
Karsten Hopp 805a36
+ABCDEFGHIXYZabcdefghiwxyz
Karsten Hopp 805a36
 ABCDEFGHIXYZabcdefghiwxyz
Karsten Hopp 805a36
 	
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+abcdefghiwxyz
Karsten Hopp 805a36
+abcdefghiwxyz
Karsten Hopp 805a36
+abcdefghiwxyz
Karsten Hopp 805a36
+abcdefghiwxyz
Karsten Hopp 805a36
+abcdefghiwxyz
Karsten Hopp 805a36
 abcdefghiwxyz
Karsten Hopp 805a36
 	
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+	?
 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé
Karsten Hopp 805a36
+ABCDEFGHIXYZ
Karsten Hopp 805a36
+ABCDEFGHIXYZ
Karsten Hopp 805a36
+ABCDEFGHIXYZ
Karsten Hopp 805a36
+ABCDEFGHIXYZ
Karsten Hopp 805a36
+ABCDEFGHIXYZ
Karsten Hopp 805a36
 ABCDEFGHIXYZ
Karsten Hopp 805a36
diff -up vim73/src/version.c.1111 vim73/src/version.c
Karsten Hopp 805a36
--- vim73/src/version.c.1111	2013-07-09 15:10:34.038767743 +0200
Karsten Hopp 805a36
+++ vim73/src/version.c	2013-07-09 15:11:04.404714295 +0200
Karsten Hopp 805a36
@@ -729,6 +729,8 @@ static char *(features[]) =
Karsten Hopp 805a36
 static int included_patches[] =
Karsten Hopp 805a36
 {   /* Add new patch number below this line */
Karsten Hopp 805a36
 /**/
Karsten Hopp 805a36
+    1111,
Karsten Hopp 805a36
+/**/
Karsten Hopp 805a36
     1110,
Karsten Hopp 805a36
 /**/
Karsten Hopp 805a36
     1109,