diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-10-29 21:59:03 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-10-29 21:59:03 +0100 |
commit | 5dbf53a1c512f9163744874e3d502e9f9e2808da (patch) | |
tree | a3e1b78c447dd530459fe58eb6c763badb5fa4f1 | |
parent | 3f7c3d8baa64fecbfb1a30db853731897035fd0b (diff) |
Make ucswdth() take a current width
-rw-r--r-- | include/unicode/string.h | 5 | ||||
-rw-r--r-- | lib/unicode/string/u8wdth.c | 5 |
2 files changed, 5 insertions, 5 deletions
diff --git a/include/unicode/string.h b/include/unicode/string.h index 077a45a..4f3760b 100644 --- a/include/unicode/string.h +++ b/include/unicode/string.h @@ -30,7 +30,7 @@ typedef enum { /* clang-format on */ -[[nodiscard]] size_t u8wdth(u8view_t, int); +[[nodiscard]] ptrdiff_t u8wdth(u8view_t, ptrdiff_t, int); [[nodiscard]] size_t u8gcnt(u8view_t); [[nodiscard]] size_t u8wcnt(u8view_t); [[nodiscard]] size_t u8wcnt_human(u8view_t); @@ -44,7 +44,8 @@ size_t u8wnext_human(u8view_t *, u8view_t *); [[nodiscard]] char8_t *u8norm(size_t *, u8view_t, allocator_t, normform_t); /* Encoding-generic macros */ -#define ucswdth(sv, ts) _Generic((sv), u8view_t: u8wdth)((sv), (ts)) +#define ucswdth(sv, curwdth, ts) \ + _Generic((sv), u8view_t: u8wdth)((sv), (curwdth), (ts)) #define ucsgcnt(sv) _Generic((sv), u8view_t: u8gcnt)((sv)) #define ucswcnt(sv) _Generic((sv), u8view_t: u8wcnt)((sv)) #define ucswcnt_human(sv) _Generic((sv), u8view_t: u8wcnt_human)((sv)) diff --git a/lib/unicode/string/u8wdth.c b/lib/unicode/string/u8wdth.c index db51b06..71581d3 100644 --- a/lib/unicode/string/u8wdth.c +++ b/lib/unicode/string/u8wdth.c @@ -2,11 +2,10 @@ #include "unicode/prop.h" #include "unicode/string.h" -size_t -u8wdth(u8view_t sv, int ts) +ptrdiff_t +u8wdth(u8view_t sv, ptrdiff_t n, int ts) { rune ch; - size_t n = 0; while (ucsnext(&ch, &sv) != 0) { if (ch == '\t') |