diff options
| author | Mattias Andrée <m@maandree.se> | 2026-01-24 21:10:12 +0100 |
|---|---|---|
| committer | Mattias Andrée <m@maandree.se> | 2026-01-24 21:10:12 +0100 |
| commit | 80350b43c77a7835546a8c29e0d93eeb3cddfadd (patch) | |
| tree | fc9db67a19eb38daacac5b18b409d1008ad81165 /libcharconv_lydian.c | |
| parent | Add README (diff) | |
| download | charconv-80350b43c77a7835546a8c29e0d93eeb3cddfadd.tar.gz charconv-80350b43c77a7835546a8c29e0d93eeb3cddfadd.tar.bz2 charconv-80350b43c77a7835546a8c29e0d93eeb3cddfadd.tar.xz | |
Add superscript and subscript (so far only with digits) and lycian and lydian
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to 'libcharconv_lydian.c')
| -rw-r--r-- | libcharconv_lydian.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/libcharconv_lydian.c b/libcharconv_lydian.c new file mode 100644 index 0000000..a3427fa --- /dev/null +++ b/libcharconv_lydian.c @@ -0,0 +1,62 @@ +/* See LICENSE file for copyright and license details. */ +#include "lib-common.h" + + +static struct { + unsigned char cp_low; + char latin; +} lydian[] = { + {0x20, 'a'}, + {0x21, 'b'}, + {0x39, 'c'}, + {0x23, 'd'}, + {0x24, 'e'}, + {0x31, 'f'}, + {0x22, 'g'}, + {0x26, 'i'}, + {0x28, 'k'}, + {0x29, 'l'}, + {0x2A, 'm'}, + {0x2B, 'n'}, + {0x2C, 'o'}, + {0x32, 'q'}, + {0x2D, 'r'}, + {0x33, 's'}, + {0x2F, 't'}, + {0x30, 'u'}, + {0x25, 'v'}, + {0x27, 'y'}, + {0x35, 'A'}, + {0x36, 'E'}, + {0x37, 'L'}, + {0x38, 'N'}, + {0x2E, 'S'}, + {0x34, 'T'}, + {0x3F, '\"'}, + {0x3F, '\''} +}; + + +enum libcharconv_result +libcharconv_lydian(const char *s, size_t slen, size_t *n, uint_least32_t *cp, size_t *ncp) +{ + size_t i; + *n = 0; + for (; slen--; s++) { + for (i = 0u; i < sizeof(lydian) / sizeof(*lydian); i++) + if (*s == lydian[i].latin) + goto conv; + *n += 1u; + } +no_conv: + return LIBCHARCONV_NO_CONVERT; + +conv: + if (*n) + goto no_conv; + if (*ncp) + *cp = (uint_least32_t)(UINT32_C(0x10900) | lydian[i].cp_low); + *n += 1u; + *ncp = 1u; + return LIBCHARCONV_CONVERTED; +} |
