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: Gustavo Lopes <cataphract@php.net> |
14 +----------------------------------------------------------------------+
15 */
16
17 #ifdef HAVE_CONFIG_H
18 #include "config.h"
19 #endif
20
21 #include "transliterator_class.h"
22 #include "transliterator.h"
23 #include "intl_convert.h"
24
25 #include <unicode/ustring.h>
26
27 /* {{{ transliterator_register_constants
28 * Register constants common for both (OO and procedural) APIs.
29 */
transliterator_register_constants(INIT_FUNC_ARGS)30 void transliterator_register_constants( INIT_FUNC_ARGS )
31 {
32 if( !Transliterator_ce_ptr )
33 {
34 zend_error( E_ERROR, "Transliterator class not defined" );
35 return;
36 }
37
38 #define TRANSLITERATOR_EXPOSE_CONST( x ) REGISTER_LONG_CONSTANT( #x, x, CONST_CS )
39 #define TRANSLITERATOR_EXPOSE_CLASS_CONST( x ) zend_declare_class_constant_long( Transliterator_ce_ptr, ZEND_STRS( #x ) - 1, TRANSLITERATOR_##x TSRMLS_CC );
40 #define TRANSLITERATOR_EXPOSE_CUSTOM_CLASS_CONST( name, value ) zend_declare_class_constant_long( Transliterator_ce_ptr, ZEND_STRS( name ) - 1, value TSRMLS_CC );*/
41
42 /* Normalization form constants */
43 TRANSLITERATOR_EXPOSE_CLASS_CONST( FORWARD );
44 TRANSLITERATOR_EXPOSE_CLASS_CONST( REVERSE );
45
46 #undef NORMALIZER_EXPOSE_CUSTOM_CLASS_CONST
47 #undef NORMALIZER_EXPOSE_CLASS_CONST
48 #undef NORMALIZER_EXPOSE_CONST
49 }
50 /* }}} */
51
52 /* {{{ transliterator_parse_error_to_string
53 * Transforms parse errors in strings.
54 */
transliterator_parse_error_to_string(UParseError * pe)55 smart_str transliterator_parse_error_to_string( UParseError* pe )
56 {
57 smart_str ret = {0};
58 char *buf;
59 int u8len;
60 UErrorCode status;
61 int any = 0;
62
63 assert( pe != NULL );
64
65 smart_str_appends( &ret, "parse error " );
66 if( pe->line > 0 )
67 {
68 smart_str_appends( &ret, "on line " );
69 smart_str_append_long( &ret, (long ) pe->line );
70 any = 1;
71 }
72 if( pe->offset >= 0 ) {
73 if( any )
74 smart_str_appends( &ret, ", " );
75 else
76 smart_str_appends( &ret, "at " );
77
78 smart_str_appends( &ret, "offset " );
79 smart_str_append_long( &ret, (long ) pe->offset );
80 any = 1;
81 }
82
83 if (pe->preContext[0] != 0 ) {
84 if( any )
85 smart_str_appends( &ret, ", " );
86
87 smart_str_appends( &ret, "after \"" );
88 intl_convert_utf16_to_utf8( &buf, &u8len, pe->preContext, -1, &status );
89 if( U_FAILURE( status ) )
90 {
91 smart_str_appends( &ret, "(could not convert parser error pre-context to UTF-8)" );
92 }
93 else {
94 smart_str_appendl( &ret, buf, u8len );
95 efree( buf );
96 }
97 smart_str_appends( &ret, "\"" );
98 any = 1;
99 }
100
101 if( pe->postContext[0] != 0 )
102 {
103 if( any )
104 smart_str_appends( &ret, ", " );
105
106 smart_str_appends( &ret, "before or at \"" );
107 intl_convert_utf16_to_utf8( &buf, &u8len, pe->postContext, -1, &status );
108 if( U_FAILURE( status ) )
109 {
110 smart_str_appends( &ret, "(could not convert parser error post-context to UTF-8)" );
111 }
112 else
113 {
114 smart_str_appendl( &ret, buf, u8len );
115 efree( buf );
116 }
117 smart_str_appends( &ret, "\"" );
118 any = 1;
119 }
120
121 if( !any )
122 {
123 smart_str_free( &ret );
124 smart_str_appends( &ret, "no parse error" );
125 }
126
127 smart_str_0( &ret );
128 return ret;
129 }
130
131 /*
132 * Local variables:
133 * tab-width: 4
134 * c-basic-offset: 4
135 * End:
136 * vim600: noet sw=4 ts=4 fdm=marker
137 * vim<600: noet sw=4 ts=4
138 */
139