docgen.pl
author Mikael Berthe <mikael@lilotux.net>
Sun, 27 Mar 2011 22:03:30 +0200
changeset 113 3d4f0415c8f8
parent 72 d049c92d0809
permissions -rwxr-xr-x
Sync with new dev API
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
#! /usr/bin/perl
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
72
d049c92d0809 True print
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
     3
# Copyright 2009 Myhailo Danylenko
d049c92d0809 True print
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
     4
#
d049c92d0809 True print
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
     5
# This program is free software: you can redistribute it and/or modify
d049c92d0809 True print
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
     6
# it under the terms of the GNU General Public License as published by
d049c92d0809 True print
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
     7
# the Free Software Foundation, either version 2 of the License, or
d049c92d0809 True print
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
     8
# (at your option) any later version.
d049c92d0809 True print
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
     9
#
d049c92d0809 True print
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    10
# This program is distributed in the hope that it will be useful,
d049c92d0809 True print
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    11
# but WITHOUT ANY WARRANTY; without even the implied warranty of
d049c92d0809 True print
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
d049c92d0809 True print
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    13
# GNU General Public License for more details.
d049c92d0809 True print
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    14
#
d049c92d0809 True print
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    15
# You should have received a copy of the GNU General Public License
d049c92d0809 True print
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    16
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
d049c92d0809 True print
Myhailo Danylenko <isbear@ukrpost.net>
parents: 70
diff changeset
    17
1
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    18
use strict;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
use warnings;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
my %docs;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
my @tags;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
my $inside;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
my $harvest;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
my @values;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
foreach my $file (@ARGV) {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
	if ( not open SOURCE, '<', $file ) {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
		print STDERR "Cannot open $file\n";
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
		next;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
	}
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
	my $chunk = 0;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
	while (<SOURCE>) {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
		if ( $inside ) {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
			if ( not /^\/\/\// ) {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
				$inside = 0;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
				$chunk++;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
			} elsif ( /^\/\/\/ G:/ ) {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
				$inside = 0;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
				$harvest = 'V: ' . substr ( $_, 6 );
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
			} else {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
				push @{$docs{$file}[$chunk]}, substr ( $_, 4 );
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
			}
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
		} elsif ( $harvest ) {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
			if ( /\{\s*NULL.*\}/ ) {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
				push @{$docs{$file}[$chunk]}, $harvest . ' ' . join ( ', ', @values );
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
				$harvest = undef;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
				@values  = ();
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
				$chunk++;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
			} elsif ( /\{\s*"(.+)".*\}/ ) {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
				push @values, $1;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
			}
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
		} else {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
			next if not /^\/\/\//;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
			$inside = 1;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
			my $tag = substr $_, 4;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
			chomp $tag;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
			push @{$docs{$file}[$chunk]}, $tag;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
			# hack to allow twoword objects be written in text with spaces
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    63
			# now it matches "lm message" instead of "lm message node" -.-
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    64
			# and even if tag list will be reverse sorted by length,
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    65
			# it will produce nested links...
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    66
			# well, that all is now solved, but in not too impressive way..
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    67
			$tag =~ s/_/./g;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    68
			push @tags, $tag;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    69
		}
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    70
	}
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    71
	
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    72
	close SOURCE;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    73
}
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    74
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    75
print <<HEADER
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    76
<html>
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    77
<head><title>lua-loudmouth docs</title></head>
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    78
<body>
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    79
HEADER
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    80
;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    81
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    82
@tags = reverse sort { length $a <=> length $b } @tags;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    83
# TODO preserve original order
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    84
foreach my $file ( sort keys %docs ) {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    85
	print "<hr>";
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    86
	foreach my $chunk ( @{$docs{$file}} ) {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    87
		my $head = shift @$chunk;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    88
		my $tag  = $head;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    89
		my $list = undef;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    90
		$tag =~ s/_/./g;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    91
		print "<a name='$tag'></a><h2>$head</h2><p>";
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    92
		foreach ( @$chunk ) {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    93
			s/^A: /<br\/>Arguments: /;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    94
			s/^R: /<br\/>Return values: /;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    95
			s/^V: /<br\/>Values: /;
70
e43e386c8a33 Vcard-temp avatar
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1
diff changeset
    96
			s/^\[ /<br\/><pre>/;
e43e386c8a33 Vcard-temp avatar
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1
diff changeset
    97
			s/^\]/<\/pre><br\/>/;
1
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    98
			if ( $list ) {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    99
				if ( /^\* / ) {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   100
					s/^\* /<\/li><li>/;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   101
				} else {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   102
					s/^/<\/li><\/ul> /;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   103
					$list = undef;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   104
				}
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   105
			} elsif ( /^\* / ) {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   106
				s/^\* /<ul><li>/;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   107
				$list = 1;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   108
			}
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   109
			foreach my $tag ( @tags ) {
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   110
				# TODO quotemeta required, but for now
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   111
				# this bug is rather desired...
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   112
				#s/\b$tag\b/<a href="#$tag">$&<\/a>/g;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   113
				s/(.)\b($tag)\b/ if ( $1 eq '#' or $1 eq '>' ) { "$1$2" } else { "$1<a href='#$tag'>$2<\/a>" } /ge;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   114
			}
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   115
			print $_;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   116
		}
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   117
		print "</li></ul>" if $list;
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   118
		print "</p>"
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   119
	}
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   120
	print "<hr>";
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   121
}
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   122
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   123
print "</body></html>"
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   124
7d87d323c889 Fixes and improvement
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   125
# The end