diff options
| author | Tyge Løvset <[email protected]> | 2022-12-04 20:52:36 +0100 |
|---|---|---|
| committer | Tyge Løvset <[email protected]> | 2022-12-04 20:52:36 +0100 |
| commit | 20400977b40599fd1c6637dd659e72b900794d0f (patch) | |
| tree | d4c60a2af4b21d6a6da4e79829254602e5f7c16c /src/utf8code.c | |
| parent | 1e0f229b0b044f6df0d0084674f3cf0dc4f4d31d (diff) | |
| download | STC-modified-20400977b40599fd1c6637dd659e72b900794d0f.tar.gz STC-modified-20400977b40599fd1c6637dd659e72b900794d0f.zip | |
Support for linking dependant UTF8 and cstr functions and/or cregex.c by defining i_extern before including <stc/cstr.h> and <stc/cregex.h>. I.e.
#define i_extern
#define i_implement // define cstr functions as shared symbols (static if not defined).
#include <stc/cregex.h> // include cstr.h, utf8code.c, cregex.c, unless already included.
Diffstat (limited to 'src/utf8code.c')
| -rw-r--r-- | src/utf8code.c | 35 |
1 files changed, 4 insertions, 31 deletions
diff --git a/src/utf8code.c b/src/utf8code.c index b1534230..5dfb7d30 100644 --- a/src/utf8code.c +++ b/src/utf8code.c @@ -1,7 +1,7 @@ +#ifndef UTF8_C_INCLUDED +#define UTF8_C_INCLUDED #include <ctype.h> -#define i_header -#include <stc/cstr.h> -#include <stc/cregex.h> +#include <stc/utf8.h> // header only #include "utf8tabs.inc" const uint8_t utf8_dtab[] = { @@ -143,31 +143,4 @@ bool utf8_isalpha(uint32_t c) { if (c < 128) return isalpha(c) != 0; return utf8_islower(c) || utf8_isupper(c); } - -static struct { - int (*conv_asc)(int); - uint32_t (*conv_utf)(uint32_t); -} -fn_tocase[] = {{tolower, utf8_casefold}, - {tolower, utf8_tolower}, - {toupper, utf8_toupper}}; - -cstr cstr_tocase(csview sv, int k) { - cstr out = cstr_null; - char *buf = cstr_reserve(&out, sv.size*3/2); - uint32_t cp; size_t sz = 0; - utf8_decode_t d = {.state=0}; - - while (*sv.str) { - do { utf8_decode(&d, (uint8_t)*sv.str++); } while (d.state); - if (d.codep < 128) - buf[sz++] = (char)fn_tocase[k].conv_asc((int)d.codep); - else { - cp = fn_tocase[k].conv_utf(d.codep); - sz += utf8_encode(buf + sz, cp); - } - } - _cstr_set_size(&out, sz); - cstr_shrink_to_fit(&out); - return out; -} +#endif |
