summaryrefslogtreecommitdiff
path: root/src/unicode.c
diff options
context:
space:
mode:
authorOxore <oxore@protonmail.com>2019-01-03 22:45:18 +0300
committerOxore <oxore@protonmail.com>2019-01-03 22:49:40 +0300
commit5ecd8885556cdfc07d2bccaede45f86e329da637 (patch)
treefd23f04ad159bcae5d863ac788df140c4b4465ce /src/unicode.c
parent6c3579c976a14c4eda8964491c649839a189828f (diff)
Move unicode module to separate library lib8
Diffstat (limited to 'src/unicode.c')
-rw-r--r--src/unicode.c54
1 files changed, 0 insertions, 54 deletions
diff --git a/src/unicode.c b/src/unicode.c
deleted file mode 100644
index de25ffb..0000000
--- a/src/unicode.c
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <stdlib.h>
-#include <string.h>
-
-#include "unicode.h"
-
-static inline size_t utf8_char_len(unsigned char c)
-{
- if (c > 0x00 && c < 0xC0)
- return 1;
- else if (c >= 0xC2 && c < 0xE0)
- return 2;
- else if (c >= 0xE0 && c < 0xF0)
- return 3;
- else if (c >= 0xF0 && c < 0xF5)
- return 4;
- else
- return 0;
-}
-
-size_t utf8_strlen(char *string)
-{
- size_t len = 0, keep = 0;
- for (char *c = string; *c; (keep ? --keep : ++len), ++c)
- if (!keep)
- keep = (keep = utf8_char_len(*c)) ? keep - 1 : keep;
- return len;
-}
-
-void utf8to32_strcpy(wchar_t *dest, char *src)
-{
- wchar_t *dc = dest;
- char *c = src;
- size_t len = 0;
- while (*c) {
- int clen = utf8_char_len(*c);
- if (clen == 1) {
- dc[len] = c[0] & 0x7f;
- } else if (clen == 2) {
- dc[len] = ((c[0] & 0x1f) << 6) | ((c[1] & 0x3f) << 0);
- } else if (clen == 3) {
- dc[len] = ((c[0] & 0x0f) << 12) | ((c[1] & 0x3f) << 6)
- | ((c[2] & 0x3f) << 0);
- } else if (clen == 4) {
- dc[len] = ((c[0] & 0x07) << 18) | ((c[1] & 0x3f) << 12)
- | ((c[2] & 0x3f) << 6) | ((c[3] & 0x3f) << 0);
- } else {
- dc[len] = 0;
- return;
- }
- c += clen;
- ++len;
- }
- dc[len] = 0;
-}