From 4c5f0ba23ba6294e144243555ed3c02a72259692 Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Thu, 22 Sep 2022 13:04:58 +0200 Subject: Updated _advance() iter methods. Some have signed offsets. utf8_peek()/utf8_peek_off() added/changed. --- include/stc/csview.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'include/stc/csview.h') 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 */ -- cgit v1.2.3