diff options
| author | Mattias Andrée <m@maandree.se> | 2026-01-25 16:05:05 +0100 |
|---|---|---|
| committer | Mattias Andrée <m@maandree.se> | 2026-01-25 16:05:05 +0100 |
| commit | a0cd51f0e62cef118c17cfc308ff2a67bef49338 (patch) | |
| tree | 3e9f0debf88f4398417e79abc7fc31a45ef5922f /libcharconv_mirrored.c | |
| parent | Add mirrored (diff) | |
| download | charconv-a0cd51f0e62cef118c17cfc308ff2a67bef49338.tar.gz charconv-a0cd51f0e62cef118c17cfc308ff2a67bef49338.tar.bz2 charconv-a0cd51f0e62cef118c17cfc308ff2a67bef49338.tar.xz | |
Add turned
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to 'libcharconv_mirrored.c')
| -rw-r--r-- | libcharconv_mirrored.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/libcharconv_mirrored.c b/libcharconv_mirrored.c index a95f636..75ae5cb 100644 --- a/libcharconv_mirrored.c +++ b/libcharconv_mirrored.c @@ -35,14 +35,21 @@ libcharconv_mirrored(const char *s, size_t slen, size_t *n, uint_least32_t *cp, continue; } - for (i = 0u; i < sizeof(pairs) / sizeof(*pairs); i++) { - if (c == pairs[i].a) { - c = pairs[i].b; - goto conv; - } - if (c == pairs[i].b) { - c = pairs[i].a; - goto conv; + if (UINT32_C(0x1F031) <= c && c <= UINT32_C(0x1F061)) { + c -= UINT32_C(0x1F031); + c = c % 7u * 7u + c / 7u; + c += UINT32_C(0x1F031); + goto conv; + } else { + for (i = 0u; i < sizeof(pairs) / sizeof(*pairs); i++) { + if (c == pairs[i].a) { + c = pairs[i].b; + goto conv; + } + if (c == pairs[i].b) { + c = pairs[i].a; + goto conv; + } } } |
