diff --git a/doc/index.html b/doc/index.html index e07525e..d11c2fe 100644 --- a/doc/index.html +++ b/doc/index.html @@ -5,22 +5,99 @@

Milsko GUI Toolkit Documentation

-
-

Mw/Button.h

+
+

Mw/Button.h

Button widget.

-
- MWDECL MwClass MwButtonClass; -
+
+
MWDECL MwClass MwButtonClass;
Button class.
-

-

Mw/Core.h

+

Mw/Core.h

Core.

+
+
#define MwDispatch(x, y)
+
+ Dispatches a handler of widget class. +
+
+ warning +
+
+ Used internally. +
+
+ Parameter x +
+
+ Widget. +
+
+ Parameter y +
+
+ Handler name. +
+
+
MWDECL MwWidget MwCreateWidget (
+	MwClass widget_class,
+	const char* name,
+	MwWidget parent,
+	int x,
+	int y,
+	unsigned int width,
+	unsigned int height
+);
+
+ Creates a widget. +
+
+ Parameter widget_class +
+
+ Widget class. +
+
+ Parameter name +
+
+ Widget name. +
+
+ Parameter parent +
+
+ Parent widget or NULL. +
+
+ Parameter x +
+
+ X. +
+
+ Parameter y +
+
+ Y. +
+
+ Parameter width +
+
+ Width. +
+
+ Parameter height +
+
+ Height. +
+
diff --git a/include/Mw/Core.h b/include/Mw/Core.h index 1a1cfba..2d94e17 100644 --- a/include/Mw/Core.h +++ b/include/Mw/Core.h @@ -9,6 +9,12 @@ #include #include +/*! + * %warning Used internally + * %brief Dispatches a handler of widget class + * %param x Widget + * %param y Handler name + */ #define MwDispatch(x, y) \ if(x->widget_class != NULL && x->widget_class->y != NULL) x->widget_class->y(x) @@ -18,6 +24,16 @@ extern "C" { #endif +/*! + * %brief Creates a widget + * %param widget_class Widget class + * %param name Widget name + * %param parent Parent widget or `NULL` + * %param x X + * %param y Y + * %param width Width + * %param height Height + */ MWDECL MwWidget MwCreateWidget(MwClass widget_class, const char* name, MwWidget parent, int x, int y, unsigned int width, unsigned int height); MWDECL MwWidget MwVaCreateWidget(MwClass widget_class, const char* name, MwWidget parent, int x, int y, unsigned int width, unsigned int height, ...); MWDECL MwWidget MwVaListCreateWidget(MwClass widget_class, const char* name, MwWidget parent, int x, int y, unsigned int width, unsigned int height, va_list va); diff --git a/tools/doc.pl b/tools/doc.pl index cadecc6..9487f6c 100755 --- a/tools/doc.pl +++ b/tools/doc.pl @@ -6,10 +6,36 @@ 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; @@ -31,30 +57,45 @@ sub scan_dir { 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 =~ s/([^\.])$/\1./g; + $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]*(?:;|\{.+)[ \t]*$//g; + $l =~ s/[ \t]*\\$//g; + $l =~ s/[ \t]*(?:;|\{.+)[ \t]*$/;/g; + if(!($l =~ /^#/)){ + $l =~ s/\(([^\)]+)\)/arguments($1)/ge; + } - out("
"); - out(" $l;"); - out("
"); + out("
$l
"); } out("<$para>"); out(" $brief"); @@ -66,18 +107,36 @@ sub scan_dir { out(" \"$note\""); out(""); out("
"); - out(" $kv{$note}"); + out(" " . sentence($kv{$note})); out("
"); } } - if(!$file){ - 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; @@ -85,12 +144,17 @@ sub scan_dir { $kv{$1} = $2; if($1 eq "file"){ if(!$has_file){ - out("
"); - out("

$2

"); + out("

$2

"); } $file = 1; $has_file = 1; + }elsif($1 eq "param"){ + my $p = $2; + $p =~ /^([^ ]+)(?:[ \t]+(.+))?$/; + + $param{$1} = $2; + push(@paramlist, $1); } } } @@ -105,6 +169,7 @@ out(" $title"); out(" "); out(" "); out("

$title

"); +out("
"); foreach my $f (@pathlist){ scan_dir($f, $f);