2#include "nuklear_internal.h"
9NK_GLOBAL
const nk_byte nk_utfbyte[
NK_UTF_SIZE+1] = {0x80, 0, 0xC0, 0xE0, 0xF0};
10NK_GLOBAL
const nk_byte nk_utfmask[
NK_UTF_SIZE+1] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8};
11NK_GLOBAL
const nk_uint nk_utfmin[
NK_UTF_SIZE+1] = {0, 0, 0x80, 0x800, 0x10000};
12NK_GLOBAL
const nk_uint nk_utfmax[
NK_UTF_SIZE+1] = {0x10FFFF, 0x7F, 0x7FF, 0xFFFF, 0x10FFFF};
15nk_utf_validate(nk_rune *u,
int i)
19 if (!NK_BETWEEN(*u, nk_utfmin[i], nk_utfmax[i]) ||
20 NK_BETWEEN(*u, 0xD800, 0xDFFF))
22 for (i = 1; *u > nk_utfmax[i]; ++i);
26nk_utf_decode_byte(
char c,
int *i)
30 for(*i = 0; *i < (int)NK_LEN(nk_utfmask); ++(*i)) {
31 if (((nk_byte)c & nk_utfmask[*i]) == nk_utfbyte[*i])
32 return (nk_byte)(c & ~nk_utfmask[*i]);
37nk_utf_decode(
const char *c, nk_rune *u,
int clen)
39 int i, j, len, type=0;
45 if (!c || !u)
return 0;
49 udecoded = nk_utf_decode_byte(c[0], &len);
53 for (i = 1, j = 1; i < clen && j < len; ++i, ++j) {
54 udecoded = (udecoded << 6) | nk_utf_decode_byte(c[i], &type);
61 nk_utf_validate(u, len);
65nk_utf_encode_byte(nk_rune u,
int i)
67 return (
char)((nk_utfbyte[i]) | ((nk_byte)u & ~nk_utfmask[i]));
70nk_utf_encode(nk_rune u,
char *c,
int clen)
73 len = nk_utf_validate(&u, 0);
77 for (i = len - 1; i != 0; --i) {
78 c[i] = nk_utf_encode_byte(u, 0);
81 c[0] = nk_utf_encode_byte(u, len);
85nk_utf_len(
const char *str,
int len)
95 if (!str || !len)
return 0;
99 glyph_len = nk_utf_decode(text, &unicode, text_len);
100 while (glyph_len && src_len < len) {
102 src_len = src_len + glyph_len;
103 glyph_len = nk_utf_decode(text + src_len, &unicode, text_len - src_len);
108nk_utf_at(
const char *buffer,
int length,
int index,
109 nk_rune *unicode,
int *len)
121 if (!buffer || !unicode || !len)
return 0;
130 glyph_len = nk_utf_decode(text, unicode, text_len);
138 src_len = src_len + glyph_len;
139 glyph_len = nk_utf_decode(text + src_len, unicode, text_len - src_len);
141 if (i != index)
return 0;
142 return buffer + src_len;
main API and documentation file
#define NK_UTF_INVALID
internal invalid utf8 rune
#define NK_UTF_SIZE
describes the number of bytes a glyph consists of