summaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2018-04-24 20:31:18 -0700
committerMichael Pavone <pavone@retrodev.com>2018-04-24 20:31:18 -0700
commit77f5ca7e3eac55689c332dab1e329f6e55a0232d (patch)
tree243a7528fd472faa54c14ae0eaf26f7387cefeec /util.c
parent25819803cde3a2960d938af9803f09f5d8a4941f (diff)
Scale UI font size based on window size and start basing widget sizes based on font size
Diffstat (limited to 'util.c')
-rw-r--r--util.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/util.c b/util.c
index 975932a..03f1007 100644
--- a/util.c
+++ b/util.c
@@ -248,6 +248,41 @@ char *utf16be_to_utf8(uint8_t *buf, uint32_t max_size)
return out;
}
+int utf8_codepoint(const char **text)
+{
+ uint8_t initial = **text;
+ (*text)++;
+ if (initial < 0x80) {
+ return initial;
+ }
+ int base;
+ uint8_t extended_bytes;
+ if ((initial & 0xE0) == 0xC0) {
+ base = 0x80;
+ initial &= 0x1F;
+ extended_bytes = 1;
+ } else if ((initial & 0xF0) == 0xE0) {
+ base = 0x800;
+ initial &= 0xF;
+ extended_bytes = 2;
+ } else if ((initial & 0xF8) == 0xF0) {
+ base = 0x10000;
+ initial &= 0x7;
+ extended_bytes = 3;
+ }
+ int value = initial;
+ for (uint8_t i = 0; i < extended_bytes; i++)
+ {
+ if ((**text & 0xC0) != 0x80) {
+ return -1;
+ }
+ value = value << 6;
+ value |= (**text) & 0x3F;
+ (*text)++;
+ }
+ return value + base;
+}
+
char is_path_sep(char c)
{
#ifdef _WIN32