aboutsummaryrefslogtreecommitdiff
path: root/text-motions.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2018-02-24 19:05:10 +0100
committerMarc André Tanner <mat@brain-dump.org>2018-02-27 18:56:28 +0100
commit234e1b1579e92f66e75720a04e1179288831f231 (patch)
tree567992737c3d3d9e9c5be4469e8afd2d94318409 /text-motions.c
parente655f312a15fedca7beb1e7bbe57a1a3bf9933e1 (diff)
downloadvis-234e1b1579e92f66e75720a04e1179288831f231.tar.gz
vis-234e1b1579e92f66e75720a04e1179288831f231.tar.xz
text-motion: implement text_line_blank_{prev,next}
Diffstat (limited to 'text-motions.c')
-rw-r--r--text-motions.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/text-motions.c b/text-motions.c
index 4dd7b89..16137aa 100644
--- a/text-motions.c
+++ b/text-motions.c
@@ -481,6 +481,29 @@ size_t text_line_empty_prev(Text *txt, size_t pos) {
return it.pos;
}
+size_t text_line_blank_next(Text *txt, size_t pos) {
+ char c;
+ Iterator it = text_iterator_get(txt, pos);
+ while (text_iterator_byte_find_next(&it, '\n')) {
+ size_t n = it.pos;
+ while (text_iterator_byte_next(&it, &c) && blank(c));
+ if (c == '\n')
+ return n + 1;
+ }
+ return it.pos;
+}
+
+size_t text_line_blank_prev(Text *txt, size_t pos) {
+ char c;
+ Iterator it = text_iterator_get(txt, pos);
+ while (text_iterator_byte_find_prev(&it, '\n')) {
+ while (text_iterator_byte_prev(&it, &c) && blank(c));
+ if (c == '\n')
+ return it.pos + 1;
+ }
+ return it.pos;
+}
+
size_t text_block_start(Text *txt, size_t pos) {
Filerange r = text_object_curly_bracket(txt, pos-1);
return text_range_valid(&r) ? r.start-1 : pos;