docgen.pl
author Myhailo Danylenko <isbear@ukrpost.net>
Wed, 20 Jul 2011 14:35:13 +0300
changeset 45 1fcec4b012a7
parent 41 3f6a76c8fbc8
permissions -rwxr-xr-x
Fix warnings
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
#! /usr/bin/perl
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
     3
# Copyright 2009, 2011 Myhailo Danylenko
23
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 17
diff changeset
     4
#
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 17
diff changeset
     5
# This program is free software: you can redistribute it and/or modify
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 17
diff changeset
     6
# it under the terms of the GNU General Public License as published by
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 17
diff changeset
     7
# the Free Software Foundation, either version 2 of the License, or
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 17
diff changeset
     8
# (at your option) any later version.
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 17
diff changeset
     9
#
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 17
diff changeset
    10
# This program is distributed in the hope that it will be useful,
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 17
diff changeset
    11
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 17
diff changeset
    12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 17
diff changeset
    13
# GNU General Public License for more details.
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 17
diff changeset
    14
#
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 17
diff changeset
    15
# You should have received a copy of the GNU General Public License
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 17
diff changeset
    16
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
13f03e604c8a License notes
Myhailo Danylenko <isbear@ukrpost.net>
parents: 17
diff changeset
    17
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    18
=head1
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    19
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    20
Reads source and generates documentation, embedded in comments
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    21
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    22
=head1 SYNTAX
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    23
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    24
docgen.pl [B<-o> I<outfile>] [B<-t> I<title>] [B<-f> I<format>] F<infile> [F<infile>] ...
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    25
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    26
=cut
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    27
0
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
use strict;
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
use warnings;
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    31
use Pod::Usage;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    32
use Getopt::Std;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    33
$Getopt::Std::STANDARD_HELP_VERSION = 1;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    34
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    35
our $VERSION = '0.0.3';
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    36
our sub HELP_MESSAGE {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    37
	pod2usage (-verbose => 2,
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    38
	           -noperldoc => 1);
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    39
}
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    41
=head1 OPTIONS
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    42
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    43
B<-o> F<outfile>
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    44
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    45
Output file (if not specified - stdout).
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    46
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    47
B<-t> I<title>
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    48
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    49
Title for documentation html page
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    50
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    51
B<-f> [I<html>|I<mdwn>]
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    52
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    53
Output type: html (default) or markdown.
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    54
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    55
B<-p> I<prefix>
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    56
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    57
Prefix to search, by default c-like '///'
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    58
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    59
B<-c> F<css-link>
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    60
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    61
Url to css file to include in html header.
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    62
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    63
=cut
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    64
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    65
our ( $opt_o, $opt_t, $opt_f, $opt_p, $opt_c )
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    66
  = ( undef,  "Docs", 'html', '///',  undef  );
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    67
getopts ( 'o:t:f:p:c:' );
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    68
$opt_c = $opt_c ? qq(\n<link rel="stylesheet" href="$opt_c" type="text/css" />) : "";
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    69
my $prefix_rx = quotemeta $opt_p;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    70
0
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    71
my %docs;
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    72
my @tags;
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    73
my $inside;
4
5770be2d5f3f Documentation updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
    74
my $harvest;
5770be2d5f3f Documentation updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
    75
my @values;
0
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    76
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    77
foreach my $file (@ARGV) {
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    78
	if ( not open SOURCE, '<', $file ) {
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    79
		print STDERR "Cannot open $file\n";
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    80
		next;
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    81
	}
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    82
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    83
	my $chunk = 0;
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    84
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    85
	while (<SOURCE>) {
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    86
		if ( $inside ) {
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    87
			if ( /^$prefix_rx\s*G:\s*(.*?)\s*$/o ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    88
				$inside  = 0;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    89
				$harvest = "V: $1";
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    90
			} elsif ( /^$prefix_rx\s?(.*?)\s*$/o ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    91
				push @{$docs{$file}[$chunk]}, $1;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    92
			} else {
0
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    93
				$inside = 0;
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    94
				$chunk++;
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    95
			}
4
5770be2d5f3f Documentation updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
    96
		} elsif ( $harvest ) {
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
    97
			if ( /\{\s*NULL.*\}/o ) {
4
5770be2d5f3f Documentation updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
    98
				push @{$docs{$file}[$chunk]}, $harvest . ' ' . join ( ', ', @values );
5770be2d5f3f Documentation updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
    99
				$harvest = undef;
5770be2d5f3f Documentation updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
   100
				@values  = ();
5770be2d5f3f Documentation updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
   101
				$chunk++;
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   102
			} elsif ( /\{\s*"(.+?)".*\}/o ) {
4
5770be2d5f3f Documentation updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
   103
				push @values, $1;
5770be2d5f3f Documentation updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
   104
			}
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   105
		} elsif ( /^$opt_p\s*(.*?)\s*$/o ) {
0
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   106
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   107
			my $tag = $1;
0
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   108
			$inside = 1;
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   109
			push @{$docs{$file}[$chunk]}, $tag;
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   110
			# hack to allow twoword objects be written in text with spaces
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   111
			# now it matches "lm message" instead of "lm message node" -.-
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   112
			# and even if tag list will be reverse sorted by length,
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   113
			# it will produce nested links...
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   114
			# well, that all is now solved, but in not too impressive way..
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   115
			$tag =~ s/[_\s]+/./go;
0
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   116
			push @tags, $tag;
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   117
		}
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   118
	}
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   119
	
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   120
	close SOURCE;
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   121
}
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   122
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   123
@tags = reverse sort { length $a <=> length $b } @tags;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   124
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   125
if ( $opt_o ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   126
	open OUTPUT, ">", "$opt_o"
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   127
		or die "Cannot open destination file '$opt_o': $!";
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   128
} else {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   129
	*OUTPUT = *STDOUT;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   130
}
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   131
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   132
if ( $opt_f eq 'html' ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   133
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   134
	print OUTPUT <<HEADER
0
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   135
<html>
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   136
<head>
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   137
<title>$opt_t</title>$opt_c
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   138
</head>
0
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   139
<body>
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   140
HEADER
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   141
;
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   142
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   143
	# TODO preserve original order
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   144
	foreach my $file ( sort keys %docs ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   145
		print OUTPUT "<hr>\n";
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   146
		foreach my $chunk ( @{$docs{$file}} ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   147
			my $head = shift @$chunk;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   148
			my $tag  = $head;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   149
			my $list = undef;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   150
			$tag =~ s/[_\s]+/./go;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   151
			print OUTPUT "<a name='$tag'></a><h2>$head</h2>\n<p>";
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   152
			foreach ( @$chunk ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   153
				s/^A: /<br\/><b>Arguments:<\/b> /o;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   154
				s/^R: /<br\/><b>Return values:<\/b> /o;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   155
				s/^V: /<br\/><b>Values:<\/b> /o;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   156
				s/^\[/<br\/><pre>/o;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   157
				s/^\]/<\/pre><br\/>/o;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   158
				if ( $list ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   159
					if ( /^\* /o ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   160
						s/^\* /<\/li>\n<li>/o;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   161
					} else {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   162
						s/^/<\/li>\n<\/ul> /o;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   163
						$list = undef;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   164
					}
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   165
				} elsif ( /^\* /o ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   166
					s/^\* /<ul>\n<li>/o;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   167
					$list = 1;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   168
				}
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   169
				foreach my $tag ( @tags ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   170
					# TODO quotemeta required, but for now
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   171
					# this bug is rather desired...
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   172
					#s/\b$tag\b/<a href="#$tag">$&<\/a>/g;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   173
					s/(.)\b($tag)\b/ if ( $1 eq '#' or $1 eq '>' ) { "$1$2" } else { "$1<a href='#$tag'>$2<\/a>" } /ge;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   174
				}
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   175
				print OUTPUT "$_\n";
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   176
			}
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   177
			print OUTPUT "</li>\n</ul>" if $list;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   178
			print OUTPUT "</p>\n";
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   179
		}
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   180
		print OUTPUT "<hr>\n";
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   181
	}
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   182
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   183
	print OUTPUT "</body>\n</html>";
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   184
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   185
} elsif ( $opt_f eq 'mdwn' ) {
41
3f6a76c8fbc8 Docgen-mdwn use title and toc
Myhailo Danylenko <isbear@ukrpost.net>
parents: 40
diff changeset
   186
	
3f6a76c8fbc8 Docgen-mdwn use title and toc
Myhailo Danylenko <isbear@ukrpost.net>
parents: 40
diff changeset
   187
	print OUTPUT <<HEADER
3f6a76c8fbc8 Docgen-mdwn use title and toc
Myhailo Danylenko <isbear@ukrpost.net>
parents: 40
diff changeset
   188
3f6a76c8fbc8 Docgen-mdwn use title and toc
Myhailo Danylenko <isbear@ukrpost.net>
parents: 40
diff changeset
   189
[[!meta title="$opt_t"]]
3f6a76c8fbc8 Docgen-mdwn use title and toc
Myhailo Danylenko <isbear@ukrpost.net>
parents: 40
diff changeset
   190
3f6a76c8fbc8 Docgen-mdwn use title and toc
Myhailo Danylenko <isbear@ukrpost.net>
parents: 40
diff changeset
   191
[[!toc]]
3f6a76c8fbc8 Docgen-mdwn use title and toc
Myhailo Danylenko <isbear@ukrpost.net>
parents: 40
diff changeset
   192
HEADER
3f6a76c8fbc8 Docgen-mdwn use title and toc
Myhailo Danylenko <isbear@ukrpost.net>
parents: 40
diff changeset
   193
;
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   194
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   195
	foreach my $file ( sort keys %docs ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   196
		print OUTPUT "\n\n- - -";
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   197
		foreach my $chunk ( @{$docs{$file}} ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   198
			my $head = shift @$chunk;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   199
			my $tag  = $head;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   200
			my $code = 0;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   201
			my $list = 0;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   202
			$tag =~ s/[_\s]+/./go;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   203
			print OUTPUT qq(\n\n<a name="$tag"></a>\n### $head);
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   204
			foreach (@$chunk) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   205
				if ( $code ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   206
					if ( /^\]\s*(.*?)\s*$/o ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   207
						print OUTPUT "\n\n$1 ";
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   208
						$code = 0;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   209
					} else {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   210
						print OUTPUT "\n\t$_";
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   211
					}
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   212
					next;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   213
				} elsif ( /^\[\s*(.*?)\s*$/o ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   214
					$code = 1;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   215
					print OUTPUT "\n\n\t$1";
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   216
					next;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   217
				} elsif ( $list ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   218
					if ( not /^\* /o ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   219
						$list = 0;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   220
						print OUTPUT "\n";
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   221
					}
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   222
				} elsif ( /^\* /o ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   223
					$list = 1;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   224
					print OUTPUT "\n";
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   225
				}
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   226
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   227
				if ( s/^A: (.*)$/  \n**Arguments:** $1  /o ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   228
				} elsif ( s/^R: (.*)$/  \n**Return values:** $1  /o ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   229
				} elsif ( s/^V: (.*)$/  \n**Values:** $1  /o ) {
4
5770be2d5f3f Documentation updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
   230
				} else {
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   231
					s/^/\n/o;
4
5770be2d5f3f Documentation updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
   232
				}
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   233
				foreach my $tag ( @tags ) {
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   234
					s/(.)\b($tag)\b/ if ( $1 eq '#' or $1 eq '[' ) { "$1$2" } else { "$1\[$2\](#$tag)" } /ge;
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   235
				}
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   236
				print OUTPUT "$_";
4
5770be2d5f3f Documentation updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 0
diff changeset
   237
			}
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   238
		};
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   239
		print OUTPUT "\n\n- - -";
0
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   240
	}
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   241
	
0
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   242
}
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   243
40
33ea13cef185 Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents: 23
diff changeset
   244
close OUTPUT;
0
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   245
84fdfb0344c9 Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   246
# The end