home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / patches / 7.3 / 7.3.1196 < prev    next >
Encoding:
Internet Message Format  |  2013-06-14  |  7.7 KB

  1. To: vim_dev@googlegroups.com
  2. Subject: Patch 7.3.1196
  3. Fcc: outbox
  4. From: Bram Moolenaar <Bram@moolenaar.net>
  5. Mime-Version: 1.0
  6. Content-Type: text/plain; charset=UTF-8
  7. Content-Transfer-Encoding: 8bit
  8. ------------
  9.  
  10. Patch 7.3.1196
  11. Problem:    Old regexp engine does not match pattern with backref correctly.
  12.         (Dominique Pelle)
  13. Solution:   Fix setting status.  Test multi-line patterns better.
  14. Files:        src/regexp.c, src/testdir/test64.in, src/testdir/test64.ok
  15.  
  16.  
  17. *** ../vim-7.3.1195/src/regexp.c    2013-06-14 22:48:50.000000000 +0200
  18. --- src/regexp.c    2013-06-15 14:09:21.000000000 +0200
  19. ***************
  20. *** 5021,5032 ****
  21.               {
  22.                   /* Messy situation: Need to compare between two
  23.                    * lines. */
  24. !                 status = match_with_backref(
  25.                           reg_startpos[no].lnum,
  26.                           reg_startpos[no].col,
  27.                           reg_endpos[no].lnum,
  28.                           reg_endpos[no].col,
  29.                           &len);
  30.               }
  31.               }
  32.           }
  33. --- 5021,5035 ----
  34.               {
  35.                   /* Messy situation: Need to compare between two
  36.                    * lines. */
  37. !                 int r = match_with_backref(
  38.                           reg_startpos[no].lnum,
  39.                           reg_startpos[no].col,
  40.                           reg_endpos[no].lnum,
  41.                           reg_endpos[no].col,
  42.                           &len);
  43. +                 if (r != RA_MATCH)
  44. +                 status = r;
  45.               }
  46.               }
  47.           }
  48. *** ../vim-7.3.1195/src/testdir/test64.in    2013-06-14 20:31:20.000000000 +0200
  49. --- src/testdir/test64.in    2013-06-15 15:05:03.000000000 +0200
  50. ***************
  51. *** 377,382 ****
  52. --- 377,383 ----
  53.   :call add(tl, [2, '\(\i\+\) \1', 'xgoo goox', 'goo goo', 'goo'])
  54.   :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'])
  55.   :call add(tl, [2, '\(\d*\)a \1b', ' a b ', 'a b', ''])
  56. + :call add(tl, [2, '^.\(.\).\_..\1.', "aaa\naaa\nb", "aaa\naaa", 'a'])
  57.   :"
  58.   :"""" Look-behind with limit
  59.   :call add(tl, [2, '<\@<=span.', 'xxspanxx<spanyyy', 'spany'])
  60. ***************
  61. *** 453,469 ****
  62.   :endfor
  63.   :unlet t tl e l
  64.   :"
  65.   :" Check that \_[0-9] matching EOL does not break a following \>
  66. ! :" This only works on a buffer line, not with expression evaluation
  67. ! /^Find this
  68. ! /\%#=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]\?\)\>
  69. ! y$Gop:"
  70. ! /^Find this
  71. ! /\%#=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]\?\)\>
  72. ! y$Gop:"
  73. ! /^Find this
  74. ! /\%#=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]\?\)\>
  75. ! y$Gop:"
  76.   :"
  77.   :" Check that using a pattern on two lines doesn't get messed up by using
  78.   :" matchstr() with \ze in between.
  79. --- 454,501 ----
  80.   :endfor
  81.   :unlet t tl e l
  82.   :"
  83. + :"""""" multi-line tests
  84. + :let tl = []
  85. + :"
  86. + :"""" back references
  87. + :call add(tl, [2, '^.\(.\).\_..\1.', ['aaa', 'aaa', 'b'], ['XX', 'b']])
  88. + :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']])
  89. + :"
  90. + :"""" line breaks
  91. + :call add(tl, [2, '\S.*\nx', ['abc', 'def', 'ghi', 'xjk', 'lmn'], ['abc', 'def', 'XXjk', 'lmn']])
  92. + :"
  93.   :" Check that \_[0-9] matching EOL does not break a following \>
  94. ! :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', '']])
  95. ! :"
  96. ! :" Check a pattern with a line break and ^ and $
  97. ! :call add(tl, [2, 'a\n^b$\n^c', ['a', 'b', 'c'], ['XX']])
  98. ! :"
  99. ! :"""" Run the multi-line tests
  100. ! :"
  101. ! :$put ='multi-line tests'
  102. ! :for t in tl
  103. ! :  let re = t[0]
  104. ! :  let pat = t[1]
  105. ! :  let before = t[2]
  106. ! :  let after = t[3]
  107. ! :  for engine in [0, 1, 2]
  108. ! :    if engine == 2 && re == 0 || engine == 1 && re ==1
  109. ! :      continue
  110. ! :    endif
  111. ! :    let ®expengine = engine
  112. ! :    new
  113. ! :    call setline(1, before)
  114. ! :    exe '%s/' . pat . '/XX/'
  115. ! :    let result = getline(1, '$')
  116. ! :    q!
  117. ! :    if result != after
  118. ! :      $put ='ERROR: pat: \"' . pat . '\", text: \"' . string(before) . '\", expected: \"' . string(after) . '\", got: \"' . string(result) . '\"'
  119. ! :    else
  120. ! :      $put ='OK ' . engine . ' - ' . pat
  121. ! :    endif
  122. ! :  endfor
  123. ! :endfor
  124. ! :unlet t tl
  125.   :"
  126.   :" Check that using a pattern on two lines doesn't get messed up by using
  127.   :" matchstr() with \ze in between.
  128. ***************
  129. *** 474,497 ****
  130.   :.+1,.+2yank
  131.   Gop:"
  132.   :"
  133. - :" Check a pattern with a line break matches in the right position.
  134. - /^Multiline
  135. - /\S.*\nx
  136. - :.yank
  137. - y$Gop:"
  138. - :"
  139. - :" Check a pattern with a line break and ^ and $
  140. - /^Abc:
  141. - /a\n^b$\n^c/e
  142. - :.yank
  143. - Gop:"
  144. - :"
  145. - :" Check using a backref matching in a previous line
  146. - /^Backref:
  147. - /\v.*\/(.*)\n.*\/\1$
  148. - :.yank
  149. - Gop:"
  150. - :"
  151.   :" Check a pattern with a look beind crossing a line boundary
  152.   /^Behind:
  153.   /\(<\_[xy]\+\)\@3<=start
  154. --- 506,511 ----
  155. ***************
  156. *** 553,584 ****
  157.   :/\%#=1^Results/,$wq! test.out
  158.   ENDTEST
  159.   
  160. - Find this:
  161. - localnet/192.168.0.1
  162.   Substitute here:
  163.   <T="">Ta 5</Title>
  164.   <T="">Ac 7</Title>
  165.   
  166. - Multiline:
  167. - abc
  168. - def
  169. - ghi
  170. - xjk
  171. - lmn
  172. - Abc:
  173. - a
  174. - b
  175. - c
  176. - Backref:
  177. - ./Dir1/Dir2/zyxwvuts.txt
  178. - ./Dir1/Dir2/abcdefgh.bat
  179. - ./Dir1/Dir2/file1.txt
  180. - ./OtherDir1/OtherDir2/file1.txt
  181.   Behind:
  182.   asdfasd<yyy
  183.   xxstart1
  184. --- 567,576 ----
  185. *** ../vim-7.3.1195/src/testdir/test64.ok    2013-06-14 20:31:20.000000000 +0200
  186. --- src/testdir/test64.ok    2013-06-15 15:05:06.000000000 +0200
  187. ***************
  188. *** 857,862 ****
  189. --- 857,865 ----
  190.   OK 0 - \(\d*\)a \1b
  191.   OK 1 - \(\d*\)a \1b
  192.   OK 2 - \(\d*\)a \1b
  193. + OK 0 - ^.\(.\).\_..\1.
  194. + OK 1 - ^.\(.\).\_..\1.
  195. + OK 2 - ^.\(.\).\_..\1.
  196.   OK 0 - <\@<=span.
  197.   OK 1 - <\@<=span.
  198.   OK 2 - <\@<=span.
  199. ***************
  200. *** 910,926 ****
  201.   OK 0 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
  202.   OK 1 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
  203.   OK 2 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
  204. ! 192.168.0.1
  205. ! 192.168.0.1
  206. ! 192.168.0.1
  207.   
  208.   <T="5">Ta 5</Title>
  209.   <T="7">Ac 7</Title>
  210. - ghi
  211. - c
  212. - ./Dir1/Dir2/file1.txt
  213.   
  214.   xxstart3
  215.   
  216. --- 913,937 ----
  217.   OK 0 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
  218.   OK 1 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
  219.   OK 2 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
  220. ! multi-line tests
  221. ! OK 0 - ^.\(.\).\_..\1.
  222. ! OK 1 - ^.\(.\).\_..\1.
  223. ! OK 2 - ^.\(.\).\_..\1.
  224. ! OK 0 - \v.*\/(.*)\n.*\/\1$
  225. ! OK 1 - \v.*\/(.*)\n.*\/\1$
  226. ! OK 2 - \v.*\/(.*)\n.*\/\1$
  227. ! OK 0 - \S.*\nx
  228. ! OK 1 - \S.*\nx
  229. ! OK 2 - \S.*\nx
  230. ! 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]\?\)\>
  231. ! 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]\?\)\>
  232. ! 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]\?\)\>
  233. ! OK 0 - a\n^b$\n^c
  234. ! OK 1 - a\n^b$\n^c
  235. ! OK 2 - a\n^b$\n^c
  236.   
  237.   <T="5">Ta 5</Title>
  238.   <T="7">Ac 7</Title>
  239.   
  240.   xxstart3
  241.   
  242. *** ../vim-7.3.1195/src/version.c    2013-06-14 22:48:50.000000000 +0200
  243. --- src/version.c    2013-06-15 14:12:46.000000000 +0200
  244. ***************
  245. *** 730,731 ****
  246. --- 730,733 ----
  247.   {   /* Add new patch number below this line */
  248. + /**/
  249. +     1196,
  250.   /**/
  251.  
  252. -- 
  253. hundred-and-one symptoms of being an internet addict:
  254. 213. Your kids start referring to you as "that guy in front of the monitor."
  255.  
  256.  /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
  257. ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
  258. \\\  an exciting new programming language -- http://www.Zimbu.org        ///
  259.  \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
  260.