diff options
author | Julio B <julio.bacel@gmail.com> | 2024-03-28 10:23:37 +0100 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2024-03-28 10:23:37 +0100 |
commit | 46fa3c7e271eb2abb05a0d9e6dbc9c36c2b2da02 (patch) | |
tree | 46c442a882fc4739bf4fe0ce288c80f1a3bfd63e /src | |
parent | 74a23318467aecbb8e21535c6e8a27a257a0a14a (diff) |
patch 9.1.0217: regexp: verymagic cannot match before/after a markv9.1.0217
Problem: regexp: verymagic cannot match before/after a mark
Solution: Correctly check for the very magic check (Julio B)
Fix regexp parser for \v%>'m and \v%<'m
Currently \v%'m works fine, but it is unable to match before or after
the position of mark m.
closes: #14309
Signed-off-by: Julio B <julio.bacel@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/regexp_bt.c | 2 | ||||
-rw-r--r-- | src/regexp_nfa.c | 2 | ||||
-rw-r--r-- | src/testdir/test_regexp_latin.vim | 14 |
3 files changed, 16 insertions, 2 deletions
diff --git a/src/regexp_bt.c b/src/regexp_bt.c index 198946e0dc..5d9450d871 100644 --- a/src/regexp_bt.c +++ b/src/regexp_bt.c @@ -1641,7 +1641,7 @@ regatom(int *flagp) n = n * 10 + (c - '0'); c = getchr(); } - if (c == '\'' && n == 0) + if (no_Magic(c) == '\'' && n == 0) { // "\%'m", "\%<'m" and "\%>'m": Mark c = getchr(); diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c index ff54348905..359ce5b517 100644 --- a/src/regexp_nfa.c +++ b/src/regexp_nfa.c @@ -1733,7 +1733,7 @@ nfa_regatom(void) EMIT((int)n); break; } - else if (c == '\'' && n == 0) + else if (no_Magic(c) == '\'' && n == 0) { // \%'m \%<'m \%>'m EMIT(cmp == '<' ? NFA_MARK_LT : diff --git a/src/testdir/test_regexp_latin.vim b/src/testdir/test_regexp_latin.vim index 9acb12b4af..f8614e7d18 100644 --- a/src/testdir/test_regexp_latin.vim +++ b/src/testdir/test_regexp_latin.vim @@ -874,12 +874,26 @@ func Regex_Mark() %d endfunc +" Same test as abobe, but use verymagic +func Regex_Mark_Verymagic() + call append(0, ['', '', '', 'Marks:', 'asdfSasdfsadfEasdf', 'asdfSas', + \ 'dfsadfEasdf', '', '', '', '', '']) + call cursor(4, 1) + exe "normal jfSmsfEme:.-4,.+6s/\\v.%>'s.*%<'e../here/\<CR>" + exe "normal jfSmsj0fEme:.-4,.+6s/\\v.%>'s\\_.*%<'e../again/\<CR>" + call assert_equal(['', '', '', 'Marks:', 'asdfhereasdf', 'asdfagainasdf', + \ '', '', '', '', '', ''], getline(1, '$')) + %d +endfunc + func Test_matching_marks() new set regexpengine=1 call Regex_Mark() + call Regex_Mark_Verymagic() set regexpengine=2 call Regex_Mark() + call Regex_Mark_Verymagic() bwipe! endfunc |