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