]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/ntp/scripts/deprecated/html2man.in
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / ntp / scripts / deprecated / html2man.in
1 #! @PATH_PERL@ -w
2 #
3 # html2man: Converts the NTP HTML documentation to man page format
4 #
5 # This file require the Perl HTML::TokeParser module:
6 # http://search.cpan.org/search?module=HTML::TokeParser
7 #
8 # Depending on where this is run from, you might need to modify $MANDIR below.
9 #
10 # Hacked together by Peter Boettcher <boettcher@ll.mit.edu>
11 # Last modified: <Mon Jan 28 17:24:38 2002 by pwb>
12
13 require HTML::TokeParser;
14
15 # use strict;           # I can dream...
16
17 $MANDIR = "./man";
18
19 # HTML files to convert.  Also include per-file info here: 
20 #   name of man page, man section, 'see also' section
21 %manfiles = (
22              'ntpd' => ['ntpd', @NTPD_MS@, 'ntp.conf(5), ntpq(@NTPQ_MS@), ntpdc(@NTPDC_MS@)'],
23              'ntpq' => ['ntpq', @NTPQ_MS@, 'ntp_decode(5), ntpd(@NTPD_MS@), ntpdc(@NTPDC_MS@)'],
24              'ntpdate' => ['ntpdate', @NTPDATE_MS@, 'ntpd(@NTPD_MS@)'],
25              'ntpdc' => ['ntpdc', @NTPDC_MS@, 'ntpd(@NTPD_MS@)'],
26              'ntptime' => ['ntptime', @NTPTIME_MS@, 'ntpd(@NTPD_MS@), ntpdate(@NTPDATE_MS@)'],
27              'ntptrace' => ['ntptrace', @NTPTRACE_MS@, 'ntpd(@NTPD_MS@)'],
28              'ntp-wait' => ['ntp-wait', @NTP_WAIT_MS@, 'ntpd(@NTPD_MS@)'],
29              'keygen' => ['ntp-keygen', @NTP_KEYGEN_MS@, 'ntpd(@NTPD_MS@), ntp_auth(5)'],
30              'tickadj' => ['tickadj', @TICKADJ_MS@, 'ntpd(@NTPD_MS@)'],
31              'confopt' => ['ntp.conf', 5, 'ntpd(@NTPD_MS@), ntp_auth(5), ntp_mon(5), ntp_acc(5), ntp_clock(5), ntp_misc(5)'],
32              'authopt' => ['ntp_auth', 5, 'ntp.conf(5), ntpd(@NTPD_MS@)'],
33              'monopt' => ['ntp_mon', 5, 'ntp.conf(5), ntp_decode(5)'],
34              'accopt' => ['ntp_acc', 5, 'ntp.conf(5)'],
35              'clockopt' => ['ntp_clock', 5, 'ntp.conf(5)'],
36              'decode' => ['ntp_decode', 5, 'ntpq(@NTPQ_MS@), ntp_mon(5)'],
37              'miscopt' => ['ntp_misc', 5, 'ntp.conf(5)']);
38
39 %table_headers = (
40     'ntpd' => 'l l l l.',
41     'ntpq' => 'l l.',
42     'monopt' => 'l l l.',
43     'decode' => 'l l l l.',
44     'authopt' => 'c c c c c c.'
45 );
46
47 # Disclaimer to go in SEE ALSO section of the man page
48 $seealso_disclaimer = "The official HTML documentation.\n\n" .
49     "This file was automatically generated from HTML source.\n";
50
51 mkdir $MANDIR, 0777;
52 mkdir "$MANDIR/man8", 0777;
53 mkdir "$MANDIR/man5", 0777;
54
55 # Do the actual processing
56 foreach $file (keys %manfiles) {
57     process($file);
58 }
59 # End of main function
60
61
62
63 # Do the real work
64 sub process {
65     my($filename) = @_;
66     $fileinfo = $manfiles{$filename};
67
68     $p = HTML::TokeParser->new("$filename.html") || die "Can't open $filename.html: $!";
69     $fileout = "$MANDIR/man$fileinfo->[1]/$fileinfo->[0].$fileinfo->[1]";
70     open(MANOUT, ">$fileout")
71         || die "Can't open: $!";
72
73     $p->get_tag("title");
74     $name = $p->get_text("/title");
75     $p->get_tag("hr");          # Skip past image and quote, hopefully
76
77     # Setup man header
78     print MANOUT ".TH " . $fileinfo->[0] . " " . $fileinfo->[1] .  "\n";
79     print MANOUT ".SH NAME\n";
80     $pat = $fileinfo->[0];
81     if ($name =~ /$pat/) {
82     } else {
83         # Add the manpage name, if not in the HTML title already
84         print MANOUT "$fileinfo->[0] - ";
85     }
86     print MANOUT "$name\n.SH \\ \n\n";
87
88     @fontstack = ();
89     $deflevel = 0;
90     $pre = 0;
91     $ignore = 0;
92     $first_td = 1;
93     # Now start scanning.  We basically print everything after translating some tags.
94     # $token->[0] has "T", "S", "E" for Text, Start, End
95     # $token->[1] has the tag name, or text (for "T" case)
96     #  Theres lots more in the world of tokens, but who cares?
97     while (my $token = $p->get_token) {
98         if($token->[0] eq "T") {
99             my $text = $token->[1];
100             if (!$pre) {
101                 if($tag) {
102                     $text =~ s/^[\n\t ]*//;
103                 }
104                 $text =~ s/^[\n\t ][\n\t ]+$//;
105                 $text =~ s/[\n\t ]+/ /g;
106                 $text =~ s/&nbsp\;/ /g;
107                 $text =~ s/&gt\;/>/g;
108                 $text =~ s/&lt\;/</g;
109                 $text =~ s/&quot\;/"/g;
110                 $text =~ s/&amp\;/&/g;
111                 $text =~ s/^\./\\[char46]/;
112             }
113             print MANOUT "$text";
114             $tag = 0;
115         }
116         if($token->[0] eq "S") {
117             if($token->[1] eq "h4") {
118                 my $text = uc($p->get_trimmed_text("/h4"));
119                 # ignore these sections in ntpd.html
120                 if ($filename eq "ntpd" &&
121                     ($text eq "CONFIGURATION OPTIONS")) {
122                         $ignore = 1;
123                         close(MANOUT);
124                         open(MANOUT, ">/dev/null");
125                 } elsif ($ignore) {
126                     $ignore = 0;
127                     close(MANOUT);
128                     open(MANOUT, ">>$fileout");
129                 }
130                 print MANOUT "\n\n.SH $text\n";
131             }
132             if($token->[1] eq "tt") {
133                 push @fontstack, "tt";
134                 print MANOUT "\\fB";
135             }
136             if($token->[1] eq "i") {
137                 push @fontstack, "i";
138                 print MANOUT "\\fI";
139             }
140             if($token->[1] eq "address") {
141                 my $text = $p->get_trimmed_text("/address");
142                 print MANOUT "\n.SH AUTHOR\n$text\n";
143             }
144             if($token->[1] eq "dt" || $token->[1] eq "br" && $deflevel > 0) {
145                 print MANOUT "\n.TP 8\n";
146                 $tag = 1;
147             }
148             if($token->[1] eq "dd") {
149                 print MANOUT "\n";
150                 $tag = 1;
151             }
152             if($token->[1] eq "dl") {
153                 $deflevel+=1;
154                 if ($deflevel > 0) {
155                     print MANOUT "\n.RS ", $deflevel > 1 ? 8 : 0;
156                 }
157             }
158             if($token->[1] eq "p") {
159                 print MANOUT "\n";
160             }
161             if($token->[1] eq "pre") {
162                 print MANOUT "\n.nf";
163                 $pre = 1;
164             }
165             if($token->[1] eq "table") {
166                 print MANOUT "\n.TS\n";
167                 print MANOUT "expand allbox tab(%);\n";
168                 print MANOUT $table_headers{$filename};
169                 print MANOUT "\n";
170             }
171             if($token->[1] eq "td") {
172                 if ($first_td == 0) {
173                     print MANOUT " % ";
174                 }
175                 $first_td = 0;
176             }
177         }
178         elsif($token->[0] eq "E") {
179             if($token->[1] eq "h4") {
180                 $tag = 1;
181             }
182             if($token->[1] eq "tt") {
183                 $f = pop @fontstack;
184                 if($f ne "tt") {
185                     warn "Oops, mismatched font!  Trying to continue\n";
186                 }
187                 if ($#fontstack < 0) { $fontswitch = "\\fR"; }
188                 elsif ($fontstack[$#fontstack] eq "tt") { $fontswitch = "\\fB"; }
189                 else { $fontswitch = "\\fI"; }
190                 print MANOUT "$fontswitch";
191             }
192             if($token->[1] eq "i") {
193                 $f = pop @fontstack;
194                 if($f ne "i") {
195                     warn "Oops, mismatched font!  Trying to continue\n";
196                 }
197                 if ($#fontstack < 0) { $fontswitch = "\\fR"; }
198                 elsif ($fontstack[$#fontstack] eq "tt") { $fontswitch = "\\fB"; }
199                 else { $fontswitch = "\\fI"; }
200                 print MANOUT "$fontswitch";
201             }
202             if($token->[1] eq "dl") {
203                 if ($deflevel > 0) {
204                     print MANOUT "\n.RE";
205                 }
206                 print MANOUT "\n";
207                 $deflevel-=1;
208             }
209             if($token->[1] eq "p") {
210                 print MANOUT "\n";
211                 $tag = 1;
212             }
213             if($token->[1] eq "pre") {
214                 print MANOUT "\n.fi";
215                 $pre = 0;
216             }
217             if($token->[1] eq "table") {
218                 print MANOUT ".TE\n";
219             }
220             if($token->[1] eq "tr") {
221                 print MANOUT "\n";
222                 $first_td = 1;
223             }
224         }
225     }
226     if ($ignore) {
227         close(MANOUT);
228         open(MANOUT, ">>$fileout");
229     }
230     print MANOUT "\n.SH SEE ALSO\n\n";
231     print MANOUT "$fileinfo->[2]\n\n";
232     print MANOUT "$seealso_disclaimer\n";
233     close(MANOUT);
234 }