#pragma once enum { Runeself = 0x80, Runeerror = 0xfffd, Runemax = 0x10ffff, Runemask = 0x1fffff, UTFmax = 4,}; typedef u32int Rune; int chartorune(Rune *rune, const char *str) sl_nonnull(1, 2) sl_wr(1) sl_cstr(2) sl_rd(2);int runetochar(char *str, const Rune *rune) sl_nonnull(1, 2) sl_wr(1) sl_rd(2);int fullrune(const char *str, int n) sl_purefn sl_nonnull(1) sl_rd(1, 2);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) sl_nonnull(1) sl_rd(1, 2); 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;}; void norminit(Norm*, int, void*, long (*getrune)(void*));long normpull(Norm*, Rune*, long, int);long runecomp(Rune*, long, Rune*, long);long runedecomp(Rune*, long, Rune*, long);long utfcomp(char*, long, char*, long);long utfdecomp(char*, long, char*, long); const Rune *runewbreak(const Rune*) sl_purefn;const char *utfwbreak(const char*) sl_cstr(1);const Rune *runegbreak(const Rune*) sl_purefn;const char *utfgbreak(const char*) sl_cstr(1);
#pragma once
enum {
Runeself = 0x80,
Runeerror = 0xfffd,
Runemax = 0x10ffff,
Runemask = 0x1fffff,
UTFmax = 4,
};
typedef u32int Rune;
int chartorune(Rune *rune, const char *str) sl_nonnull(1, 2) sl_wr(1) sl_cstr(2) sl_rd(2);
int runetochar(char *str, const Rune *rune) sl_nonnull(1, 2) sl_wr(1) sl_rd(2);
int fullrune(const char *str, int n) sl_purefn sl_nonnull(1) sl_rd(1, 2);
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) sl_nonnull(1) sl_rd(1, 2);
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;
};
void norminit(Norm*, int, void*, long (*getrune)(void*));
long normpull(Norm*, Rune*, long, int);
long runecomp(Rune*, long, Rune*, long);
long runedecomp(Rune*, long, Rune*, long);
long utfcomp(char*, long, char*, long);
long utfdecomp(char*, long, char*, long);
const Rune *runewbreak(const Rune*) sl_purefn;
const char *utfwbreak(const char*) sl_cstr(1);
const Rune *runegbreak(const Rune*) sl_purefn;
const char *utfgbreak(const char*) sl_cstr(1);