]> granicus.if.org Git - vim/commitdiff
patch 7.4.1305 v7.4.1305
authorBram Moolenaar <Bram@vim.org>
Fri, 12 Feb 2016 18:08:15 +0000 (19:08 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 12 Feb 2016 18:08:15 +0000 (19:08 +0100)
Problem:    "\%1l^#.*" does not match on a line starting with "#".
Solution:   Do not clear the start-of-line flag. (Christian Brabandt)

src/regexp.c
src/regexp_nfa.c
src/testdir/test36.in
src/testdir/test36.ok
src/version.c

index a07c6f4112f2f00cc54bad774b97596e0588bb01..9ed5c75704ae6ae4f323e9e4f77a3bfbfda3dc3d 100644 (file)
@@ -1500,6 +1500,10 @@ vim_regcomp_had_eol(void)
 }
 #endif
 
+/* variables for parsing reginput */
+static int     at_start;       /* True when on the first character */
+static int     prev_at_start;  /* True when on the second character */
+
 /*
  * Parse regular expression, i.e. main body or parenthesized thing.
  *
@@ -1918,6 +1922,7 @@ regatom(int *flagp)
     int                    c;
     char_u         *p;
     int                    extra = 0;
+    int                    save_prev_at_start = prev_at_start;
 
     *flagp = WORST;            /* Tentatively. */
 
@@ -2331,7 +2336,11 @@ regatom(int *flagp)
                              else if (c == 'l' || c == 'c' || c == 'v')
                              {
                                  if (c == 'l')
+                                 {
                                      ret = regnode(RE_LNUM);
+                                     if (save_prev_at_start)
+                                         at_start = TRUE;
+                                 }
                                  else if (c == 'c')
                                      ret = regnode(RE_COL);
                                  else
@@ -2946,10 +2955,6 @@ regoptail(char_u *p, char_u *val)
 /*
  * Functions for getting characters from the regexp input.
  */
-
-static int     at_start;       /* True when on the first character */
-static int     prev_at_start;  /* True when on the second character */
-
 /*
  * Start parsing at "str".
  */
index 8bcf3bc413196f5630d0b2298dee9f33a1aa2eb5..865d67fdfe57aff51a215c9bfdf2217777a728e4 100644 (file)
@@ -1128,6 +1128,7 @@ nfa_regatom(void)
     int                startc = -1;
     int                endc = -1;
     int                oldstartc = -1;
+    int                save_prev_at_start = prev_at_start;
 
     c = getchr();
     switch (c)
@@ -1467,9 +1468,13 @@ nfa_regatom(void)
                        if (c == 'l' || c == 'c' || c == 'v')
                        {
                            if (c == 'l')
+                           {
                                /* \%{n}l  \%{n}<l  \%{n}>l  */
                                EMIT(cmp == '<' ? NFA_LNUM_LT :
                                     cmp == '>' ? NFA_LNUM_GT : NFA_LNUM);
+                               if (save_prev_at_start)
+                                   at_start = TRUE;
+                           }
                            else if (c == 'c')
                                /* \%{n}c  \%{n}<c  \%{n}>c  */
                                EMIT(cmp == '<' ? NFA_COL_LT :
index 8cdb5262bdf20a29e0fcca1618ba74a164977a0a..5e8ce4484a388f3a1405b74683f0e109a28adf0e 100644 (file)
@@ -98,6 +98,9 @@ p:s/\%#=2\U//g
 p:s/\%#=0[^A-Z]//g
 p:s/\%#=1[^A-Z]//g
 p:s/\%#=2[^A-Z]//g
+p:s/\%#=0\%204l^\t...//g
+p:s/\%#=1\%205l^\t...//g
+p:s/\%#=2\%206l^\t...//g
 :/^start-here/+1,$wq! test.out
 ENDTEST
 
index f72a74b2b795d3697039aaac8f1a6a720cba6fa0..df21ed1c5b61d5d99933dc9f02114d51c71780f2 100644 (file)
@@ -94,3 +94,6 @@ ABCDEFGHIXYZ
 ABCDEFGHIXYZ
 ABCDEFGHIXYZ
 ABCDEFGHIXYZ
+!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
index 625e3b05436b1254bf86e18d180b627797e21534..b73ad024c797006368038fcc01a5e5232add972f 100644 (file)
@@ -747,6 +747,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1305,
 /**/
     1304,
 /**/