plcopen/instance_tagname.xslt
changeset 1936 b85b13b1c2ec
parent 1351 a546a63ce1bf
child 1950 752ec68da94d
equal deleted inserted replaced
1935:f2b0d849ea77 1936:b85b13b1c2ec
     1 <?xml version="1.0"?>
     1 <?xml version="1.0"?>
     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="instance_tagname_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">
     2 <xsl:stylesheet xmlns:exsl="http://exslt.org/common" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:ppx="http://www.plcopen.org/xml/tc6_0201" xmlns:ns="instance_tagname_ns" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" extension-element-prefixes="ns" version="1.0" exclude-result-prefixes="ns">
     3   <xsl:output method="xml"/>
     3   <xsl:output method="xml"/>
     4   <xsl:variable name="space" select="'                                                                                                                                                                                                        '"/>
       
     5   <xsl:param name="autoindent" select="4"/>
       
     6   <xsl:param name="instance_path"/>
     4   <xsl:param name="instance_path"/>
     7   <xsl:variable name="project">
     5   <xsl:variable name="project">
     8     <xsl:copy-of select="document('project')/project/*"/>
     6     <xsl:copy-of select="document('project')/project/*"/>
     9   </xsl:variable>
     7   </xsl:variable>
    10   <xsl:variable name="stdlib">
     8   <xsl:variable name="stdlib">
    12   </xsl:variable>
    10   </xsl:variable>
    13   <xsl:variable name="extensions">
    11   <xsl:variable name="extensions">
    14     <xsl:copy-of select="document('extensions')/extensions/*"/>
    12     <xsl:copy-of select="document('extensions')/extensions/*"/>
    15   </xsl:variable>
    13   </xsl:variable>
    16   <xsl:template name="element_name">
    14   <xsl:template name="element_name">
    17     <xsl:param name="_indent" select="0"/>
       
    18     <xsl:param name="path"/>
    15     <xsl:param name="path"/>
    19     <xsl:choose>
    16     <xsl:choose>
    20       <xsl:when test="contains($path,'.')">
    17       <xsl:when test="contains($path,'.')">
    21         <xsl:value-of select="substring-before($path,'.')"/>
    18         <xsl:value-of select="substring-before($path,'.')"/>
    22       </xsl:when>
    19       </xsl:when>
    24         <xsl:value-of select="$path"/>
    21         <xsl:value-of select="$path"/>
    25       </xsl:otherwise>
    22       </xsl:otherwise>
    26     </xsl:choose>
    23     </xsl:choose>
    27   </xsl:template>
    24   </xsl:template>
    28   <xsl:template name="next_path">
    25   <xsl:template name="next_path">
    29     <xsl:param name="_indent" select="0"/>
       
    30     <xsl:param name="path"/>
    26     <xsl:param name="path"/>
    31     <xsl:choose>
    27     <xsl:choose>
    32       <xsl:when test="contains($path,'.')">
    28       <xsl:when test="contains($path,'.')">
    33         <xsl:value-of select="substring-after($path,'.')"/>
    29         <xsl:value-of select="substring-after($path,'.')"/>
    34       </xsl:when>
    30       </xsl:when>
    35     </xsl:choose>
    31     </xsl:choose>
    36   </xsl:template>
    32   </xsl:template>
    37   <xsl:template match="ppx:project">
    33   <xsl:template match="ppx:project">
    38     <xsl:param name="_indent" select="0"/>
       
    39     <xsl:variable name="config_name">
    34     <xsl:variable name="config_name">
    40       <xsl:call-template name="element_name">
    35       <xsl:call-template name="element_name">
    41         <xsl:with-param name="path" select="$instance_path"/>
    36         <xsl:with-param name="path" select="$instance_path"/>
    42       </xsl:call-template>
    37       </xsl:call-template>
    43     </xsl:variable>
    38     </xsl:variable>
    44     <xsl:apply-templates select="ppx:instances/ppx:configurations/ppx:configuration[@name=$config_name]">
    39     <xsl:apply-templates select="ppx:instances/ppx:configurations/ppx:configuration[@name=$config_name]">
    45       <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
    46       <xsl:with-param name="element_path">
    40       <xsl:with-param name="element_path">
    47         <xsl:call-template name="next_path">
    41         <xsl:call-template name="next_path">
    48           <xsl:with-param name="path" select="$instance_path"/>
    42           <xsl:with-param name="path" select="$instance_path"/>
    49         </xsl:call-template>
    43         </xsl:call-template>
    50       </xsl:with-param>
    44       </xsl:with-param>
    51     </xsl:apply-templates>
    45     </xsl:apply-templates>
    52   </xsl:template>
    46   </xsl:template>
    53   <xsl:template match="ppx:configuration">
    47   <xsl:template match="ppx:configuration">
    54     <xsl:param name="_indent" select="0"/>
       
    55     <xsl:param name="element_path"/>
    48     <xsl:param name="element_path"/>
    56     <xsl:choose>
    49     <xsl:choose>
    57       <xsl:when test="$element_path!=''">
    50       <xsl:when test="$element_path!=''">
    58         <xsl:variable name="child_name">
    51         <xsl:variable name="child_name">
    59           <xsl:call-template name="element_name">
    52           <xsl:call-template name="element_name">
    60             <xsl:with-param name="path" select="$element_path"/>
    53             <xsl:with-param name="path" select="$element_path"/>
    61           </xsl:call-template>
    54           </xsl:call-template>
    62         </xsl:variable>
    55         </xsl:variable>
    63         <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]">
    56         <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]">
    64           <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
    65           <xsl:with-param name="element_path">
    57           <xsl:with-param name="element_path">
    66             <xsl:call-template name="next_path">
    58             <xsl:call-template name="next_path">
    67               <xsl:with-param name="path" select="$element_path"/>
    59               <xsl:with-param name="path" select="$element_path"/>
    68             </xsl:call-template>
    60             </xsl:call-template>
    69           </xsl:with-param>
    61           </xsl:with-param>
    73         <xsl:value-of select="ns:ConfigTagName(@name)"/>
    65         <xsl:value-of select="ns:ConfigTagName(@name)"/>
    74       </xsl:otherwise>
    66       </xsl:otherwise>
    75     </xsl:choose>
    67     </xsl:choose>
    76   </xsl:template>
    68   </xsl:template>
    77   <xsl:template match="ppx:resource">
    69   <xsl:template match="ppx:resource">
    78     <xsl:param name="_indent" select="0"/>
       
    79     <xsl:param name="element_path"/>
    70     <xsl:param name="element_path"/>
    80     <xsl:choose>
    71     <xsl:choose>
    81       <xsl:when test="$element_path!=''">
    72       <xsl:when test="$element_path!=''">
    82         <xsl:variable name="child_name">
    73         <xsl:variable name="child_name">
    83           <xsl:call-template name="element_name">
    74           <xsl:call-template name="element_name">
    85               <xsl:value-of select="$element_path"/>
    76               <xsl:value-of select="$element_path"/>
    86             </xsl:with-param>
    77             </xsl:with-param>
    87           </xsl:call-template>
    78           </xsl:call-template>
    88         </xsl:variable>
    79         </xsl:variable>
    89         <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]">
    80         <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]">
    90           <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
    91           <xsl:with-param name="element_path">
    81           <xsl:with-param name="element_path">
    92             <xsl:call-template name="next_path">
    82             <xsl:call-template name="next_path">
    93               <xsl:with-param name="path" select="$element_path"/>
    83               <xsl:with-param name="path" select="$element_path"/>
    94             </xsl:call-template>
    84             </xsl:call-template>
    95           </xsl:with-param>
    85           </xsl:with-param>
    99         <xsl:value-of select="ns:ResourceTagName(ancestor::ppx:configuration/@name, @name)"/>
    89         <xsl:value-of select="ns:ResourceTagName(ancestor::ppx:configuration/@name, @name)"/>
   100       </xsl:otherwise>
    90       </xsl:otherwise>
   101     </xsl:choose>
    91     </xsl:choose>
   102   </xsl:template>
    92   </xsl:template>
   103   <xsl:template match="ppx:pouInstance">
    93   <xsl:template match="ppx:pouInstance">
   104     <xsl:param name="_indent" select="0"/>
       
   105     <xsl:param name="element_path"/>
    94     <xsl:param name="element_path"/>
   106     <xsl:variable name="type_name">
    95     <xsl:variable name="type_name">
   107       <xsl:value-of select="@typeName"/>
    96       <xsl:value-of select="@typeName"/>
   108     </xsl:variable>
    97     </xsl:variable>
   109     <xsl:apply-templates 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:pous/ppx:pou[@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:pous/ppx:pou[@name=$type_name] |&#10;                 exsl:node-set($extensions)/ppx:project/ppx:types/ppx:dataTypes/ppx:dataType[@name=$type_name]">
    98     <xsl:apply-templates 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:pous/ppx:pou[@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:pous/ppx:pou[@name=$type_name] |&#10;                 exsl:node-set($extensions)/ppx:project/ppx:types/ppx:dataTypes/ppx:dataType[@name=$type_name]">
   110       <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
   111       <xsl:with-param name="element_path" select="$element_path"/>
    99       <xsl:with-param name="element_path" select="$element_path"/>
   112     </xsl:apply-templates>
   100     </xsl:apply-templates>
   113   </xsl:template>
   101   </xsl:template>
   114   <xsl:template match="ppx:pou">
   102   <xsl:template match="ppx:pou">
   115     <xsl:param name="_indent" select="0"/>
       
   116     <xsl:param name="element_path"/>
   103     <xsl:param name="element_path"/>
   117     <xsl:choose>
   104     <xsl:choose>
   118       <xsl:when test="$element_path!=''">
   105       <xsl:when test="$element_path!=''">
   119         <xsl:variable name="child_name">
   106         <xsl:variable name="child_name">
   120           <xsl:call-template name="element_name">
   107           <xsl:call-template name="element_name">
   121             <xsl:with-param name="path" select="$element_path"/>
   108             <xsl:with-param name="path" select="$element_path"/>
   122           </xsl:call-template>
   109           </xsl:call-template>
   123         </xsl:variable>
   110         </xsl:variable>
   124         <xsl:apply-templates select="ppx:interface/*/ppx:variable[@name=$child_name]/ppx:type/*[self::ppx:derived or self::ppx:struct or self::ppx:array]">
   111         <xsl:apply-templates select="ppx:interface/*/ppx:variable[@name=$child_name]/ppx:type/*[self::ppx:derived or self::ppx:struct or self::ppx:array]">
   125           <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
   126           <xsl:with-param name="element_path">
   112           <xsl:with-param name="element_path">
   127             <xsl:call-template name="next_path">
   113             <xsl:call-template name="next_path">
   128               <xsl:with-param name="path" select="$element_path"/>
   114               <xsl:with-param name="path" select="$element_path"/>
   129             </xsl:call-template>
   115             </xsl:call-template>
   130           </xsl:with-param>
   116           </xsl:with-param>
   131         </xsl:apply-templates>
   117         </xsl:apply-templates>
   132         <xsl:apply-templates select="ppx:actions/ppx:action[@name=$child_name] | ppx:transitions/ppx:transition[@name=$child_name]">
   118         <xsl:apply-templates select="ppx:actions/ppx:action[@name=$child_name] | ppx:transitions/ppx:transition[@name=$child_name]"/>
   133           <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
   134         </xsl:apply-templates>
       
   135       </xsl:when>
   119       </xsl:when>
   136       <xsl:otherwise>
   120       <xsl:otherwise>
   137         <xsl:variable name="name">
   121         <xsl:variable name="name">
   138           <xsl:value-of select="@name"/>
   122           <xsl:value-of select="@name"/>
   139         </xsl:variable>
   123         </xsl:variable>
   140         <xsl:value-of select="ns:PouTagName($name)"/>
   124         <xsl:value-of select="ns:PouTagName($name)"/>
   141       </xsl:otherwise>
   125       </xsl:otherwise>
   142     </xsl:choose>
   126     </xsl:choose>
   143   </xsl:template>
   127   </xsl:template>
   144   <xsl:template match="ppx:action">
   128   <xsl:template match="ppx:action">
   145     <xsl:param name="_indent" select="0"/>
       
   146     <xsl:value-of select="ns:ActionTagName(ancestor::ppx:pou/@name, @name)"/>
   129     <xsl:value-of select="ns:ActionTagName(ancestor::ppx:pou/@name, @name)"/>
   147   </xsl:template>
   130   </xsl:template>
   148   <xsl:template match="ppx:transition">
   131   <xsl:template match="ppx:transition">
   149     <xsl:param name="_indent" select="0"/>
       
   150     <xsl:value-of select="ns:TransitionTagName(ancestor::ppx:pou/@name, @name)"/>
   132     <xsl:value-of select="ns:TransitionTagName(ancestor::ppx:pou/@name, @name)"/>
   151   </xsl:template>
   133   </xsl:template>
   152   <xsl:template match="ppx:dataType">
   134   <xsl:template match="ppx:dataType">
   153     <xsl:param name="_indent" select="0"/>
       
   154     <xsl:param name="element_path"/>
   135     <xsl:param name="element_path"/>
   155     <xsl:apply-templates select="ppx:baseType/*[self::ppx:derived or self::ppx:struct or self::ppx:array]">
   136     <xsl:apply-templates select="ppx:baseType/*[self::ppx:derived or self::ppx:struct or self::ppx:array]">
   156       <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
   157       <xsl:with-param name="element_path" select="$element_path"/>
   137       <xsl:with-param name="element_path" select="$element_path"/>
   158     </xsl:apply-templates>
   138     </xsl:apply-templates>
   159   </xsl:template>
   139   </xsl:template>
   160   <xsl:template match="ppx:derived">
   140   <xsl:template match="ppx:derived">
   161     <xsl:param name="_indent" select="0"/>
       
   162     <xsl:param name="element_path"/>
   141     <xsl:param name="element_path"/>
   163     <xsl:variable name="type_name">
   142     <xsl:variable name="type_name">
   164       <xsl:value-of select="@name"/>
   143       <xsl:value-of select="@name"/>
   165     </xsl:variable>
   144     </xsl:variable>
   166     <xsl:apply-templates 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:pous/ppx:pou[@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:pous/ppx:pou[@name=$type_name] |&#10;                 exsl:node-set($extensions)/ppx:project/ppx:types/ppx:dataTypes/ppx:dataType[@name=$type_name]">
   145     <xsl:apply-templates 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:pous/ppx:pou[@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:pous/ppx:pou[@name=$type_name] |&#10;                 exsl:node-set($extensions)/ppx:project/ppx:types/ppx:dataTypes/ppx:dataType[@name=$type_name]">
   167       <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
   168       <xsl:with-param name="element_path" select="$element_path"/>
   146       <xsl:with-param name="element_path" select="$element_path"/>
   169     </xsl:apply-templates>
   147     </xsl:apply-templates>
   170   </xsl:template>
   148   </xsl:template>
   171   <xsl:template match="ppx:array">
   149   <xsl:template match="ppx:array">
   172     <xsl:param name="_indent" select="0"/>
       
   173     <xsl:param name="element_path"/>
   150     <xsl:param name="element_path"/>
   174     <xsl:apply-templates select="ppx:baseType/*[self::ppx:derived or self::ppx:struct or self::ppx:array]">
   151     <xsl:apply-templates select="ppx:baseType/*[self::ppx:derived or self::ppx:struct or self::ppx:array]">
   175       <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
   176       <xsl:with-param name="element_path" select="$element_path"/>
   152       <xsl:with-param name="element_path" select="$element_path"/>
   177     </xsl:apply-templates>
   153     </xsl:apply-templates>
   178   </xsl:template>
   154   </xsl:template>
   179   <xsl:template match="ppx:struct">
   155   <xsl:template match="ppx:struct">
   180     <xsl:param name="_indent" select="0"/>
       
   181     <xsl:param name="element_path"/>
   156     <xsl:param name="element_path"/>
   182     <xsl:variable name="child_name">
   157     <xsl:variable name="child_name">
   183       <xsl:call-template name="element_name">
   158       <xsl:call-template name="element_name">
   184         <xsl:with-param name="path" select="$element_path"/>
   159         <xsl:with-param name="path" select="$element_path"/>
   185       </xsl:call-template>
   160       </xsl:call-template>
   186     </xsl:variable>
   161     </xsl:variable>
   187     <xsl:apply-templates select="ppx:variable[@name=$child_name]/ppx:type/*[self::ppx:derived or self::ppx:struct or self::ppx:array]">
   162     <xsl:apply-templates select="ppx:variable[@name=$child_name]/ppx:type/*[self::ppx:derived or self::ppx:struct or self::ppx:array]">
   188       <xsl:with-param name="_indent" select="$_indent + (1) * $autoindent"/>
       
   189       <xsl:with-param name="element_path">
   163       <xsl:with-param name="element_path">
   190         <xsl:call-template name="next_path">
   164         <xsl:call-template name="next_path">
   191           <xsl:with-param name="path" select="$element_path"/>
   165           <xsl:with-param name="path" select="$element_path"/>
   192         </xsl:call-template>
   166         </xsl:call-template>
   193       </xsl:with-param>
   167       </xsl:with-param>