changed git call from https to git readonly
[atutor.git] / mods / phpdoc / PHPDoc / core / Phpdoc.php
1 <?php\r
2 /**\r
3 * Coordinates several Phpdoc Object to parse and render source files.\r
4\r
5 * @access               public\r
6 * @version      $Id: Phpdoc.php,v 1.4 2000/12/03 20:30:42 uw Exp $\r
7 */\r
8 class Phpdoc extends PhpdocSetupHandler {\r
9 \r
10         /**\r
11         * Result from the indexer\r
12         *\r
13         * @var  array\r
14         * @see  render()\r
15         */\r
16         var $indexer_result = array();\r
17 \r
18         /**\r
19         * Print status messages\r
20         */\r
21         var $flag_output = true;\r
22 \r
23         /**\r
24         * Calls the command line handler if necessary.\r
25         *\r
26         * @global array $argc, string $PHP_SELF\r
27         */\r
28         function Phpdoc() {\r
29                 global $argc, $PHP_SELF;\r
30 \r
31                 $this->target = $PHP_SELF."apidoc/";\r
32 \r
33                 if ($argc>1) \r
34                         $this->handleArgv();\r
35 \r
36         } // end constructor\r
37 \r
38         /**\r
39         * Starts the parser. \r
40         *\r
41         * @return       bool            $ok\r
42         * @throws       PhpdocError\r
43         * @access       public\r
44         */\r
45         function parse() {\r
46 \r
47                 $this->warn = new PhpdocWarning;\r
48 \r
49                 $errors = $this->checkStatus();\r
50                 if (0 != count($errors)) {\r
51 \r
52                         reset($errors);\r
53                         while (list($k, $error)=each($errors))\r
54                                 $this->err[] = new PhpdocError($error["msg"]."Errno = ".$error["errno"], 9, __FILE__, __LINE__);\r
55 \r
56                         return false;\r
57                 }\r
58 \r
59                 $this->outl("Parser starts...");\r
60 \r
61                 // create some objects\r
62                 $fileHandler            = new PhpdocFileHandler;\r
63                 $parser                                 = new PhpdocParser(true);\r
64                 $classAnalyser  = new PhpdocClassAnalyser;\r
65                 $moduleAnalyser = new PhpdocModuleAnalyser;\r
66 \r
67                 $indexer        = new PhpdocIndexer;                            \r
68 \r
69                 $classExporter  = new PhpdocXMLClassExporter();\r
70                 $classExporter->setPath($this->target);\r
71 \r
72                 $moduleExporter = new PhpdocXMLModuleExporter();\r
73                 $moduleExporter->setPath($this->target);\r
74 \r
75                 $indexExporter = new PhpdocXMLIndexExporter();\r
76                 $indexExporter->setPath($this->target);\r
77 \r
78                 $warningExporter = new PhpdocXMLWarningExporter();\r
79                 $warningExporter->setPath($this->target);\r
80 \r
81                 // This will change one fine day! \r
82                 $parser->warn                           = $this->warn;\r
83                 $classAnalyser->warn    = $this->warn;\r
84                 $moduleAnalyser->warn = $this->warn;\r
85                 $classExporter->warn    = $this->warn;\r
86                 $moduleExporter->warn = $this->warn;\r
87                 $indexer->warn                          = $this->warn; \r
88 \r
89                 $sourcefiles = $fileHandler->getFilesInDirectory($this->sourceDirectory, $this->sourceFileSuffix);\r
90                 $parser->setPhpSourcecodeFiles($fileHandler->get($sourcefiles));\r
91 \r
92                 $this->outl("... preparse to find modulegroups and classtrees.");\r
93                 $parser->preparse();\r
94 \r
95                 $this->outl("... parsing classes.");\r
96                 while ($classtree = $parser->getClassTree()) {\r
97 \r
98                         $classAnalyser->setClasses( $classtree, $parser->current_baseclass );\r
99                         $classAnalyser->analyse();\r
100 \r
101                         while ($class = $classAnalyser->getClass()) {\r
102                                 $indexer->addClass($class);\r
103                                 $classExporter->export($class);\r
104                         }\r
105 \r
106                         if (floor(phpversion()) > 3) {\r
107 \r
108                                 $indexExporter->exportClasstree($indexer->getClasstree(), $parser->current_baseclass);\r
109 \r
110                         } else {\r
111 \r
112                                 $classtree = $indexer->getClasstree();\r
113                                 $base = $parser->current_baseclass;\r
114                                 $indexExporter->exportClasstree($classtree, $base);\r
115 \r
116                         }\r
117 \r
118                 }\r
119 \r
120                 $this->outl("... parsing modules.");\r
121                 while ($modulegroup = $parser->getModulegroup()) {      \r
122 \r
123                         $moduleAnalyser->setModulegroup( $modulegroup );\r
124                         $moduleAnalyser->analyse();\r
125 \r
126                         while ($module = $moduleAnalyser->getModule()) {\r
127                                 $indexer->addModule($module);\r
128                                 $moduleExporter->export($module);\r
129                         }\r
130 \r
131                         if (floor(phpversion()) > 3) {\r
132 \r
133                                 $indexExporter->exportModulegroup($indexer->getModulegroup());\r
134 \r
135                         } else {\r
136 \r
137                                 $modulegroup = $indexer->getModulegroup();\r
138                                 $indexExporter->exportModulegroup($modulegroup);\r
139 \r
140                         }\r
141 \r
142                 }\r
143 \r
144                 $this->outl("... writing packagelist.");\r
145                 if (floor(phpversion()) > 3) {\r
146 \r
147                         $indexExporter->exportPackagelist($indexer->getPackages());\r
148                         $indexExporter->exportElementlist($indexer->getElementlist());\r
149 \r
150                 } else {\r
151 \r
152                         $packages = $indexer->getPackages();\r
153                         $indexExporter->exportPackagelist($packages);\r
154                         $elements = $indexer->getElementlist();\r
155                         $indexExporter->exportElementlist($elements);\r
156 \r
157                 }\r
158 \r
159                 $warningExporter->export($parser->warn->getWarnings(), "parser");\r
160                 $warningExporter->export($moduleAnalyser->warn->getWarnings(), "moduleanalyser");\r
161                 $warningExporter->export($classAnalyser->warn->getWarnings(), "classanalyser");\r
162 \r
163                 $this->outl("Parser finished.");\r
164                 return true;\r
165         } // end func parse\r
166 \r
167         /**\r
168         * Renders the PHPDoc XML files as HTML files \r
169         *\r
170         * @param        string  Targetformat, currently only "html" is available.\r
171         * @param        string  Target directory for the html files\r
172         * @param        string  Directory with the html templates\r
173         * @return       bool            $ok\r
174         * @throws       PhpdocError\r
175         * @access       public\r
176         */\r
177         function render($type = "html", $target = "", $template = "") {\r
178 \r
179                 $this->outl("Starting to render...");\r
180                 $target = ("" == $target) ? $this->target : $this->getCheckedDirname($target);\r
181                 $template =     ("" == $template) ? $this->templateRoot : $this->getCheckedDirname($template);                          \r
182 \r
183                 switch(strtolower($type)) {\r
184 \r
185                         case "html":\r
186                         default:\r
187                                 $renderer = new PhpdocHTMLRendererManager($target, $template, $this->application, $this->targetFileSuffix);\r
188                                 break;\r
189                 }\r
190 \r
191                 $fileHandler            = new PhpdocFileHandler;\r
192                 $files = $fileHandler->getFilesInDirectory($target, "xml");\r
193                 $len = strlen($target);\r
194 \r
195                 $tpl = new IntegratedTemplate($this->templateRoot);\r
196                 $tpl->loadTemplateFile("xmlfiles.html");\r
197                 $tpl->setCurrentBlock("file_loop");\r
198 \r
199                 // Do not change the file prefixes!\r
200                 reset($files);\r
201                 while (list($k, $file) = each($files)) {\r
202 \r
203                         $tpl->setVariable("FILE", substr($file, $len));\r
204                         $tpl->parseCurrentBlock();\r
205 \r
206                         if ("class_" == substr($file, $len, 6)) {\r
207 \r
208                                 $renderer->render(substr($file, $len), "class");\r
209 \r
210                         } else if ("module_" == substr($file, $len, 7)) {\r
211 \r
212                                 $renderer->render(substr($file, $len), "module");\r
213 \r
214                         } else if ("classtree_" == substr($file, $len, 10)) {\r
215 \r
216                                 $renderer->render(substr($file, $len), "classtree");\r
217 \r
218                         }       else if ("modulegroup_" ==  substr($file, $len, 12)) {\r
219 \r
220                                 $renderer->render(substr($file, $len), "modulegroup");\r
221 \r
222                         } else if ("warnings_" == substr($file, $len, 9)) {\r
223 \r
224                                 $renderer->render(substr($file, $len), "warning");\r
225 \r
226                         }\r
227 \r
228                 }\r
229 \r
230                 $renderer->finish();    \r
231                 $fileHandler->createFile($target."phpdoc_xmlfiles".$this->targetFileSuffix, $tpl->get());\r
232 \r
233                 $this->outl($this->finishInstructions);\r
234                 return true;\r
235         } // end func   render\r
236 \r
237 } // end class Phpdoc\r
238 ?>