commit - 1dc96d88793508394f21675b6084a3092d1c4dcf
commit + de151cb67023bb839d4faae4f2b49090a75ecf79
blob - e0e97f5607bfff0056604783be9887e989c3a1bc
blob + 9479dfd9fe9aeb9e15948bb1acc1b8b1af7d0c0f
--- utf8.c
+++ utf8.c
}
}
-char *
-utf8_nth(char *s, size_t n)
-{
- size_t i;
- uint32_t cp = 0, state = 0;
-
- for (i = 0; *s && i < n; ++s)
- if (!decode(&state, &cp, *s))
- ++i;
-
- if (state != UTF8_ACCEPT)
- return NULL;
- if (i == n)
- return s;
- return NULL;
-}
-
-size_t
-utf8_cplen(char *s)
-{
- uint32_t cp = 0, state = 0;
- size_t len;
-
- len = 0;
- for (; *s; ++s)
- if (!decode(&state, &cp, *s))
- len++;
- return len;
-}
-
-size_t
-utf8_ncplen(const char *s, size_t slen)
-{
- uint32_t cp = 0, state = 0;
- size_t len = 0;
-
- for (; slen > 0 && *s; ++s, --slen)
- if (!decode(&state, &cp, *s))
- len++;
- return len;
-}
-
/* returns only 0, 1, 2 or 8. assumes sizeof(wchar_t) is 4 */
size_t
utf8_chwidth(uint32_t cp)
return tot;
}
-char *
-utf8_next_cp(const char *s)
-{
- uint32_t cp = 0, state = 0;
-
- for (; *s; ++s)
- if (!decode(&state, &cp, *s))
- break;
- return (char*)s+1;
-}
-
-char *
-utf8_prev_cp(const char *start, const char *base)
-{
- uint8_t c;
-
- for (; start > base; start--) {
- c = *start;
- if ((c & 0xC0) != 0x80)
- return (char*)start;
- }
-
- return (char*)base;
-}
-
/*
* XXX: This is not correct. There are codepoints classified as
* "emoji", but these can be joined together to form more complex
blob - 2c6273046d618fe14d98dc139adee0409a99cf42
blob + 3dcbe2bf50a08b51e2e3028c80cef47f6a7880be
--- utf8.h
+++ utf8.h
/* utf8.c */
uint32_t utf8_decode(uint32_t*restrict, uint32_t*restrict, uint8_t);
size_t utf8_encode(uint32_t, char*);
-char *utf8_nth(char*, size_t);
-size_t utf8_cplen(char*);
-size_t utf8_ncplen(const char *, size_t);
size_t utf8_chwidth(uint32_t);
size_t utf8_snwidth(const char*, size_t);
size_t utf8_swidth(const char*);
size_t utf8_swidth_between(const char*, const char*);
-char *utf8_next_cp(const char*);
-char *utf8_prev_cp(const char*, const char*);
int emojied_line(const char *, const char **);
/* emoji-matcher.c */