aboutsummaryrefslogtreecommitdiffstats
path: root/libcharconv_mirrored.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--libcharconv_mirrored.c23
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;
+ }
}
}