diff options
-rw-r--r-- | test/layoutengine/testcase2fo.xsl | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/test/layoutengine/testcase2fo.xsl b/test/layoutengine/testcase2fo.xsl index cb4edb9ae..2cc701077 100644 --- a/test/layoutengine/testcase2fo.xsl +++ b/test/layoutengine/testcase2fo.xsl @@ -16,15 +16,50 @@ --> <!-- $Id$ --> <!-- This stylesheet extracts the FO part from the testcase so it can be passed to FOP for layout. --> +<!-- +Variable substitution: + +For any attribute value that starts with a "##" the stylesheet looks for an element with the variable +name under /testcase/variables, ex. "##img" looks for /testcase/variables/img and uses its element +value as subsitution value. +--> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:template match="testcase"> <xsl:apply-templates select="fo/*" mode="copy"/> </xsl:template> - - <xsl:template match="node()|@*" mode="copy"> + + <xsl:template match="node()" mode="copy"> <xsl:copy> <xsl:apply-templates select="@*|node()" mode="copy"/> </xsl:copy> </xsl:template> + + <xsl:template match="@*" mode="copy"> + <xsl:choose> + <xsl:when test="starts-with(., '##')"> + <!-- variable substitution --> + <xsl:variable name="nodename" select="name()"/> + <xsl:variable name="varname" select="substring(., 3)"/> + <xsl:choose> + <xsl:when test="boolean(//variables/child::*[local-name() = $varname])"> + <xsl:attribute name="{name(.)}"> + <xsl:value-of select="//variables/child::*[local-name() = $varname]"/> + </xsl:attribute> + </xsl:when> + <xsl:otherwise> + <!-- if variable isn't defined, just copy --> + <xsl:copy> + <xsl:apply-templates select="node()" mode="copy"/> + </xsl:copy> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise> + <xsl:copy> + <xsl:apply-templates select="node()" mode="copy"/> + </xsl:copy> + </xsl:otherwise> + </xsl:choose> + </xsl:template> </xsl:stylesheet> |