+++ /dev/null
-<?php\r
-/**\r
-* Analyses a modulegroup.\r
-*\r
-* @version $Id: PhpdocModuleAnalyser.php,v 1.4 2000/12/03 22:37:36 uw Exp $\r
-*/\r
-class PhpdocModuleAnalyser extends PhpdocAnalyser {\r
-\r
- /**\r
- * Module data\r
- * @var array\r
- */\r
- var $modulegroup = array();\r
-\r
- /**\r
- * List of all modules in the modulegroup\r
- * @var array\r
- */ \r
- var $modulelist = array();\r
- \r
- /**\r
- * Puuuh - findUndocumented() needs this.\r
- * @var array\r
- * @see findUndocumented()\r
- */ \r
- var $undocumentedFields = array(\r
- "functions" => "function",\r
- "uses" => "included file",\r
- "consts" => "constant"\r
- );\r
-\r
- /**\r
- * Sets the data of the modulegroup to analyse.\r
- * \r
- * @param array Raw modulegroup data from the parser.\r
- * @access public\r
- */\r
- function setModulegroup($modulegroup) {\r
- \r
- $this->modulegroup = $modulegroup; \r
- \r
- } // end func setModulegroup\r
- \r
- function analyse() {\r
-\r
- $this->flag_get = false;\r
- \r
- $this->buildModulelist();\r
- \r
- $this->updateAccessReturn();\r
- $this->updateBrothersSisters();\r
- $this->checkSee();\r
- \r
- $this->checkFunctionArgs();\r
- $this->findUndocumented();\r
- \r
- } // end func analyse\r
- \r
- /**\r
- * Returns a module from the modulegroup or false if there are no more modules.\r
- *\r
- * @return mixed False if there no more modules in the modulegroup otherwise\r
- * an array with the data of a module.\r
- * @access public\r
- */\r
- function getModule() {\r
- \r
- if (!$this->flag_get) {\r
- reset($this->modulelist);\r
- $this->flag_get = true;\r
- }\r
- \r
- if (list($modulename, $group) = each($this->modulelist)) {\r
- \r
- $module = $this->modulegroup[$group][$modulename];\r
- unset($this->modulegroup[$group][$modulename]); \r
- return $module;\r
- \r
- } else {\r
- \r
- return false;\r
- \r
- }\r
- \r
- } // end func getModule\r
- \r
- function findUndocumented() {\r
-\r
- reset($this->modulegroup);\r
- while (list($group, $modules) = each($this->modulegroup)) {\r
- \r
- reset($modules);\r
- while (list($name, $module) = each($modules)) {\r
- \r
- reset($this->undocumentedFields);\r
- while (list($index, $eltype) = each($this->undocumentedFields)) {\r
- if (!isset($module[$index]))\r
- continue;\r
- \r
- $file = $module["filename"];\r
- \r
- reset($module[$index]);\r
- while (list($elname, $data) = each($module[$index]))\r
- if (isset($data["undoc"]) && $data["undoc"])\r
- $this->warn->addDocWarning($file, $eltype, $elname, "Undocumented element.", "missing");\r
- }\r
- \r
- }\r
- \r
- } \r
-\r
- } // end func findUndocumented\r
- \r
- function checkFunctionArgs() {\r
- \r
- reset($this->modulegroup);\r
- while (list($group, $modules) = each($this->modulegroup)) {\r
-\r
- reset($modules);\r
- while (list($name, $module) = each($modules)) {\r
- if (!isset($module["functions"]))\r
- continue;\r
-\r
- $file = $module["filename"];\r
- \r
- reset($module["functions"]);\r
- while (list($fname, $function) = each($module["functions"])) {\r
- $this->modulegroup[$group][$name]["functions"][$fname]["params"] = $this->checkArgDocs($function["args"], $function["params"], $fname, $file, false);\r
- unset($this->modulegroup[$group][$name]["functions"][$fname]["args"]);\r
- }\r
- \r
- }\r
- \r
- }\r
-\r
- } // end func checkFunctionArgs\r
- \r
- /**\r
- * Builds an internal list of all modules in the modulegroup.\r
- * @see $modulelist, $modulegroup\r
- */\r
- function buildModulelist() {\r
- \r
- $this->modulelist = array();\r
- \r
- reset($this->modulegroup);\r
- while (list($group, $modules) = each($this->modulegroup)) {\r
- \r
- reset($modules);\r
- while (list($modulename, $data) = each($modules))\r
- $this->modulelist[$modulename] = $group;\r
- \r
- }\r
- \r
- }\r
-\r
- \r
- function updateBrothersSisters() {\r
- \r
- reset($this->modulelist);\r
- while (list($modulename, $group) = each($this->modulelist)) {\r
- $this->updateBrotherSisterElements($group, $modulename, "functions");\r
- $this->updateBrotherSisterElements($group, $modulename, "variables");\r
- } \r
- \r
- } // end func updateBrothersSisters\r
- \r
- /**\r
- * @param string Modulegroupname\r
- * @param string Modulename\r
- * @param string Elementtype: functions, variables.\r
- * @return boolean \r
- */\r
- function updateBrotherSisterElements($group, $modulename, $type) {\r
- \r
- if (!isset($this->modulegroup[$group][$modulename][$type])) \r
- return false;\r
- \r
- reset($this->modulegroup[$group][$modulename][$type]);\r
- while (list($elementname, $data) = each($this->modulegroup[$group][$modulename][$type])) {\r
- \r
- if (isset($data["brother"])) {\r
-\r
- $name = ("functions" == $type) ? substr($data["brother"], 0, -2) : substr($data["brother"], 1);\r
- $name = strtolower($name);\r
-\r
- if (!isset($this->modulegroup[$group][$modulename][$type][$name])) {\r
- \r
- $this->warn->addDocWarning($this->modulegroup[$group][$modulename]["filename"], $type, $elementname, "Brother '$name' is unknown. Tags gets ignored.", "mismatch");\r
- unset($this->modulegroup[$group][$modulename][$type][$elementname]["brother"]);\r
- \r
- } else {\r
- \r
- $this->modulegroup[$group][$modulename][$type][$elementname]["brother"] = $name;\r
- $this->modulegroup[$group][$modulename][$type][$elementname] = $this->copyBrotherSisterFields($this->modulegroup[$group][$modulename][$type][$elementname], $this->modulegroup[$group][$modulename][$type][$name]);\r
- \r
- }\r
-\r
- }\r
- \r
- }\r
- \r
- } // end func updateBrotherSistersElements\r
- \r
- function updateAccessReturn() {\r
- \r
- reset($this->modulelist);\r
- while (list($modulename, $group) = each($this->modulelist)) {\r
- \r
- if (!isset($this->modulegroup[$group][$modulename]["access"]))\r
- $this->modulegroup[$group][$modulename]["access"] = "private";\r
- \r
- $this->updateAccessReturnElements($group, $modulename, "functions");\r
- $this->updateAccessReturnElements($group, $modulename, "variables");\r
- $this->updateAccessElements($group, $modulename, "consts"); \r
- \r
- }\r
- \r
- } // end func updateAccessReturn\r
- \r
- /**\r
- * @param string Modulegroup\r
- * @param string Modulename\r
- * @param string Elementtype: functions, variables, consts.\r
- * @return boolean\r
- */\r
- function updateAccessReturnElements($group, $modulename, $type) {\r
- \r
- if (!isset($this->modulegroup[$group][$modulename][$type]))\r
- return false;\r
-\r
- reset($this->modulegroup[$group][$modulename][$type]);\r
- while (list($elementname, $data) = each($this->modulegroup[$group][$modulename][$type])) {\r
- \r
- if (!isset($data["access"])) \r
- $this->modulegroup[$group][$modulename][$type][$elementname]["access"] = "private";\r
- \r
- if (!isset($data["return"]))\r
- $this->modulegroup[$group][$modulename][$type][$elementname]["return"] = "void";\r
- \r
- }\r
- \r
- } // end func updateAccessReturnElements\r
- \r
- /**\r
- * @param string Modulegroup\r
- * @param string Modulename\r
- * @param string Elementtype: functions, variables, consts.\r
- * @return boolean\r
- */\r
- function updateAccessElements($group, $modulename, $type) {\r
- \r
- if (!isset($this->modulegroup[$group][$modulename][$type]))\r
- return false;\r
- \r
- reset($this->modulegroup[$group][$modulename][$type]);\r
- while (list($elementname, $data) = each($this->modulegroup[$group][$modulename][$type])) {\r
- \r
- if (!isset($data["access"])) \r
- $this->modulegroup[$group][$modulename][$type][$elementname]["access"] = "private";\r
- \r
- }\r
- \r
- } // end func updateAccessElements\r
- \r
- function checkSee() {\r
-\r
- reset($this->modulegroup);\r
- while (list($group, $modules) = each($this->modulegroup)) {\r
-\r
- while (list($modulename, $module) = each($modules)) {\r
- \r
- $this->buildElementlist($group, $modulename);\r
- \r
- if (isset($module["functions"])) \r
- $this->checkSeeElements($module["functions"], $group, $modulename, "functions");\r
- \r
- if (isset($module["variables"]))\r
- $this->checkSeeElements($module["variables"], $group, $modulename, "variables");\r
- \r
- if (isset($module["consts"])) \r
- $this->checkSeeElements($module["consts"], $group, $modulename, "consts");\r
- \r
- if (isset($module["uses"]))\r
- $this->checkSeeElements($module["uses"], $group, $modulename, "uses");\r
- \r
- } \r
- \r
- }\r
- \r
- } // end func checkSee\r
-\r
- /**\r
- * Checks see references in the given element array (functions, variables...)\r
- *\r
- * References to variables and functions within the same module get checked.\r
- * It the references element does not exist, the reference gets deleted and \r
- * a doc warning gets generated.\r
- * \r
- * @param array List of functions, variables,...\r
- * @param string Name of the modulegroup that contains the given elements.\r
- * @param string Name of the module that contains the given elements.\r
- * @param string Elementtype: functions, variables, consts, uses.\r
- */ \r
- function checkSeeElements($elements, $modulegroup, $modulename, $eltype) {\r
-\r
- reset($elements);\r
- while (list($elname, $element) = each($elements)) {\r
- \r
- if (isset($element["see"])) {\r
- \r
- if (isset($element["see"]["var"])) {\r
- \r
- reset($element["see"]["var"]);\r
- while (list($k, $variable) = each($element["see"]["var"])) \r
- if (!isset($this->elementlist["variables"][strtolower($variable["name"])])) {\r
- $this->warn->addDocWarning($this->modulegroup[$modulegroup][$modulename]["filename"], "variables", $elname, "@see referrs to the variable '" . $variable["name"] . "' which is not defined in the class. Entry gets ignored.", "mismatch");\r
- unset($this->modulegroup[$modulegroup][$modulename][$eltype][$elname]["see"]["var"][$k]);\r
- }\r
-\r
- }\r
- \r
- if (isset($element["see"]["function"])) {\r
- \r
- reset($element["see"]["function"]);\r
- while (list($k, $function) = each($element["see"]["function"]))\r
- if (!isset($this->elementlist["functions"][strtolower(substr($function["name"], 0, -2))])) {\r
- $this->warn->addDocWarning($this->modulegroup[$modulename]["filename"], "functions", $elname, "@see referrs to the function '" . $function["name"] . "' which is not defined in the class. Entry gets ignored.", "mismatch");\r
- unset($this->modulegroup[$modulegroup][$modulename][$eltype][$elname]["see"]["function"][$k]);\r
- }\r
-\r
- }\r
- \r
- }\r
- \r
- } \r
- \r
- } // end func checkSeeElement\r
- \r
- /**\r
- * Builds an array with all elements of a class and saves it to $this->elementlist.\r
- * \r
- * @param string Name of the modulegroup that contains the module.\r
- * @param string Name of the module to scan.\r
- */\r
- function buildElementlist($modulegroup, $modulename) {\r
- \r
- $elements = array();\r
- $fields = array("functions", "variables", "consts", "uses");\r
- \r
- reset($fields);\r
- while (list($k, $field) = each($fields)) \r
- if (isset($this->modulegroup[$modulegroup][$modulename][$field])) {\r
- \r
- reset($this->modulegroup[$modulegroup][$modulename][$field]);\r
- while (list($element, ) = each($this->modulegroup[$modulegroup][$modulename][$field])) \r
- $elements[$field][$element] = true;\r
- \r
- }\r
- \r
- $this->elementlist = $elements;\r
- \r
- } // end func buildElementlist\r
- \r
-} // end class PhpdocModuleAnalyser\r
-?>
\ No newline at end of file