- patchlevel 1112
This commit is contained in:
parent
8f0b651ad7
commit
4dd856f321
311
7.3.1112
Normal file
311
7.3.1112
Normal file
@ -0,0 +1,311 @@
|
||||
To: vim_dev@googlegroups.com
|
||||
Subject: Patch 7.3.1112
|
||||
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.1112
|
||||
Problem: New regexp engine: \%V not supported.
|
||||
Solution: Implement \%V. Add tests.
|
||||
Files: src/regexp.c, src/regexp_nfa.c, src/testdir/test64.in,
|
||||
src/testdir/test64.ok
|
||||
|
||||
|
||||
*** ../vim-7.3.1111/src/regexp.c 2013-06-03 19:41:01.000000000 +0200
|
||||
--- src/regexp.c 2013-06-04 18:28:12.000000000 +0200
|
||||
***************
|
||||
*** 4165,4170 ****
|
||||
--- 4165,4249 ----
|
||||
}
|
||||
|
||||
#endif
|
||||
+ #ifdef FEAT_VISUAL
|
||||
+ static int reg_match_visual __ARGS((void));
|
||||
+
|
||||
+ /*
|
||||
+ * Return TRUE if the current reginput position matches the Visual area.
|
||||
+ */
|
||||
+ static int
|
||||
+ reg_match_visual()
|
||||
+ {
|
||||
+ pos_T top, bot;
|
||||
+ linenr_T lnum;
|
||||
+ colnr_T col;
|
||||
+ win_T *wp = reg_win == NULL ? curwin : reg_win;
|
||||
+ int mode;
|
||||
+ colnr_T start, end;
|
||||
+ colnr_T start2, end2;
|
||||
+ colnr_T cols;
|
||||
+
|
||||
+ /* Check if the buffer is the current buffer. */
|
||||
+ if (reg_buf != curbuf || VIsual.lnum == 0)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ if (VIsual_active)
|
||||
+ {
|
||||
+ if (lt(VIsual, wp->w_cursor))
|
||||
+ {
|
||||
+ top = VIsual;
|
||||
+ bot = wp->w_cursor;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ top = wp->w_cursor;
|
||||
+ bot = VIsual;
|
||||
+ }
|
||||
+ mode = VIsual_mode;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ if (lt(curbuf->b_visual.vi_start, curbuf->b_visual.vi_end))
|
||||
+ {
|
||||
+ top = curbuf->b_visual.vi_start;
|
||||
+ bot = curbuf->b_visual.vi_end;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ top = curbuf->b_visual.vi_end;
|
||||
+ bot = curbuf->b_visual.vi_start;
|
||||
+ }
|
||||
+ mode = curbuf->b_visual.vi_mode;
|
||||
+ }
|
||||
+ lnum = reglnum + reg_firstlnum;
|
||||
+ if (lnum < top.lnum || lnum > bot.lnum)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ if (mode == 'v')
|
||||
+ {
|
||||
+ col = (colnr_T)(reginput - regline);
|
||||
+ if ((lnum == top.lnum && col < top.col)
|
||||
+ || (lnum == bot.lnum && col >= bot.col + (*p_sel != 'e')))
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ else if (mode == Ctrl_V)
|
||||
+ {
|
||||
+ getvvcol(wp, &top, &start, NULL, &end);
|
||||
+ getvvcol(wp, &bot, &start2, NULL, &end2);
|
||||
+ if (start2 < start)
|
||||
+ start = start2;
|
||||
+ if (end2 > end)
|
||||
+ end = end2;
|
||||
+ if (top.col == MAXCOL || bot.col == MAXCOL)
|
||||
+ end = MAXCOL;
|
||||
+ cols = win_linetabsize(wp, regline, (colnr_T)(reginput - regline));
|
||||
+ if (cols < start || cols > end - (*p_sel == 'e'))
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+ #endif
|
||||
+
|
||||
#define ADVANCE_REGINPUT() mb_ptr_adv(reginput)
|
||||
|
||||
/*
|
||||
***************
|
||||
*** 4347,4426 ****
|
||||
|
||||
case RE_VISUAL:
|
||||
#ifdef FEAT_VISUAL
|
||||
! /* Check if the buffer is the current buffer. and whether the
|
||||
! * position is inside the Visual area. */
|
||||
! if (reg_buf != curbuf || VIsual.lnum == 0)
|
||||
! status = RA_NOMATCH;
|
||||
! else
|
||||
! {
|
||||
! pos_T top, bot;
|
||||
! linenr_T lnum;
|
||||
! colnr_T col;
|
||||
! win_T *wp = reg_win == NULL ? curwin : reg_win;
|
||||
! int mode;
|
||||
!
|
||||
! if (VIsual_active)
|
||||
! {
|
||||
! if (lt(VIsual, wp->w_cursor))
|
||||
! {
|
||||
! top = VIsual;
|
||||
! bot = wp->w_cursor;
|
||||
! }
|
||||
! else
|
||||
! {
|
||||
! top = wp->w_cursor;
|
||||
! bot = VIsual;
|
||||
! }
|
||||
! mode = VIsual_mode;
|
||||
! }
|
||||
! else
|
||||
! {
|
||||
! if (lt(curbuf->b_visual.vi_start, curbuf->b_visual.vi_end))
|
||||
! {
|
||||
! top = curbuf->b_visual.vi_start;
|
||||
! bot = curbuf->b_visual.vi_end;
|
||||
! }
|
||||
! else
|
||||
! {
|
||||
! top = curbuf->b_visual.vi_end;
|
||||
! bot = curbuf->b_visual.vi_start;
|
||||
! }
|
||||
! mode = curbuf->b_visual.vi_mode;
|
||||
! }
|
||||
! lnum = reglnum + reg_firstlnum;
|
||||
! col = (colnr_T)(reginput - regline);
|
||||
! if (lnum < top.lnum || lnum > bot.lnum)
|
||||
! status = RA_NOMATCH;
|
||||
! else if (mode == 'v')
|
||||
! {
|
||||
! if ((lnum == top.lnum && col < top.col)
|
||||
! || (lnum == bot.lnum
|
||||
! && col >= bot.col + (*p_sel != 'e')))
|
||||
! status = RA_NOMATCH;
|
||||
! }
|
||||
! else if (mode == Ctrl_V)
|
||||
! {
|
||||
! colnr_T start, end;
|
||||
! colnr_T start2, end2;
|
||||
! colnr_T cols;
|
||||
!
|
||||
! getvvcol(wp, &top, &start, NULL, &end);
|
||||
! getvvcol(wp, &bot, &start2, NULL, &end2);
|
||||
! if (start2 < start)
|
||||
! start = start2;
|
||||
! if (end2 > end)
|
||||
! end = end2;
|
||||
! if (top.col == MAXCOL || bot.col == MAXCOL)
|
||||
! end = MAXCOL;
|
||||
! cols = win_linetabsize(wp,
|
||||
! regline, (colnr_T)(reginput - regline));
|
||||
! if (cols < start || cols > end - (*p_sel == 'e'))
|
||||
! status = RA_NOMATCH;
|
||||
! }
|
||||
! }
|
||||
! #else
|
||||
! status = RA_NOMATCH;
|
||||
#endif
|
||||
break;
|
||||
|
||||
case RE_LNUM:
|
||||
--- 4426,4434 ----
|
||||
|
||||
case RE_VISUAL:
|
||||
#ifdef FEAT_VISUAL
|
||||
! if (!reg_match_visual())
|
||||
#endif
|
||||
+ status = RA_NOMATCH;
|
||||
break;
|
||||
|
||||
case RE_LNUM:
|
||||
*** ../vim-7.3.1111/src/regexp_nfa.c 2013-06-04 17:47:00.000000000 +0200
|
||||
--- src/regexp_nfa.c 2013-06-04 18:22:04.000000000 +0200
|
||||
***************
|
||||
*** 178,183 ****
|
||||
--- 178,184 ----
|
||||
NFA_VCOL, /* Match cursor virtual column */
|
||||
NFA_VCOL_GT, /* Match > cursor virtual column */
|
||||
NFA_VCOL_LT, /* Match < cursor virtual column */
|
||||
+ NFA_VISUAL, /* Match Visual area */
|
||||
|
||||
NFA_FIRST_NL = NFA_ANY + ADD_NL,
|
||||
NFA_LAST_NL = NFA_NUPPER + ADD_NL,
|
||||
***************
|
||||
*** 960,967 ****
|
||||
break;
|
||||
|
||||
case 'V':
|
||||
! /* TODO: not supported yet */
|
||||
! return FAIL;
|
||||
break;
|
||||
|
||||
case '[':
|
||||
--- 961,967 ----
|
||||
break;
|
||||
|
||||
case 'V':
|
||||
! EMIT(NFA_VISUAL);
|
||||
break;
|
||||
|
||||
case '[':
|
||||
***************
|
||||
*** 4731,4736 ****
|
||||
--- 4731,4743 ----
|
||||
if (result)
|
||||
addstate_here(thislist, t->state->out, &t->subs,
|
||||
t->pim, &listidx);
|
||||
+ break;
|
||||
+
|
||||
+ case NFA_VISUAL:
|
||||
+ result = reg_match_visual();
|
||||
+ if (result)
|
||||
+ addstate_here(thislist, t->state->out, &t->subs,
|
||||
+ t->pim, &listidx);
|
||||
break;
|
||||
|
||||
default: /* regular character */
|
||||
*** ../vim-7.3.1111/src/testdir/test64.in 2013-06-02 16:07:05.000000000 +0200
|
||||
--- src/testdir/test64.in 2013-06-04 18:07:59.000000000 +0200
|
||||
***************
|
||||
*** 458,463 ****
|
||||
--- 458,471 ----
|
||||
:.yank
|
||||
Gop:"
|
||||
:"
|
||||
+ :" Check matching Visual area
|
||||
+ /^Visual:
|
||||
+ jfxvfx:s/\%Ve/E/g
|
||||
+ jV:s/\%Va/A/g
|
||||
+ jfxfxj:s/\%Vo/O/g
|
||||
+ :/^Visual/+1,/^Visual/+4yank
|
||||
+ Gop:"
|
||||
+ :"
|
||||
:" Check patterns matching cursor position.
|
||||
:func! Postest()
|
||||
new
|
||||
***************
|
||||
*** 520,523 ****
|
||||
--- 528,537 ----
|
||||
asdfasd<yy
|
||||
xxstart3
|
||||
|
||||
+ Visual:
|
||||
+ thexe the thexethe
|
||||
+ andaxand andaxand
|
||||
+ oooxofor foroxooo
|
||||
+ oooxofor foroxooo
|
||||
+
|
||||
Results of test64:
|
||||
*** ../vim-7.3.1111/src/testdir/test64.ok 2013-06-02 16:07:05.000000000 +0200
|
||||
--- src/testdir/test64.ok 2013-06-04 18:08:08.000000000 +0200
|
||||
***************
|
||||
*** 857,862 ****
|
||||
--- 857,867 ----
|
||||
ghi
|
||||
|
||||
xxstart3
|
||||
+
|
||||
+ thexE thE thExethe
|
||||
+ AndAxAnd AndAxAnd
|
||||
+ oooxOfOr fOrOxooo
|
||||
+ oooxOfOr fOrOxooo
|
||||
-0-
|
||||
ffo
|
||||
bob
|
||||
*** ../vim-7.3.1111/src/version.c 2013-06-04 17:47:00.000000000 +0200
|
||||
--- src/version.c 2013-06-04 18:26:28.000000000 +0200
|
||||
***************
|
||||
*** 730,731 ****
|
||||
--- 730,733 ----
|
||||
{ /* Add new patch number below this line */
|
||||
+ /**/
|
||||
+ 1112,
|
||||
/**/
|
||||
|
||||
--
|
||||
hundred-and-one symptoms of being an internet addict:
|
||||
87. Everyone you know asks why your phone line is always busy ...and
|
||||
you tell them to send an e-mail.
|
||||
|
||||
/// 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 ///
|
Loading…
Reference in New Issue
Block a user