removed mods directory from the ATutor codebase
[atutor.git] / mods / phpdoc2 / PhpDocumentor / phpDocumentor / ParserDescCleanup.inc
diff --git a/mods/phpdoc2/PhpDocumentor/phpDocumentor/ParserDescCleanup.inc b/mods/phpdoc2/PhpDocumentor/phpDocumentor/ParserDescCleanup.inc
deleted file mode 100644 (file)
index bea9f72..0000000
+++ /dev/null
@@ -1,1486 +0,0 @@
-<?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 &lt;p&gt; 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