xref: /plan9/sys/include/ape/utf.h (revision e94a8e9b44de11e62dfd4566245554f8bf8e0295)
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