diff options
Diffstat (limited to 'stylesheets/lfs-xsl/docbook-xsl-snapshot/common/insertfile.xsl')
-rw-r--r-- | stylesheets/lfs-xsl/docbook-xsl-snapshot/common/insertfile.xsl | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/stylesheets/lfs-xsl/docbook-xsl-snapshot/common/insertfile.xsl b/stylesheets/lfs-xsl/docbook-xsl-snapshot/common/insertfile.xsl new file mode 100644 index 000000000..c4e2d0d44 --- /dev/null +++ b/stylesheets/lfs-xsl/docbook-xsl-snapshot/common/insertfile.xsl @@ -0,0 +1,111 @@ +<?xml version='1.0'?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:xi="http://www.w3.org/2001/XInclude" + version='1.0'> + +<!-- ******************************************************************** + $Id$ + ******************************************************************** + + This file is part of the XSL DocBook Stylesheet distribution. + See ../README or http://docbook.sf.net/release/xsl/current/ for + copyright and other information. + + ******************************************************************** --> + +<xsl:param name="textdata.default.encoding"></xsl:param> + +<!-- * This stylesheet makes a copy of a source tree, replacing all --> +<!-- * instances of the following with corresponding Xinclude instances --> +<!-- * in the result tree. --> +<!-- * --> +<!-- * <textobject><textdata fileref="foo.txt"> --> +<!-- * <imagedata format="linespecific" fileref="foo.txt"> --> +<!-- * <inlinegraphic format="linespecific" fileref="foo.txt"> --> +<!-- * --> +<!-- * Those become: --> +<!-- * --> +<!-- * <xi:include href="foo.txt" parse="text"/> --> +<!-- * --> +<!-- * It also works as expected with entityref in place of fileref, --> +<!-- * and copies over the value of the <textdata>“encoding” atrribute (if --> +<!-- * found). It is basically intended as an alternative to using the --> +<!-- * DocBook XSLT Java insertfile() extension. --> + +<!-- ==================================================================== --> + +<xsl:template name="get.external.filename"> + <xsl:choose> + <xsl:when test="@entityref"> + <xsl:value-of select="unparsed-entity-uri(@entityref)"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="@fileref"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<!-- ==================================================================== --> + +<xsl:template match="textobject[child::textdata[@entityref|@fileref]]"> + <xsl:apply-templates select="textdata"/> +</xsl:template> + +<xsl:template match="textdata[@entityref|@fileref]"> + <xsl:variable name="filename"> + <xsl:call-template name="get.external.filename"/> + </xsl:variable> + <xsl:variable name="encoding"> + <xsl:choose> + <xsl:when test="@encoding"> + <xsl:value-of select="@encoding"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$textdata.default.encoding"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xi:include href="{$filename}" parse="text" encoding="{$encoding}"/> +</xsl:template> + +<!-- ==================================================================== --> + +<xsl:template + match="inlinemediaobject + [child::imageobject + [child::imagedata + [@format = 'linespecific' and + (@entityref|@fileref)]]]"> + <xsl:apply-templates select="imageobject/imagedata"/> +</xsl:template> + +<xsl:template match="imagedata + [@format = 'linespecific' and + (@entityref|@fileref)]"> + <xsl:variable name="filename"> + <xsl:call-template name="get.external.filename"/> + </xsl:variable> + <xi:include href="{$filename}" parse="text" encoding="{$textdata.default.encoding}"/> +</xsl:template> + +<!-- ==================================================================== --> + +<xsl:template match="inlinegraphic + [@format = 'linespecific' and + (@entityref|@fileref)]"> + <xsl:variable name="filename"> + <xsl:call-template name="get.external.filename"/> + </xsl:variable> + <xi:include href="{$filename}" parse="text" encoding="{$textdata.default.encoding}"/> +</xsl:template> + +<!-- ==================================================================== --> + +<!-- * copy everything else into result tree as-is --> +<xsl:template match="node() | @*"> + <xsl:copy> + <xsl:apply-templates select="@* | node()"/> + </xsl:copy> +</xsl:template> + +</xsl:stylesheet> |