home *** CD-ROM | disk | FTP | other *** search
- 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)), ®match) == 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(®match, 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, ®match) == 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(®match, 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 ///
-