aboutsummaryrefslogtreecommitdiffstats
path: root/libcharconv_latin.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcharconv_latin.c')
-rw-r--r--libcharconv_latin.c29
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 */