2025-01-26 18:33:45 +01:00

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";
}