From: Bram Moolenaar Date: Fri, 12 Feb 2016 18:08:15 +0000 (+0100) Subject: patch 7.4.1305 X-Git-Tag: v7.4.1305 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7c29f387819b5817b003d2ba73e2b5cf3cb3d0dd;p=vim patch 7.4.1305 Problem: "\%1l^#.*" does not match on a line starting with "#". Solution: Do not clear the start-of-line flag. (Christian Brabandt) --- diff --git a/src/regexp.c b/src/regexp.c index a07c6f411..9ed5c7570 100644 --- a/src/regexp.c +++ b/src/regexp.c @@ -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". */ diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c index 8bcf3bc41..865d67fdf 100644 --- a/src/regexp_nfa.c +++ b/src/regexp_nfa.c @@ -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 */ 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 */ EMIT(cmp == '<' ? NFA_COL_LT : diff --git a/src/testdir/test36.in b/src/testdir/test36.in index 8cdb5262b..5e8ce4484 100644 --- a/src/testdir/test36.in +++ b/src/testdir/test36.in @@ -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 diff --git a/src/testdir/test36.ok b/src/testdir/test36.ok index f72a74b2b..df21ed1c5 100644 --- a/src/testdir/test36.ok +++ b/src/testdir/test36.ok @@ -94,3 +94,6 @@ ABCDEFGHIXYZ ABCDEFGHIXYZ ABCDEFGHIXYZ ABCDEFGHIXYZ +!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé +!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé +!"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~€‚›¦±¼ÇÓé diff --git a/src/version.c b/src/version.c index 625e3b054..b73ad024c 100644 --- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1305, /**/ 1304, /**/