Initial Kohana install
[speedfreak] / Server / system / core / utf8 / ord.php
1 <?php defined('SYSPATH') OR die('No direct access allowed.');
2 /**
3  * utf8::ord
4  *
5  * @package    Core
6  * @author     Kohana Team
7  * @copyright  (c) 2007 Kohana Team
8  * @copyright  (c) 2005 Harry Fuecks
9  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt
10  */
11 function _ord($chr)
12 {
13         $ord0 = ord($chr);
14
15         if ($ord0 >= 0 AND $ord0 <= 127)
16         {
17                 return $ord0;
18         }
19
20         if ( ! isset($chr[1]))
21         {
22                 trigger_error('Short sequence - at least 2 bytes expected, only 1 seen', E_USER_WARNING);
23                 return FALSE;
24         }
25
26         $ord1 = ord($chr[1]);
27
28         if ($ord0 >= 192 AND $ord0 <= 223)
29         {
30                 return ($ord0 - 192) * 64 + ($ord1 - 128);
31         }
32
33         if ( ! isset($chr[2]))
34         {
35                 trigger_error('Short sequence - at least 3 bytes expected, only 2 seen', E_USER_WARNING);
36                 return FALSE;
37         }
38
39         $ord2 = ord($chr[2]);
40
41         if ($ord0 >= 224 AND $ord0 <= 239)
42         {
43                 return ($ord0 - 224) * 4096 + ($ord1 - 128) * 64 + ($ord2 - 128);
44         }
45
46         if ( ! isset($chr[3]))
47         {
48                 trigger_error('Short sequence - at least 4 bytes expected, only 3 seen', E_USER_WARNING);
49                 return FALSE;
50         }
51
52         $ord3 = ord($chr[3]);
53
54         if ($ord0 >= 240 AND $ord0 <= 247)
55         {
56                 return ($ord0 - 240) * 262144 + ($ord1 - 128) * 4096 + ($ord2-128) * 64 + ($ord3 - 128);
57         }
58
59         if ( ! isset($chr[4]))
60         {
61                 trigger_error('Short sequence - at least 5 bytes expected, only 4 seen', E_USER_WARNING);
62                 return FALSE;
63         }
64
65         $ord4 = ord($chr[4]);
66
67         if ($ord0 >= 248 AND $ord0 <= 251)
68         {
69                 return ($ord0 - 248) * 16777216 + ($ord1-128) * 262144 + ($ord2 - 128) * 4096 + ($ord3 - 128) * 64 + ($ord4 - 128);
70         }
71
72         if ( ! isset($chr[5]))
73         {
74                 trigger_error('Short sequence - at least 6 bytes expected, only 5 seen', E_USER_WARNING);
75                 return FALSE;
76         }
77
78         if ($ord0 >= 252 AND $ord0 <= 253)
79         {
80                 return ($ord0 - 252) * 1073741824 + ($ord1 - 128) * 16777216 + ($ord2 - 128) * 262144 + ($ord3 - 128) * 4096 + ($ord4 - 128) * 64 + (ord($chr[5]) - 128);
81         }
82
83         if ($ord0 >= 254 AND $ord0 <= 255)
84         {
85                 trigger_error('Invalid UTF-8 with surrogate ordinal '.$ord0, E_USER_WARNING);
86                 return FALSE;
87         }
88 }