summaryrefslogtreecommitdiff
path: root/src/regexp_nfa.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2013-06-14 20:31:28 +0200
committerBram Moolenaar <Bram@vim.org>2013-06-14 20:31:28 +0200
commit580abea48a0de604b40aca734b22f3ea7c0e7531 (patch)
tree97a686d40514e922dd5f22a18cdec0424d6b8d15 /src/regexp_nfa.c
parent6e70736cbc3ed8bf7178ffa884e022d916d0c1bf (diff)
downloadvim-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.c27
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