#pragma once enum { Runeself = 0x80, Runeerror = 0xfffd, Runemax = 0x10ffff, Runemask = 0x1fffff, UTFmax = 4,}; typedef u32int Rune; int chartorune(Rune *rune, const char *str);int runetochar(char *str, const Rune *rune);int runenlen(const Rune *r, int nrune) sl_purefn;int fullrune(const char *str, int n) sl_purefn;int runelen(Rune c) sl_constfn;Rune tolowerrune(Rune c) sl_constfn;Rune toupperrune(Rune c) sl_constfn;Rune totitlerune(Rune c) sl_constfn;int islowerrune(Rune c) sl_constfn;int isupperrune(Rune c) sl_constfn;int isalpharune(Rune c) sl_constfn;int istitlerune(Rune c) sl_constfn;int isspacerune(Rune c) sl_constfn;int isdigitrune(Rune c) sl_constfn; int utfnlen(const char *s, long m); enum { Maxnormctx = 1+30 };typedef struct Norm Norm;struct Norm { long (*getrune)(void*); void *ctx; struct { Rune *e; Rune a[Maxnormctx]; } ibuf, obuf; int compose;};extern void norminit(Norm*, int, void*, long (*getrune)(void*));extern long normpull(Norm*, Rune*, long, int);extern long runecomp(Rune*, long, Rune*, long);extern long runedecomp(Rune*, long, Rune*, long);extern long utfcomp(char*, long, char*, long);extern long utfdecomp(char*, long, char*, long); extern const Rune* runewbreak(const Rune*) sl_purefn;extern const char* utfwbreak(const char*);extern const Rune* runegbreak(const Rune*) sl_purefn;extern const char* utfgbreak(const char*);
#pragma once
enum {
Runeself = 0x80,
Runeerror = 0xfffd,
Runemax = 0x10ffff,
Runemask = 0x1fffff,
UTFmax = 4,
};
typedef u32int Rune;
int chartorune(Rune *rune, const char *str);
int runetochar(char *str, const Rune *rune);
int runenlen(const Rune *r, int nrune) sl_purefn;
int fullrune(const char *str, int n) sl_purefn;
int runelen(Rune c) sl_constfn;
Rune tolowerrune(Rune c) sl_constfn;
Rune toupperrune(Rune c) sl_constfn;
Rune totitlerune(Rune c) sl_constfn;
int islowerrune(Rune c) sl_constfn;
int isupperrune(Rune c) sl_constfn;
int isalpharune(Rune c) sl_constfn;
int istitlerune(Rune c) sl_constfn;
int isspacerune(Rune c) sl_constfn;
int isdigitrune(Rune c) sl_constfn;
int utfnlen(const char *s, long m);
enum { Maxnormctx = 1+30 };
typedef struct Norm Norm;
struct Norm {
long (*getrune)(void*);
void *ctx;
struct {
Rune *e;
Rune a[Maxnormctx];
} ibuf, obuf;
int compose;
};
extern void norminit(Norm*, int, void*, long (*getrune)(void*));
extern long normpull(Norm*, Rune*, long, int);
extern long runecomp(Rune*, long, Rune*, long);
extern long runedecomp(Rune*, long, Rune*, long);
extern long utfcomp(char*, long, char*, long);
extern long utfdecomp(char*, long, char*, long);
extern const Rune* runewbreak(const Rune*) sl_purefn;
extern const char* utfwbreak(const char*);
extern const Rune* runegbreak(const Rune*) sl_purefn;
extern const char* utfgbreak(const char*);