diff options
Diffstat (limited to 'buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/ParserPDF.inc')
-rwxr-xr-x | buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/ParserPDF.inc | 564 |
1 files changed, 0 insertions, 564 deletions
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/ParserPDF.inc b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/ParserPDF.inc deleted file mode 100755 index 1339b65a..00000000 --- a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/ParserPDF.inc +++ /dev/null @@ -1,564 +0,0 @@ -<?php -/** - * This class handles the XML-based CezPDF markup language created to allow - * templates for the PDFdefaultConverter - * - * phpDocumentor :: automatic documentation generator - * - * PHP versions 4 and 5 - * - * Copyright (c) 2002-2006 Gregory Beaver - * - * LICENSE: - * - * This library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Lesser General - * Public License as published by the Free Software Foundation; - * either version 2.1 of the License, or (at your option) any - * later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * @package Converters - * @subpackage PDFdefault - * @author Greg Beaver <cellog@php.net> - * @copyright 2002-2006 Gregory Beaver - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @version CVS: $Id: ParserPDF.inc 238276 2007-06-22 14:58:30Z ashnazg $ - * @filesource - * @link http://www.phpdoc.org - * @link http://pear.php.net/PhpDocumentor - * @since 1.2 - */ -/** when <text> is found in an ezText input */ -define('PHPDOCUMENTOR_PDF_EVENT_TEXT', 600); -/** when <text> is found in an ezText input */ -define('PHPDOCUMENTOR_PDF_STATE_TEXT', 700); -/** used for parsing stuff between <text> */ -define('PHPDOCUMENTOR_PDF_EVENT_CONTENT', 601); -/** used for parsing stuff between <text> */ -define('PHPDOCUMENTOR_PDF_STATE_CONTENT', 701); -/** when <font> is found in an ezText input */ -define('PHPDOCUMENTOR_PDF_EVENT_FONT', 602); -/** when <font> is found in an ezText input */ -define('PHPDOCUMENTOR_PDF_STATE_FONT', 702); -/** when <newpage/> is found in an ezText input */ -define('PHPDOCUMENTOR_PDF_EVENT_NEWPAGE', 603); -/** when <newpage/> is found in an ezText input */ -define('PHPDOCUMENTOR_PDF_STATE_NEWPAGE', 703); -/** when <pdffunction> is found in an ezText input */ -define('PHPDOCUMENTOR_PDF_EVENT_PDFFUNCTION', 604); -/** when <pdffunction> is found in an ezText input */ -define('PHPDOCUMENTOR_PDF_STATE_PDFFUNCTION', 704); - - -/** - * @package Converters - * @subpackage PDFdefault - * @author Greg Beaver <cellog@php.net> - * @since 1.2 - */ -class PDFParser extends Parser -{ - /** - * Mapping of event constants to events handler function names - * @var array - * @access private - */ - var $eventHandlers - = array( - PHPDOCUMENTOR_PDF_EVENT_TEXT => 'handleText', - PHPDOCUMENTOR_PDF_EVENT_FONT => 'handleFont', - PHPDOCUMENTOR_PDF_EVENT_NEWPAGE => 'handleNewPage', - PARSER_EVENT_QUOTE => 'handleQuote', - PARSER_EVENT_NOEVENTS => 'defaultHandler', - PHPDOCUMENTOR_PDF_EVENT_CONTENT => 'handleContent', - PHPDOCUMENTOR_PDF_EVENT_PDFFUNCTION => 'handlePDFfunction', - ); - - /** - * Sets up the wordparser for this class - */ - function PDFParser() - { - $this->wp = new WordParser; - $this->setupStates(); - } - /** - * Parse text for PDFParser XML tags, and add the text to the PDF file - * - * @param string text to parse for PDFParser XML tags - * @param string full path to the font directory - * @param phpdocpdf - * @param boolean determines whether output is saved in a variable or - * added directly to the output - * @staticvar integer used for recursion limiting if a handler for an event is not found - * @return bool - */ - function parse ($parse_data,$fontdir,&$pdf,$debug=false) - { - static $endrecur = 0; - $this->_debug = $debug; - - // initialize variables so E_ALL error_reporting doesn't complain - $pevent = 0; - $word = 0; - $this->p_vars['event_stack'] = new EventStack; - $this->p_flags['reset_quote_data'] = true; - $this->p_vars['options'] = false; - $this->p_vars['font_dir'] = $fontdir; - $this->p_vars['text_size'] = false; - $this->p_vars['pdf'] = &$pdf; - - $this->wp->setup($parse_data); - $this->wp->setWhitespace(true); - - do - { - $lpevent = $pevent; - $pevent = $this->p_vars['event_stack']->getEvent(); - if ($lpevent != $pevent) - { - $this->p_vars['last_pevent'] = $lpevent; - } - - if ($this->p_vars['last_pevent'] != $pevent) - { - // its a new event so the word parser needs to be reconfigured - $this->configWordParser($pevent); - } - - - $this->p_vars['last_word'] = $word; - $word = $this->wp->getWord(); - - if (PHPDOCUMENTOR_DEBUG == true) - { - echo "----------------\n"; - echo "LAST: |" . $this->p_vars['last_word'] . "|\n"; -// echo "INDEX: ".$this->p_vars['curpar']."\n"; - echo "PEVENT: " . $this->getParserEventName($pevent) . "\n"; - echo "LASTPEVENT: " . $this->getParserEventName($this->p_vars['last_pevent']) . "\n"; - echo $this->wp->getPos() . " WORD: |".$word."|\n\n"; - } - if (isset($this->eventHandlers[$pevent])) - { - $handle = $this->eventHandlers[$pevent]; - $this->$handle($word, $pevent); - } else - { - debug('WARNING: possible error, no ParserPDFParser handler for event number '.$pevent); - if ($endrecur++ == 25) - { - die("FATAL ERROR, recursion limit reached"); - } - } - } while (!($word === false)); - if (false) { - $fp = fopen("C:/Documents and Settings/Owner/Desktop/pdfsource.txt", "a"); - fwrite($fp, $this->wp->data); - fclose($fp); - } - } - - /**#@+ - * Event Handlers - * @param string token - * @param integer event constant - * @access private - */ - function defaultHandler($word, $pevent) - { - if ($this->checkEventPush($word, $pevent)) return; - } - - /** - * Handles <newpage /> - * @tutorial ParserPDF.cls#tags.newpage - */ - function handleNewPage($word, $pevent) - { - $this->p_vars['event_stack']->popEvent(); - $this->p_vars['pdf']->ezNewPage($this->_debug); - } - - /** - * Handles <text></text> - * @tutorial ParserPDF.cls#tags.text - */ - function handleText($word, $pevent) - { - $e = $this->checkEventPush($word, $pevent); - $e1 = $this->checkEventPop($word, $pevent); - if ($e == PARSER_EVENT_QUOTE) return; - if ($e1) - { - $this->p_flags['textcolor'] = false; - if (($a = $this->p_vars['savecolor']) != $this->p_vars['pdf']->getColor()) - { - $this->p_vars['pdf']->setColor($a['r'],$a['g'],$a['b']); - } - } - if ($this->p_vars['last_word'] == '<text') - { - // set up flags - $this->p_flags['paramval'] = false; - $this->p_flags['textcolor'] = false; - $this->p_vars['curparam'] = false; - $this->p_vars['savecolor'] = $this->p_vars['pdf']->getColor(); - $this->p_vars['options'] = array(); - unset($this->p_vars['quote_data']); - } - if (!$this->p_flags['paramval']) - { - if ($e || $e1) return; - if ($word == '=') - { -// debug('set paramval '.$this->p_vars['curparam']); - $this->p_flags['paramval'] = true; - return; - } - $this->p_vars['curparam'] = trim($word); - } else - { - if ($this->p_vars['last_pevent'] == PARSER_EVENT_QUOTE) - { - if ($this->p_vars['curparam'] == 'size') - { - $this->p_vars['text_size'] = (int)$this->p_vars['quote_data']; - $this->p_flags['paramval'] = false; - $this->p_vars['curparam'] = false; - if (!$e && !$e1) - { - $this->p_vars['curparam'] = trim($word); - } - unset($this->p_vars['quote_data']); - } elseif ($this->p_vars['curparam'] == 'color') - { - if ($a = $this->p_vars['pdf']->validHTMLColor($this->p_vars['quote_data'])) - { - $this->p_flags['textcolor'] = true; - $this->p_vars['pdf']->setHTMLColor($a); - } - } else - { - if ($this->p_vars['quote_data'] === (string)(int)$this->p_vars['quote_data']) $this->p_vars['quote_data'] = (int)$this->p_vars['quote_data']; -// debug('added '.$this->p_vars['curparam'].' = '.$this->p_vars['quote_data']); - $this->p_vars['options'][$this->p_vars['curparam']] = $this->p_vars['quote_data']; - $this->p_flags['paramval'] = false; - $this->p_vars['curparam'] = false; - if (!$e && !$e1) - { - $this->p_vars['curparam'] = trim($word); - } - unset($this->p_vars['quote_data']); - } - } - } - } - - /** - * handles <font></font> - * @tutorial ParserPDF.cls#tags.font - */ - function handleFont($word, $pevent) - { - $e = $this->checkEventPush($word, $pevent); - $e1 = $this->checkEventPop($word, $pevent); - if ($e == PARSER_EVENT_QUOTE) return; - if ($this->p_vars['last_word'] == '<font') - { - // set up flags - $this->p_flags['paramval'] = false; - $this->p_vars['curparam'] = false; - unset($this->p_vars['quote_data']); - } - if (!$this->p_flags['paramval']) - { - if ($e || $e1) return; - if ($word == '=') - { - //debug('set paramval '.$this->p_vars['curparam']); - $this->p_flags['paramval'] = true; - return; - } - $this->p_vars['curparam'] = trim($word); - } else - { - if ($this->p_vars['last_pevent'] == PARSER_EVENT_QUOTE) - { - if ($this->p_vars['curparam'] == 'face') - { - //debug('set face to '.$this->p_vars['font_dir'] . $this->p_vars['quote_data'] . '.afm'); - $this->p_vars['pdf']->selectFont($this->p_vars['font_dir'] . $this->p_vars['quote_data'] . '.afm'); - $this->p_flags['paramval'] = false; - $this->p_vars['curparam'] = false; - unset($this->p_vars['quote_data']); - } - } - } - } - - /** - * handles <pdffunction> - * @tutorial ParserPDF.cls#tags.pdffunction - */ - function handlePDFFunction($word, $pevent) - { - $e = $this->checkEventPush($word, $pevent); - $e1 = $this->checkEventPop($word, $pevent); - if ($e == PARSER_EVENT_QUOTE) return; - if ($this->p_vars['last_word'] == '<pdffunction:') - { - // set up flags - $this->p_flags['paramval'] = $this->p_flags['curparam'] = false; - $this->p_flags['returnval'] = false; - $this->p_vars['funcname'] = trim($word); -// debug("funcname is $word"); - $this->p_vars['options'] = array(); - unset($this->p_vars['quote_data']); - if ($e1) addErrorDie(PDERROR_PDFFUNCTION_NO_FUNC); - } - if (!$this->p_flags['paramval']) - { - if ($e1) - { // call function, no parameters - $func = $this->p_vars['funcname']; - if (!$func) addErrorDie(PDERROR_PDFFUNCTION_NO_FUNC); - if (method_exists($this->p_vars['pdf'],$func)) - { - if (count($this->p_vars['options'])) - { -// fancy_debug("calling function $func",$this->p_vars['options']); - $a = call_user_func_array(array(&$this->p_vars['pdf'],$func), $this->p_vars['options']); - } else - { -// debug("calling function $func"); - $a = $this->p_vars['pdf']->$func(); - } - if ($this->p_flags['returnval']) - { -// debug("setting returnvar ".$this->p_vars['return_varname']); - $this->tempvars[$this->p_vars['return_varname']] = $a; - } - } else - { - addWarning(PDERROR_PDF_METHOD_DOESNT_EXIST,$func); - } - return; - } - if ($e) return; - if ($word == '=') - { -// debug('set paramval '.$this->p_vars['curparam']); - $this->p_flags['paramval'] = true; - return; - } - $this->p_vars['curparam'] = trim($word); - } else - { - if ($this->p_vars['last_word'] == '=') - { // check to see if we should use a tempvar from a previous return - if (substr(trim($word),0,1) == '$') - { - if (substr(trim($word),0,7) == '$this->') - { // this is a pdf var - $a = substr(trim($word),7); - $a = $this->p_vars['pdf']->$a; - // debug("set option to $word"); - $this->p_vars['options'][] = $a; - $this->p_flags['paramval'] = false; - unset($this->p_vars['quote_data']); - } else - { // this is a tempvar - if (!isset($this->tempvars[substr(trim($word),1)])) - { - addErrorDie(PDERROR_PDF_TEMPVAR_DOESNT_EXIST,$this->p_vars['funcname'],trim($word),trim($word)); - } - $a = $this->tempvars[substr(trim($word),1)]; - // debug("set option to $word"); - $this->p_vars['options'][] = $a; - $this->p_flags['paramval'] = false; - unset($this->p_vars['quote_data']); - } - } - } else - { - if ($this->p_vars['last_pevent'] == PARSER_EVENT_QUOTE) - { - if ($this->p_vars['quote_data'] === (string)(int)$this->p_vars['quote_data']) - { - $this->p_vars['quote_data'] = (int)$this->p_vars['quote_data']; - } - if ($this->p_vars['curparam'] == 'return') - { -// debug("param is return"); - $this->p_vars['return_varname'] = $this->p_vars['quote_data']; - $this->p_flags['returnval'] = true; - } else - { -// fancy_debug("set option to arg",$this->p_vars['quote_data']); - $this->p_vars['options'][] = $this->p_vars['quote_data']; - } - $this->p_flags['paramval'] = false; - unset($this->p_vars['quote_data']); - } - } - if ($e1) - { // call function, with parameters - $func = $this->p_vars['funcname']; - if (method_exists($this->p_vars['pdf'],$func)) - { - if (count($this->p_vars['options'])) - { -// fancy_debug("calling function $func",$this->p_vars['options']); - if ($func == 'ezImage') { - // set padding to 5, width to 0, resize to none - $this->p_vars['options'][] = 5; - $this->p_vars['options'][] = 0; - $this->p_vars['options'][] = 'none'; - } - $a = call_user_func_array(array(&$this->p_vars['pdf'],$func), $this->p_vars['options']); - } else - { -// debug("calling function $func"); - $a = $this->p_vars['pdf']->$func(); - } - if ($this->p_flags['returnval']) - { -// debug("setting returnvar ".$this->p_vars['return_varname']); - $this->tempvars[$this->p_vars['return_varname']] = $a; - } - } else - { - addWarning(PDERROR_PDF_METHOD_DOESNT_EXIST,$func); - } - } - } - } - - /** - * Adds content to the <text> tag - */ - function handleContent($word, $pevent) - { - if ($e = $this->checkEventPush($word, $pevent)) - { - if ($e == PHPDOCUMENTOR_PDF_EVENT_FONT) - { // flush content - if (!isset($this->p_vars['content'])) return; - $this->p_vars['pdf']->_ezText($this->p_vars['content'],$this->p_vars['text_size'],$this->p_vars['options']); - unset($this->p_vars['content']); - } - return; - } - if ($this->checkEventPop($word, $pevent)) - { - $this->wp->backupPos($word); - if (!isset($this->p_vars['content'])) return; - $this->p_vars['pdf']->_ezText($this->p_vars['content'],$this->p_vars['text_size'],$this->p_vars['options']); - unset($this->p_vars['content']); - } else - { - if (!isset($this->p_vars['content'])) $this->p_vars['content'] = ''; - if (isset($this->p_vars['quote_data'])) - { - $this->p_vars['content'] .= $this->p_vars['quote_data']; - unset($this->p_vars['quote_data']); - } - $this->p_vars['content'] .= $word; - } - } - /**#@-*/ - /** - * setup the parser tokens, and the pushEvent/popEvent arrays - * @see $tokens, $pushEvent, $popEvent - */ - - function setupStates() - { - $this->tokens[STATE_NOEVENTS] = array("<text","<font","<newpage />","<newpage/>",'<pdffunction:','"'); - $this->tokens[PHPDOCUMENTOR_PDF_STATE_TEXT] = array(">","=",'"',"</text>"); - $this->tokens[PHPDOCUMENTOR_PDF_STATE_FONT] = array("/>","=",'"'); - $this->tokens[PHPDOCUMENTOR_PDF_STATE_CONTENT] = array("<font",'<pdffunction:',"</text>"); - $this->tokens[PHPDOCUMENTOR_PDF_STATE_PDFFUNCTION] = array('"',"/>","="," "); - $this->tokens[STATE_QUOTE] = array("\\\"","\\\\","\""); - $this->tokens[STATE_ESCAPE] = false;// this tells the word parser to just cycle - - // For each event word to event mapings - $this->pushEvent[PARSER_EVENT_QUOTE] = - array( - "\\" => PARSER_EVENT_ESCAPE - ); - $this->popEvent[PARSER_EVENT_QUOTE] = array("\""); -########################## - $this->pushEvent[PARSER_EVENT_NOEVENTS] = - array( - "<text" => PHPDOCUMENTOR_PDF_EVENT_TEXT, - "<font" => PHPDOCUMENTOR_PDF_EVENT_FONT, - "<newpage />" => PHPDOCUMENTOR_PDF_EVENT_NEWPAGE, - "<newpage/>" => PHPDOCUMENTOR_PDF_EVENT_NEWPAGE, - "<pdffunction:" => PHPDOCUMENTOR_PDF_EVENT_PDFFUNCTION, - '"' => PARSER_EVENT_QUOTE, - ); -########################## - $this->pushEvent[PHPDOCUMENTOR_PDF_EVENT_TEXT] = - array( - '"' => PARSER_EVENT_QUOTE, - '>' => PHPDOCUMENTOR_PDF_EVENT_CONTENT, - ); - - $this->popEvent[PHPDOCUMENTOR_PDF_EVENT_TEXT] = array("</text>"); -########################## - $this->pushEvent[PHPDOCUMENTOR_PDF_EVENT_FONT] = - array( - '"' => PARSER_EVENT_QUOTE, - ); - - $this->popEvent[PHPDOCUMENTOR_PDF_EVENT_FONT] = array("/>"); -########################## - $this->pushEvent[PHPDOCUMENTOR_PDF_EVENT_PDFFUNCTION] = - array( - '"' => PARSER_EVENT_QUOTE, - ); - - $this->popEvent[PHPDOCUMENTOR_PDF_EVENT_PDFFUNCTION] = array("/>"); -########################## - $this->pushEvent[PHPDOCUMENTOR_PDF_EVENT_CONTENT] = - array( - "<font" => PHPDOCUMENTOR_PDF_EVENT_FONT, - "<newpage />" => PHPDOCUMENTOR_PDF_EVENT_NEWPAGE, - "<newpage/>" => PHPDOCUMENTOR_PDF_EVENT_NEWPAGE, - "<pdffunction:" => PHPDOCUMENTOR_PDF_EVENT_PDFFUNCTION, - ); - - $this->popEvent[PHPDOCUMENTOR_PDF_EVENT_CONTENT] = array("</text>"); - } - - /** - * Return the name of the parser event - * @param integer - */ - function getParserEventName ($value) - { - $lookup = array( - PARSER_EVENT_NOEVENTS => "PARSER_EVENT_NOEVENTS", - PARSER_EVENT_QUOTE => "PARSER_EVENT_QUOTE", - PHPDOCUMENTOR_PDF_EVENT_TEXT => "PHPDOCUMENTOR_PDF_EVENT_TEXT", - PHPDOCUMENTOR_PDF_EVENT_CONTENT => "PHPDOCUMENTOR_PDF_EVENT_CONTENT", - PHPDOCUMENTOR_PDF_EVENT_FONT => "PHPDOCUMENTOR_PDF_EVENT_FONT", - PHPDOCUMENTOR_PDF_EVENT_PDFFUNCTION => "PHPDOCUMENTOR_PDF_EVENT_PDFFUNCTION", - ); - if (isset($lookup[$value])) - return $lookup[$value]; - else return $value; - } -} -?>
\ No newline at end of file |