1*ccdc9c3eSSadaf Ebrahimi /* 2*ccdc9c3eSSadaf Ebrahimi * The authors of this software are Rob Pike and Ken Thompson. 3*ccdc9c3eSSadaf Ebrahimi * Copyright (c) 2002 by Lucent Technologies. 4*ccdc9c3eSSadaf Ebrahimi * Permission to use, copy, modify, and distribute this software for any 5*ccdc9c3eSSadaf Ebrahimi * purpose without fee is hereby granted, provided that this entire notice 6*ccdc9c3eSSadaf Ebrahimi * is included in all copies of any software which is or includes a copy 7*ccdc9c3eSSadaf Ebrahimi * or modification of this software and in all copies of the supporting 8*ccdc9c3eSSadaf Ebrahimi * documentation for such software. 9*ccdc9c3eSSadaf Ebrahimi * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED 10*ccdc9c3eSSadaf Ebrahimi * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY 11*ccdc9c3eSSadaf Ebrahimi * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY 12*ccdc9c3eSSadaf Ebrahimi * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. 13*ccdc9c3eSSadaf Ebrahimi * 14*ccdc9c3eSSadaf Ebrahimi * This file and rune.cc have been converted to compile as C++ code 15*ccdc9c3eSSadaf Ebrahimi * in name space re2. 16*ccdc9c3eSSadaf Ebrahimi */ 17*ccdc9c3eSSadaf Ebrahimi 18*ccdc9c3eSSadaf Ebrahimi #ifndef UTIL_UTF_H_ 19*ccdc9c3eSSadaf Ebrahimi #define UTIL_UTF_H_ 20*ccdc9c3eSSadaf Ebrahimi 21*ccdc9c3eSSadaf Ebrahimi #include <stdint.h> 22*ccdc9c3eSSadaf Ebrahimi 23*ccdc9c3eSSadaf Ebrahimi namespace re2 { 24*ccdc9c3eSSadaf Ebrahimi 25*ccdc9c3eSSadaf Ebrahimi typedef signed int Rune; /* Code-point values in Unicode 4.0 are 21 bits wide.*/ 26*ccdc9c3eSSadaf Ebrahimi 27*ccdc9c3eSSadaf Ebrahimi enum 28*ccdc9c3eSSadaf Ebrahimi { 29*ccdc9c3eSSadaf Ebrahimi UTFmax = 4, /* maximum bytes per rune */ 30*ccdc9c3eSSadaf Ebrahimi Runesync = 0x80, /* cannot represent part of a UTF sequence (<) */ 31*ccdc9c3eSSadaf Ebrahimi Runeself = 0x80, /* rune and UTF sequences are the same (<) */ 32*ccdc9c3eSSadaf Ebrahimi Runeerror = 0xFFFD, /* decoding error in UTF */ 33*ccdc9c3eSSadaf Ebrahimi Runemax = 0x10FFFF, /* maximum rune value */ 34*ccdc9c3eSSadaf Ebrahimi }; 35*ccdc9c3eSSadaf Ebrahimi 36*ccdc9c3eSSadaf Ebrahimi int runetochar(char* s, const Rune* r); 37*ccdc9c3eSSadaf Ebrahimi int chartorune(Rune* r, const char* s); 38*ccdc9c3eSSadaf Ebrahimi int fullrune(const char* s, int n); 39*ccdc9c3eSSadaf Ebrahimi int utflen(const char* s); 40*ccdc9c3eSSadaf Ebrahimi char* utfrune(const char*, Rune); 41*ccdc9c3eSSadaf Ebrahimi 42*ccdc9c3eSSadaf Ebrahimi } // namespace re2 43*ccdc9c3eSSadaf Ebrahimi 44*ccdc9c3eSSadaf Ebrahimi #endif // UTIL_UTF_H_ 45