utf8.c (734B)
1 #define _XOPEN_SOURCE 2 #include <wchar.h> 3 #include <grapheme.h> 4 5 int utf8_len(char *buf, int len); 6 int utf8_decode(char *buf, int len, unsigned int *cp); 7 size_t utf8_len_compat(char *buf, int len); 8 9 size_t 10 utf8_len_compat(char *buf, int len) { 11 int i = 0, step, next; 12 uint_least32_t cp; 13 14 step = utf8_decode(buf, len, &cp); 15 i += step; 16 17 if(cp == 0x200D) return i; 18 while(i < len) { 19 next = utf8_decode(buf + i, len - i, &cp); 20 if(cp == 0x200D) break; 21 if(wcwidth((wchar_t)cp) > 0) break; 22 i += next; 23 } 24 return i; 25 } 26 27 int 28 utf8_len(char *buf, int len) { 29 return grapheme_next_character_break_utf8(buf, len); 30 } 31 32 int 33 utf8_decode(char *buf, int len, unsigned int *cp) { 34 return grapheme_decode_utf8(buf, len, (uint_least32_t *)cp); 35 }