Annotation of embedaddon/bird2/doc/sbase/dist/fmt_html.pl, revision 1.1
1.1 ! misho 1: #
! 2: # fmt_html.pl
! 3: #
! 4: # $Id$
! 5: #
! 6: # HTML-specific driver stuff
! 7: #
! 8: # © Copyright 1996, Cees de Groot
! 9: #
! 10: package LinuxDocTools::fmt_html;
! 11: use strict;
! 12:
! 13: use LinuxDocTools::CharEnts;
! 14: use LinuxDocTools::Vars;
! 15:
! 16: use LinuxDocTools::FixRef;
! 17: my $fixref = $LinuxDocTools::FixRef::fixref;
! 18:
! 19: use LinuxDocTools::Html2Html;
! 20: my $html2html = $LinuxDocTools::Html2Html::html2html;
! 21:
! 22: my $html = {};
! 23: $html->{NAME} = "html";
! 24: $html->{HELP} = "";
! 25: $html->{OPTIONS} = [
! 26: { option => "split", type => "l",
! 27: 'values' => [ "0", "1", "2" ], short => "s" },
! 28: { option => "toc", type => "l",
! 29: 'values' => [ "0", "1", "2" ], short => "T" },
! 30: { option => "dosnames", type => "f", short => "h" },
! 31: { option => "imagebuttons", type => "f", short => "I"},
! 32: { option => "header", type => "s", short => "H"},
! 33: { option => "footer", type => "s", short => "F"}
! 34: ];
! 35: $html->{'split'} = 1;
! 36: $html->{'toc'} = -1;
! 37: $html->{dosnames} = 0;
! 38: $html->{imagebuttons} = 0;
! 39: $html->{header} = "";
! 40: $html->{footer} = "";
! 41: $html->{preNSGMLS} = sub {
! 42: $global->{NsgmlsOpts} .= " -ifmthtml ";
! 43: $global->{NsgmlsPrePipe} = "cat $global->{file}";
! 44: };
! 45:
! 46: $Formats{$html->{NAME}} = $html;
! 47:
! 48: # HTML escape sub. this is called-back by `parse_data' below in
! 49: # `html_preASP' to properly escape `<' and `&' characters coming from
! 50: # the SGML source.
! 51: my %html_escapes;
! 52: $html_escapes{'&'} = '&';
! 53: $html_escapes{'<'} = '<';
! 54:
! 55: my $html_escape = sub {
! 56: my ($data) = @_;
! 57:
! 58: # replace the char with it's HTML equivalent
! 59: $data =~ s|([&<])|$html_escapes{$1}|ge;
! 60:
! 61: return ($data);
! 62: };
! 63:
! 64: #
! 65: # Translate character entities and escape HTML special chars.
! 66: #
! 67: $html->{preASP} = sub
! 68: {
! 69: my ($infile, $outfile) = @_;
! 70: # note the conversion of `sdata_dirs' list to an anonymous array to
! 71: # make a single argument
! 72: my $char_maps = load_char_maps ('.2html', [ Text::EntityMap::sdata_dirs() ]);
! 73:
! 74: while (<$infile>)
! 75: {
! 76: if (/^-/)
! 77: {
! 78: my ($str) = $';
! 79: chop ($str);
! 80: print $outfile "-" . parse_data ($str, $char_maps, $html_escape) . "\n";
! 81: }
! 82: elsif (/^A/)
! 83: {
! 84: /^A(\S+) (IMPLIED|CDATA|NOTATION|ENTITY|TOKEN)( (.*))?$/
! 85: || die "bad attribute data: $_\n";
! 86: my ($name,$type,$value) = ($1,$2,$4);
! 87: if ($type eq "CDATA")
! 88: {
! 89: # CDATA attributes get translated also
! 90: $value = parse_data ($value, $char_maps, $html_escape);
! 91: }
! 92: print $outfile "A$name $type $value\n";
! 93: }
! 94: else
! 95: {
! 96: print $outfile $_;
! 97: }
! 98: }
! 99: return 0;
! 100: };
! 101:
! 102: #
! 103: # Take the sgmlsasp output, and make something
! 104: # useful from it.
! 105: #
! 106: $html->{postASP} = sub
! 107: {
! 108: my $infile = shift;
! 109: my $filename = $global->{filename};
! 110:
! 111: #
! 112: # Set various stuff as a result of option processing.
! 113: #
! 114: my $ext = "html";
! 115: $ext = "htm" if $html->{dosnames};
! 116: my $img = 0;
! 117: $img = 1 if $html->{imagebuttons};
! 118:
! 119: #
! 120: # Bring in file
! 121: #
! 122: my @file = <$infile>;
! 123:
! 124: #
! 125: # Find references
! 126: #
! 127: &{$fixref->{init}}($html->{'split'});
! 128: LINE: foreach (@file) {
! 129: foreach my $pat (keys %{$fixref->{rules}}) {
! 130: if (/$pat/) {
! 131: # Call rule function then skip to next line
! 132: &{$fixref->{rules}->{$pat}}; next LINE;
! 133: }
! 134: }
! 135: &{$fixref->{defaultrule}};
! 136: }
! 137: &{$fixref->{finish}};
! 138:
! 139: #
! 140: # Run through html2html, preserving stdout
! 141: # Also, handle prehtml.sed's tasks
! 142: #
! 143: my $filter = "";
! 144: # $filter = "|$main::progs->{NKF} -e" if ($global->{language} eq "ja");
! 145: open SAVEOUT, ">&STDOUT";
! 146: open STDOUT, "$filter>$filename.$ext" or die qq(Cannot open "$filename.$ext");
! 147:
! 148: &{$html2html->{init}}($html->{'split'}, $ext, $img, $filename,
! 149: $fixref->{filenum}, $fixref->{lrec},
! 150: $html->{'header'}, $html->{'footer'}, $html->{'toc'},
! 151: $global->{tmpbase}, $global->{debug});
! 152: LINE: foreach (@file) {
! 153: s,<P></P>,,g; # remove empty <P></P> containers
! 154: foreach my $pat (keys %{$html2html->{rules}}) {
! 155: if (/$pat/) {
! 156: # Call rule function then skip to next line
! 157: &{$html2html->{rules}->{$pat}}; next LINE;
! 158: }
! 159: }
! 160: &{$html2html->{defaultrule}};
! 161: }
! 162: &{$html2html->{finish}};
! 163:
! 164: close STDOUT;
! 165: open STDOUT, ">&SAVEOUT";
! 166:
! 167: return 0;
! 168: };
! 169:
! 170: 1;
! 171:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>