plcopen/pou_variables.xslt
changeset 1348 aee0a7eb833a
parent 1319 748347102c97
child 1936 b85b13b1c2ec
equal deleted inserted replaced
1347:533741e5075c 1348:aee0a7eb833a
     1 <xsl:stylesheet version="1.0"
     1 <?xml version="1.0"?>
     2     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     2 <xsl:stylesheet xmlns:func="http://exslt.org/functions" xmlns:dyn="http://exslt.org/dynamic" xmlns:str="http://exslt.org/strings" xmlns:math="http://exslt.org/math" xmlns:exsl="http://exslt.org/common" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:yml="http://fdik.org/yml" xmlns:set="http://exslt.org/sets" xmlns:ppx="http://www.plcopen.org/xml/tc6_0201" xmlns:ns="pou_vars_ns" xmlns:regexp="http://exslt.org/regular-expressions" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" extension-element-prefixes="ns" version="1.0" exclude-result-prefixes="ns">
     3     xmlns:ppx="http://www.plcopen.org/xml/tc6_0201"
     3   <xsl:output method="xml"/>
     4     xmlns:ns="pou_vars_ns"
     4   <xsl:variable name="space" select="'                                                                                                                                                                                                        '"/>
     5     extension-element-prefixes="ns"
     5   <xsl:param name="autoindent" select="4"/>
     6     exclude-result-prefixes="ns">
     6   <xsl:template match="text()">
       
     7     <xsl:param name="_indent" select="0"/>
       
     8   </xsl:template>
       
     9   <xsl:template mode="var_class" match="text()">
       
    10     <xsl:param name="_indent" select="0"/>
       
    11   </xsl:template>
       
    12   <xsl:template mode="var_type" match="text()">
       
    13     <xsl:param name="_indent" select="0"/>
       
    14   </xsl:template>
       
    15   <xsl:template mode="var_edit" match="text()">
       
    16     <xsl:param name="_indent" select="0"/>
       
    17   </xsl:template>
       
    18   <xsl:template mode="var_debug" match="text()">
       
    19     <xsl:param name="_indent" select="0"/>
       
    20   </xsl:template>
       
    21   <xsl:variable name="project">
       
    22     <xsl:copy-of select="document('project')/project/*"/>
       
    23   </xsl:variable>
       
    24   <xsl:variable name="stdlib">
       
    25     <xsl:copy-of select="document('stdlib')/stdlib/*"/>
       
    26   </xsl:variable>
       
    27   <xsl:variable name="extensions">
       
    28     <xsl:copy-of select="document('extensions')/extensions/*"/>
       
    29   </xsl:variable>
       
    30   <xsl:template name="add_root">
       
    31     <xsl:param name="_indent" select="0"/>
       
    32     <xsl:param name="class"/>
       
    33     <xsl:param name="type"/>
       
    34     <xsl:param name="edit">
       
    35       <xsl:text>true</xsl:text>
       
    36     </xsl:param>
       
    37     <xsl:param name="debug">
       
    38       <xsl:text>true</xsl:text>
       
    39     </xsl:param>
       
    40     <xsl:value-of select="ns:SetRoot($class, $type, $edit, $debug)"/>
       
    41   </xsl:template>
     7   <xsl:template match="ppx:pou">
    42   <xsl:template match="ppx:pou">
     8     <pou>
    43     <xsl:param name="_indent" select="0"/>
     9       <class><xsl:value-of select="@pouType"/></class>
    44     <xsl:call-template name="add_root">
    10       <type><xsl:value-of select="@name"/></type>
    45       <xsl:with-param name="class">
    11       <edit><xsl:text>True</xsl:text></edit>
    46         <xsl:value-of select="@pouType"/>
    12       <debug><xsl:text>True</xsl:text></debug>
    47       </xsl:with-param>
    13       <variables>
    48       <xsl:with-param name="type">
    14         <xsl:apply-templates select="ppx:interface"/>
    49         <xsl:value-of select="@name"/>
    15         <xsl:apply-templates select="ppx:actions/ppx:action | ppx:transitions/ppx:transition" mode="variable_list"/>
    50       </xsl:with-param>
    16       </variables>
    51     </xsl:call-template>
    17     </pou>
    52     <xsl:apply-templates select="ppx:interface">
       
    53       <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
    54     </xsl:apply-templates>
       
    55     <xsl:apply-templates mode="variable_list" select="ppx:actions/ppx:action | ppx:transitions/ppx:transition">
       
    56       <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
    57     </xsl:apply-templates>
    18   </xsl:template>
    58   </xsl:template>
    19   <xsl:template match="ppx:action">
    59   <xsl:template match="ppx:action">
    20     <action>
    60     <xsl:param name="_indent" select="0"/>
    21       <class/>
    61     <xsl:call-template name="add_root">
    22       <type><xsl:text>None</xsl:text></type>
    62       <xsl:with-param name="class">
    23       <edit><xsl:text>True</xsl:text></edit>
    63         <xsl:text>action</xsl:text>
    24       <debug><xsl:text>True</xsl:text></debug>
    64       </xsl:with-param>
    25       <variables>
    65     </xsl:call-template>
    26         <xsl:apply-templates select="ancestor::ppx:pou/child::ppx:interface"/>
    66     <xsl:apply-templates select="ancestor::ppx:pou/child::ppx:interface">
    27       </variables>
    67       <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
    28     </action>
    68     </xsl:apply-templates>
    29   </xsl:template>
    69   </xsl:template>
    30   <xsl:template match="ppx:transition">
    70   <xsl:template match="ppx:transition">
    31     <transition>
    71     <xsl:param name="_indent" select="0"/>
    32       <class/>
    72     <xsl:call-template name="add_root">
    33       <type><xsl:text>None</xsl:text></type>
    73       <xsl:with-param name="class">
    34       <edit><xsl:text>True</xsl:text></edit>
    74         <xsl:text>transition</xsl:text>
    35       <debug><xsl:text>True</xsl:text></debug>
    75       </xsl:with-param>
    36       <variables>
    76     </xsl:call-template>
    37         <xsl:apply-templates select="ancestor::ppx:pou/child::ppx:interface"/>
    77     <xsl:apply-templates select="ancestor::ppx:pou/child::ppx:interface">
    38       </variables>
    78       <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
    39     </transition>
    79     </xsl:apply-templates>
    40   </xsl:template>
    80   </xsl:template>
    41   <xsl:template match="ppx:configuration">
    81   <xsl:template match="ppx:configuration">
    42     <configuration>
    82     <xsl:param name="_indent" select="0"/>
    43       <class/>
    83     <xsl:call-template name="add_root">
    44       <type><xsl:text>None</xsl:text></type>
    84       <xsl:with-param name="class">
    45       <edit><xsl:text>True</xsl:text></edit>
    85         <xsl:text>configuration</xsl:text>
    46       <debug><xsl:text>False</xsl:text></debug>
    86       </xsl:with-param>
    47       <variables>
    87       <xsl:with-param name="debug">
    48         <xsl:apply-templates select="ppx:resource" mode="variable_list"/>
    88         <xsl:text>false</xsl:text>
    49         <xsl:apply-templates select="ppx:globalVars"/>
    89       </xsl:with-param>
    50       </variables>
    90     </xsl:call-template>
    51     </configuration>
    91     <xsl:apply-templates mode="variable_list" select="ppx:resource">
       
    92       <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
    93     </xsl:apply-templates>
       
    94     <xsl:apply-templates select="ppx:globalVars">
       
    95       <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
    96     </xsl:apply-templates>
    52   </xsl:template>
    97   </xsl:template>
    53   <xsl:template match="ppx:resource">
    98   <xsl:template match="ppx:resource">
    54     <resource>
    99     <xsl:param name="_indent" select="0"/>
    55       <class/>
   100     <xsl:call-template name="add_root">
    56       <type><xsl:text>None</xsl:text></type>
   101       <xsl:with-param name="class">
    57       <edit><xsl:text>True</xsl:text></edit>
   102         <xsl:text>resource</xsl:text>
    58       <debug><xsl:text>False</xsl:text></debug>
   103       </xsl:with-param>
    59       <variables>
   104       <xsl:with-param name="debug">
    60         <xsl:apply-templates select="ppx:pouInstance | ppx:task/ppx:pouInstance" mode="variable_list"/>
   105         <xsl:text>false</xsl:text>
    61         <xsl:apply-templates select="ppx:globalVars"/>
   106       </xsl:with-param>
    62       </variables>
   107     </xsl:call-template>
    63     </resource>
   108     <xsl:apply-templates mode="variable_list" select="ppx:pouInstance | ppx:task/ppx:pouInstance">
       
   109       <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
   110     </xsl:apply-templates>
       
   111     <xsl:apply-templates select="ppx:globalVars">
       
   112       <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
   113     </xsl:apply-templates>
       
   114   </xsl:template>
       
   115   <xsl:template name="variables_infos">
       
   116     <xsl:param name="_indent" select="0"/>
       
   117     <xsl:param name="var_class"/>
       
   118     <xsl:for-each select="ppx:variable">
       
   119       <xsl:variable name="class">
       
   120         <xsl:apply-templates mode="var_class" select="ppx:type">
       
   121           <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
   122           <xsl:with-param name="default_class">
       
   123             <xsl:value-of select="$var_class"/>
       
   124           </xsl:with-param>
       
   125         </xsl:apply-templates>
       
   126       </xsl:variable>
       
   127       <xsl:variable name="type">
       
   128         <xsl:apply-templates mode="var_type" select="ppx:type">
       
   129           <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
   130         </xsl:apply-templates>
       
   131       </xsl:variable>
       
   132       <xsl:variable name="edit">
       
   133         <xsl:apply-templates mode="var_edit" select="ppx:type">
       
   134           <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
   135         </xsl:apply-templates>
       
   136       </xsl:variable>
       
   137       <xsl:variable name="debug">
       
   138         <xsl:apply-templates mode="var_debug" select="ppx:type">
       
   139           <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
   140         </xsl:apply-templates>
       
   141       </xsl:variable>
       
   142       <xsl:value-of select="ns:AddVariable(@name, $class, $type, $edit, $debug)"/>
       
   143     </xsl:for-each>
    64   </xsl:template>
   144   </xsl:template>
    65   <xsl:template match="ppx:localVars">
   145   <xsl:template match="ppx:localVars">
    66     <xsl:call-template name="variables_infos">
   146     <xsl:param name="_indent" select="0"/>
    67       <xsl:with-param name="var_class" select="'Local'"/>
   147     <xsl:call-template name="variables_infos">
       
   148       <xsl:with-param name="var_class">
       
   149         <xsl:text>Local</xsl:text>
       
   150       </xsl:with-param>
    68     </xsl:call-template>
   151     </xsl:call-template>
    69   </xsl:template>
   152   </xsl:template>
    70   <xsl:template match="ppx:globalVars">
   153   <xsl:template match="ppx:globalVars">
    71     <xsl:call-template name="variables_infos">
   154     <xsl:param name="_indent" select="0"/>
    72       <xsl:with-param name="var_class" select="'Global'"/>
   155     <xsl:call-template name="variables_infos">
       
   156       <xsl:with-param name="var_class">
       
   157         <xsl:text>Global</xsl:text>
       
   158       </xsl:with-param>
    73     </xsl:call-template>
   159     </xsl:call-template>
    74   </xsl:template>
   160   </xsl:template>
    75   <xsl:template match="ppx:externalVars">
   161   <xsl:template match="ppx:externalVars">
    76     <xsl:call-template name="variables_infos">
   162     <xsl:param name="_indent" select="0"/>
    77       <xsl:with-param name="var_class" select="'External'"/>
   163     <xsl:call-template name="variables_infos">
       
   164       <xsl:with-param name="var_class">
       
   165         <xsl:text>External</xsl:text>
       
   166       </xsl:with-param>
    78     </xsl:call-template>
   167     </xsl:call-template>
    79   </xsl:template>
   168   </xsl:template>
    80   <xsl:template match="ppx:tempVars">
   169   <xsl:template match="ppx:tempVars">
    81     <xsl:call-template name="variables_infos">
   170     <xsl:param name="_indent" select="0"/>
    82       <xsl:with-param name="var_class" select="'Temp'"/>
   171     <xsl:call-template name="variables_infos">
       
   172       <xsl:with-param name="var_class">
       
   173         <xsl:text>Temp</xsl:text>
       
   174       </xsl:with-param>
    83     </xsl:call-template>
   175     </xsl:call-template>
    84   </xsl:template>
   176   </xsl:template>
    85   <xsl:template match="ppx:inputVars">
   177   <xsl:template match="ppx:inputVars">
    86     <xsl:call-template name="variables_infos">
   178     <xsl:param name="_indent" select="0"/>
    87       <xsl:with-param name="var_class" select="'Input'"/>
   179     <xsl:call-template name="variables_infos">
       
   180       <xsl:with-param name="var_class">
       
   181         <xsl:text>Input</xsl:text>
       
   182       </xsl:with-param>
    88     </xsl:call-template>
   183     </xsl:call-template>
    89   </xsl:template>
   184   </xsl:template>
    90   <xsl:template match="ppx:outputVars">
   185   <xsl:template match="ppx:outputVars">
    91     <xsl:call-template name="variables_infos">
   186     <xsl:param name="_indent" select="0"/>
    92       <xsl:with-param name="var_class" select="'Output'"/>
   187     <xsl:call-template name="variables_infos">
       
   188       <xsl:with-param name="var_class">
       
   189         <xsl:text>Output</xsl:text>
       
   190       </xsl:with-param>
    93     </xsl:call-template>
   191     </xsl:call-template>
    94   </xsl:template>
   192   </xsl:template>
    95   <xsl:template match="ppx:inOutVars">
   193   <xsl:template match="ppx:inOutVars">
    96     <xsl:call-template name="variables_infos">
   194     <xsl:param name="_indent" select="0"/>
    97       <xsl:with-param name="var_class" select="'InOut'"/>
   195     <xsl:call-template name="variables_infos">
    98     </xsl:call-template>
   196       <xsl:with-param name="var_class">
    99   </xsl:template>
   197         <xsl:text>InOut</xsl:text>
   100   <xsl:template name="variables_infos">
   198       </xsl:with-param>
   101     <xsl:param name="var_class"/>
   199     </xsl:call-template>
   102 	<xsl:for-each select="ppx:variable">
   200   </xsl:template>
   103       <variable>
   201   <xsl:template name="add_variable">
   104 	    <name><xsl:value-of select="@name"/></name>
   202     <xsl:param name="_indent" select="0"/>
   105 	    <class>
   203     <xsl:param name="name"/>
   106 	      <xsl:apply-templates mode="var_class">
   204     <xsl:param name="class"/>
   107 	        <xsl:with-param name="default_class">
   205     <xsl:param name="type"/>
   108 	          <xsl:value-of select="$var_class"/>
   206     <xsl:param name="edit">
   109 	        </xsl:with-param>
   207       <xsl:text>true</xsl:text>
   110 	      </xsl:apply-templates>
   208     </xsl:param>
   111 	    </class>
   209     <xsl:param name="debug">
   112 	    <type><xsl:apply-templates mode="var_type"/></type>
   210       <xsl:text>true</xsl:text>
   113 	    <edit><xsl:apply-templates mode="var_edit"/></edit>
   211     </xsl:param>
   114 	    <debug><xsl:apply-templates mode="var_debug"/></debug>
   212     <xsl:value-of select="ns:AddVariable($name, $class, $type, $edit, $debug)"/>
   115       </variable>
   213   </xsl:template>
   116     </xsl:for-each>
   214   <xsl:template mode="variable_list" match="ppx:action">
   117   </xsl:template>
   215     <xsl:param name="_indent" select="0"/>
   118   <xsl:template match="ppx:transition" mode="variable_list">
   216     <xsl:call-template name="add_variable">
   119     <transition>
   217       <xsl:with-param name="name">
   120       <name><xsl:value-of select="@name"/></name>
   218         <xsl:value-of select="@name"/>
   121       <class/>
   219       </xsl:with-param>
   122       <type><xsl:text>None</xsl:text></type>
   220       <xsl:with-param name="class">
   123       <edit><xsl:text>True</xsl:text></edit>
   221         <xsl:text>action</xsl:text>
   124       <debug><xsl:text>True</xsl:text></debug>
   222       </xsl:with-param>
   125     </transition>
   223     </xsl:call-template>
   126   </xsl:template>
   224   </xsl:template>
   127   <xsl:template match="ppx:action" mode="variable_list">
   225   <xsl:template mode="variable_list" match="ppx:transition">
   128     <action>
   226     <xsl:param name="_indent" select="0"/>
   129 	  <name><xsl:value-of select="@name"/></name>
   227     <xsl:call-template name="add_variable">
   130 	  <class/>
   228       <xsl:with-param name="name">
   131       <type><xsl:text>None</xsl:text></type>
   229         <xsl:value-of select="@name"/>
   132 	  <edit><xsl:text>True</xsl:text></edit>
   230       </xsl:with-param>
   133       <debug><xsl:text>True</xsl:text></debug>
   231       <xsl:with-param name="class">
   134     </action>
   232         <xsl:text>transition</xsl:text>
   135   </xsl:template>
   233       </xsl:with-param>
   136   <xsl:template match="ppx:resource" mode="variable_list">
   234     </xsl:call-template>
   137     <resource>
   235   </xsl:template>
   138       <name><xsl:value-of select="@name"/></name>
   236   <xsl:template mode="variable_list" match="ppx:resource">
   139       <class/>
   237     <xsl:param name="_indent" select="0"/>
   140       <type><xsl:text>None</xsl:text></type>
   238     <xsl:call-template name="add_variable">
   141       <edit><xsl:text>True</xsl:text></edit>
   239       <xsl:with-param name="name">
   142       <debug><xsl:text>False</xsl:text></debug>
   240         <xsl:value-of select="@name"/>
   143     </resource>
   241       </xsl:with-param>
   144   </xsl:template>
   242       <xsl:with-param name="class">
   145   <xsl:template match="ppx:pouInstance" mode="variable_list">
   243         <xsl:text>resource</xsl:text>
   146     <program>
   244       </xsl:with-param>
   147       <name><xsl:value-of select="@name"/></name>
   245       <xsl:with-param name="debug">
   148       <class/>
   246         <xsl:text>false</xsl:text>
   149       <type><xsl:value-of select="@typeName"/></type>
   247       </xsl:with-param>
   150       <edit><xsl:text>True</xsl:text></edit>
   248     </xsl:call-template>
   151       <debug><xsl:text>True</xsl:text></debug>
   249   </xsl:template>
   152     </program>
   250   <xsl:template mode="variable_list" match="ppx:pouInstance">
   153   </xsl:template>
   251     <xsl:param name="_indent" select="0"/>
   154   <xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:derived" mode="var_class">
   252     <xsl:call-template name="add_variable">
       
   253       <xsl:with-param name="name">
       
   254         <xsl:value-of select="@name"/>
       
   255       </xsl:with-param>
       
   256       <xsl:with-param name="class">
       
   257         <xsl:text>program</xsl:text>
       
   258       </xsl:with-param>
       
   259       <xsl:with-param name="type">
       
   260         <xsl:value-of select="@typeName"/>
       
   261       </xsl:with-param>
       
   262     </xsl:call-template>
       
   263   </xsl:template>
       
   264   <xsl:template mode="var_class" match="*[self::ppx:type or self::ppx:baseType]/ppx:derived">
       
   265     <xsl:param name="_indent" select="0"/>
   155     <xsl:param name="default_class"/>
   266     <xsl:param name="default_class"/>
   156     <ns:pou_class>
   267     <xsl:variable name="type_name" select="@name"/>
   157       <xsl:value-of select="$default_class"/>
   268     <xsl:variable name="pou_infos">
   158     </ns:pou_class>
   269       <xsl:copy-of select="exsl:node-set($project)/ppx:project/ppx:types/ppx:pous/ppx:pou[@name=$type_name] |&#10;                    exsl:node-set($stdlib)/ppx:project/ppx:types/ppx:pous/ppx:pou[@name=$type_name] |&#10;                    exsl:node-set($extensions)/ppx:project/ppx:types/ppx:pous/ppx:pou[@name=$type_name]"/>
   159   </xsl:template>
   270     </xsl:variable>
   160   <xsl:template match="ppx:pou" mode="var_class">
   271     <xsl:choose>
   161     <xsl:param name="default_class"/>
   272       <xsl:when test="$pou_infos != ''">
       
   273         <xsl:apply-templates mode="var_class" select="exsl:node-set($pou_infos)">
       
   274           <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
   275         </xsl:apply-templates>
       
   276       </xsl:when>
       
   277       <xsl:otherwise>
       
   278         <xsl:value-of select="$default_class"/>
       
   279       </xsl:otherwise>
       
   280     </xsl:choose>
       
   281   </xsl:template>
       
   282   <xsl:template mode="var_class" match="ppx:pou">
       
   283     <xsl:param name="_indent" select="0"/>
   162     <xsl:value-of select="@pouType"/>
   284     <xsl:value-of select="@pouType"/>
   163   </xsl:template>
   285   </xsl:template>
   164   <xsl:template match="*[self::ppx:type or self::ppx:baseType]/*" mode="var_class">
   286   <xsl:template mode="var_class" match="*[self::ppx:type or self::ppx:baseType]/*">
       
   287     <xsl:param name="_indent" select="0"/>
   165     <xsl:param name="default_class"/>
   288     <xsl:param name="default_class"/>
   166     <xsl:value-of select="$default_class"/>
   289     <xsl:value-of select="$default_class"/>
   167   </xsl:template>
   290   </xsl:template>
   168   <xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:derived" mode="var_type">
   291   <xsl:template mode="var_type" match="*[self::ppx:type or self::ppx:baseType]/ppx:derived">
       
   292     <xsl:param name="_indent" select="0"/>
   169     <xsl:value-of select="@name"/>
   293     <xsl:value-of select="@name"/>
   170   </xsl:template>
   294   </xsl:template>
   171   <xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:array" mode="var_type">
   295   <xsl:template mode="var_type" match="*[self::ppx:type or self::ppx:baseType]/ppx:array">
       
   296     <xsl:param name="_indent" select="0"/>
   172     <xsl:text>ARRAY [</xsl:text>
   297     <xsl:text>ARRAY [</xsl:text>
   173     <xsl:for-each select="ppx:dimension">
   298     <xsl:for-each select="ppx:dimension">
   174       <xsl:value-of select="@lower"/>
   299       <xsl:value-of select="@lower"/>
   175       <xsl:text>..</xsl:text>
   300       <xsl:text>..</xsl:text>
   176       <xsl:value-of select="@upper"/>
   301       <xsl:value-of select="@upper"/>
   177     </xsl:for-each>
   302     </xsl:for-each>
   178     <xsl:text>] OF </xsl:text>
   303     <xsl:text>] OF </xsl:text>
   179     <xsl:apply-templates select="ppx:baseType" mode="var_type"/>
   304     <xsl:apply-templates mode="var_type" select="ppx:baseType">
   180   </xsl:template>
   305       <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
   181   <xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:string" mode="var_type">
   306     </xsl:apply-templates>
       
   307   </xsl:template>
       
   308   <xsl:template mode="var_type" match="*[self::ppx:type or self::ppx:baseType]/ppx:string">
       
   309     <xsl:param name="_indent" select="0"/>
   182     <xsl:text>STRING</xsl:text>
   310     <xsl:text>STRING</xsl:text>
   183   </xsl:template>
   311   </xsl:template>
   184   <xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:wstring" mode="var_type">
   312   <xsl:template mode="var_type" match="*[self::ppx:type or self::ppx:baseType]/ppx:wstring">
       
   313     <xsl:param name="_indent" select="0"/>
   185     <xsl:text>WSTRING</xsl:text>
   314     <xsl:text>WSTRING</xsl:text>
   186   </xsl:template>
   315   </xsl:template>
   187   <xsl:template match="*[self::ppx:type or self::ppx:baseType]/*" mode="var_type">
   316   <xsl:template mode="var_type" match="*[self::ppx:type or self::ppx:baseType]/*">
       
   317     <xsl:param name="_indent" select="0"/>
   188     <xsl:value-of select="local-name()"/>
   318     <xsl:value-of select="local-name()"/>
   189   </xsl:template>
   319   </xsl:template>
   190   <xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:derived" mode="var_edit">
   320   <xsl:template mode="var_edit" match="*[self::ppx:type or self::ppx:baseType]/ppx:derived">
   191     <ns:is_edited/>
   321     <xsl:param name="_indent" select="0"/>
   192   </xsl:template>
   322     <xsl:variable name="type_name" select="@name"/>
   193   <xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:array" mode="var_edit">
   323     <xsl:variable name="pou_infos">
   194     <xsl:apply-templates select="ppx:baseType" mode="var_edit"/>
   324       <xsl:copy-of select="exsl:node-set($project)/ppx:project/ppx:types/ppx:pous/ppx:pou[@name=$type_name]"/>
   195   </xsl:template>
   325     </xsl:variable>
   196   <xsl:template match="*[self::ppx:type or self::ppx:baseType]/*" mode="var_edit">
   326     <xsl:choose>
   197     <xsl:text>False</xsl:text>
   327       <xsl:when test="$pou_infos != ''">
   198   </xsl:template>
   328         <xsl:text>true</xsl:text>
   199     <xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:derived" mode="var_debug">
   329       </xsl:when>
   200     <ns:is_debugged/>
   330       <xsl:otherwise>
   201   </xsl:template>
   331         <xsl:text>false</xsl:text>
   202   <xsl:template match="ppx:pou" mode="var_debug">
   332       </xsl:otherwise>
   203     <xsl:text>True</xsl:text>
   333     </xsl:choose>
   204   </xsl:template>
   334   </xsl:template>
   205   <xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:array" mode="var_debug">
   335   <xsl:template mode="var_edit" match="*[self::ppx:type or self::ppx:baseType]/ppx:array">
   206     <xsl:text>False</xsl:text>
   336     <xsl:param name="_indent" select="0"/>
   207   </xsl:template>
   337     <xsl:apply-templates mode="var_edit" select="ppx:baseType">
   208   <xsl:template match="*[self::ppx:type or self::ppx:baseType]/ppx:struct" mode="var_debug">
   338       <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
   209     <xsl:text>False</xsl:text>
   339     </xsl:apply-templates>
   210   </xsl:template>
   340   </xsl:template>
   211   <xsl:template match="*[self::ppx:type or self::ppx:baseType]/*" mode="var_debug">
   341   <xsl:template mode="var_edit" match="*[self::ppx:type or self::ppx:baseType]/*">
   212     <xsl:text>True</xsl:text>
   342     <xsl:param name="_indent" select="0"/>
   213   </xsl:template>
   343     <xsl:text>false</xsl:text>
   214   <xsl:template match="text()"/>
   344   </xsl:template>
   215   <xsl:template match="text()" mode="var_class"/>
   345   <xsl:template mode="var_debug" match="*[self::ppx:type or self::ppx:baseType]/ppx:derived">
   216   <xsl:template match="text()" mode="var_type"/>
   346     <xsl:param name="_indent" select="0"/>
   217   <xsl:template match="text()" mode="var_edit"/>
   347     <xsl:variable name="type_name" select="@name"/>
   218   <xsl:template match="text()" mode="var_debug"/>
   348     <xsl:variable name="datatype_infos">
       
   349       <xsl:copy-of select="exsl:node-set($project)/ppx:project/ppx:types/ppx:pous/ppx:pou[@name=$type_name] |&#10;                    exsl:node-set($project)/ppx:project/ppx:types/ppx:dataTypes/ppx:dataType[@name=$type_name] |&#10;                    exsl:node-set($stdlib)/ppx:project/ppx:types/ppx:dataTypes/ppx:dataType[@name=$type_name] |&#10;                    exsl:node-set($extensions)/ppx:project/ppx:types/ppx:dataTypes/ppx:dataType[@name=$type_name]"/>
       
   350     </xsl:variable>
       
   351     <xsl:choose>
       
   352       <xsl:when test="$datatype_infos != ''">
       
   353         <xsl:apply-templates mode="var_debug" select="exsl:node-set($datatype_infos)">
       
   354           <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
   355         </xsl:apply-templates>
       
   356       </xsl:when>
       
   357       <xsl:otherwise>
       
   358         <xsl:text>false</xsl:text>
       
   359       </xsl:otherwise>
       
   360     </xsl:choose>
       
   361   </xsl:template>
       
   362   <xsl:template mode="var_debug" match="ppx:pou">
       
   363     <xsl:param name="_indent" select="0"/>
       
   364     <xsl:text>true</xsl:text>
       
   365   </xsl:template>
       
   366   <xsl:template mode="var_debug" match="*[self::ppx:type or self::ppx:baseType]/ppx:array">
       
   367     <xsl:param name="_indent" select="0"/>
       
   368     <xsl:text>false</xsl:text>
       
   369   </xsl:template>
       
   370   <xsl:template mode="var_debug" match="*[self::ppx:type or self::ppx:baseType]/ppx:struct">
       
   371     <xsl:param name="_indent" select="0"/>
       
   372     <xsl:text>false</xsl:text>
       
   373   </xsl:template>
       
   374   <xsl:template mode="var_debug" match="*[self::ppx:type or self::ppx:baseType]/*">
       
   375     <xsl:param name="_indent" select="0"/>
       
   376     <xsl:text>true</xsl:text>
       
   377   </xsl:template>
   219 </xsl:stylesheet>
   378 </xsl:stylesheet>