vim-patch:8.1.0083: "is" and "as" have trouble with quoted punctuation

Problem:    "is" and "as" have trouble with quoted punctuation.
Solution:   Check for punctuation before a quote. (Jason Franklin)
8516071124
This commit is contained in:
Jan Edmund Lazo
2018-08-23 18:32:07 -04:00
parent 925c153f86
commit 42428b3f85
2 changed files with 95 additions and 21 deletions

View File

@@ -2211,12 +2211,11 @@ showmatch(
}
}
/*
* findsent(dir, count) - Find the start of the next sentence in direction
* "dir" Sentences are supposed to end in ".", "!" or "?" followed by white
* space or a line break. Also stop at an empty line.
* Return OK if the next sentence was found.
*/
// Find the start of the next sentence, searching in the direction specified
// by the "dir" argument. The cursor is positioned on the start of the next
// sentence when found. If the next sentence is found, return OK. Return FAIL
// otherwise. See ":h sentence" for the precise definition of a "sentence"
// text object.
int findsent(int dir, long count)
{
pos_T pos, tpos;
@@ -2259,25 +2258,25 @@ int findsent(int dir, long count)
decl(&pos);
}
// go back to the previous non-blank char
// go back to the previous non-white non-punctuation character
found_dot = false;
while ((c = gchar_pos(&pos)) == ' ' || c == '\t'
|| (dir == BACKWARD
&& vim_strchr((char_u *)".!?)]\"'", c) != NULL)) {
if (vim_strchr((char_u *)".!?", c) != NULL) {
/* Only skip over a '.', '!' and '?' once. */
if (found_dot)
break;
found_dot = TRUE;
}
if (decl(&pos) == -1) {
while (c = gchar_pos(&pos), ascii_iswhite(c)
|| vim_strchr((char_u *)".!?)]\"'", c) != NULL) {
tpos = pos;
if (decl(&tpos) == -1 || (LINEEMPTY(tpos.lnum) && dir == FORWARD)) {
break;
}
// when going forward: Stop in front of empty line
if (LINEEMPTY(pos.lnum) && dir == FORWARD) {
incl(&pos);
goto found;
if (found_dot) {
break;
}
if (vim_strchr((char_u *) ".!?", c) != NULL) {
found_dot = true;
}
if (vim_strchr((char_u *) ")]\"'", c) != NULL
&& vim_strchr((char_u *) ".!?)]\"'", gchar_pos(&tpos)) == NULL) {
break;
}
decl(&pos);
}
/* remember the line where the search started */