xref: /illumos-gate/usr/src/uts/common/fs/zfs/lua/lctype.h (revision dfc11533)
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