changed git call from https to git readonly
[atutor.git] / mods / phpdoc / PHPDoc / indexer / PhpdocIndexer.php
1 <?php\r
2 /**\r
3 * Builds Indexlists with the result from the  \r
4 *\r
5 * @author               Ulf Wendel      <ulf.wendel@redsys.de>\r
6 * @version      $Id: PhpdocIndexer.php,v 1.2 2000/12/03 22:37:37 uw Exp $\r
7 */\r
8 class PhpdocIndexer extends PhpdocObject {\r
9 \r
10         /**\r
11         * Array of all packages.\r
12         *\r
13         * @var array\r
14         */\r
15         var $packages = array();\r
16         \r
17         /**\r
18         * Current classtree.\r
19         *\r
20         * @var  array\r
21         */\r
22         var $classtree = array();\r
23         \r
24         /**\r
25         * Current modulegroup.\r
26         *\r
27         * @var  array\r
28         */\r
29         var $modulegroup = array();\r
30         \r
31         /**\r
32         * Array of all elements (functions, variables, constant, included files, classes, packages).\r
33         *\r
34         * @var  array\r
35         */\r
36         var $elements = array();\r
37         \r
38         /**\r
39         * Array of fields that get added to the elementlist\r
40         *\r
41         * @var  array\r
42         */ \r
43         var $elementFields = array("functions", "variables", "consts", "uses");\r
44         \r
45         /**\r
46         * Adds a class to the index lists (elements, packages, classtree).\r
47         *\r
48         * @param        array   \r
49         * @access       public\r
50         * @see  addModule()\r
51         */\r
52         function addClass(&$class) {\r
53                 \r
54                 $package = isset($class["package"]) ? $class["package"] : "No Package specified";\r
55                 $this->packages[$package]["classes"][] = $class["name"];\r
56                 $this->classtree[$class["name"]] = (isset($class["subclasses"])) ? $class["subclasses"] : array();\r
57                 $this->addElements($class, "class");\r
58                 \r
59         } // end func addClass\r
60         \r
61         /**\r
62         * Adds a module to the index lists (elements, packages, classtree).\r
63         * \r
64         * @param        array\r
65         * @access       public\r
66         * @see addClass()\r
67         */\r
68         function addModule(&$module) {\r
69                 \r
70                 $package = isset($module["package"]) ? $module["package"] : "No Package specified";\r
71                 $this->packages[$package]["modules"][] = $module["name"];\r
72                 $this->modulegroup[$module["group"]][] = $module["name"];\r
73                 $this->addElements($module, "module");\r
74                 \r
75         }       // end func addModule\r
76 \r
77         /**\r
78         * Returns the current classtree and resets the internal classtree field.\r
79         *\r
80         * @access       public\r
81         * @return       array   $classtree\r
82         */\r
83         function getClasstree() {\r
84                 \r
85                 $data = $this->classtree;\r
86                 $this->classtree = array();\r
87                 return $data;\r
88                 \r
89         } // end func getClasstree      \r
90         \r
91         /**\r
92         * Returns the current modulegroup and resets the internal modulegroup field.\r
93         * \r
94         * @access       public\r
95         * @return       array   $modulegroup\r
96         */\r
97         function getModulegroup() {\r
98                 \r
99                 $data = $this->modulegroup;\r
100                 $this->modulegroup = array();\r
101                 return $data;\r
102                 \r
103         } // end func getModulegroup\r
104 \r
105         /**\r
106         * Returns the package list and resets the internal package field.\r
107         *\r
108         * @access       public\r
109         * @return       array   $packages\r
110         */\r
111         function getPackages() {\r
112         \r
113                 reset($this->packages);\r
114                 while (list($package, )=each($this->packages))\r
115                         $this->elements[substr($package, 0, 1)][$package][] = array(\r
116                                                                                                                                                                                                                                                         "type"                          => "package",\r
117                                                                                                                                                                                                                                                         "sdesc"                         => "",\r
118                                                                                                                                                                                                                                                         "source"                        => "",\r
119                                                                                                                                                                                                                                                         "sourcetype"    => ""\r
120                                                                                                                                                                                                                                                 );                                                              \r
121                 $data = $this->packages;\r
122                 $this->packages = array();\r
123                 \r
124                 return $data;\r
125         } // end func getPackages\r
126         \r
127         /**\r
128         * Returns the element index list and resets the internal elements field.\r
129         * \r
130         * @access       public\r
131         * @return array $elements\r
132         */\r
133         function getElementlist() {\r
134                 \r
135                 $data = $this->elements;\r
136                 $this->elements = array();\r
137                 return $data;\r
138         } // end func getElementlist\r
139         \r
140         /**\r
141         * Adds an element to the elementlist.\r
142         * @param        array   \r
143         * @param        string  Element type: class, module.\r
144         */\r
145         function addElements(&$elements, $type) {\r
146                 \r
147                 $index = substr($elements["name"], 0, 1);\r
148                 $elname = $elements["name"];\r
149                 $this->elements[$index][$elname][] = array(\r
150                                                                                                                                                                                         "type"                          => $type, \r
151                                                                                                                                                                                         "sdesc"                         => (isset($elements["sdesc"])) ? $elements["sdesc"] : "",\r
152                                                                                                                                                                                         "source"                        => "",\r
153                                                                                                                                                                                         "sourcetype"    => $type\r
154                                                                                                                                                                                 );\r
155 \r
156                 reset($this->elementFields);\r
157                 while (list($k, $field) = each($this->elementFields)) {\r
158                         if (!isset($elements[$field])) \r
159                                 continue;\r
160                         \r
161                         reset($elements[$field]);\r
162                         while (list($name, $data) = each($elements[$field])) {\r
163                                 \r
164                                 \r
165                                 if ("variables" == $field) {\r
166                                 \r
167                                         $index = substr($data["name"], 1, 1);\r
168                                         $name = $data["name"];\r
169                                         \r
170                                 } else if ("uses" == $field) {\r
171 \r
172                                         $index = substr($data["file"], 0, 1);                           \r
173                                         $name = $data["file"];\r
174                                                 \r
175                                 } else {\r
176                                         \r
177                                         $index = substr($data["name"], 0, 1);\r
178                                         $name = $data["name"];\r
179                                         \r
180                                 }\r
181                                 \r
182                                 $this->elements[$index][$name][] = array(\r
183                                                                                                                                                                                                         "type"                          => $field,\r
184                                                                                                                                                                                                         "sdesc"                         => (isset($data["sdesc"])) ? $data["sdesc"] : "",\r
185                                                                                                                                                                                                         "source"                        => $elname,\r
186                                                                                                                                                                                                         "sourcetype"    => $type\r
187                                                                                                                                                                                                 );\r
188                                 \r
189                         }\r
190                         \r
191                 }\r
192                 \r
193         } // end func addElements\r
194         \r
195 } // end class PhpdocIndexer\r
196 ?>