diff options
author | Bram Moolenaar <Bram@vim.org> | 2013-06-14 20:31:28 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2013-06-14 20:31:28 +0200 |
commit | 580abea48a0de604b40aca734b22f3ea7c0e7531 (patch) | |
tree | 97a686d40514e922dd5f22a18cdec0424d6b8d15 /src/regexp_nfa.c | |
parent | 6e70736cbc3ed8bf7178ffa884e022d916d0c1bf (diff) | |
download | vim-git-580abea48a0de604b40aca734b22f3ea7c0e7531.tar.gz |
updated for version 7.3.1191v7.3.1191
Problem: Backreference to previous line doesn't work. (Lech Lorens)
Solution: Implement looking in another line.
Diffstat (limited to 'src/regexp_nfa.c')
-rw-r--r-- | src/regexp_nfa.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c index e843cd742..702095548 100644 --- 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 |