293 lines
5.0 KiB
PHP
293 lines
5.0 KiB
PHP
#!/usr/bin/php
|
|
<?
|
|
/*
|
|
Raydium - CQFD Corp.
|
|
http://raydium.org/
|
|
License: GPL - GNU General Public License, see "gpl.txt" file.
|
|
*/
|
|
|
|
// This script generates a Wiki(ni) style documentation from comments of
|
|
// all header files of Raydium (raydium/header/*.h)
|
|
|
|
$page="http://wiki.raydium.org/wiki/RaydiumApiReference";
|
|
|
|
$intro="
|
|
======Raydium API Reference======
|
|
|
|
=====CQFD Corp.=====
|
|
|
|
This document is the most up-to-date version. **This is a work in progress**:
|
|
there's again some errors and wrong informations. Try, wait, or contribute ;)
|
|
|
|
\"\"<a href=$page#chapters>Index of chapters</a>\"\"
|
|
\"\"<a href=$page#index>Index of all Raydium functions</a>\"\"
|
|
|
|
----
|
|
This document is autogenerated, any change will be lost,
|
|
use RaydiumApiReferenceComments for any need.
|
|
{DATE}, for Raydium **{VERSION}**
|
|
----
|
|
";
|
|
|
|
|
|
|
|
function getTagLine($tag,$lines,$from=0)
|
|
{
|
|
for($i=$from;$i<count($lines);$i++)
|
|
{
|
|
$l=$lines[$i];
|
|
if(substr(trim($l),0,strlen($tag))==$tag)
|
|
return $i;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
function getVersion()
|
|
{
|
|
$file="../common.h";
|
|
$f=file($file);
|
|
$maj=getTagLine("#define RAYDIUM_MAJOR",$f);
|
|
$min=getTagLine("#define RAYDIUM_MINOR",$f);
|
|
|
|
$maj=str_replace("\t"," ",trim($f[$maj]));
|
|
$min=str_replace("\t"," ",trim($f[$min]));
|
|
|
|
$maj=explode(" ",$maj);
|
|
$min=explode(" ",$min);
|
|
$maj=$maj[count($maj)-1];
|
|
$min=$min[count($min)-1];
|
|
|
|
return sprintf("%d.%03d",$maj,$min);
|
|
}
|
|
|
|
function getMain($filename,$offset)
|
|
{
|
|
$f=file($filename);
|
|
$l=getTagLine("/*=",$f);
|
|
if($l==-1)
|
|
return -1;
|
|
$res=trim($f[$l+$offset]);
|
|
return $res;
|
|
}
|
|
|
|
function getPriority($filename)
|
|
{
|
|
$res=trim(getMain($filename,2));
|
|
if(is_numeric($res))
|
|
return $res;
|
|
else
|
|
return -1;
|
|
}
|
|
|
|
function getTitle($filename)
|
|
{
|
|
return trim(getMain($filename,1));
|
|
}
|
|
|
|
|
|
|
|
function getHeaders($directory)
|
|
{
|
|
$res=array();
|
|
if (is_dir($directory))
|
|
{
|
|
if ($dh = opendir($directory))
|
|
{
|
|
while (($file = readdir($dh)) !== false)
|
|
{
|
|
if(substr($file,-2)==".h")
|
|
{
|
|
$res[]=$file;
|
|
}
|
|
}
|
|
closedir($dh);
|
|
}
|
|
}
|
|
else echo "'$directory' is not a directory";
|
|
return $res;
|
|
}
|
|
|
|
|
|
$chapters=array();
|
|
function h1($str,$addchap=true)
|
|
{
|
|
global $chapters;
|
|
static $i=1;
|
|
if($addchap)
|
|
{
|
|
echo '""'."<a name=chap$i></a>".'""';
|
|
$chapters[$i]=$str;
|
|
$i++;
|
|
}
|
|
echo "\n=====$str:=====\n";
|
|
}
|
|
|
|
function h2($str)
|
|
{
|
|
echo "====$str:====\n";
|
|
}
|
|
|
|
function body($str)
|
|
{
|
|
echo $str."\n\n";
|
|
}
|
|
|
|
function intro($str)
|
|
{
|
|
$str=str_replace("{DATE}","Generated: ".date("Y-m-d H:i:s"),$str);
|
|
$str=str_replace("{VERSION}",getVersion(),$str);
|
|
echo $str;
|
|
}
|
|
|
|
$index=array();
|
|
function addToIndex($f)
|
|
{
|
|
static $i=0;
|
|
global $index;
|
|
|
|
$p=strpos($f,"raydium_");
|
|
if($p!==false)
|
|
$f=substr($f,$p);
|
|
else
|
|
$f="unsupported - $f";
|
|
|
|
$index[$i]=$f."|$i";
|
|
return $i++;
|
|
}
|
|
|
|
// Main
|
|
|
|
$id="";
|
|
$files=getHeaders(".");
|
|
//var_dump($files);
|
|
if($files==-1)
|
|
die("No header found");
|
|
|
|
unset($sorted);
|
|
for($i=0;$i<count($files);$i++)
|
|
{
|
|
$file=$files[$i];
|
|
$p=getPriority($file);
|
|
if($p==-1)
|
|
$p=999000+$i;
|
|
|
|
while(isset($sorted[$p]))
|
|
$p++;
|
|
$sorted[$p]=$file;
|
|
}
|
|
ksort($sorted);
|
|
$sorted=array_values($sorted);
|
|
//var_dump($sorted);
|
|
|
|
// Files are sorted, now
|
|
|
|
intro($intro);
|
|
|
|
for($i=0;$i<count($sorted);$i++)
|
|
{
|
|
$file=$sorted[$i];
|
|
$title=getTitle($file);
|
|
|
|
if($title==-1)
|
|
{
|
|
h1(($i+1)." no documentation for $file");
|
|
continue;
|
|
}
|
|
|
|
h1(($i+1)." $title");
|
|
|
|
$f=file($file);
|
|
$last=0;
|
|
$n=0;
|
|
while(($l=getTagLine("/**",$f,$last))!=-1)
|
|
{
|
|
$title=trim($f[$l-1]);
|
|
if($title=="")
|
|
$title="// unknown item";
|
|
|
|
// types:
|
|
// 1 - Comment (//)
|
|
// 2 - Macro (#)
|
|
// 3 - Code (...)
|
|
$type=3;
|
|
if($title[0]=="/")
|
|
{
|
|
$type=1;
|
|
$title=trim(substr($title,2));
|
|
}
|
|
|
|
if($title[0]=="#")
|
|
{
|
|
$type=2;
|
|
$pos=strpos($title,")");
|
|
if($pos)
|
|
{
|
|
$title=substr($title,0,$pos+1);
|
|
}
|
|
$title=trim(str_replace("#define ","",$title))." (macro)";
|
|
|
|
}
|
|
|
|
if($type==3)
|
|
{
|
|
if(substr($title,0,7)=="extern ")
|
|
$title=trim(substr($title,7));
|
|
if(substr($title,0,9)=="__rayapi ")
|
|
$title=trim(substr($title,9));
|
|
if($title[strlen($title)-1]==";")
|
|
$title=substr($title,0,-1);
|
|
$title=trim(str_replace("**","* *",$title));
|
|
}
|
|
|
|
if($type==2 || $type==3)
|
|
$id=addToIndex($title);
|
|
|
|
h2('""'."<a name=$id></a>".'""'.($i+1).".".($n+1)." $title");
|
|
|
|
$last=$l+1;
|
|
$end=getTagLine("**/",$f,$last);
|
|
if($end==-1)
|
|
die("expected '**/' (started line $l)");
|
|
|
|
unset($body);
|
|
/* for($j=$l+1;$j<$end;$j++)
|
|
{
|
|
$lj=trim($f[$j]);
|
|
if($lj=="")
|
|
$lj="\n\n";
|
|
else
|
|
$lj.=" ";
|
|
$body[]=$lj;
|
|
}
|
|
$str=implode("",$body);*/
|
|
for($j=$l+1;$j<$end;$j++)
|
|
{
|
|
$lj=trim($f[$j]);
|
|
$body[]=$lj;
|
|
}
|
|
$str=@implode("\n",$body);
|
|
body($str);
|
|
|
|
$last=$end+1;
|
|
$n++;
|
|
}
|
|
}
|
|
|
|
|
|
h1('""<a name=chapters></a>""Chapters',false);
|
|
foreach($chapters as $key => $val)
|
|
{
|
|
echo('====""'."<a href=$page#chap$key>$val</a>".'""====')."\n";
|
|
}
|
|
|
|
sort($index);
|
|
h1('""<a name=index></a>""Index');
|
|
for($i=0;$i<count($index);$i++)
|
|
{
|
|
$j=explode("|",$index[$i]);
|
|
$k=$j[0];
|
|
$l=$j[1];
|
|
echo '""'."<a href=$page#$l><tt>$k</tt></a>".'""'."\n";
|
|
}
|
|
|