Mercurial > vim
diff src/regexp_nfa.c @ 4891:4c42efb4c098 v7.3.1191
updated for version 7.3.1191
Problem: Backreference to previous line doesn't work. (Lech Lorens)
Solution: Implement looking in another line.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Fri, 14 Jun 2013 20:31:28 +0200 |
parents | dc78a26f6f64 |
children | 07b9c48a30e9 |
line wrap: on
line diff
--- a/src/regexp_nfa.c +++ b/src/regexp_nfa.c @@ -4367,14 +4367,27 @@ retempty: if (sub->list.multi[subidx].start.lnum < 0 || sub->list.multi[subidx].end.lnum < 0) goto retempty; - /* TODO: line breaks */ - len = sub->list.multi[subidx].end.col - - sub->list.multi[subidx].start.col; - if (cstrncmp(regline + sub->list.multi[subidx].start.col, - reginput, &len) == 0) + if (sub->list.multi[subidx].start.lnum == reglnum + && sub->list.multi[subidx].end.lnum == reglnum) { - *bytelen = len; - return TRUE; + len = sub->list.multi[subidx].end.col + - sub->list.multi[subidx].start.col; + if (cstrncmp(regline + sub->list.multi[subidx].start.col, + reginput, &len) == 0) + { + *bytelen = len; + return TRUE; + } + } + else + { + if (match_with_backref( + sub->list.multi[subidx].start.lnum, + sub->list.multi[subidx].start.col, + sub->list.multi[subidx].end.lnum, + sub->list.multi[subidx].end.col, + bytelen) == RA_MATCH) + return TRUE; } } else