PluginProbe
FeedWordPress / 2020.0818
FeedWordPress v2020.0818
trunk 0.8 0.9 0.91 0.95 0.96 0.97 0.98 0.981 0.99 0.991 0.992 0.993 2008.1030 2008.1101 2008.1105 2008.1214 2009.0612 2009.0613 2009.0618 2009.0707 2009.1111 2009.1112 2010.0127 2010.0528 All 65 releases
feedwordpress / extend / SimplePie / default / feedwordpie_parser.class.php

feedwordpie_parser.class.php in FeedWordPress 2020.0818, at extend/SimplePie/default/feedwordpie_parser.class.php

563 lines 22.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 class FeedWordPie_Parser extends SimplePie_Parser {
3 function reset_parser (&$xml) {
4 // reset members
5 $this->namespace = array('');
6 $this->element = array('');
7 $this->xml_base = array('');
8 $this->xml_base_explicit = array(false);
9 $this->xml_lang = array('');
10 $this->data = array();
11 $this->datas = array(array());
12 $this->current_xhtml_construct = -1;
13 $this->xmlns_stack = array();
14 $this->xmlns_current = array();
15
16 // reset libxml parser
17 xml_parser_free($xml);
18
19 $xml = xml_parser_create_ns($this->encoding, $this->separator);
20 xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1);
21 xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0);
22 xml_set_object($xml, $this);
23 xml_set_character_data_handler($xml, 'cdata');
24 xml_set_element_handler($xml, 'tag_open', 'tag_close');
25 xml_set_start_namespace_decl_handler($xml, 'start_xmlns');
26 }
27
28 public function parse (&$data, $encoding, $url = '')
29 {
30 $data = apply_filters('feedwordpress_parser_parse', $data, $encoding, $this, $url);
31
32 if (class_exists('DOMXpath') && function_exists('Mf2\parse')) {
33 $doc = new DOMDocument();
34 @$doc->loadHTML($data);
35 $xpath = new DOMXpath($doc);
36 // Check for both h-feed and h-entry, as both a feed with no entries
37 // and a list of entries without an h-feed wrapper are both valid.
38 $query = '//*[contains(concat(" ", @class, " "), " h-feed ") or '.
39 'contains(concat(" ", @class, " "), " h-entry ")]';
40 $result = $xpath->query($query);
41 if ($result->length !== 0) {
42 return $this->parse_microformats($data, $url);
43 }
44 }
45
46 // Use UTF-8 if we get passed US-ASCII, as every US-ASCII character is a UTF-8 character
47 if (strtoupper($encoding) === 'US-ASCII')
48 {
49 $this->encoding = 'UTF-8';
50 }
51 else
52 {
53 $this->encoding = $encoding;
54 }
55
56 // Strip BOM:
57 // UTF-32 Big Endian BOM
58 if (substr($data, 0, 4) === "\x00\x00\xFE\xFF")
59 {
60 $data = substr($data, 4);
61 }
62 // UTF-32 Little Endian BOM
63 elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00")
64 {
65 $data = substr($data, 4);
66 }
67 // UTF-16 Big Endian BOM
68 elseif (substr($data, 0, 2) === "\xFE\xFF")
69 {
70 $data = substr($data, 2);
71 }
72 // UTF-16 Little Endian BOM
73 elseif (substr($data, 0, 2) === "\xFF\xFE")
74 {
75 $data = substr($data, 2);
76 }
77 // UTF-8 BOM
78 elseif (substr($data, 0, 3) === "\xEF\xBB\xBF")
79 {
80 $data = substr($data, 3);
81 }
82
83 if (substr($data, 0, 5) === '<?xml' && strspn(substr($data, 5, 1), "\x09\x0A\x0D\x20") && ($pos = strpos($data, '?>')) !== false)
84 {
85 $declaration = $this->registry->create('XML_Declaration_Parser', array(substr($data, 5, $pos - 5)));
86 if ($declaration->parse())
87 {
88 $data = substr($data, $pos + 2);
89 $data = '<?xml version="' . $declaration->version . '" encoding="' . $encoding . '" standalone="' . (($declaration->standalone) ? 'yes' : 'no') . '"?>' ."\n". $this->declare_html_entities() . $data;
90 }
91 else
92 {
93 $this->error_string = 'SimplePie bug! Please report this!';
94 return false;
95 }
96 }
97
98 $return = true;
99
100 static $xml_is_sane = null;
101 if ($xml_is_sane === null)
102 {
103 $parser_check = xml_parser_create();
104 xml_parse_into_struct($parser_check, '<foo>&amp;</foo>', $values);
105 xml_parser_free($parser_check);
106 $xml_is_sane = isset($values[0]['value']);
107 }
108
109 // Create the parser
110 if ($xml_is_sane)
111 {
112 $xml = xml_parser_create_ns($this->encoding, $this->separator);
113 xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1);
114 xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0);
115 xml_set_object($xml, $this);
116 xml_set_character_data_handler($xml, 'cdata');
117 xml_set_element_handler($xml, 'tag_open', 'tag_close');
118
119 // Parse!
120 $results = $this->do_xml_parse_attempt($xml, $data);
121 $parseResults = $results[0];
122 $data = $results[1];
123
124 if (!$parseResults) {
125 $this->error_code = xml_get_error_code($xml);
126 $this->error_string = xml_error_string($this->error_code);
127 $return = false;
128 }
129 $this->current_line = xml_get_current_line_number($xml);
130 $this->current_column = xml_get_current_column_number($xml);
131 $this->current_byte = xml_get_current_byte_index($xml);
132 xml_parser_free($xml);
133 return $return;
134 }
135
136 libxml_clear_errors();
137 $xml = new XMLReader();
138 $xml->xml($data);
139 while (@$xml->read())
140 {
141 switch ($xml->nodeType)
142 {
143
144 case constant('XMLReader::END_ELEMENT'):
145 if ($xml->namespaceURI !== '')
146 {
147 $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
148 }
149 else
150 {
151 $tagName = $xml->localName;
152 }
153 $this->tag_close(null, $tagName);
154 break;
155 case constant('XMLReader::ELEMENT'):
156 $empty = $xml->isEmptyElement;
157 if ($xml->namespaceURI !== '')
158 {
159 $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
160 }
161 else
162 {
163 $tagName = $xml->localName;
164 }
165 $attributes = array();
166 while ($xml->moveToNextAttribute())
167 {
168 if ($xml->namespaceURI !== '')
169 {
170 $attrName = $xml->namespaceURI . $this->separator . $xml->localName;
171 }
172 else
173 {
174 $attrName = $xml->localName;
175 }
176 $attributes[$attrName] = $xml->value;
177 }
178
179 $this->do_scan_attributes_namespaces($attributes);
180
181 $this->tag_open(null, $tagName, $attributes);
182 if ($empty)
183 {
184 $this->tag_close(null, $tagName);
185 }
186 break;
187 case constant('XMLReader::TEXT'):
188
189 case constant('XMLReader::CDATA'):
190 $this->cdata(null, $xml->value);
191 break;
192 }
193 }
194 if ($error = libxml_get_last_error())
195 {
196 $this->error_code = $error->code;
197 $this->error_string = $error->message;
198 $this->current_line = $error->line;
199 $this->current_column = $error->column;
200 return false;
201 }
202
203 return true;
204 } /* FeedWordPie_Parser::parse() */
205
206 public function do_xml_parse_attempt ($xml, $data) {
207 xml_set_start_namespace_decl_handler($xml, 'start_xmlns');
208
209 // Parse!
210 $parseResults = xml_parse($xml, $data, true);
211 $endOfJunk = strpos($data, '<?xml');
212 if (!$parseResults and $endOfJunk > 0) :
213 // There is some junk before the feed prolog. Try to get rid of it.
214 $data = substr($data, $endOfJunk);
215 $data = trim($data);
216 $this->reset_parser($xml);
217
218 $parseResults = xml_parse($xml, $data, true);
219 endif;
220
221 $badEntity = (xml_get_error_code($xml) == 26);
222 if (!$parseResults and $badEntity) :
223 // There was an entity that libxml couldn't understand.
224 // Chances are, it was a stray HTML entity. So let's try
225 // converting all the named HTML entities to numeric XML
226 // entities and starting over.
227 $data = $this->html_convert_entities($data);
228 $this->reset_parser($xml);
229
230 $parseResults = xml_parse($xml, $data, true);
231 endif;
232
233 $result = array(
234 $parseResults,
235 $data
236 );
237 return $result;
238
239 }
240
241 public function do_scan_attributes_namespaces ($attributes) {
242 foreach ($attributes as $attr => $value) :
243 list($ns, $local) = $this->split_ns($attr);
244 if ($ns=='http://www.w3.org/2000/xmlns/') :
245 if ('xmlns' == $local) : $local = false; endif;
246 $this->start_xmlns(null, $local, $value);
247 endif;
248 endforeach;
249 }
250
251 var $xmlns_stack = array();
252 var $xmlns_current = array();
253 function tag_open ($parser, $tag, $attributes) {
254 $ret = parent::tag_open($parser, $tag, $attributes);
255 if ($this->current_xhtml_construct < 0) :
256 $this->data['xmlns'] = $this->xmlns_current;
257 $this->xmlns_stack[] = $this->xmlns_current;
258 endif;
259 return $ret;
260 }
261
262 function tag_close($parser, $tag) {
263 if ($this->current_xhtml_construct < 0) :
264 $this->xmlns_current = array_pop($this->xmlns_stack);
265 endif;
266 $ret = parent::tag_close($parser, $tag);
267 return $ret;
268 }
269
270 function start_xmlns ($parser, $prefix, $uri) {
271 if (!$prefix) :
272 $prefix = '';
273 endif;
274 if ($this->current_xhtml_construct < 0) :
275 $this->xmlns_current[$prefix] = $uri;
276 endif;
277
278 return true;
279 } /* FeedWordPie_Parser::start_xmlns() */
280
281 /* html_convert_entities($string) -- convert named HTML entities to
282 * XML-compatible numeric entities. Adapted from code by @inanimatt:
283 * https://gist.github.com/inanimatt/879249
284 */
285 public function html_convert_entities($string) {
286 return preg_replace_callback('/&([a-zA-Z][a-zA-Z0-9]+);/S',
287 array($this, 'convert_entity'), $string);
288 }
289
290 /* Swap HTML named entity with its numeric equivalent. If the entity
291 * isn't in the lookup table, this function returns a blank, which
292 * destroys the character in the output - this is probably the
293 * desired behaviour when producing XML. Adapted from code by @inanimatt:
294 * https://gist.github.com/inanimatt/879249
295 */
296 public function convert_entity($matches) {
297 static $table = array(
298 'quot' => '&#34;',
299 'amp' => '&#38;',
300 'lt' => '&#60;',
301 'gt' => '&#62;',
302 'OElig' => '&#338;',
303 'oelig' => '&#339;',
304 'Scaron' => '&#352;',
305 'scaron' => '&#353;',
306 'Yuml' => '&#376;',
307 'circ' => '&#710;',
308 'tilde' => '&#732;',
309 'ensp' => '&#8194;',
310 'emsp' => '&#8195;',
311 'thinsp' => '&#8201;',
312 'zwnj' => '&#8204;',
313 'zwj' => '&#8205;',
314 'lrm' => '&#8206;',
315 'rlm' => '&#8207;',
316 'ndash' => '&#8211;',
317 'mdash' => '&#8212;',
318 'lsquo' => '&#8216;',
319 'rsquo' => '&#8217;',
320 'sbquo' => '&#8218;',
321 'ldquo' => '&#8220;',
322 'rdquo' => '&#8221;',
323 'bdquo' => '&#8222;',
324 'dagger' => '&#8224;',
325 'Dagger' => '&#8225;',
326 'permil' => '&#8240;',
327 'lsaquo' => '&#8249;',
328 'rsaquo' => '&#8250;',
329 'euro' => '&#8364;',
330 'fnof' => '&#402;',
331 'Alpha' => '&#913;',
332 'Beta' => '&#914;',
333 'Gamma' => '&#915;',
334 'Delta' => '&#916;',
335 'Epsilon' => '&#917;',
336 'Zeta' => '&#918;',
337 'Eta' => '&#919;',
338 'Theta' => '&#920;',
339 'Iota' => '&#921;',
340 'Kappa' => '&#922;',
341 'Lambda' => '&#923;',
342 'Mu' => '&#924;',
343 'Nu' => '&#925;',
344 'Xi' => '&#926;',
345 'Omicron' => '&#927;',
346 'Pi' => '&#928;',
347 'Rho' => '&#929;',
348 'Sigma' => '&#931;',
349 'Tau' => '&#932;',
350 'Upsilon' => '&#933;',
351 'Phi' => '&#934;',
352 'Chi' => '&#935;',
353 'Psi' => '&#936;',
354 'Omega' => '&#937;',
355 'alpha' => '&#945;',
356 'beta' => '&#946;',
357 'gamma' => '&#947;',
358 'delta' => '&#948;',
359 'epsilon' => '&#949;',
360 'zeta' => '&#950;',
361 'eta' => '&#951;',
362 'theta' => '&#952;',
363 'iota' => '&#953;',
364 'kappa' => '&#954;',
365 'lambda' => '&#955;',
366 'mu' => '&#956;',
367 'nu' => '&#957;',
368 'xi' => '&#958;',
369 'omicron' => '&#959;',
370 'pi' => '&#960;',
371 'rho' => '&#961;',
372 'sigmaf' => '&#962;',
373 'sigma' => '&#963;',
374 'tau' => '&#964;',
375 'upsilon' => '&#965;',
376 'phi' => '&#966;',
377 'chi' => '&#967;',
378 'psi' => '&#968;',
379 'omega' => '&#969;',
380 'thetasym' => '&#977;',
381 'upsih' => '&#978;',
382 'piv' => '&#982;',
383 'bull' => '&#8226;',
384 'hellip' => '&#8230;',
385 'prime' => '&#8242;',
386 'Prime' => '&#8243;',
387 'oline' => '&#8254;',
388 'frasl' => '&#8260;',
389 'weierp' => '&#8472;',
390 'image' => '&#8465;',
391 'real' => '&#8476;',
392 'trade' => '&#8482;',
393 'alefsym' => '&#8501;',
394 'larr' => '&#8592;',
395 'uarr' => '&#8593;',
396 'rarr' => '&#8594;',
397 'darr' => '&#8595;',
398 'harr' => '&#8596;',
399 'crarr' => '&#8629;',
400 'lArr' => '&#8656;',
401 'uArr' => '&#8657;',
402 'rArr' => '&#8658;',
403 'dArr' => '&#8659;',
404 'hArr' => '&#8660;',
405 'forall' => '&#8704;',
406 'part' => '&#8706;',
407 'exist' => '&#8707;',
408 'empty' => '&#8709;',
409 'nabla' => '&#8711;',
410 'isin' => '&#8712;',
411 'notin' => '&#8713;',
412 'ni' => '&#8715;',
413 'prod' => '&#8719;',
414 'sum' => '&#8721;',
415 'minus' => '&#8722;',
416 'lowast' => '&#8727;',
417 'radic' => '&#8730;',
418 'prop' => '&#8733;',
419 'infin' => '&#8734;',
420 'ang' => '&#8736;',
421 'and' => '&#8743;',
422 'or' => '&#8744;',
423 'cap' => '&#8745;',
424 'cup' => '&#8746;',
425 'int' => '&#8747;',
426 'there4' => '&#8756;',
427 'sim' => '&#8764;',
428 'cong' => '&#8773;',
429 'asymp' => '&#8776;',
430 'ne' => '&#8800;',
431 'equiv' => '&#8801;',
432 'le' => '&#8804;',
433 'ge' => '&#8805;',
434 'sub' => '&#8834;',
435 'sup' => '&#8835;',
436 'nsub' => '&#8836;',
437 'sube' => '&#8838;',
438 'supe' => '&#8839;',
439 'oplus' => '&#8853;',
440 'otimes' => '&#8855;',
441 'perp' => '&#8869;',
442 'sdot' => '&#8901;',
443 'lceil' => '&#8968;',
444 'rceil' => '&#8969;',
445 'lfloor' => '&#8970;',
446 'rfloor' => '&#8971;',
447 'lang' => '&#9001;',
448 'rang' => '&#9002;',
449 'loz' => '&#9674;',
450 'spades' => '&#9824;',
451 'clubs' => '&#9827;',
452 'hearts' => '&#9829;',
453 'diams' => '&#9830;',
454 'nbsp' => '&#160;',
455 'iexcl' => '&#161;',
456 'cent' => '&#162;',
457 'pound' => '&#163;',
458 'curren' => '&#164;',
459 'yen' => '&#165;',
460 'brvbar' => '&#166;',
461 'sect' => '&#167;',
462 'uml' => '&#168;',
463 'copy' => '&#169;',
464 'ordf' => '&#170;',
465 'laquo' => '&#171;',
466 'not' => '&#172;',
467 'shy' => '&#173;',
468 'reg' => '&#174;',
469 'macr' => '&#175;',
470 'deg' => '&#176;',
471 'plusmn' => '&#177;',
472 'sup2' => '&#178;',
473 'sup3' => '&#179;',
474 'acute' => '&#180;',
475 'micro' => '&#181;',
476 'para' => '&#182;',
477 'middot' => '&#183;',
478 'cedil' => '&#184;',
479 'sup1' => '&#185;',
480 'ordm' => '&#186;',
481 'raquo' => '&#187;',
482 'frac14' => '&#188;',
483 'frac12' => '&#189;',
484 'frac34' => '&#190;',
485 'iquest' => '&#191;',
486 'Agrave' => '&#192;',
487 'Aacute' => '&#193;',
488 'Acirc' => '&#194;',
489 'Atilde' => '&#195;',
490 'Auml' => '&#196;',
491 'Aring' => '&#197;',
492 'AElig' => '&#198;',
493 'Ccedil' => '&#199;',
494 'Egrave' => '&#200;',
495 'Eacute' => '&#201;',
496 'Ecirc' => '&#202;',
497 'Euml' => '&#203;',
498 'Igrave' => '&#204;',
499 'Iacute' => '&#205;',
500 'Icirc' => '&#206;',
501 'Iuml' => '&#207;',
502 'ETH' => '&#208;',
503 'Ntilde' => '&#209;',
504 'Ograve' => '&#210;',
505 'Oacute' => '&#211;',
506 'Ocirc' => '&#212;',
507 'Otilde' => '&#213;',
508 'Ouml' => '&#214;',
509 'times' => '&#215;',
510 'Oslash' => '&#216;',
511 'Ugrave' => '&#217;',
512 'Uacute' => '&#218;',
513 'Ucirc' => '&#219;',
514 'Uuml' => '&#220;',
515 'Yacute' => '&#221;',
516 'THORN' => '&#222;',
517 'szlig' => '&#223;',
518 'agrave' => '&#224;',
519 'aacute' => '&#225;',
520 'acirc' => '&#226;',
521 'atilde' => '&#227;',
522 'auml' => '&#228;',
523 'aring' => '&#229;',
524 'aelig' => '&#230;',
525 'ccedil' => '&#231;',
526 'egrave' => '&#232;',
527 'eacute' => '&#233;',
528 'ecirc' => '&#234;',
529 'euml' => '&#235;',
530 'igrave' => '&#236;',
531 'iacute' => '&#237;',
532 'icirc' => '&#238;',
533 'iuml' => '&#239;',
534 'eth' => '&#240;',
535 'ntilde' => '&#241;',
536 'ograve' => '&#242;',
537 'oacute' => '&#243;',
538 'ocirc' => '&#244;',
539 'otilde' => '&#245;',
540 'ouml' => '&#246;',
541 'divide' => '&#247;',
542 'oslash' => '&#248;',
543 'ugrave' => '&#249;',
544 'uacute' => '&#250;',
545 'ucirc' => '&#251;',
546 'uuml' => '&#252;',
547 'yacute' => '&#253;',
548 'thorn' => '&#254;',
549 'yuml' => '&#255;'
550 );
551 // Entity not found? Destroy it.
552 return isset($table[$matches[1]]) ? $table[$matches[1]] : '';
553 } /* FeedWordPie_Parser::convert_entity() */
554
555 private function declare_html_entities() {
556 // This is required because the RSS specification says that entity-encoded
557 // html is allowed, but the xml specification says they must be declared.
558 return '<!DOCTYPE html [ <!ENTITY nbsp "&#x00A0;"> <!ENTITY iexcl "&#x00A1;"> <!ENTITY cent "&#x00A2;"> <!ENTITY pound "&#x00A3;"> <!ENTITY curren "&#x00A4;"> <!ENTITY yen "&#x00A5;"> <!ENTITY brvbar "&#x00A6;"> <!ENTITY sect "&#x00A7;"> <!ENTITY uml "&#x00A8;"> <!ENTITY copy "&#x00A9;"> <!ENTITY ordf "&#x00AA;"> <!ENTITY laquo "&#x00AB;"> <!ENTITY not "&#x00AC;"> <!ENTITY shy "&#x00AD;"> <!ENTITY reg "&#x00AE;"> <!ENTITY macr "&#x00AF;"> <!ENTITY deg "&#x00B0;"> <!ENTITY plusmn "&#x00B1;"> <!ENTITY sup2 "&#x00B2;"> <!ENTITY sup3 "&#x00B3;"> <!ENTITY acute "&#x00B4;"> <!ENTITY micro "&#x00B5;"> <!ENTITY para "&#x00B6;"> <!ENTITY middot "&#x00B7;"> <!ENTITY cedil "&#x00B8;"> <!ENTITY sup1 "&#x00B9;"> <!ENTITY ordm "&#x00BA;"> <!ENTITY raquo "&#x00BB;"> <!ENTITY frac14 "&#x00BC;"> <!ENTITY frac12 "&#x00BD;"> <!ENTITY frac34 "&#x00BE;"> <!ENTITY iquest "&#x00BF;"> <!ENTITY Agrave "&#x00C0;"> <!ENTITY Aacute "&#x00C1;"> <!ENTITY Acirc "&#x00C2;"> <!ENTITY Atilde "&#x00C3;"> <!ENTITY Auml "&#x00C4;"> <!ENTITY Aring "&#x00C5;"> <!ENTITY AElig "&#x00C6;"> <!ENTITY Ccedil "&#x00C7;"> <!ENTITY Egrave "&#x00C8;"> <!ENTITY Eacute "&#x00C9;"> <!ENTITY Ecirc "&#x00CA;"> <!ENTITY Euml "&#x00CB;"> <!ENTITY Igrave "&#x00CC;"> <!ENTITY Iacute "&#x00CD;"> <!ENTITY Icirc "&#x00CE;"> <!ENTITY Iuml "&#x00CF;"> <!ENTITY ETH "&#x00D0;"> <!ENTITY Ntilde "&#x00D1;"> <!ENTITY Ograve "&#x00D2;"> <!ENTITY Oacute "&#x00D3;"> <!ENTITY Ocirc "&#x00D4;"> <!ENTITY Otilde "&#x00D5;"> <!ENTITY Ouml "&#x00D6;"> <!ENTITY times "&#x00D7;"> <!ENTITY Oslash "&#x00D8;"> <!ENTITY Ugrave "&#x00D9;"> <!ENTITY Uacute "&#x00DA;"> <!ENTITY Ucirc "&#x00DB;"> <!ENTITY Uuml "&#x00DC;"> <!ENTITY Yacute "&#x00DD;"> <!ENTITY THORN "&#x00DE;"> <!ENTITY szlig "&#x00DF;"> <!ENTITY agrave "&#x00E0;"> <!ENTITY aacute "&#x00E1;"> <!ENTITY acirc "&#x00E2;"> <!ENTITY atilde "&#x00E3;"> <!ENTITY auml "&#x00E4;"> <!ENTITY aring "&#x00E5;"> <!ENTITY aelig "&#x00E6;"> <!ENTITY ccedil "&#x00E7;"> <!ENTITY egrave "&#x00E8;"> <!ENTITY eacute "&#x00E9;"> <!ENTITY ecirc "&#x00EA;"> <!ENTITY euml "&#x00EB;"> <!ENTITY igrave "&#x00EC;"> <!ENTITY iacute "&#x00ED;"> <!ENTITY icirc "&#x00EE;"> <!ENTITY iuml "&#x00EF;"> <!ENTITY eth "&#x00F0;"> <!ENTITY ntilde "&#x00F1;"> <!ENTITY ograve "&#x00F2;"> <!ENTITY oacute "&#x00F3;"> <!ENTITY ocirc "&#x00F4;"> <!ENTITY otilde "&#x00F5;"> <!ENTITY ouml "&#x00F6;"> <!ENTITY divide "&#x00F7;"> <!ENTITY oslash "&#x00F8;"> <!ENTITY ugrave "&#x00F9;"> <!ENTITY uacute "&#x00FA;"> <!ENTITY ucirc "&#x00FB;"> <!ENTITY uuml "&#x00FC;"> <!ENTITY yacute "&#x00FD;"> <!ENTITY thorn "&#x00FE;"> <!ENTITY yuml "&#x00FF;"> <!ENTITY OElig "&#x0152;"> <!ENTITY oelig "&#x0153;"> <!ENTITY Scaron "&#x0160;"> <!ENTITY scaron "&#x0161;"> <!ENTITY Yuml "&#x0178;"> <!ENTITY fnof "&#x0192;"> <!ENTITY circ "&#x02C6;"> <!ENTITY tilde "&#x02DC;"> <!ENTITY Alpha "&#x0391;"> <!ENTITY Beta "&#x0392;"> <!ENTITY Gamma "&#x0393;"> <!ENTITY Epsilon "&#x0395;"> <!ENTITY Zeta "&#x0396;"> <!ENTITY Eta "&#x0397;"> <!ENTITY Theta "&#x0398;"> <!ENTITY Iota "&#x0399;"> <!ENTITY Kappa "&#x039A;"> <!ENTITY Lambda "&#x039B;"> <!ENTITY Mu "&#x039C;"> <!ENTITY Nu "&#x039D;"> <!ENTITY Xi "&#x039E;"> <!ENTITY Omicron "&#x039F;"> <!ENTITY Pi "&#x03A0;"> <!ENTITY Rho "&#x03A1;"> <!ENTITY Sigma "&#x03A3;"> <!ENTITY Tau "&#x03A4;"> <!ENTITY Upsilon "&#x03A5;"> <!ENTITY Phi "&#x03A6;"> <!ENTITY Chi "&#x03A7;"> <!ENTITY Psi "&#x03A8;"> <!ENTITY Omega "&#x03A9;"> <!ENTITY alpha "&#x03B1;"> <!ENTITY beta "&#x03B2;"> <!ENTITY gamma "&#x03B3;"> <!ENTITY delta "&#x03B4;"> <!ENTITY epsilon "&#x03B5;"> <!ENTITY zeta "&#x03B6;"> <!ENTITY eta "&#x03B7;"> <!ENTITY theta "&#x03B8;"> <!ENTITY iota "&#x03B9;"> <!ENTITY kappa "&#x03BA;"> <!ENTITY lambda "&#x03BB;"> <!ENTITY mu "&#x03BC;"> <!ENTITY nu "&#x03BD;"> <!ENTITY xi "&#x03BE;"> <!ENTITY omicron "&#x03BF;"> <!ENTITY pi "&#x03C0;"> <!ENTITY rho "&#x03C1;"> <!ENTITY sigmaf "&#x03C2;"> <!ENTITY sigma "&#x03C3;"> <!ENTITY tau "&#x03C4;"> <!ENTITY upsilon "&#x03C5;"> <!ENTITY phi "&#x03C6;"> <!ENTITY chi "&#x03C7;"> <!ENTITY psi "&#x03C8;"> <!ENTITY omega "&#x03C9;"> <!ENTITY thetasym "&#x03D1;"> <!ENTITY upsih "&#x03D2;"> <!ENTITY piv "&#x03D6;"> <!ENTITY ensp "&#x2002;"> <!ENTITY emsp "&#x2003;"> <!ENTITY thinsp "&#x2009;"> <!ENTITY zwnj "&#x200C;"> <!ENTITY zwj "&#x200D;"> <!ENTITY lrm "&#x200E;"> <!ENTITY rlm "&#x200F;"> <!ENTITY ndash "&#x2013;"> <!ENTITY mdash "&#x2014;"> <!ENTITY lsquo "&#x2018;"> <!ENTITY rsquo "&#x2019;"> <!ENTITY sbquo "&#x201A;"> <!ENTITY ldquo "&#x201C;"> <!ENTITY rdquo "&#x201D;"> <!ENTITY bdquo "&#x201E;"> <!ENTITY dagger "&#x2020;"> <!ENTITY Dagger "&#x2021;"> <!ENTITY bull "&#x2022;"> <!ENTITY hellip "&#x2026;"> <!ENTITY permil "&#x2030;"> <!ENTITY prime "&#x2032;"> <!ENTITY Prime "&#x2033;"> <!ENTITY lsaquo "&#x2039;"> <!ENTITY rsaquo "&#x203A;"> <!ENTITY oline "&#x203E;"> <!ENTITY frasl "&#x2044;"> <!ENTITY euro "&#x20AC;"> <!ENTITY image "&#x2111;"> <!ENTITY weierp "&#x2118;"> <!ENTITY real "&#x211C;"> <!ENTITY trade "&#x2122;"> <!ENTITY alefsym "&#x2135;"> <!ENTITY larr "&#x2190;"> <!ENTITY uarr "&#x2191;"> <!ENTITY rarr "&#x2192;"> <!ENTITY darr "&#x2193;"> <!ENTITY harr "&#x2194;"> <!ENTITY crarr "&#x21B5;"> <!ENTITY lArr "&#x21D0;"> <!ENTITY uArr "&#x21D1;"> <!ENTITY rArr "&#x21D2;"> <!ENTITY dArr "&#x21D3;"> <!ENTITY hArr "&#x21D4;"> <!ENTITY forall "&#x2200;"> <!ENTITY part "&#x2202;"> <!ENTITY exist "&#x2203;"> <!ENTITY empty "&#x2205;"> <!ENTITY nabla "&#x2207;"> <!ENTITY isin "&#x2208;"> <!ENTITY notin "&#x2209;"> <!ENTITY ni "&#x220B;"> <!ENTITY prod "&#x220F;"> <!ENTITY sum "&#x2211;"> <!ENTITY minus "&#x2212;"> <!ENTITY lowast "&#x2217;"> <!ENTITY radic "&#x221A;"> <!ENTITY prop "&#x221D;"> <!ENTITY infin "&#x221E;"> <!ENTITY ang "&#x2220;"> <!ENTITY and "&#x2227;"> <!ENTITY or "&#x2228;"> <!ENTITY cap "&#x2229;"> <!ENTITY cup "&#x222A;"> <!ENTITY int "&#x222B;"> <!ENTITY there4 "&#x2234;"> <!ENTITY sim "&#x223C;"> <!ENTITY cong "&#x2245;"> <!ENTITY asymp "&#x2248;"> <!ENTITY ne "&#x2260;"> <!ENTITY equiv "&#x2261;"> <!ENTITY le "&#x2264;"> <!ENTITY ge "&#x2265;"> <!ENTITY sub "&#x2282;"> <!ENTITY sup "&#x2283;"> <!ENTITY nsub "&#x2284;"> <!ENTITY sube "&#x2286;"> <!ENTITY supe "&#x2287;"> <!ENTITY oplus "&#x2295;"> <!ENTITY otimes "&#x2297;"> <!ENTITY perp "&#x22A5;"> <!ENTITY sdot "&#x22C5;"> <!ENTITY lceil "&#x2308;"> <!ENTITY rceil "&#x2309;"> <!ENTITY lfloor "&#x230A;"> <!ENTITY rfloor "&#x230B;"> <!ENTITY lang "&#x2329;"> <!ENTITY rang "&#x232A;"> <!ENTITY loz "&#x25CA;"> <!ENTITY spades "&#x2660;"> <!ENTITY clubs "&#x2663;"> <!ENTITY hearts "&#x2665;"> <!ENTITY diams "&#x2666;"> ]>';
559 }
560 } /* class FeedWordPie_Parser */
561
562
563