comparison util.c @ 1527:4f6e8acd7b6a nuklear_ui

Added support for TTC and dfont format true type fonts. More robust font selection on Windows
author Michael Pavone <pavone@retrodev.com>
date Tue, 06 Mar 2018 21:27:12 -0800
parents c416ace65ff1
children e94cff9cb625
comparison
equal deleted inserted replaced
1526:9bea1a199f15 1527:4f6e8acd7b6a
200 digit += digit > 9 ? 'a' - 0xa : '0'; 200 digit += digit > 9 ? 'a' - 0xa : '0';
201 *(output++) = digit; 201 *(output++) = digit;
202 size--; 202 size--;
203 } 203 }
204 *(output++) = 0; 204 *(output++) = 0;
205 }
206
207 char *utf16be_to_utf8(uint8_t *buf, uint32_t max_size)
208 {
209 uint8_t *cur = buf;
210 uint32_t converted_size = 0;
211 for (uint32_t i = 0; i < max_size; i++, cur+=2)
212 {
213 uint16_t code = *cur << 16 | cur[1];
214 if (!code) {
215 break;
216 }
217 if (code < 0x80) {
218 converted_size++;
219 } else if (code < 0x800) {
220 converted_size += 2;
221 } else {
222 //TODO: Deal with surrogate pairs
223 converted_size += 3;
224 }
225 }
226 char *out = malloc(converted_size + 1);
227 char *cur_out = out;
228 cur = buf;
229 for (uint32_t i = 0; i < max_size; i++, cur+=2)
230 {
231 uint16_t code = *cur << 16 | cur[1];
232 if (!code) {
233 break;
234 }
235 if (code < 0x80) {
236 *(cur_out++) = code;
237 } else if (code < 0x800) {
238 *(cur_out++) = 0xC0 | code >> 6;
239 *(cur_out++) = 0x80 | (code & 0x3F);
240 } else {
241 //TODO: Deal with surrogate pairs
242 *(cur_out++) = 0xF0 | code >> 12;
243 *(cur_out++) = 0x80 | (code >> 6 & 0x3F);
244 *(cur_out++) = 0x80 | (code & 0x3F);
245 }
246 }
247 *cur_out = 0;
248 return out;
205 } 249 }
206 250
207 char is_path_sep(char c) 251 char is_path_sep(char c)
208 { 252 {
209 #ifdef _WIN32 253 #ifdef _WIN32