phpDocumentor phpDocumentor
ParserData
[ class tree: phpDocumentor ] [ index: phpDocumentor ] [ all elements ]

Source for file ParserData.inc

Documentation is available at ParserData.inc

  1. <?php
  2. /**
  3.  * Parser Data Structures
  4.  * 
  5.  * phpDocumentor :: automatic documentation generator
  6.  * 
  7.  * PHP versions 4 and 5
  8.  *
  9.  * Copyright (c) 2002-2006 Gregory Beaver
  10.  * 
  11.  * LICENSE:
  12.  * 
  13.  * This library is free software; you can redistribute it
  14.  * and/or modify it under the terms of the GNU Lesser General
  15.  * Public License as published by the Free Software Foundation;
  16.  * either version 2.1 of the License, or (at your option) any
  17.  * later version.
  18.  * 
  19.  * This library is distributed in the hope that it will be useful,
  20.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  21.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  22.  * Lesser General Public License for more details.
  23.  * 
  24.  * You should have received a copy of the GNU Lesser General Public
  25.  * License along with this library; if not, write to the Free Software
  26.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  27.  *
  28.  * @package    phpDocumentor
  29.  * @subpackage ParserData
  30.  * @author     Gregory Beaver <[email protected]>
  31.  * @copyright  2002-2006 Gregory Beaver
  32.  * @license    http://www.opensource.org/licenses/lgpl-license.php LGPL
  33.  * @version    CVS: $Id: ParserData.inc,v 1.6 2006/10/23 04:02:46 cellog Exp $
  34.  * @link       http://www.phpdoc.org
  35.  * @link       http://pear.php.net/PhpDocumentor
  36.  * @since      1.0rc1
  37.  */
  38. /**
  39.  * Contains information about a PHP file, used to group procedural elements
  40.  * together.
  41.  * @package phpDocumentor
  42.  * @subpackage ParserData
  43.  * @author Greg Beaver <[email protected]>
  44.  * @since 1.0rc1
  45.  * @version $Id: ParserData.inc,v 1.6 2006/10/23 04:02:46 cellog Exp $
  46.  */
  47. class parserPage
  48. {
  49.     /**
  50.      * Type is used by many functions to skip the hassle of if
  51.      * <code>phpDocumentor_get_class($blah) == 'parserBlah'</code>
  52.      * @var string 
  53.      */
  54.     var $type = 'page';
  55.     /**
  56.      * not implemented in this version, will be used to link xml output pages
  57.      * @var string 
  58.      */
  59.     var $id = '';
  60.     /**
  61.      * filename.ext (no path)
  62.      * @var string 
  63.      */
  64.     var $file = '';
  65.     /**
  66.      * relative source location
  67.      * @var string 
  68.      */
  69.     var $sourceLocation = '';
  70.     /**
  71.      * phpdoc-safe name (only letters, numbers and _)
  72.      * @var string 
  73.      */
  74.     var $name = '';
  75.     /**
  76.      * original phpdoc-safe name (only letters, numbers and _)
  77.      * 
  78.      * This fixes [ 1391432 ] Too many underscores in include links.
  79.      * @var string 
  80.      */
  81.     var $origName = '';
  82.     /**
  83.      * @var string 
  84.      */
  85.     var $category = 'default';
  86.     /**
  87.      * @var string 
  88.      */
  89.     var $package = 'default';
  90.     /**
  91.      * @var string 
  92.      */
  93.     var $subpackage = '';
  94.     /**
  95.      * @var string 
  96.      */
  97.     var $parserVersion = PHPDOCUMENTOR_VER;
  98.     /**
  99.      * not implemented yet
  100.      * file modification date, will be used for makefiles
  101.      * @var string 
  102.      */
  103.     var $modDate = '';
  104.     /**
  105.      * @var string full path this page represents
  106.      */
  107.     var $path = '';
  108.     /**
  109.      * Tokenized source code of the file
  110.      * @var array 
  111.      */
  112.     var $source = array();
  113.     /**
  114.      * Used to limit output, contains contents of --packageoutput commandline.
  115.      * Does not increase parsing time.  Use --ignore for that
  116.      * @see phpDocumentor_IntermediateParser::$packageoutput, Converter::$package_output
  117.      * @var mixed either false or an array of packages
  118.      */
  119.     var $packageOutput = false;
  120.     
  121.     /**
  122.      * sets package to default package
  123.      * @global string default package name
  124.      */
  125.     function parserPage()
  126.     {
  127.         global $phpDocumentor_DefaultPackageName;
  128.         $this->package = $GLOBALS['phpDocumentor_DefaultPackageName'];
  129.     }
  130.     
  131.     /**
  132.      * @return string always "page"
  133.      */
  134.     function getType()
  135.     {
  136.         return 'page';
  137.     }
  138.     
  139.     /**
  140.      * Sets the source code of the file for highlighting.
  141.      *
  142.      * PHP 4.3.0+ passes an array of tokenizer tokens by line number.  PHP
  143.      * 4.2.3- passes a string to be passed to {@link highlight_string()}
  144.      * @param string|array
  145.      */
  146.     function setSource($source)
  147.     {
  148.         $this->source = $source;
  149.     }
  150.     
  151.     /**
  152.      * Sets the name to display in documentation (can be an alias set with @name)
  153.      * @param string $file 
  154.      */
  155.     function setFile($file)
  156.     {
  157.         $this->file = $file;
  158.     }
  159.     
  160.     /**
  161.      * @return string filename.ext or @name alias
  162.      */
  163.     function getFile()
  164.     {
  165.         if (!isset($this->file)) return false;
  166.         return $this->file;
  167.     }
  168.     
  169.     /**
  170.      * @param string $path full path to file
  171.      */
  172.     function setPath($path)
  173.     {
  174.         // look for special windows case
  175.         if(SMART_PATH_DELIMITER === '\\')
  176.             $this->path = strtr($path,'/','\\');
  177.         else
  178.             $this->path = $path;
  179.     }
  180.     
  181.     /**
  182.      * @return string fully delimited path (OS-dependent format)
  183.      */
  184.     function getPath()
  185.     {
  186.         if (!isset($this->path)) return false;
  187.         return $this->path;
  188.     }
  189.     
  190.     /**
  191.      * @param array $packages array of packages to display in documentation (package1,package2,...)
  192.      * @see phpDocumentor_IntermediateParser::$packageoutput
  193.      */
  194.     function setPackageOutput($packages)
  195.     {
  196.         $this->packageOutput = $packages;
  197.     }
  198.     
  199.     /**
  200.      * @return array array of packages (package1,package2,...)
  201.      * @see phpDocumentor_IntermediateParser::$packageoutput
  202.      */
  203.     function getPackageOutput()
  204.     {
  205.         return $this->packageOutput;
  206.     }
  207.     
  208.     /**
  209.      * @param string $name phpdoc-safe name (only _, numbers and letters) set by Parser::parse()
  210.      * @see Parser::parse()
  211.      */
  212.     function setName($name)
  213.     {
  214.         $this->origName = $name;
  215.         $this->name = $name;
  216.     }
  217.     
  218.     /**
  219.      * @return string phpdoc-safe name (only _, numbers and letters)
  220.      */
  221.     function getName()
  222.     {
  223.         if (!isset($this->name)) return false;
  224.         return $this->name;
  225.     }
  226.     
  227.     /**
  228.      * @param string $source path of this file relative to program root
  229.      */
  230.     function setSourceLocation($source)
  231.     {
  232.         $this->sourceLocation = $source;
  233.     }
  234.     
  235.     /**
  236.     * @param Converter 
  237.     * @param boolean if this parameter is true, it will truncate the source location to the
  238.     *  subdirectory of pear
  239.      * @return string path of this file relative to program root
  240.      */
  241.     function getSourceLocation ($c,$pearize false)
  242.     {
  243.         global $_phpDocumentor_options;
  244.         if (!isset($this->sourceLocation)) return false;
  245.         if ($pearize)
  246.         {
  247.             $sl $this->sourceLocation;
  248.             if (strpos($sl,'pear/'))
  249.             {
  250.                 $sl substr($sl,strpos($sl,'pear/'5);
  251.                 return $sl;
  252.             else
  253.             {
  254.                 return str_replace($_phpDocumentor_options['Program_Root'PATH_DELIMITER,'',$sl);
  255.             }
  256.             return $sl;
  257.         }
  258.         return $this->sourceLocation;
  259.     }
  260.     /**
  261.      * Not implemented in this version
  262.      * @return boolean tell the parser whether to parse the file, otherwise
  263.      *                    this function will retrieve the parsed data from external file
  264.      */
  265.     function getParseData()
  266.     {
  267.         return true;
  268.     }
  269. }
  270.  
  271. /**
  272.  * Contains an in-memory representation of all documentable elements
  273.  * ({@link parserPage}{@link parserFunction}{@link parserDefine},
  274.  * {@link parserInclude}{@link parserClass}{@link parserMethod},
  275.  * {@link parserVar}) and their DocBlocks ({@link parserDocBlock}).
  276.  *
  277.  * This class works in coordination with {@link phpDocumentor_IntermediateParser}
  278.  * to take output from {@link Parser::handleEvent()} and create indexes, links,
  279.  * and other assorted things (all documented in phpDocumentor_IntermediateParser
  280.  * and {@link Converter})
  281.  * @package phpDocumentor
  282.  * @subpackage ParserData
  283.  * @author Greg Beaver <[email protected]>
  284.  * @since 1.0rc1
  285.  * @version $Id: ParserData.inc,v 1.6 2006/10/23 04:02:46 cellog Exp $
  286.  */
  287. class parserData
  288. {
  289.     /**
  290.      * {@link parserPage} element that is this parserData's parent, or false if
  291.      * not set.
  292.      * @var false|parserPage
  293.      */
  294.     var $parent = false;
  295.     /**
  296.      * array of parsed elements
  297.      * @var array 
  298.      */
  299.     var $elements = array();
  300.     /**
  301.      * @var boolean 
  302.      * @access private
  303.      */
  304.     var $_hasclasses false;
  305.     /**
  306.      * @var boolean 
  307.      * @access private
  308.      */
  309.     var $_hasinterfaces false;
  310.     /**
  311.      * array of parsed elements with @access private
  312.      * @var array 
  313.      */
  314.     var $privateelements = array();
  315.     /**
  316.      * array of parsed class elements
  317.      * @var array 
  318.      */
  319.     var $classelements = array();
  320.     
  321.     /**
  322.      * @var parserTutorial|false
  323.      */
  324.     var $tutorial = false;
  325.     /**
  326.      * array of parsed class elements with @access private
  327.      * @var array 
  328.      */
  329.     var $privateclasselements = array();
  330.     /**
  331.      * array of links descended from {@link abstractLink}
  332.      * @var array 
  333.      * @see pageLink, defineLink, classLink, functionLink, methodLink, varLink
  334.      */
  335.     var $links = array();
  336.     /**
  337.      * used by {@link phpDocumentor_IntermediateParser::handleDocBlock()} to
  338.      * determine whether a docblock is a page-level docblock or not.  $clean is
  339.      * true as long as only 0 or 1 docblock has been parsed, and no element
  340.      * other than parserPage has been parsed
  341.      * @var boolean 
  342.      */
  343.     var $clean = true;
  344.     /**
  345.      * DocBlock ({@link parserDocBlock}) for this page, or false if not set
  346.      * @var mixed 
  347.      */
  348.     var $docblock = false;
  349.     /**
  350.      * Flag used to determine whether a page-level docblock is present
  351.      * @var boolean 
  352.      * @access private
  353.      */
  354.     var $_explicitdocblock false;
  355.     /**
  356.      * Type is used by many functions to skip the hassle of if
  357.      * <code>phpDocumentor_get_class($blah) == 'parserBlah'</code>
  358.      * always 'page', used in element indexing and conversion functions found in
  359.      * {@link Converter}
  360.      * @var string 
  361.      */
  362.     var $type = 'page';
  363.     
  364.     /**
  365.      * @param parserElement add a parsed element to the {@link $elements} array,
  366.      *                       also sets {@link $clean} to false
  367.      */
  368.     function addElement(&$element)
  369.     {
  370.         $element->setPath($this->parent->path);
  371.         if ($element->getType(== 'class' || $element->getType(== 'method' || $element->getType(== 'var'
  372.             || $element->getType(== 'const')
  373.         {
  374.             if ($element->getType(== 'class'{
  375.                 if ($element->isInterface()) {
  376.                     $this->_hasinterfaces true;
  377.                 else {
  378.                     $this->_hasclasses true;
  379.                 }
  380.             }
  381.             $this->classelements[$element;
  382.         else
  383.         {
  384.             $this->elements[$element;
  385.         }
  386.         $this->clean = false;
  387.     }
  388.  
  389.     /**
  390.      * Does this package have interfaces?
  391.      *
  392.      * @return boolean 
  393.      */
  394.     function hasInterfaces()
  395.     {
  396.         return $this->_hasinterfaces;
  397.     }
  398.  
  399.     /**
  400.      * Does this package have classes?
  401.      *
  402.      * @return boolean 
  403.      */
  404.     function hasClasses()
  405.     {
  406.         return $this->_hasclasses;
  407.     }
  408.  
  409.     /**
  410.      * @param parserTutorial 
  411.      * @param Converter 
  412.      */
  413.     function addTutorial($t,&$c)
  414.     {
  415.         $this->tutorial = new tutorialLink;
  416.         $this->tutorial->addLink('',$t->path,$t->name,$t->package,$t->subpackage,$t->getTitle($c));
  417.     }
  418.     
  419.     /**
  420.      * If this file has a tutorial associated with it, returns a link to the
  421.      * tutorial.
  422.      * @return tutorialLink 
  423.      */
  424.     function getTutorial()
  425.     {
  426.         return $this->tutorial;
  427.     }
  428.     
  429.     /**
  430.      * If the page-level DocBlock was present in the source, returns true
  431.      * @return boolean 
  432.      */
  433.     function hasExplicitDocBlock()
  434.     {
  435.         return $this->_explicitdocblock;
  436.     }
  437.     
  438.     /**
  439.      * Tells this page that its DocBlock was not implicit
  440.      */
  441.     function explicitDocBlock()
  442.     {
  443.         $this->_explicitdocblock true;
  444.     }
  445.     
  446.     /**
  447.      * @param parserElement element to add a new link (descended from
  448.      *  {@link abstractLink})to the {@link $links} array
  449.      * @param string classname for elements that are class-based (this may be
  450.      *                deprecated in the future, as the classname should be
  451.      *                contained within the element.  if $element is a page, this
  452.      *                parameter is a package name
  453.      * @param string subpackage name for page elements
  454.      */
  455.     function addLink(&$element,$classorpackage ''$subpackage '')
  456.     {
  457.         switch($element->type)
  458.         {
  459.             case 'function':
  460.                 $x new functionLink;
  461.                 $x->addLink($this->parent->path$this->parent->name$element->name$element->docblock->package$element->docblock->subpackage);
  462.                 return $x;
  463.             break;
  464.             case 'define':
  465.                 $x new defineLink;
  466.                 $x->addLink($this->parent->path$this->parent->name$element->name$element->docblock->package$element->docblock->subpackage);
  467.                 return $x;
  468.             break;
  469.             case 'global':
  470.                 $x new globalLink;
  471.                 $x->addLink($this->parent->path$this->parent->name$element->name$element->docblock->package$element->docblock->subpackage);
  472.                 return $x;
  473.             break;
  474.             case 'class':
  475.                 $x new classLink;
  476.                 $x->addLink($this->parent->path$this->parent->name$element->name$element->docblock->package$element->docblock->subpackage);
  477.                 return $x;
  478.             break;
  479.             case 'method':
  480.                 $x new methodLink;
  481.                 $x->addLink($classorpackage$this->parent->path$this->parent->name$element->name$element->docblock->package$element->docblock->subpackage);
  482.                 return $x;
  483.             break;
  484.             case 'var':
  485.                 $x new varLink;
  486.                 $x->addLink($classorpackage$this->parent->path$this->parent->name$element->name$element->docblock->package$element->docblock->subpackage);
  487.                 return $x;
  488.             break;
  489.             case 'page':
  490.                 if (empty($classorpackage)) $classorpackage $GLOBALS['phpDocumentor_DefaultPackageName'];
  491.                 $x new pageLink;
  492.                 $x->addLink($element->path,$element->name,$element->file,$classorpackage$subpackage);
  493.                 return $x;
  494.             break;
  495.         }
  496.     }
  497.     
  498.     function &getLink(&$c$text false)
  499.     {
  500.         $a $c->getPageLink($this->parent->file$this->docblock->package$this->parent->path$text);
  501.         return $a;
  502.     }
  503.     
  504.     /**
  505.      * returns a list of all classes declared in a file
  506.      * @param Converter &$c 
  507.      * @return array Format: array(packagename => parserClass,packagename => parserClass,...)
  508.      */
  509.     function getClasses(&$c)
  510.     {
  511.         $r $c->classes->getClassesInPath($this->parent->path);
  512.         $rr array();
  513.         if ($r)
  514.         foreach($r as $class => $obj)
  515.         {
  516.             $rr[$obj->docblock->package][$obj;
  517.         }
  518.         return $rr;
  519.     }
  520.     
  521.     /**
  522.      * Get the output-safe filename (. changed to _)
  523.      * @return string 
  524.      */
  525.     function getName()
  526.     {
  527.         if (isset($this->parent&& $this->parent)
  528.         return $this->parent->getName();
  529.     }
  530.     
  531.     /**
  532.      * @param parserPage parent element of this parsed data
  533.      */
  534.     function setParent(&$parent)
  535.     {
  536.         $this->parent = $parent;
  537.     }
  538.     
  539.     /**
  540.      * @return bool returns the value of {@link $clean}
  541.      */
  542.     function isClean()
  543.     {
  544.         return $this->clean;
  545.     }
  546.     
  547.     /**
  548.      * @param parserDocBlock 
  549.      * @see parserDocBlock
  550.      */
  551.     function setDocBlock(&$docblock)
  552.     {
  553.         $this->docblock = $docblock;
  554.     }
  555. }
  556.  
  557. /**
  558.  * Base class for all elements
  559.  * @package phpDocumentor
  560.  * @subpackage ParserData
  561.  * @abstract
  562.  * @author Greg Beaver <[email protected]>
  563.  * @since 1.0rc1
  564.  * @version $Id: ParserData.inc,v 1.6 2006/10/23 04:02:46 cellog Exp $
  565.  */
  566. class parserBase
  567. {
  568.     /**
  569.      * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah'
  570.      * always base
  571.      * @var string 
  572.      */
  573.     var $type = 'base';
  574.     /**
  575.      * set to different things by its descendants
  576.      * @abstract
  577.      * @var mixed 
  578.      */
  579.     var $value = false;
  580.  
  581.     /**
  582.      * @return string returns value of {@link $type}
  583.      */
  584.     function getType()
  585.     {
  586.         return $this->type;
  587.     }
  588.     
  589.     /**
  590.      * @param mixed set the value of this element
  591.      */
  592.     function setValue($value)
  593.     {
  594.         $this->value = $value;
  595.     }
  596.     
  597.     /**
  598.      * @return mixed get the value of this element (element-dependent)
  599.      */
  600.     function getValue()
  601.     {
  602.         return $this->value;
  603.     }
  604. }
  605.  
  606.  
  607. /**
  608.  * Used to represent strings that contain inline tags, so that they can be properly parsed at link time
  609.  * @package phpDocumentor
  610.  * @subpackage ParserData
  611.  * @author Greg Beaver <[email protected]>
  612.  * @since 1.0rc1
  613.  * @version $Id: ParserData.inc,v 1.6 2006/10/23 04:02:46 cellog Exp $
  614.  */
  615. {
  616.     /**
  617.      * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah'
  618.      * always '_string'
  619.      * @var string 
  620.      */
  621.     var $type = '_string';
  622.     /** @access private */
  623.     var $cache false;
  624.     /**
  625.      * array of strings and {@link parserInlineTag}s
  626.      * Format:
  627.      * array(string1,string2,parserInlineTag1,string3,parserInlineTag2,...)
  628.      * @var array 
  629.      */
  630.     var $value = array();
  631.  
  632.     /**
  633.      * equivalent to the . operator ($a = $b . $c)
  634.      * @param mixed either a string or a {@link parserInlineTag}
  635.      */
  636.     function add($stringOrInlineTag)
  637.     {
  638.         if (is_string($stringOrInlineTag))
  639.         {
  640.             if (!count($this->value))
  641.             {
  642.                 $this->value[$stringOrInlineTag;
  643.                 return;
  644.             }
  645.             if (is_string($this->value[count($this->value1]))
  646.             {
  647.                 $this->value[count($this->value1.= $stringOrInlineTag;
  648.                 return;
  649.             else
  650.             {
  651.                 $this->value[$stringOrInlineTag;
  652.                 return;
  653.             }
  654.         else
  655.         {
  656.             if (is_a($stringOrInlineTag,'parserinlinetag'&& phpDocumentor_setup::checkIgnoreTag($stringOrInlineTag->inlinetypetrue)) return;
  657.             $this->value[$stringOrInlineTag;
  658.         }
  659.     }
  660.     
  661.     /**
  662.      * Determine whether the string contains any inline tags
  663.      * @tutorial inlinetags.pkg
  664.      * @return boolean 
  665.      */
  666.     function hasInlineTag()
  667.     {
  668.         for($i=0;$i<count($this->value);$i++)
  669.         {
  670.             if (is_a($this->value[$i],'parserinlinetag')) return true;
  671.         }
  672.         return false;
  673.     }
  674.     
  675.     /**
  676.      * Pass source code to any {@}source} tags contained within the string
  677.      * for later conversion.
  678.      * @param string|arraysource code ready to be highlighted
  679.      */
  680.     function setSource($source)
  681.     {
  682.         for($i=0;$i<count($this->value);$i++)
  683.         {
  684.             if (phpDocumentor_get_class($this->value[$i]== 'parsersourceinlinetag')
  685.             {
  686.                 $this->value[$i]->setSource($source);
  687.             }
  688.         }
  689.     }
  690.  
  691.     /**
  692.      * equivalent to trim(strlen($string))
  693.      * @return integer length of the string this object represents
  694.      */
  695.     function trimmedStrlen()
  696.     {
  697.         $a 0;
  698.         for($i=0;$i<count($this->value);$i++)
  699.         {
  700.             if (is_string($this->value[$i]))
  701.             {
  702.                 if ($i == 0)
  703.                 {
  704.                     $a += strlen(ltrim($this->value[$i]));
  705.                 elseif ($i == count($this->value[$i]1)
  706.                 {
  707.                     $a += strlen(chop($this->value[$i]));
  708.                 }
  709.             else
  710.             {
  711.                 $a += $this->value[$i]->Strlen();
  712.             }
  713.         }
  714.         return $a;
  715.     }
  716.     
  717.     /**
  718.      * return the string unconverted (all inline tags are taken out - this
  719.      * should only be used in pre-parsing to see if any other text
  720.      * is in the string)
  721.      * @uses parserInlineTag::getString() removes inline tag length, as it is
  722.      *        indeterminate until conversion.
  723.      * @return string trimmed value
  724.      */
  725.     function getString($trim true)
  726.     {
  727.         $a '';
  728.         for($i=0$i<count($this->value)$i++)
  729.         {
  730.             if (is_string($this->value[$i]))
  731.             {
  732.                 $a .= $this->value[$i];
  733.             else
  734.             {
  735.                 $a .= $this->value[$i]->getString();
  736.             }
  737.         }
  738.         if ($trim$a trim($a);
  739.         return $a;
  740.     }
  741.     
  742.     /**
  743.      * Use to convert the string to a real string with all inline tags parsed and linked
  744.      * @see Converter::returnSee()
  745.      * @param Converter 
  746.      * @param boolean true if one needs to postprocess
  747.      * @param boolean false if the output should not be trimmed
  748.      */
  749.     function Convert(&$converter,$postprocess true$trim true)
  750.     {
  751.         if ($this->cache)
  752.         {
  753.             if ($converter->name == $this->cache['name'&& $converter->outputformat == $this->cache['output'&& $converter->checkState($this->cache['state']&& $this->cache['postprocess'=== $postprocessreturn $this->cache['contents'];
  754.             if ($converter->name != $this->cache['name']{
  755.                 $this->cache false;
  756.             }
  757.         }
  758.         if (is_string($this->value)) return $this->value;
  759.         $a '';
  760.         for($i=0$i<count($this->value)$i++)
  761.         {
  762.             if (is_string($this->value[$i]))
  763.             {
  764.                 if ($postprocess && !method_exists($converter,'postProcess')) var_dump('a',$converter);
  765.                 if ($postprocess$a .= $converter->postProcess($this->value[$i]);
  766.                 else $a .= $this->value[$i];
  767.             else
  768.             {
  769.                 $a .= $this->value[$i]->Convert($converter$postprocess);
  770.             }
  771.         }
  772.         if ($trim{
  773.             $a trim($a);
  774.         }
  775.         $this->cache array('name' => $converter->name,'output' => $converter->outputformat'contents' => $a'state' => $converter->getState()'postprocess' => $postprocess);
  776.         return $a;
  777.     }
  778. }
  779.  
  780. ?>

Documentation generated on Tue, 24 Oct 2006 09:24:43 -0500 by phpDocumentor 1.3.1