From 227cd3cd75634baf6640878b4a696462f31ed17a Mon Sep 17 00:00:00 2001 From: Karsten Hopp Date: Jul 04 2013 13:35:55 +0000 Subject: - patchlevel 1196 --- diff --git a/7.3.1196 b/7.3.1196 new file mode 100644 index 0000000..61bb148 --- /dev/null +++ b/7.3.1196 @@ -0,0 +1,267 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.3.1196 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 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. +Files: src/regexp.c, src/testdir/test64.in, src/testdir/test64.ok + + +*** ../vim-7.3.1195/src/regexp.c 2013-06-14 22:48:50.000000000 +0200 +--- src/regexp.c 2013-06-15 14:09:21.000000000 +0200 +*************** +*** 5021,5032 **** + { + /* Messy situation: Need to compare between two + * lines. */ +! status = match_with_backref( + reg_startpos[no].lnum, + reg_startpos[no].col, + reg_endpos[no].lnum, + reg_endpos[no].col, + &len); + } + } + } +--- 5021,5035 ---- + { + /* Messy situation: Need to compare between two + * lines. */ +! 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; + } + } + } +*** ../vim-7.3.1195/src/testdir/test64.in 2013-06-14 20:31:20.000000000 +0200 +--- src/testdir/test64.in 2013-06-15 15:05:03.000000000 +0200 +*************** +*** 377,382 **** +--- 377,383 ---- + :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 +! :" 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:" + :" + :" Check that using a pattern on two lines doesn't get messed up by using + :" matchstr() with \ze in between. +--- 454,501 ---- + :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 \> +! :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,497 **** + :.+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 +--- 506,511 ---- +*************** +*** 553,584 **** + :/\%#=1^Results/,$wq! test.out + ENDTEST + +- Find this: +- localnet/192.168.0.1 +- + Substitute here: + Ta 5 + Ac 7 + +- 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: + asdfasdTa 5 + Ac 7 +- ghi +- +- c +- +- ./Dir1/Dir2/file1.txt + + xxstart3 + +--- 913,937 ---- + 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} +! 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 + + Ta 5 + Ac 7 + + xxstart3 + +*** ../vim-7.3.1195/src/version.c 2013-06-14 22:48:50.000000000 +0200 +--- src/version.c 2013-06-15 14:12:46.000000000 +0200 +*************** +*** 730,731 **** +--- 730,733 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 1196, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +213. Your kids start referring to you as "that guy in front of the monitor." + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///