diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2014-09-08 17:27:25 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2014-09-08 17:27:25 +0200 |
| commit | e7b6ac1574ba4dad280e6a45beb52dac4e3ea2e9 (patch) | |
| tree | c77ced81181dcb972afc2b52e7425ddc29228319 /text-motions.c | |
| parent | 403ee5284a70f778b379041c169f72a7586c59ee (diff) | |
| download | vis-e7b6ac1574ba4dad280e6a45beb52dac4e3ea2e9.tar.gz vis-e7b6ac1574ba4dad280e6a45beb52dac4e3ea2e9.tar.xz | |
Hook up search as a movement
Diffstat (limited to 'text-motions.c')
| -rw-r--r-- | text-motions.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/text-motions.c b/text-motions.c index fc87950..7696ff0 100644 --- a/text-motions.c +++ b/text-motions.c @@ -296,3 +296,33 @@ size_t text_bracket_match(Text *txt, size_t pos) { return pos; /* no match found */ } + +size_t text_search_forward(Text *txt, size_t pos, Regex *regex) { + int start = pos + 1; + int end = text_size(txt); + RegexMatch match[1]; + bool found = !text_search_range_forward(txt, start, end - start, regex, 1, match, 0); + + if (!found) { + start = 0; + end = pos; + found = !text_search_range_forward(txt, start, end, regex, 1, match, 0); + } + + return found ? match[0].start : pos; +} + +size_t text_search_backward(Text *txt, size_t pos, Regex *regex) { + int start = 0; + int end = pos; + RegexMatch match[1]; + bool found = !text_search_range_backward(txt, start, end, regex, 1, match, 0); + + if (!found) { + start = pos + 1; + end = text_size(txt); + found = !text_search_range_backward(txt, start, end - start, regex, 1, match, 0); + } + + return found ? match[0].start : pos; +} |
