PluginProbe
FeedWordPress / 2022.0203
FeedWordPress v2022.0203
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 2022.0203, at extend/SimplePie/default/feedwordpie_parser.class.php

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