Source for file CHMdefaultConverter.inc
Documentation is available at CHMdefaultConverter.inc
 * CHM (Compiled Help Manual) output converter for Smarty Template.  
 * phpDocumentor :: automatic documentation generator  
 * Copyright (c) 2003-2006 Andrew Eddie, Greg Beaver  
 * 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  
 * 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  
 * @copyright  2000-2006 Joshua Eichorn, Gregory Beaver  
 * @license    http://www.opensource.org/licenses/lgpl-license.php LGPL  
 * @version    CVS: $Id: CHMdefaultConverter.inc 317233 2011-09-24 04:30:11Z ashnazg $  
 * @link       http://www.phpdoc.org  
 * @link       http://pear.php.net/PhpDocumentor  
 * Generates files that MS HTML Help Worshop can use to create a MS Windows  
 * compiled help file (CHM)  
 * The free MS HTML Help compiler takes the project file (phpdoc.hhp) and reads  
 * the table of contents file specified in the project (which is always contents.hhc  
 * in phpDocumentor).  When the converter reaches stable state, it will also  
 * output an index file index.hhk.  The free download for MS HTML Help Workshop  
 * @link http://www.microsoft.com/downloads/release.asp?releaseid=33071 MS HTML Help Workshop download  
 * @version $Revision: 317233 $  
     * CHMdefaultConverter wants elements sorted by type as well as alphabetically  
     * @see Converter::$sort_page_contents_by_type  
     * indexes of elements by package that need to be generated  
    var $leftindex = 
array('classes' => 
true, 'pages' => 
true, 'functions' => 
true, 'defines' => 
false, 'globals' => 
false);  
     * output directory for the current procedural page being processed  
     * target directory passed on the command-line.  
     * {@link $targetDir} is malleable, always adding package/ and package/subpackage/ subdirectories onto it.  
     * output directory for the current class being processed  
     * array of converted package page names.  
     * Used to link to the package page in the left index  
     * @var array Format: array(package => 1)  
     * controls formatting of parser informative output  
     * "Converting /path/to/file.php... Procedural Page Elements... Classes..."  
     * Since CHMdefaultConverter outputs files while converting, it needs to send a \n to start a new line.  However, if there  
     * is more than one class, output is messy, with multiple \n's just between class file output.  This variable prevents that  
     * contains all of the template procedural page element loop data needed for the current template  
     * contains all of the template class element loop data needed for the current template  
     * Table of Contents entry for index.hhk  
     * sets {@link $base_dir} to $targetDir  
    function CHMdefaultConverter(&$allp, &$packp, &$classes, &$procpages, $po, $pp, $qm, $targetDir, $templateDir, $title)  
        Converter::Converter($allp, $packp, $classes, $procpages,$po, $pp, $qm, $targetDir, $templateDir, $title);  
     * @deprecated in favor of PHP 4.3.0+ tokenizer-based source highlighting  
        $sourcecode = 
str_replace('<code>','<pre>',$sourcecode);  
        $sourcecode = 
str_replace('</code>','</pre>',$sourcecode);  
     * @param string full path to the source file  
     * @param string fully highlighted source code  
        $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("subdir",'../');  
        $templ->register_outputfilter('CHMdefault_outputfilter');  
        $templ->assign('source',$source);  
        $templ->assign('title',$title);  
        $templ->assign('file',$path);  
        $templ->assign("subdir",'../');  
        $templ->register_outputfilter('CHMdefault_outputfilter');  
        $pathinfo = 
$this->proceduralpages->getPathInfo($path, $this);  
        $this->addSourceTOC($title,'exsource_'.
$path,$pathinfo['package'],$pathinfo['subpackage'], false);  
        $this->writefile('exsource_'.
$path.
'.html',$templ->fetch('examplesource.tpl'));  
     * 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  
     * @return string link to an anchor, or the anchor  
            return '<a name="a'.
$anchor.
'"></a>';  
     * Return a line of highlighted source code with formatted line number  
     * If the $path is a full path, then an anchor to the line number will be  
     * @param integer line number  
     * @param string highlighted source code line  
     * @param false|stringfull path to @filesource file this line is a part of,  
     *         if this is a single line from a complete file.  
     * @return string formatted source code line with line number  
    function sourceLine($linenumber, $line, $path = 
false)  
            return '<li><div class="src-line">' . 
$this->getSourceAnchor($path, $linenumber) .
  
            return '<li><div class="src-line">' . 
str_replace("\n",'',$line) .
  
     * Used to convert the <<code>> tag in a docblock  
    function ProgramExample($example, $tutorial = 
false, $inlinesourceparse = 
null/*false*/,  
                            $class = 
null/*false*/, $linenum = 
null/*false*/, $filesourcepath = 
null/*false*/)  
        return $this->curname . 
'.html';  
     * Uses htmlspecialchars() on the input  
            return str_replace(array(' ',"\t"), array(' ', '   '),  
     * Use the template tutorial_toc.tpl to generate a table of contents for HTML  
     * @return string table of contents formatted for use in the current output format  
     * @param array format: array(array('tagname' => section, 'link' => returnsee link, 'id' => anchor name, 'title' => from title tag),...)  
        $template->assign('toc',$toc);  
        return $template->fetch('tutorial_toc.tpl');  
        if (!isset
($this->package_index))  
                if (!isset
($start)) $start = 
$key;  
                $this->package_index[] = 
array('link' => 
"li_$key.html", 'title' => 
$key);  
        $templ->assign("packageindex",$this->package_index);  
        $templ->assign("subdir",'');  
     * Writes out the template file of {@link $class_data} and unsets the template to save memory  
     * @see registerCurrentClass()  
     * @see parent::endClass()  
        $this->class_data->register_outputfilter('CHMdefault_outputfilter');  
     * Writes out the template file of {@link $page_data} and unsets the template to save memory  
        $this->page_data->register_outputfilter('CHMdefault_outputfilter');  
     * @return string <a href="'.$link.'">'.$text.'</a>  
        return '<a href="'.
$link.
'">'.
$text.
'</a>';  
     * CHMdefaultConverter chooses to format both package indexes and the complete index here  
     * This function formats output for the elementindex.html and pkgelementindex.html template files.  It then  
     * writes them to the target directory  
     * @see generateElementIndex(), generatePkgElementIndex()  
        for($i=
0;$i<
count($package_indexes);$i++
)  
            $this->package = 
$package_indexes[$i]['package'];  
            $template->assign("index",$package_indexes[$i]['pindex']);  
            $template->assign("package",$package_indexes[$i]['package']);  
            $template->assign("letters",$mletters[$package_indexes[$i]['package']]);  
            $template->assign("title","Package ".
$package_indexes[$i]['package'].
" Element Index");  
            $template->assign("subdir",'../');  
            $template->register_outputfilter('CHMdefault_outputfilter');  
            $this->addTOC($package_indexes[$i]['package'].
" Alphabetical Index",'elementindex_'.
$package_indexes[$i]['package'],$package_indexes[$i]['package'],'');  
            $this->writefile('elementindex_'.
$package_indexes[$i]['package'].
'.html',$template->fetch('pkgelementindex.tpl'));  
     * CHMdefaultConverter uses this function to format template index.html and packages.html  
     * This function generates the package list from {@link $all_packages}, eliminating any  
     * packages that don't have any entries in their package index (no files at all, due to @ignore  
     * or other factors).  Then it uses the default package name as the first package index to display.  
     * It sets the right pane to be either a blank file with instructions on making package-level docs,  
     * or the package-level docs for the default package.  
     * @global string Used to set the starting package to display  
        global $phpDocumentor_DefaultPackageName;  
        $template->assign("index",$elindex);  
        $template->assign("letters",$mletters);  
        $template->assign("title","Element Index");  
        $template->assign("date",date("r",time()));  
        $template->register_outputfilter('CHMdefault_outputfilter');  
        $this->addTOC("Alphabetical Index Of All Elements",'elementindex',"Index",'');  
        $this->writefile('elementindex.html',$template->fetch('elementindex.tpl'));  
        usort($this->package_index,"CHMdefault_pindexcmp");  
                if (!isset
($start)) $start = 
$key;  
        if (isset
($this->pkg_elements[$phpDocumentor_DefaultPackageName])) $start = 
$phpDocumentor_DefaultPackageName;  
        if (isset
($this->tutorials[$start]['']['pkg']))  
            foreach($this->tutorials[$start]['']['pkg'] as $tute)  
                if ($tute->name == 
$start . 
'.pkg')  
                       $this->addTOC("Start page",$start.
'/tutorial_'.
$tute->name,"Index",'');  
                   $this->addTOC("Start page",'package_'.
$start,"Index",'');  
                $index->assign("blank","blank");  
                $blank->assign('package',$phpDocumentor_DefaultPackageName);  
                $this->addTOC("Start page",'blank',"Index",'');  
                $this->writefile("blank.html",$blank->fetch('blank.tpl'));  
                Converter::writefile('index.html',$blank->fetch('tutorial.tpl'));  
        $template->assign("date",date("r",time()));  
        $template->assign("title",$this->title);  
        $template->assign("package",$key);  
        $template->register_outputfilter('CHMdefault_outputfilter');  
        $this->addTOC("$key Index","li_$key",$key,'');  
        $this->writefile("li_$key.html",$template->fetch('index.tpl'));  
     * Generate indexes for li_package.html and classtree output files  
     * This function generates the li_package.html files from the template file left.html.  It does this by  
     * iterating through each of the $page_elements, $class_elements and  $function_elements arrays to retrieve  
     * the pre-sorted {@link abstractLink} descendants needed for index generation.  Conversion of these links to  
     * text is done by {@link returnSee()}.  The {@link $local} parameter is set to false to ensure that paths are correct.  
     * Then it uses {@link generateFormattedClassTrees()} to create class trees from the template file classtrees.html.  Output  
     * filename is classtrees_packagename.html.  This function also unsets {@link $elements} and {@link $pkg_elements} to free  
     * up the considerable memory these two class vars use  
     * @see $page_elements, $class_elements, $function_elements  
        if (0)//!isset($this->left))  
            debug("Nothing parsed, check the command-line");  
            // Create class tree page  
            $template->assign("package",$package);  
            $template->assign("date",date("r",time()));  
            $template->register_outputfilter('CHMdefault_outputfilter');  
            $this->addTOC("$package Class Trees","classtrees_$package",$package,'');  
            $this->writefile("classtrees_$package.html",$template->fetch('classtrees.tpl'));  
        // free up considerable memory  
     * This function takes an {@link abstractLink} descendant and returns an html link  
     * @param abstractLink a descendant of abstractlink should be passed, and never text  
     * @param string text to display in the link  
     * @param boolean this parameter is not used, and is deprecated  
     * @param boolean determines whether the returned text is enclosed in an <a> tag  
    function returnSee(&$element, $eltext = 
false, $with_a = 
true)  
        if (!$element) return false;  
        if (!$with_a) return $this->getId($element, false);  
                $eltext .= 
$element->class.
'::';  
                $eltext .= 
$element->name;  
                if ($element->type == 
'function' || 
$element->type == 
'method') $eltext .= 
'()';  
        return '<a href="'.
$this->getId($element).
'">'.
$eltext.
'</a>';  
    function getId($element, $fullpath = 
true)  
            $element = 
$this->addLink($element->parent);  
        } elseif (is_a($element, 'parserbase'))  
            $element = 
$this->addLink($element);  
        if (!empty($element->subpackage))  
            $c = 
'/'.
$element->subpackage;  
            return $b.
$element->package.
$c.
'/'.
$element->fileAlias.
'.html';  
            return $b.
$element->package.
$c.
'/'.
$element->fileAlias.
'.html#'.
$element->type.
$element->name;  
            return $element->type.
$element->name;  
            return $b.
$element->package.
$c.
'/'.
$element->name.
'.html';  
            return $b.
$element->package.
$c.
'/'.
$element->class.
'.html#'.
$element->type.
$element->name;  
            return $element->type.
$element->name;  
                $d = 
'#'.
$element->section;  
            return $b.
$element->package.
$c.
'/tutorial_'.
$element->name.
'.html'.
$d;  
        foreach($this->todoList as $package => 
$alltodos)  
            foreach($alltodos as $todos)  
                $converted['link'] = 
$this->returnSee($todos[0]);  
                    $converted['todos'][] = 
$todos[1]->Convert($this);  
                    foreach($todos[1] as $todo)  
                        $converted['todos'][] = 
$todo->Convert($this);  
                $todolist[$package][] = 
$converted;  
        $templ->assign('todos',$todolist);  
        $templ->register_outputfilter('CHMdefault_outputfilter');  
        $this->addTOC('Todo List','todolist','Index','',false,true);  
        $this->addKLink('Todo List', 'todolist', '', 'Development');  
        $this->writefile('todolist.html',$templ->fetch('todolist.tpl'));  
     * Convert README/INSTALL/CHANGELOG file contents to output format  
     * @param README|INSTALL|CHANGELOG  
     * @param string contents of the file  
        $template->assign('contents',$contents);  
        $template->assign('name',$name);  
        $this->addTOC($name,'ric_'.
$name,'Index','',false,true);  
        $this->addKLink($name, 'ric_'.
$name, '', 'Development');  
        $this->writefile('ric_'.
$name . 
'.html',$template->fetch('ric.tpl'));  
     * Create errors.html template file output  
     * This method takes all parsing errors and warnings and spits them out ordered by file and line number.  
     * @global ErrorTracker We'll be using it's output facility  
        global $phpDocumentor_errors;  
        $warnings = 
$phpDocumentor_errors->returnWarnings();  
        $errors = 
$phpDocumentor_errors->returnErrors();  
        foreach($warnings as $warning)  
                $linenum .= 
' on line '.
$warning->linenum;  
            $files[$file]['warnings'][] = 
array('name' => 
$linenum, 'listing' => 
$warning->data);  
        foreach($errors as $error)  
                $linenum .= 
' on line '.
$error->linenum;  
            $files[$file]['errors'][] = 
array('name' => 
$linenum, 'listing' => 
$error->data);  
        foreach($allfiles as $file => 
$num)  
        usort($allfiles,'strnatcasecmp');  
        $allfiles[0] = 
"Post-parsing";  
        foreach($allfiles as $i => 
$a)  
            $allfiles[$i] = 
array('file' => 
$a);  
        foreach($files as $file => 
$data)  
            if ($file == 
'##none') $file = 
'Post-parsing';  
        $template->assign("files",$allfiles);  
        $template->assign("all",$out);  
        $template->assign("title","phpDocumentor Parser Errors and Warnings");  
        $this->writefile("errors.html",$template->fetch('errors.tpl'));  
     * Converts package page and sets its package as used in {@link $package_pages}  
     * @param parserPackagePage   
        $this->package = 
$element->package;  
        $contents = 
$element->Convert($this);  
        $this->addTOC($element->package.
" Tutorial",'package_'.
$element->package,$element->package,'');  
        $this->addKLink($element->package.
" Tutorial", 'package_'.
$element->package, '', 'Tutorials');  
        if ($element->subpackage) $a .= 
'../';  
        $template->assign('subdir',$a);  
        $template->register_outputfilter('CHMdefault_outputfilter');  
        $contents = 
$template->fetch('tutorial.tpl');  
        if ($element->package == 
$GLOBALS['phpDocumentor_DefaultPackageName'] && 
empty($element->subpackage) && 
($element->name == 
$element->package . 
'.pkg'))  
            $template->assign('subdir','');  
            Converter::writefile('index.html',$template->fetch('tutorial.tpl'));  
        $this->addTOC($a = 
strip_tags($element->getTitle($this)), 'tutorial_'.
$element->name,  
            $element->package, $element->subpackage, false, true);  
        $this->writeFile('tutorial_'.
$element->name.
'.html',$contents);  
        $this->addKLink($element->getTitle($this), $element->package . 
$a . 
PATH_DELIMITER . 
'tutorial_'.
$element->name,  
     * Converts class for template output  
     * @see prepareDocBlock(), generateChildClassList(), generateFormattedClassTree(), getFormattedConflicts()  
     * @see getFormattedInheritedMethods(), getFormattedInheritedVars()  
        $this->class_dir = 
$element->docblock->package;  
        if ($element->docblock->subpackage != 
'') $a = 
"../$a";  
        $this->class_data->assign("title","Docs For Class " . 
$element->getName());  
        $this->class_data->assign("page",$element->getName() . 
'.html');  
     * Converts class variables for template output  
     * @see prepareDocBlock(), getFormattedConflicts()  
        parent::convertVar($element, array('var_dest' => 
$this->getId($element,false)));  
     * Converts class constants for template output  
     * @see prepareDocBlock(), getFormattedConflicts()  
     * Converts class methods for template output  
     * @see prepareDocBlock(), getFormattedConflicts()  
     * Converts function for template output  
     * @see prepareDocBlock(), parserFunction::getFunctionCall(), getFormattedConflicts()  
        $funcloc = 
$this->getId($this->addLink($element));  
     * Converts include elements for template output  
        parent::convertInclude($element, array('include_file'    => 
'_'.
strtr($element->getValue(),array('"' => 
'', "'" => 
'','.' => 
'_'))));  
     * Converts defines for template output  
     * @see prepareDocBlock(), getFormattedConflicts()  
     * Converts global variables for template output  
     * converts procedural pages for template output  
     * @see prepareDocBlock(), getClassesOnPage()  
        $this->page_dir = 
$element->parent->package;  
        // registering stuff on the template  
        $this->page_data->assign("title","Docs for page ".
$element->parent->getFile());  
        return '_'.
$element->parent->getName();  
     * returns an array containing the class inheritance tree from the root object to the class  
     * @param parserClass    class variable  
     * @return array Format: array(root,child,child,child,...,$class)  
     * @uses parserClass::getParentClassTree()  
        $tree = 
$class->getParentClassTree($this);  
            $result = 
array($class->getName());  
            $parent = 
$tree[$class->getName()];  
                    $subpackage = 
$parent->docblock->subpackage;  
                    $package = 
$parent->docblock->package;  
                    $x = 
$parent->getLink($this);  
                    if (!$x) $x = 
$parent->getName();  
                $parent = 
$tree[$parent->getName()];  
                elseif (isset
($tree[$parent]))  
                $parent = 
$tree[$parent];  
            for($i=
count($result) - 
1;$i>=
0;$i--
)  
                for($j=
0;$j<
count($result) - 
$i;$j++
) $my_nbsp .= 
$nbsp;  
                $distance[$i] = 
sprintf($distance[$i],$my_nbsp,$my_nbsp);  
            return array('classes'=>
$class->getName(),'distance'=>
array(''));  
    function sortMethod($a, $b)  
        if ($a->isConstructor) return -
1;  
        if ($b->isConstructor) return 1;  
     * returns a template-enabled array of class trees  
     * @param    string    $package    package to generate a class tree for  
     * @see $roots, HTMLConverter::getRootTree()  
        if (!isset
($this->roots['normal'][$package]) &&
  
              !isset
($this->roots['special'][$package])) {  
        if (isset
($this->roots['normal'][$package])) {  
            $roots = 
$this->roots['normal'][$package];  
            for($i=
0;$i<
count($roots);$i++
)  
                $root = 
$this->classes->getClassByPackage($roots[$i], $package);  
                if ($root && 
$root->isInterface()) {  
        if (isset
($this->roots['special'][$package])) {  
            $roots = 
$this->roots['special'][$package];  
            foreach ($roots as $parent => 
$classes) {  
                foreach ($classes as $classinfo) {  
                    $root = 
$this->classes->getClassByPackage($classinfo, $package);  
                    if ($root && 
$root->isInterface()) {  
                    'class_tree' => 
"<ul>\n" . 
$thistree . 
"</ul>\n"  
     * returns a template-enabled array of interface inheritance trees  
     * @param    string    $package    package to generate a class tree for  
     * @see $roots, HTMLConverter::getRootTree()  
        if (!isset
($this->roots['normal'][$package]) &&
  
              !isset
($this->roots['special'][$package])) {  
        if (isset
($this->roots['normal'][$package])) {  
            $roots = 
$this->roots['normal'][$package];  
            for($i=
0;$i<
count($roots);$i++
)  
                $root = 
$this->classes->getClassByPackage($roots[$i], $package);  
                if ($root && 
!$root->isInterface()) {  
        if (isset
($this->roots['special'][$package])) {  
            $roots = 
$this->roots['special'][$package];  
            foreach ($roots as $parent => 
$classes) {  
                foreach ($classes as $classinfo) {  
                    $root = 
$this->classes->getClassByPackage($classinfo, $package);  
                    if ($root && 
!$root->isInterface()) {  
                    'class_tree' => 
"<ul>\n" . 
$thistree . 
"</ul>\n"  
     * return formatted class tree for the Class Trees page  
     * @param array $tree output from {@link getSortedClassTreeFromClass()}  
     * @param string $package  package  
     * @param boolean $nounknownparent if true, an object's parent will not be checked  
     * @see Classes::$definitechild, generateFormattedClassTrees()  
    function getRootTree($tree, $package, $noparent = 
false)  
        if (!$noparent && 
$tree[$cur]['parent'])  
//                debug("parent ".$tree[$cur]['parent']." not found");  
                $my_tree .= 
'<li>' . 
$tree[$cur]['parent'] .
'<ul>';  
//                        debug("parent ".$this->returnSee($tree[$cur]['parent'])." in other package");  
                $my_tree .= 
'<li>' . 
$this->returnSee($tree[$cur]['parent']);  
                if ($tree[$cur]['parent']->package != 
$package) $my_tree .= 
' <b>(Different package)</b><ul>';  
//            fancy_debug($cur,$lastcur,$kids);  
            if (count($tree[$cur]['children']))  
//                debug("$cur has children");  
//                    debug("set $cur kids");  
                    $my_tree .= 
'<li>'.
$this->returnSee($tree[$cur]['link']);  
                list
(,$cur) = 
each($tree[$cur]['children']); 
//                var_dump('listed',$cur);  
                    $cur = 
$cur['package'] . 
'#' . 
$cur['class'];  
//                    debug("set cur to child $cur");  
//                    $my_tree .= '<li>'.$this->returnSee($tree[$cur]['link']);  
//                    debug("end of children for $cur");  
                    $cur = 
array_pop($lastcur); // will fall into infinite loop if this second array_pop() is removed  
                    $my_tree .= 
'</ul></li>'.
"\n";  
//                debug("$cur has no children");  
                $my_tree .= 
'<li>'.
$this->returnSee($tree[$cur]['link']).
"</li>";  
            $my_tree .= 
'</ul></li>'.
"\n";  
         * Generate indexing information for given element  
         * @param parserElement descendant of parserElement  
         * @see generateElementIndex()  
            $Result['type'] = 
$elt->type;  
            $Result['file_name'] = 
$elt->file;  
            $Result['path'] = 
$elt->getPath();  
            if (isset
($elt->docblock))  
                            $Result['description'] = 
$elt->docblock->getSDesc($this);  
                            if ($elt->docblock->hasaccess)  
                                $Result['access'] = 
$elt->docblock->tags['access'][0]->value;  
                                $Result['access'] = 
'public';  
                            $Result['abstract'] = isset 
($elt->docblock->tags['abstract'][0]);  
                $Result['description'] = 
'';  
            $aa = 
$Result['description'];  
            if (!empty($aa)) $aa = 
"<br>    $aa";  
                            $Result['name'] = 
$elt->getName();  
                            $Result['title'] = 
'Class';  
                            $Result['listing'] = 
'in file '.
$elt->file.
', class '.
$Result['link'].
"$aa";  
                            $Result['name'] = 
$elt->getName();  
                            $Result['title'] = 
'Constant';  
                            $Result['listing'] = 
'in file '.
$elt->file.
', constant '.
$Result['link'].
"$aa";  
                            $Result['name'] = 
$elt->getName();  
                            $Result['title'] = 
'Global';  
                            $Result['listing'] = 
'in file '.
$elt->file.
', global variable '.
$Result['link'].
"$aa";  
                            $Result['name'] = 
$elt->getName();  
                            $Result['title'] = 
'Function';  
                            $Result['listing'] = 
'in file '.
$elt->file.
', function '.
$Result['link'].
"$aa";  
                            $Result['name'] = 
$elt->getName();  
                            $Result['title'] = 
'Method';  
                                                                   $elt->class.
'::'.
$elt->getName().
'()'  
                                                        if ($elt->isConstructor) $Result['constructor'] = 
1;  
                            $Result['listing'] = 
'in file '.
$elt->file.
', method '.
$Result['link'].
"$aa";  
                            $Result['name'] = 
$elt->getName();  
                            $Result['title'] = 
'Variable';  
                            $Result['link'] = 
$this->getVarLink($elt->getName(),  
                                                                $elt->class.
'::'.
$elt->getName());  
                            $Result['listing'] = 
'in file '.
$elt->file.
', variable '.
$Result['link'].
"$aa";  
                            $Result['name'] = 
$elt->getName();  
                            $Result['title'] = 
'Variable';  
                                                                $elt->class.
'::'.
$elt->getName());  
                            $Result['listing'] = 
'in file '.
$elt->file.
', class constant '.
$Result['link'].
"$aa";  
                            $Result['name'] = 
$elt->getFile();  
                            $Result['title'] = 
'Page';  
                            $Result['listing'] = 
'procedural page '.
$Result['link'];  
                            $Result['name'] = 
$elt->getName();  
                            $Result['title'] = 
'Include';  
                            $Result['link'] = 
$elt->getValue();  
                            $Result['listing'] = 
'include '.
$Result['name'];  
     * Generate alphabetical index of all elements  
        foreach($this->elements as $letter => 
$nutoh)  
            foreach($this->elements[$letter] as $i => 
$yuh)  
                if ($this->elements[$letter][$i]->type != 
'include')  
                    if (!isset
($used[$letter]))  
                        $letters[]['letter'] = 
$letter;  
                        $elindex['letter'] = 
$letter;  
            if (isset
($elindex['index']))  
                $elementindex[] = 
$elindex;  
                unset
($letters[count($letters) - 
1]); 
        return array($elementindex,$letters);  
        $versionControlDirectories = 
array ('CVS', 'media/CVS', 'media\\CVS', '.svn', 'media/.svn', 'media\\.svn');  
        foreach($media as $dir => 
$files)  
                    if (in_array($dir, $versionControlDirectories))  
                    $this->copyFile($files['file'],$subdir);  
     * calls the converter setTargetDir, and then copies any template images and the stylesheet if they haven't been copied  
     * @see Converter::setTargetDir()  
        if ($this->wrote) return;  
        $template_images = 
array();  
     * Generate alphabetical index of all elements by package and subpackage  
     * @param string $package name of a package  
     * @see $pkg_elements, walk(), generatePkgElementIndexes()  
//        var_dump($this->pkg_elements[$package]);  
        foreach($this->pkg_elements[$package] as $subpackage => 
$els)  
            if (empty($els)) continue;  
            if (!empty($subpackage)) $subp = 
" (<b>subpackage:</b> $subpackage)"; else $subp = 
'';  
            foreach($els as $letter => 
$yuh)  
                foreach($els[$letter] as $i => 
$yuh)  
                    if ($els[$letter][$i]->type != 
'include')  
                        if (!isset
($used[$letter]))  
                            $letters[]['letter'] = 
$letter;  
                            $letterind[$letter] = 
count($letters) - 
1;  
                        $elindex[$letter]['letter'] = 
$letter;  
        usort($letters,'CHMdefault_lettersort');  
            while(list
($letter,$tempel) = 
each($elindex))  
                    unset
($letters[$letterind[$tempel['letter']]]); 
                $elementindex[] = 
$tempel;  
        } else $letters = 
array();  
        return array($elementindex,$letters);  
     * @see generatePkgElementIndex()  
        $package_names = 
array();  
            $pkgs['package'] = 
$package;  
            $pkg['package'] = 
$package;  
            if (count($pkg['pindex']))  
                $package_names[] = 
$pkgs;  
        foreach($packages as $i => 
$package)  
            for($j=
0;$j<
count($package_names);$j++
)  
                if ($package_names[$j]['package'] != 
$package['package']) $pnames[] = 
$package_names[$j];  
            $packages[$i]['packageindexes'] = 
$pnames;  
        return array($packages,$package_names,$letters);  
     * @param string name of class  
     * @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 class's documentation  
     * @see parent::getClassLink()  
    function getClassLink($expr,$package, $file = 
false,$text = 
false, $with_a = 
true)  
     * @param string name of function  
     * @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 function's documentation  
     * @see parent::getFunctionLink()  
     * @param string name of define  
     * @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 define's documentation  
     * @see parent::getDefineLink()  
    function getDefineLink($expr,$package, $file = 
false,$text = 
false)  
     * @param string name of global variable  
     * @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 global variable's documentation  
     * @see parent::getGlobalLink()  
    function getGlobalLink($expr,$package, $file = 
false,$text = 
false)  
     * @param string name of procedural page  
     * @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 procedural page's documentation  
     * @see parent::getPageLink()  
    function getPageLink($expr,$package, $path = 
false,$text = 
false)  
     * @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  
     * @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 method's documentation  
     * @see parent::getMethodLink()  
    function getMethodLink($expr,$class,$package, $file = 
false,$text = 
false)  
     * @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)  
     * @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::getVarLink()  
    function getConstLink($expr,$class,$package, $file = 
false,$text = 
false)  
     * does a nat case sort on the specified second level value of the array  
     * does a nat case sort on the specified second level value of the array.  
     * this one puts constructors first  
        if (strpos($aa,'CONSTRUCTOR') === 
0)  
        if (strpos($bb,'CONSTRUCTOR') === 
0)  
     * Write a file to disk, and add it to the {@link $hhp_files} list of files  
     * to include in the generated CHM  
     * @uses $hhp_files creates the array by adding parameter $file  
        $this->hhp_files[]['name'] = 
$file;  
        foreach($this->TOC as $package => 
$TOC1)  
            foreach($TOC1 as $subpackage => 
$types)  
                foreach($types as $type => 
$files)  
                    $templ1->assign('entry', array());  
                    // use book icon for classes  
                        if ($type == 
'Classes') {  
                            $templ1->append('entry', array('paramname' => 
$file[0],'outputfile' => 
$file[1],'isclass' => 
1));  
                            $templ1->append('entry', array('paramname' => 
$file[0],'outputfile' => 
$file[1]));  
                    $templ->assign('tocsubentries',$templ1->fetch('tocentry.tpl'));  
                    $templ->assign('entry', array(array('paramname' => 
$type)));  
                    $comp_types .= 
$templ->fetch('tocentry.tpl');  
                    $templ->assign('tocsubentries',$comp_types);  
                    $templ->assign('entry', array(array('paramname' => 
$subpackage)));  
                    $comp_subs .= 
$templ->fetch('tocentry.tpl');  
                    $comp_subs1 = 
$comp_types;  
            $templ->assign('tocsubentries',$comp_subs1);  
            $templ->assign('entry', array(array('paramname' => 
$package, 'tocsubentries' => 
$comp_subs)));  
            $templ->assign('entry', array(array('paramname' => 
$package)));  
            $comppack .= 
$templ->fetch('tocentry.tpl');  
    function addSourceTOC($name, $file, $package, $subpackage, $source = 
false)  
        $sub = 
$source ? 
'Source Code' : 
'Examples';  
        $this->TOC[$package][$subpackage][$sub][] = 
array($name, $file);  
    function addTOC($name,$file,$package,$subpackage,$class = 
false,$tutorial = 
false)  
        $sub = 
$class ? 
'Classes' : 
'Files';  
        if ($tutorial) $sub = 
'Manual';  
        $this->TOC[$package][$subpackage][$sub][] = 
array($name,$file);  
     * Add an item to the index.hhk file  
     * @param string $name index entry name  
     * @param string $file filename containing index  
     * @param string $bookmark html anchor of location in file, if any  
     * @param string $group group this entry with a string  
     * @uses $KLinks tracks the index  
    function addKLink($name, $file, $bookmark=
'', $group=
'')  
//        debug("added $name, $file, $bookmark, $group ");  
        $link .= 
$bookmark ? 
"#$bookmark" :
'';  
            $this->KLinks[$group]['grouplink'] = 
$file;  
            $this->KLinks[$group][] = 
array($name,$link);  
        $this->KLinks[] = 
array($name,$link);  
     * Get the table of contents for index.hhk  
     * @return string contents of tocentry.tpl generated from $KLinks  
        $templ->assign('entry', array());  
        foreach($this->KLinks as $group=>
$link)  
            if (isset
($link['grouplink'])) {  
                $templg->assign('entry', array());  
                foreach($link as $k=>
$sublink)  
                        $templg->append('entry', array('paramname' => 
$sublink[0],'outputfile' => 
$sublink[1]));  
                $templ->append('entry', array('paramname' => 
$group, 'outputfile' => 
$link['grouplink'], 'tocsubentries' => 
$templg->fetch('tocentry.tpl') ));  
                $templ->append('entry', array('paramname' => 
$link[0],'outputfile' => 
$link[1]));  
        return $templ->fetch('tocentry.tpl');  
     * Create the phpdoc.hhp, contents.hhc files needed by MS HTML Help Compiler  
     * The output function generates the table of contents (contents.hhc)  
     * and file list (phpdoc.hhp) files used to create a .CHM by the  
     * free MS HTML Help compiler.  
     * Using {@link $hhp_files}, a list of all separate .html files  
     * is created in CHM format, and written to phpdoc.hhp.  This list was  
     * generated by {@link writefile}.  
     * Next, a call to the table of contents:  
     * @todo use to directly call html help compiler hhc.exe  
     * @link http://www.microsoft.com/downloads/release.asp?releaseid=33071  
     * @uses generateTOC() assigns to the toc template variable  
        $templ->assign('files',$this->hhp_files);  
        Converter::writefile('phpdoc.hhp',$templ->fetch('hhp.tpl'));  
        Converter::writefile('contents.hhc',$templ->fetch('contents.hhc.tpl'));  
        Converter::writefile('index.hhk',$templ->fetch('index.hhk.tpl'));  
        phpDocumentor_out("NOTE: to create the documentation.chm file, you must now run Microsoft Help Workshop on phpdoc.hhp\n");  
        phpDocumentor_out("To get the free Microsoft Help Workshop, browse to: http://go.microsoft.com/fwlink/?LinkId=14188\n");  
 * @global string name of the package to set as the first package  
function CHMdefault_pindexcmp($a, $b)  
    global $phpDocumentor_DefaultPackageName;  
    if ($a['title'] == 
$phpDocumentor_DefaultPackageName) return -
1;  
    if ($b['title'] == 
$phpDocumentor_DefaultPackageName) return 1;  
function CHMdefault_lettersort($a, $b)  
function CHMdefault_outputfilter($src, &$smarty)  
    return str_replace('../',$smarty->_tpl_vars['subdir'],$src);  
 
 
	
		Documentation generated on Mon, 05 Dec 2011 21:52:41 -0600 by phpDocumentor 1.4.4