1
0
mirror of https://github.com/php/phd.git synced 2026-03-24 15:12:18 +01:00
Files
2026-03-04 08:43:09 +01:00

153 lines
4.1 KiB
PHP

<?php
/**
* Class to load and parse the files generated by the PhD IDE Package.
*
* PHP version 5.3+
*
* @category PhD
* @package PhD_IDE
* @author Moacir de Oliveira <moacir@php.net>
* @license http://www.opensource.org/licenses/bsd-license.php BSD Style
* @link https://doc.php.net/phd/
*/
namespace phpdotnet\phd;
/**
* Class to load and parse the files generated by the PhD IDE Package.
* Make sure that the ide-xml/ dir and the ide-funclist.txt file
* exist in the PhD output directory given in the __construct.
*
* To generate those files run:
* $ phd --docbook .manual.xml --package IDE --output <your output dir>
*
* Use the value passed with --output to create this class.
*
* @category PhD
* @package PhD_IDE
* @author Moacir de Oliveira <moacir@php.net>
* @license http://www.opensource.org/licenses/bsd-license.php BSD Style
* @link https://doc.php.net/phd/
*/
class Package_IDE_API
{
/**
* Output directory of the functions format in the IDE Package.
*
* @var string
*/
const FUNCTIONS_DIR = 'ide-xml';
/**
* Output file of the funclist format in the IDE Package.
*
* @var string
*/
const FUNCLIST_FILE = 'ide-funclist.txt';
/**
* PhD output directory.
*
* @var string
*/
private $dir;
/**
* Array with the functions of the file ide-funclist.txt.
*
* @var array
*/
private $funclist;
/**
* Creates a new instace of Package_IDE_API.
*
* @param string $dir PhD output directory.
*/
public function __construct($dir)
{
if (file_exists($dir)) {
if (is_dir($dir)) {
$this->dir = substr($dir, -1) === DIRECTORY_SEPARATOR
? $dir
: $dir . DIRECTORY_SEPARATOR;
$this->funclist = file($this->dir . self::FUNCLIST_FILE, FILE_IGNORE_NEW_LINES);
} else {
throw new \Error('Is the PhD output directory a file?');
}
} else {
throw new \Error('The PhD output directory does not exist.');
}
}
/**
* Loads a function file and returns a Package_IDE_API_Function.
*
* @param string $filename File of the function.
* @return ?Package_IDE_API_Function Object representing the function.
*/
private function loadFunction($filename)
{
if (!file_exists($filename)) {
return NULL;
}
$xml = simplexml_load_file($filename);
return new Package_IDE_API_Function($xml);
}
/**
* Converts a function name to the correct .xml file.
*
* @param string $function Function name.
* @return string File name.
*/
private function functionToFilename($function)
{
return str_replace(
array('->', '::', '()'),
array('.', '.', ''), $function) . '.xml';
}
/**
* Returns an array with the functions in the ide-funclist.txt file.
*
* @return array Functions list.
*/
public function getFunctionList()
{
return $this->funclist;
}
/**
* Returns the function object of the name given.
*
* @param string $functionName Function name.
* @param string $class TODO.
* @return Package_IDE_API_Function A function object.
*/
public function getFunctionByName($functionName, $class = null)
{
return $this->loadFunction($this->dir
. self::FUNCTIONS_DIR
. DIRECTORY_SEPARATOR
. $this->functionToFilename($functionName));
}
/**
* Returns the list of methods of a class.
*
* @param string $className Name of the class.
* @return array An array of Package_IDE_API_Function.
*/
public function getMethodsByClass($className)
{
$methods = array();
$class = $className . '.';
foreach ($this->funclist as $function) {
if (strcmp($class, substr($function, 0, strlen($class))) === 0) {
$methods[] = $this->getFunctionByName(trim($function));
}
}
return $methods;
}
}