Mercurial > vim
changeset 6510:dfd593d81818 v7.4.582
updated for version 7.4.582
Problem: Can't match "%>80v" properly. (Axel Bender)
Solution: Correctly handle ">". (Christian Brabandt)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Sun, 18 Jan 2015 16:46:32 +0100 |
parents | a7b7e93711f6 |
children | 93bd50cf263b |
files | src/regexp_nfa.c src/testdir/test64.in src/testdir/test64.ok src/version.c |
diffstat | 4 files changed, 25 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/regexp_nfa.c +++ b/src/regexp_nfa.c @@ -6441,16 +6441,26 @@ nfa_regmatch(prog, start, submatch, m) { int op = t->state->c - NFA_VCOL; colnr_T col = (colnr_T)(reginput - regline); + win_T *wp = reg_win == NULL ? curwin : reg_win; /* Bail out quickly when there can't be a match, avoid the * overhead of win_linetabsize() on long lines. */ - if ((col > t->state->val && op != 1) - || (col - 1 > t->state->val && op == 1)) + if (op != 1 && col > t->state->val) break; - result = nfa_re_num_cmp(t->state->val, op, - (long_u)win_linetabsize( - reg_win == NULL ? curwin : reg_win, - regline, col) + 1); + result = FALSE; + if (op == 1 && col - 1 > t->state->val && col > 100) + { + int ts = wp->w_buffer->b_p_ts; + + /* Guess that a character won't use more columns than + * 'tabstop', with a minimum of 4. */ + if (ts < 4) + ts = 4; + result = col > t->state->val * ts; + } + if (!result) + result = nfa_re_num_cmp(t->state->val, op, + (long_u)win_linetabsize(wp, regline, col) + 1); if (result) { add_here = TRUE;
--- a/src/testdir/test64.in +++ b/src/testdir/test64.in @@ -7,6 +7,7 @@ actually tried. STARTTEST :so small.vim :" tl is a List of Lists with: +:" regexp engine :" regexp pattern :" text to test the pattern on :" expected match (optional) @@ -451,6 +452,9 @@ STARTTEST :"""" Skip adding state twice :call add(tl, [2, '^\%(\%(^\s*#\s*if\>\|#\s*if\)\)\(\%>1c.*$\)\@=', "#if FOO", "#if", ' FOO']) :" +:""" Test \%V atom +:call add(tl, [2, '\%>70vGesamt', 'Jean-Michel Charlier & Victor Hubinon\Gesamtausgabe [Salleck] Buck Danny {Jean-Michel Charlier & Victor Hubinon}\Gesamtausgabe', 'Gesamt']) +:" :"""" Run the tests :" :for t in tl
--- a/src/testdir/test64.ok +++ b/src/testdir/test64.ok @@ -1030,6 +1030,9 @@ OK 2 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4} OK 0 - ^\%(\%(^\s*#\s*if\>\|#\s*if\)\)\(\%>1c.*$\)\@= OK 1 - ^\%(\%(^\s*#\s*if\>\|#\s*if\)\)\(\%>1c.*$\)\@= OK 2 - ^\%(\%(^\s*#\s*if\>\|#\s*if\)\)\(\%>1c.*$\)\@= +OK 0 - \%>70vGesamt +OK 1 - \%>70vGesamt +OK 2 - \%>70vGesamt multi-line tests OK 0 - ^.\(.\).\_..\1. OK 1 - ^.\(.\).\_..\1.