Annotation of embedaddon/ntp/scripts/html2man.in, revision 1.1.1.1

1.1       misho       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', 8, 'ntp.conf(5), ntpq(8), ntpdc(8)'],
                     23:             'ntpq' => ['ntpq', 8, 'ntp_decode(5), ntpd(8), ntpdc(8)'],
                     24:             'ntpdate' => ['ntpdate', 8, 'ntpd(8)'],
                     25:             'ntpdc' => ['ntpdc', 8, 'ntpd(8)'],
                     26:             'ntptime' => ['ntptime', 8, 'ntpd(8), ntpdate(8)'],
                     27:             'ntptrace' => ['ntptrace', 8, 'ntpd(8)'],
                     28:             'ntp-wait' => ['ntp-wait', 8, 'ntpd(8)'],
                     29:             'keygen' => ['ntp-keygen', 8, 'ntpd(8), ntp_auth(5)'],
                     30:             'tickadj' => ['tickadj', 8, 'ntpd(8)'],
                     31:             'confopt' => ['ntp.conf', 5, 'ntpd(8), ntp_auth(5), ntp_mon(5), ntp_acc(5), ntp_clock(5), ntp_misc(5)'],
                     32:             'authopt' => ['ntp_auth', 5, 'ntp.conf(5), ntpd(8)'],
                     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(8), 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: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>