Annotation of embedaddon/php/ext/ctype/ctype.c, revision 1.1.1.3
1.1 misho 1: /*
2: +----------------------------------------------------------------------+
3: | PHP Version 5 |
4: +----------------------------------------------------------------------+
1.1.1.3 ! misho 5: | Copyright (c) 1997-2014 The PHP Group |
1.1 misho 6: +----------------------------------------------------------------------+
7: | This source file is subject to version 3.01 of the PHP license, |
8: | that is bundled with this package in the file LICENSE, and is |
9: | available through the world-wide-web at the following url: |
10: | http://www.php.net/license/3_01.txt |
11: | If you did not receive a copy of the PHP license and are unable to |
12: | obtain it through the world-wide-web, please send a note to |
13: | license@php.net so we can mail you a copy immediately. |
14: +----------------------------------------------------------------------+
15: | Author: Hartmut Holzgraefe <hholzgra@php.net> |
16: +----------------------------------------------------------------------+
17: */
18:
19: #ifdef HAVE_CONFIG_H
20: #include "config.h"
21: #endif
22:
23: #include "php.h"
24: #include "php_ini.h"
25: #include "php_ctype.h"
26: #include "SAPI.h"
27: #include "ext/standard/info.h"
28:
29: #include <ctype.h>
30:
31: #if HAVE_CTYPE
32:
33: static PHP_MINFO_FUNCTION(ctype);
34:
35: static PHP_FUNCTION(ctype_alnum);
36: static PHP_FUNCTION(ctype_alpha);
37: static PHP_FUNCTION(ctype_cntrl);
38: static PHP_FUNCTION(ctype_digit);
39: static PHP_FUNCTION(ctype_lower);
40: static PHP_FUNCTION(ctype_graph);
41: static PHP_FUNCTION(ctype_print);
42: static PHP_FUNCTION(ctype_punct);
43: static PHP_FUNCTION(ctype_space);
44: static PHP_FUNCTION(ctype_upper);
45: static PHP_FUNCTION(ctype_xdigit);
46:
47: /* {{{ arginfo */
48: ZEND_BEGIN_ARG_INFO(arginfo_ctype_alnum, 0)
49: ZEND_ARG_INFO(0, text)
50: ZEND_END_ARG_INFO()
51:
52: ZEND_BEGIN_ARG_INFO(arginfo_ctype_alpha, 0)
53: ZEND_ARG_INFO(0, text)
54: ZEND_END_ARG_INFO()
55:
56: ZEND_BEGIN_ARG_INFO(arginfo_ctype_cntrl, 0)
57: ZEND_ARG_INFO(0, text)
58: ZEND_END_ARG_INFO()
59:
60: ZEND_BEGIN_ARG_INFO(arginfo_ctype_digit, 0)
61: ZEND_ARG_INFO(0, text)
62: ZEND_END_ARG_INFO()
63:
64: ZEND_BEGIN_ARG_INFO(arginfo_ctype_lower, 0)
65: ZEND_ARG_INFO(0, text)
66: ZEND_END_ARG_INFO()
67:
68: ZEND_BEGIN_ARG_INFO(arginfo_ctype_graph, 0)
69: ZEND_ARG_INFO(0, text)
70: ZEND_END_ARG_INFO()
71:
72: ZEND_BEGIN_ARG_INFO(arginfo_ctype_print, 0)
73: ZEND_ARG_INFO(0, text)
74: ZEND_END_ARG_INFO()
75:
76: ZEND_BEGIN_ARG_INFO(arginfo_ctype_punct, 0)
77: ZEND_ARG_INFO(0, text)
78: ZEND_END_ARG_INFO()
79:
80: ZEND_BEGIN_ARG_INFO(arginfo_ctype_space, 0)
81: ZEND_ARG_INFO(0, text)
82: ZEND_END_ARG_INFO()
83:
84: ZEND_BEGIN_ARG_INFO(arginfo_ctype_upper, 0)
85: ZEND_ARG_INFO(0, text)
86: ZEND_END_ARG_INFO()
87:
88: ZEND_BEGIN_ARG_INFO(arginfo_ctype_xdigit, 0)
89: ZEND_ARG_INFO(0, text)
90: ZEND_END_ARG_INFO()
91:
92: /* }}} */
93:
94: /* {{{ ctype_functions[]
95: * Every user visible function must have an entry in ctype_functions[].
96: */
97: static const zend_function_entry ctype_functions[] = {
98: PHP_FE(ctype_alnum, arginfo_ctype_alnum)
99: PHP_FE(ctype_alpha, arginfo_ctype_alpha)
100: PHP_FE(ctype_cntrl, arginfo_ctype_cntrl)
101: PHP_FE(ctype_digit, arginfo_ctype_digit)
102: PHP_FE(ctype_lower, arginfo_ctype_lower)
103: PHP_FE(ctype_graph, arginfo_ctype_graph)
104: PHP_FE(ctype_print, arginfo_ctype_print)
105: PHP_FE(ctype_punct, arginfo_ctype_punct)
106: PHP_FE(ctype_space, arginfo_ctype_space)
107: PHP_FE(ctype_upper, arginfo_ctype_upper)
108: PHP_FE(ctype_xdigit, arginfo_ctype_xdigit)
109: PHP_FE_END
110: };
111: /* }}} */
112:
113: /* {{{ ctype_module_entry
114: */
115: zend_module_entry ctype_module_entry = {
116: STANDARD_MODULE_HEADER,
117: "ctype",
118: ctype_functions,
119: NULL,
120: NULL,
121: NULL,
122: NULL,
123: PHP_MINFO(ctype),
124: NO_VERSION_YET,
125: STANDARD_MODULE_PROPERTIES
126: };
127: /* }}} */
128:
129: #ifdef COMPILE_DL_CTYPE
130: ZEND_GET_MODULE(ctype)
131: #endif
132:
133: /* {{{ PHP_MINFO_FUNCTION
134: */
135: static PHP_MINFO_FUNCTION(ctype)
136: {
137: php_info_print_table_start();
138: php_info_print_table_row(2, "ctype functions", "enabled");
139: php_info_print_table_end();
140: }
141: /* }}} */
142:
143: /* {{{ ctype
144: */
145: #define CTYPE(iswhat) \
146: zval *c, tmp; \
147: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &c) == FAILURE) \
148: return; \
149: if (Z_TYPE_P(c) == IS_LONG) { \
150: if (Z_LVAL_P(c) <= 255 && Z_LVAL_P(c) >= 0) { \
151: RETURN_BOOL(iswhat(Z_LVAL_P(c))); \
152: } else if (Z_LVAL_P(c) >= -128 && Z_LVAL_P(c) < 0) { \
153: RETURN_BOOL(iswhat(Z_LVAL_P(c) + 256)); \
154: } \
155: tmp = *c; \
156: zval_copy_ctor(&tmp); \
157: convert_to_string(&tmp); \
158: } else { \
159: tmp = *c; \
160: } \
161: if (Z_TYPE(tmp) == IS_STRING) { \
162: char *p = Z_STRVAL(tmp), *e = Z_STRVAL(tmp) + Z_STRLEN(tmp); \
163: if (e == p) { \
164: if (Z_TYPE_P(c) == IS_LONG) zval_dtor(&tmp); \
165: RETURN_FALSE; \
166: } \
167: while (p < e) { \
168: if(!iswhat((int)*(unsigned char *)(p++))) { \
169: if (Z_TYPE_P(c) == IS_LONG) zval_dtor(&tmp); \
170: RETURN_FALSE; \
171: } \
172: } \
173: if (Z_TYPE_P(c) == IS_LONG) zval_dtor(&tmp); \
174: RETURN_TRUE; \
175: } else { \
176: RETURN_FALSE; \
177: } \
178:
179: /* }}} */
180:
181: /* {{{ proto bool ctype_alnum(mixed c)
182: Checks for alphanumeric character(s) */
183: static PHP_FUNCTION(ctype_alnum)
184: {
185: CTYPE(isalnum);
186: }
187: /* }}} */
188:
189: /* {{{ proto bool ctype_alpha(mixed c)
190: Checks for alphabetic character(s) */
191: static PHP_FUNCTION(ctype_alpha)
192: {
193: CTYPE(isalpha);
194: }
195: /* }}} */
196:
197: /* {{{ proto bool ctype_cntrl(mixed c)
198: Checks for control character(s) */
199: static PHP_FUNCTION(ctype_cntrl)
200: {
201: CTYPE(iscntrl);
202: }
203: /* }}} */
204:
205: /* {{{ proto bool ctype_digit(mixed c)
206: Checks for numeric character(s) */
207: static PHP_FUNCTION(ctype_digit)
208: {
209: CTYPE(isdigit);
210: }
211: /* }}} */
212:
213: /* {{{ proto bool ctype_lower(mixed c)
214: Checks for lowercase character(s) */
215: static PHP_FUNCTION(ctype_lower)
216: {
217: CTYPE(islower);
218: }
219: /* }}} */
220:
221: /* {{{ proto bool ctype_graph(mixed c)
222: Checks for any printable character(s) except space */
223: static PHP_FUNCTION(ctype_graph)
224: {
225: CTYPE(isgraph);
226: }
227: /* }}} */
228:
229: /* {{{ proto bool ctype_print(mixed c)
230: Checks for printable character(s) */
231: static PHP_FUNCTION(ctype_print)
232: {
233: CTYPE(isprint);
234: }
235: /* }}} */
236:
237: /* {{{ proto bool ctype_punct(mixed c)
238: Checks for any printable character which is not whitespace or an alphanumeric character */
239: static PHP_FUNCTION(ctype_punct)
240: {
241: CTYPE(ispunct);
242: }
243: /* }}} */
244:
245: /* {{{ proto bool ctype_space(mixed c)
246: Checks for whitespace character(s)*/
247: static PHP_FUNCTION(ctype_space)
248: {
249: CTYPE(isspace);
250: }
251: /* }}} */
252:
253: /* {{{ proto bool ctype_upper(mixed c)
254: Checks for uppercase character(s) */
255: static PHP_FUNCTION(ctype_upper)
256: {
257: CTYPE(isupper);
258: }
259: /* }}} */
260:
261: /* {{{ proto bool ctype_xdigit(mixed c)
262: Checks for character(s) representing a hexadecimal digit */
263: static PHP_FUNCTION(ctype_xdigit)
264: {
265: CTYPE(isxdigit);
266: }
267: /* }}} */
268:
269: #endif /* HAVE_CTYPE */
270:
271: /*
272: * Local variables:
273: * tab-width: 4
274: * c-basic-offset: 4
275: * End:
276: * vim600: sw=4 ts=4 fdm=marker
277: * vim<600: sw=4 ts=4
278: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>