@@ -52,1554 +52,1554 @@ |
||
52 | 52 | */ |
53 | 53 | class idna_convert |
54 | 54 | { |
55 | - // NP See below |
|
55 | + // NP See below |
|
56 | 56 | |
57 | - // Internal settings, do not mess with them |
|
58 | - protected $_punycode_prefix = 'xn--'; |
|
59 | - protected $_invalid_ucs = 0x80000000; |
|
60 | - protected $_max_ucs = 0x10FFFF; |
|
61 | - protected $_base = 36; |
|
62 | - protected $_tmin = 1; |
|
63 | - protected $_tmax = 26; |
|
64 | - protected $_skew = 38; |
|
65 | - protected $_damp = 700; |
|
66 | - protected $_initial_bias = 72; |
|
67 | - protected $_initial_n = 0x80; |
|
68 | - protected $_sbase = 0xAC00; |
|
69 | - protected $_lbase = 0x1100; |
|
70 | - protected $_vbase = 0x1161; |
|
71 | - protected $_tbase = 0x11A7; |
|
72 | - protected $_lcount = 19; |
|
73 | - protected $_vcount = 21; |
|
74 | - protected $_tcount = 28; |
|
75 | - protected $_ncount = 588; // _vcount * _tcount |
|
76 | - protected $_scount = 11172; // _lcount * _tcount * _vcount |
|
77 | - protected $_error = false; |
|
57 | + // Internal settings, do not mess with them |
|
58 | + protected $_punycode_prefix = 'xn--'; |
|
59 | + protected $_invalid_ucs = 0x80000000; |
|
60 | + protected $_max_ucs = 0x10FFFF; |
|
61 | + protected $_base = 36; |
|
62 | + protected $_tmin = 1; |
|
63 | + protected $_tmax = 26; |
|
64 | + protected $_skew = 38; |
|
65 | + protected $_damp = 700; |
|
66 | + protected $_initial_bias = 72; |
|
67 | + protected $_initial_n = 0x80; |
|
68 | + protected $_sbase = 0xAC00; |
|
69 | + protected $_lbase = 0x1100; |
|
70 | + protected $_vbase = 0x1161; |
|
71 | + protected $_tbase = 0x11A7; |
|
72 | + protected $_lcount = 19; |
|
73 | + protected $_vcount = 21; |
|
74 | + protected $_tcount = 28; |
|
75 | + protected $_ncount = 588; // _vcount * _tcount |
|
76 | + protected $_scount = 11172; // _lcount * _tcount * _vcount |
|
77 | + protected $_error = false; |
|
78 | 78 | |
79 | - protected static $_mb_string_overload = null; |
|
79 | + protected static $_mb_string_overload = null; |
|
80 | 80 | |
81 | - // See {@link set_paramter()} for details of how to change the following |
|
82 | - // settings from within your script / application |
|
83 | - protected $_api_encoding = 'utf8'; // Default input charset is UTF-8 |
|
84 | - protected $_allow_overlong = false; // Overlong UTF-8 encodings are forbidden |
|
85 | - protected $_strict_mode = false; // Behave strict or not |
|
86 | - protected $_idn_version = 2003; // Can be either 2003 (old, default) or 2008 |
|
81 | + // See {@link set_paramter()} for details of how to change the following |
|
82 | + // settings from within your script / application |
|
83 | + protected $_api_encoding = 'utf8'; // Default input charset is UTF-8 |
|
84 | + protected $_allow_overlong = false; // Overlong UTF-8 encodings are forbidden |
|
85 | + protected $_strict_mode = false; // Behave strict or not |
|
86 | + protected $_idn_version = 2003; // Can be either 2003 (old, default) or 2008 |
|
87 | 87 | |
88 | - /** |
|
89 | - * the constructor |
|
90 | - * |
|
91 | - * @param array $options |
|
92 | - * @return boolean |
|
93 | - * @since 0.5.2 |
|
94 | - */ |
|
95 | - public function __construct($options = false) |
|
96 | - { |
|
97 | - $this->slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount; |
|
98 | - // If parameters are given, pass these to the respective method |
|
99 | - if (is_array($options)) { |
|
100 | - $this->set_parameter($options); |
|
101 | - } |
|
88 | + /** |
|
89 | + * the constructor |
|
90 | + * |
|
91 | + * @param array $options |
|
92 | + * @return boolean |
|
93 | + * @since 0.5.2 |
|
94 | + */ |
|
95 | + public function __construct($options = false) |
|
96 | + { |
|
97 | + $this->slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount; |
|
98 | + // If parameters are given, pass these to the respective method |
|
99 | + if (is_array($options)) { |
|
100 | + $this->set_parameter($options); |
|
101 | + } |
|
102 | 102 | |
103 | - // populate mbstring overloading cache if not set |
|
104 | - if (self::$_mb_string_overload === null) { |
|
105 | - self::$_mb_string_overload = (extension_loaded('mbstring') |
|
106 | - && (ini_get('mbstring.func_overload') & 0x02) === 0x02); |
|
107 | - } |
|
108 | - } |
|
103 | + // populate mbstring overloading cache if not set |
|
104 | + if (self::$_mb_string_overload === null) { |
|
105 | + self::$_mb_string_overload = (extension_loaded('mbstring') |
|
106 | + && (ini_get('mbstring.func_overload') & 0x02) === 0x02); |
|
107 | + } |
|
108 | + } |
|
109 | 109 | |
110 | - /** |
|
111 | - * Sets a new option value. Available options and values: |
|
112 | - * [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8, |
|
113 | - * 'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8] |
|
114 | - * [overlong - Unicode does not allow unnecessarily long encodings of chars, |
|
115 | - * to allow this, set this parameter to true, else to false; |
|
116 | - * default is false.] |
|
117 | - * [strict - true: strict mode, good for registration purposes - Causes errors |
|
118 | - * on failures; false: loose mode, ideal for "wildlife" applications |
|
119 | - * by silently ignoring errors and returning the original input instead |
|
120 | - * |
|
121 | - * @param mixed Parameter to set (string: single parameter; array of Parameter => Value pairs) |
|
122 | - * @param string Value to use (if parameter 1 is a string) |
|
123 | - * @return boolean true on success, false otherwise |
|
124 | - */ |
|
125 | - public function set_parameter($option, $value = false) |
|
126 | - { |
|
127 | - if (!is_array($option)) { |
|
128 | - $option = array($option => $value); |
|
129 | - } |
|
130 | - foreach ($option as $k => $v) { |
|
131 | - switch ($k) { |
|
132 | - case 'encoding': |
|
133 | - switch ($v) { |
|
134 | - case 'utf8': |
|
135 | - case 'ucs4_string': |
|
136 | - case 'ucs4_array': |
|
137 | - $this->_api_encoding = $v; |
|
138 | - break; |
|
139 | - default: |
|
140 | - $this->_error('Set Parameter: Unknown parameter '.$v.' for option '.$k); |
|
141 | - return false; |
|
142 | - } |
|
143 | - break; |
|
144 | - case 'overlong': |
|
145 | - $this->_allow_overlong = ($v) ? true : false; |
|
146 | - break; |
|
147 | - case 'strict': |
|
148 | - $this->_strict_mode = ($v) ? true : false; |
|
149 | - break; |
|
150 | - case 'idn_version': |
|
151 | - if (in_array($v, array('2003', '2008'))) { |
|
152 | - $this->_idn_version = $v; |
|
153 | - } else { |
|
154 | - $this->_error('Set Parameter: Unknown parameter '.$v.' for option '.$k); |
|
155 | - } |
|
156 | - break; |
|
157 | - case 'encode_german_sz': // Deprecated |
|
158 | - if (!$v) { |
|
159 | - self::$NP['replacemaps'][0xDF] = array(0x73, 0x73); |
|
160 | - } else { |
|
161 | - unset(self::$NP['replacemaps'][0xDF]); |
|
162 | - } |
|
163 | - break; |
|
164 | - default: |
|
165 | - $this->_error('Set Parameter: Unknown option '.$k); |
|
166 | - return false; |
|
167 | - } |
|
168 | - } |
|
169 | - return true; |
|
170 | - } |
|
110 | + /** |
|
111 | + * Sets a new option value. Available options and values: |
|
112 | + * [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8, |
|
113 | + * 'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8] |
|
114 | + * [overlong - Unicode does not allow unnecessarily long encodings of chars, |
|
115 | + * to allow this, set this parameter to true, else to false; |
|
116 | + * default is false.] |
|
117 | + * [strict - true: strict mode, good for registration purposes - Causes errors |
|
118 | + * on failures; false: loose mode, ideal for "wildlife" applications |
|
119 | + * by silently ignoring errors and returning the original input instead |
|
120 | + * |
|
121 | + * @param mixed Parameter to set (string: single parameter; array of Parameter => Value pairs) |
|
122 | + * @param string Value to use (if parameter 1 is a string) |
|
123 | + * @return boolean true on success, false otherwise |
|
124 | + */ |
|
125 | + public function set_parameter($option, $value = false) |
|
126 | + { |
|
127 | + if (!is_array($option)) { |
|
128 | + $option = array($option => $value); |
|
129 | + } |
|
130 | + foreach ($option as $k => $v) { |
|
131 | + switch ($k) { |
|
132 | + case 'encoding': |
|
133 | + switch ($v) { |
|
134 | + case 'utf8': |
|
135 | + case 'ucs4_string': |
|
136 | + case 'ucs4_array': |
|
137 | + $this->_api_encoding = $v; |
|
138 | + break; |
|
139 | + default: |
|
140 | + $this->_error('Set Parameter: Unknown parameter '.$v.' for option '.$k); |
|
141 | + return false; |
|
142 | + } |
|
143 | + break; |
|
144 | + case 'overlong': |
|
145 | + $this->_allow_overlong = ($v) ? true : false; |
|
146 | + break; |
|
147 | + case 'strict': |
|
148 | + $this->_strict_mode = ($v) ? true : false; |
|
149 | + break; |
|
150 | + case 'idn_version': |
|
151 | + if (in_array($v, array('2003', '2008'))) { |
|
152 | + $this->_idn_version = $v; |
|
153 | + } else { |
|
154 | + $this->_error('Set Parameter: Unknown parameter '.$v.' for option '.$k); |
|
155 | + } |
|
156 | + break; |
|
157 | + case 'encode_german_sz': // Deprecated |
|
158 | + if (!$v) { |
|
159 | + self::$NP['replacemaps'][0xDF] = array(0x73, 0x73); |
|
160 | + } else { |
|
161 | + unset(self::$NP['replacemaps'][0xDF]); |
|
162 | + } |
|
163 | + break; |
|
164 | + default: |
|
165 | + $this->_error('Set Parameter: Unknown option '.$k); |
|
166 | + return false; |
|
167 | + } |
|
168 | + } |
|
169 | + return true; |
|
170 | + } |
|
171 | 171 | |
172 | - /** |
|
173 | - * Decode a given ACE domain name |
|
174 | - * @param string Domain name (ACE string) |
|
175 | - * [@param string Desired output encoding, see {@link set_parameter}] |
|
176 | - * @return string Decoded Domain name (UTF-8 or UCS-4) |
|
177 | - */ |
|
178 | - public function decode($input, $one_time_encoding = false) |
|
179 | - { |
|
180 | - // Optionally set |
|
181 | - if ($one_time_encoding) { |
|
182 | - switch ($one_time_encoding) { |
|
183 | - case 'utf8': |
|
184 | - case 'ucs4_string': |
|
185 | - case 'ucs4_array': |
|
186 | - break; |
|
187 | - default: |
|
188 | - $this->_error('Unknown encoding '.$one_time_encoding); |
|
189 | - return false; |
|
190 | - } |
|
191 | - } |
|
192 | - // Make sure to drop any newline characters around |
|
193 | - $input = trim($input); |
|
172 | + /** |
|
173 | + * Decode a given ACE domain name |
|
174 | + * @param string Domain name (ACE string) |
|
175 | + * [@param string Desired output encoding, see {@link set_parameter}] |
|
176 | + * @return string Decoded Domain name (UTF-8 or UCS-4) |
|
177 | + */ |
|
178 | + public function decode($input, $one_time_encoding = false) |
|
179 | + { |
|
180 | + // Optionally set |
|
181 | + if ($one_time_encoding) { |
|
182 | + switch ($one_time_encoding) { |
|
183 | + case 'utf8': |
|
184 | + case 'ucs4_string': |
|
185 | + case 'ucs4_array': |
|
186 | + break; |
|
187 | + default: |
|
188 | + $this->_error('Unknown encoding '.$one_time_encoding); |
|
189 | + return false; |
|
190 | + } |
|
191 | + } |
|
192 | + // Make sure to drop any newline characters around |
|
193 | + $input = trim($input); |
|
194 | 194 | |
195 | - // Negotiate input and try to determine, whether it is a plain string, |
|
196 | - // an email address or something like a complete URL |
|
197 | - if (strpos($input, '@')) { // Maybe it is an email address |
|
198 | - // No no in strict mode |
|
199 | - if ($this->_strict_mode) { |
|
200 | - $this->_error('Only simple domain name parts can be handled in strict mode'); |
|
201 | - return false; |
|
202 | - } |
|
203 | - list ($email_pref, $input) = explode('@', $input, 2); |
|
204 | - $arr = explode('.', $input); |
|
205 | - foreach ($arr as $k => $v) { |
|
206 | - if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) { |
|
207 | - $conv = $this->_decode($v); |
|
208 | - if ($conv) $arr[$k] = $conv; |
|
209 | - } |
|
210 | - } |
|
211 | - $input = join('.', $arr); |
|
212 | - $arr = explode('.', $email_pref); |
|
213 | - foreach ($arr as $k => $v) { |
|
214 | - if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) { |
|
215 | - $conv = $this->_decode($v); |
|
216 | - if ($conv) $arr[$k] = $conv; |
|
217 | - } |
|
218 | - } |
|
219 | - $email_pref = join('.', $arr); |
|
220 | - $return = $email_pref . '@' . $input; |
|
221 | - } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters) |
|
222 | - // No no in strict mode |
|
223 | - if ($this->_strict_mode) { |
|
224 | - $this->_error('Only simple domain name parts can be handled in strict mode'); |
|
225 | - return false; |
|
226 | - } |
|
227 | - $parsed = parse_url($input); |
|
228 | - if (isset($parsed['host'])) { |
|
229 | - $arr = explode('.', $parsed['host']); |
|
230 | - foreach ($arr as $k => $v) { |
|
231 | - $conv = $this->_decode($v); |
|
232 | - if ($conv) $arr[$k] = $conv; |
|
233 | - } |
|
234 | - $parsed['host'] = join('.', $arr); |
|
235 | - $return = |
|
236 | - (empty($parsed['scheme']) ? '' : $parsed['scheme'].(strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')) |
|
237 | - .(empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@') |
|
238 | - .$parsed['host'] |
|
239 | - .(empty($parsed['port']) ? '' : ':'.$parsed['port']) |
|
240 | - .(empty($parsed['path']) ? '' : $parsed['path']) |
|
241 | - .(empty($parsed['query']) ? '' : '?'.$parsed['query']) |
|
242 | - .(empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']); |
|
243 | - } else { // parse_url seems to have failed, try without it |
|
244 | - $arr = explode('.', $input); |
|
245 | - foreach ($arr as $k => $v) { |
|
246 | - $conv = $this->_decode($v); |
|
247 | - $arr[$k] = ($conv) ? $conv : $v; |
|
248 | - } |
|
249 | - $return = join('.', $arr); |
|
250 | - } |
|
251 | - } else { // Otherwise we consider it being a pure domain name string |
|
252 | - $return = $this->_decode($input); |
|
253 | - if (!$return) $return = $input; |
|
254 | - } |
|
255 | - // The output is UTF-8 by default, other output formats need conversion here |
|
256 | - // If one time encoding is given, use this, else the objects property |
|
257 | - switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) { |
|
258 | - case 'utf8': |
|
259 | - return $return; |
|
260 | - break; |
|
261 | - case 'ucs4_string': |
|
262 | - return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return)); |
|
263 | - break; |
|
264 | - case 'ucs4_array': |
|
265 | - return $this->_utf8_to_ucs4($return); |
|
266 | - break; |
|
267 | - default: |
|
268 | - $this->_error('Unsupported output format'); |
|
269 | - return false; |
|
270 | - } |
|
271 | - } |
|
195 | + // Negotiate input and try to determine, whether it is a plain string, |
|
196 | + // an email address or something like a complete URL |
|
197 | + if (strpos($input, '@')) { // Maybe it is an email address |
|
198 | + // No no in strict mode |
|
199 | + if ($this->_strict_mode) { |
|
200 | + $this->_error('Only simple domain name parts can be handled in strict mode'); |
|
201 | + return false; |
|
202 | + } |
|
203 | + list ($email_pref, $input) = explode('@', $input, 2); |
|
204 | + $arr = explode('.', $input); |
|
205 | + foreach ($arr as $k => $v) { |
|
206 | + if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) { |
|
207 | + $conv = $this->_decode($v); |
|
208 | + if ($conv) $arr[$k] = $conv; |
|
209 | + } |
|
210 | + } |
|
211 | + $input = join('.', $arr); |
|
212 | + $arr = explode('.', $email_pref); |
|
213 | + foreach ($arr as $k => $v) { |
|
214 | + if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) { |
|
215 | + $conv = $this->_decode($v); |
|
216 | + if ($conv) $arr[$k] = $conv; |
|
217 | + } |
|
218 | + } |
|
219 | + $email_pref = join('.', $arr); |
|
220 | + $return = $email_pref . '@' . $input; |
|
221 | + } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters) |
|
222 | + // No no in strict mode |
|
223 | + if ($this->_strict_mode) { |
|
224 | + $this->_error('Only simple domain name parts can be handled in strict mode'); |
|
225 | + return false; |
|
226 | + } |
|
227 | + $parsed = parse_url($input); |
|
228 | + if (isset($parsed['host'])) { |
|
229 | + $arr = explode('.', $parsed['host']); |
|
230 | + foreach ($arr as $k => $v) { |
|
231 | + $conv = $this->_decode($v); |
|
232 | + if ($conv) $arr[$k] = $conv; |
|
233 | + } |
|
234 | + $parsed['host'] = join('.', $arr); |
|
235 | + $return = |
|
236 | + (empty($parsed['scheme']) ? '' : $parsed['scheme'].(strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')) |
|
237 | + .(empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@') |
|
238 | + .$parsed['host'] |
|
239 | + .(empty($parsed['port']) ? '' : ':'.$parsed['port']) |
|
240 | + .(empty($parsed['path']) ? '' : $parsed['path']) |
|
241 | + .(empty($parsed['query']) ? '' : '?'.$parsed['query']) |
|
242 | + .(empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']); |
|
243 | + } else { // parse_url seems to have failed, try without it |
|
244 | + $arr = explode('.', $input); |
|
245 | + foreach ($arr as $k => $v) { |
|
246 | + $conv = $this->_decode($v); |
|
247 | + $arr[$k] = ($conv) ? $conv : $v; |
|
248 | + } |
|
249 | + $return = join('.', $arr); |
|
250 | + } |
|
251 | + } else { // Otherwise we consider it being a pure domain name string |
|
252 | + $return = $this->_decode($input); |
|
253 | + if (!$return) $return = $input; |
|
254 | + } |
|
255 | + // The output is UTF-8 by default, other output formats need conversion here |
|
256 | + // If one time encoding is given, use this, else the objects property |
|
257 | + switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) { |
|
258 | + case 'utf8': |
|
259 | + return $return; |
|
260 | + break; |
|
261 | + case 'ucs4_string': |
|
262 | + return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return)); |
|
263 | + break; |
|
264 | + case 'ucs4_array': |
|
265 | + return $this->_utf8_to_ucs4($return); |
|
266 | + break; |
|
267 | + default: |
|
268 | + $this->_error('Unsupported output format'); |
|
269 | + return false; |
|
270 | + } |
|
271 | + } |
|
272 | 272 | |
273 | - /** |
|
274 | - * Encode a given UTF-8 domain name |
|
275 | - * @param string Domain name (UTF-8 or UCS-4) |
|
276 | - * [@param string Desired input encoding, see {@link set_parameter}] |
|
277 | - * @return string Encoded Domain name (ACE string) |
|
278 | - */ |
|
279 | - public function encode($decoded, $one_time_encoding = false) |
|
280 | - { |
|
281 | - // Forcing conversion of input to UCS4 array |
|
282 | - // If one time encoding is given, use this, else the objects property |
|
283 | - switch ($one_time_encoding ? $one_time_encoding : $this->_api_encoding) { |
|
284 | - case 'utf8': |
|
285 | - $decoded = $this->_utf8_to_ucs4($decoded); |
|
286 | - break; |
|
287 | - case 'ucs4_string': |
|
288 | - $decoded = $this->_ucs4_string_to_ucs4($decoded); |
|
289 | - case 'ucs4_array': |
|
290 | - break; |
|
291 | - default: |
|
292 | - $this->_error('Unsupported input format: '.($one_time_encoding ? $one_time_encoding : $this->_api_encoding)); |
|
293 | - return false; |
|
294 | - } |
|
273 | + /** |
|
274 | + * Encode a given UTF-8 domain name |
|
275 | + * @param string Domain name (UTF-8 or UCS-4) |
|
276 | + * [@param string Desired input encoding, see {@link set_parameter}] |
|
277 | + * @return string Encoded Domain name (ACE string) |
|
278 | + */ |
|
279 | + public function encode($decoded, $one_time_encoding = false) |
|
280 | + { |
|
281 | + // Forcing conversion of input to UCS4 array |
|
282 | + // If one time encoding is given, use this, else the objects property |
|
283 | + switch ($one_time_encoding ? $one_time_encoding : $this->_api_encoding) { |
|
284 | + case 'utf8': |
|
285 | + $decoded = $this->_utf8_to_ucs4($decoded); |
|
286 | + break; |
|
287 | + case 'ucs4_string': |
|
288 | + $decoded = $this->_ucs4_string_to_ucs4($decoded); |
|
289 | + case 'ucs4_array': |
|
290 | + break; |
|
291 | + default: |
|
292 | + $this->_error('Unsupported input format: '.($one_time_encoding ? $one_time_encoding : $this->_api_encoding)); |
|
293 | + return false; |
|
294 | + } |
|
295 | 295 | |
296 | - // No input, no output, what else did you expect? |
|
297 | - if (empty($decoded)) return ''; |
|
296 | + // No input, no output, what else did you expect? |
|
297 | + if (empty($decoded)) return ''; |
|
298 | 298 | |
299 | - // Anchors for iteration |
|
300 | - $last_begin = 0; |
|
301 | - // Output string |
|
302 | - $output = ''; |
|
303 | - foreach ($decoded as $k => $v) { |
|
304 | - // Make sure to use just the plain dot |
|
305 | - switch($v) { |
|
306 | - case 0x3002: |
|
307 | - case 0xFF0E: |
|
308 | - case 0xFF61: |
|
309 | - $decoded[$k] = 0x2E; |
|
310 | - // Right, no break here, the above are converted to dots anyway |
|
311 | - // Stumbling across an anchoring character |
|
312 | - case 0x2E: |
|
313 | - case 0x2F: |
|
314 | - case 0x3A: |
|
315 | - case 0x3F: |
|
316 | - case 0x40: |
|
317 | - // Neither email addresses nor URLs allowed in strict mode |
|
318 | - if ($this->_strict_mode) { |
|
319 | - $this->_error('Neither email addresses nor URLs are allowed in strict mode.'); |
|
320 | - return false; |
|
321 | - } else { |
|
322 | - // Skip first char |
|
323 | - if ($k) { |
|
324 | - $encoded = ''; |
|
325 | - $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k)-$last_begin))); |
|
326 | - if ($encoded) { |
|
327 | - $output .= $encoded; |
|
328 | - } else { |
|
329 | - $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k)-$last_begin))); |
|
330 | - } |
|
331 | - $output .= chr($decoded[$k]); |
|
332 | - } |
|
333 | - $last_begin = $k + 1; |
|
334 | - } |
|
335 | - } |
|
336 | - } |
|
337 | - // Catch the rest of the string |
|
338 | - if ($last_begin) { |
|
339 | - $inp_len = sizeof($decoded); |
|
340 | - $encoded = ''; |
|
341 | - $encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len)-$last_begin))); |
|
342 | - if ($encoded) { |
|
343 | - $output .= $encoded; |
|
344 | - } else { |
|
345 | - $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len)-$last_begin))); |
|
346 | - } |
|
347 | - return $output; |
|
348 | - } else { |
|
349 | - if ($output = $this->_encode($decoded)) { |
|
350 | - return $output; |
|
351 | - } else { |
|
352 | - return $this->_ucs4_to_utf8($decoded); |
|
353 | - } |
|
354 | - } |
|
355 | - } |
|
299 | + // Anchors for iteration |
|
300 | + $last_begin = 0; |
|
301 | + // Output string |
|
302 | + $output = ''; |
|
303 | + foreach ($decoded as $k => $v) { |
|
304 | + // Make sure to use just the plain dot |
|
305 | + switch($v) { |
|
306 | + case 0x3002: |
|
307 | + case 0xFF0E: |
|
308 | + case 0xFF61: |
|
309 | + $decoded[$k] = 0x2E; |
|
310 | + // Right, no break here, the above are converted to dots anyway |
|
311 | + // Stumbling across an anchoring character |
|
312 | + case 0x2E: |
|
313 | + case 0x2F: |
|
314 | + case 0x3A: |
|
315 | + case 0x3F: |
|
316 | + case 0x40: |
|
317 | + // Neither email addresses nor URLs allowed in strict mode |
|
318 | + if ($this->_strict_mode) { |
|
319 | + $this->_error('Neither email addresses nor URLs are allowed in strict mode.'); |
|
320 | + return false; |
|
321 | + } else { |
|
322 | + // Skip first char |
|
323 | + if ($k) { |
|
324 | + $encoded = ''; |
|
325 | + $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k)-$last_begin))); |
|
326 | + if ($encoded) { |
|
327 | + $output .= $encoded; |
|
328 | + } else { |
|
329 | + $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k)-$last_begin))); |
|
330 | + } |
|
331 | + $output .= chr($decoded[$k]); |
|
332 | + } |
|
333 | + $last_begin = $k + 1; |
|
334 | + } |
|
335 | + } |
|
336 | + } |
|
337 | + // Catch the rest of the string |
|
338 | + if ($last_begin) { |
|
339 | + $inp_len = sizeof($decoded); |
|
340 | + $encoded = ''; |
|
341 | + $encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len)-$last_begin))); |
|
342 | + if ($encoded) { |
|
343 | + $output .= $encoded; |
|
344 | + } else { |
|
345 | + $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len)-$last_begin))); |
|
346 | + } |
|
347 | + return $output; |
|
348 | + } else { |
|
349 | + if ($output = $this->_encode($decoded)) { |
|
350 | + return $output; |
|
351 | + } else { |
|
352 | + return $this->_ucs4_to_utf8($decoded); |
|
353 | + } |
|
354 | + } |
|
355 | + } |
|
356 | 356 | |
357 | - /** |
|
358 | - * Removes a weakness of encode(), which cannot properly handle URIs but instead encodes their |
|
359 | - * path or query components, too. |
|
360 | - * @param string $uri Expects the URI as a UTF-8 (or ASCII) string |
|
361 | - * @return string The URI encoded to Punycode, everything but the host component is left alone |
|
362 | - * @since 0.6.4 |
|
363 | - */ |
|
364 | - public function encode_uri($uri) |
|
365 | - { |
|
366 | - $parsed = parse_url($uri); |
|
367 | - if (!isset($parsed['host'])) { |
|
368 | - $this->_error('The given string does not look like a URI'); |
|
369 | - return false; |
|
370 | - } |
|
371 | - $arr = explode('.', $parsed['host']); |
|
372 | - foreach ($arr as $k => $v) { |
|
373 | - $conv = $this->encode($v, 'utf8'); |
|
374 | - if ($conv) $arr[$k] = $conv; |
|
375 | - } |
|
376 | - $parsed['host'] = join('.', $arr); |
|
377 | - $return = |
|
378 | - (empty($parsed['scheme']) ? '' : $parsed['scheme'].(strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')) |
|
379 | - .(empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@') |
|
380 | - .$parsed['host'] |
|
381 | - .(empty($parsed['port']) ? '' : ':'.$parsed['port']) |
|
382 | - .(empty($parsed['path']) ? '' : $parsed['path']) |
|
383 | - .(empty($parsed['query']) ? '' : '?'.$parsed['query']) |
|
384 | - .(empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']); |
|
385 | - return $return; |
|
386 | - } |
|
357 | + /** |
|
358 | + * Removes a weakness of encode(), which cannot properly handle URIs but instead encodes their |
|
359 | + * path or query components, too. |
|
360 | + * @param string $uri Expects the URI as a UTF-8 (or ASCII) string |
|
361 | + * @return string The URI encoded to Punycode, everything but the host component is left alone |
|
362 | + * @since 0.6.4 |
|
363 | + */ |
|
364 | + public function encode_uri($uri) |
|
365 | + { |
|
366 | + $parsed = parse_url($uri); |
|
367 | + if (!isset($parsed['host'])) { |
|
368 | + $this->_error('The given string does not look like a URI'); |
|
369 | + return false; |
|
370 | + } |
|
371 | + $arr = explode('.', $parsed['host']); |
|
372 | + foreach ($arr as $k => $v) { |
|
373 | + $conv = $this->encode($v, 'utf8'); |
|
374 | + if ($conv) $arr[$k] = $conv; |
|
375 | + } |
|
376 | + $parsed['host'] = join('.', $arr); |
|
377 | + $return = |
|
378 | + (empty($parsed['scheme']) ? '' : $parsed['scheme'].(strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')) |
|
379 | + .(empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@') |
|
380 | + .$parsed['host'] |
|
381 | + .(empty($parsed['port']) ? '' : ':'.$parsed['port']) |
|
382 | + .(empty($parsed['path']) ? '' : $parsed['path']) |
|
383 | + .(empty($parsed['query']) ? '' : '?'.$parsed['query']) |
|
384 | + .(empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']); |
|
385 | + return $return; |
|
386 | + } |
|
387 | 387 | |
388 | - /** |
|
389 | - * Use this method to get the last error ocurred |
|
390 | - * @param void |
|
391 | - * @return string The last error, that occured |
|
392 | - */ |
|
393 | - public function get_last_error() |
|
394 | - { |
|
395 | - return $this->_error; |
|
396 | - } |
|
388 | + /** |
|
389 | + * Use this method to get the last error ocurred |
|
390 | + * @param void |
|
391 | + * @return string The last error, that occured |
|
392 | + */ |
|
393 | + public function get_last_error() |
|
394 | + { |
|
395 | + return $this->_error; |
|
396 | + } |
|
397 | 397 | |
398 | - /** |
|
399 | - * The actual decoding algorithm |
|
400 | - * @param string |
|
401 | - * @return mixed |
|
402 | - */ |
|
403 | - protected function _decode($encoded) |
|
404 | - { |
|
405 | - $decoded = array(); |
|
406 | - // find the Punycode prefix |
|
407 | - if (!preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $encoded)) { |
|
408 | - $this->_error('This is not a punycode string'); |
|
409 | - return false; |
|
410 | - } |
|
411 | - $encode_test = preg_replace('!^'.preg_quote($this->_punycode_prefix, '!').'!', '', $encoded); |
|
412 | - // If nothing left after removing the prefix, it is hopeless |
|
413 | - if (!$encode_test) { |
|
414 | - $this->_error('The given encoded string was empty'); |
|
415 | - return false; |
|
416 | - } |
|
417 | - // Find last occurence of the delimiter |
|
418 | - $delim_pos = strrpos($encoded, '-'); |
|
419 | - if ($delim_pos > self::byteLength($this->_punycode_prefix)) { |
|
420 | - for ($k = self::byteLength($this->_punycode_prefix); $k < $delim_pos; ++$k) { |
|
421 | - $decoded[] = ord($encoded{$k}); |
|
422 | - } |
|
423 | - } |
|
424 | - $deco_len = count($decoded); |
|
425 | - $enco_len = self::byteLength($encoded); |
|
398 | + /** |
|
399 | + * The actual decoding algorithm |
|
400 | + * @param string |
|
401 | + * @return mixed |
|
402 | + */ |
|
403 | + protected function _decode($encoded) |
|
404 | + { |
|
405 | + $decoded = array(); |
|
406 | + // find the Punycode prefix |
|
407 | + if (!preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $encoded)) { |
|
408 | + $this->_error('This is not a punycode string'); |
|
409 | + return false; |
|
410 | + } |
|
411 | + $encode_test = preg_replace('!^'.preg_quote($this->_punycode_prefix, '!').'!', '', $encoded); |
|
412 | + // If nothing left after removing the prefix, it is hopeless |
|
413 | + if (!$encode_test) { |
|
414 | + $this->_error('The given encoded string was empty'); |
|
415 | + return false; |
|
416 | + } |
|
417 | + // Find last occurence of the delimiter |
|
418 | + $delim_pos = strrpos($encoded, '-'); |
|
419 | + if ($delim_pos > self::byteLength($this->_punycode_prefix)) { |
|
420 | + for ($k = self::byteLength($this->_punycode_prefix); $k < $delim_pos; ++$k) { |
|
421 | + $decoded[] = ord($encoded{$k}); |
|
422 | + } |
|
423 | + } |
|
424 | + $deco_len = count($decoded); |
|
425 | + $enco_len = self::byteLength($encoded); |
|
426 | 426 | |
427 | - // Wandering through the strings; init |
|
428 | - $is_first = true; |
|
429 | - $bias = $this->_initial_bias; |
|
430 | - $idx = 0; |
|
431 | - $char = $this->_initial_n; |
|
427 | + // Wandering through the strings; init |
|
428 | + $is_first = true; |
|
429 | + $bias = $this->_initial_bias; |
|
430 | + $idx = 0; |
|
431 | + $char = $this->_initial_n; |
|
432 | 432 | |
433 | - for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) { |
|
434 | - for ($old_idx = $idx, $w = 1, $k = $this->_base; 1 ; $k += $this->_base) { |
|
435 | - $digit = $this->_decode_digit($encoded{$enco_idx++}); |
|
436 | - $idx += $digit * $w; |
|
437 | - $t = ($k <= $bias) ? $this->_tmin : |
|
438 | - (($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias)); |
|
439 | - if ($digit < $t) break; |
|
440 | - $w = (int) ($w * ($this->_base - $t)); |
|
441 | - } |
|
442 | - $bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first); |
|
443 | - $is_first = false; |
|
444 | - $char += (int) ($idx / ($deco_len + 1)); |
|
445 | - $idx %= ($deco_len + 1); |
|
446 | - if ($deco_len > 0) { |
|
447 | - // Make room for the decoded char |
|
448 | - for ($i = $deco_len; $i > $idx; $i--) $decoded[$i] = $decoded[($i - 1)]; |
|
449 | - } |
|
450 | - $decoded[$idx++] = $char; |
|
451 | - } |
|
452 | - return $this->_ucs4_to_utf8($decoded); |
|
453 | - } |
|
433 | + for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) { |
|
434 | + for ($old_idx = $idx, $w = 1, $k = $this->_base; 1 ; $k += $this->_base) { |
|
435 | + $digit = $this->_decode_digit($encoded{$enco_idx++}); |
|
436 | + $idx += $digit * $w; |
|
437 | + $t = ($k <= $bias) ? $this->_tmin : |
|
438 | + (($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias)); |
|
439 | + if ($digit < $t) break; |
|
440 | + $w = (int) ($w * ($this->_base - $t)); |
|
441 | + } |
|
442 | + $bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first); |
|
443 | + $is_first = false; |
|
444 | + $char += (int) ($idx / ($deco_len + 1)); |
|
445 | + $idx %= ($deco_len + 1); |
|
446 | + if ($deco_len > 0) { |
|
447 | + // Make room for the decoded char |
|
448 | + for ($i = $deco_len; $i > $idx; $i--) $decoded[$i] = $decoded[($i - 1)]; |
|
449 | + } |
|
450 | + $decoded[$idx++] = $char; |
|
451 | + } |
|
452 | + return $this->_ucs4_to_utf8($decoded); |
|
453 | + } |
|
454 | 454 | |
455 | - /** |
|
456 | - * The actual encoding algorithm |
|
457 | - * @param string |
|
458 | - * @return mixed |
|
459 | - */ |
|
460 | - protected function _encode($decoded) |
|
461 | - { |
|
462 | - // We cannot encode a domain name containing the Punycode prefix |
|
463 | - $extract = self::byteLength($this->_punycode_prefix); |
|
464 | - $check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix); |
|
465 | - $check_deco = array_slice($decoded, 0, $extract); |
|
455 | + /** |
|
456 | + * The actual encoding algorithm |
|
457 | + * @param string |
|
458 | + * @return mixed |
|
459 | + */ |
|
460 | + protected function _encode($decoded) |
|
461 | + { |
|
462 | + // We cannot encode a domain name containing the Punycode prefix |
|
463 | + $extract = self::byteLength($this->_punycode_prefix); |
|
464 | + $check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix); |
|
465 | + $check_deco = array_slice($decoded, 0, $extract); |
|
466 | 466 | |
467 | - if ($check_pref == $check_deco) { |
|
468 | - $this->_error('This is already a punycode string'); |
|
469 | - return false; |
|
470 | - } |
|
471 | - // We will not try to encode strings consisting of basic code points only |
|
472 | - $encodable = false; |
|
473 | - foreach ($decoded as $k => $v) { |
|
474 | - if ($v > 0x7a) { |
|
475 | - $encodable = true; |
|
476 | - break; |
|
477 | - } |
|
478 | - } |
|
479 | - if (!$encodable) { |
|
480 | - $this->_error('The given string does not contain encodable chars'); |
|
481 | - return false; |
|
482 | - } |
|
483 | - // Do NAMEPREP |
|
484 | - $decoded = $this->_nameprep($decoded); |
|
485 | - if (!$decoded || !is_array($decoded)) return false; // NAMEPREP failed |
|
486 | - $deco_len = count($decoded); |
|
487 | - if (!$deco_len) return false; // Empty array |
|
488 | - $codecount = 0; // How many chars have been consumed |
|
489 | - $encoded = ''; |
|
490 | - // Copy all basic code points to output |
|
491 | - for ($i = 0; $i < $deco_len; ++$i) { |
|
492 | - $test = $decoded[$i]; |
|
493 | - // Will match [-0-9a-zA-Z] |
|
494 | - if ((0x2F < $test && $test < 0x40) || (0x40 < $test && $test < 0x5B) |
|
495 | - || (0x60 < $test && $test <= 0x7B) || (0x2D == $test)) { |
|
496 | - $encoded .= chr($decoded[$i]); |
|
497 | - $codecount++; |
|
498 | - } |
|
499 | - } |
|
500 | - if ($codecount == $deco_len) return $encoded; // All codepoints were basic ones |
|
467 | + if ($check_pref == $check_deco) { |
|
468 | + $this->_error('This is already a punycode string'); |
|
469 | + return false; |
|
470 | + } |
|
471 | + // We will not try to encode strings consisting of basic code points only |
|
472 | + $encodable = false; |
|
473 | + foreach ($decoded as $k => $v) { |
|
474 | + if ($v > 0x7a) { |
|
475 | + $encodable = true; |
|
476 | + break; |
|
477 | + } |
|
478 | + } |
|
479 | + if (!$encodable) { |
|
480 | + $this->_error('The given string does not contain encodable chars'); |
|
481 | + return false; |
|
482 | + } |
|
483 | + // Do NAMEPREP |
|
484 | + $decoded = $this->_nameprep($decoded); |
|
485 | + if (!$decoded || !is_array($decoded)) return false; // NAMEPREP failed |
|
486 | + $deco_len = count($decoded); |
|
487 | + if (!$deco_len) return false; // Empty array |
|
488 | + $codecount = 0; // How many chars have been consumed |
|
489 | + $encoded = ''; |
|
490 | + // Copy all basic code points to output |
|
491 | + for ($i = 0; $i < $deco_len; ++$i) { |
|
492 | + $test = $decoded[$i]; |
|
493 | + // Will match [-0-9a-zA-Z] |
|
494 | + if ((0x2F < $test && $test < 0x40) || (0x40 < $test && $test < 0x5B) |
|
495 | + || (0x60 < $test && $test <= 0x7B) || (0x2D == $test)) { |
|
496 | + $encoded .= chr($decoded[$i]); |
|
497 | + $codecount++; |
|
498 | + } |
|
499 | + } |
|
500 | + if ($codecount == $deco_len) return $encoded; // All codepoints were basic ones |
|
501 | 501 | |
502 | - // Start with the prefix; copy it to output |
|
503 | - $encoded = $this->_punycode_prefix.$encoded; |
|
504 | - // If we have basic code points in output, add an hyphen to the end |
|
505 | - if ($codecount) $encoded .= '-'; |
|
506 | - // Now find and encode all non-basic code points |
|
507 | - $is_first = true; |
|
508 | - $cur_code = $this->_initial_n; |
|
509 | - $bias = $this->_initial_bias; |
|
510 | - $delta = 0; |
|
511 | - while ($codecount < $deco_len) { |
|
512 | - // Find the smallest code point >= the current code point and |
|
513 | - // remember the last ouccrence of it in the input |
|
514 | - for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) { |
|
515 | - if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) { |
|
516 | - $next_code = $decoded[$i]; |
|
517 | - } |
|
518 | - } |
|
519 | - $delta += ($next_code - $cur_code) * ($codecount + 1); |
|
520 | - $cur_code = $next_code; |
|
502 | + // Start with the prefix; copy it to output |
|
503 | + $encoded = $this->_punycode_prefix.$encoded; |
|
504 | + // If we have basic code points in output, add an hyphen to the end |
|
505 | + if ($codecount) $encoded .= '-'; |
|
506 | + // Now find and encode all non-basic code points |
|
507 | + $is_first = true; |
|
508 | + $cur_code = $this->_initial_n; |
|
509 | + $bias = $this->_initial_bias; |
|
510 | + $delta = 0; |
|
511 | + while ($codecount < $deco_len) { |
|
512 | + // Find the smallest code point >= the current code point and |
|
513 | + // remember the last ouccrence of it in the input |
|
514 | + for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) { |
|
515 | + if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) { |
|
516 | + $next_code = $decoded[$i]; |
|
517 | + } |
|
518 | + } |
|
519 | + $delta += ($next_code - $cur_code) * ($codecount + 1); |
|
520 | + $cur_code = $next_code; |
|
521 | 521 | |
522 | - // Scan input again and encode all characters whose code point is $cur_code |
|
523 | - for ($i = 0; $i < $deco_len; $i++) { |
|
524 | - if ($decoded[$i] < $cur_code) { |
|
525 | - $delta++; |
|
526 | - } elseif ($decoded[$i] == $cur_code) { |
|
527 | - for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) { |
|
528 | - $t = ($k <= $bias) ? $this->_tmin : |
|
529 | - (($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias); |
|
530 | - if ($q < $t) break; |
|
531 | - $encoded .= $this->_encode_digit(intval($t + (($q - $t) % ($this->_base - $t)))); //v0.4.5 Changed from ceil() to intval() |
|
532 | - $q = (int) (($q - $t) / ($this->_base - $t)); |
|
533 | - } |
|
534 | - $encoded .= $this->_encode_digit($q); |
|
535 | - $bias = $this->_adapt($delta, $codecount+1, $is_first); |
|
536 | - $codecount++; |
|
537 | - $delta = 0; |
|
538 | - $is_first = false; |
|
539 | - } |
|
540 | - } |
|
541 | - $delta++; |
|
542 | - $cur_code++; |
|
543 | - } |
|
544 | - return $encoded; |
|
545 | - } |
|
522 | + // Scan input again and encode all characters whose code point is $cur_code |
|
523 | + for ($i = 0; $i < $deco_len; $i++) { |
|
524 | + if ($decoded[$i] < $cur_code) { |
|
525 | + $delta++; |
|
526 | + } elseif ($decoded[$i] == $cur_code) { |
|
527 | + for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) { |
|
528 | + $t = ($k <= $bias) ? $this->_tmin : |
|
529 | + (($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias); |
|
530 | + if ($q < $t) break; |
|
531 | + $encoded .= $this->_encode_digit(intval($t + (($q - $t) % ($this->_base - $t)))); //v0.4.5 Changed from ceil() to intval() |
|
532 | + $q = (int) (($q - $t) / ($this->_base - $t)); |
|
533 | + } |
|
534 | + $encoded .= $this->_encode_digit($q); |
|
535 | + $bias = $this->_adapt($delta, $codecount+1, $is_first); |
|
536 | + $codecount++; |
|
537 | + $delta = 0; |
|
538 | + $is_first = false; |
|
539 | + } |
|
540 | + } |
|
541 | + $delta++; |
|
542 | + $cur_code++; |
|
543 | + } |
|
544 | + return $encoded; |
|
545 | + } |
|
546 | 546 | |
547 | - /** |
|
548 | - * Adapt the bias according to the current code point and position |
|
549 | - * @param int $delta |
|
550 | - * @param int $npoints |
|
551 | - * @param int $is_first |
|
552 | - * @return int |
|
553 | - */ |
|
554 | - protected function _adapt($delta, $npoints, $is_first) |
|
555 | - { |
|
556 | - $delta = intval($is_first ? ($delta / $this->_damp) : ($delta / 2)); |
|
557 | - $delta += intval($delta / $npoints); |
|
558 | - for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) { |
|
559 | - $delta = intval($delta / ($this->_base - $this->_tmin)); |
|
560 | - } |
|
561 | - return intval($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew)); |
|
562 | - } |
|
547 | + /** |
|
548 | + * Adapt the bias according to the current code point and position |
|
549 | + * @param int $delta |
|
550 | + * @param int $npoints |
|
551 | + * @param int $is_first |
|
552 | + * @return int |
|
553 | + */ |
|
554 | + protected function _adapt($delta, $npoints, $is_first) |
|
555 | + { |
|
556 | + $delta = intval($is_first ? ($delta / $this->_damp) : ($delta / 2)); |
|
557 | + $delta += intval($delta / $npoints); |
|
558 | + for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) { |
|
559 | + $delta = intval($delta / ($this->_base - $this->_tmin)); |
|
560 | + } |
|
561 | + return intval($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew)); |
|
562 | + } |
|
563 | 563 | |
564 | - /** |
|
565 | - * Encoding a certain digit |
|
566 | - * @param int $d |
|
567 | - * @return string |
|
568 | - */ |
|
569 | - protected function _encode_digit($d) |
|
570 | - { |
|
571 | - return chr($d + 22 + 75 * ($d < 26)); |
|
572 | - } |
|
564 | + /** |
|
565 | + * Encoding a certain digit |
|
566 | + * @param int $d |
|
567 | + * @return string |
|
568 | + */ |
|
569 | + protected function _encode_digit($d) |
|
570 | + { |
|
571 | + return chr($d + 22 + 75 * ($d < 26)); |
|
572 | + } |
|
573 | 573 | |
574 | - /** |
|
575 | - * Decode a certain digit |
|
576 | - * @param int $cp |
|
577 | - * @return int |
|
578 | - */ |
|
579 | - protected function _decode_digit($cp) |
|
580 | - { |
|
581 | - $cp = ord($cp); |
|
582 | - return ($cp - 48 < 10) ? $cp - 22 : (($cp - 65 < 26) ? $cp - 65 : (($cp - 97 < 26) ? $cp - 97 : $this->_base)); |
|
583 | - } |
|
574 | + /** |
|
575 | + * Decode a certain digit |
|
576 | + * @param int $cp |
|
577 | + * @return int |
|
578 | + */ |
|
579 | + protected function _decode_digit($cp) |
|
580 | + { |
|
581 | + $cp = ord($cp); |
|
582 | + return ($cp - 48 < 10) ? $cp - 22 : (($cp - 65 < 26) ? $cp - 65 : (($cp - 97 < 26) ? $cp - 97 : $this->_base)); |
|
583 | + } |
|
584 | 584 | |
585 | - /** |
|
586 | - * Internal error handling method |
|
587 | - * @param string $error |
|
588 | - */ |
|
589 | - protected function _error($error = '') |
|
590 | - { |
|
591 | - $this->_error = $error; |
|
592 | - } |
|
585 | + /** |
|
586 | + * Internal error handling method |
|
587 | + * @param string $error |
|
588 | + */ |
|
589 | + protected function _error($error = '') |
|
590 | + { |
|
591 | + $this->_error = $error; |
|
592 | + } |
|
593 | 593 | |
594 | - /** |
|
595 | - * Do Nameprep according to RFC3491 and RFC3454 |
|
596 | - * @param array Unicode Characters |
|
597 | - * @return string Unicode Characters, Nameprep'd |
|
598 | - */ |
|
599 | - protected function _nameprep($input) |
|
600 | - { |
|
601 | - $output = array(); |
|
602 | - $error = false; |
|
603 | - // |
|
604 | - // Mapping |
|
605 | - // Walking through the input array, performing the required steps on each of |
|
606 | - // the input chars and putting the result into the output array |
|
607 | - // While mapping required chars we apply the cannonical ordering |
|
608 | - foreach ($input as $v) { |
|
609 | - // Map to nothing == skip that code point |
|
610 | - if (in_array($v, self::$NP['map_nothing'])) continue; |
|
611 | - // Try to find prohibited input |
|
612 | - if (in_array($v, self::$NP['prohibit']) || in_array($v, self::$NP['general_prohibited'])) { |
|
613 | - $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v)); |
|
614 | - return false; |
|
615 | - } |
|
616 | - foreach (self::$NP['prohibit_ranges'] as $range) { |
|
617 | - if ($range[0] <= $v && $v <= $range[1]) { |
|
618 | - $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v)); |
|
619 | - return false; |
|
620 | - } |
|
621 | - } |
|
594 | + /** |
|
595 | + * Do Nameprep according to RFC3491 and RFC3454 |
|
596 | + * @param array Unicode Characters |
|
597 | + * @return string Unicode Characters, Nameprep'd |
|
598 | + */ |
|
599 | + protected function _nameprep($input) |
|
600 | + { |
|
601 | + $output = array(); |
|
602 | + $error = false; |
|
603 | + // |
|
604 | + // Mapping |
|
605 | + // Walking through the input array, performing the required steps on each of |
|
606 | + // the input chars and putting the result into the output array |
|
607 | + // While mapping required chars we apply the cannonical ordering |
|
608 | + foreach ($input as $v) { |
|
609 | + // Map to nothing == skip that code point |
|
610 | + if (in_array($v, self::$NP['map_nothing'])) continue; |
|
611 | + // Try to find prohibited input |
|
612 | + if (in_array($v, self::$NP['prohibit']) || in_array($v, self::$NP['general_prohibited'])) { |
|
613 | + $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v)); |
|
614 | + return false; |
|
615 | + } |
|
616 | + foreach (self::$NP['prohibit_ranges'] as $range) { |
|
617 | + if ($range[0] <= $v && $v <= $range[1]) { |
|
618 | + $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v)); |
|
619 | + return false; |
|
620 | + } |
|
621 | + } |
|
622 | 622 | |
623 | - if (0xAC00 <= $v && $v <= 0xD7AF) { |
|
624 | - // Hangul syllable decomposition |
|
625 | - foreach ($this->_hangul_decompose($v) as $out) { |
|
626 | - $output[] = (int) $out; |
|
627 | - } |
|
628 | - } elseif (($this->_idn_version == '2003') && isset(self::$NP['replacemaps'][$v])) { |
|
629 | - // There's a decomposition mapping for that code point |
|
630 | - // Decompositions only in version 2003 (original) of IDNA |
|
631 | - foreach ($this->_apply_cannonical_ordering(self::$NP['replacemaps'][$v]) as $out) { |
|
632 | - $output[] = (int) $out; |
|
633 | - } |
|
634 | - } else { |
|
635 | - $output[] = (int) $v; |
|
636 | - } |
|
637 | - } |
|
638 | - // Before applying any Combining, try to rearrange any Hangul syllables |
|
639 | - $output = $this->_hangul_compose($output); |
|
640 | - // |
|
641 | - // Combine code points |
|
642 | - // |
|
643 | - $last_class = 0; |
|
644 | - $last_starter = 0; |
|
645 | - $out_len = count($output); |
|
646 | - for ($i = 0; $i < $out_len; ++$i) { |
|
647 | - $class = $this->_get_combining_class($output[$i]); |
|
648 | - if ((!$last_class || $last_class > $class) && $class) { |
|
649 | - // Try to match |
|
650 | - $seq_len = $i - $last_starter; |
|
651 | - $out = $this->_combine(array_slice($output, $last_starter, $seq_len)); |
|
652 | - // On match: Replace the last starter with the composed character and remove |
|
653 | - // the now redundant non-starter(s) |
|
654 | - if ($out) { |
|
655 | - $output[$last_starter] = $out; |
|
656 | - if (count($out) != $seq_len) { |
|
657 | - for ($j = $i+1; $j < $out_len; ++$j) $output[$j-1] = $output[$j]; |
|
658 | - unset($output[$out_len]); |
|
659 | - } |
|
660 | - // Rewind the for loop by one, since there can be more possible compositions |
|
661 | - $i--; |
|
662 | - $out_len--; |
|
663 | - $last_class = ($i == $last_starter) ? 0 : $this->_get_combining_class($output[$i-1]); |
|
664 | - continue; |
|
665 | - } |
|
666 | - } |
|
667 | - // The current class is 0 |
|
668 | - if (!$class) $last_starter = $i; |
|
669 | - $last_class = $class; |
|
670 | - } |
|
671 | - return $output; |
|
672 | - } |
|
623 | + if (0xAC00 <= $v && $v <= 0xD7AF) { |
|
624 | + // Hangul syllable decomposition |
|
625 | + foreach ($this->_hangul_decompose($v) as $out) { |
|
626 | + $output[] = (int) $out; |
|
627 | + } |
|
628 | + } elseif (($this->_idn_version == '2003') && isset(self::$NP['replacemaps'][$v])) { |
|
629 | + // There's a decomposition mapping for that code point |
|
630 | + // Decompositions only in version 2003 (original) of IDNA |
|
631 | + foreach ($this->_apply_cannonical_ordering(self::$NP['replacemaps'][$v]) as $out) { |
|
632 | + $output[] = (int) $out; |
|
633 | + } |
|
634 | + } else { |
|
635 | + $output[] = (int) $v; |
|
636 | + } |
|
637 | + } |
|
638 | + // Before applying any Combining, try to rearrange any Hangul syllables |
|
639 | + $output = $this->_hangul_compose($output); |
|
640 | + // |
|
641 | + // Combine code points |
|
642 | + // |
|
643 | + $last_class = 0; |
|
644 | + $last_starter = 0; |
|
645 | + $out_len = count($output); |
|
646 | + for ($i = 0; $i < $out_len; ++$i) { |
|
647 | + $class = $this->_get_combining_class($output[$i]); |
|
648 | + if ((!$last_class || $last_class > $class) && $class) { |
|
649 | + // Try to match |
|
650 | + $seq_len = $i - $last_starter; |
|
651 | + $out = $this->_combine(array_slice($output, $last_starter, $seq_len)); |
|
652 | + // On match: Replace the last starter with the composed character and remove |
|
653 | + // the now redundant non-starter(s) |
|
654 | + if ($out) { |
|
655 | + $output[$last_starter] = $out; |
|
656 | + if (count($out) != $seq_len) { |
|
657 | + for ($j = $i+1; $j < $out_len; ++$j) $output[$j-1] = $output[$j]; |
|
658 | + unset($output[$out_len]); |
|
659 | + } |
|
660 | + // Rewind the for loop by one, since there can be more possible compositions |
|
661 | + $i--; |
|
662 | + $out_len--; |
|
663 | + $last_class = ($i == $last_starter) ? 0 : $this->_get_combining_class($output[$i-1]); |
|
664 | + continue; |
|
665 | + } |
|
666 | + } |
|
667 | + // The current class is 0 |
|
668 | + if (!$class) $last_starter = $i; |
|
669 | + $last_class = $class; |
|
670 | + } |
|
671 | + return $output; |
|
672 | + } |
|
673 | 673 | |
674 | - /** |
|
675 | - * Decomposes a Hangul syllable |
|
676 | - * (see http://www.unicode.org/unicode/reports/tr15/#Hangul |
|
677 | - * @param integer 32bit UCS4 code point |
|
678 | - * @return array Either Hangul Syllable decomposed or original 32bit value as one value array |
|
679 | - */ |
|
680 | - protected function _hangul_decompose($char) |
|
681 | - { |
|
682 | - $sindex = (int) $char - $this->_sbase; |
|
683 | - if ($sindex < 0 || $sindex >= $this->_scount) return array($char); |
|
684 | - $result = array(); |
|
685 | - $result[] = (int) $this->_lbase + $sindex / $this->_ncount; |
|
686 | - $result[] = (int) $this->_vbase + ($sindex % $this->_ncount) / $this->_tcount; |
|
687 | - $T = intval($this->_tbase + $sindex % $this->_tcount); |
|
688 | - if ($T != $this->_tbase) $result[] = $T; |
|
689 | - return $result; |
|
690 | - } |
|
691 | - /** |
|
692 | - * Ccomposes a Hangul syllable |
|
693 | - * (see http://www.unicode.org/unicode/reports/tr15/#Hangul |
|
694 | - * @param array Decomposed UCS4 sequence |
|
695 | - * @return array UCS4 sequence with syllables composed |
|
696 | - */ |
|
697 | - protected function _hangul_compose($input) |
|
698 | - { |
|
699 | - $inp_len = count($input); |
|
700 | - if (!$inp_len) return array(); |
|
701 | - $result = array(); |
|
702 | - $last = (int) $input[0]; |
|
703 | - $result[] = $last; // copy first char from input to output |
|
674 | + /** |
|
675 | + * Decomposes a Hangul syllable |
|
676 | + * (see http://www.unicode.org/unicode/reports/tr15/#Hangul |
|
677 | + * @param integer 32bit UCS4 code point |
|
678 | + * @return array Either Hangul Syllable decomposed or original 32bit value as one value array |
|
679 | + */ |
|
680 | + protected function _hangul_decompose($char) |
|
681 | + { |
|
682 | + $sindex = (int) $char - $this->_sbase; |
|
683 | + if ($sindex < 0 || $sindex >= $this->_scount) return array($char); |
|
684 | + $result = array(); |
|
685 | + $result[] = (int) $this->_lbase + $sindex / $this->_ncount; |
|
686 | + $result[] = (int) $this->_vbase + ($sindex % $this->_ncount) / $this->_tcount; |
|
687 | + $T = intval($this->_tbase + $sindex % $this->_tcount); |
|
688 | + if ($T != $this->_tbase) $result[] = $T; |
|
689 | + return $result; |
|
690 | + } |
|
691 | + /** |
|
692 | + * Ccomposes a Hangul syllable |
|
693 | + * (see http://www.unicode.org/unicode/reports/tr15/#Hangul |
|
694 | + * @param array Decomposed UCS4 sequence |
|
695 | + * @return array UCS4 sequence with syllables composed |
|
696 | + */ |
|
697 | + protected function _hangul_compose($input) |
|
698 | + { |
|
699 | + $inp_len = count($input); |
|
700 | + if (!$inp_len) return array(); |
|
701 | + $result = array(); |
|
702 | + $last = (int) $input[0]; |
|
703 | + $result[] = $last; // copy first char from input to output |
|
704 | 704 | |
705 | - for ($i = 1; $i < $inp_len; ++$i) { |
|
706 | - $char = (int) $input[$i]; |
|
707 | - $sindex = $last - $this->_sbase; |
|
708 | - $lindex = $last - $this->_lbase; |
|
709 | - $vindex = $char - $this->_vbase; |
|
710 | - $tindex = $char - $this->_tbase; |
|
711 | - // Find out, whether two current characters are LV and T |
|
712 | - if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount == 0) |
|
713 | - && 0 <= $tindex && $tindex <= $this->_tcount) { |
|
714 | - // create syllable of form LVT |
|
715 | - $last += $tindex; |
|
716 | - $result[(count($result) - 1)] = $last; // reset last |
|
717 | - continue; // discard char |
|
718 | - } |
|
719 | - // Find out, whether two current characters form L and V |
|
720 | - if (0 <= $lindex && $lindex < $this->_lcount && 0 <= $vindex && $vindex < $this->_vcount) { |
|
721 | - // create syllable of form LV |
|
722 | - $last = (int) $this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount; |
|
723 | - $result[(count($result) - 1)] = $last; // reset last |
|
724 | - continue; // discard char |
|
725 | - } |
|
726 | - // if neither case was true, just add the character |
|
727 | - $last = $char; |
|
728 | - $result[] = $char; |
|
729 | - } |
|
730 | - return $result; |
|
731 | - } |
|
705 | + for ($i = 1; $i < $inp_len; ++$i) { |
|
706 | + $char = (int) $input[$i]; |
|
707 | + $sindex = $last - $this->_sbase; |
|
708 | + $lindex = $last - $this->_lbase; |
|
709 | + $vindex = $char - $this->_vbase; |
|
710 | + $tindex = $char - $this->_tbase; |
|
711 | + // Find out, whether two current characters are LV and T |
|
712 | + if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount == 0) |
|
713 | + && 0 <= $tindex && $tindex <= $this->_tcount) { |
|
714 | + // create syllable of form LVT |
|
715 | + $last += $tindex; |
|
716 | + $result[(count($result) - 1)] = $last; // reset last |
|
717 | + continue; // discard char |
|
718 | + } |
|
719 | + // Find out, whether two current characters form L and V |
|
720 | + if (0 <= $lindex && $lindex < $this->_lcount && 0 <= $vindex && $vindex < $this->_vcount) { |
|
721 | + // create syllable of form LV |
|
722 | + $last = (int) $this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount; |
|
723 | + $result[(count($result) - 1)] = $last; // reset last |
|
724 | + continue; // discard char |
|
725 | + } |
|
726 | + // if neither case was true, just add the character |
|
727 | + $last = $char; |
|
728 | + $result[] = $char; |
|
729 | + } |
|
730 | + return $result; |
|
731 | + } |
|
732 | 732 | |
733 | - /** |
|
734 | - * Returns the combining class of a certain wide char |
|
735 | - * @param integer Wide char to check (32bit integer) |
|
736 | - * @return integer Combining class if found, else 0 |
|
737 | - */ |
|
738 | - protected function _get_combining_class($char) |
|
739 | - { |
|
740 | - return isset(self::$NP['norm_combcls'][$char]) ? self::$NP['norm_combcls'][$char] : 0; |
|
741 | - } |
|
733 | + /** |
|
734 | + * Returns the combining class of a certain wide char |
|
735 | + * @param integer Wide char to check (32bit integer) |
|
736 | + * @return integer Combining class if found, else 0 |
|
737 | + */ |
|
738 | + protected function _get_combining_class($char) |
|
739 | + { |
|
740 | + return isset(self::$NP['norm_combcls'][$char]) ? self::$NP['norm_combcls'][$char] : 0; |
|
741 | + } |
|
742 | 742 | |
743 | - /** |
|
744 | - * Applies the cannonical ordering of a decomposed UCS4 sequence |
|
745 | - * @param array Decomposed UCS4 sequence |
|
746 | - * @return array Ordered USC4 sequence |
|
747 | - */ |
|
748 | - protected function _apply_cannonical_ordering($input) |
|
749 | - { |
|
750 | - $swap = true; |
|
751 | - $size = count($input); |
|
752 | - while ($swap) { |
|
753 | - $swap = false; |
|
754 | - $last = $this->_get_combining_class(intval($input[0])); |
|
755 | - for ($i = 0; $i < $size-1; ++$i) { |
|
756 | - $next = $this->_get_combining_class(intval($input[$i+1])); |
|
757 | - if ($next != 0 && $last > $next) { |
|
758 | - // Move item leftward until it fits |
|
759 | - for ($j = $i + 1; $j > 0; --$j) { |
|
760 | - if ($this->_get_combining_class(intval($input[$j-1])) <= $next) break; |
|
761 | - $t = intval($input[$j]); |
|
762 | - $input[$j] = intval($input[$j-1]); |
|
763 | - $input[$j-1] = $t; |
|
764 | - $swap = true; |
|
765 | - } |
|
766 | - // Reentering the loop looking at the old character again |
|
767 | - $next = $last; |
|
768 | - } |
|
769 | - $last = $next; |
|
770 | - } |
|
771 | - } |
|
772 | - return $input; |
|
773 | - } |
|
743 | + /** |
|
744 | + * Applies the cannonical ordering of a decomposed UCS4 sequence |
|
745 | + * @param array Decomposed UCS4 sequence |
|
746 | + * @return array Ordered USC4 sequence |
|
747 | + */ |
|
748 | + protected function _apply_cannonical_ordering($input) |
|
749 | + { |
|
750 | + $swap = true; |
|
751 | + $size = count($input); |
|
752 | + while ($swap) { |
|
753 | + $swap = false; |
|
754 | + $last = $this->_get_combining_class(intval($input[0])); |
|
755 | + for ($i = 0; $i < $size-1; ++$i) { |
|
756 | + $next = $this->_get_combining_class(intval($input[$i+1])); |
|
757 | + if ($next != 0 && $last > $next) { |
|
758 | + // Move item leftward until it fits |
|
759 | + for ($j = $i + 1; $j > 0; --$j) { |
|
760 | + if ($this->_get_combining_class(intval($input[$j-1])) <= $next) break; |
|
761 | + $t = intval($input[$j]); |
|
762 | + $input[$j] = intval($input[$j-1]); |
|
763 | + $input[$j-1] = $t; |
|
764 | + $swap = true; |
|
765 | + } |
|
766 | + // Reentering the loop looking at the old character again |
|
767 | + $next = $last; |
|
768 | + } |
|
769 | + $last = $next; |
|
770 | + } |
|
771 | + } |
|
772 | + return $input; |
|
773 | + } |
|
774 | 774 | |
775 | - /** |
|
776 | - * Do composition of a sequence of starter and non-starter |
|
777 | - * @param array UCS4 Decomposed sequence |
|
778 | - * @return array Ordered USC4 sequence |
|
779 | - */ |
|
780 | - protected function _combine($input) |
|
781 | - { |
|
782 | - $inp_len = count($input); |
|
783 | - foreach (self::$NP['replacemaps'] as $np_src => $np_target) { |
|
784 | - if ($np_target[0] != $input[0]) continue; |
|
785 | - if (count($np_target) != $inp_len) continue; |
|
786 | - $hit = false; |
|
787 | - foreach ($input as $k2 => $v2) { |
|
788 | - if ($v2 == $np_target[$k2]) { |
|
789 | - $hit = true; |
|
790 | - } else { |
|
791 | - $hit = false; |
|
792 | - break; |
|
793 | - } |
|
794 | - } |
|
795 | - if ($hit) return $np_src; |
|
796 | - } |
|
797 | - return false; |
|
798 | - } |
|
775 | + /** |
|
776 | + * Do composition of a sequence of starter and non-starter |
|
777 | + * @param array UCS4 Decomposed sequence |
|
778 | + * @return array Ordered USC4 sequence |
|
779 | + */ |
|
780 | + protected function _combine($input) |
|
781 | + { |
|
782 | + $inp_len = count($input); |
|
783 | + foreach (self::$NP['replacemaps'] as $np_src => $np_target) { |
|
784 | + if ($np_target[0] != $input[0]) continue; |
|
785 | + if (count($np_target) != $inp_len) continue; |
|
786 | + $hit = false; |
|
787 | + foreach ($input as $k2 => $v2) { |
|
788 | + if ($v2 == $np_target[$k2]) { |
|
789 | + $hit = true; |
|
790 | + } else { |
|
791 | + $hit = false; |
|
792 | + break; |
|
793 | + } |
|
794 | + } |
|
795 | + if ($hit) return $np_src; |
|
796 | + } |
|
797 | + return false; |
|
798 | + } |
|
799 | 799 | |
800 | - /** |
|
801 | - * This converts an UTF-8 encoded string to its UCS-4 representation |
|
802 | - * By talking about UCS-4 "strings" we mean arrays of 32bit integers representing |
|
803 | - * each of the "chars". This is due to PHP not being able to handle strings with |
|
804 | - * bit depth different from 8. This apllies to the reverse method _ucs4_to_utf8(), too. |
|
805 | - * The following UTF-8 encodings are supported: |
|
806 | - * bytes bits representation |
|
807 | - * 1 7 0xxxxxxx |
|
808 | - * 2 11 110xxxxx 10xxxxxx |
|
809 | - * 3 16 1110xxxx 10xxxxxx 10xxxxxx |
|
810 | - * 4 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
|
811 | - * 5 26 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
|
812 | - * 6 31 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
|
813 | - * Each x represents a bit that can be used to store character data. |
|
814 | - * The five and six byte sequences are part of Annex D of ISO/IEC 10646-1:2000 |
|
815 | - * @param string $input |
|
816 | - * @return string |
|
817 | - */ |
|
818 | - protected function _utf8_to_ucs4($input) |
|
819 | - { |
|
820 | - $output = array(); |
|
821 | - $out_len = 0; |
|
822 | - $inp_len = self::byteLength($input); |
|
823 | - $mode = 'next'; |
|
824 | - $test = 'none'; |
|
825 | - for ($k = 0; $k < $inp_len; ++$k) { |
|
826 | - $v = ord($input{$k}); // Extract byte from input string |
|
827 | - if ($v < 128) { // We found an ASCII char - put into stirng as is |
|
828 | - $output[$out_len] = $v; |
|
829 | - ++$out_len; |
|
830 | - if ('add' == $mode) { |
|
831 | - $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); |
|
832 | - return false; |
|
833 | - } |
|
834 | - continue; |
|
835 | - } |
|
836 | - if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char |
|
837 | - $start_byte = $v; |
|
838 | - $mode = 'add'; |
|
839 | - $test = 'range'; |
|
840 | - if ($v >> 5 == 6) { // &110xxxxx 10xxxxx |
|
841 | - $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left |
|
842 | - $v = ($v - 192) << 6; |
|
843 | - } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx |
|
844 | - $next_byte = 1; |
|
845 | - $v = ($v - 224) << 12; |
|
846 | - } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
|
847 | - $next_byte = 2; |
|
848 | - $v = ($v - 240) << 18; |
|
849 | - } elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
|
850 | - $next_byte = 3; |
|
851 | - $v = ($v - 248) << 24; |
|
852 | - } elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
|
853 | - $next_byte = 4; |
|
854 | - $v = ($v - 252) << 30; |
|
855 | - } else { |
|
856 | - $this->_error('This might be UTF-8, but I don\'t understand it at byte '.$k); |
|
857 | - return false; |
|
858 | - } |
|
859 | - if ('add' == $mode) { |
|
860 | - $output[$out_len] = (int) $v; |
|
861 | - ++$out_len; |
|
862 | - continue; |
|
863 | - } |
|
864 | - } |
|
865 | - if ('add' == $mode) { |
|
866 | - if (!$this->_allow_overlong && $test == 'range') { |
|
867 | - $test = 'none'; |
|
868 | - if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) { |
|
869 | - $this->_error('Bogus UTF-8 character detected (out of legal range) at byte '.$k); |
|
870 | - return false; |
|
871 | - } |
|
872 | - } |
|
873 | - if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx |
|
874 | - $v = ($v - 128) << ($next_byte * 6); |
|
875 | - $output[($out_len - 1)] += $v; |
|
876 | - --$next_byte; |
|
877 | - } else { |
|
878 | - $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); |
|
879 | - return false; |
|
880 | - } |
|
881 | - if ($next_byte < 0) { |
|
882 | - $mode = 'next'; |
|
883 | - } |
|
884 | - } |
|
885 | - } // for |
|
886 | - return $output; |
|
887 | - } |
|
800 | + /** |
|
801 | + * This converts an UTF-8 encoded string to its UCS-4 representation |
|
802 | + * By talking about UCS-4 "strings" we mean arrays of 32bit integers representing |
|
803 | + * each of the "chars". This is due to PHP not being able to handle strings with |
|
804 | + * bit depth different from 8. This apllies to the reverse method _ucs4_to_utf8(), too. |
|
805 | + * The following UTF-8 encodings are supported: |
|
806 | + * bytes bits representation |
|
807 | + * 1 7 0xxxxxxx |
|
808 | + * 2 11 110xxxxx 10xxxxxx |
|
809 | + * 3 16 1110xxxx 10xxxxxx 10xxxxxx |
|
810 | + * 4 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
|
811 | + * 5 26 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
|
812 | + * 6 31 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
|
813 | + * Each x represents a bit that can be used to store character data. |
|
814 | + * The five and six byte sequences are part of Annex D of ISO/IEC 10646-1:2000 |
|
815 | + * @param string $input |
|
816 | + * @return string |
|
817 | + */ |
|
818 | + protected function _utf8_to_ucs4($input) |
|
819 | + { |
|
820 | + $output = array(); |
|
821 | + $out_len = 0; |
|
822 | + $inp_len = self::byteLength($input); |
|
823 | + $mode = 'next'; |
|
824 | + $test = 'none'; |
|
825 | + for ($k = 0; $k < $inp_len; ++$k) { |
|
826 | + $v = ord($input{$k}); // Extract byte from input string |
|
827 | + if ($v < 128) { // We found an ASCII char - put into stirng as is |
|
828 | + $output[$out_len] = $v; |
|
829 | + ++$out_len; |
|
830 | + if ('add' == $mode) { |
|
831 | + $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); |
|
832 | + return false; |
|
833 | + } |
|
834 | + continue; |
|
835 | + } |
|
836 | + if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char |
|
837 | + $start_byte = $v; |
|
838 | + $mode = 'add'; |
|
839 | + $test = 'range'; |
|
840 | + if ($v >> 5 == 6) { // &110xxxxx 10xxxxx |
|
841 | + $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left |
|
842 | + $v = ($v - 192) << 6; |
|
843 | + } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx |
|
844 | + $next_byte = 1; |
|
845 | + $v = ($v - 224) << 12; |
|
846 | + } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
|
847 | + $next_byte = 2; |
|
848 | + $v = ($v - 240) << 18; |
|
849 | + } elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
|
850 | + $next_byte = 3; |
|
851 | + $v = ($v - 248) << 24; |
|
852 | + } elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
|
853 | + $next_byte = 4; |
|
854 | + $v = ($v - 252) << 30; |
|
855 | + } else { |
|
856 | + $this->_error('This might be UTF-8, but I don\'t understand it at byte '.$k); |
|
857 | + return false; |
|
858 | + } |
|
859 | + if ('add' == $mode) { |
|
860 | + $output[$out_len] = (int) $v; |
|
861 | + ++$out_len; |
|
862 | + continue; |
|
863 | + } |
|
864 | + } |
|
865 | + if ('add' == $mode) { |
|
866 | + if (!$this->_allow_overlong && $test == 'range') { |
|
867 | + $test = 'none'; |
|
868 | + if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) { |
|
869 | + $this->_error('Bogus UTF-8 character detected (out of legal range) at byte '.$k); |
|
870 | + return false; |
|
871 | + } |
|
872 | + } |
|
873 | + if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx |
|
874 | + $v = ($v - 128) << ($next_byte * 6); |
|
875 | + $output[($out_len - 1)] += $v; |
|
876 | + --$next_byte; |
|
877 | + } else { |
|
878 | + $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); |
|
879 | + return false; |
|
880 | + } |
|
881 | + if ($next_byte < 0) { |
|
882 | + $mode = 'next'; |
|
883 | + } |
|
884 | + } |
|
885 | + } // for |
|
886 | + return $output; |
|
887 | + } |
|
888 | 888 | |
889 | - /** |
|
890 | - * Convert UCS-4 string into UTF-8 string |
|
891 | - * See _utf8_to_ucs4() for details |
|
892 | - * @param string $input |
|
893 | - * @return string |
|
894 | - */ |
|
895 | - protected function _ucs4_to_utf8($input) |
|
896 | - { |
|
897 | - $output = ''; |
|
898 | - foreach ($input as $k => $v) { |
|
899 | - if ($v < 128) { // 7bit are transferred literally |
|
900 | - $output .= chr($v); |
|
901 | - } elseif ($v < (1 << 11)) { // 2 bytes |
|
902 | - $output .= chr(192+($v >> 6)).chr(128+($v & 63)); |
|
903 | - } elseif ($v < (1 << 16)) { // 3 bytes |
|
904 | - $output .= chr(224+($v >> 12)).chr(128+(($v >> 6) & 63)).chr(128+($v & 63)); |
|
905 | - } elseif ($v < (1 << 21)) { // 4 bytes |
|
906 | - $output .= chr(240+($v >> 18)).chr(128+(($v >> 12) & 63)).chr(128+(($v >> 6) & 63)).chr(128+($v & 63)); |
|
907 | - } elseif (self::$safe_mode) { |
|
908 | - $output .= self::$safe_char; |
|
909 | - } else { |
|
910 | - $this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte '.$k); |
|
911 | - return false; |
|
912 | - } |
|
913 | - } |
|
914 | - return $output; |
|
915 | - } |
|
889 | + /** |
|
890 | + * Convert UCS-4 string into UTF-8 string |
|
891 | + * See _utf8_to_ucs4() for details |
|
892 | + * @param string $input |
|
893 | + * @return string |
|
894 | + */ |
|
895 | + protected function _ucs4_to_utf8($input) |
|
896 | + { |
|
897 | + $output = ''; |
|
898 | + foreach ($input as $k => $v) { |
|
899 | + if ($v < 128) { // 7bit are transferred literally |
|
900 | + $output .= chr($v); |
|
901 | + } elseif ($v < (1 << 11)) { // 2 bytes |
|
902 | + $output .= chr(192+($v >> 6)).chr(128+($v & 63)); |
|
903 | + } elseif ($v < (1 << 16)) { // 3 bytes |
|
904 | + $output .= chr(224+($v >> 12)).chr(128+(($v >> 6) & 63)).chr(128+($v & 63)); |
|
905 | + } elseif ($v < (1 << 21)) { // 4 bytes |
|
906 | + $output .= chr(240+($v >> 18)).chr(128+(($v >> 12) & 63)).chr(128+(($v >> 6) & 63)).chr(128+($v & 63)); |
|
907 | + } elseif (self::$safe_mode) { |
|
908 | + $output .= self::$safe_char; |
|
909 | + } else { |
|
910 | + $this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte '.$k); |
|
911 | + return false; |
|
912 | + } |
|
913 | + } |
|
914 | + return $output; |
|
915 | + } |
|
916 | 916 | |
917 | - /** |
|
918 | - * Convert UCS-4 array into UCS-4 string |
|
919 | - * |
|
920 | - * @param array $input |
|
921 | - * @return string |
|
922 | - */ |
|
923 | - protected function _ucs4_to_ucs4_string($input) |
|
924 | - { |
|
925 | - $output = ''; |
|
926 | - // Take array values and split output to 4 bytes per value |
|
927 | - // The bit mask is 255, which reads &11111111 |
|
928 | - foreach ($input as $v) { |
|
929 | - $output .= chr(($v >> 24) & 255).chr(($v >> 16) & 255).chr(($v >> 8) & 255).chr($v & 255); |
|
930 | - } |
|
931 | - return $output; |
|
932 | - } |
|
917 | + /** |
|
918 | + * Convert UCS-4 array into UCS-4 string |
|
919 | + * |
|
920 | + * @param array $input |
|
921 | + * @return string |
|
922 | + */ |
|
923 | + protected function _ucs4_to_ucs4_string($input) |
|
924 | + { |
|
925 | + $output = ''; |
|
926 | + // Take array values and split output to 4 bytes per value |
|
927 | + // The bit mask is 255, which reads &11111111 |
|
928 | + foreach ($input as $v) { |
|
929 | + $output .= chr(($v >> 24) & 255).chr(($v >> 16) & 255).chr(($v >> 8) & 255).chr($v & 255); |
|
930 | + } |
|
931 | + return $output; |
|
932 | + } |
|
933 | 933 | |
934 | - /** |
|
935 | - * Convert UCS-4 strin into UCS-4 garray |
|
936 | - * |
|
937 | - * @param string $input |
|
938 | - * @return array |
|
939 | - */ |
|
940 | - protected function _ucs4_string_to_ucs4($input) |
|
941 | - { |
|
942 | - $output = array(); |
|
943 | - $inp_len = self::byteLength($input); |
|
944 | - // Input length must be dividable by 4 |
|
945 | - if ($inp_len % 4) { |
|
946 | - $this->_error('Input UCS4 string is broken'); |
|
947 | - return false; |
|
948 | - } |
|
949 | - // Empty input - return empty output |
|
950 | - if (!$inp_len) return $output; |
|
951 | - for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) { |
|
952 | - // Increment output position every 4 input bytes |
|
953 | - if (!($i % 4)) { |
|
954 | - $out_len++; |
|
955 | - $output[$out_len] = 0; |
|
956 | - } |
|
957 | - $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) ); |
|
958 | - } |
|
959 | - return $output; |
|
960 | - } |
|
934 | + /** |
|
935 | + * Convert UCS-4 strin into UCS-4 garray |
|
936 | + * |
|
937 | + * @param string $input |
|
938 | + * @return array |
|
939 | + */ |
|
940 | + protected function _ucs4_string_to_ucs4($input) |
|
941 | + { |
|
942 | + $output = array(); |
|
943 | + $inp_len = self::byteLength($input); |
|
944 | + // Input length must be dividable by 4 |
|
945 | + if ($inp_len % 4) { |
|
946 | + $this->_error('Input UCS4 string is broken'); |
|
947 | + return false; |
|
948 | + } |
|
949 | + // Empty input - return empty output |
|
950 | + if (!$inp_len) return $output; |
|
951 | + for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) { |
|
952 | + // Increment output position every 4 input bytes |
|
953 | + if (!($i % 4)) { |
|
954 | + $out_len++; |
|
955 | + $output[$out_len] = 0; |
|
956 | + } |
|
957 | + $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) ); |
|
958 | + } |
|
959 | + return $output; |
|
960 | + } |
|
961 | 961 | |
962 | - /** |
|
963 | - * Gets the length of a string in bytes even if mbstring function |
|
964 | - * overloading is turned on |
|
965 | - * |
|
966 | - * @param string $string the string for which to get the length. |
|
967 | - * @return integer the length of the string in bytes. |
|
968 | - */ |
|
969 | - protected static function byteLength($string) |
|
970 | - { |
|
971 | - if (self::$_mb_string_overload) { |
|
972 | - return mb_strlen($string, '8bit'); |
|
973 | - } |
|
974 | - return strlen((binary) $string); |
|
975 | - } |
|
962 | + /** |
|
963 | + * Gets the length of a string in bytes even if mbstring function |
|
964 | + * overloading is turned on |
|
965 | + * |
|
966 | + * @param string $string the string for which to get the length. |
|
967 | + * @return integer the length of the string in bytes. |
|
968 | + */ |
|
969 | + protected static function byteLength($string) |
|
970 | + { |
|
971 | + if (self::$_mb_string_overload) { |
|
972 | + return mb_strlen($string, '8bit'); |
|
973 | + } |
|
974 | + return strlen((binary) $string); |
|
975 | + } |
|
976 | 976 | |
977 | - /** |
|
978 | - * Attempts to return a concrete IDNA instance. |
|
979 | - * |
|
980 | - * @param array $params Set of paramaters |
|
981 | - * @return idna_convert |
|
982 | - * @access public |
|
983 | - */ |
|
984 | - public function getInstance($params = array()) |
|
985 | - { |
|
986 | - return new idna_convert($params); |
|
987 | - } |
|
977 | + /** |
|
978 | + * Attempts to return a concrete IDNA instance. |
|
979 | + * |
|
980 | + * @param array $params Set of paramaters |
|
981 | + * @return idna_convert |
|
982 | + * @access public |
|
983 | + */ |
|
984 | + public function getInstance($params = array()) |
|
985 | + { |
|
986 | + return new idna_convert($params); |
|
987 | + } |
|
988 | 988 | |
989 | - /** |
|
990 | - * Attempts to return a concrete IDNA instance for either php4 or php5, |
|
991 | - * only creating a new instance if no IDNA instance with the same |
|
992 | - * parameters currently exists. |
|
993 | - * |
|
994 | - * @param array $params Set of paramaters |
|
995 | - * |
|
996 | - * @return object idna_convert |
|
997 | - * @access public |
|
998 | - */ |
|
999 | - public function singleton($params = array()) |
|
1000 | - { |
|
1001 | - static $instances; |
|
1002 | - if (!isset($instances)) { |
|
1003 | - $instances = array(); |
|
1004 | - } |
|
1005 | - $signature = serialize($params); |
|
1006 | - if (!isset($instances[$signature])) { |
|
1007 | - $instances[$signature] = idna_convert::getInstance($params); |
|
1008 | - } |
|
1009 | - return $instances[$signature]; |
|
1010 | - } |
|
989 | + /** |
|
990 | + * Attempts to return a concrete IDNA instance for either php4 or php5, |
|
991 | + * only creating a new instance if no IDNA instance with the same |
|
992 | + * parameters currently exists. |
|
993 | + * |
|
994 | + * @param array $params Set of paramaters |
|
995 | + * |
|
996 | + * @return object idna_convert |
|
997 | + * @access public |
|
998 | + */ |
|
999 | + public function singleton($params = array()) |
|
1000 | + { |
|
1001 | + static $instances; |
|
1002 | + if (!isset($instances)) { |
|
1003 | + $instances = array(); |
|
1004 | + } |
|
1005 | + $signature = serialize($params); |
|
1006 | + if (!isset($instances[$signature])) { |
|
1007 | + $instances[$signature] = idna_convert::getInstance($params); |
|
1008 | + } |
|
1009 | + return $instances[$signature]; |
|
1010 | + } |
|
1011 | 1011 | |
1012 | - /** |
|
1013 | - * Holds all relevant mapping tables |
|
1014 | - * See RFC3454 for details |
|
1015 | - * |
|
1016 | - * @private array |
|
1017 | - * @since 0.5.2 |
|
1018 | - */ |
|
1019 | - protected static $NP = array |
|
1020 | - ('map_nothing' => array(0xAD, 0x34F, 0x1806, 0x180B, 0x180C, 0x180D, 0x200B, 0x200C |
|
1021 | - ,0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02, 0xFE03, 0xFE04, 0xFE05, 0xFE06, 0xFE07 |
|
1022 | - ,0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, 0xFE0D, 0xFE0E, 0xFE0F, 0xFEFF |
|
1023 | - ) |
|
1024 | - ,'general_prohibited' => array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 |
|
1025 | - ,20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 ,33, 34, 35, 36, 37, 38, 39, 40, 41, 42 |
|
1026 | - ,43, 44, 47, 59, 60, 61, 62, 63, 64, 91, 92, 93, 94, 95, 96, 123, 124, 125, 126, 127, 0x3002 |
|
1027 | - ) |
|
1028 | - ,'prohibit' => array(0xA0, 0x340, 0x341, 0x6DD, 0x70F, 0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003 |
|
1029 | - ,0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x200B, 0x200C, 0x200D, 0x200E, 0x200F |
|
1030 | - ,0x2028, 0x2029, 0x202A, 0x202B, 0x202C, 0x202D, 0x202E, 0x202F, 0x205F, 0x206A, 0x206B, 0x206C |
|
1031 | - ,0x206D, 0x206E, 0x206F, 0x3000, 0xFEFF, 0xFFF9, 0xFFFA, 0xFFFB, 0xFFFC, 0xFFFD, 0xFFFE, 0xFFFF |
|
1032 | - ,0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, 0x5FFFF, 0x6FFFE |
|
1033 | - ,0x6FFFF, 0x7FFFE, 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE, 0xBFFFF |
|
1034 | - ,0xCFFFE, 0xCFFFF, 0xDFFFE, 0xDFFFF, 0xE0001, 0xEFFFE, 0xEFFFF, 0xFFFFE, 0xFFFFF, 0x10FFFE, 0x10FFFF |
|
1035 | - ) |
|
1036 | - ,'prohibit_ranges' => array(array(0x80, 0x9F), array(0x2060, 0x206F), array(0x1D173, 0x1D17A) |
|
1037 | - ,array(0xE000, 0xF8FF) ,array(0xF0000, 0xFFFFD), array(0x100000, 0x10FFFD) |
|
1038 | - ,array(0xFDD0, 0xFDEF), array(0xD800, 0xDFFF), array(0x2FF0, 0x2FFB), array(0xE0020, 0xE007F) |
|
1039 | - ) |
|
1040 | - ,'replacemaps' => array(0x41 => array(0x61), 0x42 => array(0x62), 0x43 => array(0x63) |
|
1041 | - ,0x44 => array(0x64), 0x45 => array(0x65), 0x46 => array(0x66), 0x47 => array(0x67) |
|
1042 | - ,0x48 => array(0x68), 0x49 => array(0x69), 0x4A => array(0x6A), 0x4B => array(0x6B) |
|
1043 | - ,0x4C => array(0x6C), 0x4D => array(0x6D), 0x4E => array(0x6E), 0x4F => array(0x6F) |
|
1044 | - ,0x50 => array(0x70), 0x51 => array(0x71), 0x52 => array(0x72), 0x53 => array(0x73) |
|
1045 | - ,0x54 => array(0x74), 0x55 => array(0x75), 0x56 => array(0x76), 0x57 => array(0x77) |
|
1046 | - ,0x58 => array(0x78), 0x59 => array(0x79), 0x5A => array(0x7A), 0xB5 => array(0x3BC) |
|
1047 | - ,0xC0 => array(0xE0), 0xC1 => array(0xE1), 0xC2 => array(0xE2), 0xC3 => array(0xE3) |
|
1048 | - ,0xC4 => array(0xE4), 0xC5 => array(0xE5), 0xC6 => array(0xE6), 0xC7 => array(0xE7) |
|
1049 | - ,0xC8 => array(0xE8), 0xC9 => array(0xE9), 0xCA => array(0xEA), 0xCB => array(0xEB) |
|
1050 | - ,0xCC => array(0xEC), 0xCD => array(0xED), 0xCE => array(0xEE), 0xCF => array(0xEF) |
|
1051 | - ,0xD0 => array(0xF0), 0xD1 => array(0xF1), 0xD2 => array(0xF2), 0xD3 => array(0xF3) |
|
1052 | - ,0xD4 => array(0xF4), 0xD5 => array(0xF5), 0xD6 => array(0xF6), 0xD8 => array(0xF8) |
|
1053 | - ,0xD9 => array(0xF9), 0xDA => array(0xFA), 0xDB => array(0xFB), 0xDC => array(0xFC) |
|
1054 | - ,0xDD => array(0xFD), 0xDE => array(0xFE), 0xDF => array(0x73, 0x73) |
|
1055 | - ,0x100 => array(0x101), 0x102 => array(0x103), 0x104 => array(0x105) |
|
1056 | - ,0x106 => array(0x107), 0x108 => array(0x109), 0x10A => array(0x10B) |
|
1057 | - ,0x10C => array(0x10D), 0x10E => array(0x10F), 0x110 => array(0x111) |
|
1058 | - ,0x112 => array(0x113), 0x114 => array(0x115), 0x116 => array(0x117) |
|
1059 | - ,0x118 => array(0x119), 0x11A => array(0x11B), 0x11C => array(0x11D) |
|
1060 | - ,0x11E => array(0x11F), 0x120 => array(0x121), 0x122 => array(0x123) |
|
1061 | - ,0x124 => array(0x125), 0x126 => array(0x127), 0x128 => array(0x129) |
|
1062 | - ,0x12A => array(0x12B), 0x12C => array(0x12D), 0x12E => array(0x12F) |
|
1063 | - ,0x130 => array(0x69, 0x307), 0x132 => array(0x133), 0x134 => array(0x135) |
|
1064 | - ,0x136 => array(0x137), 0x139 => array(0x13A), 0x13B => array(0x13C) |
|
1065 | - ,0x13D => array(0x13E), 0x13F => array(0x140), 0x141 => array(0x142) |
|
1066 | - ,0x143 => array(0x144), 0x145 => array(0x146), 0x147 => array(0x148) |
|
1067 | - ,0x149 => array(0x2BC, 0x6E), 0x14A => array(0x14B), 0x14C => array(0x14D) |
|
1068 | - ,0x14E => array(0x14F), 0x150 => array(0x151), 0x152 => array(0x153) |
|
1069 | - ,0x154 => array(0x155), 0x156 => array(0x157), 0x158 => array(0x159) |
|
1070 | - ,0x15A => array(0x15B), 0x15C => array(0x15D), 0x15E => array(0x15F) |
|
1071 | - ,0x160 => array(0x161), 0x162 => array(0x163), 0x164 => array(0x165) |
|
1072 | - ,0x166 => array(0x167), 0x168 => array(0x169), 0x16A => array(0x16B) |
|
1073 | - ,0x16C => array(0x16D), 0x16E => array(0x16F), 0x170 => array(0x171) |
|
1074 | - ,0x172 => array(0x173), 0x174 => array(0x175), 0x176 => array(0x177) |
|
1075 | - ,0x178 => array(0xFF), 0x179 => array(0x17A), 0x17B => array(0x17C) |
|
1076 | - ,0x17D => array(0x17E), 0x17F => array(0x73), 0x181 => array(0x253) |
|
1077 | - ,0x182 => array(0x183), 0x184 => array(0x185), 0x186 => array(0x254) |
|
1078 | - ,0x187 => array(0x188), 0x189 => array(0x256), 0x18A => array(0x257) |
|
1079 | - ,0x18B => array(0x18C), 0x18E => array(0x1DD), 0x18F => array(0x259) |
|
1080 | - ,0x190 => array(0x25B), 0x191 => array(0x192), 0x193 => array(0x260) |
|
1081 | - ,0x194 => array(0x263), 0x196 => array(0x269), 0x197 => array(0x268) |
|
1082 | - ,0x198 => array(0x199), 0x19C => array(0x26F), 0x19D => array(0x272) |
|
1083 | - ,0x19F => array(0x275), 0x1A0 => array(0x1A1), 0x1A2 => array(0x1A3) |
|
1084 | - ,0x1A4 => array(0x1A5), 0x1A6 => array(0x280), 0x1A7 => array(0x1A8) |
|
1085 | - ,0x1A9 => array(0x283), 0x1AC => array(0x1AD), 0x1AE => array(0x288) |
|
1086 | - ,0x1AF => array(0x1B0), 0x1B1 => array(0x28A), 0x1B2 => array(0x28B) |
|
1087 | - ,0x1B3 => array(0x1B4), 0x1B5 => array(0x1B6), 0x1B7 => array(0x292) |
|
1088 | - ,0x1B8 => array(0x1B9), 0x1BC => array(0x1BD), 0x1C4 => array(0x1C6) |
|
1089 | - ,0x1C5 => array(0x1C6), 0x1C7 => array(0x1C9), 0x1C8 => array(0x1C9) |
|
1090 | - ,0x1CA => array(0x1CC), 0x1CB => array(0x1CC), 0x1CD => array(0x1CE) |
|
1091 | - ,0x1CF => array(0x1D0), 0x1D1 => array(0x1D2), 0x1D3 => array(0x1D4) |
|
1092 | - ,0x1D5 => array(0x1D6), 0x1D7 => array(0x1D8), 0x1D9 => array(0x1DA) |
|
1093 | - ,0x1DB => array(0x1DC), 0x1DE => array(0x1DF), 0x1E0 => array(0x1E1) |
|
1094 | - ,0x1E2 => array(0x1E3), 0x1E4 => array(0x1E5), 0x1E6 => array(0x1E7) |
|
1095 | - ,0x1E8 => array(0x1E9), 0x1EA => array(0x1EB), 0x1EC => array(0x1ED) |
|
1096 | - ,0x1EE => array(0x1EF), 0x1F0 => array(0x6A, 0x30C), 0x1F1 => array(0x1F3) |
|
1097 | - ,0x1F2 => array(0x1F3), 0x1F4 => array(0x1F5), 0x1F6 => array(0x195) |
|
1098 | - ,0x1F7 => array(0x1BF), 0x1F8 => array(0x1F9), 0x1FA => array(0x1FB) |
|
1099 | - ,0x1FC => array(0x1FD), 0x1FE => array(0x1FF), 0x200 => array(0x201) |
|
1100 | - ,0x202 => array(0x203), 0x204 => array(0x205), 0x206 => array(0x207) |
|
1101 | - ,0x208 => array(0x209), 0x20A => array(0x20B), 0x20C => array(0x20D) |
|
1102 | - ,0x20E => array(0x20F), 0x210 => array(0x211), 0x212 => array(0x213) |
|
1103 | - ,0x214 => array(0x215), 0x216 => array(0x217), 0x218 => array(0x219) |
|
1104 | - ,0x21A => array(0x21B), 0x21C => array(0x21D), 0x21E => array(0x21F) |
|
1105 | - ,0x220 => array(0x19E), 0x222 => array(0x223), 0x224 => array(0x225) |
|
1106 | - ,0x226 => array(0x227), 0x228 => array(0x229), 0x22A => array(0x22B) |
|
1107 | - ,0x22C => array(0x22D), 0x22E => array(0x22F), 0x230 => array(0x231) |
|
1108 | - ,0x232 => array(0x233), 0x345 => array(0x3B9), 0x37A => array(0x20, 0x3B9) |
|
1109 | - ,0x386 => array(0x3AC), 0x388 => array(0x3AD), 0x389 => array(0x3AE) |
|
1110 | - ,0x38A => array(0x3AF), 0x38C => array(0x3CC), 0x38E => array(0x3CD) |
|
1111 | - ,0x38F => array(0x3CE), 0x390 => array(0x3B9, 0x308, 0x301) |
|
1112 | - ,0x391 => array(0x3B1), 0x392 => array(0x3B2), 0x393 => array(0x3B3) |
|
1113 | - ,0x394 => array(0x3B4), 0x395 => array(0x3B5), 0x396 => array(0x3B6) |
|
1114 | - ,0x397 => array(0x3B7), 0x398 => array(0x3B8), 0x399 => array(0x3B9) |
|
1115 | - ,0x39A => array(0x3BA), 0x39B => array(0x3BB), 0x39C => array(0x3BC) |
|
1116 | - ,0x39D => array(0x3BD), 0x39E => array(0x3BE), 0x39F => array(0x3BF) |
|
1117 | - ,0x3A0 => array(0x3C0), 0x3A1 => array(0x3C1), 0x3A3 => array(0x3C3) |
|
1118 | - ,0x3A4 => array(0x3C4), 0x3A5 => array(0x3C5), 0x3A6 => array(0x3C6) |
|
1119 | - ,0x3A7 => array(0x3C7), 0x3A8 => array(0x3C8), 0x3A9 => array(0x3C9) |
|
1120 | - ,0x3AA => array(0x3CA), 0x3AB => array(0x3CB), 0x3B0 => array(0x3C5, 0x308, 0x301) |
|
1121 | - ,0x3C2 => array(0x3C3), 0x3D0 => array(0x3B2), 0x3D1 => array(0x3B8) |
|
1122 | - ,0x3D2 => array(0x3C5), 0x3D3 => array(0x3CD), 0x3D4 => array(0x3CB) |
|
1123 | - ,0x3D5 => array(0x3C6), 0x3D6 => array(0x3C0), 0x3D8 => array(0x3D9) |
|
1124 | - ,0x3DA => array(0x3DB), 0x3DC => array(0x3DD), 0x3DE => array(0x3DF) |
|
1125 | - ,0x3E0 => array(0x3E1), 0x3E2 => array(0x3E3), 0x3E4 => array(0x3E5) |
|
1126 | - ,0x3E6 => array(0x3E7), 0x3E8 => array(0x3E9), 0x3EA => array(0x3EB) |
|
1127 | - ,0x3EC => array(0x3ED), 0x3EE => array(0x3EF), 0x3F0 => array(0x3BA) |
|
1128 | - ,0x3F1 => array(0x3C1), 0x3F2 => array(0x3C3), 0x3F4 => array(0x3B8) |
|
1129 | - ,0x3F5 => array(0x3B5), 0x400 => array(0x450), 0x401 => array(0x451) |
|
1130 | - ,0x402 => array(0x452), 0x403 => array(0x453), 0x404 => array(0x454) |
|
1131 | - ,0x405 => array(0x455), 0x406 => array(0x456), 0x407 => array(0x457) |
|
1132 | - ,0x408 => array(0x458), 0x409 => array(0x459), 0x40A => array(0x45A) |
|
1133 | - ,0x40B => array(0x45B), 0x40C => array(0x45C), 0x40D => array(0x45D) |
|
1134 | - ,0x40E => array(0x45E), 0x40F => array(0x45F), 0x410 => array(0x430) |
|
1135 | - ,0x411 => array(0x431), 0x412 => array(0x432), 0x413 => array(0x433) |
|
1136 | - ,0x414 => array(0x434), 0x415 => array(0x435), 0x416 => array(0x436) |
|
1137 | - ,0x417 => array(0x437), 0x418 => array(0x438), 0x419 => array(0x439) |
|
1138 | - ,0x41A => array(0x43A), 0x41B => array(0x43B), 0x41C => array(0x43C) |
|
1139 | - ,0x41D => array(0x43D), 0x41E => array(0x43E), 0x41F => array(0x43F) |
|
1140 | - ,0x420 => array(0x440), 0x421 => array(0x441), 0x422 => array(0x442) |
|
1141 | - ,0x423 => array(0x443), 0x424 => array(0x444), 0x425 => array(0x445) |
|
1142 | - ,0x426 => array(0x446), 0x427 => array(0x447), 0x428 => array(0x448) |
|
1143 | - ,0x429 => array(0x449), 0x42A => array(0x44A), 0x42B => array(0x44B) |
|
1144 | - ,0x42C => array(0x44C), 0x42D => array(0x44D), 0x42E => array(0x44E) |
|
1145 | - ,0x42F => array(0x44F), 0x460 => array(0x461), 0x462 => array(0x463) |
|
1146 | - ,0x464 => array(0x465), 0x466 => array(0x467), 0x468 => array(0x469) |
|
1147 | - ,0x46A => array(0x46B), 0x46C => array(0x46D), 0x46E => array(0x46F) |
|
1148 | - ,0x470 => array(0x471), 0x472 => array(0x473), 0x474 => array(0x475) |
|
1149 | - ,0x476 => array(0x477), 0x478 => array(0x479), 0x47A => array(0x47B) |
|
1150 | - ,0x47C => array(0x47D), 0x47E => array(0x47F), 0x480 => array(0x481) |
|
1151 | - ,0x48A => array(0x48B), 0x48C => array(0x48D), 0x48E => array(0x48F) |
|
1152 | - ,0x490 => array(0x491), 0x492 => array(0x493), 0x494 => array(0x495) |
|
1153 | - ,0x496 => array(0x497), 0x498 => array(0x499), 0x49A => array(0x49B) |
|
1154 | - ,0x49C => array(0x49D), 0x49E => array(0x49F), 0x4A0 => array(0x4A1) |
|
1155 | - ,0x4A2 => array(0x4A3), 0x4A4 => array(0x4A5), 0x4A6 => array(0x4A7) |
|
1156 | - ,0x4A8 => array(0x4A9), 0x4AA => array(0x4AB), 0x4AC => array(0x4AD) |
|
1157 | - ,0x4AE => array(0x4AF), 0x4B0 => array(0x4B1), 0x4B2 => array(0x4B3) |
|
1158 | - ,0x4B4 => array(0x4B5), 0x4B6 => array(0x4B7), 0x4B8 => array(0x4B9) |
|
1159 | - ,0x4BA => array(0x4BB), 0x4BC => array(0x4BD), 0x4BE => array(0x4BF) |
|
1160 | - ,0x4C1 => array(0x4C2), 0x4C3 => array(0x4C4), 0x4C5 => array(0x4C6) |
|
1161 | - ,0x4C7 => array(0x4C8), 0x4C9 => array(0x4CA), 0x4CB => array(0x4CC) |
|
1162 | - ,0x4CD => array(0x4CE), 0x4D0 => array(0x4D1), 0x4D2 => array(0x4D3) |
|
1163 | - ,0x4D4 => array(0x4D5), 0x4D6 => array(0x4D7), 0x4D8 => array(0x4D9) |
|
1164 | - ,0x4DA => array(0x4DB), 0x4DC => array(0x4DD), 0x4DE => array(0x4DF) |
|
1165 | - ,0x4E0 => array(0x4E1), 0x4E2 => array(0x4E3), 0x4E4 => array(0x4E5) |
|
1166 | - ,0x4E6 => array(0x4E7), 0x4E8 => array(0x4E9), 0x4EA => array(0x4EB) |
|
1167 | - ,0x4EC => array(0x4ED), 0x4EE => array(0x4EF), 0x4F0 => array(0x4F1) |
|
1168 | - ,0x4F2 => array(0x4F3), 0x4F4 => array(0x4F5), 0x4F8 => array(0x4F9) |
|
1169 | - ,0x500 => array(0x501), 0x502 => array(0x503), 0x504 => array(0x505) |
|
1170 | - ,0x506 => array(0x507), 0x508 => array(0x509), 0x50A => array(0x50B) |
|
1171 | - ,0x50C => array(0x50D), 0x50E => array(0x50F), 0x531 => array(0x561) |
|
1172 | - ,0x532 => array(0x562), 0x533 => array(0x563), 0x534 => array(0x564) |
|
1173 | - ,0x535 => array(0x565), 0x536 => array(0x566), 0x537 => array(0x567) |
|
1174 | - ,0x538 => array(0x568), 0x539 => array(0x569), 0x53A => array(0x56A) |
|
1175 | - ,0x53B => array(0x56B), 0x53C => array(0x56C), 0x53D => array(0x56D) |
|
1176 | - ,0x53E => array(0x56E), 0x53F => array(0x56F), 0x540 => array(0x570) |
|
1177 | - ,0x541 => array(0x571), 0x542 => array(0x572), 0x543 => array(0x573) |
|
1178 | - ,0x544 => array(0x574), 0x545 => array(0x575), 0x546 => array(0x576) |
|
1179 | - ,0x547 => array(0x577), 0x548 => array(0x578), 0x549 => array(0x579) |
|
1180 | - ,0x54A => array(0x57A), 0x54B => array(0x57B), 0x54C => array(0x57C) |
|
1181 | - ,0x54D => array(0x57D), 0x54E => array(0x57E), 0x54F => array(0x57F) |
|
1182 | - ,0x550 => array(0x580), 0x551 => array(0x581), 0x552 => array(0x582) |
|
1183 | - ,0x553 => array(0x583), 0x554 => array(0x584), 0x555 => array(0x585) |
|
1184 | - ,0x556 => array(0x586), 0x587 => array(0x565, 0x582), 0xE33 => array(0xE4D, 0xE32) |
|
1185 | - ,0x1E00 => array(0x1E01), 0x1E02 => array(0x1E03), 0x1E04 => array(0x1E05) |
|
1186 | - ,0x1E06 => array(0x1E07), 0x1E08 => array(0x1E09), 0x1E0A => array(0x1E0B) |
|
1187 | - ,0x1E0C => array(0x1E0D), 0x1E0E => array(0x1E0F), 0x1E10 => array(0x1E11) |
|
1188 | - ,0x1E12 => array(0x1E13), 0x1E14 => array(0x1E15), 0x1E16 => array(0x1E17) |
|
1189 | - ,0x1E18 => array(0x1E19), 0x1E1A => array(0x1E1B), 0x1E1C => array(0x1E1D) |
|
1190 | - ,0x1E1E => array(0x1E1F), 0x1E20 => array(0x1E21), 0x1E22 => array(0x1E23) |
|
1191 | - ,0x1E24 => array(0x1E25), 0x1E26 => array(0x1E27), 0x1E28 => array(0x1E29) |
|
1192 | - ,0x1E2A => array(0x1E2B), 0x1E2C => array(0x1E2D), 0x1E2E => array(0x1E2F) |
|
1193 | - ,0x1E30 => array(0x1E31), 0x1E32 => array(0x1E33), 0x1E34 => array(0x1E35) |
|
1194 | - ,0x1E36 => array(0x1E37), 0x1E38 => array(0x1E39), 0x1E3A => array(0x1E3B) |
|
1195 | - ,0x1E3C => array(0x1E3D), 0x1E3E => array(0x1E3F), 0x1E40 => array(0x1E41) |
|
1196 | - ,0x1E42 => array(0x1E43), 0x1E44 => array(0x1E45), 0x1E46 => array(0x1E47) |
|
1197 | - ,0x1E48 => array(0x1E49), 0x1E4A => array(0x1E4B), 0x1E4C => array(0x1E4D) |
|
1198 | - ,0x1E4E => array(0x1E4F), 0x1E50 => array(0x1E51), 0x1E52 => array(0x1E53) |
|
1199 | - ,0x1E54 => array(0x1E55), 0x1E56 => array(0x1E57), 0x1E58 => array(0x1E59) |
|
1200 | - ,0x1E5A => array(0x1E5B), 0x1E5C => array(0x1E5D), 0x1E5E => array(0x1E5F) |
|
1201 | - ,0x1E60 => array(0x1E61), 0x1E62 => array(0x1E63), 0x1E64 => array(0x1E65) |
|
1202 | - ,0x1E66 => array(0x1E67), 0x1E68 => array(0x1E69), 0x1E6A => array(0x1E6B) |
|
1203 | - ,0x1E6C => array(0x1E6D), 0x1E6E => array(0x1E6F), 0x1E70 => array(0x1E71) |
|
1204 | - ,0x1E72 => array(0x1E73), 0x1E74 => array(0x1E75), 0x1E76 => array(0x1E77) |
|
1205 | - ,0x1E78 => array(0x1E79), 0x1E7A => array(0x1E7B), 0x1E7C => array(0x1E7D) |
|
1206 | - ,0x1E7E => array(0x1E7F), 0x1E80 => array(0x1E81), 0x1E82 => array(0x1E83) |
|
1207 | - ,0x1E84 => array(0x1E85), 0x1E86 => array(0x1E87), 0x1E88 => array(0x1E89) |
|
1208 | - ,0x1E8A => array(0x1E8B), 0x1E8C => array(0x1E8D), 0x1E8E => array(0x1E8F) |
|
1209 | - ,0x1E90 => array(0x1E91), 0x1E92 => array(0x1E93), 0x1E94 => array(0x1E95) |
|
1210 | - ,0x1E96 => array(0x68, 0x331), 0x1E97 => array(0x74, 0x308), 0x1E98 => array(0x77, 0x30A) |
|
1211 | - ,0x1E99 => array(0x79, 0x30A), 0x1E9A => array(0x61, 0x2BE), 0x1E9B => array(0x1E61) |
|
1212 | - ,0x1EA0 => array(0x1EA1), 0x1EA2 => array(0x1EA3), 0x1EA4 => array(0x1EA5) |
|
1213 | - ,0x1EA6 => array(0x1EA7), 0x1EA8 => array(0x1EA9), 0x1EAA => array(0x1EAB) |
|
1214 | - ,0x1EAC => array(0x1EAD), 0x1EAE => array(0x1EAF), 0x1EB0 => array(0x1EB1) |
|
1215 | - ,0x1EB2 => array(0x1EB3), 0x1EB4 => array(0x1EB5), 0x1EB6 => array(0x1EB7) |
|
1216 | - ,0x1EB8 => array(0x1EB9), 0x1EBA => array(0x1EBB), 0x1EBC => array(0x1EBD) |
|
1217 | - ,0x1EBE => array(0x1EBF), 0x1EC0 => array(0x1EC1), 0x1EC2 => array(0x1EC3) |
|
1218 | - ,0x1EC4 => array(0x1EC5), 0x1EC6 => array(0x1EC7), 0x1EC8 => array(0x1EC9) |
|
1219 | - ,0x1ECA => array(0x1ECB), 0x1ECC => array(0x1ECD), 0x1ECE => array(0x1ECF) |
|
1220 | - ,0x1ED0 => array(0x1ED1), 0x1ED2 => array(0x1ED3), 0x1ED4 => array(0x1ED5) |
|
1221 | - ,0x1ED6 => array(0x1ED7), 0x1ED8 => array(0x1ED9), 0x1EDA => array(0x1EDB) |
|
1222 | - ,0x1EDC => array(0x1EDD), 0x1EDE => array(0x1EDF), 0x1EE0 => array(0x1EE1) |
|
1223 | - ,0x1EE2 => array(0x1EE3), 0x1EE4 => array(0x1EE5), 0x1EE6 => array(0x1EE7) |
|
1224 | - ,0x1EE8 => array(0x1EE9), 0x1EEA => array(0x1EEB), 0x1EEC => array(0x1EED) |
|
1225 | - ,0x1EEE => array(0x1EEF), 0x1EF0 => array(0x1EF1), 0x1EF2 => array(0x1EF3) |
|
1226 | - ,0x1EF4 => array(0x1EF5), 0x1EF6 => array(0x1EF7), 0x1EF8 => array(0x1EF9) |
|
1227 | - ,0x1F08 => array(0x1F00), 0x1F09 => array(0x1F01), 0x1F0A => array(0x1F02) |
|
1228 | - ,0x1F0B => array(0x1F03), 0x1F0C => array(0x1F04), 0x1F0D => array(0x1F05) |
|
1229 | - ,0x1F0E => array(0x1F06), 0x1F0F => array(0x1F07), 0x1F18 => array(0x1F10) |
|
1230 | - ,0x1F19 => array(0x1F11), 0x1F1A => array(0x1F12), 0x1F1B => array(0x1F13) |
|
1231 | - ,0x1F1C => array(0x1F14), 0x1F1D => array(0x1F15), 0x1F28 => array(0x1F20) |
|
1232 | - ,0x1F29 => array(0x1F21), 0x1F2A => array(0x1F22), 0x1F2B => array(0x1F23) |
|
1233 | - ,0x1F2C => array(0x1F24), 0x1F2D => array(0x1F25), 0x1F2E => array(0x1F26) |
|
1234 | - ,0x1F2F => array(0x1F27), 0x1F38 => array(0x1F30), 0x1F39 => array(0x1F31) |
|
1235 | - ,0x1F3A => array(0x1F32), 0x1F3B => array(0x1F33), 0x1F3C => array(0x1F34) |
|
1236 | - ,0x1F3D => array(0x1F35), 0x1F3E => array(0x1F36), 0x1F3F => array(0x1F37) |
|
1237 | - ,0x1F48 => array(0x1F40), 0x1F49 => array(0x1F41), 0x1F4A => array(0x1F42) |
|
1238 | - ,0x1F4B => array(0x1F43), 0x1F4C => array(0x1F44), 0x1F4D => array(0x1F45) |
|
1239 | - ,0x1F50 => array(0x3C5, 0x313), 0x1F52 => array(0x3C5, 0x313, 0x300) |
|
1240 | - ,0x1F54 => array(0x3C5, 0x313, 0x301), 0x1F56 => array(0x3C5, 0x313, 0x342) |
|
1241 | - ,0x1F59 => array(0x1F51), 0x1F5B => array(0x1F53), 0x1F5D => array(0x1F55) |
|
1242 | - ,0x1F5F => array(0x1F57), 0x1F68 => array(0x1F60), 0x1F69 => array(0x1F61) |
|
1243 | - ,0x1F6A => array(0x1F62), 0x1F6B => array(0x1F63), 0x1F6C => array(0x1F64) |
|
1244 | - ,0x1F6D => array(0x1F65), 0x1F6E => array(0x1F66), 0x1F6F => array(0x1F67) |
|
1245 | - ,0x1F80 => array(0x1F00, 0x3B9), 0x1F81 => array(0x1F01, 0x3B9) |
|
1246 | - ,0x1F82 => array(0x1F02, 0x3B9), 0x1F83 => array(0x1F03, 0x3B9) |
|
1247 | - ,0x1F84 => array(0x1F04, 0x3B9), 0x1F85 => array(0x1F05, 0x3B9) |
|
1248 | - ,0x1F86 => array(0x1F06, 0x3B9), 0x1F87 => array(0x1F07, 0x3B9) |
|
1249 | - ,0x1F88 => array(0x1F00, 0x3B9), 0x1F89 => array(0x1F01, 0x3B9) |
|
1250 | - ,0x1F8A => array(0x1F02, 0x3B9), 0x1F8B => array(0x1F03, 0x3B9) |
|
1251 | - ,0x1F8C => array(0x1F04, 0x3B9), 0x1F8D => array(0x1F05, 0x3B9) |
|
1252 | - ,0x1F8E => array(0x1F06, 0x3B9), 0x1F8F => array(0x1F07, 0x3B9) |
|
1253 | - ,0x1F90 => array(0x1F20, 0x3B9), 0x1F91 => array(0x1F21, 0x3B9) |
|
1254 | - ,0x1F92 => array(0x1F22, 0x3B9), 0x1F93 => array(0x1F23, 0x3B9) |
|
1255 | - ,0x1F94 => array(0x1F24, 0x3B9), 0x1F95 => array(0x1F25, 0x3B9) |
|
1256 | - ,0x1F96 => array(0x1F26, 0x3B9), 0x1F97 => array(0x1F27, 0x3B9) |
|
1257 | - ,0x1F98 => array(0x1F20, 0x3B9), 0x1F99 => array(0x1F21, 0x3B9) |
|
1258 | - ,0x1F9A => array(0x1F22, 0x3B9), 0x1F9B => array(0x1F23, 0x3B9) |
|
1259 | - ,0x1F9C => array(0x1F24, 0x3B9), 0x1F9D => array(0x1F25, 0x3B9) |
|
1260 | - ,0x1F9E => array(0x1F26, 0x3B9), 0x1F9F => array(0x1F27, 0x3B9) |
|
1261 | - ,0x1FA0 => array(0x1F60, 0x3B9), 0x1FA1 => array(0x1F61, 0x3B9) |
|
1262 | - ,0x1FA2 => array(0x1F62, 0x3B9), 0x1FA3 => array(0x1F63, 0x3B9) |
|
1263 | - ,0x1FA4 => array(0x1F64, 0x3B9), 0x1FA5 => array(0x1F65, 0x3B9) |
|
1264 | - ,0x1FA6 => array(0x1F66, 0x3B9), 0x1FA7 => array(0x1F67, 0x3B9) |
|
1265 | - ,0x1FA8 => array(0x1F60, 0x3B9), 0x1FA9 => array(0x1F61, 0x3B9) |
|
1266 | - ,0x1FAA => array(0x1F62, 0x3B9), 0x1FAB => array(0x1F63, 0x3B9) |
|
1267 | - ,0x1FAC => array(0x1F64, 0x3B9), 0x1FAD => array(0x1F65, 0x3B9) |
|
1268 | - ,0x1FAE => array(0x1F66, 0x3B9), 0x1FAF => array(0x1F67, 0x3B9) |
|
1269 | - ,0x1FB2 => array(0x1F70, 0x3B9), 0x1FB3 => array(0x3B1, 0x3B9) |
|
1270 | - ,0x1FB4 => array(0x3AC, 0x3B9), 0x1FB6 => array(0x3B1, 0x342) |
|
1271 | - ,0x1FB7 => array(0x3B1, 0x342, 0x3B9), 0x1FB8 => array(0x1FB0) |
|
1272 | - ,0x1FB9 => array(0x1FB1), 0x1FBA => array(0x1F70), 0x1FBB => array(0x1F71) |
|
1273 | - ,0x1FBC => array(0x3B1, 0x3B9), 0x1FBE => array(0x3B9) |
|
1274 | - ,0x1FC2 => array(0x1F74, 0x3B9), 0x1FC3 => array(0x3B7, 0x3B9) |
|
1275 | - ,0x1FC4 => array(0x3AE, 0x3B9), 0x1FC6 => array(0x3B7, 0x342) |
|
1276 | - ,0x1FC7 => array(0x3B7, 0x342, 0x3B9), 0x1FC8 => array(0x1F72) |
|
1277 | - ,0x1FC9 => array(0x1F73), 0x1FCA => array(0x1F74), 0x1FCB => array(0x1F75) |
|
1278 | - ,0x1FCC => array(0x3B7, 0x3B9), 0x1FD2 => array(0x3B9, 0x308, 0x300) |
|
1279 | - ,0x1FD3 => array(0x3B9, 0x308, 0x301), 0x1FD6 => array(0x3B9, 0x342) |
|
1280 | - ,0x1FD7 => array(0x3B9, 0x308, 0x342), 0x1FD8 => array(0x1FD0) |
|
1281 | - ,0x1FD9 => array(0x1FD1), 0x1FDA => array(0x1F76) |
|
1282 | - ,0x1FDB => array(0x1F77), 0x1FE2 => array(0x3C5, 0x308, 0x300) |
|
1283 | - ,0x1FE3 => array(0x3C5, 0x308, 0x301), 0x1FE4 => array(0x3C1, 0x313) |
|
1284 | - ,0x1FE6 => array(0x3C5, 0x342), 0x1FE7 => array(0x3C5, 0x308, 0x342) |
|
1285 | - ,0x1FE8 => array(0x1FE0), 0x1FE9 => array(0x1FE1) |
|
1286 | - ,0x1FEA => array(0x1F7A), 0x1FEB => array(0x1F7B) |
|
1287 | - ,0x1FEC => array(0x1FE5), 0x1FF2 => array(0x1F7C, 0x3B9) |
|
1288 | - ,0x1FF3 => array(0x3C9, 0x3B9), 0x1FF4 => array(0x3CE, 0x3B9) |
|
1289 | - ,0x1FF6 => array(0x3C9, 0x342), 0x1FF7 => array(0x3C9, 0x342, 0x3B9) |
|
1290 | - ,0x1FF8 => array(0x1F78), 0x1FF9 => array(0x1F79), 0x1FFA => array(0x1F7C) |
|
1291 | - ,0x1FFB => array(0x1F7D), 0x1FFC => array(0x3C9, 0x3B9) |
|
1292 | - ,0x20A8 => array(0x72, 0x73), 0x2102 => array(0x63), 0x2103 => array(0xB0, 0x63) |
|
1293 | - ,0x2107 => array(0x25B), 0x2109 => array(0xB0, 0x66), 0x210B => array(0x68) |
|
1294 | - ,0x210C => array(0x68), 0x210D => array(0x68), 0x2110 => array(0x69) |
|
1295 | - ,0x2111 => array(0x69), 0x2112 => array(0x6C), 0x2115 => array(0x6E) |
|
1296 | - ,0x2116 => array(0x6E, 0x6F), 0x2119 => array(0x70), 0x211A => array(0x71) |
|
1297 | - ,0x211B => array(0x72), 0x211C => array(0x72), 0x211D => array(0x72) |
|
1298 | - ,0x2120 => array(0x73, 0x6D), 0x2121 => array(0x74, 0x65, 0x6C) |
|
1299 | - ,0x2122 => array(0x74, 0x6D), 0x2124 => array(0x7A), 0x2126 => array(0x3C9) |
|
1300 | - ,0x2128 => array(0x7A), 0x212A => array(0x6B), 0x212B => array(0xE5) |
|
1301 | - ,0x212C => array(0x62), 0x212D => array(0x63), 0x2130 => array(0x65) |
|
1302 | - ,0x2131 => array(0x66), 0x2133 => array(0x6D), 0x213E => array(0x3B3) |
|
1303 | - ,0x213F => array(0x3C0), 0x2145 => array(0x64) ,0x2160 => array(0x2170) |
|
1304 | - ,0x2161 => array(0x2171), 0x2162 => array(0x2172), 0x2163 => array(0x2173) |
|
1305 | - ,0x2164 => array(0x2174), 0x2165 => array(0x2175), 0x2166 => array(0x2176) |
|
1306 | - ,0x2167 => array(0x2177), 0x2168 => array(0x2178), 0x2169 => array(0x2179) |
|
1307 | - ,0x216A => array(0x217A), 0x216B => array(0x217B), 0x216C => array(0x217C) |
|
1308 | - ,0x216D => array(0x217D), 0x216E => array(0x217E), 0x216F => array(0x217F) |
|
1309 | - ,0x24B6 => array(0x24D0), 0x24B7 => array(0x24D1), 0x24B8 => array(0x24D2) |
|
1310 | - ,0x24B9 => array(0x24D3), 0x24BA => array(0x24D4), 0x24BB => array(0x24D5) |
|
1311 | - ,0x24BC => array(0x24D6), 0x24BD => array(0x24D7), 0x24BE => array(0x24D8) |
|
1312 | - ,0x24BF => array(0x24D9), 0x24C0 => array(0x24DA), 0x24C1 => array(0x24DB) |
|
1313 | - ,0x24C2 => array(0x24DC), 0x24C3 => array(0x24DD), 0x24C4 => array(0x24DE) |
|
1314 | - ,0x24C5 => array(0x24DF), 0x24C6 => array(0x24E0), 0x24C7 => array(0x24E1) |
|
1315 | - ,0x24C8 => array(0x24E2), 0x24C9 => array(0x24E3), 0x24CA => array(0x24E4) |
|
1316 | - ,0x24CB => array(0x24E5), 0x24CC => array(0x24E6), 0x24CD => array(0x24E7) |
|
1317 | - ,0x24CE => array(0x24E8), 0x24CF => array(0x24E9), 0x3371 => array(0x68, 0x70, 0x61) |
|
1318 | - ,0x3373 => array(0x61, 0x75), 0x3375 => array(0x6F, 0x76) |
|
1319 | - ,0x3380 => array(0x70, 0x61), 0x3381 => array(0x6E, 0x61) |
|
1320 | - ,0x3382 => array(0x3BC, 0x61), 0x3383 => array(0x6D, 0x61) |
|
1321 | - ,0x3384 => array(0x6B, 0x61), 0x3385 => array(0x6B, 0x62) |
|
1322 | - ,0x3386 => array(0x6D, 0x62), 0x3387 => array(0x67, 0x62) |
|
1323 | - ,0x338A => array(0x70, 0x66), 0x338B => array(0x6E, 0x66) |
|
1324 | - ,0x338C => array(0x3BC, 0x66), 0x3390 => array(0x68, 0x7A) |
|
1325 | - ,0x3391 => array(0x6B, 0x68, 0x7A), 0x3392 => array(0x6D, 0x68, 0x7A) |
|
1326 | - ,0x3393 => array(0x67, 0x68, 0x7A), 0x3394 => array(0x74, 0x68, 0x7A) |
|
1327 | - ,0x33A9 => array(0x70, 0x61), 0x33AA => array(0x6B, 0x70, 0x61) |
|
1328 | - ,0x33AB => array(0x6D, 0x70, 0x61), 0x33AC => array(0x67, 0x70, 0x61) |
|
1329 | - ,0x33B4 => array(0x70, 0x76), 0x33B5 => array(0x6E, 0x76) |
|
1330 | - ,0x33B6 => array(0x3BC, 0x76), 0x33B7 => array(0x6D, 0x76) |
|
1331 | - ,0x33B8 => array(0x6B, 0x76), 0x33B9 => array(0x6D, 0x76) |
|
1332 | - ,0x33BA => array(0x70, 0x77), 0x33BB => array(0x6E, 0x77) |
|
1333 | - ,0x33BC => array(0x3BC, 0x77), 0x33BD => array(0x6D, 0x77) |
|
1334 | - ,0x33BE => array(0x6B, 0x77), 0x33BF => array(0x6D, 0x77) |
|
1335 | - ,0x33C0 => array(0x6B, 0x3C9), 0x33C1 => array(0x6D, 0x3C9) /* |
|
1012 | + /** |
|
1013 | + * Holds all relevant mapping tables |
|
1014 | + * See RFC3454 for details |
|
1015 | + * |
|
1016 | + * @private array |
|
1017 | + * @since 0.5.2 |
|
1018 | + */ |
|
1019 | + protected static $NP = array |
|
1020 | + ('map_nothing' => array(0xAD, 0x34F, 0x1806, 0x180B, 0x180C, 0x180D, 0x200B, 0x200C |
|
1021 | + ,0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02, 0xFE03, 0xFE04, 0xFE05, 0xFE06, 0xFE07 |
|
1022 | + ,0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, 0xFE0D, 0xFE0E, 0xFE0F, 0xFEFF |
|
1023 | + ) |
|
1024 | + ,'general_prohibited' => array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 |
|
1025 | + ,20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 ,33, 34, 35, 36, 37, 38, 39, 40, 41, 42 |
|
1026 | + ,43, 44, 47, 59, 60, 61, 62, 63, 64, 91, 92, 93, 94, 95, 96, 123, 124, 125, 126, 127, 0x3002 |
|
1027 | + ) |
|
1028 | + ,'prohibit' => array(0xA0, 0x340, 0x341, 0x6DD, 0x70F, 0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003 |
|
1029 | + ,0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x200B, 0x200C, 0x200D, 0x200E, 0x200F |
|
1030 | + ,0x2028, 0x2029, 0x202A, 0x202B, 0x202C, 0x202D, 0x202E, 0x202F, 0x205F, 0x206A, 0x206B, 0x206C |
|
1031 | + ,0x206D, 0x206E, 0x206F, 0x3000, 0xFEFF, 0xFFF9, 0xFFFA, 0xFFFB, 0xFFFC, 0xFFFD, 0xFFFE, 0xFFFF |
|
1032 | + ,0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, 0x5FFFF, 0x6FFFE |
|
1033 | + ,0x6FFFF, 0x7FFFE, 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE, 0xBFFFF |
|
1034 | + ,0xCFFFE, 0xCFFFF, 0xDFFFE, 0xDFFFF, 0xE0001, 0xEFFFE, 0xEFFFF, 0xFFFFE, 0xFFFFF, 0x10FFFE, 0x10FFFF |
|
1035 | + ) |
|
1036 | + ,'prohibit_ranges' => array(array(0x80, 0x9F), array(0x2060, 0x206F), array(0x1D173, 0x1D17A) |
|
1037 | + ,array(0xE000, 0xF8FF) ,array(0xF0000, 0xFFFFD), array(0x100000, 0x10FFFD) |
|
1038 | + ,array(0xFDD0, 0xFDEF), array(0xD800, 0xDFFF), array(0x2FF0, 0x2FFB), array(0xE0020, 0xE007F) |
|
1039 | + ) |
|
1040 | + ,'replacemaps' => array(0x41 => array(0x61), 0x42 => array(0x62), 0x43 => array(0x63) |
|
1041 | + ,0x44 => array(0x64), 0x45 => array(0x65), 0x46 => array(0x66), 0x47 => array(0x67) |
|
1042 | + ,0x48 => array(0x68), 0x49 => array(0x69), 0x4A => array(0x6A), 0x4B => array(0x6B) |
|
1043 | + ,0x4C => array(0x6C), 0x4D => array(0x6D), 0x4E => array(0x6E), 0x4F => array(0x6F) |
|
1044 | + ,0x50 => array(0x70), 0x51 => array(0x71), 0x52 => array(0x72), 0x53 => array(0x73) |
|
1045 | + ,0x54 => array(0x74), 0x55 => array(0x75), 0x56 => array(0x76), 0x57 => array(0x77) |
|
1046 | + ,0x58 => array(0x78), 0x59 => array(0x79), 0x5A => array(0x7A), 0xB5 => array(0x3BC) |
|
1047 | + ,0xC0 => array(0xE0), 0xC1 => array(0xE1), 0xC2 => array(0xE2), 0xC3 => array(0xE3) |
|
1048 | + ,0xC4 => array(0xE4), 0xC5 => array(0xE5), 0xC6 => array(0xE6), 0xC7 => array(0xE7) |
|
1049 | + ,0xC8 => array(0xE8), 0xC9 => array(0xE9), 0xCA => array(0xEA), 0xCB => array(0xEB) |
|
1050 | + ,0xCC => array(0xEC), 0xCD => array(0xED), 0xCE => array(0xEE), 0xCF => array(0xEF) |
|
1051 | + ,0xD0 => array(0xF0), 0xD1 => array(0xF1), 0xD2 => array(0xF2), 0xD3 => array(0xF3) |
|
1052 | + ,0xD4 => array(0xF4), 0xD5 => array(0xF5), 0xD6 => array(0xF6), 0xD8 => array(0xF8) |
|
1053 | + ,0xD9 => array(0xF9), 0xDA => array(0xFA), 0xDB => array(0xFB), 0xDC => array(0xFC) |
|
1054 | + ,0xDD => array(0xFD), 0xDE => array(0xFE), 0xDF => array(0x73, 0x73) |
|
1055 | + ,0x100 => array(0x101), 0x102 => array(0x103), 0x104 => array(0x105) |
|
1056 | + ,0x106 => array(0x107), 0x108 => array(0x109), 0x10A => array(0x10B) |
|
1057 | + ,0x10C => array(0x10D), 0x10E => array(0x10F), 0x110 => array(0x111) |
|
1058 | + ,0x112 => array(0x113), 0x114 => array(0x115), 0x116 => array(0x117) |
|
1059 | + ,0x118 => array(0x119), 0x11A => array(0x11B), 0x11C => array(0x11D) |
|
1060 | + ,0x11E => array(0x11F), 0x120 => array(0x121), 0x122 => array(0x123) |
|
1061 | + ,0x124 => array(0x125), 0x126 => array(0x127), 0x128 => array(0x129) |
|
1062 | + ,0x12A => array(0x12B), 0x12C => array(0x12D), 0x12E => array(0x12F) |
|
1063 | + ,0x130 => array(0x69, 0x307), 0x132 => array(0x133), 0x134 => array(0x135) |
|
1064 | + ,0x136 => array(0x137), 0x139 => array(0x13A), 0x13B => array(0x13C) |
|
1065 | + ,0x13D => array(0x13E), 0x13F => array(0x140), 0x141 => array(0x142) |
|
1066 | + ,0x143 => array(0x144), 0x145 => array(0x146), 0x147 => array(0x148) |
|
1067 | + ,0x149 => array(0x2BC, 0x6E), 0x14A => array(0x14B), 0x14C => array(0x14D) |
|
1068 | + ,0x14E => array(0x14F), 0x150 => array(0x151), 0x152 => array(0x153) |
|
1069 | + ,0x154 => array(0x155), 0x156 => array(0x157), 0x158 => array(0x159) |
|
1070 | + ,0x15A => array(0x15B), 0x15C => array(0x15D), 0x15E => array(0x15F) |
|
1071 | + ,0x160 => array(0x161), 0x162 => array(0x163), 0x164 => array(0x165) |
|
1072 | + ,0x166 => array(0x167), 0x168 => array(0x169), 0x16A => array(0x16B) |
|
1073 | + ,0x16C => array(0x16D), 0x16E => array(0x16F), 0x170 => array(0x171) |
|
1074 | + ,0x172 => array(0x173), 0x174 => array(0x175), 0x176 => array(0x177) |
|
1075 | + ,0x178 => array(0xFF), 0x179 => array(0x17A), 0x17B => array(0x17C) |
|
1076 | + ,0x17D => array(0x17E), 0x17F => array(0x73), 0x181 => array(0x253) |
|
1077 | + ,0x182 => array(0x183), 0x184 => array(0x185), 0x186 => array(0x254) |
|
1078 | + ,0x187 => array(0x188), 0x189 => array(0x256), 0x18A => array(0x257) |
|
1079 | + ,0x18B => array(0x18C), 0x18E => array(0x1DD), 0x18F => array(0x259) |
|
1080 | + ,0x190 => array(0x25B), 0x191 => array(0x192), 0x193 => array(0x260) |
|
1081 | + ,0x194 => array(0x263), 0x196 => array(0x269), 0x197 => array(0x268) |
|
1082 | + ,0x198 => array(0x199), 0x19C => array(0x26F), 0x19D => array(0x272) |
|
1083 | + ,0x19F => array(0x275), 0x1A0 => array(0x1A1), 0x1A2 => array(0x1A3) |
|
1084 | + ,0x1A4 => array(0x1A5), 0x1A6 => array(0x280), 0x1A7 => array(0x1A8) |
|
1085 | + ,0x1A9 => array(0x283), 0x1AC => array(0x1AD), 0x1AE => array(0x288) |
|
1086 | + ,0x1AF => array(0x1B0), 0x1B1 => array(0x28A), 0x1B2 => array(0x28B) |
|
1087 | + ,0x1B3 => array(0x1B4), 0x1B5 => array(0x1B6), 0x1B7 => array(0x292) |
|
1088 | + ,0x1B8 => array(0x1B9), 0x1BC => array(0x1BD), 0x1C4 => array(0x1C6) |
|
1089 | + ,0x1C5 => array(0x1C6), 0x1C7 => array(0x1C9), 0x1C8 => array(0x1C9) |
|
1090 | + ,0x1CA => array(0x1CC), 0x1CB => array(0x1CC), 0x1CD => array(0x1CE) |
|
1091 | + ,0x1CF => array(0x1D0), 0x1D1 => array(0x1D2), 0x1D3 => array(0x1D4) |
|
1092 | + ,0x1D5 => array(0x1D6), 0x1D7 => array(0x1D8), 0x1D9 => array(0x1DA) |
|
1093 | + ,0x1DB => array(0x1DC), 0x1DE => array(0x1DF), 0x1E0 => array(0x1E1) |
|
1094 | + ,0x1E2 => array(0x1E3), 0x1E4 => array(0x1E5), 0x1E6 => array(0x1E7) |
|
1095 | + ,0x1E8 => array(0x1E9), 0x1EA => array(0x1EB), 0x1EC => array(0x1ED) |
|
1096 | + ,0x1EE => array(0x1EF), 0x1F0 => array(0x6A, 0x30C), 0x1F1 => array(0x1F3) |
|
1097 | + ,0x1F2 => array(0x1F3), 0x1F4 => array(0x1F5), 0x1F6 => array(0x195) |
|
1098 | + ,0x1F7 => array(0x1BF), 0x1F8 => array(0x1F9), 0x1FA => array(0x1FB) |
|
1099 | + ,0x1FC => array(0x1FD), 0x1FE => array(0x1FF), 0x200 => array(0x201) |
|
1100 | + ,0x202 => array(0x203), 0x204 => array(0x205), 0x206 => array(0x207) |
|
1101 | + ,0x208 => array(0x209), 0x20A => array(0x20B), 0x20C => array(0x20D) |
|
1102 | + ,0x20E => array(0x20F), 0x210 => array(0x211), 0x212 => array(0x213) |
|
1103 | + ,0x214 => array(0x215), 0x216 => array(0x217), 0x218 => array(0x219) |
|
1104 | + ,0x21A => array(0x21B), 0x21C => array(0x21D), 0x21E => array(0x21F) |
|
1105 | + ,0x220 => array(0x19E), 0x222 => array(0x223), 0x224 => array(0x225) |
|
1106 | + ,0x226 => array(0x227), 0x228 => array(0x229), 0x22A => array(0x22B) |
|
1107 | + ,0x22C => array(0x22D), 0x22E => array(0x22F), 0x230 => array(0x231) |
|
1108 | + ,0x232 => array(0x233), 0x345 => array(0x3B9), 0x37A => array(0x20, 0x3B9) |
|
1109 | + ,0x386 => array(0x3AC), 0x388 => array(0x3AD), 0x389 => array(0x3AE) |
|
1110 | + ,0x38A => array(0x3AF), 0x38C => array(0x3CC), 0x38E => array(0x3CD) |
|
1111 | + ,0x38F => array(0x3CE), 0x390 => array(0x3B9, 0x308, 0x301) |
|
1112 | + ,0x391 => array(0x3B1), 0x392 => array(0x3B2), 0x393 => array(0x3B3) |
|
1113 | + ,0x394 => array(0x3B4), 0x395 => array(0x3B5), 0x396 => array(0x3B6) |
|
1114 | + ,0x397 => array(0x3B7), 0x398 => array(0x3B8), 0x399 => array(0x3B9) |
|
1115 | + ,0x39A => array(0x3BA), 0x39B => array(0x3BB), 0x39C => array(0x3BC) |
|
1116 | + ,0x39D => array(0x3BD), 0x39E => array(0x3BE), 0x39F => array(0x3BF) |
|
1117 | + ,0x3A0 => array(0x3C0), 0x3A1 => array(0x3C1), 0x3A3 => array(0x3C3) |
|
1118 | + ,0x3A4 => array(0x3C4), 0x3A5 => array(0x3C5), 0x3A6 => array(0x3C6) |
|
1119 | + ,0x3A7 => array(0x3C7), 0x3A8 => array(0x3C8), 0x3A9 => array(0x3C9) |
|
1120 | + ,0x3AA => array(0x3CA), 0x3AB => array(0x3CB), 0x3B0 => array(0x3C5, 0x308, 0x301) |
|
1121 | + ,0x3C2 => array(0x3C3), 0x3D0 => array(0x3B2), 0x3D1 => array(0x3B8) |
|
1122 | + ,0x3D2 => array(0x3C5), 0x3D3 => array(0x3CD), 0x3D4 => array(0x3CB) |
|
1123 | + ,0x3D5 => array(0x3C6), 0x3D6 => array(0x3C0), 0x3D8 => array(0x3D9) |
|
1124 | + ,0x3DA => array(0x3DB), 0x3DC => array(0x3DD), 0x3DE => array(0x3DF) |
|
1125 | + ,0x3E0 => array(0x3E1), 0x3E2 => array(0x3E3), 0x3E4 => array(0x3E5) |
|
1126 | + ,0x3E6 => array(0x3E7), 0x3E8 => array(0x3E9), 0x3EA => array(0x3EB) |
|
1127 | + ,0x3EC => array(0x3ED), 0x3EE => array(0x3EF), 0x3F0 => array(0x3BA) |
|
1128 | + ,0x3F1 => array(0x3C1), 0x3F2 => array(0x3C3), 0x3F4 => array(0x3B8) |
|
1129 | + ,0x3F5 => array(0x3B5), 0x400 => array(0x450), 0x401 => array(0x451) |
|
1130 | + ,0x402 => array(0x452), 0x403 => array(0x453), 0x404 => array(0x454) |
|
1131 | + ,0x405 => array(0x455), 0x406 => array(0x456), 0x407 => array(0x457) |
|
1132 | + ,0x408 => array(0x458), 0x409 => array(0x459), 0x40A => array(0x45A) |
|
1133 | + ,0x40B => array(0x45B), 0x40C => array(0x45C), 0x40D => array(0x45D) |
|
1134 | + ,0x40E => array(0x45E), 0x40F => array(0x45F), 0x410 => array(0x430) |
|
1135 | + ,0x411 => array(0x431), 0x412 => array(0x432), 0x413 => array(0x433) |
|
1136 | + ,0x414 => array(0x434), 0x415 => array(0x435), 0x416 => array(0x436) |
|
1137 | + ,0x417 => array(0x437), 0x418 => array(0x438), 0x419 => array(0x439) |
|
1138 | + ,0x41A => array(0x43A), 0x41B => array(0x43B), 0x41C => array(0x43C) |
|
1139 | + ,0x41D => array(0x43D), 0x41E => array(0x43E), 0x41F => array(0x43F) |
|
1140 | + ,0x420 => array(0x440), 0x421 => array(0x441), 0x422 => array(0x442) |
|
1141 | + ,0x423 => array(0x443), 0x424 => array(0x444), 0x425 => array(0x445) |
|
1142 | + ,0x426 => array(0x446), 0x427 => array(0x447), 0x428 => array(0x448) |
|
1143 | + ,0x429 => array(0x449), 0x42A => array(0x44A), 0x42B => array(0x44B) |
|
1144 | + ,0x42C => array(0x44C), 0x42D => array(0x44D), 0x42E => array(0x44E) |
|
1145 | + ,0x42F => array(0x44F), 0x460 => array(0x461), 0x462 => array(0x463) |
|
1146 | + ,0x464 => array(0x465), 0x466 => array(0x467), 0x468 => array(0x469) |
|
1147 | + ,0x46A => array(0x46B), 0x46C => array(0x46D), 0x46E => array(0x46F) |
|
1148 | + ,0x470 => array(0x471), 0x472 => array(0x473), 0x474 => array(0x475) |
|
1149 | + ,0x476 => array(0x477), 0x478 => array(0x479), 0x47A => array(0x47B) |
|
1150 | + ,0x47C => array(0x47D), 0x47E => array(0x47F), 0x480 => array(0x481) |
|
1151 | + ,0x48A => array(0x48B), 0x48C => array(0x48D), 0x48E => array(0x48F) |
|
1152 | + ,0x490 => array(0x491), 0x492 => array(0x493), 0x494 => array(0x495) |
|
1153 | + ,0x496 => array(0x497), 0x498 => array(0x499), 0x49A => array(0x49B) |
|
1154 | + ,0x49C => array(0x49D), 0x49E => array(0x49F), 0x4A0 => array(0x4A1) |
|
1155 | + ,0x4A2 => array(0x4A3), 0x4A4 => array(0x4A5), 0x4A6 => array(0x4A7) |
|
1156 | + ,0x4A8 => array(0x4A9), 0x4AA => array(0x4AB), 0x4AC => array(0x4AD) |
|
1157 | + ,0x4AE => array(0x4AF), 0x4B0 => array(0x4B1), 0x4B2 => array(0x4B3) |
|
1158 | + ,0x4B4 => array(0x4B5), 0x4B6 => array(0x4B7), 0x4B8 => array(0x4B9) |
|
1159 | + ,0x4BA => array(0x4BB), 0x4BC => array(0x4BD), 0x4BE => array(0x4BF) |
|
1160 | + ,0x4C1 => array(0x4C2), 0x4C3 => array(0x4C4), 0x4C5 => array(0x4C6) |
|
1161 | + ,0x4C7 => array(0x4C8), 0x4C9 => array(0x4CA), 0x4CB => array(0x4CC) |
|
1162 | + ,0x4CD => array(0x4CE), 0x4D0 => array(0x4D1), 0x4D2 => array(0x4D3) |
|
1163 | + ,0x4D4 => array(0x4D5), 0x4D6 => array(0x4D7), 0x4D8 => array(0x4D9) |
|
1164 | + ,0x4DA => array(0x4DB), 0x4DC => array(0x4DD), 0x4DE => array(0x4DF) |
|
1165 | + ,0x4E0 => array(0x4E1), 0x4E2 => array(0x4E3), 0x4E4 => array(0x4E5) |
|
1166 | + ,0x4E6 => array(0x4E7), 0x4E8 => array(0x4E9), 0x4EA => array(0x4EB) |
|
1167 | + ,0x4EC => array(0x4ED), 0x4EE => array(0x4EF), 0x4F0 => array(0x4F1) |
|
1168 | + ,0x4F2 => array(0x4F3), 0x4F4 => array(0x4F5), 0x4F8 => array(0x4F9) |
|
1169 | + ,0x500 => array(0x501), 0x502 => array(0x503), 0x504 => array(0x505) |
|
1170 | + ,0x506 => array(0x507), 0x508 => array(0x509), 0x50A => array(0x50B) |
|
1171 | + ,0x50C => array(0x50D), 0x50E => array(0x50F), 0x531 => array(0x561) |
|
1172 | + ,0x532 => array(0x562), 0x533 => array(0x563), 0x534 => array(0x564) |
|
1173 | + ,0x535 => array(0x565), 0x536 => array(0x566), 0x537 => array(0x567) |
|
1174 | + ,0x538 => array(0x568), 0x539 => array(0x569), 0x53A => array(0x56A) |
|
1175 | + ,0x53B => array(0x56B), 0x53C => array(0x56C), 0x53D => array(0x56D) |
|
1176 | + ,0x53E => array(0x56E), 0x53F => array(0x56F), 0x540 => array(0x570) |
|
1177 | + ,0x541 => array(0x571), 0x542 => array(0x572), 0x543 => array(0x573) |
|
1178 | + ,0x544 => array(0x574), 0x545 => array(0x575), 0x546 => array(0x576) |
|
1179 | + ,0x547 => array(0x577), 0x548 => array(0x578), 0x549 => array(0x579) |
|
1180 | + ,0x54A => array(0x57A), 0x54B => array(0x57B), 0x54C => array(0x57C) |
|
1181 | + ,0x54D => array(0x57D), 0x54E => array(0x57E), 0x54F => array(0x57F) |
|
1182 | + ,0x550 => array(0x580), 0x551 => array(0x581), 0x552 => array(0x582) |
|
1183 | + ,0x553 => array(0x583), 0x554 => array(0x584), 0x555 => array(0x585) |
|
1184 | + ,0x556 => array(0x586), 0x587 => array(0x565, 0x582), 0xE33 => array(0xE4D, 0xE32) |
|
1185 | + ,0x1E00 => array(0x1E01), 0x1E02 => array(0x1E03), 0x1E04 => array(0x1E05) |
|
1186 | + ,0x1E06 => array(0x1E07), 0x1E08 => array(0x1E09), 0x1E0A => array(0x1E0B) |
|
1187 | + ,0x1E0C => array(0x1E0D), 0x1E0E => array(0x1E0F), 0x1E10 => array(0x1E11) |
|
1188 | + ,0x1E12 => array(0x1E13), 0x1E14 => array(0x1E15), 0x1E16 => array(0x1E17) |
|
1189 | + ,0x1E18 => array(0x1E19), 0x1E1A => array(0x1E1B), 0x1E1C => array(0x1E1D) |
|
1190 | + ,0x1E1E => array(0x1E1F), 0x1E20 => array(0x1E21), 0x1E22 => array(0x1E23) |
|
1191 | + ,0x1E24 => array(0x1E25), 0x1E26 => array(0x1E27), 0x1E28 => array(0x1E29) |
|
1192 | + ,0x1E2A => array(0x1E2B), 0x1E2C => array(0x1E2D), 0x1E2E => array(0x1E2F) |
|
1193 | + ,0x1E30 => array(0x1E31), 0x1E32 => array(0x1E33), 0x1E34 => array(0x1E35) |
|
1194 | + ,0x1E36 => array(0x1E37), 0x1E38 => array(0x1E39), 0x1E3A => array(0x1E3B) |
|
1195 | + ,0x1E3C => array(0x1E3D), 0x1E3E => array(0x1E3F), 0x1E40 => array(0x1E41) |
|
1196 | + ,0x1E42 => array(0x1E43), 0x1E44 => array(0x1E45), 0x1E46 => array(0x1E47) |
|
1197 | + ,0x1E48 => array(0x1E49), 0x1E4A => array(0x1E4B), 0x1E4C => array(0x1E4D) |
|
1198 | + ,0x1E4E => array(0x1E4F), 0x1E50 => array(0x1E51), 0x1E52 => array(0x1E53) |
|
1199 | + ,0x1E54 => array(0x1E55), 0x1E56 => array(0x1E57), 0x1E58 => array(0x1E59) |
|
1200 | + ,0x1E5A => array(0x1E5B), 0x1E5C => array(0x1E5D), 0x1E5E => array(0x1E5F) |
|
1201 | + ,0x1E60 => array(0x1E61), 0x1E62 => array(0x1E63), 0x1E64 => array(0x1E65) |
|
1202 | + ,0x1E66 => array(0x1E67), 0x1E68 => array(0x1E69), 0x1E6A => array(0x1E6B) |
|
1203 | + ,0x1E6C => array(0x1E6D), 0x1E6E => array(0x1E6F), 0x1E70 => array(0x1E71) |
|
1204 | + ,0x1E72 => array(0x1E73), 0x1E74 => array(0x1E75), 0x1E76 => array(0x1E77) |
|
1205 | + ,0x1E78 => array(0x1E79), 0x1E7A => array(0x1E7B), 0x1E7C => array(0x1E7D) |
|
1206 | + ,0x1E7E => array(0x1E7F), 0x1E80 => array(0x1E81), 0x1E82 => array(0x1E83) |
|
1207 | + ,0x1E84 => array(0x1E85), 0x1E86 => array(0x1E87), 0x1E88 => array(0x1E89) |
|
1208 | + ,0x1E8A => array(0x1E8B), 0x1E8C => array(0x1E8D), 0x1E8E => array(0x1E8F) |
|
1209 | + ,0x1E90 => array(0x1E91), 0x1E92 => array(0x1E93), 0x1E94 => array(0x1E95) |
|
1210 | + ,0x1E96 => array(0x68, 0x331), 0x1E97 => array(0x74, 0x308), 0x1E98 => array(0x77, 0x30A) |
|
1211 | + ,0x1E99 => array(0x79, 0x30A), 0x1E9A => array(0x61, 0x2BE), 0x1E9B => array(0x1E61) |
|
1212 | + ,0x1EA0 => array(0x1EA1), 0x1EA2 => array(0x1EA3), 0x1EA4 => array(0x1EA5) |
|
1213 | + ,0x1EA6 => array(0x1EA7), 0x1EA8 => array(0x1EA9), 0x1EAA => array(0x1EAB) |
|
1214 | + ,0x1EAC => array(0x1EAD), 0x1EAE => array(0x1EAF), 0x1EB0 => array(0x1EB1) |
|
1215 | + ,0x1EB2 => array(0x1EB3), 0x1EB4 => array(0x1EB5), 0x1EB6 => array(0x1EB7) |
|
1216 | + ,0x1EB8 => array(0x1EB9), 0x1EBA => array(0x1EBB), 0x1EBC => array(0x1EBD) |
|
1217 | + ,0x1EBE => array(0x1EBF), 0x1EC0 => array(0x1EC1), 0x1EC2 => array(0x1EC3) |
|
1218 | + ,0x1EC4 => array(0x1EC5), 0x1EC6 => array(0x1EC7), 0x1EC8 => array(0x1EC9) |
|
1219 | + ,0x1ECA => array(0x1ECB), 0x1ECC => array(0x1ECD), 0x1ECE => array(0x1ECF) |
|
1220 | + ,0x1ED0 => array(0x1ED1), 0x1ED2 => array(0x1ED3), 0x1ED4 => array(0x1ED5) |
|
1221 | + ,0x1ED6 => array(0x1ED7), 0x1ED8 => array(0x1ED9), 0x1EDA => array(0x1EDB) |
|
1222 | + ,0x1EDC => array(0x1EDD), 0x1EDE => array(0x1EDF), 0x1EE0 => array(0x1EE1) |
|
1223 | + ,0x1EE2 => array(0x1EE3), 0x1EE4 => array(0x1EE5), 0x1EE6 => array(0x1EE7) |
|
1224 | + ,0x1EE8 => array(0x1EE9), 0x1EEA => array(0x1EEB), 0x1EEC => array(0x1EED) |
|
1225 | + ,0x1EEE => array(0x1EEF), 0x1EF0 => array(0x1EF1), 0x1EF2 => array(0x1EF3) |
|
1226 | + ,0x1EF4 => array(0x1EF5), 0x1EF6 => array(0x1EF7), 0x1EF8 => array(0x1EF9) |
|
1227 | + ,0x1F08 => array(0x1F00), 0x1F09 => array(0x1F01), 0x1F0A => array(0x1F02) |
|
1228 | + ,0x1F0B => array(0x1F03), 0x1F0C => array(0x1F04), 0x1F0D => array(0x1F05) |
|
1229 | + ,0x1F0E => array(0x1F06), 0x1F0F => array(0x1F07), 0x1F18 => array(0x1F10) |
|
1230 | + ,0x1F19 => array(0x1F11), 0x1F1A => array(0x1F12), 0x1F1B => array(0x1F13) |
|
1231 | + ,0x1F1C => array(0x1F14), 0x1F1D => array(0x1F15), 0x1F28 => array(0x1F20) |
|
1232 | + ,0x1F29 => array(0x1F21), 0x1F2A => array(0x1F22), 0x1F2B => array(0x1F23) |
|
1233 | + ,0x1F2C => array(0x1F24), 0x1F2D => array(0x1F25), 0x1F2E => array(0x1F26) |
|
1234 | + ,0x1F2F => array(0x1F27), 0x1F38 => array(0x1F30), 0x1F39 => array(0x1F31) |
|
1235 | + ,0x1F3A => array(0x1F32), 0x1F3B => array(0x1F33), 0x1F3C => array(0x1F34) |
|
1236 | + ,0x1F3D => array(0x1F35), 0x1F3E => array(0x1F36), 0x1F3F => array(0x1F37) |
|
1237 | + ,0x1F48 => array(0x1F40), 0x1F49 => array(0x1F41), 0x1F4A => array(0x1F42) |
|
1238 | + ,0x1F4B => array(0x1F43), 0x1F4C => array(0x1F44), 0x1F4D => array(0x1F45) |
|
1239 | + ,0x1F50 => array(0x3C5, 0x313), 0x1F52 => array(0x3C5, 0x313, 0x300) |
|
1240 | + ,0x1F54 => array(0x3C5, 0x313, 0x301), 0x1F56 => array(0x3C5, 0x313, 0x342) |
|
1241 | + ,0x1F59 => array(0x1F51), 0x1F5B => array(0x1F53), 0x1F5D => array(0x1F55) |
|
1242 | + ,0x1F5F => array(0x1F57), 0x1F68 => array(0x1F60), 0x1F69 => array(0x1F61) |
|
1243 | + ,0x1F6A => array(0x1F62), 0x1F6B => array(0x1F63), 0x1F6C => array(0x1F64) |
|
1244 | + ,0x1F6D => array(0x1F65), 0x1F6E => array(0x1F66), 0x1F6F => array(0x1F67) |
|
1245 | + ,0x1F80 => array(0x1F00, 0x3B9), 0x1F81 => array(0x1F01, 0x3B9) |
|
1246 | + ,0x1F82 => array(0x1F02, 0x3B9), 0x1F83 => array(0x1F03, 0x3B9) |
|
1247 | + ,0x1F84 => array(0x1F04, 0x3B9), 0x1F85 => array(0x1F05, 0x3B9) |
|
1248 | + ,0x1F86 => array(0x1F06, 0x3B9), 0x1F87 => array(0x1F07, 0x3B9) |
|
1249 | + ,0x1F88 => array(0x1F00, 0x3B9), 0x1F89 => array(0x1F01, 0x3B9) |
|
1250 | + ,0x1F8A => array(0x1F02, 0x3B9), 0x1F8B => array(0x1F03, 0x3B9) |
|
1251 | + ,0x1F8C => array(0x1F04, 0x3B9), 0x1F8D => array(0x1F05, 0x3B9) |
|
1252 | + ,0x1F8E => array(0x1F06, 0x3B9), 0x1F8F => array(0x1F07, 0x3B9) |
|
1253 | + ,0x1F90 => array(0x1F20, 0x3B9), 0x1F91 => array(0x1F21, 0x3B9) |
|
1254 | + ,0x1F92 => array(0x1F22, 0x3B9), 0x1F93 => array(0x1F23, 0x3B9) |
|
1255 | + ,0x1F94 => array(0x1F24, 0x3B9), 0x1F95 => array(0x1F25, 0x3B9) |
|
1256 | + ,0x1F96 => array(0x1F26, 0x3B9), 0x1F97 => array(0x1F27, 0x3B9) |
|
1257 | + ,0x1F98 => array(0x1F20, 0x3B9), 0x1F99 => array(0x1F21, 0x3B9) |
|
1258 | + ,0x1F9A => array(0x1F22, 0x3B9), 0x1F9B => array(0x1F23, 0x3B9) |
|
1259 | + ,0x1F9C => array(0x1F24, 0x3B9), 0x1F9D => array(0x1F25, 0x3B9) |
|
1260 | + ,0x1F9E => array(0x1F26, 0x3B9), 0x1F9F => array(0x1F27, 0x3B9) |
|
1261 | + ,0x1FA0 => array(0x1F60, 0x3B9), 0x1FA1 => array(0x1F61, 0x3B9) |
|
1262 | + ,0x1FA2 => array(0x1F62, 0x3B9), 0x1FA3 => array(0x1F63, 0x3B9) |
|
1263 | + ,0x1FA4 => array(0x1F64, 0x3B9), 0x1FA5 => array(0x1F65, 0x3B9) |
|
1264 | + ,0x1FA6 => array(0x1F66, 0x3B9), 0x1FA7 => array(0x1F67, 0x3B9) |
|
1265 | + ,0x1FA8 => array(0x1F60, 0x3B9), 0x1FA9 => array(0x1F61, 0x3B9) |
|
1266 | + ,0x1FAA => array(0x1F62, 0x3B9), 0x1FAB => array(0x1F63, 0x3B9) |
|
1267 | + ,0x1FAC => array(0x1F64, 0x3B9), 0x1FAD => array(0x1F65, 0x3B9) |
|
1268 | + ,0x1FAE => array(0x1F66, 0x3B9), 0x1FAF => array(0x1F67, 0x3B9) |
|
1269 | + ,0x1FB2 => array(0x1F70, 0x3B9), 0x1FB3 => array(0x3B1, 0x3B9) |
|
1270 | + ,0x1FB4 => array(0x3AC, 0x3B9), 0x1FB6 => array(0x3B1, 0x342) |
|
1271 | + ,0x1FB7 => array(0x3B1, 0x342, 0x3B9), 0x1FB8 => array(0x1FB0) |
|
1272 | + ,0x1FB9 => array(0x1FB1), 0x1FBA => array(0x1F70), 0x1FBB => array(0x1F71) |
|
1273 | + ,0x1FBC => array(0x3B1, 0x3B9), 0x1FBE => array(0x3B9) |
|
1274 | + ,0x1FC2 => array(0x1F74, 0x3B9), 0x1FC3 => array(0x3B7, 0x3B9) |
|
1275 | + ,0x1FC4 => array(0x3AE, 0x3B9), 0x1FC6 => array(0x3B7, 0x342) |
|
1276 | + ,0x1FC7 => array(0x3B7, 0x342, 0x3B9), 0x1FC8 => array(0x1F72) |
|
1277 | + ,0x1FC9 => array(0x1F73), 0x1FCA => array(0x1F74), 0x1FCB => array(0x1F75) |
|
1278 | + ,0x1FCC => array(0x3B7, 0x3B9), 0x1FD2 => array(0x3B9, 0x308, 0x300) |
|
1279 | + ,0x1FD3 => array(0x3B9, 0x308, 0x301), 0x1FD6 => array(0x3B9, 0x342) |
|
1280 | + ,0x1FD7 => array(0x3B9, 0x308, 0x342), 0x1FD8 => array(0x1FD0) |
|
1281 | + ,0x1FD9 => array(0x1FD1), 0x1FDA => array(0x1F76) |
|
1282 | + ,0x1FDB => array(0x1F77), 0x1FE2 => array(0x3C5, 0x308, 0x300) |
|
1283 | + ,0x1FE3 => array(0x3C5, 0x308, 0x301), 0x1FE4 => array(0x3C1, 0x313) |
|
1284 | + ,0x1FE6 => array(0x3C5, 0x342), 0x1FE7 => array(0x3C5, 0x308, 0x342) |
|
1285 | + ,0x1FE8 => array(0x1FE0), 0x1FE9 => array(0x1FE1) |
|
1286 | + ,0x1FEA => array(0x1F7A), 0x1FEB => array(0x1F7B) |
|
1287 | + ,0x1FEC => array(0x1FE5), 0x1FF2 => array(0x1F7C, 0x3B9) |
|
1288 | + ,0x1FF3 => array(0x3C9, 0x3B9), 0x1FF4 => array(0x3CE, 0x3B9) |
|
1289 | + ,0x1FF6 => array(0x3C9, 0x342), 0x1FF7 => array(0x3C9, 0x342, 0x3B9) |
|
1290 | + ,0x1FF8 => array(0x1F78), 0x1FF9 => array(0x1F79), 0x1FFA => array(0x1F7C) |
|
1291 | + ,0x1FFB => array(0x1F7D), 0x1FFC => array(0x3C9, 0x3B9) |
|
1292 | + ,0x20A8 => array(0x72, 0x73), 0x2102 => array(0x63), 0x2103 => array(0xB0, 0x63) |
|
1293 | + ,0x2107 => array(0x25B), 0x2109 => array(0xB0, 0x66), 0x210B => array(0x68) |
|
1294 | + ,0x210C => array(0x68), 0x210D => array(0x68), 0x2110 => array(0x69) |
|
1295 | + ,0x2111 => array(0x69), 0x2112 => array(0x6C), 0x2115 => array(0x6E) |
|
1296 | + ,0x2116 => array(0x6E, 0x6F), 0x2119 => array(0x70), 0x211A => array(0x71) |
|
1297 | + ,0x211B => array(0x72), 0x211C => array(0x72), 0x211D => array(0x72) |
|
1298 | + ,0x2120 => array(0x73, 0x6D), 0x2121 => array(0x74, 0x65, 0x6C) |
|
1299 | + ,0x2122 => array(0x74, 0x6D), 0x2124 => array(0x7A), 0x2126 => array(0x3C9) |
|
1300 | + ,0x2128 => array(0x7A), 0x212A => array(0x6B), 0x212B => array(0xE5) |
|
1301 | + ,0x212C => array(0x62), 0x212D => array(0x63), 0x2130 => array(0x65) |
|
1302 | + ,0x2131 => array(0x66), 0x2133 => array(0x6D), 0x213E => array(0x3B3) |
|
1303 | + ,0x213F => array(0x3C0), 0x2145 => array(0x64) ,0x2160 => array(0x2170) |
|
1304 | + ,0x2161 => array(0x2171), 0x2162 => array(0x2172), 0x2163 => array(0x2173) |
|
1305 | + ,0x2164 => array(0x2174), 0x2165 => array(0x2175), 0x2166 => array(0x2176) |
|
1306 | + ,0x2167 => array(0x2177), 0x2168 => array(0x2178), 0x2169 => array(0x2179) |
|
1307 | + ,0x216A => array(0x217A), 0x216B => array(0x217B), 0x216C => array(0x217C) |
|
1308 | + ,0x216D => array(0x217D), 0x216E => array(0x217E), 0x216F => array(0x217F) |
|
1309 | + ,0x24B6 => array(0x24D0), 0x24B7 => array(0x24D1), 0x24B8 => array(0x24D2) |
|
1310 | + ,0x24B9 => array(0x24D3), 0x24BA => array(0x24D4), 0x24BB => array(0x24D5) |
|
1311 | + ,0x24BC => array(0x24D6), 0x24BD => array(0x24D7), 0x24BE => array(0x24D8) |
|
1312 | + ,0x24BF => array(0x24D9), 0x24C0 => array(0x24DA), 0x24C1 => array(0x24DB) |
|
1313 | + ,0x24C2 => array(0x24DC), 0x24C3 => array(0x24DD), 0x24C4 => array(0x24DE) |
|
1314 | + ,0x24C5 => array(0x24DF), 0x24C6 => array(0x24E0), 0x24C7 => array(0x24E1) |
|
1315 | + ,0x24C8 => array(0x24E2), 0x24C9 => array(0x24E3), 0x24CA => array(0x24E4) |
|
1316 | + ,0x24CB => array(0x24E5), 0x24CC => array(0x24E6), 0x24CD => array(0x24E7) |
|
1317 | + ,0x24CE => array(0x24E8), 0x24CF => array(0x24E9), 0x3371 => array(0x68, 0x70, 0x61) |
|
1318 | + ,0x3373 => array(0x61, 0x75), 0x3375 => array(0x6F, 0x76) |
|
1319 | + ,0x3380 => array(0x70, 0x61), 0x3381 => array(0x6E, 0x61) |
|
1320 | + ,0x3382 => array(0x3BC, 0x61), 0x3383 => array(0x6D, 0x61) |
|
1321 | + ,0x3384 => array(0x6B, 0x61), 0x3385 => array(0x6B, 0x62) |
|
1322 | + ,0x3386 => array(0x6D, 0x62), 0x3387 => array(0x67, 0x62) |
|
1323 | + ,0x338A => array(0x70, 0x66), 0x338B => array(0x6E, 0x66) |
|
1324 | + ,0x338C => array(0x3BC, 0x66), 0x3390 => array(0x68, 0x7A) |
|
1325 | + ,0x3391 => array(0x6B, 0x68, 0x7A), 0x3392 => array(0x6D, 0x68, 0x7A) |
|
1326 | + ,0x3393 => array(0x67, 0x68, 0x7A), 0x3394 => array(0x74, 0x68, 0x7A) |
|
1327 | + ,0x33A9 => array(0x70, 0x61), 0x33AA => array(0x6B, 0x70, 0x61) |
|
1328 | + ,0x33AB => array(0x6D, 0x70, 0x61), 0x33AC => array(0x67, 0x70, 0x61) |
|
1329 | + ,0x33B4 => array(0x70, 0x76), 0x33B5 => array(0x6E, 0x76) |
|
1330 | + ,0x33B6 => array(0x3BC, 0x76), 0x33B7 => array(0x6D, 0x76) |
|
1331 | + ,0x33B8 => array(0x6B, 0x76), 0x33B9 => array(0x6D, 0x76) |
|
1332 | + ,0x33BA => array(0x70, 0x77), 0x33BB => array(0x6E, 0x77) |
|
1333 | + ,0x33BC => array(0x3BC, 0x77), 0x33BD => array(0x6D, 0x77) |
|
1334 | + ,0x33BE => array(0x6B, 0x77), 0x33BF => array(0x6D, 0x77) |
|
1335 | + ,0x33C0 => array(0x6B, 0x3C9), 0x33C1 => array(0x6D, 0x3C9) /* |
|
1336 | 1336 | ,0x33C2 => array(0x61, 0x2E, 0x6D, 0x2E) */ |
1337 | - ,0x33C3 => array(0x62, 0x71), 0x33C6 => array(0x63, 0x2215, 0x6B, 0x67) |
|
1338 | - ,0x33C7 => array(0x63, 0x6F, 0x2E), 0x33C8 => array(0x64, 0x62) |
|
1339 | - ,0x33C9 => array(0x67, 0x79), 0x33CB => array(0x68, 0x70) |
|
1340 | - ,0x33CD => array(0x6B, 0x6B), 0x33CE => array(0x6B, 0x6D) |
|
1341 | - ,0x33D7 => array(0x70, 0x68), 0x33D9 => array(0x70, 0x70, 0x6D) |
|
1342 | - ,0x33DA => array(0x70, 0x72), 0x33DC => array(0x73, 0x76) |
|
1343 | - ,0x33DD => array(0x77, 0x62), 0xFB00 => array(0x66, 0x66) |
|
1344 | - ,0xFB01 => array(0x66, 0x69), 0xFB02 => array(0x66, 0x6C) |
|
1345 | - ,0xFB03 => array(0x66, 0x66, 0x69), 0xFB04 => array(0x66, 0x66, 0x6C) |
|
1346 | - ,0xFB05 => array(0x73, 0x74), 0xFB06 => array(0x73, 0x74) |
|
1347 | - ,0xFB13 => array(0x574, 0x576), 0xFB14 => array(0x574, 0x565) |
|
1348 | - ,0xFB15 => array(0x574, 0x56B), 0xFB16 => array(0x57E, 0x576) |
|
1349 | - ,0xFB17 => array(0x574, 0x56D), 0xFF21 => array(0xFF41) |
|
1350 | - ,0xFF22 => array(0xFF42), 0xFF23 => array(0xFF43), 0xFF24 => array(0xFF44) |
|
1351 | - ,0xFF25 => array(0xFF45), 0xFF26 => array(0xFF46), 0xFF27 => array(0xFF47) |
|
1352 | - ,0xFF28 => array(0xFF48), 0xFF29 => array(0xFF49), 0xFF2A => array(0xFF4A) |
|
1353 | - ,0xFF2B => array(0xFF4B), 0xFF2C => array(0xFF4C), 0xFF2D => array(0xFF4D) |
|
1354 | - ,0xFF2E => array(0xFF4E), 0xFF2F => array(0xFF4F), 0xFF30 => array(0xFF50) |
|
1355 | - ,0xFF31 => array(0xFF51), 0xFF32 => array(0xFF52), 0xFF33 => array(0xFF53) |
|
1356 | - ,0xFF34 => array(0xFF54), 0xFF35 => array(0xFF55), 0xFF36 => array(0xFF56) |
|
1357 | - ,0xFF37 => array(0xFF57), 0xFF38 => array(0xFF58), 0xFF39 => array(0xFF59) |
|
1358 | - ,0xFF3A => array(0xFF5A), 0x10400 => array(0x10428), 0x10401 => array(0x10429) |
|
1359 | - ,0x10402 => array(0x1042A), 0x10403 => array(0x1042B), 0x10404 => array(0x1042C) |
|
1360 | - ,0x10405 => array(0x1042D), 0x10406 => array(0x1042E), 0x10407 => array(0x1042F) |
|
1361 | - ,0x10408 => array(0x10430), 0x10409 => array(0x10431), 0x1040A => array(0x10432) |
|
1362 | - ,0x1040B => array(0x10433), 0x1040C => array(0x10434), 0x1040D => array(0x10435) |
|
1363 | - ,0x1040E => array(0x10436), 0x1040F => array(0x10437), 0x10410 => array(0x10438) |
|
1364 | - ,0x10411 => array(0x10439), 0x10412 => array(0x1043A), 0x10413 => array(0x1043B) |
|
1365 | - ,0x10414 => array(0x1043C), 0x10415 => array(0x1043D), 0x10416 => array(0x1043E) |
|
1366 | - ,0x10417 => array(0x1043F), 0x10418 => array(0x10440), 0x10419 => array(0x10441) |
|
1367 | - ,0x1041A => array(0x10442), 0x1041B => array(0x10443), 0x1041C => array(0x10444) |
|
1368 | - ,0x1041D => array(0x10445), 0x1041E => array(0x10446), 0x1041F => array(0x10447) |
|
1369 | - ,0x10420 => array(0x10448), 0x10421 => array(0x10449), 0x10422 => array(0x1044A) |
|
1370 | - ,0x10423 => array(0x1044B), 0x10424 => array(0x1044C), 0x10425 => array(0x1044D) |
|
1371 | - ,0x1D400 => array(0x61), 0x1D401 => array(0x62), 0x1D402 => array(0x63) |
|
1372 | - ,0x1D403 => array(0x64), 0x1D404 => array(0x65), 0x1D405 => array(0x66) |
|
1373 | - ,0x1D406 => array(0x67), 0x1D407 => array(0x68), 0x1D408 => array(0x69) |
|
1374 | - ,0x1D409 => array(0x6A), 0x1D40A => array(0x6B), 0x1D40B => array(0x6C) |
|
1375 | - ,0x1D40C => array(0x6D), 0x1D40D => array(0x6E), 0x1D40E => array(0x6F) |
|
1376 | - ,0x1D40F => array(0x70), 0x1D410 => array(0x71), 0x1D411 => array(0x72) |
|
1377 | - ,0x1D412 => array(0x73), 0x1D413 => array(0x74), 0x1D414 => array(0x75) |
|
1378 | - ,0x1D415 => array(0x76), 0x1D416 => array(0x77), 0x1D417 => array(0x78) |
|
1379 | - ,0x1D418 => array(0x79), 0x1D419 => array(0x7A), 0x1D434 => array(0x61) |
|
1380 | - ,0x1D435 => array(0x62), 0x1D436 => array(0x63), 0x1D437 => array(0x64) |
|
1381 | - ,0x1D438 => array(0x65), 0x1D439 => array(0x66), 0x1D43A => array(0x67) |
|
1382 | - ,0x1D43B => array(0x68), 0x1D43C => array(0x69), 0x1D43D => array(0x6A) |
|
1383 | - ,0x1D43E => array(0x6B), 0x1D43F => array(0x6C), 0x1D440 => array(0x6D) |
|
1384 | - ,0x1D441 => array(0x6E), 0x1D442 => array(0x6F), 0x1D443 => array(0x70) |
|
1385 | - ,0x1D444 => array(0x71), 0x1D445 => array(0x72), 0x1D446 => array(0x73) |
|
1386 | - ,0x1D447 => array(0x74), 0x1D448 => array(0x75), 0x1D449 => array(0x76) |
|
1387 | - ,0x1D44A => array(0x77), 0x1D44B => array(0x78), 0x1D44C => array(0x79) |
|
1388 | - ,0x1D44D => array(0x7A), 0x1D468 => array(0x61), 0x1D469 => array(0x62) |
|
1389 | - ,0x1D46A => array(0x63), 0x1D46B => array(0x64), 0x1D46C => array(0x65) |
|
1390 | - ,0x1D46D => array(0x66), 0x1D46E => array(0x67), 0x1D46F => array(0x68) |
|
1391 | - ,0x1D470 => array(0x69), 0x1D471 => array(0x6A), 0x1D472 => array(0x6B) |
|
1392 | - ,0x1D473 => array(0x6C), 0x1D474 => array(0x6D), 0x1D475 => array(0x6E) |
|
1393 | - ,0x1D476 => array(0x6F), 0x1D477 => array(0x70), 0x1D478 => array(0x71) |
|
1394 | - ,0x1D479 => array(0x72), 0x1D47A => array(0x73), 0x1D47B => array(0x74) |
|
1395 | - ,0x1D47C => array(0x75), 0x1D47D => array(0x76), 0x1D47E => array(0x77) |
|
1396 | - ,0x1D47F => array(0x78), 0x1D480 => array(0x79), 0x1D481 => array(0x7A) |
|
1397 | - ,0x1D49C => array(0x61), 0x1D49E => array(0x63), 0x1D49F => array(0x64) |
|
1398 | - ,0x1D4A2 => array(0x67), 0x1D4A5 => array(0x6A), 0x1D4A6 => array(0x6B) |
|
1399 | - ,0x1D4A9 => array(0x6E), 0x1D4AA => array(0x6F), 0x1D4AB => array(0x70) |
|
1400 | - ,0x1D4AC => array(0x71), 0x1D4AE => array(0x73), 0x1D4AF => array(0x74) |
|
1401 | - ,0x1D4B0 => array(0x75), 0x1D4B1 => array(0x76), 0x1D4B2 => array(0x77) |
|
1402 | - ,0x1D4B3 => array(0x78), 0x1D4B4 => array(0x79), 0x1D4B5 => array(0x7A) |
|
1403 | - ,0x1D4D0 => array(0x61), 0x1D4D1 => array(0x62), 0x1D4D2 => array(0x63) |
|
1404 | - ,0x1D4D3 => array(0x64), 0x1D4D4 => array(0x65), 0x1D4D5 => array(0x66) |
|
1405 | - ,0x1D4D6 => array(0x67), 0x1D4D7 => array(0x68), 0x1D4D8 => array(0x69) |
|
1406 | - ,0x1D4D9 => array(0x6A), 0x1D4DA => array(0x6B), 0x1D4DB => array(0x6C) |
|
1407 | - ,0x1D4DC => array(0x6D), 0x1D4DD => array(0x6E), 0x1D4DE => array(0x6F) |
|
1408 | - ,0x1D4DF => array(0x70), 0x1D4E0 => array(0x71), 0x1D4E1 => array(0x72) |
|
1409 | - ,0x1D4E2 => array(0x73), 0x1D4E3 => array(0x74), 0x1D4E4 => array(0x75) |
|
1410 | - ,0x1D4E5 => array(0x76), 0x1D4E6 => array(0x77), 0x1D4E7 => array(0x78) |
|
1411 | - ,0x1D4E8 => array(0x79), 0x1D4E9 => array(0x7A), 0x1D504 => array(0x61) |
|
1412 | - ,0x1D505 => array(0x62), 0x1D507 => array(0x64), 0x1D508 => array(0x65) |
|
1413 | - ,0x1D509 => array(0x66), 0x1D50A => array(0x67), 0x1D50D => array(0x6A) |
|
1414 | - ,0x1D50E => array(0x6B), 0x1D50F => array(0x6C), 0x1D510 => array(0x6D) |
|
1415 | - ,0x1D511 => array(0x6E), 0x1D512 => array(0x6F), 0x1D513 => array(0x70) |
|
1416 | - ,0x1D514 => array(0x71), 0x1D516 => array(0x73), 0x1D517 => array(0x74) |
|
1417 | - ,0x1D518 => array(0x75), 0x1D519 => array(0x76), 0x1D51A => array(0x77) |
|
1418 | - ,0x1D51B => array(0x78), 0x1D51C => array(0x79), 0x1D538 => array(0x61) |
|
1419 | - ,0x1D539 => array(0x62), 0x1D53B => array(0x64), 0x1D53C => array(0x65) |
|
1420 | - ,0x1D53D => array(0x66), 0x1D53E => array(0x67), 0x1D540 => array(0x69) |
|
1421 | - ,0x1D541 => array(0x6A), 0x1D542 => array(0x6B), 0x1D543 => array(0x6C) |
|
1422 | - ,0x1D544 => array(0x6D), 0x1D546 => array(0x6F), 0x1D54A => array(0x73) |
|
1423 | - ,0x1D54B => array(0x74), 0x1D54C => array(0x75), 0x1D54D => array(0x76) |
|
1424 | - ,0x1D54E => array(0x77), 0x1D54F => array(0x78), 0x1D550 => array(0x79) |
|
1425 | - ,0x1D56C => array(0x61), 0x1D56D => array(0x62), 0x1D56E => array(0x63) |
|
1426 | - ,0x1D56F => array(0x64), 0x1D570 => array(0x65), 0x1D571 => array(0x66) |
|
1427 | - ,0x1D572 => array(0x67), 0x1D573 => array(0x68), 0x1D574 => array(0x69) |
|
1428 | - ,0x1D575 => array(0x6A), 0x1D576 => array(0x6B), 0x1D577 => array(0x6C) |
|
1429 | - ,0x1D578 => array(0x6D), 0x1D579 => array(0x6E), 0x1D57A => array(0x6F) |
|
1430 | - ,0x1D57B => array(0x70), 0x1D57C => array(0x71), 0x1D57D => array(0x72) |
|
1431 | - ,0x1D57E => array(0x73), 0x1D57F => array(0x74), 0x1D580 => array(0x75) |
|
1432 | - ,0x1D581 => array(0x76), 0x1D582 => array(0x77), 0x1D583 => array(0x78) |
|
1433 | - ,0x1D584 => array(0x79), 0x1D585 => array(0x7A), 0x1D5A0 => array(0x61) |
|
1434 | - ,0x1D5A1 => array(0x62), 0x1D5A2 => array(0x63), 0x1D5A3 => array(0x64) |
|
1435 | - ,0x1D5A4 => array(0x65), 0x1D5A5 => array(0x66), 0x1D5A6 => array(0x67) |
|
1436 | - ,0x1D5A7 => array(0x68), 0x1D5A8 => array(0x69), 0x1D5A9 => array(0x6A) |
|
1437 | - ,0x1D5AA => array(0x6B), 0x1D5AB => array(0x6C), 0x1D5AC => array(0x6D) |
|
1438 | - ,0x1D5AD => array(0x6E), 0x1D5AE => array(0x6F), 0x1D5AF => array(0x70) |
|
1439 | - ,0x1D5B0 => array(0x71), 0x1D5B1 => array(0x72), 0x1D5B2 => array(0x73) |
|
1440 | - ,0x1D5B3 => array(0x74), 0x1D5B4 => array(0x75), 0x1D5B5 => array(0x76) |
|
1441 | - ,0x1D5B6 => array(0x77), 0x1D5B7 => array(0x78), 0x1D5B8 => array(0x79) |
|
1442 | - ,0x1D5B9 => array(0x7A), 0x1D5D4 => array(0x61), 0x1D5D5 => array(0x62) |
|
1443 | - ,0x1D5D6 => array(0x63), 0x1D5D7 => array(0x64), 0x1D5D8 => array(0x65) |
|
1444 | - ,0x1D5D9 => array(0x66), 0x1D5DA => array(0x67), 0x1D5DB => array(0x68) |
|
1445 | - ,0x1D5DC => array(0x69), 0x1D5DD => array(0x6A), 0x1D5DE => array(0x6B) |
|
1446 | - ,0x1D5DF => array(0x6C), 0x1D5E0 => array(0x6D), 0x1D5E1 => array(0x6E) |
|
1447 | - ,0x1D5E2 => array(0x6F), 0x1D5E3 => array(0x70), 0x1D5E4 => array(0x71) |
|
1448 | - ,0x1D5E5 => array(0x72), 0x1D5E6 => array(0x73), 0x1D5E7 => array(0x74) |
|
1449 | - ,0x1D5E8 => array(0x75), 0x1D5E9 => array(0x76), 0x1D5EA => array(0x77) |
|
1450 | - ,0x1D5EB => array(0x78), 0x1D5EC => array(0x79), 0x1D5ED => array(0x7A) |
|
1451 | - ,0x1D608 => array(0x61), 0x1D609 => array(0x62) ,0x1D60A => array(0x63) |
|
1452 | - ,0x1D60B => array(0x64), 0x1D60C => array(0x65), 0x1D60D => array(0x66) |
|
1453 | - ,0x1D60E => array(0x67), 0x1D60F => array(0x68), 0x1D610 => array(0x69) |
|
1454 | - ,0x1D611 => array(0x6A), 0x1D612 => array(0x6B), 0x1D613 => array(0x6C) |
|
1455 | - ,0x1D614 => array(0x6D), 0x1D615 => array(0x6E), 0x1D616 => array(0x6F) |
|
1456 | - ,0x1D617 => array(0x70), 0x1D618 => array(0x71), 0x1D619 => array(0x72) |
|
1457 | - ,0x1D61A => array(0x73), 0x1D61B => array(0x74), 0x1D61C => array(0x75) |
|
1458 | - ,0x1D61D => array(0x76), 0x1D61E => array(0x77), 0x1D61F => array(0x78) |
|
1459 | - ,0x1D620 => array(0x79), 0x1D621 => array(0x7A), 0x1D63C => array(0x61) |
|
1460 | - ,0x1D63D => array(0x62), 0x1D63E => array(0x63), 0x1D63F => array(0x64) |
|
1461 | - ,0x1D640 => array(0x65), 0x1D641 => array(0x66), 0x1D642 => array(0x67) |
|
1462 | - ,0x1D643 => array(0x68), 0x1D644 => array(0x69), 0x1D645 => array(0x6A) |
|
1463 | - ,0x1D646 => array(0x6B), 0x1D647 => array(0x6C), 0x1D648 => array(0x6D) |
|
1464 | - ,0x1D649 => array(0x6E), 0x1D64A => array(0x6F), 0x1D64B => array(0x70) |
|
1465 | - ,0x1D64C => array(0x71), 0x1D64D => array(0x72), 0x1D64E => array(0x73) |
|
1466 | - ,0x1D64F => array(0x74), 0x1D650 => array(0x75), 0x1D651 => array(0x76) |
|
1467 | - ,0x1D652 => array(0x77), 0x1D653 => array(0x78), 0x1D654 => array(0x79) |
|
1468 | - ,0x1D655 => array(0x7A), 0x1D670 => array(0x61), 0x1D671 => array(0x62) |
|
1469 | - ,0x1D672 => array(0x63), 0x1D673 => array(0x64), 0x1D674 => array(0x65) |
|
1470 | - ,0x1D675 => array(0x66), 0x1D676 => array(0x67), 0x1D677 => array(0x68) |
|
1471 | - ,0x1D678 => array(0x69), 0x1D679 => array(0x6A), 0x1D67A => array(0x6B) |
|
1472 | - ,0x1D67B => array(0x6C), 0x1D67C => array(0x6D), 0x1D67D => array(0x6E) |
|
1473 | - ,0x1D67E => array(0x6F), 0x1D67F => array(0x70), 0x1D680 => array(0x71) |
|
1474 | - ,0x1D681 => array(0x72), 0x1D682 => array(0x73), 0x1D683 => array(0x74) |
|
1475 | - ,0x1D684 => array(0x75), 0x1D685 => array(0x76), 0x1D686 => array(0x77) |
|
1476 | - ,0x1D687 => array(0x78), 0x1D688 => array(0x79), 0x1D689 => array(0x7A) |
|
1477 | - ,0x1D6A8 => array(0x3B1), 0x1D6A9 => array(0x3B2), 0x1D6AA => array(0x3B3) |
|
1478 | - ,0x1D6AB => array(0x3B4), 0x1D6AC => array(0x3B5), 0x1D6AD => array(0x3B6) |
|
1479 | - ,0x1D6AE => array(0x3B7), 0x1D6AF => array(0x3B8), 0x1D6B0 => array(0x3B9) |
|
1480 | - ,0x1D6B1 => array(0x3BA), 0x1D6B2 => array(0x3BB), 0x1D6B3 => array(0x3BC) |
|
1481 | - ,0x1D6B4 => array(0x3BD), 0x1D6B5 => array(0x3BE), 0x1D6B6 => array(0x3BF) |
|
1482 | - ,0x1D6B7 => array(0x3C0), 0x1D6B8 => array(0x3C1), 0x1D6B9 => array(0x3B8) |
|
1483 | - ,0x1D6BA => array(0x3C3), 0x1D6BB => array(0x3C4), 0x1D6BC => array(0x3C5) |
|
1484 | - ,0x1D6BD => array(0x3C6), 0x1D6BE => array(0x3C7), 0x1D6BF => array(0x3C8) |
|
1485 | - ,0x1D6C0 => array(0x3C9), 0x1D6D3 => array(0x3C3), 0x1D6E2 => array(0x3B1) |
|
1486 | - ,0x1D6E3 => array(0x3B2), 0x1D6E4 => array(0x3B3), 0x1D6E5 => array(0x3B4) |
|
1487 | - ,0x1D6E6 => array(0x3B5), 0x1D6E7 => array(0x3B6), 0x1D6E8 => array(0x3B7) |
|
1488 | - ,0x1D6E9 => array(0x3B8), 0x1D6EA => array(0x3B9), 0x1D6EB => array(0x3BA) |
|
1489 | - ,0x1D6EC => array(0x3BB), 0x1D6ED => array(0x3BC), 0x1D6EE => array(0x3BD) |
|
1490 | - ,0x1D6EF => array(0x3BE), 0x1D6F0 => array(0x3BF), 0x1D6F1 => array(0x3C0) |
|
1491 | - ,0x1D6F2 => array(0x3C1), 0x1D6F3 => array(0x3B8) ,0x1D6F4 => array(0x3C3) |
|
1492 | - ,0x1D6F5 => array(0x3C4), 0x1D6F6 => array(0x3C5), 0x1D6F7 => array(0x3C6) |
|
1493 | - ,0x1D6F8 => array(0x3C7), 0x1D6F9 => array(0x3C8) ,0x1D6FA => array(0x3C9) |
|
1494 | - ,0x1D70D => array(0x3C3), 0x1D71C => array(0x3B1), 0x1D71D => array(0x3B2) |
|
1495 | - ,0x1D71E => array(0x3B3), 0x1D71F => array(0x3B4), 0x1D720 => array(0x3B5) |
|
1496 | - ,0x1D721 => array(0x3B6), 0x1D722 => array(0x3B7), 0x1D723 => array(0x3B8) |
|
1497 | - ,0x1D724 => array(0x3B9), 0x1D725 => array(0x3BA), 0x1D726 => array(0x3BB) |
|
1498 | - ,0x1D727 => array(0x3BC), 0x1D728 => array(0x3BD), 0x1D729 => array(0x3BE) |
|
1499 | - ,0x1D72A => array(0x3BF), 0x1D72B => array(0x3C0), 0x1D72C => array(0x3C1) |
|
1500 | - ,0x1D72D => array(0x3B8), 0x1D72E => array(0x3C3), 0x1D72F => array(0x3C4) |
|
1501 | - ,0x1D730 => array(0x3C5), 0x1D731 => array(0x3C6), 0x1D732 => array(0x3C7) |
|
1502 | - ,0x1D733 => array(0x3C8), 0x1D734 => array(0x3C9), 0x1D747 => array(0x3C3) |
|
1503 | - ,0x1D756 => array(0x3B1), 0x1D757 => array(0x3B2), 0x1D758 => array(0x3B3) |
|
1504 | - ,0x1D759 => array(0x3B4), 0x1D75A => array(0x3B5), 0x1D75B => array(0x3B6) |
|
1505 | - ,0x1D75C => array(0x3B7), 0x1D75D => array(0x3B8), 0x1D75E => array(0x3B9) |
|
1506 | - ,0x1D75F => array(0x3BA), 0x1D760 => array(0x3BB), 0x1D761 => array(0x3BC) |
|
1507 | - ,0x1D762 => array(0x3BD), 0x1D763 => array(0x3BE), 0x1D764 => array(0x3BF) |
|
1508 | - ,0x1D765 => array(0x3C0), 0x1D766 => array(0x3C1), 0x1D767 => array(0x3B8) |
|
1509 | - ,0x1D768 => array(0x3C3), 0x1D769 => array(0x3C4), 0x1D76A => array(0x3C5) |
|
1510 | - ,0x1D76B => array(0x3C6), 0x1D76C => array(0x3C7), 0x1D76D => array(0x3C8) |
|
1511 | - ,0x1D76E => array(0x3C9), 0x1D781 => array(0x3C3), 0x1D790 => array(0x3B1) |
|
1512 | - ,0x1D791 => array(0x3B2), 0x1D792 => array(0x3B3), 0x1D793 => array(0x3B4) |
|
1513 | - ,0x1D794 => array(0x3B5), 0x1D795 => array(0x3B6), 0x1D796 => array(0x3B7) |
|
1514 | - ,0x1D797 => array(0x3B8), 0x1D798 => array(0x3B9), 0x1D799 => array(0x3BA) |
|
1515 | - ,0x1D79A => array(0x3BB), 0x1D79B => array(0x3BC), 0x1D79C => array(0x3BD) |
|
1516 | - ,0x1D79D => array(0x3BE), 0x1D79E => array(0x3BF), 0x1D79F => array(0x3C0) |
|
1517 | - ,0x1D7A0 => array(0x3C1), 0x1D7A1 => array(0x3B8), 0x1D7A2 => array(0x3C3) |
|
1518 | - ,0x1D7A3 => array(0x3C4), 0x1D7A4 => array(0x3C5), 0x1D7A5 => array(0x3C6) |
|
1519 | - ,0x1D7A6 => array(0x3C7), 0x1D7A7 => array(0x3C8), 0x1D7A8 => array(0x3C9) |
|
1520 | - ,0x1D7BB => array(0x3C3), 0x3F9 => array(0x3C3), 0x1D2C => array(0x61) |
|
1521 | - ,0x1D2D => array(0xE6), 0x1D2E => array(0x62), 0x1D30 => array(0x64) |
|
1522 | - ,0x1D31 => array(0x65), 0x1D32 => array(0x1DD), 0x1D33 => array(0x67) |
|
1523 | - ,0x1D34 => array(0x68), 0x1D35 => array(0x69), 0x1D36 => array(0x6A) |
|
1524 | - ,0x1D37 => array(0x6B), 0x1D38 => array(0x6C), 0x1D39 => array(0x6D) |
|
1525 | - ,0x1D3A => array(0x6E), 0x1D3C => array(0x6F), 0x1D3D => array(0x223) |
|
1526 | - ,0x1D3E => array(0x70), 0x1D3F => array(0x72), 0x1D40 => array(0x74) |
|
1527 | - ,0x1D41 => array(0x75), 0x1D42 => array(0x77), 0x213B => array(0x66, 0x61, 0x78) |
|
1528 | - ,0x3250 => array(0x70, 0x74, 0x65), 0x32CC => array(0x68, 0x67) |
|
1529 | - ,0x32CE => array(0x65, 0x76), 0x32CF => array(0x6C, 0x74, 0x64) |
|
1530 | - ,0x337A => array(0x69, 0x75), 0x33DE => array(0x76, 0x2215, 0x6D) |
|
1531 | - ,0x33DF => array(0x61, 0x2215, 0x6D) |
|
1532 | - ) |
|
1533 | - ,'norm_combcls' => array(0x334 => 1, 0x335 => 1, 0x336 => 1, 0x337 => 1 |
|
1534 | - ,0x338 => 1, 0x93C => 7, 0x9BC => 7, 0xA3C => 7, 0xABC => 7 |
|
1535 | - ,0xB3C => 7, 0xCBC => 7, 0x1037 => 7, 0x3099 => 8, 0x309A => 8 |
|
1536 | - ,0x94D => 9, 0x9CD => 9, 0xA4D => 9, 0xACD => 9, 0xB4D => 9 |
|
1537 | - ,0xBCD => 9, 0xC4D => 9, 0xCCD => 9, 0xD4D => 9, 0xDCA => 9 |
|
1538 | - ,0xE3A => 9, 0xF84 => 9, 0x1039 => 9, 0x1714 => 9, 0x1734 => 9 |
|
1539 | - ,0x17D2 => 9, 0x5B0 => 10, 0x5B1 => 11, 0x5B2 => 12, 0x5B3 => 13 |
|
1540 | - ,0x5B4 => 14, 0x5B5 => 15, 0x5B6 => 16, 0x5B7 => 17, 0x5B8 => 18 |
|
1541 | - ,0x5B9 => 19, 0x5BB => 20, 0x5Bc => 21, 0x5BD => 22, 0x5BF => 23 |
|
1542 | - ,0x5C1 => 24, 0x5C2 => 25, 0xFB1E => 26, 0x64B => 27, 0x64C => 28 |
|
1543 | - ,0x64D => 29, 0x64E => 30, 0x64F => 31, 0x650 => 32, 0x651 => 33 |
|
1544 | - ,0x652 => 34, 0x670 => 35, 0x711 => 36, 0xC55 => 84, 0xC56 => 91 |
|
1545 | - ,0xE38 => 103, 0xE39 => 103, 0xE48 => 107, 0xE49 => 107, 0xE4A => 107 |
|
1546 | - ,0xE4B => 107, 0xEB8 => 118, 0xEB9 => 118, 0xEC8 => 122, 0xEC9 => 122 |
|
1547 | - ,0xECA => 122, 0xECB => 122, 0xF71 => 129, 0xF72 => 130, 0xF7A => 130 |
|
1548 | - ,0xF7B => 130, 0xF7C => 130, 0xF7D => 130, 0xF80 => 130, 0xF74 => 132 |
|
1549 | - ,0x321 => 202, 0x322 => 202, 0x327 => 202, 0x328 => 202, 0x31B => 216 |
|
1550 | - ,0xF39 => 216, 0x1D165 => 216, 0x1D166 => 216, 0x1D16E => 216, 0x1D16F => 216 |
|
1551 | - ,0x1D170 => 216, 0x1D171 => 216, 0x1D172 => 216, 0x302A => 218, 0x316 => 220 |
|
1552 | - ,0x317 => 220, 0x318 => 220, 0x319 => 220, 0x31C => 220, 0x31D => 220 |
|
1553 | - ,0x31E => 220, 0x31F => 220, 0x320 => 220, 0x323 => 220, 0x324 => 220 |
|
1554 | - ,0x325 => 220, 0x326 => 220, 0x329 => 220, 0x32A => 220, 0x32B => 220 |
|
1555 | - ,0x32C => 220, 0x32D => 220, 0x32E => 220, 0x32F => 220, 0x330 => 220 |
|
1556 | - ,0x331 => 220, 0x332 => 220, 0x333 => 220, 0x339 => 220, 0x33A => 220 |
|
1557 | - ,0x33B => 220, 0x33C => 220, 0x347 => 220, 0x348 => 220, 0x349 => 220 |
|
1558 | - ,0x34D => 220, 0x34E => 220, 0x353 => 220, 0x354 => 220, 0x355 => 220 |
|
1559 | - ,0x356 => 220, 0x591 => 220, 0x596 => 220, 0x59B => 220, 0x5A3 => 220 |
|
1560 | - ,0x5A4 => 220, 0x5A5 => 220, 0x5A6 => 220, 0x5A7 => 220, 0x5AA => 220 |
|
1561 | - ,0x655 => 220, 0x656 => 220, 0x6E3 => 220, 0x6EA => 220, 0x6ED => 220 |
|
1562 | - ,0x731 => 220, 0x734 => 220, 0x737 => 220, 0x738 => 220, 0x739 => 220 |
|
1563 | - ,0x73B => 220, 0x73C => 220, 0x73E => 220, 0x742 => 220, 0x744 => 220 |
|
1564 | - ,0x746 => 220, 0x748 => 220, 0x952 => 220, 0xF18 => 220, 0xF19 => 220 |
|
1565 | - ,0xF35 => 220, 0xF37 => 220, 0xFC6 => 220, 0x193B => 220, 0x20E8 => 220 |
|
1566 | - ,0x1D17B => 220, 0x1D17C => 220, 0x1D17D => 220, 0x1D17E => 220, 0x1D17F => 220 |
|
1567 | - ,0x1D180 => 220, 0x1D181 => 220, 0x1D182 => 220, 0x1D18A => 220, 0x1D18B => 220 |
|
1568 | - ,0x59A => 222, 0x5AD => 222, 0x1929 => 222, 0x302D => 222, 0x302E => 224 |
|
1569 | - ,0x302F => 224, 0x1D16D => 226, 0x5AE => 228, 0x18A9 => 228, 0x302B => 228 |
|
1570 | - ,0x300 => 230, 0x301 => 230, 0x302 => 230, 0x303 => 230, 0x304 => 230 |
|
1571 | - ,0x305 => 230, 0x306 => 230, 0x307 => 230, 0x308 => 230, 0x309 => 230 |
|
1572 | - ,0x30A => 230, 0x30B => 230, 0x30C => 230, 0x30D => 230, 0x30E => 230 |
|
1573 | - ,0x30F => 230, 0x310 => 230, 0x311 => 230, 0x312 => 230, 0x313 => 230 |
|
1574 | - ,0x314 => 230, 0x33D => 230, 0x33E => 230, 0x33F => 230, 0x340 => 230 |
|
1575 | - ,0x341 => 230, 0x342 => 230, 0x343 => 230, 0x344 => 230, 0x346 => 230 |
|
1576 | - ,0x34A => 230, 0x34B => 230, 0x34C => 230, 0x350 => 230, 0x351 => 230 |
|
1577 | - ,0x352 => 230, 0x357 => 230, 0x363 => 230, 0x364 => 230, 0x365 => 230 |
|
1578 | - ,0x366 => 230, 0x367 => 230, 0x368 => 230, 0x369 => 230, 0x36A => 230 |
|
1579 | - ,0x36B => 230, 0x36C => 230, 0x36D => 230, 0x36E => 230, 0x36F => 230 |
|
1580 | - ,0x483 => 230, 0x484 => 230, 0x485 => 230, 0x486 => 230, 0x592 => 230 |
|
1581 | - ,0x593 => 230, 0x594 => 230, 0x595 => 230, 0x597 => 230, 0x598 => 230 |
|
1582 | - ,0x599 => 230, 0x59C => 230, 0x59D => 230, 0x59E => 230, 0x59F => 230 |
|
1583 | - ,0x5A0 => 230, 0x5A1 => 230, 0x5A8 => 230, 0x5A9 => 230, 0x5AB => 230 |
|
1584 | - ,0x5AC => 230, 0x5AF => 230, 0x5C4 => 230, 0x610 => 230, 0x611 => 230 |
|
1585 | - ,0x612 => 230, 0x613 => 230, 0x614 => 230, 0x615 => 230, 0x653 => 230 |
|
1586 | - ,0x654 => 230, 0x657 => 230, 0x658 => 230, 0x6D6 => 230, 0x6D7 => 230 |
|
1587 | - ,0x6D8 => 230, 0x6D9 => 230, 0x6DA => 230, 0x6DB => 230, 0x6DC => 230 |
|
1588 | - ,0x6DF => 230, 0x6E0 => 230, 0x6E1 => 230, 0x6E2 => 230, 0x6E4 => 230 |
|
1589 | - ,0x6E7 => 230, 0x6E8 => 230, 0x6EB => 230, 0x6EC => 230, 0x730 => 230 |
|
1590 | - ,0x732 => 230, 0x733 => 230, 0x735 => 230, 0x736 => 230, 0x73A => 230 |
|
1591 | - ,0x73D => 230, 0x73F => 230, 0x740 => 230, 0x741 => 230, 0x743 => 230 |
|
1592 | - ,0x745 => 230, 0x747 => 230, 0x749 => 230, 0x74A => 230, 0x951 => 230 |
|
1593 | - ,0x953 => 230, 0x954 => 230, 0xF82 => 230, 0xF83 => 230, 0xF86 => 230 |
|
1594 | - ,0xF87 => 230, 0x170D => 230, 0x193A => 230, 0x20D0 => 230, 0x20D1 => 230 |
|
1595 | - ,0x20D4 => 230, 0x20D5 => 230, 0x20D6 => 230, 0x20D7 => 230, 0x20DB => 230 |
|
1596 | - ,0x20DC => 230, 0x20E1 => 230, 0x20E7 => 230, 0x20E9 => 230, 0xFE20 => 230 |
|
1597 | - ,0xFE21 => 230, 0xFE22 => 230, 0xFE23 => 230, 0x1D185 => 230, 0x1D186 => 230 |
|
1598 | - ,0x1D187 => 230, 0x1D189 => 230, 0x1D188 => 230, 0x1D1AA => 230, 0x1D1AB => 230 |
|
1599 | - ,0x1D1AC => 230, 0x1D1AD => 230, 0x315 => 232, 0x31A => 232, 0x302C => 232 |
|
1600 | - ,0x35F => 233, 0x362 => 233, 0x35D => 234, 0x35E => 234, 0x360 => 234 |
|
1601 | - ,0x361 => 234, 0x345 => 240 |
|
1602 | - ) |
|
1603 | - ); |
|
1337 | + ,0x33C3 => array(0x62, 0x71), 0x33C6 => array(0x63, 0x2215, 0x6B, 0x67) |
|
1338 | + ,0x33C7 => array(0x63, 0x6F, 0x2E), 0x33C8 => array(0x64, 0x62) |
|
1339 | + ,0x33C9 => array(0x67, 0x79), 0x33CB => array(0x68, 0x70) |
|
1340 | + ,0x33CD => array(0x6B, 0x6B), 0x33CE => array(0x6B, 0x6D) |
|
1341 | + ,0x33D7 => array(0x70, 0x68), 0x33D9 => array(0x70, 0x70, 0x6D) |
|
1342 | + ,0x33DA => array(0x70, 0x72), 0x33DC => array(0x73, 0x76) |
|
1343 | + ,0x33DD => array(0x77, 0x62), 0xFB00 => array(0x66, 0x66) |
|
1344 | + ,0xFB01 => array(0x66, 0x69), 0xFB02 => array(0x66, 0x6C) |
|
1345 | + ,0xFB03 => array(0x66, 0x66, 0x69), 0xFB04 => array(0x66, 0x66, 0x6C) |
|
1346 | + ,0xFB05 => array(0x73, 0x74), 0xFB06 => array(0x73, 0x74) |
|
1347 | + ,0xFB13 => array(0x574, 0x576), 0xFB14 => array(0x574, 0x565) |
|
1348 | + ,0xFB15 => array(0x574, 0x56B), 0xFB16 => array(0x57E, 0x576) |
|
1349 | + ,0xFB17 => array(0x574, 0x56D), 0xFF21 => array(0xFF41) |
|
1350 | + ,0xFF22 => array(0xFF42), 0xFF23 => array(0xFF43), 0xFF24 => array(0xFF44) |
|
1351 | + ,0xFF25 => array(0xFF45), 0xFF26 => array(0xFF46), 0xFF27 => array(0xFF47) |
|
1352 | + ,0xFF28 => array(0xFF48), 0xFF29 => array(0xFF49), 0xFF2A => array(0xFF4A) |
|
1353 | + ,0xFF2B => array(0xFF4B), 0xFF2C => array(0xFF4C), 0xFF2D => array(0xFF4D) |
|
1354 | + ,0xFF2E => array(0xFF4E), 0xFF2F => array(0xFF4F), 0xFF30 => array(0xFF50) |
|
1355 | + ,0xFF31 => array(0xFF51), 0xFF32 => array(0xFF52), 0xFF33 => array(0xFF53) |
|
1356 | + ,0xFF34 => array(0xFF54), 0xFF35 => array(0xFF55), 0xFF36 => array(0xFF56) |
|
1357 | + ,0xFF37 => array(0xFF57), 0xFF38 => array(0xFF58), 0xFF39 => array(0xFF59) |
|
1358 | + ,0xFF3A => array(0xFF5A), 0x10400 => array(0x10428), 0x10401 => array(0x10429) |
|
1359 | + ,0x10402 => array(0x1042A), 0x10403 => array(0x1042B), 0x10404 => array(0x1042C) |
|
1360 | + ,0x10405 => array(0x1042D), 0x10406 => array(0x1042E), 0x10407 => array(0x1042F) |
|
1361 | + ,0x10408 => array(0x10430), 0x10409 => array(0x10431), 0x1040A => array(0x10432) |
|
1362 | + ,0x1040B => array(0x10433), 0x1040C => array(0x10434), 0x1040D => array(0x10435) |
|
1363 | + ,0x1040E => array(0x10436), 0x1040F => array(0x10437), 0x10410 => array(0x10438) |
|
1364 | + ,0x10411 => array(0x10439), 0x10412 => array(0x1043A), 0x10413 => array(0x1043B) |
|
1365 | + ,0x10414 => array(0x1043C), 0x10415 => array(0x1043D), 0x10416 => array(0x1043E) |
|
1366 | + ,0x10417 => array(0x1043F), 0x10418 => array(0x10440), 0x10419 => array(0x10441) |
|
1367 | + ,0x1041A => array(0x10442), 0x1041B => array(0x10443), 0x1041C => array(0x10444) |
|
1368 | + ,0x1041D => array(0x10445), 0x1041E => array(0x10446), 0x1041F => array(0x10447) |
|
1369 | + ,0x10420 => array(0x10448), 0x10421 => array(0x10449), 0x10422 => array(0x1044A) |
|
1370 | + ,0x10423 => array(0x1044B), 0x10424 => array(0x1044C), 0x10425 => array(0x1044D) |
|
1371 | + ,0x1D400 => array(0x61), 0x1D401 => array(0x62), 0x1D402 => array(0x63) |
|
1372 | + ,0x1D403 => array(0x64), 0x1D404 => array(0x65), 0x1D405 => array(0x66) |
|
1373 | + ,0x1D406 => array(0x67), 0x1D407 => array(0x68), 0x1D408 => array(0x69) |
|
1374 | + ,0x1D409 => array(0x6A), 0x1D40A => array(0x6B), 0x1D40B => array(0x6C) |
|
1375 | + ,0x1D40C => array(0x6D), 0x1D40D => array(0x6E), 0x1D40E => array(0x6F) |
|
1376 | + ,0x1D40F => array(0x70), 0x1D410 => array(0x71), 0x1D411 => array(0x72) |
|
1377 | + ,0x1D412 => array(0x73), 0x1D413 => array(0x74), 0x1D414 => array(0x75) |
|
1378 | + ,0x1D415 => array(0x76), 0x1D416 => array(0x77), 0x1D417 => array(0x78) |
|
1379 | + ,0x1D418 => array(0x79), 0x1D419 => array(0x7A), 0x1D434 => array(0x61) |
|
1380 | + ,0x1D435 => array(0x62), 0x1D436 => array(0x63), 0x1D437 => array(0x64) |
|
1381 | + ,0x1D438 => array(0x65), 0x1D439 => array(0x66), 0x1D43A => array(0x67) |
|
1382 | + ,0x1D43B => array(0x68), 0x1D43C => array(0x69), 0x1D43D => array(0x6A) |
|
1383 | + ,0x1D43E => array(0x6B), 0x1D43F => array(0x6C), 0x1D440 => array(0x6D) |
|
1384 | + ,0x1D441 => array(0x6E), 0x1D442 => array(0x6F), 0x1D443 => array(0x70) |
|
1385 | + ,0x1D444 => array(0x71), 0x1D445 => array(0x72), 0x1D446 => array(0x73) |
|
1386 | + ,0x1D447 => array(0x74), 0x1D448 => array(0x75), 0x1D449 => array(0x76) |
|
1387 | + ,0x1D44A => array(0x77), 0x1D44B => array(0x78), 0x1D44C => array(0x79) |
|
1388 | + ,0x1D44D => array(0x7A), 0x1D468 => array(0x61), 0x1D469 => array(0x62) |
|
1389 | + ,0x1D46A => array(0x63), 0x1D46B => array(0x64), 0x1D46C => array(0x65) |
|
1390 | + ,0x1D46D => array(0x66), 0x1D46E => array(0x67), 0x1D46F => array(0x68) |
|
1391 | + ,0x1D470 => array(0x69), 0x1D471 => array(0x6A), 0x1D472 => array(0x6B) |
|
1392 | + ,0x1D473 => array(0x6C), 0x1D474 => array(0x6D), 0x1D475 => array(0x6E) |
|
1393 | + ,0x1D476 => array(0x6F), 0x1D477 => array(0x70), 0x1D478 => array(0x71) |
|
1394 | + ,0x1D479 => array(0x72), 0x1D47A => array(0x73), 0x1D47B => array(0x74) |
|
1395 | + ,0x1D47C => array(0x75), 0x1D47D => array(0x76), 0x1D47E => array(0x77) |
|
1396 | + ,0x1D47F => array(0x78), 0x1D480 => array(0x79), 0x1D481 => array(0x7A) |
|
1397 | + ,0x1D49C => array(0x61), 0x1D49E => array(0x63), 0x1D49F => array(0x64) |
|
1398 | + ,0x1D4A2 => array(0x67), 0x1D4A5 => array(0x6A), 0x1D4A6 => array(0x6B) |
|
1399 | + ,0x1D4A9 => array(0x6E), 0x1D4AA => array(0x6F), 0x1D4AB => array(0x70) |
|
1400 | + ,0x1D4AC => array(0x71), 0x1D4AE => array(0x73), 0x1D4AF => array(0x74) |
|
1401 | + ,0x1D4B0 => array(0x75), 0x1D4B1 => array(0x76), 0x1D4B2 => array(0x77) |
|
1402 | + ,0x1D4B3 => array(0x78), 0x1D4B4 => array(0x79), 0x1D4B5 => array(0x7A) |
|
1403 | + ,0x1D4D0 => array(0x61), 0x1D4D1 => array(0x62), 0x1D4D2 => array(0x63) |
|
1404 | + ,0x1D4D3 => array(0x64), 0x1D4D4 => array(0x65), 0x1D4D5 => array(0x66) |
|
1405 | + ,0x1D4D6 => array(0x67), 0x1D4D7 => array(0x68), 0x1D4D8 => array(0x69) |
|
1406 | + ,0x1D4D9 => array(0x6A), 0x1D4DA => array(0x6B), 0x1D4DB => array(0x6C) |
|
1407 | + ,0x1D4DC => array(0x6D), 0x1D4DD => array(0x6E), 0x1D4DE => array(0x6F) |
|
1408 | + ,0x1D4DF => array(0x70), 0x1D4E0 => array(0x71), 0x1D4E1 => array(0x72) |
|
1409 | + ,0x1D4E2 => array(0x73), 0x1D4E3 => array(0x74), 0x1D4E4 => array(0x75) |
|
1410 | + ,0x1D4E5 => array(0x76), 0x1D4E6 => array(0x77), 0x1D4E7 => array(0x78) |
|
1411 | + ,0x1D4E8 => array(0x79), 0x1D4E9 => array(0x7A), 0x1D504 => array(0x61) |
|
1412 | + ,0x1D505 => array(0x62), 0x1D507 => array(0x64), 0x1D508 => array(0x65) |
|
1413 | + ,0x1D509 => array(0x66), 0x1D50A => array(0x67), 0x1D50D => array(0x6A) |
|
1414 | + ,0x1D50E => array(0x6B), 0x1D50F => array(0x6C), 0x1D510 => array(0x6D) |
|
1415 | + ,0x1D511 => array(0x6E), 0x1D512 => array(0x6F), 0x1D513 => array(0x70) |
|
1416 | + ,0x1D514 => array(0x71), 0x1D516 => array(0x73), 0x1D517 => array(0x74) |
|
1417 | + ,0x1D518 => array(0x75), 0x1D519 => array(0x76), 0x1D51A => array(0x77) |
|
1418 | + ,0x1D51B => array(0x78), 0x1D51C => array(0x79), 0x1D538 => array(0x61) |
|
1419 | + ,0x1D539 => array(0x62), 0x1D53B => array(0x64), 0x1D53C => array(0x65) |
|
1420 | + ,0x1D53D => array(0x66), 0x1D53E => array(0x67), 0x1D540 => array(0x69) |
|
1421 | + ,0x1D541 => array(0x6A), 0x1D542 => array(0x6B), 0x1D543 => array(0x6C) |
|
1422 | + ,0x1D544 => array(0x6D), 0x1D546 => array(0x6F), 0x1D54A => array(0x73) |
|
1423 | + ,0x1D54B => array(0x74), 0x1D54C => array(0x75), 0x1D54D => array(0x76) |
|
1424 | + ,0x1D54E => array(0x77), 0x1D54F => array(0x78), 0x1D550 => array(0x79) |
|
1425 | + ,0x1D56C => array(0x61), 0x1D56D => array(0x62), 0x1D56E => array(0x63) |
|
1426 | + ,0x1D56F => array(0x64), 0x1D570 => array(0x65), 0x1D571 => array(0x66) |
|
1427 | + ,0x1D572 => array(0x67), 0x1D573 => array(0x68), 0x1D574 => array(0x69) |
|
1428 | + ,0x1D575 => array(0x6A), 0x1D576 => array(0x6B), 0x1D577 => array(0x6C) |
|
1429 | + ,0x1D578 => array(0x6D), 0x1D579 => array(0x6E), 0x1D57A => array(0x6F) |
|
1430 | + ,0x1D57B => array(0x70), 0x1D57C => array(0x71), 0x1D57D => array(0x72) |
|
1431 | + ,0x1D57E => array(0x73), 0x1D57F => array(0x74), 0x1D580 => array(0x75) |
|
1432 | + ,0x1D581 => array(0x76), 0x1D582 => array(0x77), 0x1D583 => array(0x78) |
|
1433 | + ,0x1D584 => array(0x79), 0x1D585 => array(0x7A), 0x1D5A0 => array(0x61) |
|
1434 | + ,0x1D5A1 => array(0x62), 0x1D5A2 => array(0x63), 0x1D5A3 => array(0x64) |
|
1435 | + ,0x1D5A4 => array(0x65), 0x1D5A5 => array(0x66), 0x1D5A6 => array(0x67) |
|
1436 | + ,0x1D5A7 => array(0x68), 0x1D5A8 => array(0x69), 0x1D5A9 => array(0x6A) |
|
1437 | + ,0x1D5AA => array(0x6B), 0x1D5AB => array(0x6C), 0x1D5AC => array(0x6D) |
|
1438 | + ,0x1D5AD => array(0x6E), 0x1D5AE => array(0x6F), 0x1D5AF => array(0x70) |
|
1439 | + ,0x1D5B0 => array(0x71), 0x1D5B1 => array(0x72), 0x1D5B2 => array(0x73) |
|
1440 | + ,0x1D5B3 => array(0x74), 0x1D5B4 => array(0x75), 0x1D5B5 => array(0x76) |
|
1441 | + ,0x1D5B6 => array(0x77), 0x1D5B7 => array(0x78), 0x1D5B8 => array(0x79) |
|
1442 | + ,0x1D5B9 => array(0x7A), 0x1D5D4 => array(0x61), 0x1D5D5 => array(0x62) |
|
1443 | + ,0x1D5D6 => array(0x63), 0x1D5D7 => array(0x64), 0x1D5D8 => array(0x65) |
|
1444 | + ,0x1D5D9 => array(0x66), 0x1D5DA => array(0x67), 0x1D5DB => array(0x68) |
|
1445 | + ,0x1D5DC => array(0x69), 0x1D5DD => array(0x6A), 0x1D5DE => array(0x6B) |
|
1446 | + ,0x1D5DF => array(0x6C), 0x1D5E0 => array(0x6D), 0x1D5E1 => array(0x6E) |
|
1447 | + ,0x1D5E2 => array(0x6F), 0x1D5E3 => array(0x70), 0x1D5E4 => array(0x71) |
|
1448 | + ,0x1D5E5 => array(0x72), 0x1D5E6 => array(0x73), 0x1D5E7 => array(0x74) |
|
1449 | + ,0x1D5E8 => array(0x75), 0x1D5E9 => array(0x76), 0x1D5EA => array(0x77) |
|
1450 | + ,0x1D5EB => array(0x78), 0x1D5EC => array(0x79), 0x1D5ED => array(0x7A) |
|
1451 | + ,0x1D608 => array(0x61), 0x1D609 => array(0x62) ,0x1D60A => array(0x63) |
|
1452 | + ,0x1D60B => array(0x64), 0x1D60C => array(0x65), 0x1D60D => array(0x66) |
|
1453 | + ,0x1D60E => array(0x67), 0x1D60F => array(0x68), 0x1D610 => array(0x69) |
|
1454 | + ,0x1D611 => array(0x6A), 0x1D612 => array(0x6B), 0x1D613 => array(0x6C) |
|
1455 | + ,0x1D614 => array(0x6D), 0x1D615 => array(0x6E), 0x1D616 => array(0x6F) |
|
1456 | + ,0x1D617 => array(0x70), 0x1D618 => array(0x71), 0x1D619 => array(0x72) |
|
1457 | + ,0x1D61A => array(0x73), 0x1D61B => array(0x74), 0x1D61C => array(0x75) |
|
1458 | + ,0x1D61D => array(0x76), 0x1D61E => array(0x77), 0x1D61F => array(0x78) |
|
1459 | + ,0x1D620 => array(0x79), 0x1D621 => array(0x7A), 0x1D63C => array(0x61) |
|
1460 | + ,0x1D63D => array(0x62), 0x1D63E => array(0x63), 0x1D63F => array(0x64) |
|
1461 | + ,0x1D640 => array(0x65), 0x1D641 => array(0x66), 0x1D642 => array(0x67) |
|
1462 | + ,0x1D643 => array(0x68), 0x1D644 => array(0x69), 0x1D645 => array(0x6A) |
|
1463 | + ,0x1D646 => array(0x6B), 0x1D647 => array(0x6C), 0x1D648 => array(0x6D) |
|
1464 | + ,0x1D649 => array(0x6E), 0x1D64A => array(0x6F), 0x1D64B => array(0x70) |
|
1465 | + ,0x1D64C => array(0x71), 0x1D64D => array(0x72), 0x1D64E => array(0x73) |
|
1466 | + ,0x1D64F => array(0x74), 0x1D650 => array(0x75), 0x1D651 => array(0x76) |
|
1467 | + ,0x1D652 => array(0x77), 0x1D653 => array(0x78), 0x1D654 => array(0x79) |
|
1468 | + ,0x1D655 => array(0x7A), 0x1D670 => array(0x61), 0x1D671 => array(0x62) |
|
1469 | + ,0x1D672 => array(0x63), 0x1D673 => array(0x64), 0x1D674 => array(0x65) |
|
1470 | + ,0x1D675 => array(0x66), 0x1D676 => array(0x67), 0x1D677 => array(0x68) |
|
1471 | + ,0x1D678 => array(0x69), 0x1D679 => array(0x6A), 0x1D67A => array(0x6B) |
|
1472 | + ,0x1D67B => array(0x6C), 0x1D67C => array(0x6D), 0x1D67D => array(0x6E) |
|
1473 | + ,0x1D67E => array(0x6F), 0x1D67F => array(0x70), 0x1D680 => array(0x71) |
|
1474 | + ,0x1D681 => array(0x72), 0x1D682 => array(0x73), 0x1D683 => array(0x74) |
|
1475 | + ,0x1D684 => array(0x75), 0x1D685 => array(0x76), 0x1D686 => array(0x77) |
|
1476 | + ,0x1D687 => array(0x78), 0x1D688 => array(0x79), 0x1D689 => array(0x7A) |
|
1477 | + ,0x1D6A8 => array(0x3B1), 0x1D6A9 => array(0x3B2), 0x1D6AA => array(0x3B3) |
|
1478 | + ,0x1D6AB => array(0x3B4), 0x1D6AC => array(0x3B5), 0x1D6AD => array(0x3B6) |
|
1479 | + ,0x1D6AE => array(0x3B7), 0x1D6AF => array(0x3B8), 0x1D6B0 => array(0x3B9) |
|
1480 | + ,0x1D6B1 => array(0x3BA), 0x1D6B2 => array(0x3BB), 0x1D6B3 => array(0x3BC) |
|
1481 | + ,0x1D6B4 => array(0x3BD), 0x1D6B5 => array(0x3BE), 0x1D6B6 => array(0x3BF) |
|
1482 | + ,0x1D6B7 => array(0x3C0), 0x1D6B8 => array(0x3C1), 0x1D6B9 => array(0x3B8) |
|
1483 | + ,0x1D6BA => array(0x3C3), 0x1D6BB => array(0x3C4), 0x1D6BC => array(0x3C5) |
|
1484 | + ,0x1D6BD => array(0x3C6), 0x1D6BE => array(0x3C7), 0x1D6BF => array(0x3C8) |
|
1485 | + ,0x1D6C0 => array(0x3C9), 0x1D6D3 => array(0x3C3), 0x1D6E2 => array(0x3B1) |
|
1486 | + ,0x1D6E3 => array(0x3B2), 0x1D6E4 => array(0x3B3), 0x1D6E5 => array(0x3B4) |
|
1487 | + ,0x1D6E6 => array(0x3B5), 0x1D6E7 => array(0x3B6), 0x1D6E8 => array(0x3B7) |
|
1488 | + ,0x1D6E9 => array(0x3B8), 0x1D6EA => array(0x3B9), 0x1D6EB => array(0x3BA) |
|
1489 | + ,0x1D6EC => array(0x3BB), 0x1D6ED => array(0x3BC), 0x1D6EE => array(0x3BD) |
|
1490 | + ,0x1D6EF => array(0x3BE), 0x1D6F0 => array(0x3BF), 0x1D6F1 => array(0x3C0) |
|
1491 | + ,0x1D6F2 => array(0x3C1), 0x1D6F3 => array(0x3B8) ,0x1D6F4 => array(0x3C3) |
|
1492 | + ,0x1D6F5 => array(0x3C4), 0x1D6F6 => array(0x3C5), 0x1D6F7 => array(0x3C6) |
|
1493 | + ,0x1D6F8 => array(0x3C7), 0x1D6F9 => array(0x3C8) ,0x1D6FA => array(0x3C9) |
|
1494 | + ,0x1D70D => array(0x3C3), 0x1D71C => array(0x3B1), 0x1D71D => array(0x3B2) |
|
1495 | + ,0x1D71E => array(0x3B3), 0x1D71F => array(0x3B4), 0x1D720 => array(0x3B5) |
|
1496 | + ,0x1D721 => array(0x3B6), 0x1D722 => array(0x3B7), 0x1D723 => array(0x3B8) |
|
1497 | + ,0x1D724 => array(0x3B9), 0x1D725 => array(0x3BA), 0x1D726 => array(0x3BB) |
|
1498 | + ,0x1D727 => array(0x3BC), 0x1D728 => array(0x3BD), 0x1D729 => array(0x3BE) |
|
1499 | + ,0x1D72A => array(0x3BF), 0x1D72B => array(0x3C0), 0x1D72C => array(0x3C1) |
|
1500 | + ,0x1D72D => array(0x3B8), 0x1D72E => array(0x3C3), 0x1D72F => array(0x3C4) |
|
1501 | + ,0x1D730 => array(0x3C5), 0x1D731 => array(0x3C6), 0x1D732 => array(0x3C7) |
|
1502 | + ,0x1D733 => array(0x3C8), 0x1D734 => array(0x3C9), 0x1D747 => array(0x3C3) |
|
1503 | + ,0x1D756 => array(0x3B1), 0x1D757 => array(0x3B2), 0x1D758 => array(0x3B3) |
|
1504 | + ,0x1D759 => array(0x3B4), 0x1D75A => array(0x3B5), 0x1D75B => array(0x3B6) |
|
1505 | + ,0x1D75C => array(0x3B7), 0x1D75D => array(0x3B8), 0x1D75E => array(0x3B9) |
|
1506 | + ,0x1D75F => array(0x3BA), 0x1D760 => array(0x3BB), 0x1D761 => array(0x3BC) |
|
1507 | + ,0x1D762 => array(0x3BD), 0x1D763 => array(0x3BE), 0x1D764 => array(0x3BF) |
|
1508 | + ,0x1D765 => array(0x3C0), 0x1D766 => array(0x3C1), 0x1D767 => array(0x3B8) |
|
1509 | + ,0x1D768 => array(0x3C3), 0x1D769 => array(0x3C4), 0x1D76A => array(0x3C5) |
|
1510 | + ,0x1D76B => array(0x3C6), 0x1D76C => array(0x3C7), 0x1D76D => array(0x3C8) |
|
1511 | + ,0x1D76E => array(0x3C9), 0x1D781 => array(0x3C3), 0x1D790 => array(0x3B1) |
|
1512 | + ,0x1D791 => array(0x3B2), 0x1D792 => array(0x3B3), 0x1D793 => array(0x3B4) |
|
1513 | + ,0x1D794 => array(0x3B5), 0x1D795 => array(0x3B6), 0x1D796 => array(0x3B7) |
|
1514 | + ,0x1D797 => array(0x3B8), 0x1D798 => array(0x3B9), 0x1D799 => array(0x3BA) |
|
1515 | + ,0x1D79A => array(0x3BB), 0x1D79B => array(0x3BC), 0x1D79C => array(0x3BD) |
|
1516 | + ,0x1D79D => array(0x3BE), 0x1D79E => array(0x3BF), 0x1D79F => array(0x3C0) |
|
1517 | + ,0x1D7A0 => array(0x3C1), 0x1D7A1 => array(0x3B8), 0x1D7A2 => array(0x3C3) |
|
1518 | + ,0x1D7A3 => array(0x3C4), 0x1D7A4 => array(0x3C5), 0x1D7A5 => array(0x3C6) |
|
1519 | + ,0x1D7A6 => array(0x3C7), 0x1D7A7 => array(0x3C8), 0x1D7A8 => array(0x3C9) |
|
1520 | + ,0x1D7BB => array(0x3C3), 0x3F9 => array(0x3C3), 0x1D2C => array(0x61) |
|
1521 | + ,0x1D2D => array(0xE6), 0x1D2E => array(0x62), 0x1D30 => array(0x64) |
|
1522 | + ,0x1D31 => array(0x65), 0x1D32 => array(0x1DD), 0x1D33 => array(0x67) |
|
1523 | + ,0x1D34 => array(0x68), 0x1D35 => array(0x69), 0x1D36 => array(0x6A) |
|
1524 | + ,0x1D37 => array(0x6B), 0x1D38 => array(0x6C), 0x1D39 => array(0x6D) |
|
1525 | + ,0x1D3A => array(0x6E), 0x1D3C => array(0x6F), 0x1D3D => array(0x223) |
|
1526 | + ,0x1D3E => array(0x70), 0x1D3F => array(0x72), 0x1D40 => array(0x74) |
|
1527 | + ,0x1D41 => array(0x75), 0x1D42 => array(0x77), 0x213B => array(0x66, 0x61, 0x78) |
|
1528 | + ,0x3250 => array(0x70, 0x74, 0x65), 0x32CC => array(0x68, 0x67) |
|
1529 | + ,0x32CE => array(0x65, 0x76), 0x32CF => array(0x6C, 0x74, 0x64) |
|
1530 | + ,0x337A => array(0x69, 0x75), 0x33DE => array(0x76, 0x2215, 0x6D) |
|
1531 | + ,0x33DF => array(0x61, 0x2215, 0x6D) |
|
1532 | + ) |
|
1533 | + ,'norm_combcls' => array(0x334 => 1, 0x335 => 1, 0x336 => 1, 0x337 => 1 |
|
1534 | + ,0x338 => 1, 0x93C => 7, 0x9BC => 7, 0xA3C => 7, 0xABC => 7 |
|
1535 | + ,0xB3C => 7, 0xCBC => 7, 0x1037 => 7, 0x3099 => 8, 0x309A => 8 |
|
1536 | + ,0x94D => 9, 0x9CD => 9, 0xA4D => 9, 0xACD => 9, 0xB4D => 9 |
|
1537 | + ,0xBCD => 9, 0xC4D => 9, 0xCCD => 9, 0xD4D => 9, 0xDCA => 9 |
|
1538 | + ,0xE3A => 9, 0xF84 => 9, 0x1039 => 9, 0x1714 => 9, 0x1734 => 9 |
|
1539 | + ,0x17D2 => 9, 0x5B0 => 10, 0x5B1 => 11, 0x5B2 => 12, 0x5B3 => 13 |
|
1540 | + ,0x5B4 => 14, 0x5B5 => 15, 0x5B6 => 16, 0x5B7 => 17, 0x5B8 => 18 |
|
1541 | + ,0x5B9 => 19, 0x5BB => 20, 0x5Bc => 21, 0x5BD => 22, 0x5BF => 23 |
|
1542 | + ,0x5C1 => 24, 0x5C2 => 25, 0xFB1E => 26, 0x64B => 27, 0x64C => 28 |
|
1543 | + ,0x64D => 29, 0x64E => 30, 0x64F => 31, 0x650 => 32, 0x651 => 33 |
|
1544 | + ,0x652 => 34, 0x670 => 35, 0x711 => 36, 0xC55 => 84, 0xC56 => 91 |
|
1545 | + ,0xE38 => 103, 0xE39 => 103, 0xE48 => 107, 0xE49 => 107, 0xE4A => 107 |
|
1546 | + ,0xE4B => 107, 0xEB8 => 118, 0xEB9 => 118, 0xEC8 => 122, 0xEC9 => 122 |
|
1547 | + ,0xECA => 122, 0xECB => 122, 0xF71 => 129, 0xF72 => 130, 0xF7A => 130 |
|
1548 | + ,0xF7B => 130, 0xF7C => 130, 0xF7D => 130, 0xF80 => 130, 0xF74 => 132 |
|
1549 | + ,0x321 => 202, 0x322 => 202, 0x327 => 202, 0x328 => 202, 0x31B => 216 |
|
1550 | + ,0xF39 => 216, 0x1D165 => 216, 0x1D166 => 216, 0x1D16E => 216, 0x1D16F => 216 |
|
1551 | + ,0x1D170 => 216, 0x1D171 => 216, 0x1D172 => 216, 0x302A => 218, 0x316 => 220 |
|
1552 | + ,0x317 => 220, 0x318 => 220, 0x319 => 220, 0x31C => 220, 0x31D => 220 |
|
1553 | + ,0x31E => 220, 0x31F => 220, 0x320 => 220, 0x323 => 220, 0x324 => 220 |
|
1554 | + ,0x325 => 220, 0x326 => 220, 0x329 => 220, 0x32A => 220, 0x32B => 220 |
|
1555 | + ,0x32C => 220, 0x32D => 220, 0x32E => 220, 0x32F => 220, 0x330 => 220 |
|
1556 | + ,0x331 => 220, 0x332 => 220, 0x333 => 220, 0x339 => 220, 0x33A => 220 |
|
1557 | + ,0x33B => 220, 0x33C => 220, 0x347 => 220, 0x348 => 220, 0x349 => 220 |
|
1558 | + ,0x34D => 220, 0x34E => 220, 0x353 => 220, 0x354 => 220, 0x355 => 220 |
|
1559 | + ,0x356 => 220, 0x591 => 220, 0x596 => 220, 0x59B => 220, 0x5A3 => 220 |
|
1560 | + ,0x5A4 => 220, 0x5A5 => 220, 0x5A6 => 220, 0x5A7 => 220, 0x5AA => 220 |
|
1561 | + ,0x655 => 220, 0x656 => 220, 0x6E3 => 220, 0x6EA => 220, 0x6ED => 220 |
|
1562 | + ,0x731 => 220, 0x734 => 220, 0x737 => 220, 0x738 => 220, 0x739 => 220 |
|
1563 | + ,0x73B => 220, 0x73C => 220, 0x73E => 220, 0x742 => 220, 0x744 => 220 |
|
1564 | + ,0x746 => 220, 0x748 => 220, 0x952 => 220, 0xF18 => 220, 0xF19 => 220 |
|
1565 | + ,0xF35 => 220, 0xF37 => 220, 0xFC6 => 220, 0x193B => 220, 0x20E8 => 220 |
|
1566 | + ,0x1D17B => 220, 0x1D17C => 220, 0x1D17D => 220, 0x1D17E => 220, 0x1D17F => 220 |
|
1567 | + ,0x1D180 => 220, 0x1D181 => 220, 0x1D182 => 220, 0x1D18A => 220, 0x1D18B => 220 |
|
1568 | + ,0x59A => 222, 0x5AD => 222, 0x1929 => 222, 0x302D => 222, 0x302E => 224 |
|
1569 | + ,0x302F => 224, 0x1D16D => 226, 0x5AE => 228, 0x18A9 => 228, 0x302B => 228 |
|
1570 | + ,0x300 => 230, 0x301 => 230, 0x302 => 230, 0x303 => 230, 0x304 => 230 |
|
1571 | + ,0x305 => 230, 0x306 => 230, 0x307 => 230, 0x308 => 230, 0x309 => 230 |
|
1572 | + ,0x30A => 230, 0x30B => 230, 0x30C => 230, 0x30D => 230, 0x30E => 230 |
|
1573 | + ,0x30F => 230, 0x310 => 230, 0x311 => 230, 0x312 => 230, 0x313 => 230 |
|
1574 | + ,0x314 => 230, 0x33D => 230, 0x33E => 230, 0x33F => 230, 0x340 => 230 |
|
1575 | + ,0x341 => 230, 0x342 => 230, 0x343 => 230, 0x344 => 230, 0x346 => 230 |
|
1576 | + ,0x34A => 230, 0x34B => 230, 0x34C => 230, 0x350 => 230, 0x351 => 230 |
|
1577 | + ,0x352 => 230, 0x357 => 230, 0x363 => 230, 0x364 => 230, 0x365 => 230 |
|
1578 | + ,0x366 => 230, 0x367 => 230, 0x368 => 230, 0x369 => 230, 0x36A => 230 |
|
1579 | + ,0x36B => 230, 0x36C => 230, 0x36D => 230, 0x36E => 230, 0x36F => 230 |
|
1580 | + ,0x483 => 230, 0x484 => 230, 0x485 => 230, 0x486 => 230, 0x592 => 230 |
|
1581 | + ,0x593 => 230, 0x594 => 230, 0x595 => 230, 0x597 => 230, 0x598 => 230 |
|
1582 | + ,0x599 => 230, 0x59C => 230, 0x59D => 230, 0x59E => 230, 0x59F => 230 |
|
1583 | + ,0x5A0 => 230, 0x5A1 => 230, 0x5A8 => 230, 0x5A9 => 230, 0x5AB => 230 |
|
1584 | + ,0x5AC => 230, 0x5AF => 230, 0x5C4 => 230, 0x610 => 230, 0x611 => 230 |
|
1585 | + ,0x612 => 230, 0x613 => 230, 0x614 => 230, 0x615 => 230, 0x653 => 230 |
|
1586 | + ,0x654 => 230, 0x657 => 230, 0x658 => 230, 0x6D6 => 230, 0x6D7 => 230 |
|
1587 | + ,0x6D8 => 230, 0x6D9 => 230, 0x6DA => 230, 0x6DB => 230, 0x6DC => 230 |
|
1588 | + ,0x6DF => 230, 0x6E0 => 230, 0x6E1 => 230, 0x6E2 => 230, 0x6E4 => 230 |
|
1589 | + ,0x6E7 => 230, 0x6E8 => 230, 0x6EB => 230, 0x6EC => 230, 0x730 => 230 |
|
1590 | + ,0x732 => 230, 0x733 => 230, 0x735 => 230, 0x736 => 230, 0x73A => 230 |
|
1591 | + ,0x73D => 230, 0x73F => 230, 0x740 => 230, 0x741 => 230, 0x743 => 230 |
|
1592 | + ,0x745 => 230, 0x747 => 230, 0x749 => 230, 0x74A => 230, 0x951 => 230 |
|
1593 | + ,0x953 => 230, 0x954 => 230, 0xF82 => 230, 0xF83 => 230, 0xF86 => 230 |
|
1594 | + ,0xF87 => 230, 0x170D => 230, 0x193A => 230, 0x20D0 => 230, 0x20D1 => 230 |
|
1595 | + ,0x20D4 => 230, 0x20D5 => 230, 0x20D6 => 230, 0x20D7 => 230, 0x20DB => 230 |
|
1596 | + ,0x20DC => 230, 0x20E1 => 230, 0x20E7 => 230, 0x20E9 => 230, 0xFE20 => 230 |
|
1597 | + ,0xFE21 => 230, 0xFE22 => 230, 0xFE23 => 230, 0x1D185 => 230, 0x1D186 => 230 |
|
1598 | + ,0x1D187 => 230, 0x1D189 => 230, 0x1D188 => 230, 0x1D1AA => 230, 0x1D1AB => 230 |
|
1599 | + ,0x1D1AC => 230, 0x1D1AD => 230, 0x315 => 232, 0x31A => 232, 0x302C => 232 |
|
1600 | + ,0x35F => 233, 0x362 => 233, 0x35D => 234, 0x35E => 234, 0x360 => 234 |
|
1601 | + ,0x361 => 234, 0x345 => 240 |
|
1602 | + ) |
|
1603 | + ); |
|
1604 | 1604 | } |
1605 | 1605 | ?> |
1606 | 1606 | \ No newline at end of file |
@@ -8,22 +8,22 @@ |
||
8 | 8 | |
9 | 9 | $version_select = '<select size="1" name="idn_version"><option value="2003">IDNA 2003</option><option value="2008"'; |
10 | 10 | if ($idn_version == 2008) { |
11 | - $version_select .= ' selected="selected"'; |
|
11 | + $version_select .= ' selected="selected"'; |
|
12 | 12 | } |
13 | 13 | $version_select .= '>IDNA 2008</option></select>'; |
14 | 14 | |
15 | 15 | if (isset($_REQUEST['encode'])) { |
16 | - $decoded = isset($_REQUEST['decoded']) ? stripslashes($_REQUEST['decoded']) : ''; |
|
17 | - $encoded = $IDN->encode($decoded); |
|
16 | + $decoded = isset($_REQUEST['decoded']) ? stripslashes($_REQUEST['decoded']) : ''; |
|
17 | + $encoded = $IDN->encode($decoded); |
|
18 | 18 | } |
19 | 19 | if (isset($_REQUEST['decode'])) { |
20 | - $encoded = isset($_REQUEST['encoded']) ? stripslashes($_REQUEST['encoded']) : ''; |
|
21 | - $decoded = $IDN->decode($encoded); |
|
20 | + $encoded = isset($_REQUEST['encoded']) ? stripslashes($_REQUEST['encoded']) : ''; |
|
21 | + $decoded = $IDN->decode($encoded); |
|
22 | 22 | } |
23 | 23 | $lang = 'en'; |
24 | 24 | if (isset($_REQUEST['lang'])) { |
25 | - if ('de' == $_REQUEST['lang'] || 'en' == $_REQUEST['lang']) $lang = $_REQUEST['lang']; |
|
26 | - $add .= '<input type="hidden" name="lang" value="'.$_REQUEST['lang'].'" />'."\n"; |
|
25 | + if ('de' == $_REQUEST['lang'] || 'en' == $_REQUEST['lang']) $lang = $_REQUEST['lang']; |
|
26 | + $add .= '<input type="hidden" name="lang" value="'.$_REQUEST['lang'].'" />'."\n"; |
|
27 | 27 | } |
28 | 28 | ?> |
29 | 29 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
@@ -16,285 +16,285 @@ |
||
16 | 16 | * @version 0.0.6 2009-05-10 |
17 | 17 | */ |
18 | 18 | class uctc { |
19 | - private static $mechs = array('ucs4', /*'ucs4le', 'ucs4be', */'ucs4array', /*'utf16', 'utf16le', 'utf16be', */'utf8', 'utf7', 'utf7imap'); |
|
20 | - private static $allow_overlong = false; |
|
21 | - private static $safe_mode; |
|
22 | - private static $safe_char; |
|
19 | + private static $mechs = array('ucs4', /*'ucs4le', 'ucs4be', */'ucs4array', /*'utf16', 'utf16le', 'utf16be', */'utf8', 'utf7', 'utf7imap'); |
|
20 | + private static $allow_overlong = false; |
|
21 | + private static $safe_mode; |
|
22 | + private static $safe_char; |
|
23 | 23 | |
24 | - /** |
|
25 | - * The actual conversion routine |
|
26 | - * |
|
27 | - * @param mixed $data The data to convert, usually a string, array when converting from UCS-4 array |
|
28 | - * @param string $from Original encoding of the data |
|
29 | - * @param string $to Target encoding of the data |
|
30 | - * @param bool $safe_mode SafeMode tries to correct invalid codepoints |
|
31 | - * @return mixed False on failure, String or array on success, depending on target encoding |
|
32 | - * @access public |
|
33 | - * @since 0.0.1 |
|
34 | - */ |
|
35 | - public static function convert($data, $from, $to, $safe_mode = false, $safe_char = 0xFFFC) |
|
36 | - { |
|
37 | - self::$safe_mode = ($safe_mode) ? true : false; |
|
38 | - self::$safe_char = ($safe_char) ? $safe_char : 0xFFFC; |
|
39 | - if (self::$safe_mode) self::$allow_overlong = true; |
|
40 | - if (!in_array($from, self::$mechs)) throw new Exception('Invalid input format specified'); |
|
41 | - if (!in_array($to, self::$mechs)) throw new Exception('Invalid output format specified'); |
|
42 | - if ($from != 'ucs4array') eval('$data = self::'.$from.'_ucs4array($data);'); |
|
43 | - if ($to != 'ucs4array') eval('$data = self::ucs4array_'.$to.'($data);'); |
|
44 | - return $data; |
|
45 | - } |
|
24 | + /** |
|
25 | + * The actual conversion routine |
|
26 | + * |
|
27 | + * @param mixed $data The data to convert, usually a string, array when converting from UCS-4 array |
|
28 | + * @param string $from Original encoding of the data |
|
29 | + * @param string $to Target encoding of the data |
|
30 | + * @param bool $safe_mode SafeMode tries to correct invalid codepoints |
|
31 | + * @return mixed False on failure, String or array on success, depending on target encoding |
|
32 | + * @access public |
|
33 | + * @since 0.0.1 |
|
34 | + */ |
|
35 | + public static function convert($data, $from, $to, $safe_mode = false, $safe_char = 0xFFFC) |
|
36 | + { |
|
37 | + self::$safe_mode = ($safe_mode) ? true : false; |
|
38 | + self::$safe_char = ($safe_char) ? $safe_char : 0xFFFC; |
|
39 | + if (self::$safe_mode) self::$allow_overlong = true; |
|
40 | + if (!in_array($from, self::$mechs)) throw new Exception('Invalid input format specified'); |
|
41 | + if (!in_array($to, self::$mechs)) throw new Exception('Invalid output format specified'); |
|
42 | + if ($from != 'ucs4array') eval('$data = self::'.$from.'_ucs4array($data);'); |
|
43 | + if ($to != 'ucs4array') eval('$data = self::ucs4array_'.$to.'($data);'); |
|
44 | + return $data; |
|
45 | + } |
|
46 | 46 | |
47 | - /** |
|
48 | - * This converts an UTF-8 encoded string to its UCS-4 representation |
|
49 | - * |
|
50 | - * @param string $input The UTF-8 string to convert |
|
51 | - * @return array Array of 32bit values representing each codepoint |
|
52 | - * @access private |
|
53 | - */ |
|
54 | - private static function utf8_ucs4array($input) |
|
55 | - { |
|
56 | - $output = array(); |
|
57 | - $out_len = 0; |
|
58 | - $inp_len = strlen($input); |
|
59 | - $mode = 'next'; |
|
60 | - $test = 'none'; |
|
61 | - for ($k = 0; $k < $inp_len; ++$k) { |
|
62 | - $v = ord($input{$k}); // Extract byte from input string |
|
47 | + /** |
|
48 | + * This converts an UTF-8 encoded string to its UCS-4 representation |
|
49 | + * |
|
50 | + * @param string $input The UTF-8 string to convert |
|
51 | + * @return array Array of 32bit values representing each codepoint |
|
52 | + * @access private |
|
53 | + */ |
|
54 | + private static function utf8_ucs4array($input) |
|
55 | + { |
|
56 | + $output = array(); |
|
57 | + $out_len = 0; |
|
58 | + $inp_len = strlen($input); |
|
59 | + $mode = 'next'; |
|
60 | + $test = 'none'; |
|
61 | + for ($k = 0; $k < $inp_len; ++$k) { |
|
62 | + $v = ord($input{$k}); // Extract byte from input string |
|
63 | 63 | |
64 | - if ($v < 128) { // We found an ASCII char - put into stirng as is |
|
65 | - $output[$out_len] = $v; |
|
66 | - ++$out_len; |
|
67 | - if ('add' == $mode) { |
|
68 | - if (self::$safe_mode) { |
|
69 | - $output[$out_len-2] = self::$safe_char; |
|
70 | - $mode = 'next'; |
|
71 | - } else { |
|
72 | - throw new Exception('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); |
|
73 | - } |
|
74 | - } |
|
75 | - continue; |
|
76 | - } |
|
77 | - if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char |
|
78 | - $start_byte = $v; |
|
79 | - $mode = 'add'; |
|
80 | - $test = 'range'; |
|
81 | - if ($v >> 5 == 6) { // &110xxxxx 10xxxxx |
|
82 | - $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left |
|
83 | - $v = ($v - 192) << 6; |
|
84 | - } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx |
|
85 | - $next_byte = 1; |
|
86 | - $v = ($v - 224) << 12; |
|
87 | - } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
|
88 | - $next_byte = 2; |
|
89 | - $v = ($v - 240) << 18; |
|
90 | - } elseif (self::$safe_mode) { |
|
91 | - $mode = 'next'; |
|
92 | - $output[$out_len] = self::$safe_char; |
|
93 | - ++$out_len; |
|
94 | - continue; |
|
95 | - } else { |
|
96 | - throw new Exception('This might be UTF-8, but I don\'t understand it at byte '.$k); |
|
97 | - } |
|
98 | - if ($inp_len-$k-$next_byte < 2) { |
|
99 | - $output[$out_len] = self::$safe_char; |
|
100 | - $mode = 'no'; |
|
101 | - continue; |
|
102 | - } |
|
64 | + if ($v < 128) { // We found an ASCII char - put into stirng as is |
|
65 | + $output[$out_len] = $v; |
|
66 | + ++$out_len; |
|
67 | + if ('add' == $mode) { |
|
68 | + if (self::$safe_mode) { |
|
69 | + $output[$out_len-2] = self::$safe_char; |
|
70 | + $mode = 'next'; |
|
71 | + } else { |
|
72 | + throw new Exception('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); |
|
73 | + } |
|
74 | + } |
|
75 | + continue; |
|
76 | + } |
|
77 | + if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char |
|
78 | + $start_byte = $v; |
|
79 | + $mode = 'add'; |
|
80 | + $test = 'range'; |
|
81 | + if ($v >> 5 == 6) { // &110xxxxx 10xxxxx |
|
82 | + $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left |
|
83 | + $v = ($v - 192) << 6; |
|
84 | + } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx |
|
85 | + $next_byte = 1; |
|
86 | + $v = ($v - 224) << 12; |
|
87 | + } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
|
88 | + $next_byte = 2; |
|
89 | + $v = ($v - 240) << 18; |
|
90 | + } elseif (self::$safe_mode) { |
|
91 | + $mode = 'next'; |
|
92 | + $output[$out_len] = self::$safe_char; |
|
93 | + ++$out_len; |
|
94 | + continue; |
|
95 | + } else { |
|
96 | + throw new Exception('This might be UTF-8, but I don\'t understand it at byte '.$k); |
|
97 | + } |
|
98 | + if ($inp_len-$k-$next_byte < 2) { |
|
99 | + $output[$out_len] = self::$safe_char; |
|
100 | + $mode = 'no'; |
|
101 | + continue; |
|
102 | + } |
|
103 | 103 | |
104 | - if ('add' == $mode) { |
|
105 | - $output[$out_len] = (int) $v; |
|
106 | - ++$out_len; |
|
107 | - continue; |
|
108 | - } |
|
109 | - } |
|
110 | - if ('add' == $mode) { |
|
111 | - if (!self::$allow_overlong && $test == 'range') { |
|
112 | - $test = 'none'; |
|
113 | - if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) { |
|
114 | - throw new Exception('Bogus UTF-8 character detected (out of legal range) at byte '.$k); |
|
115 | - } |
|
116 | - } |
|
117 | - if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx |
|
118 | - $v = ($v-128) << ($next_byte*6); |
|
119 | - $output[($out_len-1)] += $v; |
|
120 | - --$next_byte; |
|
121 | - } else { |
|
122 | - if (self::$safe_mode) { |
|
123 | - $output[$out_len-1] = ord(self::$safe_char); |
|
124 | - $k--; |
|
125 | - $mode = 'next'; |
|
126 | - continue; |
|
127 | - } else { |
|
128 | - throw new Exception('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); |
|
129 | - } |
|
130 | - } |
|
131 | - if ($next_byte < 0) { |
|
132 | - $mode = 'next'; |
|
133 | - } |
|
134 | - } |
|
135 | - } // for |
|
136 | - return $output; |
|
137 | - } |
|
104 | + if ('add' == $mode) { |
|
105 | + $output[$out_len] = (int) $v; |
|
106 | + ++$out_len; |
|
107 | + continue; |
|
108 | + } |
|
109 | + } |
|
110 | + if ('add' == $mode) { |
|
111 | + if (!self::$allow_overlong && $test == 'range') { |
|
112 | + $test = 'none'; |
|
113 | + if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) { |
|
114 | + throw new Exception('Bogus UTF-8 character detected (out of legal range) at byte '.$k); |
|
115 | + } |
|
116 | + } |
|
117 | + if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx |
|
118 | + $v = ($v-128) << ($next_byte*6); |
|
119 | + $output[($out_len-1)] += $v; |
|
120 | + --$next_byte; |
|
121 | + } else { |
|
122 | + if (self::$safe_mode) { |
|
123 | + $output[$out_len-1] = ord(self::$safe_char); |
|
124 | + $k--; |
|
125 | + $mode = 'next'; |
|
126 | + continue; |
|
127 | + } else { |
|
128 | + throw new Exception('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); |
|
129 | + } |
|
130 | + } |
|
131 | + if ($next_byte < 0) { |
|
132 | + $mode = 'next'; |
|
133 | + } |
|
134 | + } |
|
135 | + } // for |
|
136 | + return $output; |
|
137 | + } |
|
138 | 138 | |
139 | - /** |
|
140 | - * Convert UCS-4 string into UTF-8 string |
|
141 | - * See utf8_ucs4array() for details |
|
142 | - * @access private |
|
143 | - */ |
|
144 | - private static function ucs4array_utf8($input) |
|
145 | - { |
|
146 | - $output = ''; |
|
147 | - foreach ($input as $v) { |
|
148 | - if ($v < 128) { // 7bit are transferred literally |
|
149 | - $output .= chr($v); |
|
150 | - } elseif ($v < (1 << 11)) { // 2 bytes |
|
151 | - $output .= chr(192+($v >> 6)).chr(128+($v & 63)); |
|
152 | - } elseif ($v < (1 << 16)) { // 3 bytes |
|
153 | - $output .= chr(224+($v >> 12)).chr(128+(($v >> 6) & 63)).chr(128+($v & 63)); |
|
154 | - } elseif ($v < (1 << 21)) { // 4 bytes |
|
155 | - $output .= chr(240+($v >> 18)).chr(128+(($v >> 12) & 63)).chr(128+(($v >> 6) & 63)).chr(128+($v & 63)); |
|
156 | - } elseif (self::$safe_mode) { |
|
157 | - $output .= self::$safe_char; |
|
158 | - } else { |
|
159 | - throw new Exception('Conversion from UCS-4 to UTF-8 failed: malformed input at byte '.$k); |
|
160 | - } |
|
161 | - } |
|
162 | - return $output; |
|
163 | - } |
|
139 | + /** |
|
140 | + * Convert UCS-4 string into UTF-8 string |
|
141 | + * See utf8_ucs4array() for details |
|
142 | + * @access private |
|
143 | + */ |
|
144 | + private static function ucs4array_utf8($input) |
|
145 | + { |
|
146 | + $output = ''; |
|
147 | + foreach ($input as $v) { |
|
148 | + if ($v < 128) { // 7bit are transferred literally |
|
149 | + $output .= chr($v); |
|
150 | + } elseif ($v < (1 << 11)) { // 2 bytes |
|
151 | + $output .= chr(192+($v >> 6)).chr(128+($v & 63)); |
|
152 | + } elseif ($v < (1 << 16)) { // 3 bytes |
|
153 | + $output .= chr(224+($v >> 12)).chr(128+(($v >> 6) & 63)).chr(128+($v & 63)); |
|
154 | + } elseif ($v < (1 << 21)) { // 4 bytes |
|
155 | + $output .= chr(240+($v >> 18)).chr(128+(($v >> 12) & 63)).chr(128+(($v >> 6) & 63)).chr(128+($v & 63)); |
|
156 | + } elseif (self::$safe_mode) { |
|
157 | + $output .= self::$safe_char; |
|
158 | + } else { |
|
159 | + throw new Exception('Conversion from UCS-4 to UTF-8 failed: malformed input at byte '.$k); |
|
160 | + } |
|
161 | + } |
|
162 | + return $output; |
|
163 | + } |
|
164 | 164 | |
165 | - private static function utf7imap_ucs4array($input) |
|
166 | - { |
|
167 | - return self::utf7_ucs4array(str_replace(',', '/', $input), '&'); |
|
168 | - } |
|
165 | + private static function utf7imap_ucs4array($input) |
|
166 | + { |
|
167 | + return self::utf7_ucs4array(str_replace(',', '/', $input), '&'); |
|
168 | + } |
|
169 | 169 | |
170 | - private static function utf7_ucs4array($input, $sc = '+') |
|
171 | - { |
|
172 | - $output = array(); |
|
173 | - $out_len = 0; |
|
174 | - $inp_len = strlen($input); |
|
175 | - $mode = 'd'; |
|
176 | - $b64 = ''; |
|
170 | + private static function utf7_ucs4array($input, $sc = '+') |
|
171 | + { |
|
172 | + $output = array(); |
|
173 | + $out_len = 0; |
|
174 | + $inp_len = strlen($input); |
|
175 | + $mode = 'd'; |
|
176 | + $b64 = ''; |
|
177 | 177 | |
178 | - for ($k = 0; $k < $inp_len; ++$k) { |
|
179 | - $c = $input{$k}; |
|
180 | - if (0 == ord($c)) continue; // Ignore zero bytes |
|
181 | - if ('b' == $mode) { |
|
182 | - // Sequence got terminated |
|
183 | - if (!preg_match('![A-Za-z0-9/'.preg_quote($sc, '!').']!', $c)) { |
|
184 | - if ('-' == $c) { |
|
185 | - if ($b64 == '') { |
|
186 | - $output[$out_len] = ord($sc); |
|
187 | - $out_len++; |
|
188 | - $mode = 'd'; |
|
189 | - continue; |
|
190 | - } |
|
191 | - } |
|
192 | - $tmp = base64_decode($b64); |
|
193 | - $tmp = substr($tmp, -1 * (strlen($tmp) % 2)); |
|
194 | - for ($i = 0; $i < strlen($tmp); $i++) { |
|
195 | - if ($i % 2) { |
|
196 | - $output[$out_len] += ord($tmp{$i}); |
|
197 | - $out_len++; |
|
198 | - } else { |
|
199 | - $output[$out_len] = ord($tmp{$i}) << 8; |
|
200 | - } |
|
201 | - } |
|
202 | - $mode = 'd'; |
|
203 | - $b64 = ''; |
|
204 | - continue; |
|
205 | - } else { |
|
206 | - $b64 .= $c; |
|
207 | - } |
|
208 | - } |
|
209 | - if ('d' == $mode) { |
|
210 | - if ($sc == $c) { |
|
211 | - $mode = 'b'; |
|
212 | - continue; |
|
213 | - } |
|
214 | - $output[$out_len] = ord($c); |
|
215 | - $out_len++; |
|
216 | - } |
|
217 | - } |
|
218 | - return $output; |
|
219 | - } |
|
178 | + for ($k = 0; $k < $inp_len; ++$k) { |
|
179 | + $c = $input{$k}; |
|
180 | + if (0 == ord($c)) continue; // Ignore zero bytes |
|
181 | + if ('b' == $mode) { |
|
182 | + // Sequence got terminated |
|
183 | + if (!preg_match('![A-Za-z0-9/'.preg_quote($sc, '!').']!', $c)) { |
|
184 | + if ('-' == $c) { |
|
185 | + if ($b64 == '') { |
|
186 | + $output[$out_len] = ord($sc); |
|
187 | + $out_len++; |
|
188 | + $mode = 'd'; |
|
189 | + continue; |
|
190 | + } |
|
191 | + } |
|
192 | + $tmp = base64_decode($b64); |
|
193 | + $tmp = substr($tmp, -1 * (strlen($tmp) % 2)); |
|
194 | + for ($i = 0; $i < strlen($tmp); $i++) { |
|
195 | + if ($i % 2) { |
|
196 | + $output[$out_len] += ord($tmp{$i}); |
|
197 | + $out_len++; |
|
198 | + } else { |
|
199 | + $output[$out_len] = ord($tmp{$i}) << 8; |
|
200 | + } |
|
201 | + } |
|
202 | + $mode = 'd'; |
|
203 | + $b64 = ''; |
|
204 | + continue; |
|
205 | + } else { |
|
206 | + $b64 .= $c; |
|
207 | + } |
|
208 | + } |
|
209 | + if ('d' == $mode) { |
|
210 | + if ($sc == $c) { |
|
211 | + $mode = 'b'; |
|
212 | + continue; |
|
213 | + } |
|
214 | + $output[$out_len] = ord($c); |
|
215 | + $out_len++; |
|
216 | + } |
|
217 | + } |
|
218 | + return $output; |
|
219 | + } |
|
220 | 220 | |
221 | - private static function ucs4array_utf7imap($input) |
|
222 | - { |
|
223 | - return str_replace('/', ',', self::ucs4array_utf7($input, '&')); |
|
224 | - } |
|
221 | + private static function ucs4array_utf7imap($input) |
|
222 | + { |
|
223 | + return str_replace('/', ',', self::ucs4array_utf7($input, '&')); |
|
224 | + } |
|
225 | 225 | |
226 | - private static function ucs4array_utf7($input, $sc = '+') |
|
227 | - { |
|
228 | - $output = ''; |
|
229 | - $mode = 'd'; |
|
230 | - $b64 = ''; |
|
231 | - while (true) { |
|
232 | - $v = (!empty($input)) ? array_shift($input) : false; |
|
233 | - $is_direct = (false !== $v) ? (0x20 <= $v && $v <= 0x7e && $v != ord($sc)) : true; |
|
234 | - if ($mode == 'b') { |
|
235 | - if ($is_direct) { |
|
236 | - if ($b64 == chr(0).$sc) { |
|
237 | - $output .= $sc.'-'; |
|
238 | - $b64 = ''; |
|
239 | - } elseif ($b64) { |
|
240 | - $output .= $sc.str_replace('=', '', base64_encode($b64)).'-'; |
|
241 | - $b64 = ''; |
|
242 | - } |
|
243 | - $mode = 'd'; |
|
244 | - } elseif (false !== $v) { |
|
245 | - $b64 .= chr(($v >> 8) & 255). chr($v & 255); |
|
246 | - } |
|
247 | - } |
|
248 | - if ($mode == 'd' && false !== $v) { |
|
249 | - if ($is_direct) { |
|
250 | - $output .= chr($v); |
|
251 | - } else { |
|
252 | - $b64 = chr(($v >> 8) & 255). chr($v & 255); |
|
253 | - $mode = 'b'; |
|
254 | - } |
|
255 | - } |
|
256 | - if (false === $v && $b64 == '') break; |
|
257 | - } |
|
258 | - return $output; |
|
259 | - } |
|
226 | + private static function ucs4array_utf7($input, $sc = '+') |
|
227 | + { |
|
228 | + $output = ''; |
|
229 | + $mode = 'd'; |
|
230 | + $b64 = ''; |
|
231 | + while (true) { |
|
232 | + $v = (!empty($input)) ? array_shift($input) : false; |
|
233 | + $is_direct = (false !== $v) ? (0x20 <= $v && $v <= 0x7e && $v != ord($sc)) : true; |
|
234 | + if ($mode == 'b') { |
|
235 | + if ($is_direct) { |
|
236 | + if ($b64 == chr(0).$sc) { |
|
237 | + $output .= $sc.'-'; |
|
238 | + $b64 = ''; |
|
239 | + } elseif ($b64) { |
|
240 | + $output .= $sc.str_replace('=', '', base64_encode($b64)).'-'; |
|
241 | + $b64 = ''; |
|
242 | + } |
|
243 | + $mode = 'd'; |
|
244 | + } elseif (false !== $v) { |
|
245 | + $b64 .= chr(($v >> 8) & 255). chr($v & 255); |
|
246 | + } |
|
247 | + } |
|
248 | + if ($mode == 'd' && false !== $v) { |
|
249 | + if ($is_direct) { |
|
250 | + $output .= chr($v); |
|
251 | + } else { |
|
252 | + $b64 = chr(($v >> 8) & 255). chr($v & 255); |
|
253 | + $mode = 'b'; |
|
254 | + } |
|
255 | + } |
|
256 | + if (false === $v && $b64 == '') break; |
|
257 | + } |
|
258 | + return $output; |
|
259 | + } |
|
260 | 260 | |
261 | - /** |
|
262 | - * Convert UCS-4 array into UCS-4 string (Little Endian at the moment) |
|
263 | - * @access private |
|
264 | - */ |
|
265 | - private static function ucs4array_ucs4($input) |
|
266 | - { |
|
267 | - $output = ''; |
|
268 | - foreach ($input as $v) { |
|
269 | - $output .= chr(($v >> 24) & 255).chr(($v >> 16) & 255).chr(($v >> 8) & 255).chr($v & 255); |
|
270 | - } |
|
271 | - return $output; |
|
272 | - } |
|
261 | + /** |
|
262 | + * Convert UCS-4 array into UCS-4 string (Little Endian at the moment) |
|
263 | + * @access private |
|
264 | + */ |
|
265 | + private static function ucs4array_ucs4($input) |
|
266 | + { |
|
267 | + $output = ''; |
|
268 | + foreach ($input as $v) { |
|
269 | + $output .= chr(($v >> 24) & 255).chr(($v >> 16) & 255).chr(($v >> 8) & 255).chr($v & 255); |
|
270 | + } |
|
271 | + return $output; |
|
272 | + } |
|
273 | 273 | |
274 | - /** |
|
275 | - * Convert UCS-4 string (LE in the moment) into UCS-4 garray |
|
276 | - * @access private |
|
277 | - */ |
|
278 | - private static function ucs4_ucs4array($input) |
|
279 | - { |
|
280 | - $output = array(); |
|
274 | + /** |
|
275 | + * Convert UCS-4 string (LE in the moment) into UCS-4 garray |
|
276 | + * @access private |
|
277 | + */ |
|
278 | + private static function ucs4_ucs4array($input) |
|
279 | + { |
|
280 | + $output = array(); |
|
281 | 281 | |
282 | - $inp_len = strlen($input); |
|
283 | - // Input length must be dividable by 4 |
|
284 | - if ($inp_len % 4) { |
|
285 | - throw new Exception('Input UCS4 string is broken'); |
|
286 | - } |
|
287 | - // Empty input - return empty output |
|
288 | - if (!$inp_len) return $output; |
|
282 | + $inp_len = strlen($input); |
|
283 | + // Input length must be dividable by 4 |
|
284 | + if ($inp_len % 4) { |
|
285 | + throw new Exception('Input UCS4 string is broken'); |
|
286 | + } |
|
287 | + // Empty input - return empty output |
|
288 | + if (!$inp_len) return $output; |
|
289 | 289 | |
290 | - for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) { |
|
291 | - if (!($i % 4)) { // Increment output position every 4 input bytes |
|
292 | - $out_len++; |
|
293 | - $output[$out_len] = 0; |
|
294 | - } |
|
295 | - $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) ); |
|
296 | - } |
|
297 | - return $output; |
|
298 | - } |
|
290 | + for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) { |
|
291 | + if (!($i % 4)) { // Increment output position every 4 input bytes |
|
292 | + $out_len++; |
|
293 | + $output[$out_len] = 0; |
|
294 | + } |
|
295 | + $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) ); |
|
296 | + } |
|
297 | + return $output; |
|
298 | + } |
|
299 | 299 | } |
300 | 300 | ?> |
301 | 301 | \ No newline at end of file |
@@ -23,68 +23,68 @@ discard block |
||
23 | 23 | */ |
24 | 24 | class global_stream_wrapper |
25 | 25 | { |
26 | - private $pos; |
|
27 | - private $stream; |
|
28 | - private $name; |
|
26 | + private $pos; |
|
27 | + private $stream; |
|
28 | + private $name; |
|
29 | 29 | |
30 | - public function stream_open($path, $mode, $options, &$opened_path) |
|
31 | - { |
|
32 | - $this->stream = &$GLOBALS[$this->name=egw_vfs::parse_url($path,PHP_URL_HOST)]; |
|
33 | - $this->pos = 0; |
|
34 | - if (!is_string($this->stream)) return false; |
|
35 | - return true; |
|
36 | - } |
|
30 | + public function stream_open($path, $mode, $options, &$opened_path) |
|
31 | + { |
|
32 | + $this->stream = &$GLOBALS[$this->name=egw_vfs::parse_url($path,PHP_URL_HOST)]; |
|
33 | + $this->pos = 0; |
|
34 | + if (!is_string($this->stream)) return false; |
|
35 | + return true; |
|
36 | + } |
|
37 | 37 | |
38 | - public function stream_read($count) |
|
39 | - { |
|
40 | - $ret = self::_cut_bytes($this->stream, $this->pos, $count); |
|
41 | - //error_log(__METHOD__."($count) this->pos=$this->pos, self::_bytes(this->stream)=".self::_bytes($this->stream)." self::_bytes(ret)=".self::_bytes($ret)); |
|
42 | - $this->pos += self::_bytes($ret); |
|
43 | - return $ret; |
|
44 | - } |
|
38 | + public function stream_read($count) |
|
39 | + { |
|
40 | + $ret = self::_cut_bytes($this->stream, $this->pos, $count); |
|
41 | + //error_log(__METHOD__."($count) this->pos=$this->pos, self::_bytes(this->stream)=".self::_bytes($this->stream)." self::_bytes(ret)=".self::_bytes($ret)); |
|
42 | + $this->pos += self::_bytes($ret); |
|
43 | + return $ret; |
|
44 | + } |
|
45 | 45 | |
46 | - public function stream_write($data) |
|
47 | - { |
|
48 | - $l=self::_bytes($data); |
|
49 | - $this->stream = |
|
50 | - self::_cut_bytes($this->stream, 0, $this->pos) . |
|
51 | - $data . |
|
52 | - self::_cut_bytes($this->stream, $this->pos += $l); |
|
53 | - return $l; |
|
54 | - } |
|
46 | + public function stream_write($data) |
|
47 | + { |
|
48 | + $l=self::_bytes($data); |
|
49 | + $this->stream = |
|
50 | + self::_cut_bytes($this->stream, 0, $this->pos) . |
|
51 | + $data . |
|
52 | + self::_cut_bytes($this->stream, $this->pos += $l); |
|
53 | + return $l; |
|
54 | + } |
|
55 | 55 | |
56 | - public function stream_tell() |
|
57 | - { |
|
58 | - return $this->pos; |
|
59 | - } |
|
56 | + public function stream_tell() |
|
57 | + { |
|
58 | + return $this->pos; |
|
59 | + } |
|
60 | 60 | |
61 | - public function stream_eof() |
|
62 | - { |
|
63 | - return $this->pos >= self::_bytes($this->stream); |
|
64 | - } |
|
61 | + public function stream_eof() |
|
62 | + { |
|
63 | + return $this->pos >= self::_bytes($this->stream); |
|
64 | + } |
|
65 | 65 | |
66 | - public function stream_seek($offset, $whence) |
|
67 | - { |
|
68 | - $l=self::_bytes($this->stream); |
|
69 | - switch ($whence) |
|
70 | - { |
|
71 | - case SEEK_SET: $newPos = $offset; break; |
|
72 | - case SEEK_CUR: $newPos = $this->pos + $offset; break; |
|
73 | - case SEEK_END: $newPos = $l + $offset; break; |
|
74 | - default: return false; |
|
75 | - } |
|
76 | - $ret = ($newPos >=0 && $newPos <=$l); |
|
77 | - if ($ret) $this->pos=$newPos; |
|
78 | - return $ret; |
|
79 | - } |
|
66 | + public function stream_seek($offset, $whence) |
|
67 | + { |
|
68 | + $l=self::_bytes($this->stream); |
|
69 | + switch ($whence) |
|
70 | + { |
|
71 | + case SEEK_SET: $newPos = $offset; break; |
|
72 | + case SEEK_CUR: $newPos = $this->pos + $offset; break; |
|
73 | + case SEEK_END: $newPos = $l + $offset; break; |
|
74 | + default: return false; |
|
75 | + } |
|
76 | + $ret = ($newPos >=0 && $newPos <=$l); |
|
77 | + if ($ret) $this->pos=$newPos; |
|
78 | + return $ret; |
|
79 | + } |
|
80 | 80 | |
81 | - public function stream_stat() |
|
82 | - { |
|
83 | - if (!isset($this->stream)) |
|
84 | - { |
|
85 | - return false; |
|
86 | - } |
|
87 | - return array( |
|
81 | + public function stream_stat() |
|
82 | + { |
|
83 | + if (!isset($this->stream)) |
|
84 | + { |
|
85 | + return false; |
|
86 | + } |
|
87 | + return array( |
|
88 | 88 | 'ino' => md5($this->name), |
89 | 89 | 'name' => $this->name, |
90 | 90 | 'mode' => 0100000, |
@@ -95,7 +95,7 @@ discard block |
||
95 | 95 | 'ctime' => 0, |
96 | 96 | 'nlink' => 1, |
97 | 97 | ); |
98 | - } |
|
98 | + } |
|
99 | 99 | |
100 | 100 | /** |
101 | 101 | * are the string functions overloaded by their mbstring variants |
@@ -72,10 +72,10 @@ discard block |
||
72 | 72 | const WRITABLE = 'share_rw'; |
73 | 73 | |
74 | 74 | /** |
75 | - * Modes for sharing files |
|
76 | - * |
|
77 | - * @var array |
|
78 | - */ |
|
75 | + * Modes for sharing files |
|
76 | + * |
|
77 | + * @var array |
|
78 | + */ |
|
79 | 79 | static $modes = array( |
80 | 80 | self::ATTACH => array( |
81 | 81 | 'label' => 'Attachment', |
@@ -112,16 +112,16 @@ discard block |
||
112 | 112 | */ |
113 | 113 | public static function get_token() |
114 | 114 | { |
115 | - // WebDAV has no concept of a query string and clients (including cadaver) |
|
116 | - // seem to pass '?' unencoded, so we need to extract the path info out |
|
117 | - // of the request URI ourselves |
|
118 | - // if request URI contains a full url, remove schema and domain |
|
115 | + // WebDAV has no concept of a query string and clients (including cadaver) |
|
116 | + // seem to pass '?' unencoded, so we need to extract the path info out |
|
117 | + // of the request URI ourselves |
|
118 | + // if request URI contains a full url, remove schema and domain |
|
119 | 119 | $matches = null; |
120 | - if (preg_match('|^https?://[^/]+(/.*)$|', $path_info=$_SERVER['REQUEST_URI'], $matches)) |
|
121 | - { |
|
122 | - $path_info = $matches[1]; |
|
123 | - } |
|
124 | - $path_info = substr($path_info, strlen($_SERVER['SCRIPT_NAME'])); |
|
120 | + if (preg_match('|^https?://[^/]+(/.*)$|', $path_info=$_SERVER['REQUEST_URI'], $matches)) |
|
121 | + { |
|
122 | + $path_info = $matches[1]; |
|
123 | + } |
|
124 | + $path_info = substr($path_info, strlen($_SERVER['SCRIPT_NAME'])); |
|
125 | 125 | list(, $token/*, $path*/) = preg_split('|[/?]|', $path_info, 3); |
126 | 126 | |
127 | 127 | return $token; |
@@ -172,7 +172,7 @@ |
||
172 | 172 | private function file_processed($file) |
173 | 173 | { |
174 | 174 | return (array_key_exists($file, $this->included_files) || |
175 | - array_key_exists($file, $this->parsed_files)); |
|
175 | + array_key_exists($file, $this->parsed_files)); |
|
176 | 176 | } |
177 | 177 | |
178 | 178 | /** |
@@ -32,33 +32,33 @@ discard block |
||
32 | 32 | const SAMBA4 = 2; |
33 | 33 | |
34 | 34 | /** |
35 | - * @var array $namingContext holds the supported namingcontexts |
|
36 | - */ |
|
35 | + * @var array $namingContext holds the supported namingcontexts |
|
36 | + */ |
|
37 | 37 | var $namingContext = array(); |
38 | 38 | |
39 | 39 | /** |
40 | - * @var string $version holds the LDAP server version |
|
41 | - */ |
|
40 | + * @var string $version holds the LDAP server version |
|
41 | + */ |
|
42 | 42 | var $version = 2; |
43 | 43 | |
44 | 44 | /** |
45 | - * @var integer $serverType holds the type of LDAP server(OpenLDAP, ADS, NDS, ...) |
|
46 | - */ |
|
45 | + * @var integer $serverType holds the type of LDAP server(OpenLDAP, ADS, NDS, ...) |
|
46 | + */ |
|
47 | 47 | var $serverType = 0; |
48 | 48 | |
49 | 49 | /** |
50 | - * @var string $_subSchemaEntry the subschema entry DN |
|
51 | - */ |
|
50 | + * @var string $_subSchemaEntry the subschema entry DN |
|
51 | + */ |
|
52 | 52 | var $subSchemaEntry = ''; |
53 | 53 | |
54 | 54 | /** |
55 | - * @var array $supportedObjectClasses the supported objectclasses |
|
56 | - */ |
|
55 | + * @var array $supportedObjectClasses the supported objectclasses |
|
56 | + */ |
|
57 | 57 | var $supportedObjectClasses = array(); |
58 | 58 | |
59 | 59 | /** |
60 | - * @var array $supportedOIDs the supported OIDs |
|
61 | - */ |
|
60 | + * @var array $supportedOIDs the supported OIDs |
|
61 | + */ |
|
62 | 62 | var $supportedOIDs = array(); |
63 | 63 | |
64 | 64 | /** |
@@ -79,50 +79,50 @@ discard block |
||
79 | 79 | } |
80 | 80 | |
81 | 81 | /** |
82 | - * gets the version |
|
83 | - * |
|
84 | - * @return integer the supported ldap version |
|
85 | - */ |
|
82 | + * gets the version |
|
83 | + * |
|
84 | + * @return integer the supported ldap version |
|
85 | + */ |
|
86 | 86 | function getVersion() |
87 | 87 | { |
88 | 88 | return $this->version; |
89 | 89 | } |
90 | 90 | |
91 | 91 | /** |
92 | - * sets the namingcontexts |
|
93 | - * |
|
94 | - * @param array $_namingContext the supported namingcontexts |
|
95 | - */ |
|
92 | + * sets the namingcontexts |
|
93 | + * |
|
94 | + * @param array $_namingContext the supported namingcontexts |
|
95 | + */ |
|
96 | 96 | function setNamingContexts($_namingContext) |
97 | 97 | { |
98 | 98 | $this->namingContext = $_namingContext; |
99 | 99 | } |
100 | 100 | |
101 | 101 | /** |
102 | - * sets the type of the ldap server(OpenLDAP, ADS, NDS, ...) |
|
103 | - * |
|
104 | - * @param integer $_serverType the type of ldap server |
|
105 | - */ |
|
102 | + * sets the type of the ldap server(OpenLDAP, ADS, NDS, ...) |
|
103 | + * |
|
104 | + * @param integer $_serverType the type of ldap server |
|
105 | + */ |
|
106 | 106 | function setServerType($_serverType) |
107 | 107 | { |
108 | 108 | $this->serverType = $_serverType; |
109 | 109 | } |
110 | 110 | |
111 | 111 | /** |
112 | - * sets the DN for the subschema entry |
|
113 | - * |
|
114 | - * @param string $_subSchemaEntry the subschema entry DN |
|
115 | - */ |
|
112 | + * sets the DN for the subschema entry |
|
113 | + * |
|
114 | + * @param string $_subSchemaEntry the subschema entry DN |
|
115 | + */ |
|
116 | 116 | function setSubSchemaEntry($_subSchemaEntry) |
117 | 117 | { |
118 | 118 | $this->subSchemaEntry = $_subSchemaEntry; |
119 | 119 | } |
120 | 120 | |
121 | 121 | /** |
122 | - * sets the supported objectclasses |
|
123 | - * |
|
124 | - * @param array $_supportedObjectClasses the supported objectclasses |
|
125 | - */ |
|
122 | + * sets the supported objectclasses |
|
123 | + * |
|
124 | + * @param array $_supportedObjectClasses the supported objectclasses |
|
125 | + */ |
|
126 | 126 | function setSupportedObjectClasses($_supportedObjectClasses) |
127 | 127 | { |
128 | 128 | $this->supportedOIDs = $_supportedObjectClasses; |
@@ -130,20 +130,20 @@ discard block |
||
130 | 130 | } |
131 | 131 | |
132 | 132 | /** |
133 | - * sets the version |
|
134 | - * |
|
135 | - * @param integer $_version the supported ldap version |
|
136 | - */ |
|
133 | + * sets the version |
|
134 | + * |
|
135 | + * @param integer $_version the supported ldap version |
|
136 | + */ |
|
137 | 137 | function setVersion($_version) |
138 | 138 | { |
139 | 139 | $this->version = $_version; |
140 | 140 | } |
141 | 141 | |
142 | 142 | /** |
143 | - * checks for supported objectclasses |
|
144 | - * |
|
145 | - * @return bool returns true if the ldap server supports this objectclass |
|
146 | - */ |
|
143 | + * checks for supported objectclasses |
|
144 | + * |
|
145 | + * @return bool returns true if the ldap server supports this objectclass |
|
146 | + */ |
|
147 | 147 | function supportsObjectClass($_objectClass) |
148 | 148 | { |
149 | 149 | if($this->supportedObjectClasses[strtolower($_objectClass)]) |
@@ -52,7 +52,7 @@ discard block |
||
52 | 52 | function ADODB_mysqli() |
53 | 53 | { |
54 | 54 | // if(!extension_loaded("mysqli")) |
55 | - ;//trigger_error("You must have the mysqli extension installed.", E_USER_ERROR); |
|
55 | + ;//trigger_error("You must have the mysqli extension installed.", E_USER_ERROR); |
|
56 | 56 | |
57 | 57 | } |
58 | 58 | |
@@ -68,14 +68,14 @@ discard block |
||
68 | 68 | if(!extension_loaded("mysqli")) { |
69 | 69 | return null; |
70 | 70 | } |
71 | - $this->_connectionID = @mysqli_init(); |
|
71 | + $this->_connectionID = @mysqli_init(); |
|
72 | 72 | |
73 | - if (is_null($this->_connectionID)) { |
|
74 | - // mysqli_init only fails if insufficient memory |
|
75 | - if ($this->debug) |
|
73 | + if (is_null($this->_connectionID)) { |
|
74 | + // mysqli_init only fails if insufficient memory |
|
75 | + if ($this->debug) |
|
76 | 76 | ADOConnection::outp("mysqli_init() failed : " . $this->ErrorMsg()); |
77 | - return false; |
|
78 | - } |
|
77 | + return false; |
|
78 | + } |
|
79 | 79 | /* |
80 | 80 | I suggest a simple fix which would enable adodb and mysqli driver to |
81 | 81 | read connection options from the standard mysql configuration file |
@@ -91,10 +91,10 @@ discard block |
||
91 | 91 | if ($persist && PHP_VERSION > 5.2 && strncmp($argHostname,'p:',2) != 0) $argHostname = 'p:'.$argHostname; |
92 | 92 | |
93 | 93 | $ok = @mysqli_real_connect($this->_connectionID, |
94 | - $argHostname, |
|
95 | - $argUsername, |
|
96 | - $argPassword, |
|
97 | - $argDatabasename, |
|
94 | + $argHostname, |
|
95 | + $argUsername, |
|
96 | + $argPassword, |
|
97 | + $argDatabasename, |
|
98 | 98 | $this->port, |
99 | 99 | $this->socket, |
100 | 100 | $this->clientFlags); |
@@ -121,8 +121,8 @@ discard block |
||
121 | 121 | // In _connect(), check $this->forceNewConnect? |
122 | 122 | function _nconnect($argHostname, $argUsername, $argPassword, $argDatabasename) |
123 | 123 | { |
124 | - $this->forceNewConnect = true; |
|
125 | - return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename); |
|
124 | + $this->forceNewConnect = true; |
|
125 | + return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabasename); |
|
126 | 126 | } |
127 | 127 | |
128 | 128 | /** |
@@ -135,7 +135,7 @@ discard block |
||
135 | 135 | */ |
136 | 136 | function IsConnected() |
137 | 137 | { |
138 | - return $this->_connectionID && @mysqli_ping($this->_connectionID); |
|
138 | + return $this->_connectionID && @mysqli_ping($this->_connectionID); |
|
139 | 139 | } |
140 | 140 | |
141 | 141 | function IfNull( $field, $ifNull ) |
@@ -193,12 +193,12 @@ discard block |
||
193 | 193 | function qstr($s, $magic_quotes = false) |
194 | 194 | { |
195 | 195 | if (!$magic_quotes) { |
196 | - if (PHP_VERSION >= 5 && $this->_connectionID) |
|
197 | - return "'" . mysqli_real_escape_string($this->_connectionID, $s) . "'"; |
|
196 | + if (PHP_VERSION >= 5 && $this->_connectionID) |
|
197 | + return "'" . mysqli_real_escape_string($this->_connectionID, $s) . "'"; |
|
198 | 198 | |
199 | 199 | if ($this->replaceQuote[0] == '\\') |
200 | 200 | $s = adodb_str_replace(array('\\',"\0"),array('\\\\',"\\\0"),$s); |
201 | - return "'".str_replace("'",$this->replaceQuote,$s)."'"; |
|
201 | + return "'".str_replace("'",$this->replaceQuote,$s)."'"; |
|
202 | 202 | } |
203 | 203 | // undo magic quotes for " |
204 | 204 | $s = str_replace('\\"','"',$s); |
@@ -209,7 +209,7 @@ discard block |
||
209 | 209 | { |
210 | 210 | $result = @mysqli_insert_id($this->_connectionID); |
211 | 211 | if ($result == -1){ |
212 | - if ($this->debug) ADOConnection::outp("mysqli_insert_id() failed : " . $this->ErrorMsg()); |
|
212 | + if ($this->debug) ADOConnection::outp("mysqli_insert_id() failed : " . $this->ErrorMsg()); |
|
213 | 213 | } |
214 | 214 | return $result; |
215 | 215 | } |
@@ -219,7 +219,7 @@ discard block |
||
219 | 219 | { |
220 | 220 | $result = @mysqli_affected_rows($this->_connectionID); |
221 | 221 | if ($result == -1) { |
222 | - if ($this->debug) ADOConnection::outp("mysqli_affected_rows() failed : " . $this->ErrorMsg()); |
|
222 | + if ($this->debug) ADOConnection::outp("mysqli_affected_rows() failed : " . $this->ErrorMsg()); |
|
223 | 223 | } |
224 | 224 | return $result; |
225 | 225 | } |
@@ -276,7 +276,7 @@ discard block |
||
276 | 276 | } |
277 | 277 | return $arr; |
278 | 278 | } |
279 | - return $ret; |
|
279 | + return $ret; |
|
280 | 280 | } |
281 | 281 | |
282 | 282 | |
@@ -289,7 +289,7 @@ discard block |
||
289 | 289 | $save = $ADODB_FETCH_MODE; |
290 | 290 | $ADODB_FETCH_MODE = ADODB_FETCH_NUM; |
291 | 291 | if ($this->fetchMode !== FALSE) { |
292 | - $savem = $this->SetFetchMode(FALSE); |
|
292 | + $savem = $this->SetFetchMode(FALSE); |
|
293 | 293 | } |
294 | 294 | |
295 | 295 | // get index details |
@@ -297,37 +297,37 @@ discard block |
||
297 | 297 | |
298 | 298 | // restore fetchmode |
299 | 299 | if (isset($savem)) { |
300 | - $this->SetFetchMode($savem); |
|
300 | + $this->SetFetchMode($savem); |
|
301 | 301 | } |
302 | 302 | $ADODB_FETCH_MODE = $save; |
303 | 303 | |
304 | 304 | if (!is_object($rs)) { |
305 | - return $false; |
|
305 | + return $false; |
|
306 | 306 | } |
307 | 307 | |
308 | 308 | $indexes = array (); |
309 | 309 | |
310 | 310 | // parse index data into array |
311 | 311 | while ($row = $rs->FetchRow()) { |
312 | - if ($primary == FALSE AND $row[2] == 'PRIMARY') { |
|
313 | - continue; |
|
314 | - } |
|
315 | - |
|
316 | - if (!isset($indexes[$row[2]])) { |
|
317 | - $indexes[$row[2]] = array( |
|
318 | - 'unique' => ($row[1] == 0), |
|
319 | - 'columns' => array() |
|
320 | - ); |
|
321 | - } |
|
322 | - |
|
323 | - $indexes[$row[2]]['columns'][$row[3] - 1] = $row[4]. |
|
324 | - (is_numeric($row[7]) ? '('.(int)$row[7].')' : ''); |
|
312 | + if ($primary == FALSE AND $row[2] == 'PRIMARY') { |
|
313 | + continue; |
|
314 | + } |
|
315 | + |
|
316 | + if (!isset($indexes[$row[2]])) { |
|
317 | + $indexes[$row[2]] = array( |
|
318 | + 'unique' => ($row[1] == 0), |
|
319 | + 'columns' => array() |
|
320 | + ); |
|
321 | + } |
|
322 | + |
|
323 | + $indexes[$row[2]]['columns'][$row[3] - 1] = $row[4]. |
|
324 | + (is_numeric($row[7]) ? '('.(int)$row[7].')' : ''); |
|
325 | 325 | } |
326 | 326 | |
327 | 327 | // sort columns by order in the index |
328 | 328 | foreach ( array_keys ($indexes) as $index ) |
329 | 329 | { |
330 | - ksort ($indexes[$index]['columns']); |
|
330 | + ksort ($indexes[$index]['columns']); |
|
331 | 331 | } |
332 | 332 | |
333 | 333 | return $indexes; |
@@ -452,39 +452,39 @@ discard block |
||
452 | 452 | |
453 | 453 | // "Innox - Juan Carlos Gonzalez" <jgonzalez#innox.com.mx> |
454 | 454 | function MetaForeignKeys( $table, $owner = FALSE, $upper = FALSE, $asociative = FALSE ) |
455 | - { |
|
456 | - if ( !empty($owner) ) { |
|
457 | - $table = "$owner.$table"; |
|
458 | - } |
|
459 | - $a_create_table = $this->getRow(sprintf('SHOW CREATE TABLE %s', $table)); |
|
460 | - $create_sql = $a_create_table[1]; |
|
461 | - |
|
462 | - $matches = array(); |
|
463 | - $foreign_keys = array(); |
|
464 | - if ( preg_match_all("/FOREIGN KEY \(`(.*?)`\) REFERENCES `(.*?)` \(`(.*?)`\)/", $create_sql, $matches) ) { |
|
465 | - $num_keys = count($matches[0]); |
|
466 | - for ( $i = 0; $i < $num_keys; $i ++ ) { |
|
467 | - $my_field = explode('`, `', $matches[1][$i]); |
|
468 | - $ref_table = $matches[2][$i]; |
|
469 | - $ref_field = explode('`, `', $matches[3][$i]); |
|
470 | - |
|
471 | - if ( $upper ) { |
|
472 | - $ref_table = strtoupper($ref_table); |
|
473 | - } |
|
474 | - |
|
475 | - $foreign_keys[$ref_table] = array(); |
|
476 | - $num_fields = count($my_field); |
|
477 | - for ( $j = 0; $j < $num_fields; $j ++ ) { |
|
478 | - if ( $asociative ) { |
|
479 | - $foreign_keys[$ref_table][$ref_field[$j]] = $my_field[$j]; |
|
480 | - } else { |
|
481 | - $foreign_keys[$ref_table][] = "{$my_field[$j]}={$ref_field[$j]}"; |
|
482 | - } |
|
483 | - } |
|
484 | - } |
|
485 | - } |
|
486 | - return $foreign_keys; |
|
487 | - } |
|
455 | + { |
|
456 | + if ( !empty($owner) ) { |
|
457 | + $table = "$owner.$table"; |
|
458 | + } |
|
459 | + $a_create_table = $this->getRow(sprintf('SHOW CREATE TABLE %s', $table)); |
|
460 | + $create_sql = $a_create_table[1]; |
|
461 | + |
|
462 | + $matches = array(); |
|
463 | + $foreign_keys = array(); |
|
464 | + if ( preg_match_all("/FOREIGN KEY \(`(.*?)`\) REFERENCES `(.*?)` \(`(.*?)`\)/", $create_sql, $matches) ) { |
|
465 | + $num_keys = count($matches[0]); |
|
466 | + for ( $i = 0; $i < $num_keys; $i ++ ) { |
|
467 | + $my_field = explode('`, `', $matches[1][$i]); |
|
468 | + $ref_table = $matches[2][$i]; |
|
469 | + $ref_field = explode('`, `', $matches[3][$i]); |
|
470 | + |
|
471 | + if ( $upper ) { |
|
472 | + $ref_table = strtoupper($ref_table); |
|
473 | + } |
|
474 | + |
|
475 | + $foreign_keys[$ref_table] = array(); |
|
476 | + $num_fields = count($my_field); |
|
477 | + for ( $j = 0; $j < $num_fields; $j ++ ) { |
|
478 | + if ( $asociative ) { |
|
479 | + $foreign_keys[$ref_table][$ref_field[$j]] = $my_field[$j]; |
|
480 | + } else { |
|
481 | + $foreign_keys[$ref_table][] = "{$my_field[$j]}={$ref_field[$j]}"; |
|
482 | + } |
|
483 | + } |
|
484 | + } |
|
485 | + } |
|
486 | + return $foreign_keys; |
|
487 | + } |
|
488 | 488 | |
489 | 489 | function &MetaColumns($table) |
490 | 490 | { |
@@ -558,24 +558,24 @@ discard block |
||
558 | 558 | function SelectDB($dbName) |
559 | 559 | { |
560 | 560 | // $this->_connectionID = $this->mysqli_resolve_link($this->_connectionID); |
561 | - $this->databaseName = $dbName; |
|
562 | - if ($this->_connectionID) { |
|
563 | - $result = @mysqli_select_db($this->_connectionID, $dbName); |
|
561 | + $this->databaseName = $dbName; |
|
562 | + if ($this->_connectionID) { |
|
563 | + $result = @mysqli_select_db($this->_connectionID, $dbName); |
|
564 | 564 | if (!$result && $this->debug) { |
565 | - ADOConnection::outp("Select of database " . $dbName . " failed. " . $this->ErrorMsg()); |
|
565 | + ADOConnection::outp("Select of database " . $dbName . " failed. " . $this->ErrorMsg()); |
|
566 | 566 | } |
567 | 567 | return $result; |
568 | 568 | } |
569 | - return false; |
|
569 | + return false; |
|
570 | 570 | } |
571 | 571 | |
572 | 572 | // parameters use PostgreSQL convention, not MySQL |
573 | 573 | function &SelectLimit($sql, |
574 | - $nrows = -1, |
|
575 | - $offset = -1, |
|
576 | - $inputarr = false, |
|
577 | - $arg3 = false, |
|
578 | - $secs = 0) |
|
574 | + $nrows = -1, |
|
575 | + $offset = -1, |
|
576 | + $inputarr = false, |
|
577 | + $arg3 = false, |
|
578 | + $secs = 0) |
|
579 | 579 | { |
580 | 580 | $offsetStr = ($offset >= 0) ? "$offset," : ''; |
581 | 581 | if ($nrows < 0) $nrows = '18446744073709551615'; |
@@ -623,8 +623,8 @@ discard block |
||
623 | 623 | return $ret; |
624 | 624 | } |
625 | 625 | if (!$mysql_res = mysqli_query($this->_connectionID, $sql, ($ADODB_COUNTRECS) ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT)) { |
626 | - if ($this->debug) ADOConnection::outp("Query: " . $sql . " failed. " . $this->ErrorMsg()); |
|
627 | - return false; |
|
626 | + if ($this->debug) ADOConnection::outp("Query: " . $sql . " failed. " . $this->ErrorMsg()); |
|
627 | + return false; |
|
628 | 628 | } |
629 | 629 | |
630 | 630 | return $mysql_res; |
@@ -633,27 +633,27 @@ discard block |
||
633 | 633 | /* Returns: the last error message from previous database operation */ |
634 | 634 | function ErrorMsg() |
635 | 635 | { |
636 | - if (empty($this->_connectionID)) |
|
637 | - $this->_errorMsg = @mysqli_connect_error(); |
|
638 | - else |
|
639 | - $this->_errorMsg = @mysqli_error($this->_connectionID); |
|
640 | - return $this->_errorMsg; |
|
636 | + if (empty($this->_connectionID)) |
|
637 | + $this->_errorMsg = @mysqli_connect_error(); |
|
638 | + else |
|
639 | + $this->_errorMsg = @mysqli_error($this->_connectionID); |
|
640 | + return $this->_errorMsg; |
|
641 | 641 | } |
642 | 642 | |
643 | 643 | /* Returns: the last error number from previous database operation */ |
644 | 644 | function ErrorNo() |
645 | 645 | { |
646 | - if (empty($this->_connectionID)) |
|
647 | - return @mysqli_connect_errno(); |
|
648 | - else |
|
649 | - return @mysqli_errno($this->_connectionID); |
|
646 | + if (empty($this->_connectionID)) |
|
647 | + return @mysqli_connect_errno(); |
|
648 | + else |
|
649 | + return @mysqli_errno($this->_connectionID); |
|
650 | 650 | } |
651 | 651 | |
652 | 652 | // returns true or false |
653 | 653 | function _close() |
654 | 654 | { |
655 | - @mysqli_close($this->_connectionID); |
|
656 | - $this->_connectionID = false; |
|
655 | + @mysqli_close($this->_connectionID); |
|
656 | + $this->_connectionID = false; |
|
657 | 657 | } |
658 | 658 | |
659 | 659 | /* |
@@ -673,8 +673,8 @@ discard block |
||
673 | 673 | } |
674 | 674 | |
675 | 675 | /** |
676 | - * @var array $charset2mysql translate www charsets to mysql ones |
|
677 | - */ |
|
676 | + * @var array $charset2mysql translate www charsets to mysql ones |
|
677 | + */ |
|
678 | 678 | var $charset2mysql = array( |
679 | 679 | 'utf-8' => 'utf8', |
680 | 680 | 'iso-8859-1' => 'latin1', |
@@ -742,24 +742,24 @@ discard block |
||
742 | 742 | { |
743 | 743 | if ($mode === false) |
744 | 744 | { |
745 | - global $ADODB_FETCH_MODE; |
|
746 | - $mode = $ADODB_FETCH_MODE; |
|
745 | + global $ADODB_FETCH_MODE; |
|
746 | + $mode = $ADODB_FETCH_MODE; |
|
747 | 747 | } |
748 | 748 | |
749 | 749 | switch ($mode) |
750 | - { |
|
751 | - case ADODB_FETCH_NUM: |
|
752 | - $this->fetchMode = MYSQLI_NUM; |
|
753 | - break; |
|
754 | - case ADODB_FETCH_ASSOC: |
|
755 | - $this->fetchMode = MYSQLI_ASSOC; |
|
756 | - break; |
|
757 | - case ADODB_FETCH_DEFAULT: |
|
758 | - case ADODB_FETCH_BOTH: |
|
759 | - default: |
|
760 | - $this->fetchMode = MYSQLI_BOTH; |
|
761 | - break; |
|
762 | - } |
|
750 | + { |
|
751 | + case ADODB_FETCH_NUM: |
|
752 | + $this->fetchMode = MYSQLI_NUM; |
|
753 | + break; |
|
754 | + case ADODB_FETCH_ASSOC: |
|
755 | + $this->fetchMode = MYSQLI_ASSOC; |
|
756 | + break; |
|
757 | + case ADODB_FETCH_DEFAULT: |
|
758 | + case ADODB_FETCH_BOTH: |
|
759 | + default: |
|
760 | + $this->fetchMode = MYSQLI_BOTH; |
|
761 | + break; |
|
762 | + } |
|
763 | 763 | $this->adodbFetchMode = $mode; |
764 | 764 | $this->ADORecordSet($queryID); |
765 | 765 | } |
@@ -776,7 +776,7 @@ discard block |
||
776 | 776 | { |
777 | 777 | $fieldnr = $fieldOffset; |
778 | 778 | if ($fieldOffset != -1) { |
779 | - $fieldOffset = mysqli_field_seek($this->_queryID, $fieldnr); |
|
779 | + $fieldOffset = mysqli_field_seek($this->_queryID, $fieldnr); |
|
780 | 780 | } |
781 | 781 | $o = mysqli_fetch_field($this->_queryID); |
782 | 782 | return $o; |
@@ -785,7 +785,7 @@ discard block |
||
785 | 785 | function &GetRowAssoc($upper = true) |
786 | 786 | { |
787 | 787 | if ($this->fetchMode == MYSQLI_ASSOC && !$upper) |
788 | - return $this->fields; |
|
788 | + return $this->fields; |
|
789 | 789 | $row =& ADORecordSet::GetRowAssoc($upper); |
790 | 790 | return $row; |
791 | 791 | } |
@@ -794,14 +794,14 @@ discard block |
||
794 | 794 | function Fields($colname) |
795 | 795 | { |
796 | 796 | if ($this->fetchMode != MYSQLI_NUM) |
797 | - return @$this->fields[$colname]; |
|
797 | + return @$this->fields[$colname]; |
|
798 | 798 | |
799 | 799 | if (!$this->bind) { |
800 | - $this->bind = array(); |
|
801 | - for ($i = 0; $i < $this->_numOfFields; $i++) { |
|
802 | - $o = $this->FetchField($i); |
|
803 | - $this->bind[strtoupper($o->name)] = $i; |
|
804 | - } |
|
800 | + $this->bind = array(); |
|
801 | + for ($i = 0; $i < $this->_numOfFields; $i++) { |
|
802 | + $o = $this->FetchField($i); |
|
803 | + $this->bind[strtoupper($o->name)] = $i; |
|
804 | + } |
|
805 | 805 | } |
806 | 806 | return $this->fields[$this->bind[strtoupper($colname)]]; |
807 | 807 | } |
@@ -809,10 +809,10 @@ discard block |
||
809 | 809 | function _seek($row) |
810 | 810 | { |
811 | 811 | if ($this->_numOfRows == 0) |
812 | - return false; |
|
812 | + return false; |
|
813 | 813 | |
814 | 814 | if ($row < 0) |
815 | - return false; |
|
815 | + return false; |
|
816 | 816 | |
817 | 817 | mysqli_data_seek($this->_queryID, $row); |
818 | 818 | $this->EOF = false; |
@@ -877,9 +877,9 @@ discard block |
||
877 | 877 | function MetaType($t, $len = -1, $fieldobj = false) |
878 | 878 | { |
879 | 879 | if (is_object($t)) { |
880 | - $fieldobj = $t; |
|
881 | - $t = $fieldobj->type; |
|
882 | - $len = $fieldobj->max_length; |
|
880 | + $fieldobj = $t; |
|
881 | + $t = $fieldobj->type; |
|
882 | + $len = $fieldobj->max_length; |
|
883 | 883 | } |
884 | 884 | |
885 | 885 |
@@ -61,7 +61,7 @@ discard block |
||
61 | 61 | var $_resultid = false; |
62 | 62 | var $concat_operator='||'; |
63 | 63 | var $metaDatabasesSQL = "select datname from pg_database where datname not in ('template0','template1') order by 1"; |
64 | - var $metaTablesSQL = "select tablename,'T' from pg_tables where tablename not like 'pg\_%' |
|
64 | + var $metaTablesSQL = "select tablename,'T' from pg_tables where tablename not like 'pg\_%' |
|
65 | 65 | and tablename not in ('sql_features', 'sql_implementation_info', 'sql_languages', |
66 | 66 | 'sql_packages', 'sql_sizing', 'sql_sizing_profiles') |
67 | 67 | union |
@@ -226,7 +226,7 @@ discard block |
||
226 | 226 | { |
227 | 227 | $info = $this->ServerInfo(); |
228 | 228 | if ($info['version'] >= 7.3) { |
229 | - $this->metaTablesSQL = "select tablename,'T' from pg_tables where tablename not like 'pg\_%' |
|
229 | + $this->metaTablesSQL = "select tablename,'T' from pg_tables where tablename not like 'pg\_%' |
|
230 | 230 | and schemaname not in ( 'pg_catalog','information_schema') |
231 | 231 | union |
232 | 232 | select viewname,'V' from pg_views where viewname not like 'pg\_%' and schemaname not in ( 'pg_catalog','information_schema') "; |
@@ -443,7 +443,7 @@ discard block |
||
443 | 443 | { |
444 | 444 | |
445 | 445 | if ($blobtype == 'CLOB') { |
446 | - return $this->Execute("UPDATE $table SET $column=" . $this->qstr($val) . " WHERE $where"); |
|
446 | + return $this->Execute("UPDATE $table SET $column=" . $this->qstr($val) . " WHERE $where"); |
|
447 | 447 | } |
448 | 448 | // do not use bind params which uses qstr(), as blobencode() already quotes data |
449 | 449 | return $this->Execute("UPDATE $table SET $column='".$this->BlobEncode($val)."'::bytea WHERE $where"); |
@@ -573,8 +573,8 @@ discard block |
||
573 | 573 | } |
574 | 574 | |
575 | 575 | function &MetaIndexes ($table, $primary = FALSE) |
576 | - { |
|
577 | - global $ADODB_FETCH_MODE; |
|
576 | + { |
|
577 | + global $ADODB_FETCH_MODE; |
|
578 | 578 | |
579 | 579 | // table-name must NOT be quoted, otherwise we will not find any index |
580 | 580 | $table = str_replace($this->nameQuote, '', $table); |
@@ -591,50 +591,50 @@ discard block |
||
591 | 591 | ,pg_namespace n |
592 | 592 | WHERE (c2.relname=\'%s\' or c2.relname=lower(\'%s\')) and c.relnamespace=c2.relnamespace and c.relnamespace=n.oid and n.nspname=\'%s\' AND i.indisprimary=false'; |
593 | 593 | } else { |
594 | - $sql = ' |
|
594 | + $sql = ' |
|
595 | 595 | SELECT c.relname as "Name", i.indisunique as "Unique", i.indkey as "Columns" |
596 | 596 | FROM pg_catalog.pg_class c |
597 | 597 | JOIN pg_catalog.pg_index i ON i.indexrelid=c.oid |
598 | 598 | JOIN pg_catalog.pg_class c2 ON c2.oid=i.indrelid |
599 | 599 | WHERE c2.relname=\'%s\' or c2.relname=lower(\'%s\')'; |
600 | - } |
|
601 | - |
|
602 | - if ($primary == FALSE) { |
|
603 | - $sql .= ' AND i.indisprimary=false;'; |
|
604 | - } |
|
605 | - |
|
606 | - $save = $ADODB_FETCH_MODE; |
|
607 | - $ADODB_FETCH_MODE = ADODB_FETCH_NUM; |
|
608 | - if ($this->fetchMode !== FALSE) { |
|
609 | - $savem = $this->SetFetchMode(FALSE); |
|
610 | - } |
|
611 | - |
|
612 | - $rs = $this->Execute(sprintf($sql,$table,$table,$schema)); |
|
613 | - if (isset($savem)) { |
|
614 | - $this->SetFetchMode($savem); |
|
615 | - } |
|
616 | - $ADODB_FETCH_MODE = $save; |
|
617 | - |
|
618 | - if (!is_object($rs)) { |
|
619 | - $false = false; |
|
600 | + } |
|
601 | + |
|
602 | + if ($primary == FALSE) { |
|
603 | + $sql .= ' AND i.indisprimary=false;'; |
|
604 | + } |
|
605 | + |
|
606 | + $save = $ADODB_FETCH_MODE; |
|
607 | + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; |
|
608 | + if ($this->fetchMode !== FALSE) { |
|
609 | + $savem = $this->SetFetchMode(FALSE); |
|
610 | + } |
|
611 | + |
|
612 | + $rs = $this->Execute(sprintf($sql,$table,$table,$schema)); |
|
613 | + if (isset($savem)) { |
|
614 | + $this->SetFetchMode($savem); |
|
615 | + } |
|
616 | + $ADODB_FETCH_MODE = $save; |
|
617 | + |
|
618 | + if (!is_object($rs)) { |
|
619 | + $false = false; |
|
620 | 620 | return $false; |
621 | - } |
|
622 | - |
|
623 | - $col_names = $this->MetaColumnNames($table,true); |
|
624 | - $indexes = array(); |
|
625 | - while ($row = $rs->FetchRow()) { |
|
626 | - $columns = array(); |
|
627 | - foreach (explode(' ', $row[2]) as $col) { |
|
628 | - $columns[] = $col_names[$col - 1]; |
|
629 | - } |
|
630 | - |
|
631 | - $indexes[$row[0]] = array( |
|
632 | - 'unique' => ($row[1] == 't'), |
|
633 | - 'columns' => $columns |
|
634 | - ); |
|
635 | - } |
|
636 | - return $indexes; |
|
637 | - } |
|
621 | + } |
|
622 | + |
|
623 | + $col_names = $this->MetaColumnNames($table,true); |
|
624 | + $indexes = array(); |
|
625 | + while ($row = $rs->FetchRow()) { |
|
626 | + $columns = array(); |
|
627 | + foreach (explode(' ', $row[2]) as $col) { |
|
628 | + $columns[] = $col_names[$col - 1]; |
|
629 | + } |
|
630 | + |
|
631 | + $indexes[$row[0]] = array( |
|
632 | + 'unique' => ($row[1] == 't'), |
|
633 | + 'columns' => $columns |
|
634 | + ); |
|
635 | + } |
|
636 | + return $indexes; |
|
637 | + } |
|
638 | 638 | |
639 | 639 | // returns true or false |
640 | 640 | // |
@@ -967,7 +967,7 @@ discard block |
||
967 | 967 | { |
968 | 968 | |
969 | 969 | if ($this->_currentRow >= $this->_numOfRows && $this->_numOfRows >= 0) |
970 | - return false; |
|
970 | + return false; |
|
971 | 971 | |
972 | 972 | $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); |
973 | 973 |