1
0
Fork 0
mirror of git://slackware.nl/current.git synced 2025-02-15 08:50:09 +01:00
slackware-current/source/ap/vim/patches/7.3.636
Patrick J Volkerding 9664bee729 Slackware 14.0
Wed Sep 26 01:10:42 UTC 2012
Slackware 14.0 x86_64 stable is released!

We're perfectionists here at Slackware, so this release has been a long
time a-brewing.  But we think you'll agree that it was worth the wait.
Slackware 14.0 combines modern components, ease of use, and flexible
configuration... our "KISS" philosophy demands it.

The ISOs are off to be replicated, a 6 CD-ROM 32-bit set and a
dual-sided
32-bit/64-bit x86/x86_64 DVD.  Please consider supporting the Slackware
project by picking up a copy from store.slackware.com.  We're taking
pre-orders now, and offer a discount if you sign up for a subscription.

Thanks to everyone who helped make this happen.  The Slackware team, the
upstream developers, and (of course) the awesome Slackware user
community.

Have fun!  :-)
2018-05-31 22:51:55 +02:00

148 lines
4.4 KiB
Text

To: vim_dev@googlegroups.com
Subject: Patch 7.3.636
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.636 (after 7.3.625)
Problem: Not all zero-width matches handled correctly for "gn".
Solution: Move zero-width detection to a separate function. (Christian
Brabandt)
Files: src/search.c
*** ../vim-7.3.635/src/search.c 2012-08-08 15:27:54.000000000 +0200
--- src/search.c 2012-08-23 15:52:50.000000000 +0200
***************
*** 4526,4531 ****
--- 4526,4533 ----
#endif /* FEAT_TEXTOBJ */
#if defined(FEAT_VISUAL) || defined(PROTO)
+ static int is_zerowidth __ARGS((char_u *pattern));
+
/*
* Find next search match under cursor, cursor at end.
* Used while an operator is pending, and in Visual mode.
***************
*** 4546,4556 ****
int visual_active = FALSE;
int flags = 0;
pos_T save_VIsual;
- regmmatch_T regmatch;
- int nmatched = 0;
int zerowidth = FALSE;
-
/* wrapping should not occur */
p_ws = FALSE;
--- 4548,4555 ----
***************
*** 4583,4606 ****
else
orig_pos = pos = start_pos = curwin->w_cursor;
! /*
! * Check for zero-width pattern.
! */
! if (search_regcomp(spats[last_idx].pat, RE_SEARCH, RE_SEARCH,
! ((SEARCH_HIS + SEARCH_KEEP)), &regmatch) == FAIL)
return FAIL;
- /* Zero-width pattern should match somewhere, then we can check if start
- * and end are in the same position. */
- nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
- curwin->w_cursor.lnum, (colnr_T)0, NULL);
- if (called_emsg)
- return FAIL;
- if (nmatched && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
- && regmatch.endpos[0].col == regmatch.startpos[0].col)
- zerowidth = TRUE;
- vim_free(regmatch.regprog);
-
/*
* The trick is to first search backwards and then search forward again,
* so that a match at the current cursor position will be correctly
--- 4582,4592 ----
else
orig_pos = pos = start_pos = curwin->w_cursor;
! /* Is the pattern is zero-width? */
! zerowidth = is_zerowidth(spats[last_idx].pat);
! if (zerowidth == -1)
return FAIL;
/*
* The trick is to first search backwards and then search forward again,
* so that a match at the current cursor position will be correctly
***************
*** 4693,4698 ****
--- 4679,4721 ----
return OK;
}
+
+ /*
+ * Check if the pattern is zero-width.
+ * Returns TRUE, FALSE or -1 for failure.
+ */
+ static int
+ is_zerowidth(pattern)
+ char_u *pattern;
+ {
+ regmmatch_T regmatch;
+ int nmatched = 0;
+ int result = -1;
+ pos_T pos;
+
+ if (search_regcomp(pattern, RE_SEARCH, RE_SEARCH,
+ SEARCH_KEEP, &regmatch) == FAIL)
+ return -1;
+
+ /* move to match */
+ clearpos(&pos);
+ if (searchit(curwin, curbuf, &pos, FORWARD, spats[last_idx].pat, 1,
+ SEARCH_KEEP, RE_SEARCH, 0, NULL) != FAIL)
+ {
+ /* Zero-width pattern should match somewhere, then we can check if
+ * start and end are in the same position. */
+ nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
+ pos.lnum, (colnr_T)0, NULL);
+
+ if (!called_emsg)
+ result = (nmatched != 0
+ && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
+ && regmatch.startpos[0].col == regmatch.endpos[0].col);
+ }
+
+ vim_free(regmatch.regprog);
+ return result;
+ }
#endif /* FEAT_VISUAL */
#if defined(FEAT_LISP) || defined(FEAT_CINDENT) || defined(FEAT_TEXTOBJ) \
*** ../vim-7.3.635/src/version.c 2012-08-23 13:28:50.000000000 +0200
--- src/version.c 2012-08-23 15:25:23.000000000 +0200
***************
*** 721,722 ****
--- 721,724 ----
{ /* Add new patch number below this line */
+ /**/
+ 636,
/**/
--
Edison's greatest achievement came in 1879, when he invented the
electric company. Edison's design was a brilliant adaptation of the
simple electrical circuit: the electric company sends electricity
through a wire to a customer, then immediately gets the electricity
back through another wire
/// 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 ///