1 : <?php
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 : function processor_autoload($class)
34 : {
35 6 : $filename = preg_replace('/([A-Z])/', '_$1', $class);
36 6 : $filename = __DIR__ . '/' . strtolower(substr($filename, 1)) . '.php';
37 6 : if (file_exists($filename)) require_once $filename;
38 6 : }
39 :
40 : spl_autoload_register('processor_autoload');
41 :
42 : require_once __DIR__ . '/constants.php';
43 :
44 :
45 :
46 :
47 :
48 :
49 :
50 :
51 :
52 :
53 :
54 :
55 :
56 :
57 :
58 :
59 :
60 :
61 :
62 :
63 :
64 :
65 :
66 : function parse_doc_comment($comment)
67 : {
68 46 : $comment = preg_replace('/^\/\*\*/', '', $comment);
69 46 : $comment = preg_replace('/\*\/$/m', '', $comment);
70 46 : $comment = preg_replace('/^\s*\**/m', '', $comment);
71 :
72 :
73 :
74 46 : $lines = explode("\n", $comment);
75 :
76 :
77 46 : $output = array();
78 46 : $buffer = null;
79 46 : $current = null;
80 46 : foreach ($lines as $line) {
81 :
82 46 : $line = preg_replace('/^\s/', '', $line);
83 46 : $line = rtrim($line);
84 46 : $trimline = ltrim($line);
85 :
86 46 : if ($current != null and $current != '@summary' and $trimline == '') continue;
87 :
88 :
89 46 : if ($trimline != '' and $trimline[0] == '@') {
90 32 : @list($word, $value) = preg_split('/\s+/', $trimline, 2);
91 :
92 :
93 32 : if ($current != null) {
94 11 : parse_tag ($output, $current, $buffer);
95 11 : $buffer = null;
96 11 : }
97 32 : $current = $word;
98 32 : $buffer = $value;
99 :
100 :
101 32 : } else {
102 20 : if ($current != null) {
103 4 : $buffer .= "\n" . $line;
104 :
105 4 : } else {
106 20 : $current = '@summary';
107 20 : $buffer = $line;
108 : }
109 : }
110 :
111 46 : }
112 :
113 46 : if ($current != null) {
114 46 : parse_tag ($output, $current, $buffer);
115 103 : }
116 :
117 46 : return $output;
118 : }
119 :
120 :
121 :
122 :
123 :
124 : function parse_tag(&$output, $tag, $buffer)
125 : {
126 46 : if ($tag == '@summary') {
127 20 : $output[$tag] = $buffer;
128 :
129 20 : } else {
130 32 : if (! isset($output[$tag])) {
131 32 : $output[$tag] = array();
132 32 : }
133 32 : $output[$tag][] = $buffer;
134 : }
135 46 : }
136 :
137 :
138 :
139 :
140 :
141 :
142 :
143 : function output_status($message)
144 : {
145 0 : if (PHP_SAPI == 'cli') {
146 0 : $message = preg_replace('/<a[^>]* href=[\'"](.+?)[\'"][^>]*>(.*?)<\/a>/i', '$2 [LINK: $1]', $message);
147 0 : echo strip_tags($message) . "\n";
148 :
149 0 : } else {
150 0 : echo $message . "<br>";
151 : }
152 0 : flush();
153 0 : }
154 :
155 :
156 :
157 :
158 :
159 : function get_filenames($base_dir, $directory, array $exclude_dirs)
160 : {
161 0 : $exclude_dir = preg_replace('!^/!', '', $directory);
162 0 : if (in_array($exclude_dir, $exclude_dirs)) return null;
163 :
164 0 : $handle = opendir($base_dir . $directory);
165 0 : if ($handle === false) return null;
166 :
167 0 : $files = array();
168 0 : while (($file = readdir($handle)) !== false) {
169 0 : if ($file[0] == '.') continue;
170 :
171 0 : if (is_dir($base_dir . $directory . '/'. $file)) {
172 :
173 0 : $files2 = get_filenames($base_dir, $directory . '/'. $file, $exclude_dirs);
174 0 : if (is_array($files2)) {
175 0 : $files = array_merge($files, $files2);
176 0 : }
177 :
178 0 : } else {
179 :
180 0 : $files[] = $directory . '/'. $file;
181 : }
182 0 : }
183 :
184 0 : closedir($handle);
185 :
186 0 : return $files;
187 : }
188 :
189 :
190 :
191 :
192 :
193 :
194 :
195 :
196 :
197 :
198 : function htmlify_text($text)
199 : {
200 113 : if ($text == '') return null;
201 :
202 :
203 :
204 52 : $has_block_html = preg_match('/<(p|div|pre|table)( .*)?>/i', $text);
205 52 : if ($has_block_html) {
206 0 : return $text;
207 : }
208 :
209 :
210 52 : $lines = explode("\n", $text);
211 52 : $min_num_spaces = 1000;
212 52 : foreach ($lines as $line) {
213 52 : if (trim($line) == '') continue;
214 52 : $num_spaces = 0;
215 52 : for ($i = 0; $i < strlen($line); $i++) {
216 52 : if ($line[$i] != ' ') break;
217 21 : ++$num_spaces;
218 21 : }
219 52 : $min_num_spaces = min($min_num_spaces, $num_spaces);
220 52 : }
221 :
222 :
223 52 : $text = '';
224 52 : $j = 0;
225 52 : foreach ($lines as $line) {
226 52 : if ($j++ > 0) $text .= "\n";
227 52 : $text .= substr($line, $min_num_spaces);
228 52 : }
229 :
230 :
231 52 : $text = str_replace('&', '&', $text);
232 52 : $replacer = function(array $matches) {
233 22 : return htmlify_check_tag(stripslashes($matches[0]), stripslashes($matches[1]));
234 52 : };
235 52 : $text = preg_replace_callback('/<\/?([a-z]+)(?>\s|"[^"]*"|\'[^\']*\'|[^\'">])*>/i', $replacer, $text);
236 52 : $text = preg_replace('/<([^\/a-z])/i', '<$1', $text);
237 52 : $text = preg_replace('/([^"\'a-z])>/i', '$1>', $text);
238 52 : $text = str_replace('"', '"', $text);
239 :
240 :
241 52 : $text = "<pre>\n{$text}</pre>";
242 :
243 52 : return $text;
244 : }
245 :
246 :
247 :
248 :
249 :
250 :
251 :
252 :
253 :
254 : function htmlify_check_tag($full_match, $tag_name)
255 : {;
256 :
257 22 : $valid_tags = array ('b', 'i', 'em', 'strong');
258 22 : if (in_array($tag_name, $valid_tags)) {
259 21 : return $full_match;
260 : }
261 :
262 :
263 1 : $full_match = str_replace('<', '<', $full_match);
264 1 : $full_match = str_replace('>', '>', $full_match);
265 1 : return $full_match;
266 : }
267 :
268 :
269 :
270 :
271 :
272 : function process_javadoc_tags(CodeParserItem $parser_item, $parent)
273 : {
274 103 : if ($parent != null) {
275 102 : $parent->cascadeTags($parser_item);
276 102 : }
277 :
278 103 : $parser_item->processTags();
279 103 : }
280 :
281 :
282 : ?>
|