diff options
| author | Tyge Løvset <[email protected]> | 2022-09-22 13:04:58 +0200 |
|---|---|---|
| committer | Tyge Løvset <[email protected]> | 2022-09-22 13:04:58 +0200 |
| commit | 4c5f0ba23ba6294e144243555ed3c02a72259692 (patch) | |
| tree | 380b249e1c36b83b65507da5a2af4f843252a474 /include/stc/csview.h | |
| parent | 61c222312bb1cc03ab987fdbc541039723c9e243 (diff) | |
| download | STC-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.h | 14 |
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 */ |
