1
0
forked from aniani/vim

updated for version 7.3.1083

Problem:    New regexp engine: Does not support \%^ and \%$.
Solution:   Support matching start and end of file.
This commit is contained in:
Bram Moolenaar
2013-05-31 22:14:52 +02:00
parent 14f55c6f67
commit 4b78063368
4 changed files with 61 additions and 4 deletions

View File

@@ -865,14 +865,10 @@ nfa_regatom()
* pattern -- regardless of whether or not it makes sense. */ * pattern -- regardless of whether or not it makes sense. */
case '^': case '^':
EMIT(NFA_BOF); EMIT(NFA_BOF);
/* TODO: Not yet supported */
return FAIL;
break; break;
case '$': case '$':
EMIT(NFA_EOF); EMIT(NFA_EOF);
/* TODO: Not yet supported */
return FAIL;
break; break;
case '#': case '#':
@@ -1780,6 +1776,8 @@ nfa_set_code(c)
case NFA_BOL: STRCPY(code, "NFA_BOL "); break; case NFA_BOL: STRCPY(code, "NFA_BOL "); break;
case NFA_EOW: STRCPY(code, "NFA_EOW "); break; case NFA_EOW: STRCPY(code, "NFA_EOW "); break;
case NFA_BOW: STRCPY(code, "NFA_BOW "); 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_STAR: STRCPY(code, "NFA_STAR "); break;
case NFA_PLUS: STRCPY(code, "NFA_PLUS "); break; case NFA_PLUS: STRCPY(code, "NFA_PLUS "); break;
case NFA_NOT: STRCPY(code, "NFA_NOT "); break; case NFA_NOT: STRCPY(code, "NFA_NOT "); break;
@@ -3705,6 +3703,17 @@ nfa_regmatch(start, submatch, m)
break; 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 #ifdef FEAT_MBYTE
case NFA_COMPOSING: case NFA_COMPOSING:
{ {

View File

@@ -267,6 +267,15 @@ STARTTEST
:call add(tl, [2, '\_f', " \na ", "\n"]) :call add(tl, [2, '\_f', " \na ", "\n"])
:call add(tl, [2, '\_f\+', " \na ", "\na"]) :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 :"""" Test recognition of some character classes
:call add(tl, [2, '[0-9]', '8', '8']) :call add(tl, [2, '[0-9]', '8', '8'])
@@ -466,6 +475,15 @@ o-2-:set re=2
:call Postest() :call Postest()
:put :put
:" :"
:" start and end of buffer
/\%^
yeGop:"
50%/\%^..
yeGopA END:"
50%/\%$
"ayb20gg/..\%$
"bybGo"apo"bp:"
:"
:/\%#=1^Results/,$wq! test.out :/\%#=1^Results/,$wq! test.out
ENDTEST ENDTEST

View File

@@ -585,6 +585,30 @@ OK 2 - \_f
OK 0 - \_f\+ OK 0 - \_f\+
OK 1 - \_f\+ OK 1 - \_f\+
OK 2 - \_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 0 - [0-9]
OK 1 - [0-9] OK 1 - [0-9]
OK 2 - [0-9] OK 2 - [0-9]
@@ -818,3 +842,7 @@ moooooo
ab!babababababfoo ab!babababababfoo
ba!ab##abab?bafoo ba!ab##abab?bafoo
**!*****_ **!*****_
Test
Test END
EN
E

View File

@@ -728,6 +728,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1083,
/**/ /**/
1082, 1082,
/**/ /**/