1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
#!/usr/bin/perl -w
use strict;
# Script to hack around xsl:import paths; ideally, the system catalogs are used.
# Let every OS define its own manipulations.
# Uses the Perl $^O values to identify the current OS.
#
# Define filter_$^O to do substitutions, will be called for every line of
# every .xsl file.
sub filter_freebsd
{
s{"http://docbook.sourceforge.net/release/xsl/current/}
{"/usr/local/share/xsl/docbook/};
s{"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"}
{"/usr/local/share/xml/docbook/4.2/docbookx.dtd"};
}
sub filter_linux
{
# SUSE 10 with extra pkgs
-d "/usr/share/xml/docbook/stylesheet/nwalsh/1.71.1/" &&
s{"http://docbook.sourceforge.net/release/xsl/current/}
{"/usr/share/xml/docbook/stylesheet/nwalsh/1.71.1/};
# Ubuntu/Debian with standard docbook-xsl pkgs
-d "/usr/share/xml/docbook/stylesheet/docbook-xsl/" &&
s{"http://docbook.sourceforge.net/release/xsl/current/}
{"/usr/share/xml/docbook/stylesheet/docbook-xsl/};
s{"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"}
{"/usr/share/xml/docbook/schema/dtd/4.2/docbookx.dtd"};
}
sub filter_darwin
{
# NB - this uses the Mac Ports installations
s{"http://docbook.sourceforge.net/release/xsl/current/}
{"/opt/local/share/xsl/docbook-xsl/};
s{"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"}
{"/opt/local/share/xml/docbook/4.2/docbookx.dtd"};
}
# Define OS filters above.
my $os_filter;
$os_filter = $main::{"filter_$^O"} if exists $main::{"filter_$^O"};
unless (defined $os_filter)
{
print "No changes defined for your OS ($^O).\n";
exit 0;
}
for my $fn (<*.xsl>, <*.xml>)
{
my $orig = "$fn.orig";
rename($fn, $orig) or die "Failed to rename($fn, $orig): $!\n";
# Most portable is two-argument form, and none of our filenames are
# untrusted or contain whitespace.
open(OLD, "< $orig") or die "Failed to read-open($orig): $!\n";
open(NEW, "> $fn") or die "Failed to write-open($fn): $!\n";
while (<OLD>)
{
$os_filter->();
print NEW $_ or die "Write to \"$fn\" failed: $!\n";
}
close(NEW) or die "Failed to close($fn) after writing: $!\n";
close(OLD);
}
|