master xplshn/aruu / shared / utf.h
 1/* MIT/X Consortium Copyright (c) 2012 Connor Lane Smith <cls@lubutu.com>
 2 *
 3 * Permission is hereby granted, free of charge, to any person obtaining a
 4 * copy of this software and associated documentation files (the "Software"),
 5 * to deal in the Software without restriction, including without limitation
 6 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 7 * and/or sell copies of the Software, and to permit persons to whom the
 8 * Software is furnished to do so, subject to the following conditions:
 9 *
10 * The above copyright notice and this permission notice shall be included in
11 * all copies or substantial portions of the Software.
12 *
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
16 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
19 * DEALINGS IN THE SOFTWARE.
20 */
21#include <stdio.h>
22
23typedef int Rune;
24
25enum {
26	UTFmax    = 6,       /* maximum bytes per rune */
27	Runeself  = 0x80,    /* rune and utf are equal (<) */
28	Runeerror = 0xFFFD,  /* decoding error in utf */
29	Runemax   = 0x10FFFF /* maximum rune value */
30};
31
32int runetochar(char *, const Rune *);
33int chartorune(Rune *, const char *);
34int charntorune(Rune *, const char *, size_t);
35int runelen(Rune);
36size_t runenlen(const Rune *, size_t);
37int fullrune(const char *, size_t);
38char *utfecpy(char *, char *, const char *);
39size_t utflen(const char *);
40size_t utfnlen(const char *, size_t);
41size_t utfmemlen(const char *, size_t);
42char *utfrune(const char *, Rune);
43char *utfrrune(const char *, Rune);
44char *utfutf(const char *, const char *);
45
46int isalnumrune(Rune);
47int isalpharune(Rune);
48int isblankrune(Rune);
49int iscntrlrune(Rune);
50int isdigitrune(Rune);
51int isgraphrune(Rune);
52int islowerrune(Rune);
53int isprintrune(Rune);
54int ispunctrune(Rune);
55int isspacerune(Rune);
56int istitlerune(Rune);
57int isupperrune(Rune);
58int isxdigitrune(Rune);
59
60Rune tolowerrune(Rune);
61Rune toupperrune(Rune);
62
63size_t utftorunestr(const char *, Rune *);
64size_t utfntorunestr(const char *, size_t, Rune *);
65
66int fgetrune(Rune *, FILE *);
67int efgetrune(Rune *, FILE *, const char *);
68int fputrune(const Rune *, FILE *);
69int efputrune(const Rune *, FILE *, const char *);