Statistics
| Branch: | Revision:

iof-bird / bird-2.0.1 / doc / sbase / dist / fmt_html.pl @ 6b3f1a54

History | View | Annotate | Download (4.09 KB)

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{'&'} = '&amp;';
53
$html_escapes{'<'} = '&lt;';
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