aboutsummaryrefslogtreecommitdiff
path: root/text-motions.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2014-09-08 17:27:25 +0200
committerMarc André Tanner <mat@brain-dump.org>2014-09-08 17:27:25 +0200
commite7b6ac1574ba4dad280e6a45beb52dac4e3ea2e9 (patch)
treec77ced81181dcb972afc2b52e7425ddc29228319 /text-motions.c
parent403ee5284a70f778b379041c169f72a7586c59ee (diff)
downloadvis-e7b6ac1574ba4dad280e6a45beb52dac4e3ea2e9.tar.gz
vis-e7b6ac1574ba4dad280e6a45beb52dac4e3ea2e9.tar.xz
Hook up search as a movement
Diffstat (limited to 'text-motions.c')
-rw-r--r--text-motions.c30
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;
+}