diff options
Diffstat (limited to 'doc/doc-docbook/TidyHTML-filter')
-rwxr-xr-x | doc/doc-docbook/TidyHTML-filter | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/doc/doc-docbook/TidyHTML-filter b/doc/doc-docbook/TidyHTML-filter new file mode 100755 index 000000000..f23a9a728 --- /dev/null +++ b/doc/doc-docbook/TidyHTML-filter @@ -0,0 +1,79 @@ +#! /usr/bin/perl + +# $Cambridge: exim/doc/doc-docbook/TidyHTML-filter,v 1.1 2005/06/16 10:32:31 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. + + +$tocref = 1; + +# Read in the filter.html file. + +open(IN, "filter.html") || die "Failed to open filter.html for reading: $!\n"; +@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. + +foreach $line (@text) { $line =~ s/>\s*/>\n/g; } +for ($i = 0; $i < scalar(@text); $i++) + { splice @text, $i, 1, (split /(?<=\n)/, $text[$i]); } + +# 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 +# an id to each entry, and create tables that remember the new link ids. We +# detect the start of the TOC by <div class="toc" and the end of the TOC by +# <div class="chapter". + +# Skip to start of TOC + +for ($i = 0; $i < scalar(@text); $i++) + { + last if $text[$i] =~ /^<div class="toc"/; + } + +# Scan the TOC + +for (; $i < scalar(@text); $i++) + { + last if $text[$i] =~ /^<div class="chapter"/; + if ($text[$i] =~ /^<a href="(#[^"]+)">/) + { + my($ss) = $1; + my($id) = sprintf "%04d", $tocref++; + $text[$i] =~ s/<a/<a id="toc$id"/; + $backref{"$ss"} = "toc$id"; + } + } + +# Scan remainder of the document + +for (; $i < scalar(@text); $i++) + { + if ($text[$i] =~ /^<h[23] /) + { + $i++; + if ($text[$i] =~ /^<a( xmlns="[^"]+")? id="([^"]+)">$/) + { + 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; + } + } + } + +# Write out the revised file + +open(OUT, ">filter.html") || die "Failed to open filter.html for writing: $!\n"; +print OUT @text; +close(OUT); + +# End |