1 : /*
2 : +----------------------------------------------------------------------+
3 : | PHP Version 5 |
4 : +----------------------------------------------------------------------+
5 : | This source file is subject to version 3.01 of the PHP license, |
6 : | that is bundled with this package in the file LICENSE, and is |
7 : | available through the world-wide-web at the following url: |
8 : | http://www.php.net/license/3_01.txt |
9 : | If you did not receive a copy of the PHP license and are unable to |
10 : | obtain it through the world-wide-web, please send a note to |
11 : | license@php.net so we can mail you a copy immediately. |
12 : +----------------------------------------------------------------------+
13 : | Authors: Vadim Savchuk <vsavchuk@productengine.com> |
14 : | Dmitry Lakhtyuk <dlakhtyuk@productengine.com> |
15 : +----------------------------------------------------------------------+
16 : */
17 :
18 : #ifdef HAVE_CONFIG_H
19 : #include "config.h"
20 : #endif
21 :
22 : #include "php_intl.h"
23 : #include "intl_error.h"
24 : #include "common_error.h"
25 :
26 : /* {{{ proto int intl_get_error_code()
27 : * Get code of the last occured error.
28 : */
29 : PHP_FUNCTION( intl_get_error_code )
30 609 : {
31 609 : RETURN_LONG( intl_error_get_code( NULL TSRMLS_CC ) );
32 : }
33 : /* }}} */
34 :
35 : /* {{{ proto string intl_get_error_message()
36 : * Get text description of the last occured error.
37 : */
38 : PHP_FUNCTION( intl_get_error_message )
39 240 : {
40 240 : char* message = intl_error_get_message( NULL TSRMLS_CC );
41 240 : RETURN_STRING( message, FALSE );
42 : }
43 : /* }}} */
44 :
45 : /* {{{ proto bool intl_is_failure()
46 : * Check whether the given error code indicates a failure.
47 : * Returns true if it does, and false if the code
48 : * indicates success or a warning.
49 : */
50 : PHP_FUNCTION( intl_is_failure )
51 3 : {
52 : long err_code;
53 :
54 : /* Parse parameters. */
55 3 : if( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "l",
56 : &err_code ) == FAILURE )
57 : {
58 0 : intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
59 : "intl_is_failure: unable to parse input params", 0 TSRMLS_CC );
60 :
61 0 : RETURN_FALSE;
62 : }
63 :
64 3 : RETURN_BOOL( U_FAILURE( err_code ) );
65 : }
66 :
67 : /* {{{ proto string intl_error_name()
68 : * Return a string for a given error code.
69 : * The string will be the same as the name of the error code constant.
70 : */
71 : PHP_FUNCTION( intl_error_name )
72 3 : {
73 : long err_code;
74 :
75 : /* Parse parameters. */
76 3 : if( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "l",
77 : &err_code ) == FAILURE )
78 : {
79 0 : intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
80 : "intl_error_name: unable to parse input params", 0 TSRMLS_CC );
81 :
82 0 : RETURN_FALSE;
83 : }
84 :
85 3 : RETURN_STRING( (char*)u_errorName( err_code ), 1 );
86 : }
87 : /* }}} */
88 :
89 : /* {{{ intl_expose_icu_error_codes
90 : * Expose ICU error codes
91 : */
92 : void intl_expose_icu_error_codes( INIT_FUNC_ARGS )
93 17633 : {
94 : #define INTL_EXPOSE_CONST(x) REGISTER_LONG_CONSTANT(#x, x, CONST_CS)
95 :
96 : /* Warnings */
97 17633 : INTL_EXPOSE_CONST( U_USING_FALLBACK_WARNING );
98 17633 : INTL_EXPOSE_CONST( U_ERROR_WARNING_START );
99 17633 : INTL_EXPOSE_CONST( U_USING_DEFAULT_WARNING );
100 17633 : INTL_EXPOSE_CONST( U_SAFECLONE_ALLOCATED_WARNING );
101 17633 : INTL_EXPOSE_CONST( U_STATE_OLD_WARNING );
102 17633 : INTL_EXPOSE_CONST( U_STRING_NOT_TERMINATED_WARNING );
103 17633 : INTL_EXPOSE_CONST( U_SORT_KEY_TOO_SHORT_WARNING );
104 17633 : INTL_EXPOSE_CONST( U_AMBIGUOUS_ALIAS_WARNING );
105 17633 : INTL_EXPOSE_CONST( U_DIFFERENT_UCA_VERSION );
106 17633 : INTL_EXPOSE_CONST( U_ERROR_WARNING_LIMIT );
107 :
108 : /* Standard errors */
109 17633 : INTL_EXPOSE_CONST( U_ZERO_ERROR );
110 17633 : INTL_EXPOSE_CONST( U_ILLEGAL_ARGUMENT_ERROR );
111 17633 : INTL_EXPOSE_CONST( U_MISSING_RESOURCE_ERROR );
112 17633 : INTL_EXPOSE_CONST( U_INVALID_FORMAT_ERROR );
113 17633 : INTL_EXPOSE_CONST( U_FILE_ACCESS_ERROR );
114 17633 : INTL_EXPOSE_CONST( U_INTERNAL_PROGRAM_ERROR );
115 17633 : INTL_EXPOSE_CONST( U_MESSAGE_PARSE_ERROR );
116 17633 : INTL_EXPOSE_CONST( U_MEMORY_ALLOCATION_ERROR );
117 17633 : INTL_EXPOSE_CONST( U_INDEX_OUTOFBOUNDS_ERROR );
118 17633 : INTL_EXPOSE_CONST( U_PARSE_ERROR );
119 17633 : INTL_EXPOSE_CONST( U_INVALID_CHAR_FOUND );
120 17633 : INTL_EXPOSE_CONST( U_TRUNCATED_CHAR_FOUND );
121 17633 : INTL_EXPOSE_CONST( U_ILLEGAL_CHAR_FOUND );
122 17633 : INTL_EXPOSE_CONST( U_INVALID_TABLE_FORMAT );
123 17633 : INTL_EXPOSE_CONST( U_INVALID_TABLE_FILE );
124 17633 : INTL_EXPOSE_CONST( U_BUFFER_OVERFLOW_ERROR );
125 17633 : INTL_EXPOSE_CONST( U_UNSUPPORTED_ERROR );
126 17633 : INTL_EXPOSE_CONST( U_RESOURCE_TYPE_MISMATCH );
127 17633 : INTL_EXPOSE_CONST( U_ILLEGAL_ESCAPE_SEQUENCE );
128 17633 : INTL_EXPOSE_CONST( U_UNSUPPORTED_ESCAPE_SEQUENCE );
129 17633 : INTL_EXPOSE_CONST( U_NO_SPACE_AVAILABLE );
130 17633 : INTL_EXPOSE_CONST( U_CE_NOT_FOUND_ERROR );
131 17633 : INTL_EXPOSE_CONST( U_PRIMARY_TOO_LONG_ERROR );
132 17633 : INTL_EXPOSE_CONST( U_STATE_TOO_OLD_ERROR );
133 17633 : INTL_EXPOSE_CONST( U_TOO_MANY_ALIASES_ERROR );
134 17633 : INTL_EXPOSE_CONST( U_ENUM_OUT_OF_SYNC_ERROR );
135 17633 : INTL_EXPOSE_CONST( U_INVARIANT_CONVERSION_ERROR );
136 17633 : INTL_EXPOSE_CONST( U_INVALID_STATE_ERROR );
137 17633 : INTL_EXPOSE_CONST( U_COLLATOR_VERSION_MISMATCH );
138 17633 : INTL_EXPOSE_CONST( U_USELESS_COLLATOR_ERROR );
139 17633 : INTL_EXPOSE_CONST( U_NO_WRITE_PERMISSION );
140 17633 : INTL_EXPOSE_CONST( U_STANDARD_ERROR_LIMIT );
141 :
142 : /* The error code range 0x10000 0x10100 are reserved for Transliterator */
143 17633 : INTL_EXPOSE_CONST( U_BAD_VARIABLE_DEFINITION );
144 17633 : INTL_EXPOSE_CONST( U_PARSE_ERROR_START );
145 17633 : INTL_EXPOSE_CONST( U_MALFORMED_RULE );
146 17633 : INTL_EXPOSE_CONST( U_MALFORMED_SET );
147 17633 : INTL_EXPOSE_CONST( U_MALFORMED_SYMBOL_REFERENCE );
148 17633 : INTL_EXPOSE_CONST( U_MALFORMED_UNICODE_ESCAPE );
149 17633 : INTL_EXPOSE_CONST( U_MALFORMED_VARIABLE_DEFINITION );
150 17633 : INTL_EXPOSE_CONST( U_MALFORMED_VARIABLE_REFERENCE );
151 17633 : INTL_EXPOSE_CONST( U_MISMATCHED_SEGMENT_DELIMITERS );
152 17633 : INTL_EXPOSE_CONST( U_MISPLACED_ANCHOR_START );
153 17633 : INTL_EXPOSE_CONST( U_MISPLACED_CURSOR_OFFSET );
154 17633 : INTL_EXPOSE_CONST( U_MISPLACED_QUANTIFIER );
155 17633 : INTL_EXPOSE_CONST( U_MISSING_OPERATOR );
156 17633 : INTL_EXPOSE_CONST( U_MISSING_SEGMENT_CLOSE );
157 17633 : INTL_EXPOSE_CONST( U_MULTIPLE_ANTE_CONTEXTS );
158 17633 : INTL_EXPOSE_CONST( U_MULTIPLE_CURSORS );
159 17633 : INTL_EXPOSE_CONST( U_MULTIPLE_POST_CONTEXTS );
160 17633 : INTL_EXPOSE_CONST( U_TRAILING_BACKSLASH );
161 17633 : INTL_EXPOSE_CONST( U_UNDEFINED_SEGMENT_REFERENCE );
162 17633 : INTL_EXPOSE_CONST( U_UNDEFINED_VARIABLE );
163 17633 : INTL_EXPOSE_CONST( U_UNQUOTED_SPECIAL );
164 17633 : INTL_EXPOSE_CONST( U_UNTERMINATED_QUOTE );
165 17633 : INTL_EXPOSE_CONST( U_RULE_MASK_ERROR );
166 17633 : INTL_EXPOSE_CONST( U_MISPLACED_COMPOUND_FILTER );
167 17633 : INTL_EXPOSE_CONST( U_MULTIPLE_COMPOUND_FILTERS );
168 17633 : INTL_EXPOSE_CONST( U_INVALID_RBT_SYNTAX );
169 17633 : INTL_EXPOSE_CONST( U_INVALID_PROPERTY_PATTERN );
170 17633 : INTL_EXPOSE_CONST( U_MALFORMED_PRAGMA );
171 17633 : INTL_EXPOSE_CONST( U_UNCLOSED_SEGMENT );
172 17633 : INTL_EXPOSE_CONST( U_ILLEGAL_CHAR_IN_SEGMENT );
173 17633 : INTL_EXPOSE_CONST( U_VARIABLE_RANGE_EXHAUSTED );
174 17633 : INTL_EXPOSE_CONST( U_VARIABLE_RANGE_OVERLAP );
175 17633 : INTL_EXPOSE_CONST( U_ILLEGAL_CHARACTER );
176 17633 : INTL_EXPOSE_CONST( U_INTERNAL_TRANSLITERATOR_ERROR );
177 17633 : INTL_EXPOSE_CONST( U_INVALID_ID );
178 17633 : INTL_EXPOSE_CONST( U_INVALID_FUNCTION );
179 17633 : INTL_EXPOSE_CONST( U_PARSE_ERROR_LIMIT );
180 :
181 : /* The error code range 0x10100 0x10200 are reserved for formatting API parsing error */
182 17633 : INTL_EXPOSE_CONST( U_UNEXPECTED_TOKEN );
183 17633 : INTL_EXPOSE_CONST( U_FMT_PARSE_ERROR_START );
184 17633 : INTL_EXPOSE_CONST( U_MULTIPLE_DECIMAL_SEPARATORS );
185 17633 : INTL_EXPOSE_CONST( U_MULTIPLE_DECIMAL_SEPERATORS ); /* Typo: kept for backward compatibility. Use U_MULTIPLE_DECIMAL_SEPARATORS */
186 17633 : INTL_EXPOSE_CONST( U_MULTIPLE_EXPONENTIAL_SYMBOLS );
187 17633 : INTL_EXPOSE_CONST( U_MALFORMED_EXPONENTIAL_PATTERN );
188 17633 : INTL_EXPOSE_CONST( U_MULTIPLE_PERCENT_SYMBOLS );
189 17633 : INTL_EXPOSE_CONST( U_MULTIPLE_PERMILL_SYMBOLS );
190 17633 : INTL_EXPOSE_CONST( U_MULTIPLE_PAD_SPECIFIERS );
191 17633 : INTL_EXPOSE_CONST( U_PATTERN_SYNTAX_ERROR );
192 17633 : INTL_EXPOSE_CONST( U_ILLEGAL_PAD_POSITION );
193 17633 : INTL_EXPOSE_CONST( U_UNMATCHED_BRACES );
194 17633 : INTL_EXPOSE_CONST( U_UNSUPPORTED_PROPERTY );
195 17633 : INTL_EXPOSE_CONST( U_UNSUPPORTED_ATTRIBUTE );
196 17633 : INTL_EXPOSE_CONST( U_FMT_PARSE_ERROR_LIMIT );
197 :
198 : /* The error code range 0x10200 0x102ff are reserved for Break Iterator related error */
199 17633 : INTL_EXPOSE_CONST( U_BRK_INTERNAL_ERROR );
200 17633 : INTL_EXPOSE_CONST( U_BRK_ERROR_START );
201 17633 : INTL_EXPOSE_CONST( U_BRK_HEX_DIGITS_EXPECTED );
202 17633 : INTL_EXPOSE_CONST( U_BRK_SEMICOLON_EXPECTED );
203 17633 : INTL_EXPOSE_CONST( U_BRK_RULE_SYNTAX );
204 17633 : INTL_EXPOSE_CONST( U_BRK_UNCLOSED_SET );
205 17633 : INTL_EXPOSE_CONST( U_BRK_ASSIGN_ERROR );
206 17633 : INTL_EXPOSE_CONST( U_BRK_VARIABLE_REDFINITION );
207 17633 : INTL_EXPOSE_CONST( U_BRK_MISMATCHED_PAREN );
208 17633 : INTL_EXPOSE_CONST( U_BRK_NEW_LINE_IN_QUOTED_STRING );
209 17633 : INTL_EXPOSE_CONST( U_BRK_UNDEFINED_VARIABLE );
210 17633 : INTL_EXPOSE_CONST( U_BRK_INIT_ERROR );
211 17633 : INTL_EXPOSE_CONST( U_BRK_RULE_EMPTY_SET );
212 17633 : INTL_EXPOSE_CONST( U_BRK_UNRECOGNIZED_OPTION );
213 17633 : INTL_EXPOSE_CONST( U_BRK_MALFORMED_RULE_TAG );
214 17633 : INTL_EXPOSE_CONST( U_BRK_ERROR_LIMIT );
215 :
216 : /* The error codes in the range 0x10300-0x103ff are reserved for regular expression related errrs */
217 17633 : INTL_EXPOSE_CONST( U_REGEX_INTERNAL_ERROR );
218 17633 : INTL_EXPOSE_CONST( U_REGEX_ERROR_START );
219 17633 : INTL_EXPOSE_CONST( U_REGEX_RULE_SYNTAX );
220 17633 : INTL_EXPOSE_CONST( U_REGEX_INVALID_STATE );
221 17633 : INTL_EXPOSE_CONST( U_REGEX_BAD_ESCAPE_SEQUENCE );
222 17633 : INTL_EXPOSE_CONST( U_REGEX_PROPERTY_SYNTAX );
223 17633 : INTL_EXPOSE_CONST( U_REGEX_UNIMPLEMENTED );
224 17633 : INTL_EXPOSE_CONST( U_REGEX_MISMATCHED_PAREN );
225 17633 : INTL_EXPOSE_CONST( U_REGEX_NUMBER_TOO_BIG );
226 17633 : INTL_EXPOSE_CONST( U_REGEX_BAD_INTERVAL );
227 17633 : INTL_EXPOSE_CONST( U_REGEX_MAX_LT_MIN );
228 17633 : INTL_EXPOSE_CONST( U_REGEX_INVALID_BACK_REF );
229 17633 : INTL_EXPOSE_CONST( U_REGEX_INVALID_FLAG );
230 17633 : INTL_EXPOSE_CONST( U_REGEX_LOOK_BEHIND_LIMIT );
231 17633 : INTL_EXPOSE_CONST( U_REGEX_SET_CONTAINS_STRING );
232 17633 : INTL_EXPOSE_CONST( U_REGEX_ERROR_LIMIT );
233 :
234 : /* The error code in the range 0x10400-0x104ff are reserved for IDNA related error codes */
235 : #if defined(U_IDNA_PROHIBITED_ERROR)
236 : INTL_EXPOSE_CONST( U_IDNA_PROHIBITED_ERROR );
237 : INTL_EXPOSE_CONST( U_IDNA_ERROR_START );
238 : INTL_EXPOSE_CONST( U_IDNA_UNASSIGNED_ERROR );
239 : INTL_EXPOSE_CONST( U_IDNA_CHECK_BIDI_ERROR );
240 : INTL_EXPOSE_CONST( U_IDNA_STD3_ASCII_RULES_ERROR );
241 : INTL_EXPOSE_CONST( U_IDNA_ACE_PREFIX_ERROR );
242 : INTL_EXPOSE_CONST( U_IDNA_VERIFICATION_ERROR );
243 : INTL_EXPOSE_CONST( U_IDNA_LABEL_TOO_LONG_ERROR );
244 : INTL_EXPOSE_CONST( U_IDNA_ZERO_LENGTH_LABEL_ERROR );
245 : INTL_EXPOSE_CONST( U_IDNA_ERROR_LIMIT );
246 : #endif
247 :
248 : /* Aliases for StringPrep */
249 17633 : INTL_EXPOSE_CONST( U_STRINGPREP_PROHIBITED_ERROR );
250 17633 : INTL_EXPOSE_CONST( U_STRINGPREP_UNASSIGNED_ERROR );
251 17633 : INTL_EXPOSE_CONST( U_STRINGPREP_CHECK_BIDI_ERROR );
252 :
253 17633 : INTL_EXPOSE_CONST( U_ERROR_LIMIT );
254 :
255 : #undef INTL_EXPOSE_CONST
256 17633 : }
257 : /* }}} */
258 :
259 : /*
260 : * Local variables:
261 : * tab-width: 4
262 : * c-basic-offset: 4
263 : * End:
264 : * vim600: noet sw=4 ts=4 fdm=marker
265 : * vim<600: noet sw=4 ts=4
266 : */
|