plcopen/pou_variables.xslt
changeset 1316 df9d02bd3eb7
child 1319 748347102c97
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plcopen/pou_variables.xslt	Fri Sep 13 17:26:16 2013 +0200
@@ -0,0 +1,206 @@
+<xsl:stylesheet version="1.0"
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:ppx="http://www.plcopen.org/xml/tc6_0201"
+    xmlns:ns="pou_vars_ns"
+    extension-element-prefixes="ns"
+    exclude-result-prefixes="ns">
+  <xsl:template match="ppx:pou">
+    <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>
+      <variables>
+        <xsl:apply-templates select="ppx:interface"/>
+        <xsl:apply-templates select="ppx:actions/ppx:action | ppx:transitions/ppx:transition" mode="variable_list"/>
+      </variables>
+    </pou>
+  </xsl:template>
+  <xsl:template match="ppx:action">
+    <action>
+      <class/>
+      <type><xsl:text>None</xsl:text></type>
+      <edit><xsl:text>True</xsl:text></edit>
+      <debug><xsl:text>True</xsl:text></debug>
+      <variables>
+        <xsl:apply-templates select="ancestor::ppx:pou/child::ppx:interface"/>
+      </variables>
+    </action>
+  </xsl:template>
+  <xsl:template match="ppx:transition">
+    <transition>
+      <class/>
+      <type><xsl:text>None</xsl:text></type>
+      <edit><xsl:text>True</xsl:text></edit>
+      <debug><xsl:text>True</xsl:text></debug>
+      <variables>
+        <xsl:apply-templates select="ancestor::ppx:pou/child::ppx:interface"/>
+      </variables>
+    </transition>
+  </xsl:template>
+  <xsl:template match="ppx:configuration">
+    <configuration>
+      <class/>
+      <type><xsl:text>None</xsl:text></type>
+      <edit><xsl:text>True</xsl:text></edit>
+      <debug><xsl:text>False</xsl:text></debug>
+      <variables>
+        <xsl:apply-templates select="ppx:resource" mode="variable_list"/>
+        <xsl:apply-templates select="ppx:globalVars"/>
+      </variables>
+    </configuration>
+  </xsl:template>
+  <xsl:template match="ppx:resource">
+    <resource>
+      <class/>
+      <type><xsl:text>None</xsl:text></type>
+      <edit><xsl:text>True</xsl:text></edit>
+      <debug><xsl:text>False</xsl:text></debug>
+      <variables>
+        <xsl:apply-templates select="ppx:pouInstance | ppx:task/ppx:pouInstance" mode="variable_list"/>
+        <xsl:apply-templates select="ppx:globalVars"/>
+      </variables>
+    </resource>
+  </xsl:template>
+  <xsl:template match="ppx:localVars">
+    <xsl:call-template name="variables_infos">
+      <xsl:with-param name="var_class" select="'Local'"/>
+    </xsl:call-template>
+  </xsl:template>
+  <xsl:template match="ppx:globalVars">
+    <xsl:call-template name="variables_infos">
+      <xsl:with-param name="var_class" select="'Global'"/>
+    </xsl:call-template>
+  </xsl:template>
+  <xsl:template match="ppx:externalVars">
+    <xsl:call-template name="variables_infos">
+      <xsl:with-param name="var_class" select="'External'"/>
+    </xsl:call-template>
+  </xsl:template>
+  <xsl:template match="ppx:tempVars">
+    <xsl:call-template name="variables_infos">
+      <xsl:with-param name="var_class" select="'Temp'"/>
+    </xsl:call-template>
+  </xsl:template>
+  <xsl:template match="ppx:inputVars">
+    <xsl:call-template name="variables_infos">
+      <xsl:with-param name="var_class" select="'Input'"/>
+    </xsl:call-template>
+  </xsl:template>
+  <xsl:template match="ppx:outputVars">
+    <xsl:call-template name="variables_infos">
+      <xsl:with-param name="var_class" select="'Output'"/>
+    </xsl:call-template>
+  </xsl:template>
+  <xsl:template match="ppx:inOutVars">
+    <xsl:call-template name="variables_infos">
+      <xsl:with-param name="var_class" select="'InOut'"/>
+    </xsl:call-template>
+  </xsl:template>
+  <xsl:template name="variables_infos">
+    <xsl:param name="var_class"/>
+	<xsl:for-each select="ppx:variable">
+      <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>
+      </variable>
+    </xsl:for-each>
+  </xsl:template>
+  <xsl:template match="ppx:transition" mode="variable_list">
+    <transition>
+      <name><xsl:value-of select="@name"/></name>
+      <class/>
+      <type><xsl:text>None</xsl:text></type>
+      <edit><xsl:text>True</xsl:text></edit>
+      <debug><xsl:text>True</xsl:text></debug>
+    </transition>
+  </xsl:template>
+  <xsl:template match="ppx:action" mode="variable_list">
+    <action>
+	  <name><xsl:value-of select="@name"/></name>
+	  <class/>
+      <type><xsl:text>None</xsl:text></type>
+	  <edit><xsl:text>True</xsl:text></edit>
+      <debug><xsl:text>True</xsl:text></debug>
+    </action>
+  </xsl:template>
+  <xsl:template match="ppx:resource" mode="variable_list">
+    <resource>
+      <name><xsl:value-of select="@name"/></name>
+      <class/>
+      <type><xsl:text>None</xsl:text></type>
+      <edit><xsl:text>True</xsl:text></edit>
+      <debug><xsl:text>False</xsl:text></debug>
+    </resource>
+  </xsl:template>
+  <xsl:template match="ppx:pouInstance" mode="variable_list">
+    <program>
+      <name><xsl:value-of select="@name"/></name>
+      <class/>
+      <type><xsl:value-of select="@typeName"/></type>
+      <edit><xsl:text>True</xsl:text></edit>
+      <debug><xsl:text>True</xsl:text></debug>
+    </program>
+  </xsl:template>
+  <xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:derived" mode="var_type">
+    <xsl:value-of select="@name"/>
+  </xsl:template>
+  <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:text>..</xsl:text>
+      <xsl:value-of select="@upper"/>
+    </xsl:for-each>
+    <xsl:text>] OF </xsl:text>
+    <xsl:apply-templates select="ppx:baseType" mode="var_type"/>
+  </xsl:template>
+  <xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:string" mode="var_type">
+    <xsl:text>STRING</xsl:text>
+  </xsl:template>
+  <xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:wstring" mode="var_type">
+    <xsl:text>WSTRING</xsl:text>
+  </xsl:template>
+  <xsl:template match="*[self::ppx:type or self::ppx:baseType]/*" mode="var_type">
+    <xsl:value-of select="local-name()"/>
+  </xsl:template>
+  <xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:derived" mode="var_edit">
+    <ns:is_edited/>
+  </xsl:template>
+  <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>
+  <xsl:template match="*[self::ppx:type or self::ppx:baseType]/*" mode="var_edit">
+    <xsl:text>False</xsl:text>
+  </xsl:template>
+    <xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:derived" mode="var_debug">
+    <ns:is_debugged/>
+    <xsl:choose>
+      <xsl:when test="count(./*) > 0">
+        <xsl:apply-templates mode="var_debug"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:text>False</xsl:text>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+  <xsl:template match="ppx:pou" mode="var_debug">
+    <xsl:text>True</xsl:text>
+  </xsl:template>
+  <xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:array" mode="var_debug">
+    <xsl:text>False</xsl:text>
+  </xsl:template>
+  <xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:struct" mode="var_debug">
+    <xsl:text>False</xsl:text>
+  </xsl:template>
+  <xsl:template match="*[self::ppx:type or self::ppx:baseType]/*" mode="var_debug">
+    <xsl:text>True</xsl:text>
+  </xsl:template>
+  <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"/>
+</xsl:stylesheet>
\ No newline at end of file