diff options
Diffstat (limited to '')
| -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; + } } } |
