home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2001 August
/
PCWorld_2001-08_cd.bin
/
Komunikace
/
phptriad
/
phptriadsetup2-11.exe
/
php
/
pear
/
PHPDoc
/
parser
/
PhpdocModuleParser.php
< prev
next >
Wrap
PHP Script
|
2001-02-18
|
5KB
|
142 lines
<?php
/**
* Extracts modules and their documentation from php code.
* @author Ulf Wendel <ulf.wendel@redsys.de>
* @version 0.1alpha
*/
class PhpdocModuleParser extends PhpdocConstantParser {
/**
* Empty hash that shows the structure of a module.
* @var array
*/
var $emptyModule = array(
"name" => "",
"group" => "",
"undoc" => true,
"functions" => array(),
"consts" => array(),
"uses" => array()
);
/**
* List of tags allowed within a module doc comment.
* @var array tagname => true
*/
var $moduleTags = array(
"module" => true,
"modulegroup" => true,
"access" => true,
"see" => true,
"link" => true,
"author" => true,
"copyright" => true,
"version" => true,
"since" => true,
"deprecated" => true,
"deprec" => true,
"brother" => true,
"sister" => true,
"exclude" => true,
"package" => true,
"magic" => true,
"todo" => true
);
/**
* Hash of all module groups
*
* @var array
*/
var $moduleGroups = array();
/**
* Central module parsing function.
*
* @param array Array of parsing data
* @return array
* @see analyseModuleDoc()
*/
function analyseModule($para) {
$module = $this->analyseModuleDoc($para["modules"]);
unset($para["modules"]);
$this->moduleGroups[$module["group"]][] = $module["name"];
reset($para["functions"]);
while (list($k, $data) = each($para["functions"]))
$module["functions"][strtolower($data["name"])] = $this->analyseFunction($data);
unset($para["functions"]);
reset($para["consts"]);
while (list($k, $data) = each($para["consts"]))
$module["consts"][strtolower($data["name"])] = $this->analyseConstant($data);
unset($para["const"]);
reset($para["uses"]);
while (list($k, $data) = each($para["uses"]))
$module["uses"][strtolower($data["file"])] = $this->analyseUse($data);
return $module;
} // end func analyseModule
/**
* Extracts the allowed documentation tags out of a module doc comment.
*
* @param array Module paragraph
* @return array
*/
function analyseModuleDoc($para) {
$module = $this->emptyModule;
$module["name"] = ("" != $para["name"]) ? $para["name"] : $this->currentFile;
$module["group"] = ("" != $para["group"]) ? $para["group"] : $this->currentFile;
if ("missing" == $para["status"]) {
$msg = "The file '$this->currentFile' does not contain any classes and seems to lack a module doc comment.";
$this->warn->addDocWarning($this->currentFile, "module", $module["name"], $msg, "missing");
} else if ("tags missing" == $para["status"]) {
$msg = "The module doc comment does not contain a @module or @modulegroup tag, the module gets names: '$this->currentFile'";
$this->warn->addDocWarning($this->currentFile, "module", $module["name"], $msg, "missing");
}
if ("" != $para["doc"]) {
$tags = $this->getTags($para["doc"]);
$module = $this->analyseTags($tags, $module, $this->moduleTags);
list($msg, $module) = $this->checkParserErrors($module, "module");
if ("" != $msg)
$this->warn->addDocWarning($this->currentFile, "module", $module["name"], $msg, "mismatch");
list($shortdesc, $fulldesc) = $this->getDescription($para["doc"]);
$module["sdesc"] = $shortdesc;
$module["desc"] = $fulldesc;
$module["undoc"] = false;
}
unset($module["module"]);
unset($module["modulegroup"]);
return $module;
} // end analyseModuleDoc
} // end class PhpdocModuleParser
?>