--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/plcopen/instance_tagname.xslt Mon Sep 23 00:32:39 2013 +0200
@@ -0,0 +1,210 @@
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:ppx="http://www.plcopen.org/xml/tc6_0201"
+ xmlns:xhtml="http://www.w3.org/1999/xhtml"
+ xmlns:ns="instance_tagname_ns"
+ extension-element-prefixes="ns"
+ exclude-result-prefixes="ns">
+ <xsl:param name="instance_path"/>
+ <xsl:template name="element_name">
+ <xsl:param name="path"/>
+ <xsl:choose>
+ <xsl:when test="contains($path,'.')">
+ <xsl:value-of select="substring-before($path,'.')"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$path"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template name="next_path">
+ <xsl:param name="path"/>
+ <xsl:choose>
+ <xsl:when test="contains($path,'.')">
+ <xsl:value-of select="substring-after($path,'.')"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="ppx:project">
+ <xsl:variable name="config_name">
+ <xsl:call-template name="element_name">
+ <xsl:with-param name="path" select="$instance_path"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:apply-templates select="ppx:instances/ppx:configurations/ppx:configuration[@name=$config_name]">
+ <xsl:with-param name="element_path">
+ <xsl:call-template name="next_path">
+ <xsl:with-param name="path" select="$instance_path"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="ppx:configuration">
+ <xsl:param name="element_path"/>
+ <xsl:choose>
+ <xsl:when test="$element_path!=''">
+ <xsl:variable name="child_name">
+ <xsl:call-template name="element_name">
+ <xsl:with-param name="path" select="$element_path"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:apply-templates select="ppx:resource[@name=$child_name] | ppx:globalVars/ppx:variable[@name=$child_name]/ppx:type/*[self::ppx:derived or self::ppx:struct or self::ppx:array]">
+ <xsl:with-param name="element_path">
+ <xsl:call-template name="next_path">
+ <xsl:with-param name="path" select="$element_path"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <ns:config_tagname>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ </ns:config_tagname>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="ppx:resource">
+ <xsl:param name="element_path"/>
+ <xsl:choose>
+ <xsl:when test="$element_path!=''">
+ <xsl:variable name="child_name">
+ <xsl:call-template name="element_name">
+ <xsl:with-param name="path" select="$element_path"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:apply-templates select="ppx:pouInstance[@name=$child_name] | ppx:task|ppx:pouInstance[@name=$child_name] | ppx:globalVars/ppx:variable[@name=$child_name]/ppx:type/*[self::ppx:derived or self::ppx:struct or self::ppx:array]">
+ <xsl:with-param name="element_path">
+ <xsl:call-template name="next_path">
+ <xsl:with-param name="path" select="$element_path"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <ns:resource_tagname>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="config_name">
+ <xsl:value-of select="ancestor::ppx:configuration/@name"/>
+ </xsl:attribute>
+ </ns:resource_tagname>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="ppx:pouInstance">
+ <xsl:param name="element_path"/>
+ <ns:instance_definition>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@typeName"/>
+ </xsl:attribute>
+ <xsl:attribute name="path">
+ <xsl:value-of select="$element_path"/>
+ </xsl:attribute>
+ </ns:instance_definition>
+ </xsl:template>
+ <xsl:template match="ppx:pou">
+ <xsl:param name="element_path"/>
+ <xsl:variable name="child_name">
+ <xsl:call-template name="element_name">
+ <xsl:with-param name="path" select="$element_path"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="next_child_path">
+ <xsl:call-template name="next_path">
+ <xsl:with-param name="path" select="$element_path"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:apply-templates select="ppx:interface/*/ppx:variable[@name=$child_name]/ppx:type/*[self::ppx:derived or self::ppx:struct or self::ppx:array]">
+ <xsl:with-param name="next_child_path" select="next_child_path"/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="ppx:actions/ppx:action[@name=$child_name]">
+ <xsl:with-param name="next_child_path" select="next_child_path"/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="ppx:transitions/ppx:transition[@name=$child_name]">
+ <xsl:with-param name="next_child_path" select="next_child_path"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="ppx:action">
+ <ns:action_tagname>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="pou_name">
+ <xsl:value-of select="ancestor::ppx:pou/@name"/>
+ </xsl:attribute>
+ </ns:action_tagname>
+ </xsl:template>
+ <xsl:template match="ppx:transition">
+ <ns:transition_tagname>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="pou_name">
+ <xsl:value-of select="ancestor::ppx:pou/@name"/>
+ </xsl:attribute>
+ </ns:transition_tagname>
+ </xsl:template>
+ <xsl:template name="ppx:dataType">
+ <xsl:param name="element_path"/>
+ <xsl:apply-templates select="ppx:baseType/*[self::ppx:derived or self::ppx:struct or self::ppx:array]">
+ <xsl:with-param name="element_path" select="element_path"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="ppx:derived">
+ <xsl:param name="element_path"/>
+ <ns:instance_definition>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="path">
+ <xsl:value-of select="$element_path"/>
+ </xsl:attribute>
+ </ns:instance_definition>
+ </xsl:template>
+ <xsl:template match="array">
+ <xsl:param name="element_path"/>
+ <xsl:apply-templates select="ppx:baseType/*[self::ppx:derived or self::ppx:struct or self::ppx:array]">
+ <xsl:with-param name="element_path" select="element_path"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="struct">
+ <xsl:param name="element_path"/>
+ <xsl:variable name="child_name">
+ <xsl:call-template name="element_name">
+ <xsl:with-param name="path" select="$element_path"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="next_child_path">
+ <xsl:call-template name="next_path">
+ <xsl:with-param name="path" select="$element_path"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:apply-templates select="ppx:variable[@name=$child_name]/ppx:type/*[self::ppx:derived or self::ppx:struct or self::ppx:array]">
+ <xsl:with-param name="element_path" select="element_path"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="pou_instance">
+ <xsl:choose>
+ <xsl:when test="@pou_path!=''">
+ <xsl:apply-templates>
+ <xsl:with-param name="element_path" select="@pou_path"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <ns:pou_tagname>
+ <xsl:attribute name="name">
+ <xsl:value-of select="ppx:pou/@name"/>
+ </xsl:attribute>
+ </ns:pou_tagname>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="datatype_instance">
+ <xsl:apply-templates>
+ <xsl:with-param name="element_path" select="@datatype_path"/>
+ </xsl:apply-templates>
+ </xsl:template>
+</xsl:stylesheet>
\ No newline at end of file