summaryrefslogtreecommitdiff
path: root/buildscripts/PhpDocumentor/phpDocumentor/ParserElements.inc
diff options
context:
space:
mode:
Diffstat (limited to 'buildscripts/PhpDocumentor/phpDocumentor/ParserElements.inc')
-rwxr-xr-xbuildscripts/PhpDocumentor/phpDocumentor/ParserElements.inc2287
1 files changed, 0 insertions, 2287 deletions
diff --git a/buildscripts/PhpDocumentor/phpDocumentor/ParserElements.inc b/buildscripts/PhpDocumentor/phpDocumentor/ParserElements.inc
deleted file mode 100755
index b0cdf50e..00000000
--- a/buildscripts/PhpDocumentor/phpDocumentor/ParserElements.inc
+++ /dev/null
@@ -1,2287 +0,0 @@
-<?php
-/**
- * Parser Elements, all classes representing documentable elements
- *
- * 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 phpDocumentor
- * @subpackage ParserElements
- * @author Gregory Beaver <cellog@php.net>
- * @copyright 2002-2006 Gregory Beaver
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @version CVS: $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $
- * @link http://www.phpdoc.org
- * @link http://pear.php.net/PhpDocumentor
- * @see Parser, WordParser
- * @since 1.1
- */
-
-/**
- * all elements except {@link parserPackagePage} descend from this abstract class
- * @abstract
- * @package phpDocumentor
- * @subpackage ParserElements
- * @author Greg Beaver <cellog@php.net>
- * @since 1.0rc1
- * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $
- */
-class parserElement extends parserBase
-{
- /**
- * @var mixed either false or a {@link parserDocBlock}
- */
- var $docblock = false;
- /**
- * name of this element, or include type if element is a {@link parserInclude}
- */
- var $name;
-
- /**
- * @var mixed either false or an array of paths to files with conflicts
- */
- var $conflicts = false;
-
- /**
- * location of this element (filename)
- * @var string
- */
- var $file = '';
-
- /**
- * full path location of this element (filename)
- * @var string
- */
- var $path = '';
-
- /**
- * line number on file where this element stops
- * @since 1.2
- * @var false|integer
- */
- var $endlinenumber = 0;
-
- /**
- * Line number in the source on which this element appears
- * @since 1.2
- * @var false|integer
- */
- var $linenumber = false;
-
- /**
- * @param parserDocBlock
- */
- function setDocBlock($docblock)
- {
- $this->docblock = $docblock;
- }
-
- /**
- * @param string
- */
- function setName($name)
- {
- $this->name = trim($name);
- }
-
- /**
- * Set starting line number
- * @param integer
- */
- function setLineNumber($number)
- {
- $this->linenumber = $number;
- }
-
- /**
- * Sets the ending line number of elements
- * @param integer
- */
- function setEndLineNumber($l)
- {
- $this->endlinenumber = $l;
- }
-
- /**
- * @return integer
- */
- function getLineNumber()
- {
- return $this->linenumber;
- }
-
- /**
- * @return integer
- */
- function getEndLineNumber()
- {
- return $this->endlinenumber;
- }
-
- /** @return string package containing this element */
- function getPackage()
- {
- if ($this->docblock)
- {
- return $this->docblock->package;
- } else return $GLOBALS['phpDocumentor_DefaultPackageName'];
- }
-
- /** @param string */
- function setFile($file)
- {
- $this->file = $file;
- }
-
- /** @param string */
- function setPath($file)
- {
- // look for special windows case
- if(SMART_PATH_DELIMITER === '\\')
- $this->path = strtr($file,'/','\\');
- else
- $this->path = $file;
- }
-
- /**
- * @return string
- */
- function getName()
- {
- if (!isset($this->name)) return false;
- return $this->name;
- }
-
- /**
- * @return string
- */
- function getFile()
- {
- if (!isset($this->file)) return false;
- return $this->file;
- }
-
- /**
- * @return string
- */
- function getPath()
- {
- if (!isset($this->path)) return false;
- return $this->path;
- }
-}
-
-/**
- * @package phpDocumentor
- * @subpackage ParserElements
- * @author Greg Beaver <cellog@php.net>
- * @since 1.0rc1
- * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $
- */
-class parserInclude extends parserElement
-{
- /**
- * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah'
- * @var string always 'include'
- */
- var $type = 'include';
-}
-
-/**
- * @package phpDocumentor
- * @subpackage ParserElements
- * @author Greg Beaver <cellog@php.net>
- * @since 1.1
- * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $
- */
-class parserGlobal extends parserElement
-{
- /**
- * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah'
- * @var string always 'global'
- */
- var $type = 'global';
-
- /**
- * Name of the global's data type
- * @var string
- */
- var $datatype = 'mixed';
-
- /**
- * quick way to link to this element
- * @return mixed converter-specific link to this global variable
- * @param Converter
- * @param string text to display for the link or false for default text
- */
- function getLink(&$c, $text = false, $returnobj = false)
- {
- if ($returnobj)
- {
- return $c->getLink('global ' . $this->name, $this->docblock->package);
- }
- return $c->getGlobalLink($this->name, $this->docblock->package, $this->path, $text);
- }
-
- /**
- * Returns all global variables in other packages that have the same name as this global variable
- * @return mixed false or an array Format: (package => {@link parserGlobal} of conflicting global variable)
- * @param Converter
- */
- function getConflicts(&$c)
- {
- $a = $c->proceduralpages->getGlobalConflicts($this->name);
- unset($a[$this->docblock->package]);
- return $a;
- }
-
- /**
- * Sets the name of the global variable's type
- * @param string
- */
- function setDataType($type)
- {
- $this->datatype = $type;
- }
-
- /**
- * Retrieve converter-specific representation of the data type
- *
- * If the data type is a documented class name, then this function will
- * return a Converter-specific link to that class's documentation, so users
- * can click/browse to the documentation directly from the global variable
- * declaration
- * @return string
- * @param Converter
- */
- function getDataType(&$converter)
- {
- $converted_datatype = $this->datatype;
- if (strpos($this->datatype,'|'))
- {
- $my_types = '';
- $types = explode('|',$this->datatype);
- foreach($types as $returntype)
- {
- $a = $converter->getLink($returntype);
- if (is_object($a) && phpDocumentor_get_class($a) == 'classlink')
- {
- if (!empty($my_types)) $my_types .= '|';
- $my_types .= $converter->returnSee($a,$converter->type_adjust($returntype));
- } else
- {
- if (!empty($my_types)) $my_types .= '|';
- $my_types .= $converter->type_adjust($returntype);
- }
- }
- $converted_datatype = $my_types;
- } else
- {
- $a = $converter->getLink($this->datatype);
- if (is_object($a) && phpDocumentor_get_class($a) == 'classlink')
- {
- $converted_datatype = $converter->returnSee($a,$converter->type_adjust($this->datatype));
- } else
- {
- $converted_dataype = $converter->type_adjust($this->datatype);
- }
- }
- return $converted_datatype;
- }
-
-}
-
-/**
- * @package phpDocumentor
- * @subpackage ParserElements
- * @author Greg Beaver <cellog@php.net>
- * @since 1.0rc1
- * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $
- */
-class parserFunction extends parserElement
-{
- /**
- * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah'
- * @var string always 'function'
- */
- var $type = 'function';
- /**
- * parameters parsed from function definition.
- *
- * param name may be null, in which case, updateParams() must be called from the Converter
- * @var array Format: array(param name => default value parsed from function definition)
- * @see updateParams()
- */
- var $params = false;
- /**
- * Function returns a reference to an element, instead of a value
- *
- * set to true if function is declared as:
- * <code>
- * function &func(...
- * </code>
- * @var boolean
- */
- var $returnsreference = false;
- /**
- * global declarations parsed from function definition
- *
- * @var array Format: array(globalname1, globalname2,....)
- */
- var $globals = false;
- /**
- * static variable declarations parsed from function definition
- * @var array Format: array(array('name' => staticvar1,'val' => '' or default val of staticvar1),...)
- */
- var $statics = false;
-
- var $source = '';
-
- /**
- * @param string
- * @param string default value parsed from function definition
- * @param boolean indicates whether this parameter has a default value
- * @param null|string class type hint
- */
- function addParam($name, $value, $has_default = true, $typehint = null)
- {
- $this->params[$name] = array($value, $has_default);
- if (isset($typehint))
- {
- $this->params[$name][2] = $typehint;
- }
- }
-
- /**
- * Set the source code. Always array in PHP 4.3.0+
- * @param string|array
- */
- function addSource($source)
- {
- $this->source = $source;
- }
-
- /**
- * Determine whether the source code has been requested via {@}source}
- * @return boolean
- */
- function hasSource()
- {
- if (is_array($this->source)) return true;
- return strlen($this->source);
- }
-
- /**
- * @return string|array source code ready for highlighting
- */
- function getSource()
- {
- return $this->source;
- }
-
- /**
- * quick way to link to this element
- * @return mixed converter-specific link to this function
- * @param Converter
- * @param string text to display for the link or false for default text
- */
- function getLink($c, $text = false, $returnobj = false)
- {
- if ($returnobj)
- {
- return $c->getLink('function ' . $this->name, $this->docblock->package);
- }
- return $c->getFunctionLink($this->name, $this->docblock->package, $this->path, $text);
- }
-
- /**
- * Returns all functions in other packages that have the same name as this function
- * @return mixed false or an array Format: (package => {@link parserFunction} of conflicting functions)
- * @param Converter
- */
- function getConflicts(&$c)
- {
- $a = $c->proceduralpages->getFuncConflicts($this->name);
- unset($a[$this->docblock->package]);
- return $a;
- }
-
- /**
- * Add all "global $var, $var2" declarations to this function
- * @param array $globals Format: array(globalname1, globalname2,....)
- */
- function addGlobals($globals)
- {
- $this->globals = $globals;
- }
-
- /**
- * Add all "static $var, $var2 = 6" declarations to this function
- * @param array Format: array(varname1, varname2,...)
- * @param array Format: array(default val of var 1, default val of var 2,...) if var 1 has no default, array(default val of var 2,...)
- */
- function addStatics($static,$vals)
- {
- if (count($static))
- {
- $this->statics = array();
- for($i=0;$i<count($static);$i++)
- {
- if (isset($static[$i]))
- {
- $a = '';
- if (isset($vals[$i])) $a = $vals[$i];
- $this->statics[] = array('name' => $static[$i],'val' => $a);
- }
- }
- }
- }
-
- /**
- * @return string default value of param $name
- * @param string
- */
- function getParam ($name)
- {
- if (!isset($this->params[$name])) return false;
- $test = $this->params[$name];
- if ($test[1])
- {
- return $this->params[$name];
- } else
- {
- return false;
- }
- }
-
- /**
- * @return array format: array(array(paramname, default value),...)
- */
- function listParams ()
- {
- if (isset($this->params))
- {
- $ret = array();
- if ($this->params)
- foreach($this->params as $key => $val)
- {
- if ($val[1])
- {
- $arr = array($key,$val[0]);
- if (isset($val[2]))
- {
- $arr[2] = $val[2];
- }
- $ret[$key] = $arr;
- } else
- {
- $arr = array($key,false);
- if (isset($val[2]))
- {
- $arr[2] = $val[2];
- }
- $ret[$key] = $arr;
- }
- }
- return $ret;
- } else {
- return array();
- }
- }
-
- /**
- * @return array format: array(array(index, globalname),...)
- */
- function listGlobals ()
- {
- if (isset($this->globals))
- {
- $ret = array();
- if ($this->globals)
- foreach($this->globals as $key => $val)
- {
- $ret[] = array($key,$val);
- }
- return $ret;
- } else {
- return array();
- }
- }
-
- /**
- * @return array format: array(array(static var name, static var default value),...)
- */
- function listStatics ()
- {
- if (isset($this->statics))
- {
- $ret = array();
- if ($this->statics)
- foreach($this->statics as $key => $val)
- {
- $ret[] = array($val['name'],$val['val']);
- }
- return $ret;
- } else {
- return array();
- }
- }
-
- /**
- * sets {@link $returnsreference} to true
- */
- function setReturnsReference()
- {
- $this->returnsreference = true;
- }
-
- /**
- * @return boolean returns value of {@link $returnsreference}
- */
- function getReturnsReference()
- {
- return $this->returnsreference;
- }
-
- /**
- * Get a human-friendly description of the function call
- *
- * takes declaration like:
- * <code>
- * /** @returns string ... {rest of docblock}
- * function &func($param1, $param2 = 6,
- * $param3 = array('20',9 => "heroo"))
- * {...}
- * </code>
- * and returns:
- * string &func( $param1, [$param2 = 6], [$param3 = array('20',9 => "heroo")] )
- * @return string stylized function declaration
- */
- function getFunctionCall()
- {
- $a = '';
- if ($this->getReturnsReference()) $a = '&';
- $function_call = $a.$this->getName() . " ( ";
- $tmp = 0;
- foreach($this->listParams() as $param)
- {
- if ($tmp == 0)
- {
- $tmp = 1;
- } else {
- $function_call .= ", ";
- }
- if ($param[1] !== false)
- {
- $function_call .= "[$param[0] = $param[1]]";
- } else {
- $function_call .= $param[0];
- }
- $update_params[] = $param[0];
- }
- $function_call .= " )";
- return $function_call;
- }
-
- /**
- * Like getFunctionCall(), but has no English or pre-determined formatting.
- *
- * Much more flexible.
- * @return array Format:
- * <code>
- * array('name' => function name,
- * 'returnsref' => boolean if declared as "function &name()"
- * 'params' => array('type' => data type of parameter,
- * 'description' => from @param tag,
- * 'name' => variable name,
- * 'default' => default value if any))
- * </code>
- * @see getFunctionCall()
- */
- function getIntricateFunctionCall($converter,$paramtags)
- {
- $a = array();
- if ($this->getReturnsReference()) $a['returnsref'] = true;
- $a['name'] = $converter->type_adjust($this->getName());
- $c = $this->listParams();
- foreach($c as $param)
- {
- $b = array();
- $b['type'] = 'mixed';
- if (isset($paramtags[$param[0]]))
- {
- $b['type'] = $paramtags[$param[0]]['datatype'];
- $b['description'] = $paramtags[$param[0]]['data'];
- unset($paramtags[$param[0]]);
- } elseif(isset($paramtags[substr($param[0],1)]))
- {
- $b['type'] = $paramtags[substr($param[0],1)]['datatype'];
- $b['description'] = $paramtags[substr($param[0],1)]['data'];
- unset($paramtags[substr($param[0],1)]);
- }
- if (isset($param[2]))
- {
- $link = $converter->getLink('object ' . $param[2]);
- if ($link) {
- $link = $converter->returnSee($link, $param[2], true);
- $b['type'] = $link;
- } else {
- $b['type'] = $param[2];
- }
- }
- $b['name'] = $param[0];
- $b['default'] = $converter->postProcess($param[1]);
- $b['hasdefault'] = ($param[1] !== false);
- $a['params'][] = $b;
- }
- // @param tags that don't correspond to actual parameters (like extra function values)
- if (count($paramtags))
- {
- foreach($paramtags as $param)
- {
- $b = array();
- $b['type'] = $param['datatype'];
- $b['description'] = $param['data'];
- $b['name'] = $param['var'];
- $b['default'] = '';
- $b['hasdefault'] = false;
- $a['params'][] = $b;
- }
- }
- return $a;
- }
-}
-
-/**
- * @package phpDocumentor
- * @subpackage ParserElements
- * @author Greg Beaver <cellog@php.net>
- * @since 1.0rc1
- * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $
- */
-class parserClass extends parserElement
-{
- /**
- * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah'
- * @var string always 'class'
- */
- var $type = 'class';
- /** @var string
- * @see parserPage::$sourceLocation */
- var $sourceLocation = '';
- /**
- * @var mixed false or contents of extends clause in class declaration
- */
- var $extends = false;
- /**
- * @var array a list of interfaces this class implements
- */
- var $_implements = array();
- /**
- * @var array a list of interfaces this class implements
- * @access private
- */
- var $_modifiers = false;
- /**
- * @var boolean determines whether a class is considered to be an interface
- * @access private
- */
- var $_isInterface = false;
- /**
- * Format: array(file, parent) where parent class is found or false if no parent
- * @var mixed
- */
- var $parent = false;
- /**
- * Used to determine whether a class should be ignored or not. Helps maintain integrity of parsing
- * @var boolean
- * @see Classes::getParentClass()
- */
- var $ignore = false;
-
- /**
- * @var string same as {@link parserElement::$path}
- */
- var $curfile = false;
- /**
- * @var tutorialLink|false either a link to the tutorial associated with this class, or false
- */
- var $tutorial = false;
-
- /**
- * Get the PHP5+ modifiers for this class
- * (abstract/final/static/private/protected/public)
- * @return array|false
- */
- function getModifiers()
- {
- return $this->_modifiers;
- }
-
- /**
- * Set the PHP5+ modifiers for this class
- * (abstract/final/static/private/protected/public)
- * @param string $m
- */
- function setModifiers($m)
- {
- $this->_modifiers = $m;
- }
-
- /**
- * @param parserTutorial
- * @param Converter
- */
- function addTutorial($t,&$c)
- {
- $this->tutorial = new tutorialLink;
- $this->tutorial->addLink('',$t->path,$t->name,$t->package,$t->subpackage,$t->getTitle($c));
- }
-
- /**
- * Get the associated tutorial for this class, if any
- * @tutorial tutorials.pkg
- * @return parserTutorial
- */
- function getTutorial()
- {
- return $this->tutorial;
- }
-
- /**
- * Returns all classes in other packages that have the same name as this class
- * @return mixed false or an array Format: (package => {@link parserClass} of conflicting classes)
- * @param Converter
- */
- function getConflicts(&$c)
- {
- $a = $c->classes->getConflicts($this->name);
- unset($a[$this->docblock->package]);
- return $a;
- }
-
- /**
- * quick way to link to this element
- * @return mixed converter-specific link to this class
- * @param Converter
- * @param string text to display for the link or false for default text
- */
- function getLink($c, $text = false, $returnobj = false)
- {
- if ($returnobj)
- {
- return $c->getLink('object ' . $this->name, $this->docblock->package);
- }
- return $c->getClassLink($this->name, $this->docblock->package, $this->curfile, $text);
- }
-
- /**
- * @param string parent class name
- * @param string parent class file
- * @param Classes {@link Classes} object currently calling setParent
- * @see Classes::setClassParent()
- */
-
- function setParent($p,$f, &$c)
- {
- $this->parent = array($f, $p);
- $p = $c->getClass($p, $f);
- // inherit package if no @package tag is in the docblock, fixes 591396
- if (!$this->docblock->getExplicitPackage())
- {
- $this->docblock->package = $p->docblock->package;
- }
- if ($this->docblock->package == $p->docblock->package)
- {
- if ($this->docblock->subpackage == '')
- $this->docblock->subpackage = $p->docblock->subpackage;
- }
- $author = $p->docblock->getKeyword('author');
- $version = $p->docblock->getKeyword('version');
- $copyright = $p->docblock->getKeyword('copyright');
- // inherit tags
- if (!$this->docblock->getKeyword('author'))
- {
- if ($author && !is_array($author)) $author = array($author);
- if ($author) $this->docblock->tags['author'] = $author;
- }
- if (!$this->docblock->getKeyword('version'))
- {
- if ($version && !is_array($version)) $version = array($version);
- if ($version) $this->docblock->tags['version'] = $version;
- }
- if (!$this->docblock->getKeyword('copyright'))
- {
- if ($copyright && !is_array($copyright)) $copyright = array($copyright);
- if ($copyright) $this->docblock->tags['copyright'] = $copyright;
- }
- if (!$this->docblock->sdesc)
- {
- $this->docblock->setShortDesc($p->docblock);
- $this->docblock->setDesc($p->docblock);
- } else
- {
- if ($this->docblock->hasInheritDoc())
- {
- $this->docblock->replaceInheritDoc($p->docblock);
- }
- }
- }
-
- /**
- * @param string $par parent class name (used by {@link Classes::setClassParent()} if parent class not found
- */
- function setParentNoClass($par)
- {
- $this->parent = $par;
- }
-
- /**
- * Use this method to set the type of class to be an interface
- */
- function setInterface()
- {
- $this->_isInterface = true;
- }
-
- /**
- * @return boolean true if this is an interface class
- */
- function isInterface()
- {
- return $this->_isInterface;
- }
-
- /**
- * Use this method to set access modifiers for a class
- * @param array
- */
- function setAccessModifiers($modifiers)
- {
- $this->_modifiers = $modifiers;
- }
-
- /**
- * retrieve object that represents the parent class
- * @param Converter this function will not work before the Conversion stage of parsing
- * @return mixed returns the {@link parserClass} representation of the parent class, or false if no parent class
- */
- function &getParent(&$c)
- {
- $a = false;
- if (!$this->parent) return $a;
- if (is_array($this->parent))
- {
- return $c->classes->getClass($this->parent[1],$this->parent[0]);
- } else return $this->parent;
- }
-
- /**
- * @param Converter this function will not work before the Conversion stage of parsing
- * @return array returns a simple array of method objects
- */
- function getMethods(&$c)
- {
- return $c->classes->getMethods($this->name,$this->curfile);
- }
-
- /**
- * @return mixed {@link parserMethod} or false if not found
- * @param Converter this function will not work before the Conversion stage of parsing
- * @param string method name in this class
- * @param boolean determines whether to search inherited methods as well
- */
- function getMethod(&$c, $name, $inherited = false)
- {
- $ret = $c->classes->getMethod($this->name, $this->curfile, $name);
- if ($ret) return $ret;
- if ($inherited) {
- $x = $this;
- while ($x->parent && is_array($x->parent)) {
- $par = $x->getParent($c);
- $x = $par;
- if ($meth = $x->getMethod($c, $name)) return $meth;
- }
- }
- return false;
- }
-
- /**
- * @return mixed {@link parserVar} or false if not found
- * @param Converter this function will not work before the Conversion stage of parsing
- * @param string var name in this class
- */
- function getVar(&$c, $name)
- {
- return $c->classes->getVar($this->name,$this->curfile,$name);
- }
-
- /**
- * @param Converter this function will not work before the Conversion stage of parsing
- * @return array returns a simple array of method name strings
- */
- function getMethodNames(&$c)
- {
- if (!$c->classes->hasMethods($this->curfile, $this->name)) return array();
- $arr = array();
- $arr1 = $this->getMethods($c);
- for($i=0; $i < count($arr1); $i++)
- {
- $arr[] = $arr1[$i]->name;
- }
- return $arr;
- }
-
- /**
- * @param Converter this function will not work before the Conversion stage of parsing
- * @param string method name
- * @param boolean determines whether to search inherited methods as well
- * @return boolean whether this class has a method of name $name
- */
- function hasMethod(&$c, $name, $inherited = false)
- {
- $ret = $c->classes->hasMethod($this->name, $this->curfile, $name);
- if ($ret) return $ret;
- if ($inherited) {
- $x = $this;
- while ($x->parent && is_array($x->parent)) {
- $par = $x->getParent($c);
- $x = $par;
- if ($x->hasMethod($c, $name)) return true;
- }
- }
- return false;
- }
-
- /**
- * @param Converter this function will not work before the Conversion stage of parsing
- * @param string var name
- * @return boolean whether this class has a var of name $name
- */
- function hasVar(&$c,$name)
- {
- return $c->classes->hasVar($this->name, $this->curfile, $name);
- }
-
- /**
- * @param Converter this function will not work before the Conversion stage of parsing
- * @param string class constant name
- * @return boolean whether this class has a constant of name $name
- */
- function hasConst(&$c,$name)
- {
- return $c->classes->hasConst($this->name, $this->curfile, $name);
- }
-
- /**
- * @param Converter this function will not work before the Conversion stage of parsing
- * @return array returns a simple array of var objects
- */
- function getVars(&$c)
- {
- return $c->classes->getVars($this->name,$this->curfile);
- }
-
- /**
- * @param Converter this function will not work before the Conversion stage of parsing
- * @return array returns a simple array of const objects
- */
- function getConsts(&$c)
- {
- return $c->classes->getConsts($this->name,$this->curfile);
- }
-
- /**
- * @param Converter this function will not work before the Conversion stage of parsing
- * @return array returns a simple array of var name strings
- */
- function getVarNames(&$c)
- {
- if (!$c->classes->hasVars($this->curfile, $this->name)) return array();
- $arr = array();
- $arr1 = $this->getVars($c);
- for($i=0; $i < count($arr1); $i++)
- {
- $arr[] = $arr1[$i]->name;
- }
- return $arr;
- }
-
- /**
- * @param Converter this function will not work before the Conversion stage of parsing
- * @return array returns a simple array of const name strings
- */
- function getConstNames(&$c)
- {
- if (!$c->classes->hasConsts($this->curfile, $this->name)) return array();
- $arr = array();
- $arr1 = $this->getConsts($c);
- for($i=0; $i < count($arr1); $i++)
- {
- $arr[] = $arr1[$i]->name;
- }
- return $arr;
- }
-
- /**
- * @param Converter this function will not work before the Conversion stage of parsing
- * @param boolean determines whether overriden methods should be included in the list of inherited methods
- * @return array returns an array of methods by parent classname array(name => array(method1,method2..),name2 => array(method1....))
- */
- function getInheritedMethods(&$c,$override = false)
- {
- $x = $oldx = $this;
- $methods = array();
- $arr = array();
- while ($x->parent && is_array($x->parent))
- {
- $methods = array_merge($methods,$x->getMethodNames($c));
- $par = $x->getParent($c);
- $parmethodnames = $par->getMethodNames($c);
- $parmethods = $par->getMethods($c);
- for($i=0; $i<count($parmethodnames); $i++)
- {
- if ($override)
- {
- if (!in_array($parmethodnames[$i],$methods))
- {
- // fix for bug 587733
- if ($parmethods[$i]->docblock && $parmethods[$i]->docblock->hasaccess && !$c->parseprivate && $parmethods[$i]->docblock->tags['access'][0]->value == 'private')
- {
- continue;
- }
- $methods[] = $parmethodnames[$i];
- $arr[$par->getName()]['methods'][] = $parmethods[$i];
- $arr[$par->getName()]['file'] = $par->curfile;
- }
- } else
- {
- // fix for bug 587733
- if ($parmethods[$i]->docblock && $parmethods[$i]->docblock->hasaccess && !$c->parseprivate && $parmethods[$i]->docblock->tags['access'][0]->value == 'private')
- {
- continue;
- }
- $arr[$par->getName()]['methods'][] = $parmethods[$i];
- $arr[$par->getName()]['file'] = $par->curfile;
- }
- }
- $oldx = $x;
- $x = &$par;
- }
- if (is_a($oldx, 'parserClass') && is_a($oldx->getExtends(true), 'ReflectionClass')) {
- $extends = $oldx->getExtends(true);
- foreach ($extends->getMethods() as $method) {
- $var = new parserMethod($oldx->getExtends());
- if ($method->returnsReference()) {
- $var->setReturnsReference();
- }
- $doc = new parserDocBlock;
- foreach ($method->getParameters() as $param) {
- $value = $param->isDefaultValueAvailable() ? var_export($param->getDefaultValue(), true) : null;
- if ($param->isPassedByReference()) {
- $var->addParam('&$' . $param->getName(), $value, $param->isOptional(),
- $param->getClass());
- } else {
- $var->addParam('$' . $param->getName(), $value, $param->isOptional(),
- $param->getClass());
- }
- }
- $var->setName($method->getName());
- $doc->addPackage('package', $oldx->getPackage());
- $var->setDocBlock($doc);
- $par = $method->getDeclaringClass();
- $var->setLineNumber($par->getStartLine());
- $modifiers = array();
- if ($method->isPrivate()) {
- $modifiers[] = 'private';
- }
- if ($method->isAbstract()) {
- $modifiers[] = 'abstract';
- }
- if ($method->isFinal()) {
- $modifiers[] = 'final';
- }
- if ($method->isProtected()) {
- $modifiers[] = 'protected';
- }
- if ($method->isPublic()) {
- $modifiers[] = 'public';
- }
- if ($method->isStatic()) {
- $modifiers[] = 'static';
- }
- if ($method->isConstructor()) {
- $var->setConstructor();
- }
- $var->setModifiers($modifiers);
- $arr[$oldx->getExtends()]['methods'][] = $var;
- $arr[$oldx->getExtends()]['file'] = '(internal)';
- }
- }
- return $arr;
- }
-
- /**
- * @param Converter this function will not work before the Conversion stage of parsing
- * @param boolean determines whether overriden vars should be included in the list of inherited vars
- * @return array returns an array of vars by parent classname array(name => array(var1,var1..),name2 => array(var1....))
- */
- function getInheritedVars(&$c,$override = true, $vars = false)
- {
- $x = $oldx = $this;
- $vars = array();
- $arr = array();
- while ($x->parent && is_array($x->parent))
- {
- $vars = array_merge($vars,$x->getVarNames($c));
- $par = $x->getParent($c);
- $parvarnames = $par->getVarNames($c);
- $parvars = $par->getVars($c);
- for($i=0; $i<count($parvarnames); $i++)
- {
- if ($override)
- {
- if (!in_array($parvarnames[$i],$vars))
- {
- // fix for bug 587733
- if ($parvars[$i]->docblock && $parvars[$i]->docblock->hasaccess && !$c->parseprivate && $parvars[$i]->docblock->tags['access'][0]->value == 'private')
- {
- continue;
- }
- $vars[] = $parvarnames[$i];
- $arr[$par->getName()]['vars'][] = $parvars[$i];
- $arr[$par->getName()]['file'] = $par->curfile;
- }
- } else
- {
- // fix for bug 587733
- if ($parvars[$i]->docblock && $parvars[$i]->docblock->hasaccess && !$c->parseprivate && $parvars[$i]->docblock->tags['access'][0]->value == 'private')
- {
- continue;
- }
- $arr[$par->getName()]['vars'][] = $parvars[$i];
- $arr[$par->getName()]['file'] = $par->curfile;
- }
- }
- $oldx = $x;
- $x = &$par;
- }
- if (is_a($oldx, 'parserClass') && is_a($oldx->getExtends(true), 'ReflectionClass')) {
- $extends = $oldx->getExtends(true);
- foreach ($extends->getProperties() as $property) {
- $var = new parserVar($oldx->getExtends());
- $doc = new parserDocBlock;
- $var->setName('$' . $property->getName());
- $doc->addPackage('package', $oldx->getPackage());
- $par = $property->getDeclaringClass();
- $var->setLineNumber($par->getStartLine());
- $modifiers = array();
- if ($property->isPrivate()) {
- $modifiers[] = 'private';
- $doc->addAccess('private');
- }
- if ($property->isProtected()) {
- $modifiers[] = 'protected';
- $doc->addAccess('protected');
- }
- if ($property->isPublic()) {
- $modifiers[] = 'public';
- $doc->addAccess('public');
- }
- $var->setDocBlock($doc);
- $var->setModifiers($modifiers);
- $arr[$oldx->getExtends()]['vars'][] = $var;
- $arr[$oldx->getExtends()]['file'] = '(internal)';
- }
- }
- return $arr;
- }
-
- /**
- * @param Converter this function will not work before the Conversion stage of parsing
- * @param boolean determines whether overriden vars should be included in the list of inherited vars
- * @return array returns an array of consts by parent classname array(name => array(const1,const2..),name2 => array(const1....))
- */
- function getInheritedConsts(&$c,$override = false, $consts = false)
- {
- $x = $oldx = $this;
- $consts = array();
- $arr = array();
- while ($x->parent && is_array($x->parent))
- {
- $consts = array_merge($consts,$x->getConstNames($c));
- $par = $x->getParent($c);
- $parvarnames = $par->getConstNames($c);
- $parvars = $par->getConsts($c);
- for($i=0; $i<count($parvarnames); $i++)
- {
- if ($override)
- {
- if (!in_array($parvarnames[$i],$consts))
- {
- // fix for bug 587733
- if ($parvars[$i]->docblock && $parvars[$i]->docblock->hasaccess && !$c->parseprivate && $parvars[$i]->docblock->tags['access'][0]->value == 'private')
- {
- continue;
- }
- $consts[] = $parvarnames[$i];
- $arr[$par->getName()]['consts'][] = $parvars[$i];
- $arr[$par->getName()]['file'] = $par->curfile;
- }
- } else
- {
- // fix for bug 587733
- if ($parvars[$i]->docblock && $parvars[$i]->docblock->hasaccess && !$c->parseprivate && $parvars[$i]->docblock->tags['access'][0]->value == 'private')
- {
- continue;
- }
- $arr[$par->getName()]['consts'][] = $parvars[$i];
- $arr[$par->getName()]['file'] = $par->curfile;
- }
- }
- $oldx = $x;
- $x = &$par;
- }
- if (is_a($oldx, 'parserClass') && is_a($oldx->getExtends(true), 'ReflectionClass')) {
- $extends = $oldx->getExtends(true);
- if (!$extends->getConstants()) {
- return $arr;
- }
- foreach ($extends->getConstants() as $property => $value) {
- $var = new parserConst($oldx->getExtends());
- $doc = new parserDocBlock;
- $var->setName($property);
- $var->setValue(var_export($value, true));
- $doc->addPackage('package', $oldx->getPackage());
- $var->setLineNumber($extends->getStartLine());
- $var->setDocBlock($doc);
- $arr[$oldx->getExtends()]['consts'][] = $var;
- $arr[$oldx->getExtends()]['file'] = '(internal)';
- }
- }
- return $arr;
- }
-
- /**
- * @param Converter this function will not work before the Conversion stage of parsing
- * @return array Format: array(parentclassname => parserClass/false if no parent, parentclassname2 => ...)
- */
- function getParentClassTree(&$c)
- {
- $result = array();
- $result[$this->name] = $arr = $this->getParent($c);
- if (is_string($arr)) $result[$arr] = false;
- while ($arr && is_object($arr))
- {
- $result[$arr->name] = $arr->getParent($c);
- $arr = $arr->getParent($c);
- if (is_string($arr)) $result[$arr] = false;
- }
- return $result;
- }
-
- /**
- * returns a list of all child classes of this class
- * @param Converter this function will not work before the Conversion stage of parsing
- * @return array Format: array(parserClass child1,parserClass child2,...)
- */
- function getChildClassList(&$c)
- {
- $list = array();
- $kids = $c->classes->getDefiniteChildren($this->name,$this->curfile);
- if ($kids)
- {
- foreach($kids as $chile => $file)
- {
- $list[] = $c->classes->getClass($chile,$file);
- }
- }
- return $list;
- }
-
- /**
- * @param string
- * @see $sourceLocation
- */
- function setSourceLocation($sl)
- {
- $this->sourceLocation = $sl;
- }
-
- /**
- * @param Converter
- * @param boolean
- * @return string
- * @see $sourceLocation
- */
- function getSourceLocation($c,$pearize = false)
- {
- global $_phpDocumentor_options;
- if (!isset($this->sourceLocation))
- {
- $sl = false;
- }
- else
- {
- $sl = $this->sourceLocation;
- if ($pearize)
- {
- if (strpos($sl,'pear/'))
- {
- $sl = substr($sl,strpos($sl,'pear/') + 5);
- }
- }
- }
- return $sl;
- }
-
- /**
- * @param string
- * @see $extends
- */
- function setExtends($extends)
- {
- $this->extends = $extends;
- if (!class_exists('ReflectionClass') || !class_exists($extends)) {
- return;
- }
- // this may throw an exception. Hopefully it won't if the class exists
- $parent = new ReflectionClass($extends);
- if (!$parent->isInternal()) {
- return;
- }
- $this->extends = $parent;
- }
-
- /**
- * @param string
- */
- function addImplements($implements)
- {
- $this->_implements[] = $implements;
- }
-
- /**
- * @return array
- */
- function getImplements()
- {
- return $this->_implements;
- }
-
- /**
- * @return boolean
- * @see $extends
- */
- function getExtends($raw = false)
- {
- if (!isset($this->extends)) return false;
- if (!$raw) {
- if (is_a($this->extends, 'ReflectionClass')) {
- return $this->extends->getName();
- }
- }
- return $this->extends;
- }
-}
-
-/**
- * @package phpDocumentor
- * @subpackage ParserElements
- * @author Greg Beaver <cellog@php.net>
- * @since 1.0rc1
- * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $
- */
-class parserVar extends parserElement
-{
- /**
- * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah'
- * @var string always 'var'
- */
- var $type = 'var';
- /** @var string class that contains this var */
- var $class = '';
- /** @var array */
- var $_modifiers;
-
- /**
- * @param string
- */
- function parserVar($class)
- {
- $this->class = $class;
- }
-
- /**
- * Retrieve the class name
- * @return string Class name that this var belongs to
- */
- function getClass()
- {
- return $this->class;
- }
-
- /**
- * Return a list of access modifiers (static/private/etc.)
- * @return array
- */
- function getModifiers()
- {
- return $this->_modifiers;
- }
-
- /**
- * Return name of the class that contains this method
- * @return string
- */
- function setModifiers($m)
- {
- $this->_modifiers = $m;
- }
-
- /**
- * quick way to link to this element
- * @return mixed converter-specific link to this var
- * @param Converter $c
- * @param string $text text to display for the link or false for default text
- */
- function getLink($c, $text = false, $returnobj = false)
- {
- if ($returnobj)
- {
- return $c->getLink($this->class . '::' . $this->name, $this->docblock->package);
- }
- return $c->getVarLink($this->name, $this->class, $this->docblock->package, false, $text);
- }
-
- /**
- * @param Converter
- * @return mixed {@link parserVar} representing var this var overrides from the parent class, or false if none
- */
- function getOverrides(&$c)
- {
- $class = $c->classes->getClass($this->class,$this->path);
- $par = $class->getParent($c);
-
- if (!is_object($par)) {
- if (is_a($class->getExtends(true), 'ReflectionClass')) {
- $pare = $class->getExtends(true);
- if (method_exists($pare, 'hasProperty') &&
- $pare->hasProperty(substr($this->name, 1))) {
- $par = $pare;
- $property = $par->getProperty(substr($this->name, 1));
- $ret = new parserVar($par->getName());
- $doc = new parserDocBlock;
- $ret->setName('$' . $property->getName());
- $doc->addPackage('package', $class->getPackage());
- $ret->setLineNumber($par->getStartLine());
- $modifiers = array();
- if ($property->isPrivate()) {
- if ($c->parseprivate) {
- return false;
- }
- $modifiers[] = 'private';
- $doc->addAccess('private');
- }
- if ($property->isProtected()) {
- $modifiers[] = 'protected';
- $doc->addAccess('protected');
- }
- if ($property->isPublic()) {
- $modifiers[] = 'public';
- $doc->addAccess('public');
- }
- $ret->setDocBlock($doc);
- $ret->setModifiers($modifiers);
- return $ret;
- }
- }
- }
- while (is_object($par))
- {
- if ($par->hasVar($c,$this->name))
- {
- $var = $par->getVar($c,$this->name);
- if (!($var->docblock && $var->docblock->hasaccess &&
- !$c->parseprivate && $var->docblock->tags['access'][0]->value == 'private')) {
- return $var;
- }
- }
- $par = $par->getParent($c);
- }
-
- return false;
- }
-
- /**
- * @param Converter
- * @return array an array of parserVars from ALL child classes that override this var
- */
- function getOverridingVars(&$c)
- {
- $class = $c->classes->getClass($this->class,$this->path);
-
- return $this->getOverridingVarsForClass($c, $class);
- }
-
- /**
- * @param Converter
- * @param parserClass
- * @return array an array of parserVars from ALL child classes that override this var in the given class
- */
- function getOverridingVarsForClass(&$c, &$class)
- {
- $vars = array();
- if (!$class) return $meths;
- $kids = $class->getChildClassList($c);
- for($i=0; $i<count($kids); $i++)
- {
- if ($kids[$i]->hasVar($c, $this->name))
- {
- $var = $kids[$i]->getVar($c,$this->name);
- if (!($var->docblock && $var->docblock->hasaccess && !$c->parseprivate && $var->docblock->tags['access'][0]->value == 'private'))
- $vars[] = $var;
- }
-
- $vars = array_merge($vars, $this->getOverridingVarsForClass($c, $kids[$i]));
- }
- return $vars;
- }
-}
-
-/**
- * @package phpDocumentor
- * @subpackage ParserElements
- * @author Greg Beaver <cellog@php.net>
- * @since 1.2.4
- */
-class parserConst extends parserElement
-{
- /**
- * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah'
- * @var string always 'const'
- */
- var $type = 'const';
- /** @var string class that contains this var */
- var $class = '';
-
- /**
- * @param string
- */
- function parserConst($class)
- {
- $this->class = $class;
- }
-
- /**
- * Retrieve the class name
- * @return string Class name that this var belongs to
- */
- function getClass()
- {
- return $this->class;
- }
-
- /**
- * quick way to link to this element
- * @return mixed converter-specific link to this var
- * @param Converter $c
- * @param string $text text to display for the link or false for default text
- */
- function getLink($c, $text = false, $returnobj = false)
- {
- if ($returnobj)
- {
- return $c->getLink($this->class . '::'. $this->name, $this->docblock->package);
- }
- return $c->getConstLink($this->name, $this->class, $this->docblock->package, false, $text);
- }
-}
-
-/**
- * @package phpDocumentor
- * @subpackage ParserElements
- * @author Greg Beaver <cellog@php.net>
- * @since 1.0rc1
- * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $
- */
-class parserMethod extends parserFunction
-{
- /**
- * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah'
- * @var string always 'method'
- */
- var $type = 'method';
- /** @var boolean whether this method is a constructor */
- var $isConstructor = false;
- /** @var boolean whether this method is a destructor by PEAR standards */
- var $isDestructor = false;
- /** @var string class that contains this method */
- var $class = '';
- var $_modifiers = array();
-
- /**
- * @param string
- */
- function parserMethod($class)
- {
- $this->class = $class;
- }
-
- /**
- * @param string
- * @param string default value parsed from function definition
- * @param boolean indicates whether this parameter has a default value
- * @param null|string class type hint
- */
- function addParam($name, $value, $has_default = true, $typehint = null)
- {
- $this->params[$name] = array($value, $has_default);
- if (isset($typehint))
- {
- $this->params[$name][2] = $typehint;
- }
- }
-
- /**
- * adds "constructor " to start of function call if {@link $isConstructor} is true
- * @return string
- * @see parent::getFunctionCall()
- */
- function getFunctionCall()
- {
- $a = parserFunction::getFunctionCall();
- if ($this->isConstructor) $a = "constructor $a";
- return $a;
- }
-
- function getIntricateFunctionCall($converter,$paramtags)
- {
- $a = parserFunction::getIntricateFunctionCall($converter,$paramtags);
- if ($this->isConstructor) $a['constructor'] = true;
- if ($this->isDestructor) $a['destructor'] = true;
- return $a;
- }
-
- /**
- * Return name of the class that contains this method
- * @return string
- */
- function getClass()
- {
- return $this->class;
- }
-
- /**
- * Return name of the class that contains this method
- * @return string
- */
- function getModifiers()
- {
- return $this->_modifiers;
- }
-
- /**
- * Return name of the class that contains this method
- * @return string
- */
- function setModifiers($m)
- {
- $this->_modifiers = $m;
- }
-
- /**
- * @param Converter
- * @return mixed {@link parserMethod} representing method this method
- * overrides from the parent class, or false if none
- */
- function getOverrides(&$c)
- {
- $class = $c->classes->getClass($this->class,$this->path);
-
- $par = $class->getParent($c);
- if (!is_object($par)) {
- if (is_a($class->getExtends(true), 'ReflectionClass')) {
- $pare = $class->getExtends(true);
- if (method_exists($pare, 'hasMethod') && $pare->hasMethod($this->name)) {
- $par = $pare;
- $method = $par->getMethod($this->name);
- $var = new parserMethod($par->getName());
- if ($method->returnsReference()) {
- $var->setReturnsReference();
- }
- $doc = new parserDocBlock;
- foreach ($method->getParameters() as $param) {
- $value = ($param->isOptional() && !$method->isInternal()) ? var_export($param->getDefaultValue(), true) : null;
- if ($param->isPassedByReference()) {
- $var->addParam('&$' . $param->getName(), $value, $param->isOptional(),
- $param->getClass());
- } else {
- $var->addParam('$' . $param->getName(), $value, $param->isOptional(),
- $param->getClass());
- }
- }
- $var->setName($method->getName());
- $doc->addPackage('package', $this->getPackage());
- $par = $method->getDeclaringClass();
- $var->setLineNumber($par->getStartLine());
- $modifiers = array();
- if ($method->isPrivate()) {
- $modifiers[] = 'private';
- $doc->addAccess('private');
- }
- $blank = new parserStringWithInlineTags;
- if ($method->isAbstract()) {
- $modifiers[] = 'abstract';
- $doc->addKeyword('abstract', $blank);
- }
- if ($method->isFinal()) {
- $modifiers[] = 'final';
- $doc->addKeyword('final', $blank);
- }
- if ($method->isProtected()) {
- $modifiers[] = 'protected';
- $doc->addAccess('protected');
- }
- if ($method->isPublic()) {
- $modifiers[] = 'public';
- $doc->addAccess('public');
- }
- if ($method->isStatic()) {
- $modifiers[] = 'static';
- $doc->addKeyword('static', $blank);
- }
- if ($method->isConstructor()) {
- $var->setConstructor();
- }
- $var->setDocBlock($doc);
- $var->setModifiers($modifiers);
- return $var;
- }
- }
- }
-
- while (is_object($par))
- {
- if ($par->hasMethod($c,$this->name))
- {
- $meth = $par->getMethod($c,$this->name);
- if (!($meth->docblock && $meth->docblock->hasaccess &&
- !$c->parseprivate && $meth->docblock->tags['access'][0]->value == 'private')) {
- return $meth;
- }
- }
-
- $par = $par->getParent($c);
- }
-
- return false;
- }
- /**
- * @param Converter
- * @return mixed {@link parserMethod} representing method this method implements
- * from an interface, or false if none
- */
- function getImplements(&$c)
- {
- $class = $c->classes->getClass($this->class,$this->path);
-
- $implements = $class->getImplements();
- if (!count($implements)) {
- return false;
- }
- $ret = array();
- $haveAlready = array();
- foreach ($implements as $interface) {
- $interface_link = $c->getLink('object ' . $interface);
- if (is_a($interface_link, 'classlink')) {
- $par = $c->classes->getClass($interface_link->name,
- $interface_link->path);
- if (is_object($par)) {
- if ($par->hasMethod($c, $this->name, true))
- {
- $meth = $par->getMethod($c, $this->name);
- if (!$meth) {
- $meth = $par->getMethod($c, $this->name, true);
- }
- if (!($meth->docblock && $meth->docblock->hasaccess &&
- !$c->parseprivate && $meth->docblock->tags['access'][0]->value == 'private')) {
- if (isset($haveAlready[$meth->getClass()])) {
- // this ensures extended interfaces don't cause
- // 2 links to the same method
- if ($haveAlready[$meth->getClass()] == $this->name) {
- continue;
- }
- }
- $ret[] = $meth;
- $haveAlready = array($meth->getClass() => $this->name);
- }
- }
- }
- continue;
- }
- if (class_exists('ReflectionClass')) {
- if (interface_exists($interface)) {
- $info = new ReflectionClass($interface);
- if (method_exists($info, 'hasMethod') && $info->hasMethod($this->name)) {
- $par = $info;
- $method = $par->getMethod($this->name);
- $var = new parserMethod($par->getName());
- if ($method->returnsReference()) {
- $var->setReturnsReference();
- }
- $doc = new parserDocBlock;
- foreach ($method->getParameters() as $param) {
- $value = $param->isOptional() ? var_export($param->getDefaultValue(), true) : null;
- if ($param->isPassedByReference()) {
- $var->addParam('&$' . $param->getName(), $value, $param->isOptional(),
- $param->getClass());
- } else {
- $var->addParam('$' . $param->getName(), $value, $param->isOptional(),
- $param->getClass());
- }
- }
- $var->setName($method->getName());
- $doc->addPackage('package', $this->getPackage());
- $par = $method->getDeclaringClass();
- $var->setLineNumber($par->getStartLine());
- $modifiers = array();
- if ($method->isPrivate()) {
- $modifiers[] = 'private';
- $doc->addAccess('private');
- }
- $blank = new parserStringWithInlineTags;
- if ($method->isAbstract()) {
- $modifiers[] = 'abstract';
- $doc->addKeyword('abstract', $blank);
- }
- if ($method->isFinal()) {
- $modifiers[] = 'final';
- $doc->addKeyword('final', $blank);
- }
- if ($method->isProtected()) {
- $modifiers[] = 'protected';
- $doc->addAccess('protected');
- }
- if ($method->isPublic()) {
- $modifiers[] = 'public';
- $doc->addAccess('public');
- }
- if ($method->isStatic()) {
- $modifiers[] = 'static';
- $doc->addKeyword('static', $blank);
- }
- if ($method->isConstructor()) {
- $var->setConstructor();
- }
- $var->setDocBlock($doc);
- $var->setModifiers($modifiers);
- $ret[] = $var;
- continue;
- }
- }
- }
- }
-
- return $ret;
- }
-
- /**
- * quick way to link to this element
- * @return mixed converter-specific link to this method
- * @param Converter $c
- * @param string $text text to display for the link or false for default text
- */
- function getLink($c, $text = false, $returnobj = false)
- {
- if ($returnobj)
- {
- return $c->getLink($this->class . '::' . $this->name . '()', $this->docblock->package);
- }
- return $c->getMethodLink($this->name, $this->class, $this->docblock->package, false, $text);
- }
-
- /**
- * Use this method to tell the parser that this method is the class constructor
- */
- function setConstructor()
- {
- $this->isConstructor = true;
- }
-
- /**
- * Use this method to tell the parser that this method is the class constructor
- */
- function setDestructor()
- {
- $this->isDestructor = true;
- }
-
- /**
- * @param Converter
- * @return array an array of parserMethods from child classes that override this method
- */
- function getOverridingMethods(&$c)
- {
- $class = $c->classes->getClass($this->class,$this->path);
-
- return $this->getOverridingMethodsForClass($c, $class);
- }
-
- /**
- * @param Converter
- * @param parserClass
- * @return array an array of parserMethods from ALL child classes that override this method in the given class
- */
- function getOverridingMethodsForClass(&$c, &$class)
- {
- $meths = array();
- if (!$class) return $meths;
- $kids = $class->getChildClassList($c);
- for($i=0; $i<count($kids); $i++)
- {
- if ($kids[$i]->hasMethod($c, $this->name))
- {
- $meth = $kids[$i]->getMethod($c,$this->name);
- if (!($meth->docblock && $meth->docblock->hasaccess && !$c->parseprivate && $meth->docblock->tags['access'][0]->value == 'private'))
- $meths[] = $meth;
- }
-
- $meths = array_merge($meths, $this->getOverridingMethodsForClass($c, $kids[$i]));
- }
- return $meths;
- }
-}
-
-/**
- * @package phpDocumentor
- * @subpackage ParserElements
- * @author Greg Beaver <cellog@php.net>
- * @since 1.0rc1
- * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $
- */
-class parserDefine extends parserElement
-{
- /**
- * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah'
- * @var string always 'define'
- */
- var $type = 'define';
-
- /**
- * quick way to link to this element
- * @return mixed converter-specific link to this define
- * @param Converter $c
- * @param string $text text to display for the link or false for default text
- */
- function getLink($c, $text = false, $returnobj = false)
- {
- if ($returnobj)
- {
- return $c->getLink('constant ' . $this->name, $this->docblock->package);
- }
- return $c->getDefineLink($this->name, $this->docblock->package, false, $text);
- }
-
- /**
- * Returns all defines in other packages that have the same name as this define
- * @return mixed false or an array Format: (package => {@link parserDefine} of conflicting defines)
- * @param Converter
- */
- function getConflicts(&$c)
- {
- $a = $c->proceduralpages->getDefineConflicts($this->name);
- unset($a[$this->docblock->package]);
- return $a;
- }
-
-}
-
-/**
- * @package phpDocumentor
- * @subpackage ParserElements
- * @author Greg Beaver <cellog@php.net>
- * @since 1.0rc1
- * @version $Id: ParserElements.inc 248547 2007-12-19 02:16:49Z ashnazg $
- */
-class parserPackagePage extends parserStringWithInlineTags
-{
- /**
- * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah'
- * @var string always 'packagepage'
- */
- var $type = 'packagepage';
- /** @var string */
- var $package = 'default';
-
- /**
- * @param string
- */
- function parserPackagePage($package)
- {
- $this->package = $package;
- }
-
- /**
- * @param Converter
- */
- function Convert(&$c)
- {
- return parent::Convert($c,false);
- }
-}
-
-/**
- * @package phpDocumentor
- * @subpackage ParserElements
- * @since 1.2
- */
-class parserTutorial extends parserPackagePage
-{
- /**
- * Type is used by many functions to skip the hassle of if phpDocumentor_get_class($blah) == 'parserBlah'
- * @var string always 'tutorial'
- */
- var $type = 'tutorial';
- /** @var string */
- var $package = 'default';
- /**
- * Either cls, pkg, or proc
- * @var string
- */
- var $tutorial_type;
- /**
- * The documentable element this tutorial is linked to
- *
- * Can be a parserData, parserClass, or nothing for package/subpackage docs
- */
- var $linked_element;
- /**
- * path to the tutorial page
- * @var string
- */
- var $path;
- /**
- * filename minus extension of this tutorial (used for @tutorial tag)
- * @var string
- */
- var $name;
- /** @var boolean */
- var $_xml = true;
- /**
- * output from tutorialname.ext.ini
- *
- * an array generated by {@link phpDocumentor_parse_ini_file()} containing
- * an index 'Linked Tutorials' with an array of tutorial names in the order
- * they should appear. This is used to generate a linked list of tutorials like
- * {@tutorial phpDocumentor/tags.pkg}
- * @var array
- */
- var $ini = false;
- /**
- * link to the next tutorial in a document series, or false if none
- * @var tutorialLink
- */
- var $next = false;
- /**
- * link to the previous tutorial in a document series, or false if none
- * @var tutorialLink
- */
- var $prev = false;
- /**
- * link to the parent tutorial in a document series, or false if none
- *
- * This is used to generate an "Up" or "Home" link like the php manual.
- * The parent is defined as a tutorial that has a parenttutorialname.ext.ini
- * file and is not contained by any other tutorial's tutorialname.ext.ini
- * @var tutorialLink
- */
- var $parent = false;
- /**
- * links to the child tutorials, or false if none
- * @var array
- */
- var $children = false;
-
- /**
- * @param parserXMLDocBookTag top-level tag (<refentry> for 1.2.0)
- * @param information about the tutorial file. Format:
- *
- * <pre>
- * array('tutename' => tutorial name,
- * 'path' => relative path of tutorial to tutorials/ directory
- * 'ini' => contents of the tutorial .ini file, if any)
- * </pre>
- */
- function parserTutorial($data, $info)
- {
- $this->value = $data;
- $this->package = $info['package'];
- $this->subpackage = $info['subpackage'];
- $this->tutorial_type = $info['tutetype'];
- $this->name = $info['tutename'];
- $this->path = $info['path'];
- $this->ini = $info['ini'];
- }
-
- /**
- * Retrieve the title of the tutorial, or of any subsection
- * @param Converter
- * @param string which subsection to retrieve the title from, if any
- * @uses parserXMLDocBookTag::getSubSection() retrieve the subsection to
- * to get a title from
- */
- function getTitle(&$c,$subsection = '')
- {
- if (!empty($subsection))
- {
- $z = $this->value->getSubSection($c,$subsection);
- if (!$z)
- {
- addWarning(PDERROR_TUTORIAL_SUBSECTION_NOT_FOUND,$this->name,$subsection);
- return $subsection;
- }
- return $z->getTitle($c);
- }
- return $this->value->getTitle($c);
- }
-
- /**
- * @param Converter
- * @param boolean determines whether character data is postprocessed to be
- * Converter-friendly or not.
- */
- function Convert(&$c, $postprocess = true)
- {
- return $this->value->Convert($c, $postprocess);
- }
-
- /**
- * @uses $parent creates a link to the documentation for the parent tutorial
- * @param parserTutorial
- * @param Converter
- */
- function setParent($parent,&$c)
- {
- $this->parent = new tutorialLink;
- $this->parent->addLink('', $parent->path, $parent->name, $parent->package, $parent->subpackage, $parent->getTitle($c));
- }
-
- /**
- * Determine if this parserTutorial object is a child of another
- *
- * WARNING: This method can enter an infinite loop when run on PHP v5.2.1...
- * see {@link http://bugs.php.net/bug.php?id=40608 PHP Bug #40608}
- * and {@link http://pear.php.net/bugs/bug.php?id=10289 PEAR Bug #10289}
- * @param array $parents array of parserTutorials that have child tutorials
- * @return boolean whether or not this tutorial is a child of the any of the parents
- */
- function isChildOf($parents)
- {
- // avoid infinite loop PHP bug #40608 in PHP v5.2.1, see PEAR #10289
- checkForBugCondition('5.2.1', '40608', '10289');
-
- foreach($parents as $i => $parent)
- {
- if ($parent->path == $this->path) continue;
- if ($parent->ini && ($parent->package == $this->package) && ($parent->subpackage == $this->subpackage) && ($parent->tutorial_type == $this->tutorial_type))
- {
- foreach($parent->ini['Linked Tutorials'] as $child)
- {
- if ($child . '.' . $this->tutorial_type == $this->name) return true;
- }
- }
- }
- }
-
- /**
- * Retrieve converter-specific link to the parent tutorial's documentation
- * @param Converter
- */
- function getParent(&$c)
- {
- if (!$this->parent) return false;
- return $c->returnSee($this->parent);
- }
-
- /**
- * @uses $next creates a link to the documentation for the next tutorial
- * @param parserTutorial
- * @param Converter
- */
- function setNext($next,&$c)
- {
- if (phpDocumentor_get_class($next) == 'tutoriallink') return $this->next = $next;
- $this->next = new tutorialLink;
- $this->next->addLink('', $next->path, $next->name, $next->package, $next->subpackage, $next->getTitle($c));
- }
-
- /**
- * Retrieve converter-specific link to the next tutorial's documentation
- * @param Converter
- */
- function getNext(&$c)
- {
- if (!$this->next) return false;
- return $c->returnSee($this->next);
- }
-
- /**
- * @uses $prev creates a link to the documentation for the previous tutorial
- * @param parserTutorial
- * @param Converter
- */
- function setPrev($prev,&$c)
- {
- if (phpDocumentor_get_class($prev) == 'tutoriallink') return $this->prev = $prev;
- $this->prev = new tutorialLink;
- $this->prev->addLink('', $prev->path, $prev->name, $prev->package, $prev->subpackage, $prev->getTitle($c));
- }
-
- /**
- * Retrieve converter-specific link to the previous tutorial's documentation
- * @param Converter
- */
- function getPrev(&$c)
- {
- if (!$this->prev) return false;
- return $c->returnSee($this->prev);
- }
-
- /**
- * Get a link to this tutorial, or to any subsection of this tutorial
- * @param Converter
- * @param boolean if true, returns a {@link tutorialLink} instead of a string
- * @param string section name to link to
- * @return string|tutorialLink
- */
- function getLink(&$c,$pure = false,$section = '')
- {
- $link = new tutorialLink;
- $link->addLink($section, $this->path, $this->name, $this->package, $this->subpackage, $this->getTitle($c), $this->category);
- if ($pure) return $link;
- return $c->returnSee($link);
- }
-}
-
-?>