diff options
Diffstat (limited to 'libcharconv_flipped.c')
| -rw-r--r-- | libcharconv_flipped.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/libcharconv_flipped.c b/libcharconv_flipped.c index 43893fc..952d7e6 100644 --- a/libcharconv_flipped.c +++ b/libcharconv_flipped.c @@ -30,14 +30,21 @@ libcharconv_flipped(const char *s, size_t slen, size_t *n, uint_least32_t *cp, s 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(0x1F063) <= c && c <= UINT32_C(0x1F093)) { + c -= UINT32_C(0x1F063); + c = c % 7u * 7u + c / 7u; + c += UINT32_C(0x1F063); + 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; + } } } |
