| <? |
| $svn = "http://svn.rockbox.org/viewvc.cgi/trunk/"; |
| $wiki = "http://www.rockbox.org/wiki/"; |
| |
| function func_sort($a, $b) |
| { |
| $a = preg_replace('/^((unsigned|const|struct|enum) [^ ]*|[a-z0-9 \*_]*) [\*]?/i', '', $a); |
| $b = preg_replace('/^((unsigned|const|struct|enum) [^ ]*|[a-z0-9 \*_]*) [\*]?/i', '', $b); |
| return strnatcasecmp($a, $b); |
| } |
| |
| function get_newest() |
| { |
| global $svn; |
| |
| $mypath = $_SERVER['SCRIPT_FILENAME']; |
| $mypath = substr($mypath, 0, strrpos($mypath, "/"))."/"; |
| |
| $text = file_get_contents($mypath."../../apps/plugin.h"); |
| |
| $text = str_replace(array("\r\n", "\r"), "\n", $text); |
| |
| /* Located plugin_api struct */ |
| foreach(explode("\n", $text) as $line_nr => $line) |
| { |
| if(trim($line) == "struct plugin_api {") |
| { |
| $text = explode("\n", $text); |
| $text = array_slice($text, $line_nr+1); |
| break; |
| } |
| } |
| |
| foreach($text as $line_nr => $line) |
| { |
| if(trim($line) == "};") |
| { |
| $text = array_slice($text, 0, $line_nr-1); |
| break; |
| } |
| } |
| /* Locating done */ |
| |
| /* Clean up stuff a bit .. */ |
| for($i=0; $i<count($text); $i++) |
| $text[$i] = trim($text[$i]); |
| |
| |
| /* Fake preprocesser */ |
| $ret = array(); |
| $_groups = array(); |
| $conditions = array(); |
| $strip_next = 0; |
| $group = ""; |
| for($i=0; $i<count($text); $i++) |
| { |
| $tmp = trim($text[$i]); |
| |
| if(substr($tmp, 0, 1) == '#') |
| { |
| $tmp = trim(substr($tmp, 1)); |
| if(strtolower(substr($tmp, 0, 2)) == "if") |
| { |
| if(strtolower(substr($tmp, 2, 3)) == "def") |
| $conditions[] = "defined(".substr($tmp, 6).")"; |
| else if(strtolower(substr($tmp, 2, 4)) == "ndef") |
| $conditions[] = "!defined(".substr($tmp, 7).")"; |
| else |
| { |
| while(substr($tmp, strlen($tmp)-1, 1) == "\\") |
| { |
| $i++; |
| $tmp = substr($tmp, 0, strlen($tmp)-1)." ".trim($text[$i]); |
| } |
| |
| $conditions[] = substr($tmp, 3); |
| } |
| } |
| else if(strtolower(substr($tmp, 0, 4)) == "elif") |
| { |
| while(substr($tmp, strlen($tmp)-1, 1) == "\\") |
| { |
| $i++; |
| $tmp = substr($tmp, 0, strlen($tmp)-1)." ".trim($text[$i]); |
| } |
| $conditions[count($conditions)-1] = substr($tmp, 5); |
| } |
| else if(strtolower(substr($tmp, 0, 4)) == "else") |
| $conditions[count($conditions)-1] = "!( ".$conditions[count($conditions)-1]." )"; |
| else if(strtolower(substr($tmp, 0, 5)) == "endif") |
| array_pop($conditions); |
| } |
| else if(strlen($tmp) == 0) |
| $group = ""; |
| else if(substr($tmp, 0, 2) == "/*") |
| { |
| while(strpos($tmp, "*/") === false) |
| { |
| $i++; |
| $tmp .= " ".trim($text[$i]); |
| } |
| $group = explode("/*", trim($tmp)); |
| $group = explode("*/", $group[1]); |
| $group = trim($group[0]); |
| } |
| else |
| { |
| while(strpos($tmp, ";") === false) |
| { |
| $i++; |
| $tmp .= " ".trim($text[$i]); |
| } |
| |
| /* Replace those (*func)(int args) with func(int args) */ |
| $tmp = preg_replace('/\(\*([^\)]*)\)/i', '\1', $tmp, 1); |
| $tmp = substr($tmp, 0, strlen($tmp)-1); |
| $ret[$tmp] = array("func" => $tmp, "cond" => "(".implode(") && (", $conditions).")", "group" => $group); |
| } |
| } |
| |
| uksort($ret, "func_sort"); |
| |
| return $ret; |
| } |
| |
| function parse_documentation($data) |
| { |
| $data = explode("\n", $data); |
| |
| $ret = array(); |
| $cur_func = ""; |
| foreach($data as $line) |
| { |
| if(substr($line, 0, 1) == "#") |
| continue; |
| else if(substr($line, 0, 4) == " ") |
| { |
| $tmp = trim($line); |
| if(strpos($tmp, " ") !== false) |
| $tmp = array(substr($tmp, 1, strpos($tmp, " ")-1), substr($tmp, strpos($tmp, " ")) ); |
| else |
| $tmp = array(substr($tmp, 1), ""); |
| |
| $ret[$cur_func][$tmp[0]][] = $tmp[1]; |
| } |
| else if(strlen($line) == 0) |
| continue; |
| else |
| $cur_func = substr($line, 0); |
| } |
| |
| $_ret = array(); |
| foreach($ret as $func => $el) |
| { |
| if(isset($el["group"])) |
| $group = trim($el["group"][0]); |
| else |
| $group = "misc"; |
| |
| $_ret[$group][$func] = $el; |
| } |
| |
| return $_ret; |
| } |
| |
| function get_func($func) |
| { |
| $func = preg_replace('/^((unsigned|const|struct|enum) [^ ]*|[a-z0-9 \*_]*) [\*]?/i', '', $func); |
| if(strpos($func, "PREFIX") !== false) |
| $func = substr($func, 0, strrpos($func, "(")); |
| else if(strpos($func, "(") !== false) |
| $func = substr($func, 0, strpos($func, "(")); |
| |
| return $func; |
| } |
| |
| function get_args($func) |
| { |
| /* Check if this _is_ a function */ |
| if(strpos($func, "(") === false) |
| return array(); |
| |
| /* Get rid of return value */ |
| $func = preg_replace('/^((unsigned|const|struct|enum) [^ ]*|[a-z0-9 \*_]*) [\*]?/i', '', $func); |
| |
| /* Get rid of function name */ |
| if(strpos($func, "(") !== false) |
| $func = substr($func, strpos($func, "(")); |
| |
| /* Get rid of ATTRIBUTE_PRINTF */ |
| if(strpos($func, "ATTRIBUTE_PRINTF") !== false) |
| $func = substr($func, 0, strpos($func, "ATTRIBUTE_PRINTF")); |
| |
| $level = 0; |
| $args = array(); |
| $buffer = ""; |
| for($i=0; $i<strlen($func); $i++) |
| { |
| switch($func{$i}) |
| { |
| case "(": |
| $level++; |
| if($level > 1) |
| $buffer .= "("; |
| break; |
| case ")": |
| $level--; |
| if($level > 0) |
| { |
| $buffer .= ")"; |
| break; |
| } |
| case ",": |
| if($level <= 1) |
| { |
| if(strpos($buffer, "(,") !== false) |
| { |
| $tmp = array(); |
| preg_match_all('/[^ ]*, [^)]*\)/', $buffer, $tmp); |
| $tmp = $tmp[0]; |
| foreach($tmp as $el) |
| { |
| if(strlen($el) > 0) |
| $args[] = trim($el); |
| } |
| $tmp = preg_replace('/[^ ]*, [^)]*\)/', '', $buffer); |
| $args[] = trim($tmp); |
| } |
| else |
| $args[] = trim($buffer); |
| $buffer = ""; |
| } |
| else |
| $buffer .= ","; |
| break; |
| default: |
| $buffer .= $func{$i}; |
| break; |
| } |
| } |
| |
| /* Filter out void */ |
| for($i=0; $i<count($args); $i++) |
| { |
| if($args[$i] == "void") |
| unset($args[$i]); |
| } |
| |
| return $args; |
| } |
| |
| function get_return($func) |
| { |
| $ret = array(); |
| preg_match('/^((unsigned|const|struct|enum) [^ ]*|[a-z0-9 \*_]*) [\*]?/i', $func, $ret); |
| |
| if(trim($ret[0]) == "void") |
| return false; |
| else |
| return trim($ret[0]); |
| } |
| |
| function split_var($var) |
| { |
| if(strpos($var, "(,") !== false) |
| { |
| $p1 = substr($var, 0, strrpos($var, " ")); |
| $p2 = substr($var, strrpos($var, " ")); |
| $p2 = substr($p2, 0, strlen($p2)-1); |
| } |
| else if(strpos($var, "(*") !== false) |
| { |
| $p2 = array(); |
| preg_match('/\(\*\w*\)/', $var, $p2); |
| $p2 = $p2[0]; |
| |
| $p1 = substr($var, strpos($var, $p2)); |
| $p2 = substr($p2, 2, strlen($p2)-3); |
| } |
| else |
| { |
| $p1 = substr($var, 0, strrpos($var, " ")); |
| $p2 = substr($var, strrpos($var, " ")); |
| } |
| |
| if(strpos($p2, "*") !== false) |
| { |
| for($i=0; $i<substr_count($p2, "*"); $i++) |
| $p1 .= "*"; |
| $p2 = str_replace("*", "", $p2); |
| } |
| |
| return array(trim($p1), trim($p2)); |
| } |
| |
| function _simplify($text) |
| { |
| $text = ereg_replace('\(!\( (.*)[ ]?\)\)', '!\1', $text); |
| $text = ereg_replace('\(\(([^ ])\)\)', '\1', $text); |
| return $text; |
| } |
| |
| function clean_func($func) |
| { |
| $func = str_replace(array(" ", " "), " ", $func); |
| $func = str_replace(" ", " ", $func); |
| return $func; |
| } |
| |
| function do_see_markup($data) |
| { |
| $ret = array(); |
| foreach($data as $el) |
| { |
| $el = trim($el); |
| |
| if(substr($el, 0, 1) != "[") |
| $ret[] = do_markup("[F[".$el."]]"); |
| else |
| $ret[] = do_markup($el); |
| } |
| |
| return implode(" & ", $ret); |
| } |
| |
| function do_markup($data) |
| { |
| global $svn, $wiki; |
| |
| $data = ereg_replace('=([^=]*)=', '<code>\1</code>', $data); |
| $data = ereg_replace('\[W\[([^#\[]*)([^\[]*)\]\]', '<a href="'.$wiki.'\1\2">\1</a>', $data); |
| $data = ereg_replace('\[S\[([^\[]*)\]\]', '<a href="'.$svn.'\1?content-type=text%2Fplain">\1</a>', $data); |
| $data = ereg_replace('\[F\[([^\[]*)\]\]', '<a href="#\1">\1</a>', $data); |
| $data = ereg_replace('\[\[([^#\[]*)([^\[]*)\]\]', '<a href="\1\2">\1</a>', $data); |
| $data = str_replace("%BR%", "<br />", $data); |
| $data = nl2br($data); |
| |
| return $data; |
| } |
| |
| function get_tpl_part($search, $haystack) |
| { |
| $tpl = array(); |
| ereg($search[0].".*".$search[1], $haystack, $tpl); |
| return str_replace(array($search[0], $search[1]), "", $tpl[0]); |
| } |
| ?> |