blob: 602e06cbf01ae03c1f0997b2de624ecb42ad74b5 [file] [log] [blame]
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:text="http://openoffice.org/2000/text"
xmlns:office="http://openoffice.org/2000/office"
xmlns:style="http://openoffice.org/2000/style">
<xsl:output method="text"/>
<!-- which paragraph styles do we wish to extract? Default: Code -->
<xsl:param name="style" select="'RelaxNG Manifest'"/>
<!-- default: don't output anything -->
<xsl:template match="text()"/>
<!-- paragraph with the proper style found? Then generate output! -->
<xsl:template match="text:p">
<!-- determine all parent styles of this paragraph; use key 'parents' -->
<xsl:variable name="parents"
select="@text:style-name |
key('parents',@text:style-name) |
key('parents',key('parents',@text:style-name)) |
key('parents',key('parents',key('parents',@text:style-name)))"/>
<!-- if proper parent style is found, generate output! -->
<xsl:if test="$parents = $style">
<xsl:apply-templates mode="output"/>
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
<xsl:key name="parents"
match="style:style/@style:parent-style-name"
use="../@style:name" />
<!-- generate output: just copy all text we find -->
<xsl:template mode="output">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template mode="output" match="text()">
<xsl:copy/>
</xsl:template>
<!-- white space handling: <text:s>, <text:tab> elements -->
<xsl:template mode="output" match="text:tab-stop">
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template mode="output" match="text:s">
<xsl:call-template name="repeat">
<xsl:with-param name="count" select="@text:c"/>
<xsl:with-param name="string" select="' '"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="repeat">
<xsl:param name="count"/>
<xsl:param name="string"/>
<xsl:if test="$count > 0">
<xsl:value-of select="$string"/>
<xsl:call-template name="repeat">
<xsl:with-param name="count" select="$count -1"/>
<xsl:with-param name="string" select="$string"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>