author | Myhailo Danylenko <isbear@ukrpost.net> |
Tue, 12 Jul 2011 07:28:06 +0300 | |
changeset 40 | 33ea13cef185 |
parent 23 | 13f03e604c8a |
child 41 | 3f6a76c8fbc8 |
permissions | -rwxr-xr-x |
0 | 1 |
#! /usr/bin/perl |
2 |
||
40
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
3 |
# Copyright 2009, 2011 Myhailo Danylenko |
23 | 4 |
# |
5 |
# This program is free software: you can redistribute it and/or modify |
|
6 |
# it under the terms of the GNU General Public License as published by |
|
7 |
# the Free Software Foundation, either version 2 of the License, or |
|
8 |
# (at your option) any later version. |
|
9 |
# |
|
10 |
# This program is distributed in the hope that it will be useful, |
|
11 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
13 |
# GNU General Public License for more details. |
|
14 |
# |
|
15 |
# You should have received a copy of the GNU General Public License |
|
16 |
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
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 | 28 |
use strict; |
29 |
use warnings; |
|
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 | 71 |
my %docs; |
72 |
my @tags; |
|
73 |
my $inside; |
|
4 | 74 |
my $harvest; |
75 |
my @values; |
|
0 | 76 |
|
77 |
foreach my $file (@ARGV) { |
|
78 |
if ( not open SOURCE, '<', $file ) { |
|
79 |
print STDERR "Cannot open $file\n"; |
|
80 |
next; |
|
81 |
} |
|
82 |
||
83 |
my $chunk = 0; |
|
84 |
||
85 |
while (<SOURCE>) { |
|
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 | 93 |
$inside = 0; |
94 |
$chunk++; |
|
95 |
} |
|
4 | 96 |
} elsif ( $harvest ) { |
40
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
97 |
if ( /\{\s*NULL.*\}/o ) { |
4 | 98 |
push @{$docs{$file}[$chunk]}, $harvest . ' ' . join ( ', ', @values ); |
99 |
$harvest = undef; |
|
100 |
@values = (); |
|
101 |
$chunk++; |
|
40
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
102 |
} elsif ( /\{\s*"(.+?)".*\}/o ) { |
4 | 103 |
push @values, $1; |
104 |
} |
|
40
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
105 |
} elsif ( /^$opt_p\s*(.*?)\s*$/o ) { |
0 | 106 |
|
40
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
107 |
my $tag = $1; |
0 | 108 |
$inside = 1; |
109 |
push @{$docs{$file}[$chunk]}, $tag; |
|
110 |
# hack to allow twoword objects be written in text with spaces |
|
111 |
# now it matches "lm message" instead of "lm message node" -.- |
|
112 |
# and even if tag list will be reverse sorted by length, |
|
113 |
# it will produce nested links... |
|
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 | 116 |
push @tags, $tag; |
117 |
} |
|
118 |
} |
|
119 |
||
120 |
close SOURCE; |
|
121 |
} |
|
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 | 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 | 139 |
<body> |
140 |
HEADER |
|
141 |
; |
|
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' ) { |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
186 |
|
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
187 |
foreach my $file ( sort keys %docs ) { |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
188 |
print OUTPUT "\n\n- - -"; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
189 |
foreach my $chunk ( @{$docs{$file}} ) { |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
190 |
my $head = shift @$chunk; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
191 |
my $tag = $head; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
192 |
my $code = 0; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
193 |
my $list = 0; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
194 |
$tag =~ s/[_\s]+/./go; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
195 |
print OUTPUT qq(\n\n<a name="$tag"></a>\n### $head); |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
196 |
foreach (@$chunk) { |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
197 |
if ( $code ) { |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
198 |
if ( /^\]\s*(.*?)\s*$/o ) { |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
199 |
print OUTPUT "\n\n$1 "; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
200 |
$code = 0; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
201 |
} else { |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
202 |
print OUTPUT "\n\t$_"; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
203 |
} |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
204 |
next; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
205 |
} elsif ( /^\[\s*(.*?)\s*$/o ) { |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
206 |
$code = 1; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
207 |
print OUTPUT "\n\n\t$1"; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
208 |
next; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
209 |
} elsif ( $list ) { |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
210 |
if ( not /^\* /o ) { |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
211 |
$list = 0; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
212 |
print OUTPUT "\n"; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
213 |
} |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
214 |
} elsif ( /^\* /o ) { |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
215 |
$list = 1; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
216 |
print OUTPUT "\n"; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
217 |
} |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
218 |
|
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
219 |
if ( s/^A: (.*)$/ \n**Arguments:** $1 /o ) { |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
220 |
} elsif ( s/^R: (.*)$/ \n**Return values:** $1 /o ) { |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
221 |
} elsif ( s/^V: (.*)$/ \n**Values:** $1 /o ) { |
4 | 222 |
} else { |
40
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
223 |
s/^/\n/o; |
4 | 224 |
} |
40
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
225 |
foreach my $tag ( @tags ) { |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
226 |
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
|
227 |
} |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
228 |
print OUTPUT "$_"; |
4 | 229 |
} |
40
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
230 |
}; |
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
231 |
print OUTPUT "\n\n- - -"; |
0 | 232 |
} |
40
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
233 |
|
0 | 234 |
} |
235 |
||
40
33ea13cef185
Improve docgen script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
23
diff
changeset
|
236 |
close OUTPUT; |
0 | 237 |
|
238 |
# The end |