diff options
Diffstat (limited to 'buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/PDFdefaultConverter.inc')
-rwxr-xr-x | buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/PDFdefaultConverter.inc | 981 |
1 files changed, 981 insertions, 0 deletions
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/PDFdefaultConverter.inc b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/PDFdefaultConverter.inc new file mode 100755 index 00000000..00a1726e --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Converters/PDF/default/PDFdefaultConverter.inc @@ -0,0 +1,981 @@ +<?php +/** + * Outputs documentation in PDF format + * + * 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: PDFdefaultConverter.inc 236747 2007-05-31 02:02:42Z ashnazg $ + * @filesource + * @link http://www.phpdoc.org + * @link http://pear.php.net/PhpDocumentor + * @since 1.2 + */ +/** + * The Cezpdf class library + */ +include_once('phpDocumentor/Converters/PDF/default/class.phpdocpdf.php'); +/** + * PDF output converter. + * This Converter takes output from the {@link Parser} and converts it to PDF-ready output for use with {@link Cezpdf}. + * This is now beta code + * + * @package Converters + * @subpackage PDFdefault + * @author Greg Beaver <cellog@php.net> + * @since 1.1 + * @version $Id: PDFdefaultConverter.inc 236747 2007-05-31 02:02:42Z ashnazg $ + * @todo Implement links to conflicts/inheritance + */ +class PDFdefaultConverter extends Converter +{ + /** + * default PDF Converter wants elements sorted by type as well as alphabetically + * @see Converter::$sort_page_contents_by_type + * @var boolean + */ + var $sort_absolutely_everything = true; + var $leftindex = array('classes' => false, 'pages' => false, 'functions' => false, 'defines' => false, 'globals' => false); + var $pagepackage_pagenums = array(); + var $classpackage_pagenums = array(); + /** @var string always PDF */ + var $outputformat = 'PDF'; + /** @var string always default */ + var $name = 'default'; + var $curpagepackage = false; + var $curclasspackage = false; + var $smarty_dir; + /** + * @var Cezpdf + */ + var $pdf = false; + var $ric_set = array(); + /** + * Source files for appendix C are stored here + * + * Format: array(array(package => packagename, code => array(highlightedsource code 1, ...))) + * @var array + */ + var $_sourcecode; + /** + * @see Converter::Converter() + */ + function PDFdefaultConverter(&$allp, &$packp, &$classes, &$procpages, $po, $pp, $qm, $targetDir, $templateDir, $title) + { + Converter::Converter($allp, $packp, $classes, $procpages, $po, $pp, $qm, $targetDir, $templateDir, $title); + $this->pdf =& new phpdocpdf($this, $this->getConverterDir() . PATH_DELIMITER .'templates/fonts/','letter'); + $this->pdf->selectFont($this->getConverterDir() . PATH_DELIMITER .'templates/fonts/Helvetica.afm'); +// put a line top and bottom on all the pages + $this->pdf->ezSetMargins(50,70,50,50); + $template = &$this->newSmarty(); + $this->pdf->ezText($template->fetch('footer.tpl')); + $template->assign('title',$title); + if (file_exists($this->templateDir . 'templates' . PATH_DELIMITER . 'media'. PATH_DELIMITER .'logo.jpg')) + { + $template->assign('logo',$this->templateDir . 'templates' . PATH_DELIMITER . 'media'. PATH_DELIMITER .'logo.jpg'); + } + $this->pdf->ezText($template->fetch('title_page.tpl')); + unset($template); + } + + function writeSource($path, $value) + { + $templ = &$this->newSmarty(); + $pathinfo = $this->proceduralpages->getPathInfo($path, $this); + $templ->assign('source',$value); + $templ->assign('package',$pathinfo['package']); + $templ->assign('subpackage',$pathinfo['subpackage']); + $templ->assign('name',$pathinfo['name']); + $templ->assign('source_loc',$pathinfo['source_loc']); + $templ->assign('docs',$pathinfo['docs']); + $templ->assign('dest', $this->getFileSourceName($path)); + $this->setSourcePaths($path); + $this->_sourcecode[$pathinfo['package']][] = $templ->fetch('filesource.tpl'); + } + + function postProcess($text) + { + return htmlspecialchars($text); + } + + function writeExample($title, $path, $source) + { + $templ = &$this->newSmarty(); + $templ->assign('source',$source); + if (empty($title)) + { + $title = 'example'; + addWarning(PDERROR_EMPTY_EXAMPLE_TITLE, $path, $title); + } + $templ->assign('title',$title); + $templ->assign('file',$path); + $this->pdf->ezText($templ->fetch('examplesource.tpl')); + } + + function getExampleLink($path, $title) + { + return ''; + return $this->returnLink('{$subdir}__examplesource' . PATH_DELIMITER . 'exsource_'.$path.'.html',$title); + } + + function getSourceLink($path) + { +// var_dump(htmlentities('<c:ilink:'.$this->getFileSourceName($path).'>Source Code for this file</c:ilink>')); + return '<c:ilink:'.$this->getFileSourceName($path).'>Source Code for this file</c:ilink>'; + } + + function getFileSourceName($path, $anchor = '') + { + return urlencode($anchor . parent::getFileSourceName($path)); + } + + /** + * Retrieve a Converter-specific anchor to a segment of a source code file + * parsed via a {@tutorial tags.filesource.pkg} tag. + * @param string full path to source file + * @param string name of anchor + * @param string link text, if this is a link + * @param boolean returns either a link or a destination based on this + * parameter + * @return string link to an anchor, or the anchor + */ + function getSourceAnchor($sourcefile,$anchor,$text = '',$link = false) + { + if ($link) + { + return '<c:ilink:' . $this->getFileSourceName($sourcefile, $anchor). '>' . $text . '</c:ilink>'; + } else + { + return '</text><pdffunction:addDestination arg="'.$this->getFileSourceName($sourcefile, $anchor).'" arg="FitH" arg=$this->y /><text size="8">'; + } + } + + /** + * Returns a bookmark using Cezpdf 009 + * + * @param abstractLink a descendant of abstractlink should be passed, and never text + * @param string text to display in the link + */ + function returnSee(&$element, $eltext = false) + { + if (!$element) return false; + if (!$eltext) + { + $eltext = ''; + switch($element->type) + { + case 'tutorial' : + $eltext = $element->title; + break; + case 'method' : + case 'var' : + case 'const' : + $eltext .= $element->class.'::'; + case 'page' : + case 'define' : + case 'class' : + case 'function' : + case 'global' : + default : + $eltext .= $element->name; + if ($element->type == 'function' || $element->type == 'method') $eltext .= '()'; + break; + } + } + switch ($element->type) + { + case 'tutorial' : + return '<c:ilink:'.urlencode($element->type.$element->package.$element->subpackage.$element->name.$element->section).'>'.$eltext.'</c:ilink>'; + case 'page' : + return '<c:ilink:'.urlencode($element->type.$element->package.$element->path).'>'.$eltext.'</c:ilink>'; + case 'define' : + case 'global' : + case 'class' : + case 'function' : + return '<c:ilink:'.urlencode($element->type.$element->package.$element->name).'>'.$eltext.'</c:ilink>'; + case 'method' : + case 'var' : + case 'const' : + return '<c:ilink:'.urlencode($element->type.$element->package.$element->class.'::'.$element->name).'>'.$eltext.'</c:ilink>'; + } + return $element; + } + + /** + * @param string + * @param string + * @return string <c:alink:$link>$text</c:alink> + */ + function returnLink($link,$text) + { + return "<c:alink:$link>$text</c:alink>"; + } + + /** + * Convert README/INSTALL/CHANGELOG file contents to output format + * @param README|INSTALL|CHANGELOG + * @param string contents of the file + */ + function Convert_RIC($name, $contents) + { + $this->ric_set[$name] = $contents; + } + + function convertDocBlock(&$element) + { + if (!$element->docblock) return; + $template = &$this->newSmarty(); + + $nopackage = true; + if ($element->type == 'page' || $element->type == 'class') $nopackage = false; + $tagses = $element->docblock->listTags(); + $tags = array(); + $names = array('staticvar' => 'Static Variable','deprec' => 'Deprecated','abstract' => 'Abstract Element','todo' => 'TODO'); + if (!$nopackage) + { + $tags[] = array('keyword' => 'Package','data' => $element->docblock->package); + if (!empty($element->docblock->subpackage)) $tags[] = array('keyword' => 'Sub-Package','data' => $element->docblock->subpackage); + } + if ($element->docblock->var) + { + $a = $element->docblock->var->Convert($this); + if (!empty($a)) + $tags[] = array('keyword' => 'Var', 'data' => $a); + } + if ($element->docblock->funcglobals) + foreach($element->docblock->funcglobals as $global => $val) + { + if ($a = $this->getGlobalLink($global,$element->docblock->package)) + { + $global = $a; + } + $b = Converter::getLink($val[0]); + if (is_object($b) && phpDocumentor_get_class($b) == 'classlink') + { + $val[0] = $this->returnSee($b); + } + $tags[] = array('keyword' => 'Global Variable Used','data' => $val[0].' '.$global.': '.$val[1]->Convert($this)); + } + if ($element->docblock->statics) + foreach($element->docblock->statics as $static => $val) + { + $a = $val->Convert($this); + $tags[] = array('keyword' => 'Static Variable Used','data' => $val->converted_returnType.' '.$static.': '.$a); + } + if ($element->docblock->properties) + foreach($element->docblock->properties as $property => $val) + { + $a = $val->Convert($this); + $tags[] = array('keyword' => ucfirst($val->keyword),'data' => $val->converted_returnType.' '.$property.': '.$a); + } + foreach($tagses as $tag) + { + if (isset($names[$tag->keyword])) $tag->keyword = $names[$tag->keyword]; + $tags[] = array("keyword" => ucfirst($tag->keyword),"data" => $tag->Convert($this)); + } + $utags = array(); + foreach($element->docblock->unknown_tags as $keyword => $t) + { + foreach($t as $tag) + $utags[] = array('keyword' => $keyword, 'data' => $tag->Convert($this)); + } + if ($element->type == 'packagepage') return; + $sdesc = $element->docblock->getSDesc($this); + $desc = $element->docblock->getDesc($this); + $template->assign('utags',$utags); + $template->assign('tags',$tags); + $template->assign('sdesc',$sdesc); + $template->assign('desc',$desc); + if (false) // $element->type != 'page') + { + if ($element->type != 'var' && $element->type != 'method') + { + $this->pdf->addDestination(urlencode($element->type.$element->docblock->package.$element->name),'FitH',$this->pdf->y); + } else + { + $this->pdf->addDestination(urlencode($element->type.$element->docblock->package.$element->class.'::'.$element->name),'FitH',$this->pdf->y); + } + } elseif (false) + { + $this->pdf->addDestination(urlencode('page'.$element->parent->package.$element->parent->getPath()),'FitH',$this->pdf->y); + } + $this->convertParams($element); + $this->pdf->ezText($template->fetch('docblock.tpl')); + } + + function convertParams(&$element) + { + if ($element->type != 'function' && $element->type != 'method') return; + if (count($element->docblock->params)) + { + $template = &$this->newSmarty(); + $params = array(); + if (count($element->docblock->params)) + foreach($element->docblock->params as $param => $val) + { + $a = $val->Convert($this); + $params[] = array("name" => $param,"type" => $val->converted_returnType,"description" => $a); + } + $template->assign('params',$params); + $this->pdf->ezText($template->fetch('params.tpl')); + } + } + + function convertGlobal(&$element) + { + $sdesc = ''; + if ($element->docblock->sdesc) + { + $sdesc = $element->docblock->sdesc->Convert($this); + } + $template = &$this->newSmarty(); + $template->assign('linenumber',$element->getLineNumber()); + if ($this->hasSourceCode($element->getPath())) + $template->assign('slink',$this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true)); + else + $template->assign('slink', false); + $template->assign('dest', urlencode($element->type.$element->docblock->package.$element->name)); + $template->assign('type',$element->getDataType($this)); + $template->assign('name',$element->name); + $template->assign('value',$this->getGlobalValue($element->getValue())); + $template->assign('sdesc',$sdesc); + $this->pdf->ezText($template->fetch('global.tpl')); + $this->convertDocBlock($element); + } + + function getGlobalValue($value) + { + return parent::getGlobalValue(htmlspecialchars($value)); + } + + function convertMethod(&$element) + { + $sdesc = ''; + if ($element->docblock->sdesc) + { + $sdesc = $element->docblock->sdesc->Convert($this); + } + $params = array(); + if (count($element->docblock->params)) + foreach($element->docblock->params as $param => $val) + { + $a = $val->Convert($this); + $params[$param] = array("var" => $param,"datatype" => $val->converted_returnType,"data" => $a); + } + if ($element->docblock->return) + { + if (!$element->docblock->return->returnType) $element->docblock->return->returnType = 'void'; + } + $template = &$this->newSmarty(); + $template->assign('class',$this->class); + $template->assign('constructor',$element->isConstructor); + $template->assign('dest', urlencode($element->type.$element->docblock->package.$element->class.'::'.$element->name)); + $template->assign('linenumber',$element->getLineNumber()); + if ($this->hasSourceCode($element->getPath())) + $template->assign('slink',$this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true)); + else + $template->assign('slink',false); + $ret = 'void'; + if ($element->docblock->return) + { + $ret = $element->docblock->return->returnType; + } + $template->assign('return',$ret); + $template->assign('functioncall',$element->getFunctionCall()); + $template->assign('intricatefunctioncall',$element->getIntricateFunctionCall($this,$params)); + $template->assign('sdesc',$sdesc); + $this->pdf->ezText($template->fetch('method.tpl')); + $this->convertDocBlock($element); + } + + function convertVar(&$element) + { + $sdesc = ''; + if ($element->docblock->sdesc) + { + $sdesc = $element->docblock->sdesc->Convert($this); + } + $template = &$this->newSmarty(); + $template->assign('class',$this->class); + $template->assign('linenumber',$element->getLineNumber()); + if ($this->hasSourceCode($element->getPath())) + $template->assign('slink',$this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true)); + else + $template->assign('slink',false); + $template->assign('type',$element->docblock->var->returnType); + $template->assign('name',$element->name); + $template->assign('dest', urlencode($element->type.$element->docblock->package.$element->class.'::'.$element->name)); + $template->assign('value',$element->value); + $template->assign('sdesc',$sdesc); + $this->pdf->ezText($template->fetch('var.tpl')); + $this->convertDocBlock($element); + } + + function convertConst(&$element) + { + $sdesc = ''; + if ($element->docblock->sdesc) + { + $sdesc = $element->docblock->sdesc->Convert($this); + } + $template = &$this->newSmarty(); + $template->assign('class',$this->class); + $template->assign('linenumber',$element->getLineNumber()); + if ($this->hasSourceCode($element->getPath())) + $template->assign('slink',$this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true)); + else + $template->assign('slink',false); + $template->assign('name',$element->name); + $template->assign('dest', urlencode($element->type.$element->docblock->package.$element->class.'::'.$element->name)); + $template->assign('value',$element->value); + $template->assign('sdesc',$sdesc); + $this->pdf->ezText($template->fetch('const.tpl')); + $this->convertDocBlock($element); + } + + function convertClass(&$element) + { + $template = &$this->newSmarty(); + if ($this->curclasspackage != $element->docblock->package) + { + $template->assign('includeheader',true); + if (isset($this->package_pages[$element->docblock->package])) + { + $template->assign('ppage',$this->package_pages[$element->docblock->package]); + $template->assign('isclass',true); + unset($this->package_pages[$element->docblock->package]); + } + $template->assign('classeslink',rawurlencode("Package ".$element->docblock->package." Classes")); + } + $sdesc = ''; + if ($element->docblock->sdesc) + { + $sdesc = $element->docblock->sdesc->Convert($this); + } + $this->curclasspackage = $element->docblock->package; + $template->assign('dest', urlencode($element->type.$element->docblock->package.$element->name)); + $template->assign('package',$element->docblock->package); + $template->assign('linenumber',$element->getLineNumber()); + if ($this->hasSourceCode($element->getPath())) + $template->assign('slink',$this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true)); + else + $template->assign('slink',false); + $template->assign('name',$element->name); + $template->assign('sdesc',$sdesc); + $this->pdf->ezText($template->fetch('class.tpl')); + $this->convertDocBlock($element); + } + + function convertInclude(&$element) + { + $template = &$this->newSmarty(); + $template->assign('linenumber',$element->getLineNumber()); + if ($this->hasSourceCode($element->getPath())) + $template->assign('slink',$this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true)); + else + $template->assign('slink',false); + $template->assign('name',$element->name); + $template->assign('value',$this->getIncludeValue($element->getValue(), $element->getPath())); + $this->pdf->ezText($template->fetch('include.tpl')); + $this->convertDocBlock($element); + } + + function convertFunction(&$element) + { + $sdesc = ''; + if ($element->docblock->sdesc) + { + $sdesc = $element->docblock->sdesc->Convert($this); + } + $params = array(); + if (count($element->docblock->params)) + foreach($element->docblock->params as $param => $val) + { + $a = $val->Convert($this); + $params[$param] = array("var" => $param,"datatype" => $val->converted_returnType,"data" => $a); + } + if (!$element->docblock->return) + { + $element->docblock->return->returnType = 'void'; + } + $template = &$this->newSmarty(); + $template->assign('dest', urlencode($element->type.$element->docblock->package.$element->name)); + $template->assign('linenumber',$element->getLineNumber()); + if ($this->hasSourceCode($element->getPath())) + $template->assign('slink',$this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true)); + else + $template->assign('slink',false); + $template->assign('return',$element->docblock->return->returnType); + $template->assign('functioncall',$element->getFunctionCall()); + $template->assign('intricatefunctioncall',$element->getIntricateFunctionCall($this,$params)); + $template->assign('sdesc',$sdesc); + $this->pdf->ezText($template->fetch('function.tpl')); + $this->convertDocBlock($element); + } + + function convertDefine(&$element) + { + $sdesc = ''; + if ($element->docblock->sdesc) + { + $sdesc = $element->docblock->sdesc->Convert($this); + } + $template = &$this->newSmarty(); + $template->assign('linenumber',$element->getLineNumber()); + if ($this->hasSourceCode($element->getPath())) + $template->assign('slink',$this->getSourceAnchor($element->getPath(),$element->getLineNumber(),$element->getLineNumber(),true)); + else + $template->assign('slink',false); + $template->assign('name',$element->name); + $template->assign('dest', urlencode($element->type.$element->docblock->package.$element->name)); + $template->assign('value',$element->value); + $template->assign('sdesc',$sdesc); + $this->pdf->ezText($template->fetch('define.tpl')); + $this->convertDocBlock($element); + } + + function convertPage(&$element) + { + $template = &$this->newSmarty(); + $template->assign('includeheader',false); + $sdesc = ''; + if ($element->docblock->sdesc) + { + $sdesc = $element->docblock->sdesc->Convert($this); + } + if (count($element->elements) || ($sdesc) || count($element->docblock->tags)) + { + if ($this->curpagepackage != $element->parent->package) + { + $template->assign('includeheader',true); + if (isset($this->package_pages[$element->parent->package])) + { + $template->assign('ppage',$this->package_pages[$element->parent->package]); + unset($this->package_pages[$element->parent->package]); + } + } + $this->curpagepackage = $element->parent->package; + $template->assign('dest', urlencode('page'.$element->parent->package.$element->parent->getPath())); + $template->assign('sdesc',$sdesc); + $template->assign('package',$element->parent->package); + $template->assign('name',$element->parent->file); + $this->pdf->ezText($template->fetch('page.tpl')); + $this->convertDocBlock($element); + } + } + + + /** + * Used to translate an XML DocBook tag from a tutorial by reading the + * options.ini file for the template. + * @param string tag name + * @param string any attributes Format: array(name => value) + * @param string the tag contents, if any + * @param string the tag contents, if any, unpost-processed + * @return string + */ + function TranslateTag($name,$attr,$cdata,$unconvertedcdata) + { + if ($name == 'example' && @$attr['role'] == 'html') + { + $cdata = htmlspecialchars($cdata); + $unconvertedcdata = htmlspecialchars($unconvertedcdata); + } + if ($name == 'programlisting' && @$attr['role'] == 'php') + { + $unconvertedcdata = strtr($unconvertedcdata, array_flip(get_html_translation_table(HTML_SPECIALCHARS))); + $a = parent::TranslateTag($name, $attr, $cdata, $unconvertedcdata); +// var_dump(htmlspecialchars($cdata), htmlspecialchars($unconvertedcdata), htmlspecialchars($a)); + return $a; + } + return parent::TranslateTag($name, $attr, $cdata, $unconvertedcdata); + } + + function getPageName(&$element) + { + if (phpDocumentor_get_class($element) == 'parserpage') return $element->getName(); + return $element->parent->getName(); + } + + function getTutorialId($package,$subpackage,$tutorial,$id) + { + return 'tutorial'.$package.$subpackage.$tutorial.$id; + } + + function getCData($value) + { + return str_replace(array('<c:','<C:'),array("<c:","<C:"),$value); + } + + /** + * @deprecated html package pages just don't work with PDF, use {@tutorial tutorials.pkg} + */ + function convertPackagepage(&$element) + { + $x = $element->Convert($this); + $x = substr($x,strpos($x,'<body')); + $this->package_pages[$element->package] = trim(substr($x,strpos($x,'>') + 1,strpos($x,'</body>') - 6)); + } + + function convertTutorial(&$element) + { + $x = $element->Convert($this, true); + $template = &$this->newSmarty(); + $template->assign('package',$element->package); + $template->assign('subpackage',$element->subpackage); + $template->assign('contents',$x); + $template->assign('title',$element->getTitle($this)); + $template->assign('child',$element->parent); + if (isset($element->parent->parent)) $template->assign('hasparent',$element->parent->parent); + $template->assign('element',$element); + $this->pdf->ezText($template->fetch('tutorial.tpl')); + } + + /** + * returns a template-enabled array of class trees + * + * @param string $package package to generate a class tree for + * @see $roots, getRootTree() + */ + function generateFormattedClassTrees($package) + { + if (!isset($this->roots[$package])) return array(); + $roots = $trees = array(); + $roots = $this->roots[$package]; + for($i=0;$i<count($roots);$i++) + { + $trees[] = array('class' => $roots[$i],'class_tree' => "<ul>\n".$this->getRootTree($this->getSortedClassTreeFromClass($roots[$i],$package,''),$package)."</ul>\n"); + } + return $trees; + } + + /** + * return formatted class tree for the Class Trees page + * + * @param array $tree output from {@link getSortedClassTreeFromClass()} + * @see Classes::$definitechild, generateFormattedClassTrees() + * @return string + */ + function getRootTree($tree,$package) + { + if (!$tree) return ''; + $my_tree = ''; + $cur = '#root'; + $lastcur = array(false); + $kids = array(); + $dopar = false; + if ($tree[$cur]['parent']) + { + $dopar = true; + if (!is_object($tree[$cur]['parent'])) + { +// debug("parent ".$tree[$cur]['parent']." not found"); + $my_tree .= '<li>' . $tree[$cur]['parent'] .'<ul>'; + } + else + { +// debug("parent ".$this->returnSee($tree[$cur]['parent'], false, false)." in other package"); + $my_tree .= '<li>' . $this->returnSee($tree[$cur]['parent'], false, false); + if ($tree[$cur]['parent']->package != $package) $my_tree .= ' <b>(Different package)</b><ul>'; + } + } + do + { +// fancy_debug($cur,$lastcur,$kids); + if (count($tree[$cur]['children'])) + { +// debug("$cur has children"); + if (!isset($kids[$cur])) + { +// debug("set $cur kids"); + $kids[$cur] = 1; + $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link'], false, false); + $my_tree .= '<ul>'."\n"; + } + array_push($lastcur,$cur); + list(,$cur) = each($tree[$cur]['children']); +// var_dump('listed',$cur); + if ($cur) + { + $cur = $cur['package'] . '#' . $cur['class']; +// debug("set cur to child $cur"); +// $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link'], false, false); + continue; + } else + { +// debug("end of children for $cur"); + $cur = array_pop($lastcur); + $cur = array_pop($lastcur); + $my_tree .= '</ul></li>'."\n"; + if ($dopar && ($cur == '#root' || !$cur)) $my_tree .= '</ul></li>'; + } + } else + { +// debug("$cur has no children"); + $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link'], false, false)."</li>"; + if ($dopar && $cur == '#root') $my_tree .= '</ul></li>'; + $cur = array_pop($lastcur); + } + } while ($cur); + return $my_tree; + } + + /** + * calls {@link Cezpdf::ezOutput()} and writes documentation.pdf to targetDir + */ + function Output($title = 'Generated Documentation') + { + phpDocumentor_out("Generating PDF file.."); + flush(); + $template = &$this->newSmarty(); + $this->pdf->ezText($template->fetch('appendix_title_page.tpl')); + $trees = array(); + foreach($this->all_packages as $package => $rest) + { + if (!isset($this->pkg_elements[$package])) continue; + $a = array(); + phpDocumentor_out('.'); + flush(); + $a['package'] = $package; + $a["trees"] = $this->generateFormattedClassTrees($package); + $trees[] = $a; + } + $template->assign('trees',$trees); + $this->pdf->ezText($template->fetch('classtree.tpl')); + phpDocumentor_out('.'); + if (count($this->ric_set)) + $this->pdf->ezText($template->fetch('ric_title_page.tpl')); + foreach($this->ric_set as $name => $contents) + { + $template->assign('contents',$contents); + $template->assign('name',$name); + $this->pdf->ezText($template->fetch('ric.tpl')); + } + if (count($this->_sourcecode)) + { + $this->pdf->ezText($template->fetch('source_title_page.tpl')); + $template->assign('source',$this->_sourcecode); + $this->pdf->ezText($template->fetch('source_loop.tpl')); + } + flush(); + if (count($this->todoList)) + { + $todolist = array(); + foreach($this->todoList as $package => $alltodos) + { + foreach($alltodos as $todos) + { + $converted = array(); + $converted['link'] = $this->returnSee($todos[0]); + if (!is_array($todos[1])) + { + $converted['todos'][] = $todos[1]->Convert($this); + } else + { + foreach($todos[1] as $todo) + { + $converted['todos'][] = $todo->Convert($this); + } + } + $todolist[$package][] = $converted; + } + } + $template->assign('todos',$todolist); + + $this->pdf->ezText($template->fetch('todolist.tpl')); + } + if (false) { + $fp = @fopen("C:/Documents and Settings/Owner/Desktop/pdfsourceorig.txt",'w'); + if ($fp) + { + $a = $this->pdf->ezOutput(true); // debug + fwrite($fp, $a, strlen($a)); + fclose($fp); + } + } + $this->pdf->setupTOC(); + $template->assign('contents',$this->pdf->reportContents); + $this->pdf->ezText($template->fetch('toc.tpl')); + $x = $this->pdf->ezOutput(false, $template); + phpDocumentor_out("done\n"); + flush(); + $this->writeFile("documentation.pdf", $x, true); + } + + function mystrnatcasecmp($a,$b) + { + return strnatcasecmp($a[0],$b[0]); + } + + + /** + * @param string name of class + * @param string package name + * @param string full path to look in (used in index generation) + * @return mixed false if not found, or an html a link to the class's documentation + * @see parent::getClassLink() + */ + function getClassLink($expr,$package, $file = false,$text = false) + { + $a = Converter::getClassLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of function + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @return mixed false if not found, or an html a link to the function's documentation + * @see parent::getFunctionLink() + */ + function getFunctionLink($expr,$package, $file = false,$text = false) + { + $a = Converter::getFunctionLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of define + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @return mixed false if not found, or an html a link to the define's documentation + * @see parent::getDefineLink() + */ + function getDefineLink($expr,$package, $file = false,$text = false) + { + $a = Converter::getDefineLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of global variable + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @return mixed false if not found, or an html a link to the global variable's documentation + * @see parent::getGlobalLink() + */ + function getGlobalLink($expr,$package, $file = false,$text = false) + { + $a = Converter::getGlobalLink($expr,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of procedural page + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @return mixed false if not found, or an html a link to the procedural page's documentation + * @see parent::getPageLink() + */ + function getPageLink($expr,$package, $path = false,$text = false) + { + $a = Converter::getPageLink($expr,$package,$path); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of method + * @param string class containing method + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @return mixed false if not found, or an html a link to the method's documentation + * @see parent::getMethodLink() + */ + function getMethodLink($expr,$class,$package, $file = false,$text = false) + { + $a = Converter::getMethodLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of var + * @param string class containing var + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the var's documentation + * @see parent::getVarLink() + */ + function getVarLink($expr,$class,$package, $file = false,$text = false) + { + $a = Converter::getVarLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + /** + * @param string name of class constant + * @param string class containing class constant + * @param string package name + * @param string full path to look in (used in index generation) + * @param boolean deprecated + * @param boolean return just the URL, or enclose it in an html a tag + * @return mixed false if not found, or an html a link to the var's documentation + * @see parent::getConstLink() + */ + function getConstLink($expr,$class,$package, $file = false,$text = false) + { + $a = Converter::getConstLink($expr,$class,$package,$file); + if (!$a) return false; + return $this->returnSee($a, $text); + } + + function setTemplateDir($dir) + { + Converter::setTemplateDir($dir); + $this->smarty_dir = $this->templateDir; + } + + /** @return 1 always the same */ + function getState() + { + return 1; + } + + /** + * @see parent::unmangle() + */ + function unmangle($notused,$source) + { +// $source = str_replace("\n","<mybr>",$source); + return $source; + } +} +?>
\ No newline at end of file |