Blame doc/problems-service/tools/resolve-type.xsl

Packit 8ea169
Packit 8ea169
Packit 8ea169
  xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
Packit 8ea169
  xmlns:html="http://www.w3.org/1999/xhtml"
Packit 8ea169
  exclude-result-prefixes="tp html">
Packit 8ea169
Packit 8ea169
Packit 8ea169
    Helper templates for Telepathy D-Bus Introspection conversion.
Packit 8ea169
Packit 8ea169
    Copyright (C) 2009 Michael Leupold <lemma@confuego.org>
Packit 8ea169
Packit 8ea169
    This library is free software; you can redistribute it and/or
Packit 8ea169
    modify it under the terms of the GNU Lesser General Public
Packit 8ea169
    License as published by the Free Software Foundation; either
Packit 8ea169
    version 2.1 of the License, or (at your option) any later version.
Packit 8ea169
Packit 8ea169
    This library is distributed in the hope that it will be useful,
Packit 8ea169
    but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 8ea169
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 8ea169
    Lesser General Public License for more details.
Packit 8ea169
Packit 8ea169
    You should have received a copy of the GNU Lesser General Public
Packit 8ea169
    License along with this library; if not, write to the Free Software
Packit 8ea169
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
Packit 8ea169
-->
Packit 8ea169
Packit 8ea169
    
Packit 8ea169
        - if not found - use the type attribute -->
Packit 8ea169
    <xsl:template name="ResolveType">
Packit 8ea169
        <xsl:param name="node"/>
Packit 8ea169
        <xsl:variable name="unstripped">
Packit 8ea169
            <xsl:choose>
Packit 8ea169
                <xsl:when test="$node//@tp:type">
Packit 8ea169
                    <xsl:call-template name="TpType">
Packit 8ea169
                        <xsl:with-param name="type" select="$node//@tp:type"/>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:when test="$node//@type">
Packit 8ea169
                    <xsl:call-template name="DBusType">
Packit 8ea169
                        <xsl:with-param name="type" select="$node//@type"/>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:otherwise>
Packit 8ea169
                    <xsl:message terminate="yes">
Packit 8ea169
                        Node doesn't contain a type.
Packit 8ea169
                    </xsl:message>
Packit 8ea169
                </xsl:otherwise>
Packit 8ea169
            </xsl:choose>
Packit 8ea169
        </xsl:variable>
Packit 8ea169
        <xsl:value-of select="translate(translate($unstripped, ' ', ''), '
', '')"/>
Packit 8ea169
    </xsl:template>
Packit 8ea169
Packit 8ea169
    <xsl:template name="DBusTypeSuffix">
Packit 8ea169
        <xsl:param name="type"/>
Packit 8ea169
        <xsl:param name="closure"/>
Packit 8ea169
Packit 8ea169
        <xsl:if test="starts-with($closure, '.')">
Packit 8ea169
        >
Packit 8ea169
            <xsl:call-template name="DBusType">
Packit 8ea169
                <xsl:with-param name="type" select="substring($type, 2)"/>
Packit 8ea169
                <xsl:with-param name="closure" select="substring($closure, 2)"/>
Packit 8ea169
            </xsl:call-template>
Packit 8ea169
        </xsl:if>
Packit 8ea169
        <xsl:if test="not(starts-with($closure, '.'))">
Packit 8ea169
            <xsl:call-template name="DBusType">
Packit 8ea169
                <xsl:with-param name="type" select="substring($type, 2)"/>
Packit 8ea169
                <xsl:with-param name="closure" select="$closure"/>
Packit 8ea169
            </xsl:call-template>
Packit 8ea169
        </xsl:if>
Packit 8ea169
    </xsl:template>
Packit 8ea169
Packit 8ea169
    
Packit 8ea169
    <xsl:template name="DBusType">
Packit 8ea169
        <xsl:param name="type"/>
Packit 8ea169
        <xsl:param name="closure"/>
Packit 8ea169
        <xsl:param name="start"/>
Packit 8ea169
Packit 8ea169
        <xsl:if test="$type!=''">
Packit 8ea169
            <xsl:choose>
Packit 8ea169
                <xsl:when test="starts-with($type, 'o')">
Packit 8ea169
                    <xsl:if test="$closure!='' and $start=''">,</xsl:if>
Packit 8ea169
                    ObjectPath
Packit 8ea169
                    <xsl:call-template name="DBusTypeSuffix">
Packit 8ea169
                        <xsl:with-param name="type" select="$type"/>
Packit 8ea169
                        <xsl:with-param name="closure" select="$closure"/>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:when test="starts-with($type, 's')">
Packit 8ea169
                    <xsl:if test="$closure!='' and $start=''">,</xsl:if>
Packit 8ea169
                    String
Packit 8ea169
                    <xsl:call-template name="DBusTypeSuffix">
Packit 8ea169
                        <xsl:with-param name="type" select="$type"/>
Packit 8ea169
                        <xsl:with-param name="closure" select="$closure"/>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:when test="starts-with($type, 'y')">
Packit 8ea169
                    <xsl:if test="$closure!='' and $start=''">,</xsl:if>
Packit 8ea169
                    Byte
Packit 8ea169
                    <xsl:call-template name="DBusTypeSuffix">
Packit 8ea169
                        <xsl:with-param name="type" select="$type"/>
Packit 8ea169
                        <xsl:with-param name="closure" select="$closure"/>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:when test="starts-with($type, 'b')">
Packit 8ea169
                    <xsl:if test="$closure!='' and $start=''">,</xsl:if>
Packit 8ea169
                    Boolean
Packit 8ea169
                    <xsl:call-template name="DBusTypeSuffix">
Packit 8ea169
                        <xsl:with-param name="type" select="$type"/>
Packit 8ea169
                        <xsl:with-param name="closure" select="$closure"/>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:when test="starts-with($type, 'n')">
Packit 8ea169
                    <xsl:if test="$closure!='' and $start=''">,</xsl:if>
Packit 8ea169
                    Int16
Packit 8ea169
                    <xsl:call-template name="DBusTypeSuffix">
Packit 8ea169
                        <xsl:with-param name="type" select="$type"/>
Packit 8ea169
                        <xsl:with-param name="closure" select="$closure"/>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:when test="starts-with($type, 'q')">
Packit 8ea169
                    <xsl:if test="$closure!='' and $start=''">,</xsl:if>
Packit 8ea169
                    UInt16
Packit 8ea169
                    <xsl:call-template name="DBusTypeSuffix">
Packit 8ea169
                        <xsl:with-param name="type" select="$type"/>
Packit 8ea169
                        <xsl:with-param name="closure" select="$closure"/>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:when test="starts-with($type, 'i')">
Packit 8ea169
                    <xsl:if test="$closure!='' and $start=''">,</xsl:if>
Packit 8ea169
                    Int32
Packit 8ea169
                    <xsl:call-template name="DBusTypeSuffix">
Packit 8ea169
                        <xsl:with-param name="type" select="$type"/>
Packit 8ea169
                        <xsl:with-param name="closure" select="$closure"/>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:when test="starts-with($type, 'u')">
Packit 8ea169
                    <xsl:if test="$closure!='' and $start=''">,</xsl:if>
Packit 8ea169
                    UInt32
Packit 8ea169
                    <xsl:call-template name="DBusTypeSuffix">
Packit 8ea169
                        <xsl:with-param name="type" select="$type"/>
Packit 8ea169
                        <xsl:with-param name="closure" select="$closure"/>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:when test="starts-with($type, 'x')">
Packit 8ea169
                    <xsl:if test="$closure!='' and $start=''">,</xsl:if>
Packit 8ea169
                    Int64
Packit 8ea169
                    <xsl:call-template name="DBusTypeSuffix">
Packit 8ea169
                        <xsl:with-param name="type" select="$type"/>
Packit 8ea169
                        <xsl:with-param name="closure" select="$closure"/>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:when test="starts-with($type, 't')">
Packit 8ea169
                    <xsl:if test="$closure!='' and $start=''">,</xsl:if>
Packit 8ea169
                    UInt64
Packit 8ea169
                    <xsl:call-template name="DBusTypeSuffix">
Packit 8ea169
                        <xsl:with-param name="type" select="$type"/>
Packit 8ea169
                        <xsl:with-param name="closure" select="$closure"/>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:when test="starts-with($type, 'd')">
Packit 8ea169
                    <xsl:if test="$closure!='' and $start=''">,</xsl:if>
Packit 8ea169
                    Double
Packit 8ea169
                    <xsl:call-template name="DBusTypeSuffix">
Packit 8ea169
                        <xsl:with-param name="type" select="$type"/>
Packit 8ea169
                        <xsl:with-param name="closure" select="$closure"/>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:when test="starts-with($type, 'g')">
Packit 8ea169
                    <xsl:if test="$closure!='' and $start=''">,</xsl:if>
Packit 8ea169
                    Signature
Packit 8ea169
                    <xsl:call-template name="DBusTypeSuffix">
Packit 8ea169
                        <xsl:with-param name="type" select="$type"/>
Packit 8ea169
                        <xsl:with-param name="closure" select="$closure"/>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:when test="starts-with($type, 'v')">
Packit 8ea169
                    <xsl:if test="$closure!='' and $start=''">,</xsl:if>
Packit 8ea169
                    Variant
Packit 8ea169
                    <xsl:call-template name="DBusTypeSuffix">
Packit 8ea169
                        <xsl:with-param name="type" select="$type"/>
Packit 8ea169
                        <xsl:with-param name="closure" select="$closure"/>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:when test="starts-with($type, 'a{')">
Packit 8ea169
                    <xsl:if test="$closure!='' and $start=''">,</xsl:if>
Packit 8ea169
                    Dict<
Packit 8ea169
                    <xsl:call-template name="DBusType">
Packit 8ea169
                        <xsl:with-param name="type" select="substring($type, 3)"/>
Packit 8ea169
                        <xsl:with-param name="closure">}<xsl:value-of select="$closure"/></xsl:with-param>
Packit 8ea169
                        <xsl:with-param name="start">1</xsl:with-param>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:when test="starts-with($type, 'a')">
Packit 8ea169
                    <xsl:if test="$closure!='' and $start=''">,</xsl:if>
Packit 8ea169
                    Array<
Packit 8ea169
                    <xsl:call-template name="DBusType">
Packit 8ea169
                        <xsl:with-param name="type" select="substring($type, 2)"/>
Packit 8ea169
                        <xsl:with-param name="closure">.<xsl:value-of select="$closure"/></xsl:with-param>
Packit 8ea169
                        <xsl:with-param name="start">1</xsl:with-param>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:when test="starts-with($type, '(')">
Packit 8ea169
                    <xsl:if test="$closure!='' and $start=''">,</xsl:if>
Packit 8ea169
                    Struct<
Packit 8ea169
                    <xsl:call-template name="DBusType">
Packit 8ea169
                        <xsl:with-param name="type" select="substring($type, 2)"/>
Packit 8ea169
                        <xsl:with-param name="closure">)<xsl:value-of select="$closure"/></xsl:with-param>
Packit 8ea169
                        <xsl:with-param name="start">1</xsl:with-param>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:when test="starts-with($type, substring($closure, 1, 1))">
Packit 8ea169
                    >
Packit 8ea169
                    <xsl:call-template name="DBusTypeSuffix">
Packit 8ea169
                        <xsl:with-param name="type" select="$type"/>
Packit 8ea169
                        <xsl:with-param name="closure" select="substring($closure, 2)"/>
Packit 8ea169
                    </xsl:call-template>
Packit 8ea169
                </xsl:when>
Packit 8ea169
                <xsl:otherwise>
Packit 8ea169
                    <xsl:if test="$closure=''">
Packit 8ea169
                        <xsl:message terminate="yes">
Packit 8ea169
                            Unknown DBus Type <xsl:value-of select="$type"/>
Packit 8ea169
                        </xsl:message>
Packit 8ea169
                    </xsl:if>
Packit 8ea169
                    <xsl:message terminate="yes">
Packit 8ea169
                        Expected <xsl:value-of select="substring($closure, 1, 1)"/>, got <xsl:value-of select="substring($type, 1, 1)"/>
Packit 8ea169
                    </xsl:message>
Packit 8ea169
                </xsl:otherwise>
Packit 8ea169
            </xsl:choose>
Packit 8ea169
        </xsl:if>
Packit 8ea169
    </xsl:template>
Packit 8ea169
Packit 8ea169
    
Packit 8ea169
            and tp:mapping elements -->
Packit 8ea169
    <xsl:template name="TpType">
Packit 8ea169
        <xsl:param name="type"/>
Packit 8ea169
        <xsl:choose>
Packit 8ea169
            <xsl:when test="/tp:spec/tp:struct[@name=$type]">
Packit 8ea169
                <xsl:value-of select="$type"/>
Packit 8ea169
            </xsl:when>
Packit 8ea169
            <xsl:when test="/tp:spec/tp:mapping[@name=$type]">
Packit 8ea169
                Dict<
Packit 8ea169
                <xsl:call-template name="ResolveType">
Packit 8ea169
                    <xsl:with-param name="node" select="/tp:spec/tp:mapping[@name=$type]/tp:member[@name='Key']"/>
Packit 8ea169
                </xsl:call-template>,
Packit 8ea169
                <xsl:call-template name="ResolveType">
Packit 8ea169
                    <xsl:with-param name="node" select="/tp:spec/tp:mapping[@name=$type]/tp:member[@name='Value']"/>
Packit 8ea169
                </xsl:call-template>
Packit 8ea169
                >
Packit 8ea169
            </xsl:when>
Packit 8ea169
            <xsl:otherwise>
Packit 8ea169
                <xsl:message terminate="yes">
Packit 8ea169
                    Unspecified type <xsl:value-of select="$type"/>.
Packit 8ea169
                </xsl:message>
Packit 8ea169
            </xsl:otherwise>
Packit 8ea169
        </xsl:choose>
Packit 8ea169
    </xsl:template>
Packit 8ea169
</xsl:stylesheet>