diff options
Diffstat (limited to 'utils/rockbox_api/functions.php')
-rwxr-xr-x | utils/rockbox_api/functions.php | 337 |
1 files changed, 337 insertions, 0 deletions
diff --git a/utils/rockbox_api/functions.php b/utils/rockbox_api/functions.php new file mode 100755 index 0000000000..0f34fc69e0 --- /dev/null +++ b/utils/rockbox_api/functions.php | |||
@@ -0,0 +1,337 @@ | |||
1 | <? | ||
2 | $svn = "http://svn.rockbox.org/viewvc.cgi/trunk/"; | ||
3 | $wiki = "http://www.rockbox.org/wiki/"; | ||
4 | |||
5 | function func_sort($a, $b) | ||
6 | { | ||
7 | $a = preg_replace('/^((unsigned|const|struct|enum) [^ ]*|[a-z0-9 \*_]*) [\*]?/i', '', $a); | ||
8 | $b = preg_replace('/^((unsigned|const|struct|enum) [^ ]*|[a-z0-9 \*_]*) [\*]?/i', '', $b); | ||
9 | return strnatcasecmp($a, $b); | ||
10 | } | ||
11 | |||
12 | function get_newest() | ||
13 | { | ||
14 | global $svn; | ||
15 | |||
16 | $text = file_get_contents("../../apps/plugin.h"); | ||
17 | |||
18 | $text = str_replace(array("\r\n", "\r"), "\n", $text); | ||
19 | |||
20 | /* Located plugin_api struct */ | ||
21 | foreach(explode("\n", $text) as $line_nr => $line) | ||
22 | { | ||
23 | if(trim($line) == "struct plugin_api {") | ||
24 | { | ||
25 | $text = explode("\n", $text); | ||
26 | $text = array_slice($text, $line_nr+1); | ||
27 | break; | ||
28 | } | ||
29 | } | ||
30 | |||
31 | foreach($text as $line_nr => $line) | ||
32 | { | ||
33 | if(trim($line) == "};") | ||
34 | { | ||
35 | $text = array_slice($text, 0, $line_nr-1); | ||
36 | break; | ||
37 | } | ||
38 | } | ||
39 | /* Locating done */ | ||
40 | |||
41 | /* Clean up stuff a bit .. */ | ||
42 | for($i=0; $i<count($text); $i++) | ||
43 | $text[$i] = trim($text[$i]); | ||
44 | |||
45 | |||
46 | /* Fake preprocesser */ | ||
47 | $ret = array(); | ||
48 | $_groups = array(); | ||
49 | $conditions = array(); | ||
50 | $strip_next = 0; | ||
51 | $group = ""; | ||
52 | for($i=0; $i<count($text); $i++) | ||
53 | { | ||
54 | $tmp = trim($text[$i]); | ||
55 | |||
56 | if(substr($tmp, 0, 1) == '#') | ||
57 | { | ||
58 | $tmp = trim(substr($tmp, 1)); | ||
59 | if(strtolower(substr($tmp, 0, 2)) == "if") | ||
60 | { | ||
61 | if(strtolower(substr($tmp, 2, 3)) == "def") | ||
62 | $conditions[] = "defined(".substr($tmp, 6).")"; | ||
63 | else if(strtolower(substr($tmp, 2, 4)) == "ndef") | ||
64 | $conditions[] = "!defined(".substr($tmp, 7).")"; | ||
65 | else | ||
66 | { | ||
67 | while(substr($tmp, strlen($tmp)-1, 1) == "\\") | ||
68 | { | ||
69 | $i++; | ||
70 | $tmp = substr($tmp, 0, strlen($tmp)-1)." ".trim($text[$i]); | ||
71 | } | ||
72 | |||
73 | $conditions[] = substr($tmp, 3); | ||
74 | } | ||
75 | } | ||
76 | else if(strtolower(substr($tmp, 0, 4)) == "elif") | ||
77 | { | ||
78 | while(substr($tmp, strlen($tmp)-1, 1) == "\\") | ||
79 | { | ||
80 | $i++; | ||
81 | $tmp = substr($tmp, 0, strlen($tmp)-1)." ".trim($text[$i]); | ||
82 | } | ||
83 | $conditions[count($conditions)-1] = substr($tmp, 5); | ||
84 | } | ||
85 | else if(strtolower(substr($tmp, 0, 4)) == "else") | ||
86 | $conditions[count($conditions)-1] = "!( ".$conditions[count($conditions)-1]." )"; | ||
87 | else if(strtolower(substr($tmp, 0, 5)) == "endif") | ||
88 | array_pop($conditions); | ||
89 | } | ||
90 | else if(strlen($tmp) == 0) | ||
91 | $group = ""; | ||
92 | else if(substr($tmp, 0, 2) == "/*") | ||
93 | { | ||
94 | while(strpos($tmp, "*/") === false) | ||
95 | { | ||
96 | $i++; | ||
97 | $tmp .= " ".trim($text[$i]); | ||
98 | } | ||
99 | $group = explode("/*", trim($tmp)); | ||
100 | $group = explode("*/", $group[1]); | ||
101 | $group = trim($group[0]); | ||
102 | } | ||
103 | else | ||
104 | { | ||
105 | while(strpos($tmp, ";") === false) | ||
106 | { | ||
107 | $i++; | ||
108 | $tmp .= " ".trim($text[$i]); | ||
109 | } | ||
110 | |||
111 | /* Replace those (*func)(int args) with func(int args) */ | ||
112 | $tmp = preg_replace('/\(\*([^\)]*)\)/i', '\1', $tmp, 1); | ||
113 | $tmp = substr($tmp, 0, strlen($tmp)-1); | ||
114 | $ret[$tmp] = array("func" => $tmp, "cond" => "(".implode(") && (", $conditions).")", "group" => $group); | ||
115 | } | ||
116 | } | ||
117 | |||
118 | uksort($ret, "func_sort"); | ||
119 | |||
120 | return $ret; | ||
121 | } | ||
122 | |||
123 | function parse_documentation($data) | ||
124 | { | ||
125 | $data = explode("\n", $data); | ||
126 | |||
127 | $ret = array(); | ||
128 | $cur_func = ""; | ||
129 | foreach($data as $line) | ||
130 | { | ||
131 | if(substr($line, 0, 1) == "#") | ||
132 | continue; | ||
133 | else if(substr($line, 0, 4) == " ") | ||
134 | { | ||
135 | $tmp = trim($line); | ||
136 | if(strpos($tmp, " ") !== false) | ||
137 | $tmp = array(substr($tmp, 1, strpos($tmp, " ")-1), substr($tmp, strpos($tmp, " ")) ); | ||
138 | else | ||
139 | $tmp = array(substr($tmp, 1), ""); | ||
140 | |||
141 | $ret[$cur_func][$tmp[0]][] = $tmp[1]; | ||
142 | } | ||
143 | else if(strlen($line) == 0) | ||
144 | continue; | ||
145 | else | ||
146 | $cur_func = substr($line, 0); | ||
147 | } | ||
148 | |||
149 | $_ret = array(); | ||
150 | foreach($ret as $func => $el) | ||
151 | { | ||
152 | if(isset($el["group"])) | ||
153 | $group = trim($el["group"][0]); | ||
154 | else | ||
155 | $group = "misc"; | ||
156 | |||
157 | $_ret[$group][$func] = $el; | ||
158 | } | ||
159 | |||
160 | return $_ret; | ||
161 | } | ||
162 | |||
163 | function get_func($func) | ||
164 | { | ||
165 | $func = preg_replace('/^((unsigned|const|struct|enum) [^ ]*|[a-z0-9 \*_]*) [\*]?/i', '', $func); | ||
166 | if(strpos($func, "PREFIX") !== false) | ||
167 | $func = substr($func, 0, strrpos($func, "(")); | ||
168 | else if(strpos($func, "(") !== false) | ||
169 | $func = substr($func, 0, strpos($func, "(")); | ||
170 | |||
171 | return $func; | ||
172 | } | ||
173 | |||
174 | function get_args($func) | ||
175 | { | ||
176 | /* Check if this _is_ a function */ | ||
177 | if(strpos($func, "(") === false) | ||
178 | return array(); | ||
179 | |||
180 | /* Get rid of return value */ | ||
181 | $func = preg_replace('/^((unsigned|const|struct|enum) [^ ]*|[a-z0-9 \*_]*) [\*]?/i', '', $func); | ||
182 | |||
183 | /* Get rid of function name */ | ||
184 | if(strpos($func, "(") !== false) | ||
185 | $func = substr($func, strpos($func, "(")); | ||
186 | |||
187 | /* Get rid of ATTRIBUTE_PRINTF */ | ||
188 | if(strpos($func, "ATTRIBUTE_PRINTF") !== false) | ||
189 | $func = substr($func, 0, strpos($func, "ATTRIBUTE_PRINTF")); | ||
190 | |||
191 | $level = 0; | ||
192 | $args = array(); | ||
193 | $buffer = ""; | ||
194 | for($i=0; $i<strlen($func); $i++) | ||
195 | { | ||
196 | switch($func{$i}) | ||
197 | { | ||
198 | case "(": | ||
199 | $level++; | ||
200 | if($level > 1) | ||
201 | $buffer .= "("; | ||
202 | break; | ||
203 | case ")": | ||
204 | $level--; | ||
205 | if($level > 0) | ||
206 | { | ||
207 | $buffer .= ")"; | ||
208 | break; | ||
209 | } | ||
210 | case ",": | ||
211 | if($level <= 1) | ||
212 | { | ||
213 | if(strpos($buffer, "(,") !== false) | ||
214 | { | ||
215 | $tmp = array(); | ||
216 | preg_match_all('/[^ ]*, [^)]*\)/', $buffer, $tmp); | ||
217 | $tmp = $tmp[0]; | ||
218 | foreach($tmp as $el) | ||
219 | { | ||
220 | if(strlen($el) > 0) | ||
221 | $args[] = trim($el); | ||
222 | } | ||
223 | $tmp = preg_replace('/[^ ]*, [^)]*\)/', '', $buffer); | ||
224 | $args[] = trim($tmp); | ||
225 | } | ||
226 | else | ||
227 | $args[] = trim($buffer); | ||
228 | $buffer = ""; | ||
229 | } | ||
230 | else | ||
231 | $buffer .= ","; | ||
232 | break; | ||
233 | default: | ||
234 | $buffer .= $func{$i}; | ||
235 | break; | ||
236 | } | ||
237 | } | ||
238 | |||
239 | /* Filter out void */ | ||
240 | for($i=0; $i<count($args); $i++) | ||
241 | { | ||
242 | if($args[$i] == "void") | ||
243 | unset($args[$i]); | ||
244 | } | ||
245 | |||
246 | return $args; | ||
247 | } | ||
248 | |||
249 | function get_return($func) | ||
250 | { | ||
251 | $ret = array(); | ||
252 | preg_match('/^((unsigned|const|struct|enum) [^ ]*|[a-z0-9 \*_]*) [\*]?/i', $func, $ret); | ||
253 | |||
254 | if(trim($ret[0]) == "void") | ||
255 | return false; | ||
256 | else | ||
257 | return trim($ret[0]); | ||
258 | } | ||
259 | |||
260 | function split_var($var) | ||
261 | { | ||
262 | if(strpos($var, "(,") !== false) | ||
263 | { | ||
264 | $p1 = substr($var, 0, strrpos($var, " ")); | ||
265 | $p2 = substr($var, strrpos($var, " ")); | ||
266 | $p2 = substr($p2, 0, strlen($p2)-1); | ||
267 | } | ||
268 | else if(strpos($var, "(*") !== false) | ||
269 | { | ||
270 | $p2 = array(); | ||
271 | preg_match('/\(\*\w*\)/', $var, $p2); | ||
272 | $p2 = $p2[0]; | ||
273 | |||
274 | $p1 = substr($var, strpos($var, $p2)); | ||
275 | $p2 = substr($p2, 2, strlen($p2)-3); | ||
276 | } | ||
277 | else | ||
278 | { | ||
279 | $p1 = substr($var, 0, strrpos($var, " ")); | ||
280 | $p2 = substr($var, strrpos($var, " ")); | ||
281 | } | ||
282 | |||
283 | if(strpos($p2, "*") !== false) | ||
284 | { | ||
285 | for($i=0; $i<substr_count($p2, "*"); $i++) | ||
286 | $p1 .= "*"; | ||
287 | $p2 = str_replace("*", "", $p2); | ||
288 | } | ||
289 | |||
290 | return array(trim($p1), trim($p2)); | ||
291 | } | ||
292 | |||
293 | function _simplify($text) | ||
294 | { | ||
295 | $text = ereg_replace('\(!\( (.*)[ ]?\)\)', '!\1', $text); | ||
296 | $text = ereg_replace('\(\(([^ ])\)\)', '\1', $text); | ||
297 | return $text; | ||
298 | } | ||
299 | |||
300 | function clean_func($func) | ||
301 | { | ||
302 | $func = str_replace(array(" ", " "), " ", $func); | ||
303 | $func = str_replace(" ", " ", $func); | ||
304 | return $func; | ||
305 | } | ||
306 | |||
307 | function do_see_markup($data) | ||
308 | { | ||
309 | $ret = array(); | ||
310 | foreach($data as $el) | ||
311 | { | ||
312 | $el = trim($el); | ||
313 | |||
314 | if(substr($el, 0, 1) != "[") | ||
315 | $ret[] = do_markup("[F[".$el."]]"); | ||
316 | else | ||
317 | $ret[] = do_markup($el); | ||
318 | } | ||
319 | |||
320 | return implode(" & ", $ret); | ||
321 | } | ||
322 | |||
323 | function do_markup($data) | ||
324 | { | ||
325 | global $svn, $wiki; | ||
326 | |||
327 | $data = ereg_replace('=([^=]*)=', '<code>\1</code>', $data); | ||
328 | $data = ereg_replace('\[W\[([^#\[]*)([^\[]*)\]\]', '<a href="'.$wiki.'\1\2">\1</a>', $data); | ||
329 | $data = ereg_replace('\[S\[([^\[]*)\]\]', '<a href="'.$svn.'\1?content-type=text%2Fplain">\1</a>', $data); | ||
330 | $data = ereg_replace('\[F\[([^\[]*)\]\]', '<a href="#\1">\1</a>', $data); | ||
331 | $data = ereg_replace('\[\[([^#\[]*)([^\[]*)\]\]', '<a href="\1\2">\1</a>', $data); | ||
332 | $data = str_replace("%BR%", "<br />", $data); | ||
333 | $data = nl2br($data); | ||
334 | |||
335 | return $data; | ||
336 | } | ||
337 | ?> | ||