summaryrefslogtreecommitdiffhomepage
path: root/include/stc/csview.h
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2022-09-22 13:04:58 +0200
committerTyge Løvset <[email protected]>2022-09-22 13:04:58 +0200
commit4c5f0ba23ba6294e144243555ed3c02a72259692 (patch)
tree380b249e1c36b83b65507da5a2af4f843252a474 /include/stc/csview.h
parent61c222312bb1cc03ab987fdbc541039723c9e243 (diff)
downloadSTC-modified-4c5f0ba23ba6294e144243555ed3c02a72259692.tar.gz
STC-modified-4c5f0ba23ba6294e144243555ed3c02a72259692.zip
Updated _advance() iter methods. Some have signed offsets.
utf8_peek()/utf8_peek_off() added/changed.
Diffstat (limited to 'include/stc/csview.h')
-rw-r--r--include/stc/csview.h14
1 files changed, 10 insertions, 4 deletions
diff --git a/include/stc/csview.h b/include/stc/csview.h
index 54a4c4cc..2e90c69b 100644
--- a/include/stc/csview.h
+++ b/include/stc/csview.h
@@ -78,15 +78,21 @@ STC_INLINE csview_iter csview_begin(const csview* self) {
return c_make(csview_iter){.u8 = {{self->str, utf8_chr_size(self->str)},
self->str + self->size}};
}
-
-STC_INLINE csview_iter csview_end(const csview* self)
- { return c_make(csview_iter){.u8 = {{NULL}, self->str + self->size}}; }
-
+STC_INLINE csview_iter csview_end(const csview* self) {
+ return c_make(csview_iter){.u8 = {{NULL}, self->str + self->size}};
+}
STC_INLINE void csview_next(csview_iter* it) {
it->ref += it->u8.chr.size;
it->u8.chr.size = utf8_chr_size(it->ref);
if (it->ref == it->u8.end) it->ref = NULL;
}
+STC_INLINE csview_iter csview_advance(csview_iter it, isize_t pos) {
+ int inc = -1;
+ if (pos > 0) pos = -pos, inc = 1;
+ while (pos && it.ref != it.u8.end) pos += (*(it.ref += inc) & 0xC0) != 0x80;
+ it.u8.chr.size = utf8_chr_size(it.ref);
+ return it;
+}
/* utf8 */