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