aboutsummaryrefslogtreecommitdiffstats
path: root/libcharconv_latin.c
diff options
context:
space:
mode:
authorMattias Andrée <m@maandree.se>2026-01-24 23:09:46 +0100
committerMattias Andrée <m@maandree.se>2026-01-24 23:09:46 +0100
commitac73d14281056314aa8e1b0d3c6ade0a527aad0a (patch)
tree7e2c78b8322c00aa11a01e8ea27a15dd04106454 /libcharconv_latin.c
parentAdd domino tiles (diff)
downloadcharconv-ac73d14281056314aa8e1b0d3c6ade0a527aad0a.tar.gz
charconv-ac73d14281056314aa8e1b0d3c6ade0a527aad0a.tar.bz2
charconv-ac73d14281056314aa8e1b0d3c6ade0a527aad0a.tar.xz
Add clock faces
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to '')
-rw-r--r--libcharconv_latin.c29
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;
}