140ef9009SDavid du Colombier #ifndef _UTF_H_ 240ef9009SDavid du Colombier #define _UTF_H_ 1 340ef9009SDavid du Colombier #pragma lib "/$M/lib/ape/libutf.a" 440ef9009SDavid du Colombier #pragma src "/sys/src/ape/lib/utf" 540ef9009SDavid du Colombier 640ef9009SDavid du Colombier #if defined(__cplusplus) 740ef9009SDavid du Colombier extern "C" { 840ef9009SDavid du Colombier #endif 940ef9009SDavid du Colombier 10*e94a8e9bSDavid du Colombier typedef unsigned int Rune; /* 32 bits */ 1140ef9009SDavid du Colombier 1240ef9009SDavid du Colombier enum 1340ef9009SDavid du Colombier { 14*e94a8e9bSDavid du Colombier UTFmax = 4, /* maximum bytes per rune */ 1540ef9009SDavid du Colombier Runesync = 0x80, /* cannot represent part of a UTF sequence (<) */ 1640ef9009SDavid du Colombier Runeself = 0x80, /* rune and UTF sequences are the same (<) */ 17*e94a8e9bSDavid du Colombier Runeerror = 0xFFFD, /* decoding error in UTF */ 18*e94a8e9bSDavid du Colombier Runemax = 0x10FFFF, /* 21-bit rune */ 1940ef9009SDavid du Colombier }; 2040ef9009SDavid du Colombier 2140ef9009SDavid du Colombier /* 2240ef9009SDavid du Colombier * rune routines 2340ef9009SDavid du Colombier */ 2440ef9009SDavid du Colombier extern int runetochar(char*, Rune*); 2540ef9009SDavid du Colombier extern int chartorune(Rune*, char*); 2640ef9009SDavid du Colombier extern int runelen(long); 2740ef9009SDavid du Colombier extern int runenlen(Rune*, int); 2840ef9009SDavid du Colombier extern int fullrune(char*, int); 2940ef9009SDavid du Colombier extern int utflen(char*); 3040ef9009SDavid du Colombier extern int utfnlen(char*, long); 3140ef9009SDavid du Colombier extern char* utfrune(char*, long); 3240ef9009SDavid du Colombier extern char* utfrrune(char*, long); 3340ef9009SDavid du Colombier extern char* utfutf(char*, char*); 3440ef9009SDavid du Colombier extern char* utfecpy(char*, char*, char*); 3540ef9009SDavid du Colombier 3640ef9009SDavid du Colombier extern Rune* runestrcat(Rune*, Rune*); 3740ef9009SDavid du Colombier extern Rune* runestrchr(Rune*, Rune); 3840ef9009SDavid du Colombier extern int runestrcmp(Rune*, Rune*); 3940ef9009SDavid du Colombier extern Rune* runestrcpy(Rune*, Rune*); 4040ef9009SDavid du Colombier extern Rune* runestrncpy(Rune*, Rune*, long); 4140ef9009SDavid du Colombier extern Rune* runestrecpy(Rune*, Rune*, Rune*); 4240ef9009SDavid du Colombier extern Rune* runestrdup(Rune*); 4340ef9009SDavid du Colombier extern Rune* runestrncat(Rune*, Rune*, long); 4440ef9009SDavid du Colombier extern int runestrncmp(Rune*, Rune*, long); 4540ef9009SDavid du Colombier extern Rune* runestrrchr(Rune*, Rune); 4640ef9009SDavid du Colombier extern long runestrlen(Rune*); 4740ef9009SDavid du Colombier extern Rune* runestrstr(Rune*, Rune*); 4840ef9009SDavid du Colombier 4940ef9009SDavid du Colombier extern Rune tolowerrune(Rune); 5040ef9009SDavid du Colombier extern Rune totitlerune(Rune); 5140ef9009SDavid du Colombier extern Rune toupperrune(Rune); 5240ef9009SDavid du Colombier extern int isalpharune(Rune); 5340ef9009SDavid du Colombier extern int islowerrune(Rune); 5440ef9009SDavid du Colombier extern int isspacerune(Rune); 5540ef9009SDavid du Colombier extern int istitlerune(Rune); 5640ef9009SDavid du Colombier extern int isupperrune(Rune); 5740ef9009SDavid du Colombier 5840ef9009SDavid du Colombier #if defined(__cplusplus) 5940ef9009SDavid du Colombier } 6040ef9009SDavid du Colombier #endif 6140ef9009SDavid du Colombier #endif 62