summaryrefslogtreecommitdiffhomepage
path: root/src/utf8code.c
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2022-12-04 20:52:36 +0100
committerTyge Løvset <[email protected]>2022-12-04 20:52:36 +0100
commit20400977b40599fd1c6637dd659e72b900794d0f (patch)
treed4c60a2af4b21d6a6da4e79829254602e5f7c16c /src/utf8code.c
parent1e0f229b0b044f6df0d0084674f3cf0dc4f4d31d (diff)
downloadSTC-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.c35
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