1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
<?php
/**
* Parses phpcode to extract classes and their documentation.
*
* @version 0.2
* @author Ulf Wendel, ulf@redsys.de
*/
class PhpdocClassParser extends PhpdocFunctionParser {
/**
* Array of all classes in the given code
*
* The array is indexed by the classname.
* See $emptyClass to see the internal structure.
*
* @var array $classes
* @see emptyClass
*/
var $classes = array();
/**
* Default values of a class
* @var array $emptyClass
* @see classes, analyseClassParagraph
*
*/
var $emptyClass = array (
"name" => "",
"extends" => "",
"undoc" => true
);
/**
* Array of tags that are allowed in front of the class keyword
* @var array $classTags
* @see analyseClassParagraph()
*/
var $classTags = array(
"access" => true,
"abstract" => true,
"static" => true,
"final" => 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
);
/**
* Analyse a class
*
* Calls all neccessary analyse functions.
*
* @param array
* @return array
*/
function analyseClass($para) {
$class = $this->analyseClassDoc($para["classes"][0]);
reset($para["functions"]);
while (list($k, $data)=each($para["functions"]))
$class["functions"][strtolower($data["name"])] = $this->analyseFunction($data);
unset($para["functions"]);
reset($para["variables"]);
while (list($k, $data)=each($para["variables"]))
$class["variables"][strtolower($data["name"])] = $this->analyseVariable($data);
unset($para["variables"]);
reset($para["consts"]);
while (list($k, $data)=each($para["consts"]))
$class["consts"][strtolower($data["name"])] = $this->analyseConstant($data);
unset($para["consts"]);
reset($para["uses"]);
while (list($k, $data)=each($para["uses"]))
$class["uses"][strtolower($data["file"])] = $this->analyseUse($data);
return $class;
} // end func analyseClass
/**
* Analyses a class doc comment.
* @param array Hash returned by getPhpdocParagraph()
* @return array
*/
function analyseClassDoc($para) {
$class = $this->emptyClass;
$class["name"] = $para["name"];
$class["extends"] = $para["extends"];
if (""!=$para["doc"]) {
$class = $this->analyseTags($this->getTags($para["doc"]), $class, $this->classTags);
list($msg, $class) = $this->checkParserErrors($class, "class");
if (""!=$msg)
$this->warn->addDocWarning($this->currentFile, "class", $class["name"], $msg, "mismatch");
list($class["sdesc"], $class["desc"]) = $this->getDescription($para["doc"]);
$class["undoc"] = false;
}
return $class;
} // end func analyseClassDoc
} // end class PhpdocClassParser
?>
|