<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ppx="http://www.plcopen.org/xml/tc6_0201"
extension-element-prefixes="ns"
exclude-result-prefixes="ns">
<xsl:template match="ppx:pou">
<class><xsl:value-of select="@pouType"/></class>
<type><xsl:value-of select="@name"/></type>
<edit><xsl:text>True</xsl:text></edit>
<debug><xsl:text>True</xsl:text></debug>
<xsl:apply-templates select="ppx:interface"/>
<xsl:apply-templates select="ppx:actions/ppx:action | ppx:transitions/ppx:transition" mode="variable_list"/>
<xsl:template match="ppx:action">
<type><xsl:text>None</xsl:text></type>
<edit><xsl:text>True</xsl:text></edit>
<debug><xsl:text>True</xsl:text></debug>
<xsl:apply-templates select="ancestor::ppx:pou/child::ppx:interface"/>
<xsl:template match="ppx:transition">
<type><xsl:text>None</xsl:text></type>
<edit><xsl:text>True</xsl:text></edit>
<debug><xsl:text>True</xsl:text></debug>
<xsl:apply-templates select="ancestor::ppx:pou/child::ppx:interface"/>
<xsl:template match="ppx:configuration">
<type><xsl:text>None</xsl:text></type>
<edit><xsl:text>True</xsl:text></edit>
<debug><xsl:text>False</xsl:text></debug>
<xsl:apply-templates select="ppx:resource" mode="variable_list"/>
<xsl:apply-templates select="ppx:globalVars"/>
<xsl:template match="ppx:resource">
<type><xsl:text>None</xsl:text></type>
<edit><xsl:text>True</xsl:text></edit>
<debug><xsl:text>False</xsl:text></debug>
<xsl:apply-templates select="ppx:pouInstance | ppx:task/ppx:pouInstance" mode="variable_list"/>
<xsl:apply-templates select="ppx:globalVars"/>
<xsl:template match="ppx:localVars">
<xsl:call-template name="variables_infos">
<xsl:with-param name="var_class" select="'Local'"/>
<xsl:template match="ppx:globalVars">
<xsl:call-template name="variables_infos">
<xsl:with-param name="var_class" select="'Global'"/>
<xsl:template match="ppx:externalVars">
<xsl:call-template name="variables_infos">
<xsl:with-param name="var_class" select="'External'"/>
<xsl:template match="ppx:tempVars">
<xsl:call-template name="variables_infos">
<xsl:with-param name="var_class" select="'Temp'"/>
<xsl:template match="ppx:inputVars">
<xsl:call-template name="variables_infos">
<xsl:with-param name="var_class" select="'Input'"/>
<xsl:template match="ppx:outputVars">
<xsl:call-template name="variables_infos">
<xsl:with-param name="var_class" select="'Output'"/>
<xsl:template match="ppx:inOutVars">
<xsl:call-template name="variables_infos">
<xsl:with-param name="var_class" select="'InOut'"/>
<xsl:template name="variables_infos">
<xsl:param name="var_class"/>
<xsl:for-each select="ppx:variable">
<name><xsl:value-of select="@name"/></name>
<class><xsl:value-of select="$var_class"/></class>
<type><xsl:apply-templates mode="var_type"/></type>
<edit><xsl:apply-templates mode="var_edit"/></edit>
<debug><xsl:apply-templates mode="var_debug"/></debug>
<xsl:template match="ppx:transition" mode="variable_list">
<name><xsl:value-of select="@name"/></name>
<type><xsl:text>None</xsl:text></type>
<edit><xsl:text>True</xsl:text></edit>
<debug><xsl:text>True</xsl:text></debug>
<xsl:template match="ppx:action" mode="variable_list">
<name><xsl:value-of select="@name"/></name>
<type><xsl:text>None</xsl:text></type>
<edit><xsl:text>True</xsl:text></edit>
<debug><xsl:text>True</xsl:text></debug>
<xsl:template match="ppx:resource" mode="variable_list">
<name><xsl:value-of select="@name"/></name>
<type><xsl:text>None</xsl:text></type>
<edit><xsl:text>True</xsl:text></edit>
<debug><xsl:text>False</xsl:text></debug>
<xsl:template match="ppx:pouInstance" mode="variable_list">
<name><xsl:value-of select="@name"/></name>
<type><xsl:value-of select="@typeName"/></type>
<edit><xsl:text>True</xsl:text></edit>
<debug><xsl:text>True</xsl:text></debug>
<xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:derived" mode="var_type">
<xsl:value-of select="@name"/>
<xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:array" mode="var_type">
<xsl:text>ARRAY [</xsl:text>
<xsl:for-each select="ppx:dimension">
<xsl:value-of select="@lower"/>
<xsl:value-of select="@upper"/>
<xsl:text>] OF </xsl:text>
<xsl:apply-templates select="ppx:baseType" mode="var_type"/>
<xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:string" mode="var_type">
<xsl:text>STRING</xsl:text>
<xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:wstring" mode="var_type">
<xsl:text>WSTRING</xsl:text>
<xsl:template match="*[self::ppx:type or self::ppx:baseType]/*" mode="var_type">
<xsl:value-of select="local-name()"/>
<xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:derived" mode="var_edit">
<xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:array" mode="var_edit">
<xsl:apply-templates select="ppx:baseType" mode="var_edit"/>
<xsl:template match="*[self::ppx:type or self::ppx:baseType]/*" mode="var_edit">
<xsl:text>False</xsl:text>
<xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:derived" mode="var_debug">
<xsl:when test="count(./*) > 0">
<xsl:apply-templates mode="var_debug"/>
<xsl:text>False</xsl:text>
<xsl:template match="ppx:pou" mode="var_debug">
<xsl:text>True</xsl:text>
<xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:array" mode="var_debug">
<xsl:text>False</xsl:text>
<xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:struct" mode="var_debug">
<xsl:text>False</xsl:text>
<xsl:template match="*[self::ppx:type or self::ppx:baseType]/*" mode="var_debug">
<xsl:text>True</xsl:text>
<xsl:template match="text()"/>
<xsl:template match="text()" mode="var_type"/>
<xsl:template match="text()" mode="var_edit"/>
<xsl:template match="text()" mode="var_debug"/>