1*dfc11533SChris Williamson /* 2*dfc11533SChris Williamson ** $Id: lctype.h,v 1.12.1.1 2013/04/12 18:48:47 roberto Exp $ 3*dfc11533SChris Williamson ** 'ctype' functions for Lua 4*dfc11533SChris Williamson ** See Copyright Notice in lua.h 5*dfc11533SChris Williamson */ 6*dfc11533SChris Williamson 7*dfc11533SChris Williamson #ifndef lctype_h 8*dfc11533SChris Williamson #define lctype_h 9*dfc11533SChris Williamson 10*dfc11533SChris Williamson #include "lua.h" 11*dfc11533SChris Williamson 12*dfc11533SChris Williamson 13*dfc11533SChris Williamson /* 14*dfc11533SChris Williamson ** WARNING: the functions defined here do not necessarily correspond 15*dfc11533SChris Williamson ** to the similar functions in the standard C ctype.h. They are 16*dfc11533SChris Williamson ** optimized for the specific needs of Lua 17*dfc11533SChris Williamson */ 18*dfc11533SChris Williamson 19*dfc11533SChris Williamson #if !defined(LUA_USE_CTYPE) 20*dfc11533SChris Williamson 21*dfc11533SChris Williamson #if 'A' == 65 && '0' == 48 22*dfc11533SChris Williamson /* ASCII case: can use its own tables; faster and fixed */ 23*dfc11533SChris Williamson #define LUA_USE_CTYPE 0 24*dfc11533SChris Williamson #else 25*dfc11533SChris Williamson /* must use standard C ctype */ 26*dfc11533SChris Williamson #define LUA_USE_CTYPE 1 27*dfc11533SChris Williamson #endif 28*dfc11533SChris Williamson 29*dfc11533SChris Williamson #endif 30*dfc11533SChris Williamson 31*dfc11533SChris Williamson 32*dfc11533SChris Williamson #if !LUA_USE_CTYPE /* { */ 33*dfc11533SChris Williamson 34*dfc11533SChris Williamson #include "llimits.h" 35*dfc11533SChris Williamson 36*dfc11533SChris Williamson 37*dfc11533SChris Williamson #define ALPHABIT 0 38*dfc11533SChris Williamson #define DIGITBIT 1 39*dfc11533SChris Williamson #define PRINTBIT 2 40*dfc11533SChris Williamson #define SPACEBIT 3 41*dfc11533SChris Williamson #define XDIGITBIT 4 42*dfc11533SChris Williamson 43*dfc11533SChris Williamson 44*dfc11533SChris Williamson #define MASK(B) (1 << (B)) 45*dfc11533SChris Williamson 46*dfc11533SChris Williamson 47*dfc11533SChris Williamson /* 48*dfc11533SChris Williamson ** add 1 to char to allow index -1 (EOZ) 49*dfc11533SChris Williamson */ 50*dfc11533SChris Williamson #define testprop(c,p) (luai_ctype_[(c)+1] & (p)) 51*dfc11533SChris Williamson 52*dfc11533SChris Williamson /* 53*dfc11533SChris Williamson ** 'lalpha' (Lua alphabetic) and 'lalnum' (Lua alphanumeric) both include '_' 54*dfc11533SChris Williamson */ 55*dfc11533SChris Williamson #define lislalpha(c) testprop(c, MASK(ALPHABIT)) 56*dfc11533SChris Williamson #define lislalnum(c) testprop(c, (MASK(ALPHABIT) | MASK(DIGITBIT))) 57*dfc11533SChris Williamson #define lisdigit(c) testprop(c, MASK(DIGITBIT)) 58*dfc11533SChris Williamson #define lisspace(c) testprop(c, MASK(SPACEBIT)) 59*dfc11533SChris Williamson #define lisprint(c) testprop(c, MASK(PRINTBIT)) 60*dfc11533SChris Williamson #define lisxdigit(c) testprop(c, MASK(XDIGITBIT)) 61*dfc11533SChris Williamson 62*dfc11533SChris Williamson /* 63*dfc11533SChris Williamson ** this 'ltolower' only works for alphabetic characters 64*dfc11533SChris Williamson */ 65*dfc11533SChris Williamson #define ltolower(c) ((c) | ('A' ^ 'a')) 66*dfc11533SChris Williamson 67*dfc11533SChris Williamson 68*dfc11533SChris Williamson /* two more entries for 0 and -1 (EOZ) */ 69*dfc11533SChris Williamson LUAI_DDEC const lu_byte luai_ctype_[UCHAR_MAX + 2]; 70*dfc11533SChris Williamson 71*dfc11533SChris Williamson 72*dfc11533SChris Williamson #else /* }{ */ 73*dfc11533SChris Williamson 74*dfc11533SChris Williamson /* 75*dfc11533SChris Williamson ** use standard C ctypes 76*dfc11533SChris Williamson */ 77*dfc11533SChris Williamson 78*dfc11533SChris Williamson #include <ctype.h> 79*dfc11533SChris Williamson 80*dfc11533SChris Williamson 81*dfc11533SChris Williamson #define lislalpha(c) (isalpha(c) || (c) == '_') 82*dfc11533SChris Williamson #define lislalnum(c) (isalnum(c) || (c) == '_') 83*dfc11533SChris Williamson #define lisdigit(c) (isdigit(c)) 84*dfc11533SChris Williamson #define lisspace(c) (isspace(c)) 85*dfc11533SChris Williamson #define lisprint(c) (isprint(c)) 86*dfc11533SChris Williamson #define lisxdigit(c) (isxdigit(c)) 87*dfc11533SChris Williamson 88*dfc11533SChris Williamson #define ltolower(c) (tolower(c)) 89*dfc11533SChris Williamson 90*dfc11533SChris Williamson #endif /* } */ 91*dfc11533SChris Williamson 92*dfc11533SChris Williamson #endif 93*dfc11533SChris Williamson 94