File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / scripts / html2man.in
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:08:38 2012 UTC (12 years, 7 months ago) by misho
Branches: ntp, MAIN
CVS tags: v4_2_6p5p0, v4_2_6p5, HEAD
ntp 4.2.6p5

    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>