diff options
Diffstat (limited to 'inc/3rdparty/simplepie/SimplePie/XML')
-rw-r--r-- | inc/3rdparty/simplepie/SimplePie/XML/Declaration/Parser.php | 362 |
1 files changed, 362 insertions, 0 deletions
diff --git a/inc/3rdparty/simplepie/SimplePie/XML/Declaration/Parser.php b/inc/3rdparty/simplepie/SimplePie/XML/Declaration/Parser.php new file mode 100644 index 00000000..b7ebc6f5 --- /dev/null +++ b/inc/3rdparty/simplepie/SimplePie/XML/Declaration/Parser.php | |||
@@ -0,0 +1,362 @@ | |||
1 | <?php | ||
2 | /** | ||
3 | * SimplePie | ||
4 | * | ||
5 | * A PHP-Based RSS and Atom Feed Framework. | ||
6 | * Takes the hard work out of managing a complete RSS/Atom solution. | ||
7 | * | ||
8 | * Copyright (c) 2004-2009, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors | ||
9 | * All rights reserved. | ||
10 | * | ||
11 | * Redistribution and use in source and binary forms, with or without modification, are | ||
12 | * permitted provided that the following conditions are met: | ||
13 | * | ||
14 | * * Redistributions of source code must retain the above copyright notice, this list of | ||
15 | * conditions and the following disclaimer. | ||
16 | * | ||
17 | * * Redistributions in binary form must reproduce the above copyright notice, this list | ||
18 | * of conditions and the following disclaimer in the documentation and/or other materials | ||
19 | * provided with the distribution. | ||
20 | * | ||
21 | * * Neither the name of the SimplePie Team nor the names of its contributors may be used | ||
22 | * to endorse or promote products derived from this software without specific prior | ||
23 | * written permission. | ||
24 | * | ||
25 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS | ||
26 | * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY | ||
27 | * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS | ||
28 | * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
29 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||
30 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
31 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||
32 | * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
33 | * POSSIBILITY OF SUCH DAMAGE. | ||
34 | * | ||
35 | * @package SimplePie | ||
36 | * @version 1.3-dev | ||
37 | * @copyright 2004-2010 Ryan Parman, Geoffrey Sneddon, Ryan McCue | ||
38 | * @author Ryan Parman | ||
39 | * @author Geoffrey Sneddon | ||
40 | * @author Ryan McCue | ||
41 | * @link http://simplepie.org/ SimplePie | ||
42 | * @license http://www.opensource.org/licenses/bsd-license.php BSD License | ||
43 | * @todo phpDoc comments | ||
44 | */ | ||
45 | |||
46 | |||
47 | /** | ||
48 | * Parses the XML Declaration | ||
49 | * | ||
50 | * @package SimplePie | ||
51 | */ | ||
52 | class SimplePie_XML_Declaration_Parser | ||
53 | { | ||
54 | /** | ||
55 | * XML Version | ||
56 | * | ||
57 | * @access public | ||
58 | * @var string | ||
59 | */ | ||
60 | var $version = '1.0'; | ||
61 | |||
62 | /** | ||
63 | * Encoding | ||
64 | * | ||
65 | * @access public | ||
66 | * @var string | ||
67 | */ | ||
68 | var $encoding = 'UTF-8'; | ||
69 | |||
70 | /** | ||
71 | * Standalone | ||
72 | * | ||
73 | * @access public | ||
74 | * @var bool | ||
75 | */ | ||
76 | var $standalone = false; | ||
77 | |||
78 | /** | ||
79 | * Current state of the state machine | ||
80 | * | ||
81 | * @access private | ||
82 | * @var string | ||
83 | */ | ||
84 | var $state = 'before_version_name'; | ||
85 | |||
86 | /** | ||
87 | * Input data | ||
88 | * | ||
89 | * @access private | ||
90 | * @var string | ||
91 | */ | ||
92 | var $data = ''; | ||
93 | |||
94 | /** | ||
95 | * Input data length (to avoid calling strlen() everytime this is needed) | ||
96 | * | ||
97 | * @access private | ||
98 | * @var int | ||
99 | */ | ||
100 | var $data_length = 0; | ||
101 | |||
102 | /** | ||
103 | * Current position of the pointer | ||
104 | * | ||
105 | * @var int | ||
106 | * @access private | ||
107 | */ | ||
108 | var $position = 0; | ||
109 | |||
110 | /** | ||
111 | * Create an instance of the class with the input data | ||
112 | * | ||
113 | * @access public | ||
114 | * @param string $data Input data | ||
115 | */ | ||
116 | public function __construct($data) | ||
117 | { | ||
118 | $this->data = $data; | ||
119 | $this->data_length = strlen($this->data); | ||
120 | } | ||
121 | |||
122 | /** | ||
123 | * Parse the input data | ||
124 | * | ||
125 | * @access public | ||
126 | * @return bool true on success, false on failure | ||
127 | */ | ||
128 | public function parse() | ||
129 | { | ||
130 | while ($this->state && $this->state !== 'emit' && $this->has_data()) | ||
131 | { | ||
132 | $state = $this->state; | ||
133 | $this->$state(); | ||
134 | } | ||
135 | $this->data = ''; | ||
136 | if ($this->state === 'emit') | ||
137 | { | ||
138 | return true; | ||
139 | } | ||
140 | else | ||
141 | { | ||
142 | $this->version = ''; | ||
143 | $this->encoding = ''; | ||
144 | $this->standalone = ''; | ||
145 | return false; | ||
146 | } | ||
147 | } | ||
148 | |||
149 | /** | ||
150 | * Check whether there is data beyond the pointer | ||
151 | * | ||
152 | * @access private | ||
153 | * @return bool true if there is further data, false if not | ||
154 | */ | ||
155 | public function has_data() | ||
156 | { | ||
157 | return (bool) ($this->position < $this->data_length); | ||
158 | } | ||
159 | |||
160 | /** | ||
161 | * Advance past any whitespace | ||
162 | * | ||
163 | * @return int Number of whitespace characters passed | ||
164 | */ | ||
165 | public function skip_whitespace() | ||
166 | { | ||
167 | $whitespace = strspn($this->data, "\x09\x0A\x0D\x20", $this->position); | ||
168 | $this->position += $whitespace; | ||
169 | return $whitespace; | ||
170 | } | ||
171 | |||
172 | /** | ||
173 | * Read value | ||
174 | */ | ||
175 | public function get_value() | ||
176 | { | ||
177 | $quote = substr($this->data, $this->position, 1); | ||
178 | if ($quote === '"' || $quote === "'") | ||
179 | { | ||
180 | $this->position++; | ||
181 | $len = strcspn($this->data, $quote, $this->position); | ||
182 | if ($this->has_data()) | ||
183 | { | ||
184 | $value = substr($this->data, $this->position, $len); | ||
185 | $this->position += $len + 1; | ||
186 | return $value; | ||
187 | } | ||
188 | } | ||
189 | return false; | ||
190 | } | ||
191 | |||
192 | public function before_version_name() | ||
193 | { | ||
194 | if ($this->skip_whitespace()) | ||
195 | { | ||
196 | $this->state = 'version_name'; | ||
197 | } | ||
198 | else | ||
199 | { | ||
200 | $this->state = false; | ||
201 | } | ||
202 | } | ||
203 | |||
204 | public function version_name() | ||
205 | { | ||
206 | if (substr($this->data, $this->position, 7) === 'version') | ||
207 | { | ||
208 | $this->position += 7; | ||
209 | $this->skip_whitespace(); | ||
210 | $this->state = 'version_equals'; | ||
211 | } | ||
212 | else | ||
213 | { | ||
214 | $this->state = false; | ||
215 | } | ||
216 | } | ||
217 | |||
218 | public function version_equals() | ||
219 | { | ||
220 | if (substr($this->data, $this->position, 1) === '=') | ||
221 | { | ||
222 | $this->position++; | ||
223 | $this->skip_whitespace(); | ||
224 | $this->state = 'version_value'; | ||
225 | } | ||
226 | else | ||
227 | { | ||
228 | $this->state = false; | ||
229 | } | ||
230 | } | ||
231 | |||
232 | public function version_value() | ||
233 | { | ||
234 | if ($this->version = $this->get_value()) | ||
235 | { | ||
236 | $this->skip_whitespace(); | ||
237 | if ($this->has_data()) | ||
238 | { | ||
239 | $this->state = 'encoding_name'; | ||
240 | } | ||
241 | else | ||
242 | { | ||
243 | $this->state = 'emit'; | ||
244 | } | ||
245 | } | ||
246 | else | ||
247 | { | ||
248 | $this->state = false; | ||
249 | } | ||
250 | } | ||
251 | |||
252 | public function encoding_name() | ||
253 | { | ||
254 | if (substr($this->data, $this->position, 8) === 'encoding') | ||
255 | { | ||
256 | $this->position += 8; | ||
257 | $this->skip_whitespace(); | ||
258 | $this->state = 'encoding_equals'; | ||
259 | } | ||
260 | else | ||
261 | { | ||
262 | $this->state = 'standalone_name'; | ||
263 | } | ||
264 | } | ||
265 | |||
266 | public function encoding_equals() | ||
267 | { | ||
268 | if (substr($this->data, $this->position, 1) === '=') | ||
269 | { | ||
270 | $this->position++; | ||
271 | $this->skip_whitespace(); | ||
272 | $this->state = 'encoding_value'; | ||
273 | } | ||
274 | else | ||
275 | { | ||
276 | $this->state = false; | ||
277 | } | ||
278 | } | ||
279 | |||
280 | public function encoding_value() | ||
281 | { | ||
282 | if ($this->encoding = $this->get_value()) | ||
283 | { | ||
284 | $this->skip_whitespace(); | ||
285 | if ($this->has_data()) | ||
286 | { | ||
287 | $this->state = 'standalone_name'; | ||
288 | } | ||
289 | else | ||
290 | { | ||
291 | $this->state = 'emit'; | ||
292 | } | ||
293 | } | ||
294 | else | ||
295 | { | ||
296 | $this->state = false; | ||
297 | } | ||
298 | } | ||
299 | |||
300 | public function standalone_name() | ||
301 | { | ||
302 | if (substr($this->data, $this->position, 10) === 'standalone') | ||
303 | { | ||
304 | $this->position += 10; | ||
305 | $this->skip_whitespace(); | ||
306 | $this->state = 'standalone_equals'; | ||
307 | } | ||
308 | else | ||
309 | { | ||
310 | $this->state = false; | ||
311 | } | ||
312 | } | ||
313 | |||
314 | public function standalone_equals() | ||
315 | { | ||
316 | if (substr($this->data, $this->position, 1) === '=') | ||
317 | { | ||
318 | $this->position++; | ||
319 | $this->skip_whitespace(); | ||
320 | $this->state = 'standalone_value'; | ||
321 | } | ||
322 | else | ||
323 | { | ||
324 | $this->state = false; | ||
325 | } | ||
326 | } | ||
327 | |||
328 | public function standalone_value() | ||
329 | { | ||
330 | if ($standalone = $this->get_value()) | ||
331 | { | ||
332 | switch ($standalone) | ||
333 | { | ||
334 | case 'yes': | ||
335 | $this->standalone = true; | ||
336 | break; | ||
337 | |||
338 | case 'no': | ||
339 | $this->standalone = false; | ||
340 | break; | ||
341 | |||
342 | default: | ||
343 | $this->state = false; | ||
344 | return; | ||
345 | } | ||
346 | |||
347 | $this->skip_whitespace(); | ||
348 | if ($this->has_data()) | ||
349 | { | ||
350 | $this->state = false; | ||
351 | } | ||
352 | else | ||
353 | { | ||
354 | $this->state = 'emit'; | ||
355 | } | ||
356 | } | ||
357 | else | ||
358 | { | ||
359 | $this->state = false; | ||
360 | } | ||
361 | } | ||
362 | } | ||