+++ /dev/null
-<?php\r
-/**\r
- * All of the functions to clean up and handle the long description\r
- * of a DocBlock are in this file.\r
- *\r
- * The primary functionality is based on Parser and WordParser, and modified to recognize\r
- * only the tokens defined in the PHPDOCUMENTOR_PDP_* constants\r
- * \r
- * phpDocumentor :: automatic documentation generator\r
- * \r
- * PHP versions 4 and 5\r
- *\r
- * Copyright (c) 2002-2006 Gregory Beaver\r
- * \r
- * LICENSE:\r
- * \r
- * This library is free software; you can redistribute it\r
- * and/or modify it under the terms of the GNU Lesser General\r
- * Public License as published by the Free Software Foundation;\r
- * either version 2.1 of the License, or (at your option) any\r
- * later version.\r
- * \r
- * This library is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
- * Lesser General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU Lesser General Public\r
- * License along with this library; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
- *\r
- * @package phpDocumentor\r
- * @subpackage Parsers\r
- * @author Gregory Beaver <cellog@php.net>\r
- * @copyright 2002-2006 Gregory Beaver\r
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL\r
- * @version CVS: $Id: ParserDescCleanup.inc,v 1.13 2007/12/13 02:56:45 ashnazg Exp $\r
- * @link http://www.phpdoc.org\r
- * @link http://pear.php.net/PhpDocumentor\r
- * @see Parser, WordParser\r
- * @since 1.2\r
- */\r
-\r
-/**#@+\r
- * {@link parserDescParser} token constants\r
- */\r
-/** when <<code>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_EVENT_CODE', 600);\r
-/** when <<code>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_STATE_CODE', 700);\r
-/** when <<p>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_EVENT_P', 601);\r
-/** when <<p>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_STATE_P', 701);\r
-/** when \n\n is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_EVENT_DOUBLECR', 602);\r
-/** when \n\n is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_STATE_DOUBLECR', 702);\r
-/** when <<pre>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_EVENT_PRE', 603);\r
-/** when <<pre>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_STATE_PRE', 703);\r
-/** when <<ul>>/<<ol>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_EVENT_LIST', 604);\r
-/** when <<ul>>/<<ol>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_STATE_LIST', 704);\r
-/** when <<b>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_EVENT_B', 605);\r
-/** when <<b>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_STATE_B', 705);\r
-/** when <<i>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_EVENT_I', 606);\r
-/** when <<i>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_STATE_I', 706);\r
-/** when <<br>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_EVENT_BR', 607);\r
-/** when <<br>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_STATE_BR', 707);\r
-/** when the << potential escape for tags is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_EVENT_ESCAPE',608);\r
-/** when the << potential escape for tags is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_STATE_ESCAPE',708);\r
-/** when << /pre>> is found in a <<pre>><</pre>> section */\r
-define('PHPDOCUMENTOR_PDP_EVENT_ESCAPE_PRE',609);\r
-/** when << /pre>> is found in a <<pre>><</pre>> section */\r
-define('PHPDOCUMENTOR_PDP_STATE_ESCAPE_PRE',709);\r
-/** when << /code>> is found in a <<code>><</code>> section */\r
-define('PHPDOCUMENTOR_PDP_EVENT_ESCAPE_CODE',610);\r
-/** when << /code>> is found in a <<code>><</code>> section */\r
-define('PHPDOCUMENTOR_PDP_STATE_ESCAPE_CODE',710);\r
-/** when <<var>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_EVENT_VAR',611);\r
-/** when <<var>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_STATE_VAR',711);\r
-/** when <<samp>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_EVENT_SAMP',612);\r
-/** when <<samp>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_STATE_SAMP',712);\r
-/** when <<kbd>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_EVENT_KBD',613);\r
-/** when <<kbd>> is found in a desc */\r
-define('PHPDOCUMENTOR_PDP_STATE_KBD',713);\r
-/** when a simple list is found in a desc\r
- *\r
- * like\r
- * <pre>\r
- * o item 1\r
- * o item 2\r
- * </pre>\r
- */\r
-define('PHPDOCUMENTOR_PDP_EVENT_SIMLIST',614);\r
-/** when a simple list is found in a desc\r
- *\r
- * like\r
- * <pre>\r
- * o item 1\r
- * o item 2\r
- * </pre>\r
- */\r
-define('PHPDOCUMENTOR_PDP_STATE_SIMLIST',714);\r
-/**#@-*/\r
-/**\r
-* Like WordParser but designed to handle an array with strings and\r
-* {@link parserInlineTag}s\r
-* @package phpDocumentor\r
-* @subpackage WordParsers\r
-* @author Greg Beaver <cellog@php.net>\r
-* @since 1.2\r
-*/\r
-class ObjectWordParser extends WordParser\r
-{\r
- /**\r
- * Determines whether text searching is case-sensitive or not\r
- * @access private\r
- */\r
- var $_casesensitive = false;\r
- \r
- function ObjectWordParser($casesensitive = false)\r
- {\r
- $this->_casesensitive = $casesensitive;\r
- }\r
- \r
- /**\r
- * Set the word parser to go.\r
- *\r
- * @param array {@link parserStringWithInlineTags::$value} style-array, with\r
- * alternating text and inline tags\r
- */\r
- function setup(&$input)\r
- {\r
-// if (is_string($input[0])) $input[0] = ltrim($input[0]);\r
- $this->data = & $input;\r
- $this->pos = 0;\r
- $this->linenum = 0;\r
- $this->linenumpos = 0;\r
- $this->cache = array();\r
- reset($this->data);\r
- list($this->index,) = each($this->data);\r
- if (!is_object($this->data[$this->index]))\r
- $this->size = strlen($this->data[$this->index]);\r
- else $this->size = 0;\r
- //$this->run = 0;\r
- //$this->word = WORD_PARSER_RET_WORD;\r
- }\r
- \r
- function getWord()\r
- {\r
- if (!isset($this->data[$this->index])) return false;\r
- // return any inline tags unchanged\r
- if (is_object($this->data[$this->index]))\r
- {\r
- $index = $this->index;\r
- list($this->index,) = each($this->data);\r
- $this->pos = 0;\r
- if ($this->index)\r
- {\r
- if (!is_object($this->data[$this->index]))\r
- $this->size = strlen($this->data[$this->index]);\r
- else $this->size = 0;\r
- $this->cache = array();\r
- return $this->data[$index];\r
- } else\r
- {\r
- return false;\r
- }\r
- }\r
- //$st = $this->mtime();\r
- if ($this->size == $this->pos)\r
- {\r
- // cycle to next line in the array\r
- list($this->index,) = each($this->data);\r
- if (!$this->index) return false;\r
- $this->pos = 0;\r
- if (!is_object($this->data[$this->index]))\r
- $this->size = strlen($this->data[$this->index]);\r
- else $this->size = 0;\r
- $this->cache = array();\r
- return $this->getWord();\r
- }\r
-\r
- $npos = $this->size;\r
- if (is_array($this->wordseperators))\r
- {\r
- //$this->wordseperators = array();\r
- foreach($this->wordseperators as $sep)\r
- {\r
- if (isset($this->cache[$sep]))\r
- $tpos = $this->cache[$sep];\r
- else\r
- $tpos = false;\r
- if ($tpos < $this->pos || !is_int($tpos))\r
- {\r
- if ($this->_casesensitive)\r
- $tpos = strpos($this->data[$this->index],$sep,$this->pos);\r
- else\r
- $tpos = strpos(strtolower($this->data[$this->index]),$sep,$this->pos);\r
- }\r
- \r
- if ( ($tpos < $npos) && !($tpos === false))\r
- {\r
- //echo trim($sep) . "=$tpos\n";\r
- $npos = $tpos;\r
- $seplen = strlen($sep);\r
- } \r
- else if (!($tpos === false))\r
- {\r
- $this->cache[$sep] = $tpos;\r
- }\r
- }\r
- } else {\r
- // its time to cycle\r
- return "";\r
- }\r
-\r
- $len = $npos - $this->pos;\r
- if ($len == 0)\r
- {\r
- $len = $seplen;\r
- }\r
-\r
- //$st3 = $this->mtime();\r
- $word = substr($this->data[$this->index],$this->pos,$len);\r
- \r
- // Change random other os newlines to the unix one\r
- if ($word == "\r" || $word == "\r\n")\r
- {\r
- $word = "\n";\r
- }\r
- \r
- if ($this->linenumpos <= $this->pos)\r
- {\r
- $this->linenumpos = $this->pos + $len;\r
- $this->linenum += count(explode("\n",$word)) - 1;\r
- }\r
-\r
- if ($this->getsource)\r
- {\r
- $this->source .= $word;\r
- }\r
- $this->pos = $this->pos + $len;\r
- //$this->word = WORD_PARSER_RET_SEP;\r
-\r
- // Things like // commenats rely on the newline to find their end so im going to have to return them\r
- // never return worthless white space /t ' '\r
- if ($this->returnWhiteSpace == false)\r
- {\r
- if (strlen(trim($word)) == 0 && $word != "\n") \r
- {\r
- $word = $this->getWord();\r
- }\r
- }\r
- //$this->time3 = $this->time3 + ($this->mtime() - $st3);\r
- //$this->time = $this->time + ($this->mtime() - $st);\r
- return $word;\r
- }\r
- \r
- /**\r
- * Determine if the next word is an inline tag\r
- * @return boolean\r
- */\r
- function nextIsObjectOrNonNL()\r
- {\r
- return (($this->size == $this->pos) && isset($this->data[$this->index + 1])\r
- && is_object($this->data[$this->index + 1])) ||\r
- (($this->size > $this->pos) && !in_array($this->data[$this->index]{$this->pos}, array("\n", "\r")));\r
- }\r
-}\r
-\r
-/**\r
- * Parses a DocBlock description to retrieve abstract representations of\r
- * <<pre>>,<<code>>,<<p>>,<<ul>>,<<ol>>,<<li>>,<<b>>,<<i>>\r
- * @tutorial phpDocumentor.howto.pkg#basics.desc\r
- * @package phpDocumentor\r
- * @subpackage Parsers\r
- * @author Greg Beaver <cellog@php.net>\r
- * @since 1.2\r
- */\r
-class parserDescParser extends Parser\r
-{\r
- /**#@+\r
- * @access private\r
- */\r
- /**\r
- * @var array\r
- */\r
- var $eventHandlers = array(PHPDOCUMENTOR_PDP_EVENT_CODE => 'handleCode',\r
- PHPDOCUMENTOR_PDP_EVENT_PRE => 'handlePre',\r
- PHPDOCUMENTOR_PDP_EVENT_P => 'handleP',\r
- PHPDOCUMENTOR_PDP_EVENT_DOUBLECR => 'handleDoubleCR',\r
- PHPDOCUMENTOR_PDP_EVENT_LIST => 'handleList',\r
- PHPDOCUMENTOR_PDP_EVENT_B => 'handleB',\r
- PHPDOCUMENTOR_PDP_EVENT_I => 'handleI',\r
- PHPDOCUMENTOR_PDP_EVENT_VAR => 'handleVar',\r
- PHPDOCUMENTOR_PDP_EVENT_KBD => 'handleKbd',\r
- PHPDOCUMENTOR_PDP_EVENT_SAMP => 'handleSamp',\r
- PHPDOCUMENTOR_PDP_EVENT_BR => 'handleBr',\r
- PHPDOCUMENTOR_PDP_EVENT_ESCAPE => 'handleEscape',\r
- PHPDOCUMENTOR_PDP_EVENT_ESCAPE_CODE => 'handleEscapeCode',\r
- PHPDOCUMENTOR_PDP_EVENT_ESCAPE_PRE => 'handleEscapePre',\r
- PHPDOCUMENTOR_PDP_EVENT_SIMLIST => 'handleSimpleList',\r
- PARSER_EVENT_NOEVENTS => 'defaultHandler',\r
- );\r
- \r
- /**\r
- * @var array\r
- */\r
- var $pars = array();\r
- /**\r
- * Determines whether parsing of <p> tags will occur, or double CR will\r
- * be used\r
- * @var boolean\r
- */\r
- var $parse_Ps;\r
- /**\r
- * Context stack.\r
- *\r
- * Values can be 'normal', or any tag container like 'my_i', 'my_b'. This\r
- * is used to determine which tag text or nested tags should be added to\r
- * @var array\r
- */\r
- var $_context = array('normal');\r
- /**#@-*/\r
- \r
- /**\r
- * sets $wp to be a {@link ObjectWordParser}\r
- * \r
- * $wp is the word parser that retrieves tokens\r
- */\r
- function parserDescParser()\r
- {\r
- $this->wp = new ObjectWordParser;\r
- }\r
- \r
- /**\r
- * Parse a long or short description for tags\r
- *\r
- * @param array array of strings or {@link parserInlineTag}s\r
- * @param boolean true if the description is a short description. (only 1 paragraph allowed in short desc)\r
- * @param string name of the class to instantiate for each paragraph. parserDesc for desc/sdesc,\r
- * parserStringWithInlineTags for tag data\r
- * @staticvar integer used for recursion limiting if a handler for an event is not found\r
- */\r
- function parse (&$parse_data,$sdesc = false,$ind_type = 'parserDesc')\r
- {\r
- static $endrecur = 0;\r
- global $_phpDocumentor_setting;\r
- if (!is_array($parse_data) || count($parse_data) == 0)\r
- {\r
- return false;\r
- }\r
- $this->p_vars['indtype'] = $ind_type;\r
- $this->setupStates($sdesc);\r
- if (isset($_phpDocumentor_setting['javadocdesc']) && $_phpDocumentor_setting['javadocdesc'] == 'on')\r
- $this->parse_Ps = true;\r
-\r
- // initialize variables so E_ALL error_reporting doesn't complain\r
- $pevent = 0;\r
- $word = 0;\r
- $this->p_vars['curpar'] = 0;\r
- $this->pars = array();\r
- $this->p_vars['start'] = true;\r
- $this->p_vars['event_stack'] = new EventStack;\r
-\r
- $this->wp->setup($parse_data,$sdesc);\r
- $this->wp->setWhitespace(true);\r
- $this->p_vars['list_count'] = 0;\r
- if ($sdesc) $this->p_vars['start'] = false;\r
-\r
- // beware of infinite loops\r
- $infiniteLoopCatcher = 0;\r
- do\r
- {\r
- $infiniteLoopCatcher++;\r
- if (!isset($this->pars[$this->p_vars['curpar']])) $this->pars[$this->p_vars['curpar']] = new $ind_type;\r
- $lpevent = $pevent;\r
- $pevent = $this->p_vars['event_stack']->getEvent();\r
- if ($lpevent != $pevent)\r
- {\r
- $this->p_vars['last_pevent'] = $lpevent;\r
- }\r
-\r
- if ($this->p_vars['last_pevent'] != $pevent)\r
- {\r
- // its a new event so the word parser needs to be reconfigured \r
- $this->configWordParser($pevent);\r
- }\r
-\r
-\r
- $this->p_vars['last_word'] = $word;\r
- $word = $this->wp->getWord();\r
-\r
- if (PHPDOCUMENTOR_DEBUG == true)\r
- {\r
- echo "----------------\n";\r
- echo "LAST: |" . htmlentities($this->p_vars['last_word']) . "|\n";\r
-// echo "INDEX: ".$this->p_vars['curpar']."\n";\r
- echo "PEVENT: " . $this->getParserEventName($pevent) . "\n";\r
- echo "LASTPEVENT: " . $this->getParserEventName($this->p_vars['last_pevent']) . "\n";\r
- echo $this->wp->getPos() . " WORD: |".htmlentities($word)."|\n\n";\r
- var_dump($this->_context);\r
- }\r
- if (isset($this->eventHandlers[$pevent]))\r
- {\r
- $handle = $this->eventHandlers[$pevent];\r
- if ($word !== false) $this->$handle($word, $pevent);\r
- else\r
- {\r
- if (!count($this->pars[$this->p_vars['curpar']]->value)) unset($this->pars[$this->p_vars['curpar']]);\r
- }\r
- } else\r
- {\r
- debug('WARNING: possible error, no ParserDescParser handler for event number '.$pevent);\r
- if ($endrecur++ == 25)\r
- {\r
- addErrorDie(PDERROR_LOOP_RECURSION_LIMIT_REACHED);\r
- }\r
- }\r
- if (is_object($word) || trim($word) != '')\r
- {\r
- $this->p_vars['start'] = false;\r
- }\r
-\r
- if ($infiniteLoopCatcher > 10000) {\r
- echo PHP_EOL . "FATAL ERROR: Somehow we got into an infinite loop in parserDescCleanup->parse()'s do-while loop...";\r
- echo PHP_EOL . " The line being parsed was: " . $word . PHP_EOL . PHP_EOL;\r
- addErrorDie(PDERROR_LOOP_RECURSION_LIMIT_REACHED);\r
- }\r
- } while (is_object($word) || !($word === false) && $word != '');\r
- $context = $this->getContext();\r
- if ($context != 'normal')\r
- {\r
- if ($context == 'list' && $this->p_flags['simplelist'])\r
- {\r
- $this->p_vars['lists'][0]->addItem($this->p_vars['list_item'][0]);\r
- unset($this->p_vars['list_item'][0]);\r
- $this->setContext('normal');\r
- $this->addText($this->p_vars['lists'][0]);\r
- } else addError(PDERROR_UNCLOSED_TAG,str_replace('my_','',$context));\r
- }\r
- if ($this->p_vars['list_count'] > 0) addError(PDERROR_UNMATCHED_LIST_TAG);\r
- if ($sdesc)\r
- $this->publishEvent(2,$this->pars);\r
- else\r
- $this->publishEvent(1,$this->pars);\r
- }\r
- /**#@+ @access private */\r
- /**\r
- * basic handling\r
- *\r
- * This function checks to see if the first thing in\r
- * a description is the <p> tag. If so, it will switch\r
- * into a mode of parsing out paragraphs by <p> instead\r
- * of a double line-break\r
- *\r
- * It also removes extra whitespace\r
- * @uses doSimpleList()\r
- */\r
- function defaultHandler($word, $pevent)\r
- {\r
- $context = $this->getContext();\r
- if ($context != 'normal') $this->setContext('normal');\r
- if ($this->p_vars['start'] && is_string($word) && strtolower($word) == '<p>')\r
- {\r
- $this->parse_Ps = true;\r
- }\r
- if (is_string($word) && $this->checkEventPush($word, $pevent)) return;\r
-// if (!isset($this->parse_Ps) || !$this->parse_Ps)\r
- {\r
- if (is_string($word) && is_string($this->p_vars['last_word']) &&\r
- ($word == ' ' && $this->p_vars['last_word'] == ' ')) return;\r
- if ($pevent == PARSER_EVENT_NOEVENTS)\r
- {\r
- if ($this->doSimpleList($word)) return;\r
- }\r
- $this->addText($word);\r
- }\r
- }\r
- \r
- /**\r
- * Retrieve the current top-level tag to add text into\r
- * @uses $_context\r
- */\r
- function getContext()\r
- {\r
- array_push($this->_context,$a = array_pop($this->_context));\r
- return $a;\r
- }\r
- \r
- /**\r
- * Pop a context off of the context stack\r
- * @uses $_context\r
- */\r
- function dropContext()\r
- {\r
- array_pop($this->_context);\r
- if (count($this->_context) == 0)\r
- $this->_context = array('normal');\r
- }\r
- \r
- /**\r
- * @uses $_context\r
- * @param string context name\r
- */\r
- function setContext($context)\r
- {\r
- array_push($this->_context,$context);\r
- }\r
- \r
- /**\r
- * add input as text to the current paragraph or list\r
- * @param string|parserInlineTag\r
- */\r
- function addText($text)\r
- {\r
- $context = $this->getContext();\r
- if ($context == 'list')\r
- {\r
-// debug('aded to '.$context);\r
- if (!is_object($this->p_vars['list_item'][$this->p_vars['list_count']])) {\r
- addErrorDie(PDERROR_UL_IN_UL);\r
- }\r
- $this->p_vars['list_item'][$this->p_vars['list_count']]->add($text);\r
- } elseif ($context != 'normal')\r
- {\r
-// debug('added to '.$context);\r
- $this->p_vars[$context]->add($text);\r
- } else\r
- {\r
-// debug('added to normal ');\r
- $indtype = $this->p_vars['indtype'];\r
- if (!isset($this->pars[$this->p_vars['curpar']]))\r
- $this->pars[$this->p_vars['curpar']] = new $indtype;\r
- $this->pars[$this->p_vars['curpar']]->add($text);\r
- }\r
- }\r
- \r
- /**#@-*/\r
- /**#@+\r
- * @access private\r
- * @param string|parserInlineTag token from the ObjectWordParser\r
- * @param integer parser event from {@link ParserDescCleanup.inc}\r
- */\r
- /**\r
- * Handles special case where a description needs the text "<tag>" and tag\r
- * is one of code, b, i, pre, var, or any other valid in-DocBlock html tag.\r
- *\r
- * the text <<<code>>> in a DocBlock will parse out as <<code>>, instead\r
- * of being parsed as markup.\r
- */\r
- function handleEscape($word, $pevent)\r
- {\r
- $this->p_vars['event_stack']->popEvent();\r
- if (!in_array($word, $this->tokens[PHPDOCUMENTOR_PDP_STATE_ESCAPE]))\r
- {\r
- if ($word == '<')\r
- {\r
- $this->addText($word);\r
- $this->wp->backupPos($word.$word);\r
- } else\r
- $this->wp->backupPos($word);\r
- return;\r
- }\r
- $this->addText('<'.str_replace('>>','>',$word));\r
- }\r
- \r
- /**\r
- * Just like {@link handleEscape}, except the only valid escape is\r
- * <<</pre>>>\r
- */\r
- function handleEscapePre($word, $pevent)\r
- {\r
- $this->p_vars['event_stack']->popEvent();\r
- $this->addText('</pre>');\r
- }\r
- \r
- /**\r
- * Just like {@link handleEscape}, except the only valid escape is\r
- * <<</code>>>\r
- */\r
- function handleEscapeCode($word, $pevent)\r
- {\r
- $this->p_vars['event_stack']->popEvent();\r
- $this->addText('</code>');\r
- }\r
- \r
- /**\r
- * Handle "<<br>>"\r
- * Add a new {@link parserBr}\r
- * @uses addText()\r
- */\r
- function handleBr($word, $pevent)\r
- {\r
- if (is_string($word) && $this->checkEventPop($word, $pevent))\r
- {\r
- $this->addText(new parserBr);\r
- }\r
- }\r
- \r
- /**\r
- * Handles simple lists\r
- *\r
- * phpEdit has an ingenious facility to handle simple lists used in a\r
- * DocBlock like this:\r
- *\r
- * - item 1\r
- * - item 2\r
- * - item 3\r
- *\r
- * The DocBlock is:\r
- * <pre>\r
- * * - item 1\r
- * * - item 2\r
- * * - item 3\r
- * </pre>\r
- * This function converts these simple lists into the parserList class\r
- * @param boolean true if this is the first list item in the list\r
- */\r
- function handleSimpleList($word, $pevent, $start = false)\r
- {\r
- if (is_object($word) && $this->p_flags['in_item'])\r
- {\r
- $this->p_vars['list_item'][0]->add($word);\r
- return;\r
- }\r
- if (is_string($word) && $this->checkEventPush($word, $pevent))\r
- {\r
- $this->p_flags['in_event'] = true;\r
- return;\r
- }\r
- $ltrimword = @substr($word, @strpos($word, ltrim($word)));\r
- $is_valid = false;\r
- if (strlen(trim($word)) == 0)\r
- {\r
- if ($this->wp->nextIsObjectOrNonNL())\r
- {\r
- $is_valid = true;\r
- }\r
- }\r
- if ($word == "\n" && is_string($this->p_vars['last_word'])\r
- && $this->p_vars['last_word']{strlen($this->p_vars['last_word']) - 1}\r
- == "\n")\r
- {\r
- if ($this->p_flags['in_item'])\r
- {\r
- $this->p_vars['lists'][0]->addItem($this->p_vars['list_item'][0]);\r
- unset($this->p_vars['list_item'][0]);\r
- $this->setContext('normal');\r
- $this->p_flags['simplelist'] = false;\r
- $this->addText($this->p_vars['lists'][0]);\r
- unset($this->p_vars['lists']);\r
- unset($this->p_vars['last_list']);\r
- $this->wp->backuppos($word);\r
- $this->p_vars['event_stack']->popEvent();\r
- $this->p_flags['in_item'] = false;\r
-// debug('end of list 3');\r
- return;\r
- } else\r
- {\r
- $this->wp->backuppos($word);\r
- $this->p_vars['event_stack']->popEvent();\r
- $this->p_flags['in_item'] = false;\r
-// debug('not a list 2');\r
- return;\r
- }\r
- }\r
- $start_list = $this->getStartList($word);\r
- if (substr($ltrimword,0,strlen($start_list)) != $start_list \r
- || $this->p_flags['in_event'] || is_object($this->p_vars['last_word']))\r
- {\r
- if (((strlen($this->p_vars['whitespace']) + 1) < strlen(substr($word,0,strpos($word, $ltrimword))))\r
- || $word == "\n"\r
- || $is_valid\r
- || $this->p_flags['in_event']\r
- || (is_object($this->p_vars['last_word']) && $this->p_flags['in_item']))\r
- {\r
- $this->p_vars['list_item'][0]->add($word);\r
- $this->resetStartList($start_list);\r
- $this->p_flags['in_event'] = false;\r
-// debug('middle of list');\r
- } else\r
- {\r
- if ($this->p_flags['in_item'])\r
- {\r
- $this->p_vars['lists'][0]->addItem($this->p_vars['list_item'][0]);\r
- unset($this->p_vars['list_item'][0]);\r
- $this->setContext('normal');\r
- $this->p_flags['simplelist'] = false;\r
- $this->addText($this->p_vars['lists'][0]);\r
- unset($this->p_vars['lists']);\r
- unset($this->p_vars['last_list']);\r
- $this->wp->backuppos($word);\r
- $this->p_vars['event_stack']->popEvent();\r
- $this->p_flags['in_item'] = false;\r
-// debug('end of list 1');\r
- return;\r
- } else\r
- {\r
- $this->wp->backuppos($word);\r
- $this->p_vars['event_stack']->popEvent();\r
- $this->p_flags['in_item'] = false;\r
-// debug('not a list');\r
- return;\r
- }\r
- }\r
- } else\r
- {\r
- if ($this->p_vars['whitespace'] != substr($word,0,strpos($word, $start_list)))\r
- { // if the whitespace is greater than that preceding the list\r
- // delimiter, it's a multi-line list item\r
- $this->setContext('normal');\r
- $this->p_flags['simplelist'] = false;\r
- $this->addText($this->p_vars['lists'][0]);\r
- unset($this->p_vars['lists']);\r
- $this->wp->backuppos($word);\r
- $this->p_vars['event_stack']->popEvent();\r
- unset($this->p_vars['last_list']);\r
- $this->p_flags['in_item'] = false;\r
-// debug('end of list 2');\r
- return;\r
- } else\r
- {\r
- if ($this->p_flags['in_item'])\r
- {\r
- // end of a list item, add it to the list\r
- $this->p_vars['lists'][0]->addItem($this->p_vars['list_item'][0]);\r
- unset($this->p_vars['list_item'][0]);\r
- }\r
-// debug('next list item');\r
- $this->p_vars['list_item'][0] = new parserStringWithInlineTags;\r
- $this->p_vars['list_item'][0]->add(ltrim(substr($ltrimword,strlen($start_list))));\r
- $this->p_flags['in_item'] = true;\r
- }\r
- }\r
- }\r
- /**#@-*/\r
- /**\r
- * Get the next list marker\r
- *\r
- * In unordered lists, this will be something like "o", "-"\r
- *\r
- * In ordered lists, this will be either the number "3", "5" or "3.", "5."\r
- * @return string text of the next list marker to look for\r
- * @param string current word from the parser\r
- * @access private\r
- */\r
- function getStartList($word)\r
- {\r
- // unordered, return the first marker found\r
- if (!$this->p_flags['orderedlist']) return $this->p_vars['start_list'];\r
- if (isset($this->p_vars['last_list']))\r
- {\r
- $this->p_vars['save_list'] = $this->p_vars['last_list'];\r
- $next = $this->p_vars['last_list'];\r
- // increment to next list number, convert to string\r
- if (substr($this->p_vars['start_list'], strlen($this->p_vars['start_list']) - 1) == '.')\r
- $next = (substr($next, 0, strpos($next,'.')) + 1) . '.';\r
- else\r
- $next = ($next + 1) . '';\r
-// debug("next is '$next'");\r
- if ($this->p_vars['whitespace'] == substr($word,0,strpos($word, $next)))\r
- return $this->p_vars['last_list'] = $next;\r
- // the next number is not in this word, so return but don't save\r
- return $next;\r
- } else\r
- {\r
- $this->p_vars['last_list'] = $this->p_vars['start_list'];\r
- return $this->p_vars['start_list'];\r
- }\r
- }\r
- \r
- /**\r
- * Set the next list marker to the current list marker\r
- *\r
- * In ordered lists, this will ensure that the next number returned is the\r
- * right number\r
- * @param string token for next list marker\r
- * @access private\r
- */\r
- function resetStartList($start)\r
- {\r
- if (!isset($this->p_vars['save_list'])) return false;\r
- $this->p_vars['last_list'] = $this->p_vars['save_list'];\r
- }\r
- \r
- /**#@+\r
- * @access private\r
- * @param string|parserInlineTag token from the ObjectWordParser\r
- * @param integer parser event from {@link ParserDescCleanup.inc}\r
- */\r
- /**\r
- * Handles <<ol>>,<<li>>,<<ul>>\r
- *\r
- * This allows parsing of lists nested to any level. Using\r
- * the lists and list_item temporary variables and using\r
- * list_count to control nesting, the method creates a {@link parserList}\r
- * for each <<ol>> or <<ul>> tag, and a\r
- * standard {@link parserStringWithInlineTags} for all the text, adding\r
- * in nested lists as if they were inline tags (the conversion interface\r
- * is the same for both object types)\r
- */\r
- function handleList($word, $pevent)\r
- {\r
- if (is_string($word) && $this->checkEventPush($word, $pevent))\r
- {\r
- return;\r
- }\r
- $ordered = false;\r
- if (!is_object($this->p_vars['last_word']) && strtolower($this->p_vars['last_word']) == '<ol>')\r
- {\r
- // ordered list\r
- $ordered = true;\r
- }\r
- // start a new list\r
- if (!is_object($this->p_vars['last_word']) && (strtolower($this->p_vars['last_word']) == '<ol>' || strtolower($this->p_vars['last_word']) == '<ul>'))\r
- {\r
- $this->p_flags['in_item'] = false;\r
- $this->setContext('list');\r
- $this->p_vars['lists'][++$this->p_vars['list_count']] = new parserList($ordered);\r
- }\r
- if (!is_object($word) && strtolower($word) == '<li>')\r
- {\r
- if ($this->p_flags['in_item'])\r
- {\r
- // end of a list item (no end tag), add it to the list\r
- $this->p_vars['lists'][$this->p_vars['list_count']]->addItem($this->p_vars['list_item'][$this->p_vars['list_count']]);\r
- unset($this->p_vars['list_item'][$this->p_vars['list_count']]);\r
- }\r
- // start a new list item\r
- $this->p_vars['list_item'][$this->p_vars['list_count']] = new parserStringWithInlineTags;\r
- $this->p_flags['in_item'] = true;\r
- } else\r
- {\r
- if (is_object($word) || (strtolower($word) != '</li>'))\r
- {\r
- if (is_object($word) || (strtolower($word) != '</ul>' && strtolower($word) != '</ol>'))\r
- {\r
- // item text\r
- if (isset($this->p_vars['list_item'][$this->p_vars['list_count']]))\r
- {\r
- if (is_string($word) && $word == ' ' &&\r
- $this->p_vars['last_word'] == ' ') return;\r
- $this->p_vars['list_item'][$this->p_vars['list_count']]->add($word);\r
- }\r
- } else\r
- {\r
- if ($this->p_flags['in_item'])\r
- {\r
- // end the current list item before ending a list\r
- $this->p_vars['lists'][$this->p_vars['list_count']]->addItem($this->p_vars['list_item'][$this->p_vars['list_count']]);\r
- unset($this->p_vars['list_item'][$this->p_vars['list_count']]);\r
- $this->p_flags['in_item'] = false;\r
- }\r
- if (is_string($word) && $this->checkEventPop($word, $pevent))\r
- {\r
- if ($this->p_vars['list_count'] > 1)\r
- {\r
- // this is a sublist, add it to the list item of the parent list\r
- if (!isset($this->p_vars['list_item'][$this->p_vars['list_count'] - 1])) {\r
- addErrorDie(PDERROR_UL_IN_UL);\r
- }\r
- $this->p_vars['list_item'][$this->p_vars['list_count'] - 1]->add($this->p_vars['lists'][$this->p_vars['list_count']]);\r
- // remove the sublist item and sublist, drop to parent list\r
- unset($this->p_vars['lists'][$this->p_vars['list_count']]);\r
- unset($this->p_vars['lists'][$this->p_vars['list_count']]);\r
- $this->p_vars['list_count']--;\r
- $this->p_flags['in_item'] = true;\r
- } else\r
- {\r
- // this is a primary list and it has concluded\r
- $this->pars[$this->p_vars['curpar']]->add($this->p_vars['lists'][$this->p_vars['list_count']]);\r
- unset($this->p_vars['lists']);\r
- unset($this->p_vars['list_item']);\r
- $this->p_vars['list_count'] = 0;\r
- $this->dropContext();\r
- }\r
- }\r
- }\r
- } else\r
- {\r
- // check to make sure our list item is not unclosed\r
- if (!$this->p_flags['in_item'])\r
- {\r
- addError(PDERROR_TEXT_OUTSIDE_LI);\r
- } else\r
- {\r
- // end of a list item, add it to the list\r
- $this->p_vars['lists'][$this->p_vars['list_count']]->addItem($this->p_vars['list_item'][$this->p_vars['list_count']]);\r
- unset($this->p_vars['list_item'][$this->p_vars['list_count']]);\r
- $this->p_flags['in_item'] = false;\r
- }\r
- }\r
- }\r
- }\r
-\r
- /**\r
- * Handles <<code>><</code>> blocks\r
- */\r
- function handleCode($word, $pevent)\r
- {\r
- if (!isset($this->p_vars['my_code']))\r
- {\r
- $this->setContext('my_code');\r
- $this->p_vars['my_code'] = new parserCode;\r
- }\r
- if (is_string($word) && $this->checkEventPush($word, $pevent)) return;\r
- if (is_object($word) || strtolower($word) != '</code>') $this->p_vars['my_code']->add($word);\r
- if (is_string($word))\r
- {\r
- if ($this->checkEventPop($word,$pevent))\r
- {\r
- $this->dropContext();\r
- $this->addText($this->p_vars['my_code']);\r
- unset($this->p_vars['my_code']);\r
- }\r
- }\r
- }\r
- \r
- /**\r
- * Handles <<pre>><</pre>> blocks\r
- */\r
- function handlePre($word, $pevent)\r
- {\r
- if (!isset($this->p_vars['my_pre']))\r
- {\r
- $this->setContext('my_pre');\r
- $this->p_vars['my_pre'] = new parserPre;\r
- }\r
- if (is_string($word) && $this->checkEventPush($word, $pevent)) return;\r
- if (is_object($word) || strtolower($word) != '</pre>') $this->p_vars['my_pre']->add($word);\r
- if (is_string($word))\r
- {\r
- if ($this->checkEventPop($word,$pevent))\r
- {\r
- $this->dropContext();\r
- $this->addText($this->p_vars['my_pre']);\r
- unset($this->p_vars['my_pre']);\r
- }\r
- }\r
- }\r
- \r
- /**\r
- * Handles <<b>><</b>> blocks\r
- */\r
- function handleB($word, $pevent)\r
- {\r
- if (!isset($this->p_vars['my_b']))\r
- {\r
- $this->setContext('my_b');\r
- $this->p_vars['my_b'] = new parserB;\r
- }\r
- if (is_string($word))\r
- {\r
- if ($this->checkEventPop($word,$pevent))\r
- {\r
- $this->dropContext();\r
- $this->addText($this->p_vars['my_b']);\r
- unset($this->p_vars['my_b']);\r
- } else\r
- {\r
- $this->p_vars['my_b']->add($word);\r
- }\r
- } else $this->p_vars['my_b']->add($word);\r
- }\r
- \r
- /**\r
- * Handles <<i>><</i>> blocks\r
- */\r
- function handleI($word, $pevent)\r
- {\r
- if (!isset($this->p_vars['my_i']))\r
- {\r
- $this->p_vars['my_i'] = new parserI;\r
- $this->setContext('my_i');\r
- }\r
- if (is_string($word))\r
- {\r
- if ($this->checkEventPop($word,$pevent))\r
- {\r
- $this->dropContext();\r
- $this->addText($this->p_vars['my_i']);\r
- unset($this->p_vars['my_i']);\r
- } else\r
- {\r
- $this->p_vars['my_i']->add($word);\r
- }\r
- } else $this->p_vars['my_i']->add($word);\r
- }\r
- \r
- /**\r
- * Handles <<var>><</var>> blocks\r
- */\r
- function handleVar($word, $pevent)\r
- {\r
- if (!isset($this->p_vars['my_var']))\r
- {\r
- $this->setContext('my_var');\r
- $this->p_vars['my_var'] = new parserDescVar;\r
- }\r
- if (is_string($word))\r
- {\r
- if ($this->checkEventPop($word,$pevent))\r
- {\r
- $this->dropContext();\r
- $this->addText($this->p_vars['my_var']);\r
- unset($this->p_vars['my_var']);\r
- } else\r
- {\r
- $this->p_vars['my_var']->add($word);\r
- }\r
- } else $this->p_vars['my_var']->add($word);\r
- }\r
- \r
- /**\r
- * Handles <<samp>><</samp>> blocks\r
- */\r
- function handleSamp($word, $pevent)\r
- {\r
- if (!isset($this->p_vars['my_samp']))\r
- {\r
- $this->setContext('my_samp');\r
- $this->p_vars['my_samp'] = new parserSamp;\r
- }\r
- if (is_string($word))\r
- {\r
- if ($this->checkEventPop($word,$pevent))\r
- {\r
- $this->dropContext();\r
- $this->addText($this->p_vars['my_samp']);\r
- unset($this->p_vars['my_samp']);\r
- } else\r
- {\r
- $this->p_vars['my_samp']->add($word);\r
- }\r
- } else $this->p_vars['my_samp']->add($word);\r
- }\r
- \r
- /**\r
- * Handles <<kbd>><</kbd>> blocks\r
- */\r
- function handleKbd($word, $pevent)\r
- {\r
- if (!isset($this->p_vars['my_kbd']))\r
- {\r
- $this->setContext('my_kbd');\r
- $this->p_vars['my_kbd'] = new parserKbd;\r
- }\r
- if (is_string($word))\r
- {\r
- if ($this->checkEventPop($word,$pevent))\r
- {\r
- $this->dropContext();\r
- $this->addText($this->p_vars['my_kbd']);\r
- unset($this->p_vars['my_kbd']);\r
- } else\r
- {\r
- $this->p_vars['my_kbd']->add($word);\r
- }\r
- } else $this->p_vars['my_kbd']->add($word);\r
- }\r
- \r
- /**\r
- * Handles <<p>><</p>> blocks\r
- *\r
- * Note that the only time <<p>> will be interpreted as delimiting a\r
- * paragraph is if it is the first thing in the description.\r
- */\r
- function handleP($word, $pevent)\r
- {\r
- if (!isset($this->parse_Ps)) $this->parse_Ps = false;\r
- if (is_string($word))\r
- {\r
- if (is_string($word) && $this->checkEventPush($word, $pevent)) return;\r
- }\r
- if (!$this->parse_Ps)\r
- {\r
- $this->p_vars['event_stack']->popEvent();\r
- if (!is_object($word) && strtolower($this->p_vars['last_word']) == '<p>') $this->addText('<p>');\r
- $this->addText($word);\r
- return;\r
- }\r
- if (is_string($word) && $word == "\n") $word = " ";\r
- if (is_string($word))\r
- {\r
- if ($this->checkEventPop($word, $pevent))\r
- {\r
- $this->p_vars['curpar']++;\r
- return;\r
- }\r
- // if no closing tag, pretend there was one\r
- if (!is_object($word) && strtolower($word) == '<p>' && $this->parse_Ps)\r
- {\r
- $this->p_vars['curpar']++;\r
- return;\r
- }\r
- }\r
- if ($this->p_vars['start'])\r
- {\r
- $this->addText($word);\r
- } else\r
- {// if the <p> is not at the beginning of the desc, then it is not\r
- // possible to parse into paragraphs using this tag\r
- if ($word === ' ' && $this->p_vars['last_word'] === ' ') return;\r
- $this->addText($word);\r
- }\r
- }\r
- \r
- /**\r
- * Handles \n\n as a paragraph marker\r
- * @uses doSimpleList()\r
- */\r
- function handleDoubleCR($word, $pevent)\r
- {\r
- $this->p_vars['event_stack']->popEvent();\r
- if ($word == "\n")\r
- {\r
- // only use this if <p> isn't being used\r
- if ((!isset($this->parse_Ps) || !$this->parse_Ps))\r
- {\r
- if ($this->p_vars['last_word'] == "\n")\r
- {\r
- $this->p_vars['curpar']++;\r
- $this->parse_Ps = false;\r
- } else\r
- {\r
- if (is_string($word) && !$this->checkEventPush($word, $pevent))\r
- {\r
- if ($word == ' ' && $this->p_vars['last_word'] == ' ') return;\r
- $this->addText($word);\r
- }\r
- }\r
- } else\r
- {\r
- if (is_string($word) && !$this->checkEventPush($word, $pevent))\r
- {\r
- if ($word == ' ' && $this->p_vars['last_word'] == ' ') return;\r
- $this->addText($word);\r
- }\r
- }\r
- } else\r
- {\r
- if ($this->p_vars['last_word'] == "\n")\r
- {\r
- if ((!isset($this->parse_Ps) || !$this->parse_Ps))\r
- {\r
- $this->addText(' ');\r
- }\r
- }\r
- if (is_string($word) && !($e = $this->checkEventPush($word, $pevent)))\r
- {\r
- if ($word == ' ' && $this->p_vars['last_word'] == ' ') return;\r
- if ($this->doSimpleList($word)) return;\r
- $this->addText($word);\r
- }\r
- }\r
- }\r
- \r
- /**#@-*/\r
- /**\r
- * Return a simple list, if found\r
- *\r
- * This helper function extracts a simple list beginning with any of\r
- * 'o','-'.'#','+','0','1','0.','1.' and starts parsing it.\r
- * @param string line that may contain a simple list\r
- * @return boolean true if a list is found, false otherwise\r
- */\r
- function doSimpleList($word)\r
- {\r
- if ($this->p_flags['in_event']) return true;\r
- if (is_object($word)) return false;\r
- $ltrimword = ltrim($word);\r
- if ((strlen($ltrimword) != strlen($word))\r
- && strlen($ltrimword) > 1\r
- && ((in_array($ltrimword{0},array('o','-','1','0','#','+')) && $ltrimword{1} == ' '))\r
- || ((strlen($ltrimword) >= 2) && (substr($ltrimword,0,2) === '1.' || substr($ltrimword,0,2) === '0.') && $ltrimword{2} == ' '))\r
- {\r
- // save the whitespace for comparison\r
- $this->p_vars['whitespace'] = substr($word,0,strlen($word) - strlen($ltrimword));\r
- $this->p_vars['start_list'] = $ltrimword{0};\r
- if ($this->p_vars['start_list'] != '1' && $this->p_vars['start_list'] != '1.' &&\r
- $this->p_vars['start_list'] != '0' && $this->p_vars['start_list'] != '0.')\r
- {\r
- $this->p_flags['orderedlist'] = false;\r
- } else\r
- {\r
- if (substr($ltrimword,0,2) == '1.')\r
- {\r
- $this->p_vars['start_list'] = '1.';\r
- }\r
- $this->p_flags['orderedlist'] = true;\r
- }\r
- $this->p_vars['event_stack']->pushEvent(PHPDOCUMENTOR_PDP_EVENT_SIMLIST);\r
- $this->setContext('list');\r
- $this->p_flags['simplelist'] = true;\r
- $this->p_vars['lists'][0] = new parserList($this->p_flags['orderedlist']);\r
- $this->p_vars['list_count'] = 0;\r
- $this->handleSimpleList($word, PHPDOCUMENTOR_PDP_EVENT_SIMLIST, true);\r
- return true;\r
- }\r
- return false;\r
- }\r
- /**\r
- * setup the parser tokens, and the pushEvent/popEvent arrays\r
- * @see $tokens, $pushEvent, $popEvent\r
- * @param boolean determines whether to allow paragraph parsing\r
- * @global boolean used to determine whether to slow things down or not by\r
- * eliminating whitespace from comments\r
- */\r
- \r
- function setupStates($sdesc)\r
- {\r
- $this->p_flags['in_item'] = false;\r
- $this->p_flags['in_event'] = false;\r
- $this->p_flags['simplelist'] = false;\r
- $this->_context = array('normal');\r
- $this->tokens[STATE_NOEVENTS] = array("\n", "<code>", "<pre>", "<ol>", "<ul>", \r
- "<b>", "<i>", '<var>', '<kbd>', '<samp>', "<br", '<<');\r
- if (!$sdesc)\r
- {\r
- $this->tokens[STATE_NOEVENTS][] = "<p>";\r
- $this->tokens[STATE_NOEVENTS][] = "</p>";\r
- }\r
- if (PHPDOCUMENTOR_KILL_WHITESPACE) $this->tokens[STATE_NOEVENTS][] = ' ';\r
- $this->tokens[PHPDOCUMENTOR_PDP_STATE_P] = array("</p>","<code>","<pre>","\n","<ol>","<ul>","<b>","<i>","<br","<p>", '<<',\r
- '<var>', '<kbd>', '<samp>');\r
- if (PHPDOCUMENTOR_KILL_WHITESPACE) $this->tokens[PHPDOCUMENTOR_PDP_STATE_P][] = ' ';\r
- $this->tokens[PHPDOCUMENTOR_PDP_STATE_CODE] = array("</code>", '<</code>>');\r
- $this->tokens[PHPDOCUMENTOR_PDP_STATE_PRE] = array("</pre>", '<</pre>>');\r
- $this->tokens[PHPDOCUMENTOR_PDP_STATE_LIST] = array("<ul>","<ol>","</ul>","</ol>","<li>","</li>","<b>","<i>","<br", '<<',"<code>","<pre>","<br",\r
- '<var>', '<kbd>', '<samp>');\r
- $this->tokens[PHPDOCUMENTOR_PDP_STATE_DOUBLECR] = array("\n","<ol>","<ul>","<code>","<pre>","<b>","<i>","<br","<p>","</p>",\r
- '<var>', '<kbd>', '<samp>', '<<');\r
- $this->tokens[PHPDOCUMENTOR_PDP_STATE_SIMLIST] = array("\n",'<var>', '<kbd>', '<samp>','<b>','<i>', '<pre>', '<code>',\r
- '<br', '<<');\r
-\r
- $this->tokens[PHPDOCUMENTOR_PDP_STATE_B] = array("<code>","\n","<pre>","<ol>","<ul>","</b>","<i>","<br", '<<',\r
- '<var>', '<kbd>', '<samp>');\r
- $this->tokens[PHPDOCUMENTOR_PDP_STATE_KBD] = array("<code>","\n","<pre>","<ol>","<ul>","<b>","<i>","<br", '<<',\r
- '<var>', '</kbd>', '<samp>');\r
- $this->tokens[PHPDOCUMENTOR_PDP_STATE_VAR] = array("<code>","\n","<pre>","<ol>","<ul>","<b>","<i>","<br", '<<',\r
- '</var>', '<kbd>', '<samp>');\r
- $this->tokens[PHPDOCUMENTOR_PDP_STATE_SAMP] = array("<code>","\n","<pre>","<ol>","<ul>","<b>","<i>","<br", '<<',\r
- '<var>', '<kbd>', '</samp>');\r
- $this->tokens[PHPDOCUMENTOR_PDP_STATE_I] = array("<code>","\n","<pre>","<ol>","<ul>","<b>","</i>","<br", '<<',\r
- '<var>', '<kbd>', '<samp>');\r
- $this->tokens[PHPDOCUMENTOR_PDP_STATE_BR] = array(">","/>");\r
- $this->tokens[PHPDOCUMENTOR_PDP_STATE_ESCAPE] = array('code>>', '/code>>', 'pre>>', '/pre>>', 'b>>', '/b>>', \r
- 'i>>', '/i>>', 'ol>>', '/ol>>', 'ul>>', '/ul>>', 'li>>', '/li>>', \r
- 'br>>', 'br />>', 'p>>', '/p>>', 'samp>>', '/samp>>', \r
- 'kbd>>', '/kbd>>', 'var>>', '/var>>'); \r
- if (PHPDOCUMENTOR_KILL_WHITESPACE) $this->tokens[PHPDOCUMENTOR_PDP_STATE_DOUBLECR][] = ' ';\r
-\r
- // For each event word to event mapings\r
- $this->pushEvent[PARSER_EVENT_NOEVENTS] = \r
- array(\r
- "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE,\r
- "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE,\r
- "<p>" => PHPDOCUMENTOR_PDP_EVENT_P,\r
- "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR,\r
- "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP,\r
- "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD,\r
- "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<b>" => PHPDOCUMENTOR_PDP_EVENT_B,\r
- "<i>" => PHPDOCUMENTOR_PDP_EVENT_I,\r
- "<br" => PHPDOCUMENTOR_PDP_EVENT_BR,\r
- "\n" => PHPDOCUMENTOR_PDP_EVENT_DOUBLECR,\r
- '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE,\r
- );\r
-##########################\r
- $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_CODE] =\r
- array(\r
- '<</code>>' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE_CODE,\r
- );\r
- \r
- $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_CODE] = array("</code>");\r
-##########################\r
- $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_PRE] =\r
- array(\r
- '<</pre>>' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE_PRE,\r
- );\r
- \r
- $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_PRE] = array("</pre>");\r
-##########################\r
- \r
- $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_BR] = array(">","/>");\r
-##########################\r
- $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_P] =\r
- array(\r
- "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE,\r
- "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR,\r
- "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP,\r
- "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD,\r
- "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE,\r
- "<b>" => PHPDOCUMENTOR_PDP_EVENT_B,\r
- "<i>" => PHPDOCUMENTOR_PDP_EVENT_I,\r
- "<br" => PHPDOCUMENTOR_PDP_EVENT_BR,\r
- '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE,\r
- );\r
- \r
- $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_P] = array("</p>");\r
-##########################\r
- \r
- $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_LIST] =\r
- array(\r
- "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE,\r
- "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR,\r
- "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP,\r
- "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD,\r
- "<b>" => PHPDOCUMENTOR_PDP_EVENT_B,\r
- "<i>" => PHPDOCUMENTOR_PDP_EVENT_I,\r
- "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE,\r
- "<br" => PHPDOCUMENTOR_PDP_EVENT_BR,\r
- '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE,\r
- );\r
- \r
- $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_LIST] = array("</ul>","</ol>");\r
-##########################\r
-\r
- $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_SIMLIST] = \r
- array(\r
- "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE,\r
- "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE,\r
- "<p>" => PHPDOCUMENTOR_PDP_EVENT_P,\r
- "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR,\r
- "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP,\r
- "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD,\r
- "<b>" => PHPDOCUMENTOR_PDP_EVENT_B,\r
- "<i>" => PHPDOCUMENTOR_PDP_EVENT_I,\r
- "<br" => PHPDOCUMENTOR_PDP_EVENT_BR,\r
- '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE,\r
- );\r
-##########################\r
- \r
- $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_DOUBLECR] =\r
- array(\r
- "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE,\r
- "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE,\r
- "<b>" => PHPDOCUMENTOR_PDP_EVENT_B,\r
- "<i>" => PHPDOCUMENTOR_PDP_EVENT_I,\r
- "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR,\r
- "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP,\r
- "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD,\r
- "<br" => PHPDOCUMENTOR_PDP_EVENT_BR,\r
- "<p>" => PHPDOCUMENTOR_PDP_EVENT_P,\r
- '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE,\r
- );\r
- \r
-##########################\r
- $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_B] =\r
- array(\r
- "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE,\r
- "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE,\r
- "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR,\r
- "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP,\r
- "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD,\r
- "<br" => PHPDOCUMENTOR_PDP_EVENT_BR,\r
- '<i>' => PHPDOCUMENTOR_PDP_EVENT_I,\r
- '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE,\r
- );\r
- \r
- $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_B] = array("</b>");\r
-\r
-##########################\r
- $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_I] =\r
- array(\r
- "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE,\r
- "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE,\r
- "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR,\r
- "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP,\r
- "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD,\r
- "<br" => PHPDOCUMENTOR_PDP_EVENT_BR,\r
- '<b>' => PHPDOCUMENTOR_PDP_EVENT_B,\r
- '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE,\r
- );\r
- \r
- $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_I] = array("</i>");\r
-\r
-##########################\r
- $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_VAR] =\r
- array(\r
- "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE,\r
- "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE,\r
- "<i>" => PHPDOCUMENTOR_PDP_EVENT_I,\r
- "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP,\r
- "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD,\r
- "<br" => PHPDOCUMENTOR_PDP_EVENT_BR,\r
- '<b>' => PHPDOCUMENTOR_PDP_EVENT_B,\r
- '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE,\r
- );\r
- \r
- $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_VAR] = array("</var>");\r
-\r
-##########################\r
- $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_SAMP] =\r
- array(\r
- "<code>" => PHPDOCUMENTOR_PDP_EVENT_CODE,\r
- "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<pre>" => PHPDOCUMENTOR_PDP_EVENT_PRE,\r
- "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR,\r
- "<i>" => PHPDOCUMENTOR_PDP_EVENT_I,\r
- "<kbd>" => PHPDOCUMENTOR_PDP_EVENT_KBD,\r
- "<br" => PHPDOCUMENTOR_PDP_EVENT_BR,\r
- '<b>' => PHPDOCUMENTOR_PDP_EVENT_B,\r
- '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE,\r
- );\r
- \r
- $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_SAMP] = array("</samp>");\r
-\r
-##########################\r
- $this->pushEvent[PHPDOCUMENTOR_PDP_EVENT_KBD] =\r
- array(\r
- "<code" => PHPDOCUMENTOR_PDP_EVENT_CODE,\r
- "<ol>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<ul>" => PHPDOCUMENTOR_PDP_EVENT_LIST,\r
- "<pre" => PHPDOCUMENTOR_PDP_EVENT_PRE,\r
- "<var>" => PHPDOCUMENTOR_PDP_EVENT_VAR,\r
- "<samp>" => PHPDOCUMENTOR_PDP_EVENT_SAMP,\r
- "<i>" => PHPDOCUMENTOR_PDP_EVENT_I,\r
- "<br" => PHPDOCUMENTOR_PDP_EVENT_BR,\r
- '<b>' => PHPDOCUMENTOR_PDP_EVENT_B,\r
- '<<' => PHPDOCUMENTOR_PDP_EVENT_ESCAPE,\r
- );\r
- \r
- $this->popEvent[PHPDOCUMENTOR_PDP_EVENT_KBD] = array("</kbd>");\r
- }\r
- \r
- function getParserEventName ($value)\r
- { \r
- $lookup = array(\r
- PARSER_EVENT_NOEVENTS => "PARSER_EVENT_NOEVENTS",\r
- PHPDOCUMENTOR_PDP_EVENT_CODE => "PHPDOCUMENTOR_PDP_EVENT_CODE",\r
- PHPDOCUMENTOR_PDP_EVENT_P => "PHPDOCUMENTOR_PDP_EVENT_P",\r
- PHPDOCUMENTOR_PDP_EVENT_B => "PHPDOCUMENTOR_PDP_EVENT_B",\r
- PHPDOCUMENTOR_PDP_EVENT_I => "PHPDOCUMENTOR_PDP_EVENT_I",\r
- PHPDOCUMENTOR_PDP_EVENT_BR => "PHPDOCUMENTOR_PDP_EVENT_BR",\r
- PHPDOCUMENTOR_PDP_EVENT_VAR => "PHPDOCUMENTOR_PDP_EVENT_VAR",\r
- PHPDOCUMENTOR_PDP_EVENT_SAMP => "PHPDOCUMENTOR_PDP_EVENT_SAMP",\r
- PHPDOCUMENTOR_PDP_EVENT_KBD => "PHPDOCUMENTOR_PDP_EVENT_KBD",\r
- PHPDOCUMENTOR_PDP_EVENT_ESCAPE => "PHPDOCUMENTOR_PDP_EVENT_ESCAPE",\r
- PHPDOCUMENTOR_PDP_EVENT_ESCAPE_CODE => "PHPDOCUMENTOR_PDP_EVENT_ESCAPE_CODE",\r
- PHPDOCUMENTOR_PDP_EVENT_ESCAPE_PRE => "PHPDOCUMENTOR_PDP_EVENT_ESCAPE_PRE",\r
- PHPDOCUMENTOR_PDP_EVENT_DOUBLECR => "PHPDOCUMENTOR_PDP_EVENT_DOUBLECR",\r
- PHPDOCUMENTOR_PDP_EVENT_LIST => "PHPDOCUMENTOR_PDP_EVENT_LIST",\r
- PHPDOCUMENTOR_PDP_EVENT_PRE => "PHPDOCUMENTOR_PDP_EVENT_PRE",\r
- PHPDOCUMENTOR_PDP_EVENT_SIMLIST => "PHPDOCUMENTOR_PDP_EVENT_SIMLIST",\r
- );\r
- if (isset($lookup[$value]))\r
- return $lookup[$value];\r
- else return $value;\r
- }\r
-}\r
-\r
-?>\r