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
/
PhpdocFunctionParser.php
< prev
next >
Wrap
PHP Script
|
2001-02-18
|
5KB
|
139 lines
<?php
/**
* Looks for documented and undocumented functions within a block of php code.
*
* @version $Id: PhpdocFunctionParser.php,v 1.3 2001/02/18 14:45:27 uw Exp $
*/
class PhpdocFunctionParser extends PhpdocVariableParser {
/**
* Internal structur of a function.
*
* @var array $emptyFunction
*/
var $emptyFunction = array(
"name" => "",
"undoc" => true,
"args" => array()
);
/**
* Array of tags that are allowed in front of the function keyword
*
* @var array $functionTags
* @see analyseFunctionParagraph()
*/
var $functionTags = array(
"parameter" => true,
"param" => true,
"return" => true,
"access" => true,
"abstract" => true,
"static" => true,
"throws" => true,
"see" => true,
"link" => true,
"global" => true,
"version" => true,
"since" => true,
"deprecated" => true,
"deprec" => true,
"brother" => true,
"sister" => true,
"exclude" => true,
"magic" => true,
"author" => true,
"copyright" => true,
"todo" => true
);
/**
* Analyses a function doc comment.
* @param array
* @return array
*/
function analyseFunction($para) {
$function = $this->emptyFunction;
$function["name"] = $para["name"];
if ("" != $para["doc"]) {
$function = $this->analyseTags($this->getTags($para["doc"]), $function, $this->functionTags);
list($msg, $function) = $this->checkParserErrors($function, "function");
if (""!=$msg)
$this->warn->addDocWarning($this->currentFile, "function", $function["name"], $msg, "mismatch");
list($function["sdesc"], $function["desc"]) = $this->getDescription($para["doc"]);
$function["undoc"] = false;
}
$function["args"] = $this->getFunctionArgs($para["head"]);
return $function;
} // end func analyseFunction
/**
* Analyses a function head and returns an array of arguments.
*
* @param string PHP code to examine.
* @return array Array of arguments: $args[] = array( optional, default, type, name ).
* @see getVariableTypeAndValue()
*/
function getFunctionArgs($code) {
$args = array();
while (preg_match($this->PHP_COMPLEX["argument"], $code, $regs)) {
$type = "";
$value = "";
$optional = false;
if (!isset($regs[3])) {
$len_of_value = strlen($regs[1]);
} else if ("=" == $regs[3]) {
$find = $regs[1] . $regs[2];
$code = substr($code, strpos($code, $find) + strlen($find) );
list ($type, $value, $raw_value) = $this->getVariableTypeAndValue($code);
$len_of_value = strlen($raw_value);
$optional = true;
} else {
$len_of_value = strlen($regs[1] . $regs[2]);
}
$code = substr($code, $len_of_value);
$args[] = array(
"optional" => $optional,
"default" => $value,
"type" => $type,
"name" => $regs[1]
);
}
return $args;
} // end func getFunctionArgs
} // end class PhpdocFunctionParser