1 /* $MirOS: src/lib/libc/include/mir18n.h,v 1.18 2008/11/30 13:08:49 tg Exp $ */ 2 3 #ifndef _LIBC_MIR18N_H 4 #define _LIBC_MIR18N_H 5 6 #if !defined(WCHAR_MAX) 7 #error Include <wchar.h> first 8 #elif WCHAR_MAX != 0xFFFD 9 #error This code assumes that wchar_t is UCS-2HE 10 #endif 11 12 #ifdef mir18n_attributes 13 /* from Bruno Haible's libutf8 */ 14 15 /* How the 12 character attributes are encoded in 8 bits: Every attribute is 16 represented by an "include bitmask" and an "exclude bitmask". 17 Attribute bit/formula comment 18 upper upper && !lower implies towlower(x) != x == towupper(x) 19 lower !upper && lower implies towlower(x) == x != towupper(x) 20 title upper && lower implies towlower(x) != x != towupper(x) 21 alpha bit superset of upper || lower 22 digit xdigit && !alpha '0'..'9' and more 23 xdigit bit '0'..'9','a'..'f','A'..'F' and more 24 space bit ' ', '\f', '\n', '\r', '\t', '\v' 25 print bit 26 graph print && !space 27 blank bit ' ', '\t' 28 cntrl bit 0x00..0x1F,0x7F 29 punct print && !(alpha || xdigit || space) 30 alnum alpha || xdigit 31 */ 32 33 #define iswmask(number,incl,excl) ((incl) | ((excl) << 8) | ((number) << 16)) 34 #define wmask_incl(mask) (mask) & 0xFF 35 #define wmask_excl(mask) ((mask) >> 8) & 0xFF 36 #define wmask_number(mask) ((mask) >> 16) 37 38 #define upper 1 39 #define lower 2 40 #define alpha 4 41 #define digit 0 42 #define xdigit 8 43 #define space 16 44 #define print 32 45 #define graph 0 46 #define blank 64 47 #define cntrl 128 48 #define punct 0 49 #define alnum 0 50 51 /* XXX these are copied in src/include/ctype.h */ 52 #define wctype_alnum iswmask(11, alpha|xdigit, 0) 53 #define wctype_alpha iswmask(2, alpha, 0) 54 #define wctype_blank iswmask(8, blank, 0) 55 #define wctype_cntrl iswmask(9, cntrl, 0) 56 #define wctype_digit iswmask(3, xdigit, alpha) 57 #define wctype_graph iswmask(7, print, space) 58 #define wctype_lower iswmask(1, lower, upper) 59 #define wctype_print iswmask(6, print, 0) 60 #define wctype_punct iswmask(10, print, alpha|xdigit|space) 61 #define wctype_space iswmask(5, space, 0) 62 #define wctype_title iswmask(12, upper|lower, 0) 63 #define wctype_upper iswmask(0, upper, lower) 64 #define wctype_xdigit iswmask(4, xdigit, 0) 65 66 #define attribute_table mir18n_attribute_table 67 __BEGIN_DECLS 68 extern const unsigned char * const attribute_table[0x100]; 69 __END_DECLS 70 #endif 71 72 #ifdef mir18n_caseconv 73 /* namespace definitions for the UCD tables */ 74 #define nop_page mir18n_attribute_nop_page 75 #define tolower_table mir18n_caseconv_tolower 76 #define totitle_table mir18n_caseconv_totitle 77 #define toupper_table mir18n_caseconv_toupper 78 79 __BEGIN_DECLS 80 extern const uint16_t nop_page[256]; 81 __END_DECLS 82 #endif 83 84 #endif 85