aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-02-03 12:45:48 +0100
committerMarc André Tanner <mat@brain-dump.org>2016-02-03 16:22:44 +0100
commit42da6e75c05cf1f184e4d45601bb5ed0679e40bd (patch)
tree6fc6466a6fb95b43fd64eafc64fffb278d16bdf7
parent9803932e3d702e2cdc654501d9fd4cb2c7fac491 (diff)
downloadvis-42da6e75c05cf1f184e4d45601bb5ed0679e40bd.tar.gz
vis-42da6e75c05cf1f184e4d45601bb5ed0679e40bd.tar.xz
text-motion: export custom word motion functions
-rw-r--r--text-motions.c8
-rw-r--r--text-motions.h7
2 files changed, 11 insertions, 4 deletions
diff --git a/text-motions.c b/text-motions.c
index b3216dc..51abb8e 100644
--- a/text-motions.c
+++ b/text-motions.c
@@ -277,7 +277,7 @@ size_t text_range_line_prev(Text *txt, Filerange *r, size_t pos) {
return newpos != pos && r->start <= newpos ? newpos : EPOS;
}
-static size_t text_customword_start_next(Text *txt, size_t pos, int (*isboundry)(int)) {
+size_t text_customword_start_next(Text *txt, size_t pos, int (*isboundry)(int)) {
char c;
Iterator it = text_iterator_get(txt, pos);
if (!text_iterator_byte_get(&it, &c))
@@ -290,7 +290,7 @@ static size_t text_customword_start_next(Text *txt, size_t pos, int (*isboundry)
return it.pos;
}
-static size_t text_customword_start_prev(Text *txt, size_t pos, int (*isboundry)(int)) {
+size_t text_customword_start_prev(Text *txt, size_t pos, int (*isboundry)(int)) {
char c;
Iterator it = text_iterator_get(txt, pos);
while (text_iterator_char_prev(&it, &c) && isspace((unsigned char)c));
@@ -301,7 +301,7 @@ static size_t text_customword_start_prev(Text *txt, size_t pos, int (*isboundry)
return pos;
}
-static size_t text_customword_end_next(Text *txt, size_t pos, int (*isboundry)(int)) {
+size_t text_customword_end_next(Text *txt, size_t pos, int (*isboundry)(int)) {
char c;
Iterator it = text_iterator_get(txt, pos);
while (text_iterator_char_next(&it, &c) && isspace((unsigned char)c));
@@ -312,7 +312,7 @@ static size_t text_customword_end_next(Text *txt, size_t pos, int (*isboundry)(i
return pos;
}
-static size_t text_customword_end_prev(Text *txt, size_t pos, int (*isboundry)(int)) {
+size_t text_customword_end_prev(Text *txt, size_t pos, int (*isboundry)(int)) {
char c;
Iterator it = text_iterator_get(txt, pos);
if (!text_iterator_byte_get(&it, &c))
diff --git a/text-motions.h b/text-motions.h
index 32e4a1f..b1388c8 100644
--- a/text-motions.h
+++ b/text-motions.h
@@ -76,6 +76,13 @@ size_t text_word_end_next(Text*, size_t pos);
size_t text_word_end_prev(Text*, size_t pos);
size_t text_word_start_next(Text*, size_t pos);
size_t text_word_start_prev(Text*, size_t pos);
+/*
+ * More general versions of the above, define your own word boundaries.
+ */
+size_t text_customword_start_next(Text*, size_t pos, int (*isboundry)(int));
+size_t text_customword_start_prev(Text*, size_t pos, int (*isboundry)(int));
+size_t text_customword_end_next(Text*, size_t pos, int (*isboundry)(int));
+size_t text_customword_end_prev(Text*, size_t pos, int (*isboundry)(int));
/* TODO: implement the following semantics
* A sentence is defined as ending at a '.', '!' or '?' followed by either the
* end of a line, or by a space or tab. Any number of closing ')', ']', '"'