mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
updated for version 7.3.1196
Problem: Old regexp engine does not match pattern with backref correctly. (Dominique Pelle) Solution: Fix setting status. Test multi-line patterns better.
This commit is contained in:
@@ -5021,12 +5021,15 @@ regmatch(scan)
|
||||
{
|
||||
/* Messy situation: Need to compare between two
|
||||
* lines. */
|
||||
status = match_with_backref(
|
||||
int r = match_with_backref(
|
||||
reg_startpos[no].lnum,
|
||||
reg_startpos[no].col,
|
||||
reg_endpos[no].lnum,
|
||||
reg_endpos[no].col,
|
||||
&len);
|
||||
|
||||
if (r != RA_MATCH)
|
||||
status = r;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -377,6 +377,7 @@ STARTTEST
|
||||
:call add(tl, [2, '\(\i\+\) \1', 'xgoo goox', 'goo goo', 'goo'])
|
||||
:call add(tl, [2, '\(a\)\(b\)\(c\)\(dd\)\(e\)\(f\)\(g\)\(h\)\(i\)\1\2\3\4\5\6\7\8\9', 'xabcddefghiabcddefghix', 'abcddefghiabcddefghi', 'a', 'b', 'c', 'dd', 'e', 'f', 'g', 'h', 'i'])
|
||||
:call add(tl, [2, '\(\d*\)a \1b', ' a b ', 'a b', ''])
|
||||
:call add(tl, [2, '^.\(.\).\_..\1.', "aaa\naaa\nb", "aaa\naaa", 'a'])
|
||||
:"
|
||||
:"""" Look-behind with limit
|
||||
:call add(tl, [2, '<\@<=span.', 'xxspanxx<spanyyy', 'spany'])
|
||||
@@ -453,17 +454,48 @@ STARTTEST
|
||||
:endfor
|
||||
:unlet t tl e l
|
||||
:"
|
||||
:"""""" multi-line tests
|
||||
:let tl = []
|
||||
:"
|
||||
:"""" back references
|
||||
:call add(tl, [2, '^.\(.\).\_..\1.', ['aaa', 'aaa', 'b'], ['XX', 'b']])
|
||||
:call add(tl, [2, '\v.*\/(.*)\n.*\/\1$', ['./Dir1/Dir2/zyxwvuts.txt', './Dir1/Dir2/abcdefgh.bat', '', './Dir1/Dir2/file1.txt', './OtherDir1/OtherDir2/file1.txt'], ['./Dir1/Dir2/zyxwvuts.txt', './Dir1/Dir2/abcdefgh.bat', '', 'XX']])
|
||||
:"
|
||||
:"""" line breaks
|
||||
:call add(tl, [2, '\S.*\nx', ['abc', 'def', 'ghi', 'xjk', 'lmn'], ['abc', 'def', 'XXjk', 'lmn']])
|
||||
:"
|
||||
:" Check that \_[0-9] matching EOL does not break a following \>
|
||||
:" This only works on a buffer line, not with expression evaluation
|
||||
/^Find this
|
||||
/\%#=0\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>
|
||||
y$Gop:"
|
||||
/^Find this
|
||||
/\%#=1\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>
|
||||
y$Gop:"
|
||||
/^Find this
|
||||
/\%#=2\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>
|
||||
y$Gop:"
|
||||
:call add(tl, [2, '\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>', ['', 'localnet/192.168.0.1', ''], ['', 'localnet/XX', '']])
|
||||
:"
|
||||
:" Check a pattern with a line break and ^ and $
|
||||
:call add(tl, [2, 'a\n^b$\n^c', ['a', 'b', 'c'], ['XX']])
|
||||
:"
|
||||
:"""" Run the multi-line tests
|
||||
:"
|
||||
:$put ='multi-line tests'
|
||||
:for t in tl
|
||||
: let re = t[0]
|
||||
: let pat = t[1]
|
||||
: let before = t[2]
|
||||
: let after = t[3]
|
||||
: for engine in [0, 1, 2]
|
||||
: if engine == 2 && re == 0 || engine == 1 && re ==1
|
||||
: continue
|
||||
: endif
|
||||
: let ®expengine = engine
|
||||
: new
|
||||
: call setline(1, before)
|
||||
: exe '%s/' . pat . '/XX/'
|
||||
: let result = getline(1, '$')
|
||||
: q!
|
||||
: if result != after
|
||||
: $put ='ERROR: pat: \"' . pat . '\", text: \"' . string(before) . '\", expected: \"' . string(after) . '\", got: \"' . string(result) . '\"'
|
||||
: else
|
||||
: $put ='OK ' . engine . ' - ' . pat
|
||||
: endif
|
||||
: endfor
|
||||
:endfor
|
||||
:unlet t tl
|
||||
:"
|
||||
:" Check that using a pattern on two lines doesn't get messed up by using
|
||||
:" matchstr() with \ze in between.
|
||||
@@ -474,24 +506,6 @@ y$Gop:"
|
||||
:.+1,.+2yank
|
||||
Gop:"
|
||||
:"
|
||||
:" Check a pattern with a line break matches in the right position.
|
||||
/^Multiline
|
||||
/\S.*\nx
|
||||
:.yank
|
||||
y$Gop:"
|
||||
:"
|
||||
:" Check a pattern with a line break and ^ and $
|
||||
/^Abc:
|
||||
/a\n^b$\n^c/e
|
||||
:.yank
|
||||
Gop:"
|
||||
:"
|
||||
:" Check using a backref matching in a previous line
|
||||
/^Backref:
|
||||
/\v.*\/(.*)\n.*\/\1$
|
||||
:.yank
|
||||
Gop:"
|
||||
:"
|
||||
:" Check a pattern with a look beind crossing a line boundary
|
||||
/^Behind:
|
||||
/\(<\_[xy]\+\)\@3<=start
|
||||
@@ -553,32 +567,10 @@ yeGopA END:"
|
||||
:/\%#=1^Results/,$wq! test.out
|
||||
ENDTEST
|
||||
|
||||
Find this:
|
||||
localnet/192.168.0.1
|
||||
|
||||
Substitute here:
|
||||
<T="">Ta 5</Title>
|
||||
<T="">Ac 7</Title>
|
||||
|
||||
Multiline:
|
||||
abc
|
||||
def
|
||||
ghi
|
||||
xjk
|
||||
lmn
|
||||
|
||||
Abc:
|
||||
a
|
||||
b
|
||||
c
|
||||
|
||||
Backref:
|
||||
./Dir1/Dir2/zyxwvuts.txt
|
||||
./Dir1/Dir2/abcdefgh.bat
|
||||
|
||||
./Dir1/Dir2/file1.txt
|
||||
./OtherDir1/OtherDir2/file1.txt
|
||||
|
||||
Behind:
|
||||
asdfasd<yyy
|
||||
xxstart1
|
||||
|
@@ -857,6 +857,9 @@ OK 2 - \(a\)\(b\)\(c\)\(dd\)\(e\)\(f\)\(g\)\(h\)\(i\)\1\2\3\4\5\6\7\8\9
|
||||
OK 0 - \(\d*\)a \1b
|
||||
OK 1 - \(\d*\)a \1b
|
||||
OK 2 - \(\d*\)a \1b
|
||||
OK 0 - ^.\(.\).\_..\1.
|
||||
OK 1 - ^.\(.\).\_..\1.
|
||||
OK 2 - ^.\(.\).\_..\1.
|
||||
OK 0 - <\@<=span.
|
||||
OK 1 - <\@<=span.
|
||||
OK 2 - <\@<=span.
|
||||
@@ -910,17 +913,25 @@ OK 2 - \_[^a]\+
|
||||
OK 0 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
|
||||
OK 1 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
|
||||
OK 2 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
|
||||
192.168.0.1
|
||||
192.168.0.1
|
||||
192.168.0.1
|
||||
multi-line tests
|
||||
OK 0 - ^.\(.\).\_..\1.
|
||||
OK 1 - ^.\(.\).\_..\1.
|
||||
OK 2 - ^.\(.\).\_..\1.
|
||||
OK 0 - \v.*\/(.*)\n.*\/\1$
|
||||
OK 1 - \v.*\/(.*)\n.*\/\1$
|
||||
OK 2 - \v.*\/(.*)\n.*\/\1$
|
||||
OK 0 - \S.*\nx
|
||||
OK 1 - \S.*\nx
|
||||
OK 2 - \S.*\nx
|
||||
OK 0 - \<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>
|
||||
OK 1 - \<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>
|
||||
OK 2 - \<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>
|
||||
OK 0 - a\n^b$\n^c
|
||||
OK 1 - a\n^b$\n^c
|
||||
OK 2 - a\n^b$\n^c
|
||||
|
||||
<T="5">Ta 5</Title>
|
||||
<T="7">Ac 7</Title>
|
||||
ghi
|
||||
|
||||
c
|
||||
|
||||
./Dir1/Dir2/file1.txt
|
||||
|
||||
xxstart3
|
||||
|
||||
|
@@ -728,6 +728,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1196,
|
||||
/**/
|
||||
1195,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user