]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.1083 v7.3.1083
authorBram Moolenaar <Bram@vim.org>
Fri, 31 May 2013 20:14:52 +0000 (22:14 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 31 May 2013 20:14:52 +0000 (22:14 +0200)
Problem:    New regexp engine: Does not support \%^ and \%$.
Solution:   Support matching start and end of file.

src/regexp_nfa.c
src/testdir/test64.in
src/testdir/test64.ok
src/version.c

index 69370ace2ef00b1ab3b400e768c9980e1e303f87..6a80bcc578a4a849f5572be7ecb0d1d6d07793e0 100644 (file)
@@ -865,14 +865,10 @@ nfa_regatom()
                 * pattern -- regardless of whether or not it makes sense. */
                case '^':
                    EMIT(NFA_BOF);
-                   /* TODO: Not yet supported */
-                   return FAIL;
                    break;
 
                case '$':
                    EMIT(NFA_EOF);
-                   /* TODO: Not yet supported */
-                   return FAIL;
                    break;
 
                case '#':
@@ -1780,6 +1776,8 @@ nfa_set_code(c)
        case NFA_BOL:           STRCPY(code, "NFA_BOL "); break;
        case NFA_EOW:           STRCPY(code, "NFA_EOW "); break;
        case NFA_BOW:           STRCPY(code, "NFA_BOW "); break;
+       case NFA_EOF:           STRCPY(code, "NFA_EOF "); break;
+       case NFA_BOF:           STRCPY(code, "NFA_BOF "); break;
        case NFA_STAR:          STRCPY(code, "NFA_STAR "); break;
        case NFA_PLUS:          STRCPY(code, "NFA_PLUS "); break;
        case NFA_NOT:           STRCPY(code, "NFA_NOT "); break;
@@ -3705,6 +3703,17 @@ nfa_regmatch(start, submatch, m)
                break;
            }
 
+           case NFA_BOF:
+               if (reglnum == 0 && reginput == regline
+                                       && (!REG_MULTI || reg_firstlnum == 1))
+                   addstate_here(thislist, t->state->out, &t->sub, &listidx);
+               break;
+
+           case NFA_EOF:
+               if (reglnum == reg_maxline && curc == NUL)
+                   addstate_here(thislist, t->state->out, &t->sub, &listidx);
+               break;
+
 #ifdef FEAT_MBYTE
            case NFA_COMPOSING:
            {
index 45a71d2619e05dbda9c6e3dd89a1204b05217938..dffcf52b3de2483b13a8b104e29e0030db1cdd01 100644 (file)
@@ -267,6 +267,15 @@ STARTTEST
 :call add(tl, [2, '\_f', "  \na ", "\n"])
 :call add(tl, [2, '\_f\+', "  \na ", "\na"])
 :"
+:"""" Test start/end of line, start/end of file
+:call add(tl, [2, '^a.', "a_\nb ", "a_"])
+:call add(tl, [2, '^a.', "b a \na_"])
+:call add(tl, [2, '.a$', " a\n "])
+:call add(tl, [2, '.a$', " a b\n_a", "_a"])
+:call add(tl, [2, '\%^a.', "a a\na", "a "])
+:call add(tl, [2, '\%^a', " a \na "])
+:call add(tl, [2, '.a\%$', " a\n "])
+:call add(tl, [2, '.a\%$', " a\n_a", "_a"])
 :"
 :"""" Test recognition of some character classes
 :call add(tl, [2, '[0-9]', '8', '8'])
@@ -466,6 +475,15 @@ o-2-\e:set re=2
 :call Postest()
 :put
 :"
+:" start and end of buffer
+/\%^
+yeGo\ep:"
+50%/\%^..
+yeGo\epA END\e:"
+50%/\%$
+"ayb20gg/..\%$
+"bybGo\e"apo\e"bp:"
+:"
 :/\%#=1^Results/,$wq! test.out
 ENDTEST
 
index 2f96073cfcd941ed76feac715bfbde4e053b4622..5a13e060aca3928184782e85a23bf5e3d10add7d 100644 (file)
@@ -585,6 +585,30 @@ OK 2 - \_f
 OK 0 - \_f\+
 OK 1 - \_f\+
 OK 2 - \_f\+
+OK 0 - ^a.
+OK 1 - ^a.
+OK 2 - ^a.
+OK 0 - ^a.
+OK 1 - ^a.
+OK 2 - ^a.
+OK 0 - .a$
+OK 1 - .a$
+OK 2 - .a$
+OK 0 - .a$
+OK 1 - .a$
+OK 2 - .a$
+OK 0 - \%^a.
+OK 1 - \%^a.
+OK 2 - \%^a.
+OK 0 - \%^a
+OK 1 - \%^a
+OK 2 - \%^a
+OK 0 - .a\%$
+OK 1 - .a\%$
+OK 2 - .a\%$
+OK 0 - .a\%$
+OK 1 - .a\%$
+OK 2 - .a\%$
 OK 0 - [0-9]
 OK 1 - [0-9]
 OK 2 - [0-9]
@@ -818,3 +842,7 @@ moooooo
 ab!babababababfoo
 ba!ab##abab?bafoo
 **!*****_
+Test
+Test END
+EN
+E
index 8db4fb4ce4c8c9321fb4abe7ef830c73ee9b581a..4038f0d446371fc3dbdaa87807389c1f312e1f01 100644 (file)
@@ -728,6 +728,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1083,
 /**/
     1082,
 /**/