Annotation of embedaddon/ntp/scripts/html2man.in, revision 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>