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 77ab4c9..7c70318 100644 --- a/libcharconv_latin.c +++ b/libcharconv_latin.c @@ -7,7 +7,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; + char c1, c2, c3, c4, c5; size_t clen; unsigned num; @@ -340,6 +340,16 @@ libcharconv_latin(const char *s, size_t slen, size_t *n, uint_least32_t *cp, siz c2 = '-'; goto conv3; + } else if (UINT32_C(0x1F550) <= c && c <= UINT32_C(0x1F567)) { + /* clock faces */ + c -= UINT32_C(0x1F550); + c1 = (char)((c + 1u) % 12u / 10u + (uint_least32_t)'0'); + c2 = (char)((c + 1u) % 12u % 10u + (uint_least32_t)'0'); + c3 = ':'; + c4 = c < 12u ? '0' : '3'; + c5 = '0'; + goto conv5; + } else { switch (c) { /* shogi */ @@ -538,4 +548,21 @@ conv4: cp[3] = (uint_least32_t)c4; *ncp = 4u; return ret; + +conv5: + if (*n) + goto no_conv; + *n += clen; + if (*ncp >= 1u) + cp[0] = (uint_least32_t)c1; + if (*ncp >= 2u) + cp[1] = (uint_least32_t)c2; + if (*ncp >= 3u) + cp[2] = (uint_least32_t)c3; + if (*ncp >= 4u) + cp[3] = (uint_least32_t)c4; + if (*ncp >= 5u) + cp[4] = (uint_least32_t)c5; + *ncp = 5u; + return ret; } |
