sbase

suckless unix tools
git clone git://git.suckless.org/sbase
Log | Files | Refs | README | LICENSE

utf.h (2498B)


      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 
     23 typedef int Rune;
     24 
     25 enum {
     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 
     32 int runetochar(char *, const Rune *);
     33 int chartorune(Rune *, const char *);
     34 int charntorune(Rune *, const char *, size_t);
     35 int runelen(Rune);
     36 size_t runenlen(const Rune *, size_t);
     37 int fullrune(const char *, size_t);
     38 char *utfecpy(char *, char *, const char *);
     39 size_t utflen(const char *);
     40 size_t utfnlen(const char *, size_t);
     41 size_t utfmemlen(const char *, size_t);
     42 char *utfrune(const char *, Rune);
     43 char *utfrrune(const char *, Rune);
     44 char *utfutf(const char *, const char *);
     45 
     46 int isalnumrune(Rune);
     47 int isalpharune(Rune);
     48 int isblankrune(Rune);
     49 int iscntrlrune(Rune);
     50 int isdigitrune(Rune);
     51 int isgraphrune(Rune);
     52 int islowerrune(Rune);
     53 int isprintrune(Rune);
     54 int ispunctrune(Rune);
     55 int isspacerune(Rune);
     56 int istitlerune(Rune);
     57 int isupperrune(Rune);
     58 int isxdigitrune(Rune);
     59 
     60 Rune tolowerrune(Rune);
     61 Rune toupperrune(Rune);
     62 
     63 size_t utftorunestr(const char *, Rune *);
     64 size_t utfntorunestr(const char *, size_t, Rune *);
     65 
     66 int fgetrune(Rune *, FILE *);
     67 int efgetrune(Rune *, FILE *, const char *);
     68 int fputrune(const Rune *, FILE *);
     69 int efputrune(const Rune *, FILE *, const char *);