diff options
Diffstat (limited to 'libcharconv_latin.c')
| -rw-r--r-- | libcharconv_latin.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/libcharconv_latin.c b/libcharconv_latin.c index de5b618..5124c53 100644 --- a/libcharconv_latin.c +++ b/libcharconv_latin.c @@ -8,7 +8,7 @@ libcharconv_latin(const char *s, size_t slen, size_t *n, uint_least32_t *cp, siz enum libcharconv_result ret = LIBCHARCONV_CONVERTED; uint_least32_t c; char c1, c2, c3, c4, c5; - size_t clen; + size_t i, clen; unsigned num; *n = 0; @@ -355,6 +355,33 @@ libcharconv_latin(const char *s, size_t slen, size_t *n, uint_least32_t *cp, siz c = (uint_least32_t)"SdYAIXC/P_\\"[c - UINT32_C(0x2440)]; goto conv; + } else if (UINT32_C(0x2800) <= c && c <= UINT32_C(0x28FF)) { + /* braille */ + if (*n) + goto no_conv; + *n += clen; + i = 0u; + if ((c & 0x01u) && *ncp > i) + cp[i++] = '1'; + if ((c & 0x02u) && *ncp > i) + cp[i++] = '2'; + if ((c & 0x04u) && *ncp > i) + cp[i++] = '3'; + if ((c & 0x08u) && *ncp > i) + cp[i++] = '4'; + if ((c & 0x10u) && *ncp > i) + cp[i++] = '5'; + if ((c & 0x20u) && *ncp > i) + cp[i++] = '6'; + if ((c & 0x40u) && *ncp > i) + cp[i++] = '7'; + if ((c & 0x80u) && *ncp > i) + cp[i++] = '8'; + if (*ncp > i) + cp[i++] = '0'; + *ncp = i; + return ret; + } else { switch (c) { /* shogi */ |
