#!/usr/bin/env perl
# $Id$
our $html = "";
our $title = "Milsko GUI Toolkit Documentation";
our @pathlist = ("include");
our @notes = ("warning", "unsure", "note");
sub sentence {
my $str = $_[0];
$str =~ s/([^\.])$/\1./g;
$str =~ s/`([^`]+)`/\1<\/code>/g;
return $str;
}
sub out {
$html = $html . "$_[0]\n";
}
sub arguments {
my ($args) = @_;
my $out = "";
my @arglist = split(/[ \t]*,[ \t]*/, $args);
$out = $out . " (\n";
foreach my $str (@arglist){
$out = $out . "\t$str";
if($str eq $arglist[0+@arglist - 1]){
$out = $out . "\n";
}else{
$out = $out . ",\n";
}
}
$out = $out . ")";
return $out;
}
sub scan_dir {
my ($first, $path) = @_;
$path =~ s/\/+$//g;
if(opendir(my $dh, $path)){
print(STDERR "Scanning $path\n");
my @paths = sort(readdir($dh));
foreach my $p (@paths){
if($p eq '.' || $p eq '..'){
next;
}
scan_dir($first, $path . "/" . $p);
}
closedir($dh);
}else{
my $spaces = "";
my $in = 0;
my $out = 0;
my $file = 0;
my $has_file = 0;
my %kv = ();
my %param = ();
my @paramlist = ();
print(STDERR "$path is a file\n");
open(IN, "<", "$path");
while(my $l = ){
my $l2 = $l;
$l =~ s/[\r\n]+$//g;
$l2 =~ s/[\r\n \t]+//g;
if(length($l2) == 0){
next;
}
if($out){
my $para = "p";
my $brief = $kv{brief} or "";
$brief = sentence($brief);
$out = 0;
if(!$has_file){
print(STDERR "Warning: missing comment with %file, ignoring\n");
next;
}
if(!defined($kv{brief})){
print(STDERR "Warning: comment missing %brief, ignoring\n");
next;
}
if(!$file && defined($kv{brief})){
$para = "dd";
$l =~ s/[ \t]*\\$//g;
$l =~ s/[ \t]*(?:;|\{.+)[ \t]*$/;/g;
if(!($l =~ /^#/)){
$l =~ s/\(([^\)]+)\)/arguments($1)/ge;
}
out("$l
");
}
out("<$para>");
out(" $brief");
out("$para>");
foreach my $note (@notes){
if(defined($kv{$note})){
out("");
out("
");
out("");
out("");
out(" " . sentence($kv{$note}));
out("");
}
}
foreach my $p (@paramlist){
out("");
out(" Parameter $p");
out("");
out("");
out(" " . sentence($param{$p}));
out("");
}
if(defined($kv{return})){
out("");
out(" Returns");
out("");
out("");
out(" " . sentence($kv{return}));
out("");
}
out("
");
}elsif($l =~ /^([ \t]*)\/\*\!/){
$spaces = $1;
$in = 1;
$file = 0;
%kv = ();
%param = ();
@paramlist = ();
}elsif($in && ($l =~ /^$spaces \*\//)){
$in = 0;
$out = 1;
}elsif($in && ($l =~ /^$spaces \*[ \t]+%([^ ]+)(?:[ \t]+(.+))?$/)){
$kv{$1} = $2;
if($1 eq "file"){
if(!$has_file){
out("$2
");
}
$file = 1;
$has_file = 1;
}elsif($1 eq "param"){
my $p = $2;
$p =~ /^([^ ]+)(?:[ \t]+(.+))?$/;
$param{$1} = $2;
push(@paramlist, $1);
}
}
}
close(IN);
}
}
out("");
out(" ");
out(" ");
out(" $title");
out(" ");
out(" ");
out(" $title
");
out("
");
foreach my $f (@pathlist){
scan_dir($f, $f);
}
out(" ");
out("");
print($html);