edo

Experimental text editor.
Log | Files | Refs | LICENSE

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 }