diff options
| author | Mattias Andrée <m@maandree.se> | 2026-01-26 17:57:59 +0100 |
|---|---|---|
| committer | Mattias Andrée <m@maandree.se> | 2026-01-26 17:57:59 +0100 |
| commit | b48e74772cc4e6879a6d37a5c00ad6df2db1edc3 (patch) | |
| tree | 4d1497bc28ff8ef8f2c4102195326dfe76b2622d /libcharconv_negative.c | |
| parent | Add flipping and turning for yijing n-grams, and add invisible (diff) | |
| download | charconv-b48e74772cc4e6879a6d37a5c00ad6df2db1edc3.tar.gz charconv-b48e74772cc4e6879a6d37a5c00ad6df2db1edc3.tar.bz2 charconv-b48e74772cc4e6879a6d37a5c00ad6df2db1edc3.tar.xz | |
Add enclosed
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to 'libcharconv_negative.c')
| -rw-r--r-- | libcharconv_negative.c | 85 |
1 files changed, 38 insertions, 47 deletions
diff --git a/libcharconv_negative.c b/libcharconv_negative.c index 3bbbccb..92470c8 100644 --- a/libcharconv_negative.c +++ b/libcharconv_negative.c @@ -23,7 +23,26 @@ static struct { {UINT32_C(0x1FA30), UINT32_C(0x1FA31)}, {UINT32_C(0x1FA45), UINT32_C(0x1FA46)}, {UINT32_C(0x1FA48), UINT32_C(0x1FA49)}, - {UINT32_C(0x1FA4B), UINT32_C(0x1FA4C)} + {UINT32_C(0x1FA4B), UINT32_C(0x1FA4C)}, + {UINT32_C(0x24EA), UINT32_C(0x24FF)}, + {UINT32_C(0x1F10B), UINT32_C(0x1F10C)} +}; + + +static struct { + struct {uint_least32_t low, high;} low, high; +} range_pairs[] = { + {{UINT32_C(0x2654), UINT32_C(0x2659)}, {UINT32_C(0x265A), UINT32_C(0x265F)}}, + {{UINT32_C(0x1FA60), UINT32_C(0x1FA66)}, {UINT32_C(0x1FA67), UINT32_C(0x1FA6D)}}, + {{UINT32_C(0x1FA09), UINT32_C(0x1FA0E)}, {UINT32_C(0x1FA0F), UINT32_C(0x1FA14)}}, + {{UINT32_C(0x1FA1E), UINT32_C(0x1FA23)}, {UINT32_C(0x1FA24), UINT32_C(0x1FA29)}}, + {{UINT32_C(0x1FA33), UINT32_C(0x1FA38)}, {UINT32_C(0x1FA39), UINT32_C(0x1FA3E)}}, + {{UINT32_C(0x1FA4E), UINT32_C(0x1FA50)}, {UINT32_C(0x1FA51), UINT32_C(0x1FA53)}}, + {{UINT32_C(0x2460), UINT32_C(0x2469)}, {UINT32_C(0x2776), UINT32_C(0x277F)}}, + {{UINT32_C(0x246A), UINT32_C(0x2473)}, {UINT32_C(0x24EB), UINT32_C(0x24F4)}}, + {{UINT32_C(0x24B6), UINT32_C(0x24CF)}, {UINT32_C(0x1F150), UINT32_C(0x1F169)}}, + {{UINT32_C(0x1F130), UINT32_C(0x1F149)}, {UINT32_C(0x1F170), UINT32_C(0x1F189)}}, + {{UINT32_C(0x2780), UINT32_C(0x2789)}, {UINT32_C(0x278A), UINT32_C(0x2793)}} }; @@ -47,52 +66,24 @@ libcharconv_negative(const char *s, size_t slen, size_t *n, uint_least32_t *cp, continue; } - if (UINT32_C(0x2654) <= c && c <= UINT32_C(0x2659)) { - c += 6u; - goto conv; - } else if (UINT32_C(0x265A) <= c && c <= UINT32_C(0x265F)) { - c -= 6u; - goto conv; - } else if (UINT32_C(0x1FA60) <= c && c <= UINT32_C(0x1FA66)) { - c += 7u; - goto conv; - } else if (UINT32_C(0x1FA67) <= c && c <= UINT32_C(0x1FA6D)) { - c -= 7u; - goto conv; - } else if (UINT32_C(0x1FA09) <= c && c <= UINT32_C(0x1FA0E)) { - c += UINT32_C(0x1FA0F) - UINT32_C(0x1FA09); - goto conv; - } else if (UINT32_C(0x1FA0F) <= c && c <= UINT32_C(0x1FA14)) { - c -= UINT32_C(0x1FA0F) - UINT32_C(0x1FA09); - goto conv; - } else if (UINT32_C(0x1FA1E) <= c && c <= UINT32_C(0x1FA23)) { - c += UINT32_C(0x1FA24) - UINT32_C(0x1FA1E); - goto conv; - } else if (UINT32_C(0x1FA24) <= c && c <= UINT32_C(0x1FA29)) { - c -= UINT32_C(0x1FA24) - UINT32_C(0x1FA1E); - goto conv; - } else if (UINT32_C(0x1FA33) <= c && c <= UINT32_C(0x1FA38)) { - c += UINT32_C(0x1FA39) - UINT32_C(0x1FA33); - goto conv; - } else if (UINT32_C(0x1FA39) <= c && c <= UINT32_C(0x1FA3E)) { - c -= UINT32_C(0x1FA39) - UINT32_C(0x1FA33); - goto conv; - } else if (UINT32_C(0x1FA4E) <= c && c <= UINT32_C(0x1FA50)) { - c += UINT32_C(0x1FA51) - UINT32_C(0x1FA4E); - goto conv; - } else if (UINT32_C(0x1FA51) <= c && c <= UINT32_C(0x1FA53)) { - c -= UINT32_C(0x1FA51) - UINT32_C(0x1FA4E); - 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; - } + for (i = 0u; i < sizeof(range_pairs) / sizeof(*range_pairs); i++) { + if (range_pairs[i].low.low <= c && c <= range_pairs[i].low.high) { + c += range_pairs[i].high.low - range_pairs[i].low.low; + goto conv; + } + if (range_pairs[i].high.low <= c && c <= range_pairs[i].high.high) { + c -= range_pairs[i].high.low - range_pairs[i].low.low; + goto conv; + } + } + 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; } } |
