18ccd4a63SDavid du Colombier #ifndef _UTFH_ 28ccd4a63SDavid du Colombier #define _UTFH_ 1 38ccd4a63SDavid du Colombier 4*a1216cc6SDavid du Colombier typedef unsigned int Rune; /* 32 bits */ 58ccd4a63SDavid du Colombier 68ccd4a63SDavid du Colombier enum 78ccd4a63SDavid du Colombier { 8*a1216cc6SDavid du Colombier UTFmax = 4, /* maximum bytes per rune */ 98ccd4a63SDavid du Colombier Runesync = 0x80, /* cannot represent part of a UTF sequence (<) */ 108ccd4a63SDavid du Colombier Runeself = 0x80, /* rune and UTF sequences are the same (<) */ 11*a1216cc6SDavid du Colombier Runeerror = 0xFFFD, /* decoding error in UTF */ 12*a1216cc6SDavid du Colombier Runemax = 0x10FFFF, /* 21-bit rune */ 13*a1216cc6SDavid du Colombier Runemask = 0x1FFFFF, /* bits used by runes (see grep) */ 148ccd4a63SDavid du Colombier }; 158ccd4a63SDavid du Colombier 168ccd4a63SDavid du Colombier /* 178ccd4a63SDavid du Colombier * rune routines 188ccd4a63SDavid du Colombier */ 198ccd4a63SDavid du Colombier extern int runetochar(char*, Rune*); 208ccd4a63SDavid du Colombier extern int chartorune(Rune*, char*); 218ccd4a63SDavid du Colombier extern int runelen(long); 228ccd4a63SDavid du Colombier extern int runenlen(Rune*, int); 238ccd4a63SDavid du Colombier extern int fullrune(char*, int); 248ccd4a63SDavid du Colombier extern int utflen(char*); 258ccd4a63SDavid du Colombier extern int utfnlen(char*, long); 268ccd4a63SDavid du Colombier extern char* utfrune(char*, long); 278ccd4a63SDavid du Colombier extern char* utfrrune(char*, long); 288ccd4a63SDavid du Colombier extern char* utfutf(char*, char*); 298ccd4a63SDavid du Colombier extern char* utfecpy(char*, char*, char*); 308ccd4a63SDavid du Colombier 318ccd4a63SDavid du Colombier extern Rune* runestrcat(Rune*, Rune*); 328ccd4a63SDavid du Colombier extern Rune* runestrchr(Rune*, Rune); 338ccd4a63SDavid du Colombier extern int runestrcmp(Rune*, Rune*); 348ccd4a63SDavid du Colombier extern Rune* runestrcpy(Rune*, Rune*); 358ccd4a63SDavid du Colombier extern Rune* runestrncpy(Rune*, Rune*, long); 368ccd4a63SDavid du Colombier extern Rune* runestrecpy(Rune*, Rune*, Rune*); 378ccd4a63SDavid du Colombier extern Rune* runestrdup(Rune*); 388ccd4a63SDavid du Colombier extern Rune* runestrncat(Rune*, Rune*, long); 398ccd4a63SDavid du Colombier extern int runestrncmp(Rune*, Rune*, long); 408ccd4a63SDavid du Colombier extern Rune* runestrrchr(Rune*, Rune); 418ccd4a63SDavid du Colombier extern long runestrlen(Rune*); 428ccd4a63SDavid du Colombier extern Rune* runestrstr(Rune*, Rune*); 438ccd4a63SDavid du Colombier 448ccd4a63SDavid du Colombier extern Rune tolowerrune(Rune); 458ccd4a63SDavid du Colombier extern Rune totitlerune(Rune); 468ccd4a63SDavid du Colombier extern Rune toupperrune(Rune); 478ccd4a63SDavid du Colombier extern int isalpharune(Rune); 488ccd4a63SDavid du Colombier extern int islowerrune(Rune); 498ccd4a63SDavid du Colombier extern int isspacerune(Rune); 508ccd4a63SDavid du Colombier extern int istitlerune(Rune); 518ccd4a63SDavid du Colombier extern int isupperrune(Rune); 528ccd4a63SDavid du Colombier 538ccd4a63SDavid du Colombier #endif 54