blob: 4b0a473a7be93ec4208aada9d47c4a00b81b69d7 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
Copyright 2000, 2010 Oracle and/or its affiliates.
Copyright 2009 IBM. All rights reserved.
Use is subject to license terms.
Licensed under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy
of the License at http://www.apache.org/licenses/LICENSE-2.0. You can also
obtain a copy of the License at http://odftoolkit.org/docs/license.txt
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xt="http://www.jclark.com/xt" xmlns:common="http://exslt.org/common" xmlns:xalan="http://xml.apache.org/xalan" exclude-result-prefixes="chart config dc dom dr3d draw fo form math meta number office ooo oooc ooow script style svg table text xforms xlink xsd xsi xt common xalan" xmlns="http://www.w3.org/1999/xhtml">
<!-- Extracting default values from the ODF 1.2 part1 specification
Version 1.2.1 by Svante.Schubert@ gmail.com -->
<xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="no" />
<!-- ********************************************************** -->
<!-- *** Get the default attribute values for ODF elements *** -->
<!-- ********************************************************** -->
<xsl:template match="/">
<config xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:rdfa="http://docs.oasis-open.org/opendocument/meta/rdfa#" office:version="1.2">
<attributes>
<xsl:apply-templates />
</attributes>
</config>
</xsl:template>
<!-- for every stylable text element with the indicator of a default value (ie. the style 'Default_20_Value')... -->
<xsl:template match="*[@text:style-name='Default_20_Value']">
<xsl:call-template name="get-default-value-declaration">
<xsl:with-param name="attributeName">
<!-- the attribute name is being gathered, by traversing backwards in the document to the previous attribute declaration (found in a heading) -->
<xsl:apply-templates select="preceding::text:h[1]" mode="get-attribute-name"/>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<!-- starting from an attribute description where defaults exist.. -->
<xsl:template match="text:h" mode="get-attribute-name">
<!-- Within the header is a reference token, which gives clues about the default value's attribute for instance:
<text:reference-mark-start text:name="attribute-table:number-columns-repeated_element-table:table-cell"/>
-->
<xsl:variable name="referenceToken" select="text:reference-mark-start/@text:name[contains(.,'attribute-')]"/>
<xsl:choose>
<xsl:when test="contains($referenceToken, '_element')">
<!-- the name of the attribute -->
<xsl:value-of select="substring-after(substring-before($referenceToken, '_element'), 'attribute-')"/>
</xsl:when>
<xsl:otherwise>
<!-- the name of the attribute -->
<xsl:value-of select="substring-after($referenceToken, 'attribute-')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="get-default-value-declaration">
<xsl:param name="attributeName" />
<xsl:variable name="defaultValue">
<!-- get the default Value (ie. the styleable text element with the style 'Attribute_20_Value') -->
<xsl:variable name="defaultValueElement" select="*[@text:style-name='Attribute_20_Value' or @text:style-name='Attribute_20_Value_20_Instance']"/>
<xsl:choose>
<xsl:when test="normalize-space($defaultValueElement) != ''">
<xsl:value-of select="normalize-space($defaultValueElement)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$defaultValueElement"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:if test="*[@text:style-name='Attribute_20_Value_20_Instance']">
<xsl:comment>The following attribute default value is listed in the ODF schema</xsl:comment><xsl:text>
</xsl:text>
</xsl:if>
<xsl:choose>
<xsl:when test="*[@text:style-name='Element']">
<!-- sometimes a default values only occurs on a certain element or elements -->
<xsl:for-each select="*[@text:style-name='Element']">
<!-- use the element name without the brackets -->
<xsl:variable name="elementName">
<xsl:call-template name="get-element-name">
<xsl:with-param name="nameString" select="normalize-space(.)"/>
</xsl:call-template>
</xsl:variable>
<xsl:if test="$elementName != ''">
<xsl:element name="attribute">
<xsl:attribute name="name">
<xsl:value-of select="$attributeName"/>
</xsl:attribute>
<xsl:attribute name="defaultValue">
<xsl:value-of select="$defaultValue"/>
</xsl:attribute>
<xsl:attribute name="element">
<xsl:value-of select="$elementName"/>
</xsl:attribute>
</xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:element name="attribute">
<!-- if the default value occurs for all elements -->
<xsl:attribute name="name">
<xsl:value-of select="$attributeName"/>
</xsl:attribute>
<xsl:attribute name="defaultValue">
<xsl:value-of select="$defaultValue"/>
</xsl:attribute>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="get-element-name">
<xsl:param name="nameString"/>
<xsl:choose>
<xsl:when test="contains($nameString, '&lt;') and contains($nameString, '&gt;')">
<!-- the name of the element -->
<xsl:value-of select='substring-after(substring-before($nameString, "&gt;"), "&lt;")'/>
</xsl:when>
<xsl:when test="not(contains($nameString, '&lt;'))">
<!-- Ignore as it is just an ending part already addressed -->
</xsl:when>
<xsl:otherwise>
<!-- the name of the element was separated into several text:span -->
<xsl:call-template name="get-element-name">
<xsl:with-param name="nameString" select="concat($nameString, normalize-space(following-sibling::text:span))"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="@*|comment()|text()"/>
<xsl:template match="*">
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>