4
* Constants are from Binary XML Content Format Specification Version
5
* 1.3, 25 July 2001 found at http://www.wapforum.org
9
* From 7.1 Global Tokens.
12
define('XML_WBXML_GLOBAL_TOKEN_SWITCH_PAGE', 0); // 0x00
13
define('XML_WBXML_GLOBAL_TOKEN_END', 1); // 0x01
14
define('XML_WBXML_GLOBAL_TOKEN_ENTITY', 2); // 0x02
15
define('XML_WBXML_GLOBAL_TOKEN_STR_I', 3); // 0x03
16
define('XML_WBXML_GLOBAL_TOKEN_LITERAL', 4); // 0x04
18
define('XML_WBXML_GLOBAL_TOKEN_EXT_I_0', 64); // 0x40
19
define('XML_WBXML_GLOBAL_TOKEN_EXT_I_1', 65); // 0x41
20
define('XML_WBXML_GLOBAL_TOKEN_EXT_I_2', 66); // 0x42
21
define('XML_WBXML_GLOBAL_TOKEN_PI', 67); // 0x43
22
define('XML_WBXML_GLOBAL_TOKEN_LITERAL_C', 68); // 0x44
24
define('XML_WBXML_GLOBAL_TOKEN_EXT_T_0', 128); // 0x80
25
define('XML_WBXML_GLOBAL_TOKEN_EXT_T_1', 129); // 0x81
26
define('XML_WBXML_GLOBAL_TOKEN_EXT_T_2', 130); // 0x82
27
define('XML_WBXML_GLOBAL_TOKEN_STR_T', 131); // 0x83
28
define('XML_WBXML_GLOBAL_TOKEN_LITERAL_A', 132); // 0x84
30
define('XML_WBXML_GLOBAL_TOKEN_EXT_0', 192); // 0xC0
31
define('XML_WBXML_GLOBAL_TOKEN_EXT_1', 193); // 0xC1
32
define('XML_WBXML_GLOBAL_TOKEN_EXT_2', 194); // 0xC2
33
define('XML_WBXML_GLOBAL_TOKEN_OPAQUE', 195); // 0xC3
34
define('XML_WBXML_GLOBAL_TOKEN_LITERAL_AC', 196); // 0xC4
37
* Not sure where defined.
40
define('DPI_DTD_WML_1_0', '-//WAPFORUM//DTD WML 1.0//EN');
41
define('DPI_DTD_WTA_1_0', '-//WAPFORUM//DTD WTA 1.0//EN');
42
define('DPI_DTD_WML_1_1', '-//WAPFORUM//DTD WML 1.1//EN');
43
define('DPI_DTD_SI_1_1', '-//WAPFORUM//DTD SI 1.1//EN');
44
define('DPI_DTD_SL_1_0', '-//WAPFORUM//DTD SL 1.0//EN');
45
define('DPI_DTD_CO_1_0', '-//WAPFORUM//DTD CO 1.0//EN');
46
define('DPI_DTD_CHANNEL_1_1', '-//WAPFORUM//DTD CHANNEL 1.1//EN');
47
define('DPI_DTD_WML_1_2', '-//WAPFORUM//DTD WML 1.2//EN');
48
define('DPI_DTD_WML_1_3', '-//WAPFORUM//DTD WML 1.3//EN');
49
define('DPI_DTD_PROV_1_0', '-//WAPFORUM//DTD PROV 1.0//EN');
50
define('DPI_DTD_WTA_WML_1_2', '-//WAPFORUM//DTD WTA-WML 1.2//EN');
51
define('DPI_DTD_CHANNEL_1_2', '-//WAPFORUM//DTD CHANNEL 1.2//EN');
52
define('DPI_DTD_SYNCML_1_1', '-//SYNCML//DTD SyncML 1.1//EN');
53
define('DPI_DTD_DEVINF_1_1', '-//SYNCML//DTD DevInf 1.1//EN');
56
* Only default character encodings from J2SE are currently supported.
58
define('CHARSET_US_ASCII', 'US-ASCII');
59
define('CHARSET_ISO_8859_1', 'ISO-8859-1');
60
define('CHARSET_UTF_8', 'UTF-8');
61
define('CHARSET_UTF_16BE', 'UTF-16BE');
62
define('CHARSET_UTF_16LE', 'UTF-16LE');
63
define('CHARSET_UTF_16', 'UTF-16');
66
* Copyright 2003-2005 Anthony Mills <amills@pyramid6.com>
68
* See the enclosed file COPYING for license information (LGPL). If you
69
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
71
* $Horde: framework/XML_WBXML/WBXML.php,v 1.13.12.1 2005/01/03 12:19:22 jan Exp $
78
* Decoding Multi-byte Integers from Section 5.1
80
* Use long because it is unsigned.
82
function MBUInt32ToInt($in, &$pos)
87
$b = ord($in[$pos++]);
88
$val <<= 7; // Bitshift left 7 bits.
90
} while (($b & 128) != 0);
96
* Encoding Multi-byte Integers from Section 5.1
98
function intToMBUInt32(&$out, $i)
100
if ($i > 268435455) {
101
$bytes0 = 0 | XML_WBXML::getBits(0, $i);
102
$bytes1 = 128 | XML_WBXML::getBits(1, $i);
103
$bytes2 = 128 | XML_WBXML::getBits(2, $i);
104
$bytes3 = 128 | XML_WBXML::getBits(3, $i);
105
$bytes4 = 128 | XML_WBXML::getBits(4, $i);
107
$out .= chr($bytes4);
108
$out .= chr($bytes3);
109
$out .= chr($bytes2);
110
$out .= chr($bytes1);
111
$out .= chr($bytes0);
112
} elseif ($i > 2097151) {
113
$bytes0 = 0 | XML_WBXML::getBits(0, $i);
114
$bytes1 = 128 | XML_WBXML::getBits(1, $i);
115
$bytes2 = 128 | XML_WBXML::getBits(2, $i);
116
$bytes3 = 128 | XML_WBXML::getBits(3, $i);
118
$out .= chr($bytes3);
119
$out .= chr($bytes2);
120
$out .= chr($bytes1);
121
$out .= chr($bytes0);
122
} elseif ($i > 16383) {
123
$bytes0 = 0 | XML_WBXML::getBits(0, $i);
124
$bytes1 = 128 | XML_WBXML::getBits(1, $i);
125
$bytes2 = 128 | XML_WBXML::getBits(2, $i);
127
$out .= chr($bytes2);
128
$out .= chr($bytes1);
129
$out .= chr($bytes0);
130
} elseif ($i > 127) {
131
$bytes0 = 0 | XML_WBXML::getBits(0, $i);
132
$bytes1 = 128 | XML_WBXML::getBits(1, $i);
134
$out .= chr($bytes1);
135
$out .= chr($bytes0);
137
$bytes0 = 0 | XML_WBXML::getBits(0, $i);
139
$out .= chr($bytes0);
143
function getBits($num, $l)
147
return $l & 127; // 0x7F
150
return ($l >> 7) & 127; // 0x7F
153
return ($l >> 14) & 127; // 0x7F
156
return ($l >> 21) & 127; // 0x7F
159
return ($l >> 28) & 127; // 0x7F
165
function getDPIString($i)
169
* @var array $_DPIString
171
$DPIString = array(2 => DPI_DTD_WML_1_0,
172
3 => DPI_DTD_WTA_1_0,
173
4 => DPI_DTD_WML_1_1,
177
8 => DPI_DTD_CHANNEL_1_1,
178
9 => DPI_DTD_WML_1_2,
179
10 => DPI_DTD_WML_1_3,
180
11 => DPI_DTD_PROV_1_0,
181
12 => DPI_DTD_WTA_WML_1_2,
182
13 => DPI_DTD_CHANNEL_1_2,
184
// Not all SyncML clients know this, so we
185
// should use the string table.
186
// 0xFD1 => DPI_DTD_SYNCML_1_1,
187
// 0xFD2 => DPI_DTD_DEVINF_1_1,
190
return isset($DPIString[$i]) ? $DPIString[$i] : null;
193
function getDPIInt($dpi)
197
* @var array $_DPIInt
199
$DPIInt = array(DPI_DTD_WML_1_0 => 2,
200
DPI_DTD_WTA_1_0 => 3,
201
DPI_DTD_WML_1_1 => 4,
205
DPI_DTD_CHANNEL_1_1 => 8,
206
DPI_DTD_WML_1_2 => 9,
207
DPI_DTD_WML_1_3 => 10,
208
DPI_DTD_PROV_1_0 => 11,
209
DPI_DTD_WTA_WML_1_2 => 12,
210
DPI_DTD_CHANNEL_1_2 => 13,
212
// Not all SyncML clients know this, so we
213
// should use the string table.
214
// DPI_DTD_SYNCML_1_1 => 0xFD1,
215
// DPI_DTD_DEVINF_1_1 => 0xFD2,
218
return isset($DPIInt[$dpi]) ? $DPIInt[$dpi] : 0;
222
* Returns the character encoding.
223
* only default character encodings from J2SE are supported
224
* from http://www.iana.org/assignments/character-sets
225
* and http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html
227
function getCharsetString($cs)
230
* From http://www.iana.org/assignments/character-sets
231
* @var array $_charsetString
233
$charsetString = array(3 => 'US-ASCII',
240
return isset($charsetString[$cs]) ? $charsetString[$cs] : null;
244
* Returns the character encoding.
246
* Only default character encodings from J2SE are supported.
248
* From http://www.iana.org/assignments/character-sets and
249
* http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/Charset.html
251
function getCharsetInt($cs)
254
* From http://www.iana.org/assignments/character-sets
255
* @var array $_charsetInt
257
$charsetInt = array('US-ASCII' => 3,
264
return isset($charsetInt[$cs]) ? $charsetInt[$cs] : null;
272
class XML_WBXML_HashTable {
283
return isset($this->_h[$k]) ? $this->_h[$k] : null;