diff options
author | Nicholas <nbnoll@eml.cc> | 2021-11-10 20:12:45 -0800 |
---|---|---|
committer | Nicholas <nbnoll@eml.cc> | 2021-11-11 08:16:47 -0800 |
commit | 7ea1cdb7d31f00024f5a1d124b42cd19a03b959a (patch) | |
tree | f65abf9fa32856287de586129d4ed7c1c473864a /include/libutf.h | |
parent | 43688fe7190d0350349d47727c3663421d5618dc (diff) |
chore: libunicode -> libutf
Diffstat (limited to 'include/libutf.h')
-rw-r--r-- | include/libutf.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/include/libutf.h b/include/libutf.h new file mode 100644 index 0000000..25d6dee --- /dev/null +++ b/include/libutf.h @@ -0,0 +1,38 @@ +#pragma once + +typedef uint32 rune; + +#define UTFmax 4 +#define RuneErr 0xFFFDu +#define RuneMax 0x10FFFFu + +#define utf8·onebyte(c) (((c)&0x80u)==0x00u) +#define utf8·twobyte(c) (((c)&0xE0u)==0xC0u) +#define utf8·threebyte(c) (((c)&0xF0u)==0xE0u) +#define utf8·fourbyte(c) (((c)&0xF8u)==0xF0u) + +/* + * UTF-8 functions. + */ +int utf8·len(char *s); // returns number of runes for s +int utf8·runelen(rune r); // returns number of bytes for rune +int utf8·runewidth(rune r); // returns number of printed columns for rune + +int utf8·decode(char *, rune *); // decode 1 rune from char stream, store into rune, return number of bytes +int utf8·encode(rune *, char *); // encode 1 rune from rune stream, store into char, return number of bytes +int utf8·decodeprev(char *s, rune *r); // decode 1 rune from char stream, reading backwards, store into rune, return number of bytes + +char *utf8·find(char *s, rune); // find rune in char stream +char *utf8·findlast(char* s, rune); // find last rune in char stream + +int utf8·canfit(char *, int); // XXX: odd function... + +int utf8·isalpha(rune r); +int utf8·isdigit(rune r); +int utf8·isspace(rune r); +int utf8·istitle(rune r); +int utf8·ispunct(rune r); + +rune utf8·toupper(rune r); +rune utf8·tolower(rune r); +rune utf8·totitle(rune r); |