<?php
/** @package tests */

/**
* Base class for all output converters.
* A Converter takes output from the {@link Parser} and converts it to template-friendly output.  A converter for the standard phpDocumentor
* template, {@link HTMLConverter}, is provided with this release.  Future releases will have support for other formats and templates, including
* DocBook, XML, and possibly other HTML templates.  The converter takes output directly from {@link NewRender} and using {@link walk()} it
* "walks" over an array of phpDocumentor elements, as represented by descendants of {@link parserElement}
*
* a converter must define the abstract function Convert (an example is {@link HTMLConverter::Convert()}), a function that takes a passed object
* and uses it to generate structures for an output template, or directly generates output.  Since all elements have their DocBlocks linked
* directly, this allows for more logical parsing than earlier versions of phpDocumentor.
*
* A Converter is passed several data structures in its constructor, all of which are optional in output and may be handled in any way
* the converter would like.  These structures are arrays:
* <ul>
*	<li>array of methods by class (see {@link NewRender::$methods})</li>
*	<li>array of variables by class (see {@link NewRender::$vars})</li>
*	<li>array of links to documented elements (see {@link NewRender::$links})</li>
*	<li>array of class parents by name (see {@link NewRender::$classtree})</li>
*	<li>array of class packages by classname (see {@link NewRender::$classpackages})</li>
*	<li>array of packages to document (see {@link NewRender::$packageoutput})</li>
*	<li>array of extended classes by parent classname (see {@link NewRender::$class_children})</li>
*	<li>array of all documented elements by name (see {@link NewRender::$elements})</li>
*	<li>array of all documented elements by name, split by package (see {@link NewRender::$pkg_elements})</li>
*	<li>boolean option, set to true to parse all elements marked @access private (see {@link NewRender::$parsePrivate})</li>
*	<li>boolean option, set to true to stop informative output while parsing (good for cron jobs) (see {@link NewRender::$quietMode})</li>
* </ul>
* @package tests
* @abstract
* @see parserDocBlock, parserInclude, parserPage, parserClass, parserDefine, parserFunction, parserMethod, parserVar
*/
class iConverter
{

	function walk()
	{
	}
}

/**
* @package tests
*/
class iParser
{
}

class iHTMLConverter extends iConverter
{
	function Convert()
	{
	}
}

/**
* @package tests
*/
class iparserElement
{
}

/**
* @package tests
*/
class iNewRender
{
	/**
	* array of methods by package, subpackage and class
	* format:
	* array(packagename =>
	*       array(subpackagename =>
	*             array(classname =>
	*                   array(methodname1 => {@link parserMethod} class,
	*                         methodname2 => {@link parserMethod} class,...)
	*					     )
	*                  )
	*            )
	*      )
	* @var array
	* @see Converter
	*/
	var $methods = array();
	
	/**
	* array of class variables by package, subpackage and class
	* format:
	* array(packagename =>
	*       array(subpackagename =>
	*             array(classname =>
	*                   array(variablename1 => {@link parserMethod} class,
	*                         variablename2 => {@link parserMethod} class,...)
	*					     )
	*                  )
	*            )
	*      )
	* @var array
	* @see Converter
	*/
	var $vars = array();
	
	/**
	* set in {@link phpdoc.inc} to the value of the parserprivate commandline option.
	* If this option is true, elements with an @access private tag will be parsed and displayed
	* @var bool
	*/
	var $parsePrivate = false;
	
	/**
	* this variable is used to prevent parsing of private elements if $parsePrivate is false.
	* it is also used by the packageoutput setting to prevent parsing of elements that aren't in the
	* desired output packages
	* @see $packageoutput
	* @see $parsePrivate
	*/
	var $private_class = false;
	
	/**
	* the workhorse of linking.
	* This array is an array of link objects of format:
	* [package][subpackage][eltype][elname] = descendant of {@link abstractLink}
	* eltype can be page|include|function|define|class|method|var
	* if eltype is method or var, the array format is:
	* [package][subpackage][eltype][class][elname]
	* @var array
	* @see functionLink, pageLink, classLink, defineLink, methodLink, varLink
	*/
	var $links = array();
	
	/**
	* a tree of class inheritance by name.
	* format:
	* array(childname => parentname,
	*       childname1 => parentname1,
	*       rootname => 0, ...
	*      )
	* @var array
	* @see Converter::generateClassTreeFromClass()
	*/
	var $classtree = array();
	
	/**
	* used in {@link Converter::getClassPackage()} to inherit package from parent classes.
	* format:
	* array(classname => array(array(package,subpackage),
	*                          array(package1,subpackage1),....
	                          )
		   )
	* If a name conflict exists between two packages, automatic inheritance will not work, and the packages will need
	* to be documented separately.
	* @var array
	*/
	var $classpackages = array();
	
	/**
	* used to set the output directory
	* @see setTargetDir()
	*/
	var $targetDir;
	
	/**
	* array of class inheritance indexed by parent class and package
	*
	* Format:
	* array(Packagename => array(ParentClassname1 => array(Child1name,Child2name),
	*                            ParentClassname2 => array(Child1name,Child2name),...
	*                           )
	*      )
	* @see Converter::getRootTree()
	* @var array
	*/
	
	/**
	* An array of extended classes by package and parent class
	* Format:
	* array(packagename => array(parentclass => array(childclassname1,
	*                                                 childclassname2,...
	*                                                )
	*                       )
	*      )
	* @var array
	*/
	var $class_children = array();
	
	var $elements = array();
	
	var $pkg_elements = array();

	var $pages = array();

	/**
	* array of packages to parser and output documentation for, if not all packages should be documented
	* Format:
	* array(package1,package2,...)
	*   or false if not set
	* Use this option to limit output similar to ignoring files.  If you have some temporary files that you don't want to specify by name
	* but don't want included in output, set a package name for all the elements in your project, and set packageoutput to that name.
	* the default package will be ignored.  Parsing speed does not improve.  If you want to ignore files for speed reasons, use the ignore
	* command-line option
	* @see Io
	* @var mixed
	*/
	var $packageoutput = false;
	
	/**
	* the functions which handle output from the {@link Parser}
	* @see handleEvent(), handleDocBlock(), handlePage(), handleClass(), handleDefine(), handleFunction(), handleMethod(), handleVar(),
	*      handlePackagePage(), handleInclude()
	*/
	var $event_handlers = array(
			'docblock' => 'handleDocBlock',
			'page' => 'handlePage',
			'class' => 'handleClass',
			'define' => 'handleDefine',
			'function' => 'handleFunction',
			'method' => 'handleMethod',
			'var' => 'handleVar',
			'packagepage' => 'handlePackagePage',
			'include' => 'handleInclude',
			);
	
	/**
	* data contains parsed structures for the current page being parsed
	* @var parserData
	* @see parserData
	*/
	var $data;
	
	/**
	* set to the name of the package of the current class being parsed
	* @var string
	*/
	var $classpackage = 'default';
	
	/**
	* set to the name of the subpackage of the current class being parsed
	* @var string
	*/
	var $classsubpackage = '';
	
	/**
	* set in {@link phpdoc.inc} to the value of the quitemode commandline option.
	* If this option is true, informative output while parsing will not be displayed (documentation is unaffected)
	* @var bool
	*/
	var $quietMode = false;


}
?>