summaryrefslogtreecommitdiff
path: root/utils/rockbox_api/functions.php
diff options
context:
space:
mode:
Diffstat (limited to 'utils/rockbox_api/functions.php')
-rwxr-xr-xutils/rockbox_api/functions.php337
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
5function 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
12function 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
123function 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
163function 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
174function 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
249function 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
260function 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
293function _simplify($text)
294{
295 $text = ereg_replace('\(!\( (.*)[ ]?\)\)', '!\1', $text);
296 $text = ereg_replace('\(\(([^ ])\)\)', '\1', $text);
297 return $text;
298}
299
300function clean_func($func)
301{
302 $func = str_replace(array(" ", " "), " ", $func);
303 $func = str_replace(" ", " ", $func);
304 return $func;
305}
306
307function 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(" &amp; ", $ret);
321}
322
323function 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?>