File: PhpdocClassParser.php

package info (click to toggle)
php4 4.0.3pl1-0potato3
  • links: PTS
  • area: main
  • in suites: potato
  • size: 15,168 kB
  • ctags: 20,556
  • sloc: ansic: 155,237; php: 10,827; sh: 9,608; yacc: 1,874; lex: 1,742; makefile: 788; java: 424; awk: 359; cpp: 335; perl: 181; xml: 57
file content (129 lines) | stat: -rw-r--r-- 3,332 bytes parent folder | download
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
?>