diff -r 000000000000 -r 84fdfb0344c9 docgen.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docgen.pl Sun Feb 01 21:28:57 2009 +0200 @@ -0,0 +1,81 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +my %docs; +my @tags; +my $inside; + +foreach my $file (@ARGV) { + if ( not open SOURCE, '<', $file ) { + print STDERR "Cannot open $file\n"; + next; + } + + my $chunk = 0; + + while () { + if ( $inside ) { + if ( not /^\/\/\// ) { + $inside = 0; + $chunk++; + } else { + push @{$docs{$file}[$chunk]}, substr ( $_, 4 ); + } + } else { + next if not /^\/\/\//; + + $inside = 1; + my $tag = substr $_, 4; + chomp $tag; + push @{$docs{$file}[$chunk]}, $tag; + # hack to allow twoword objects be written in text with spaces + # now it matches "lm message" instead of "lm message node" -.- + # and even if tag list will be reverse sorted by length, + # it will produce nested links... + # well, that all is now solved, but in not too impressive way.. + $tag =~ s/_/./g; + push @tags, $tag; + } + } + + close SOURCE; +} + +print <
+lua-loudmouth docs + +HEADER +; + +@tags = reverse sort { length $a <=> length $b } @tags; +# TODO preserve original order +foreach my $file ( sort keys %docs ) { + print "
"; + foreach my $chunk ( @{$docs{$file}} ) { + my $head = shift @$chunk; + my $tag = $head; + $tag =~ s/_/./g; + print "

$head

"; + foreach ( @$chunk ) { + s/^A: /Arguments: /; + s/^R: /Return values: /; + s/^V: /Values: /; + foreach my $tag ( @tags ) { + # TODO quotemeta required, but for now + # this bug is rather desired... + #s/\b$tag\b/$&<\/a>/g; + s/(.)\b($tag)\b/ if ( $1 eq '#' or $1 eq '>' ) { "$1$2" } else { "$1$2<\/a>" } /ge; + } + print $_; + } + print "

" + } + print "
"; +} + +print "" + +# The end