#! /usr/bin/perl
-# $Cambridge: exim/doc/doc-docbook/TidyHTML-filter,v 1.1 2005/06/16 10:32:31 ph10 Exp $
+# $Cambridge: exim/doc/doc-docbook/TidyHTML-filter,v 1.3 2006/02/01 11:01:01 ph10 Exp $
# Script to tidy up the filter HTML file that is generated by xmlto. The
# following changes are made:
#
# 1. Split very long lines.
# 2. Create reverse links from chapter and section titles back to the TOC.
+# 3. Turn <div class="literallayout"><p> into <div class="literallayout"> and
+# a matching </p></div> into </div> to get rid of unwanted vertical white
+# space.
$tocref = 1;
+$thisdiv = 0;
# Read in the filter.html file.
@text = <IN>;
close(IN);
-# Insert a newline after every > because the whole toc is generated as one
-# humungous line that is hard to check. Then split the lines so that each one
-# is a separate element in the vector.
+# Insert a newline after every > in the toc, because the whole toc is generated
+# as one humungous line that is hard to check. Indeed, the start of the first
+# chapter is also on the line, so we have to split if off first. Having
+# inserted newlines, we split the toc into separate items in the vector.
-foreach $line (@text) { $line =~ s/>\s*/>\n/g; }
for ($i = 0; $i < scalar(@text); $i++)
- { splice @text, $i, 1, (split /(?<=\n)/, $text[$i]); }
+ {
+ if ($text[$i] =~ ?<title>Exim's interfaces to mail filtering</title>?)
+ {
+ splice @text, $i, 1, (split /(?=<div class="chapter")/, $text[$i]);
+ $text[$i] =~ s/>\s*/>\n/g;
+ splice @text, $i, 1, (split /(?<=\n)/, $text[$i]);
+ last;
+ }
+ }
# We want to create reverse links from each chapter and section title back to
# the relevant place in the TOC. Scan the TOC for the relevant entries. Add
for (; $i < scalar(@text); $i++)
{
- if ($text[$i] =~ /^<h[23] /)
+ while ($text[$i] =~
+ /^(.*)<a( xmlns="[^"]+")? id="([^"]+)"><\/a>(.*?)<\/h(.*)/)
{
- $i++;
- if ($text[$i] =~ /^<a( xmlns="[^"]+")? id="([^"]+)">$/)
+ my($ref) = $backref{"#$2"};
+ $text[$i] = "$1<a$2 href=\"#$ref\" id=\"$3\">$4</a></h$5";
+ }
+
+ if ($text[$i] =~ /^(.*)<div class="literallayout"><p>(?:<br \/>)?(.*)/)
+ {
+ my($j);
+ $text[$i] = "$1<div class=\"literallayout\">$2";
+
+ for ($j = $i + 1; $j < scalar(@text); $j++)
{
- my($ref) = $backref{"#$2"};
- $text[$i++] = "<a$1 href=\"#$ref\" id=\"$2\">\n";
- my($temp) = $text[$i];
- $text[$i] = $text[$i+1];
- $text[++$i] = $temp;
+ if ($text[$j] =~ /^<\/p><\/div>/)
+ {
+ $text[$j] =~ s/<\/p>//;
+ last;
+ }
}
}
}