857 lines
18 KiB
Plaintext
857 lines
18 KiB
Plaintext
|
To: vim_dev@googlegroups.com
|
|||
|
Subject: Patch 7.3.225
|
|||
|
Fcc: outbox
|
|||
|
From: Bram Moolenaar <Bram@moolenaar.net>
|
|||
|
Mime-Version: 1.0
|
|||
|
Content-Type: text/plain; charset=UTF-8
|
|||
|
Content-Transfer-Encoding: 8bit
|
|||
|
------------
|
|||
|
|
|||
|
Patch 7.3.225
|
|||
|
Problem: Using "\n" in a substitute inside ":s" does not result in a line
|
|||
|
break.
|
|||
|
Solution: Change behavior inside vim_regexec_nl(). Add tests. (Motoya
|
|||
|
Kurotsu)
|
|||
|
Files: src/regexp.c, src/testdir/test79.in, src/testdir/test79.ok,
|
|||
|
src/testdir/test80.in, src/testdir/test80.ok,
|
|||
|
src/testdir/Makefile, src/testdir/Make_amiga.mak,
|
|||
|
src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
|
|||
|
src/testdir/Make_os2.mak, src/testdir/Make_vms.mms
|
|||
|
|
|||
|
*** ../mercurial/vim73/src/regexp.c 2010-09-14 10:55:24.000000000 +0200
|
|||
|
--- src/regexp.c 2011-06-19 04:03:54.000000000 +0200
|
|||
|
***************
|
|||
|
*** 6872,6877 ****
|
|||
|
--- 6872,6878 ----
|
|||
|
static regmmatch_T *submatch_mmatch;
|
|||
|
static linenr_T submatch_firstlnum;
|
|||
|
static linenr_T submatch_maxline;
|
|||
|
+ static int submatch_line_lbr;
|
|||
|
#endif
|
|||
|
|
|||
|
#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) || defined(PROTO)
|
|||
|
***************
|
|||
|
*** 6998,7003 ****
|
|||
|
--- 6999,7005 ----
|
|||
|
submatch_mmatch = reg_mmatch;
|
|||
|
submatch_firstlnum = reg_firstlnum;
|
|||
|
submatch_maxline = reg_maxline;
|
|||
|
+ submatch_line_lbr = reg_line_lbr;
|
|||
|
save_reg_win = reg_win;
|
|||
|
save_ireg_ic = ireg_ic;
|
|||
|
can_f_submatch = TRUE;
|
|||
|
***************
|
|||
|
*** 7009,7017 ****
|
|||
|
|
|||
|
for (s = eval_result; *s != NUL; mb_ptr_adv(s))
|
|||
|
{
|
|||
|
! /* Change NL to CR, so that it becomes a line break.
|
|||
|
* Skip over a backslashed character. */
|
|||
|
! if (*s == NL)
|
|||
|
*s = CAR;
|
|||
|
else if (*s == '\\' && s[1] != NUL)
|
|||
|
{
|
|||
|
--- 7011,7020 ----
|
|||
|
|
|||
|
for (s = eval_result; *s != NUL; mb_ptr_adv(s))
|
|||
|
{
|
|||
|
! /* Change NL to CR, so that it becomes a line break,
|
|||
|
! * unless called from vim_regexec_nl().
|
|||
|
* Skip over a backslashed character. */
|
|||
|
! if (*s == NL && !submatch_line_lbr)
|
|||
|
*s = CAR;
|
|||
|
else if (*s == '\\' && s[1] != NUL)
|
|||
|
{
|
|||
|
***************
|
|||
|
*** 7020,7027 ****
|
|||
|
* :s/abc\\\ndef/\="aaa\\\nbbb"/ on text:
|
|||
|
* abc\
|
|||
|
* def
|
|||
|
*/
|
|||
|
! if (*s == NL)
|
|||
|
*s = CAR;
|
|||
|
had_backslash = TRUE;
|
|||
|
}
|
|||
|
--- 7023,7031 ----
|
|||
|
* :s/abc\\\ndef/\="aaa\\\nbbb"/ on text:
|
|||
|
* abc\
|
|||
|
* def
|
|||
|
+ * Not when called from vim_regexec_nl().
|
|||
|
*/
|
|||
|
! if (*s == NL && !submatch_line_lbr)
|
|||
|
*s = CAR;
|
|||
|
had_backslash = TRUE;
|
|||
|
}
|
|||
|
***************
|
|||
|
*** 7044,7049 ****
|
|||
|
--- 7048,7054 ----
|
|||
|
reg_mmatch = submatch_mmatch;
|
|||
|
reg_firstlnum = submatch_firstlnum;
|
|||
|
reg_maxline = submatch_maxline;
|
|||
|
+ reg_line_lbr = submatch_line_lbr;
|
|||
|
reg_win = save_reg_win;
|
|||
|
ireg_ic = save_ireg_ic;
|
|||
|
can_f_submatch = FALSE;
|
|||
|
*** ../mercurial/vim73/src/testdir/test79.in 2011-06-19 04:30:54.000000000 +0200
|
|||
|
--- src/testdir/test79.in 2011-06-19 03:45:26.000000000 +0200
|
|||
|
***************
|
|||
|
*** 0 ****
|
|||
|
--- 1,213 ----
|
|||
|
+ Test for *sub-replace-special* and *sub-replace-expression* on :substitute.
|
|||
|
+ Test for submatch() on :substitue.
|
|||
|
+ Test for *:s%* on :substitute.
|
|||
|
+
|
|||
|
+ STARTTEST
|
|||
|
+ :so small.vim
|
|||
|
+ ENDTEST
|
|||
|
+
|
|||
|
+ Results of test71:
|
|||
|
+
|
|||
|
+ STARTTEST
|
|||
|
+ :set magic
|
|||
|
+ :set cpo&
|
|||
|
+ /^TEST/
|
|||
|
+ j:s/A/&&/
|
|||
|
+ j:s/B/\&/
|
|||
|
+ j:s/C\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)/\0\9\8\7\6\5\4\3\2\1/
|
|||
|
+ j:s/D/d/
|
|||
|
+ j:s/E/~/
|
|||
|
+ j:s/F/\~/
|
|||
|
+ j:s/G/\ugg/
|
|||
|
+ j:s/H/\Uh\Eh/
|
|||
|
+ j:s/I/\lII/
|
|||
|
+ j:s/J/\LJ\EJ/
|
|||
|
+ j:s/K/\Uk\ek/
|
|||
|
+ j:s/L/
/
|
|||
|
+ j:s/M/\r/
|
|||
|
+ j:s/N/\
/
|
|||
|
+ j:s/O/\n/
|
|||
|
+ j:s/P/\b/
|
|||
|
+ j:s/Q/\t/
|
|||
|
+ j:s/R/\\/
|
|||
|
+ j:s/S/\c/
|
|||
|
+ j:s/T/ |