<?php
require_once 'phing/Task.php';

/**
 * Task to run phpDocumentor for PRADO API docs.
 */	
class PradoDocTask extends Task
{
	private $phpdoc = 'phpdoc';
	
	private $title = "Default Title";
			
	private $destdir = ".";
			
	private $sourcepath = NULL;
	
	private $ignorelist = '';
	
	private $output = "";
			
	private $linksource = false;
	
	private $parseprivate = false;

	function setPhpdoc($phpdoc)
	{
		$this->phpdoc=$phpdoc;
	}
	
	/**
	 * Set the title for the generated documentation
	 */
	function setTitle($title)
	{
		$this->title = $title;
	}
	
	/**
	 * Set the destination directory for the generated documentation
	 */
	function setDestdir($destdir)
	{
		$this->destdir = $destdir;
	}
	
	/**
	 * Set the source path
	 */
	function setSourcepath(Path $sourcepath)
	{
		if ($this->sourcepath === NULL)
		{
			$this->sourcepath = $sourcepath;
		}
		else
		{
			$this->sourcepath->append($sourcepath);
		}
	}
	
	/**
	 * Set the output type
	 */		
	function setOutput($output)
	{
		$this->output = $output;
	}
	
	/**
	 * Should sources be linked in the generated documentation
	 */
	function setLinksource($linksource)
	{
		$this->linksource = $linksource;
	}

	function setIgnorelist($ignorelist)
	{
		$this->ignorelist=$ignorelist;
	}	
	
	/**
	 * Main entrypoint of the task
	 */
	function main()
	{
		$arguments = $this->constructArguments();
		exec($this->phpdoc . " " . $arguments, $output, $retval);
	}
	
	/**
	 * Constructs an argument string for phpDocumentor
	 */
	private function constructArguments()
	{
		$arguments = "-q \"on\" ";
		
		if ($this->title)
		{
			$arguments.= "-ti \"" . $this->title . "\" ";
		}
		
		if ($this->destdir)
		{
			$arguments.= "-t \"" . $this->destdir . "\" ";
		}
		
		if ($this->sourcepath !== NULL)
		{
			$arguments.= "-d \"" . $this->sourcepath->__toString() . "\" ";
		}
		
		if ($this->output)
		{
			$arguments.= "-o \"" . $this->output . "\" ";
		}
		
		if ($this->linksource)
		{
			$arguments.= "-s ";
		}
		
		if ($this->parseprivate)
		{
			$arguments.= "-pp ";
		}

		if ($this->ignorelist)
		{
			$arguments.='-i "'.$this->ignorelist.'" ';
		}

		return $arguments;
	}
}

?>