plcopen/instances_path.xslt
author Edouard Tisserant
Tue, 24 Sep 2019 11:55:59 +0200
changeset 2626 39d78c530cbb
parent 1949 c266fbaae0f6
child 3801 6839dbb9a1df
permissions -rw-r--r--
Fixed unitialized parameter in instances_path stylesheet, leading to
calls to add_instance with no data when passing datatypes insteatd of project
root. That bug was making exceptions (for exemple when editing type) when
having arrays of derivated types in project.
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
     1
<?xml version="1.0"?>
1939
db478d17bc3a Added a class to speedup all XSLT queries. WIP, now only for instances_path.xslt / GetInstanceList()
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1938
diff changeset
     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="beremiz" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" extension-element-prefixes="ns" version="1.0" exclude-result-prefixes="ns">
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
     3
  <xsl:output method="xml"/>
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
     4
  <xsl:param name="instance_type"/>
1936
b85b13b1c2ec YSLT auto indent trick is useless here, added yslt_noindent.yml2, regenerated XSLT files
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1352
diff changeset
     5
  <xsl:template match="text()"/>
1937
986dbad48ab7 This should really help GetInstanceList to perform better: resolver removed, no more deepcopy, no more useless xml serialization, no more node-set() calls.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1936
diff changeset
     6
  <xsl:variable name="project" select="ns:GetProject()"/>
986dbad48ab7 This should really help GetInstanceList to perform better: resolver removed, no more deepcopy, no more useless xml serialization, no more node-set() calls.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1936
diff changeset
     7
  <xsl:variable name="stdlib" select="ns:GetStdLibs()"/>
986dbad48ab7 This should really help GetInstanceList to perform better: resolver removed, no more deepcopy, no more useless xml serialization, no more node-set() calls.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1936
diff changeset
     8
  <xsl:variable name="extensions" select="ns:GetExtensions()"/>
1949
c266fbaae0f6 Better writing of some xpath added in previous commits about XSLT optimization.
Edouard Tisserant
parents: 1946
diff changeset
     9
  <xsl:variable name="all_types" select="($project | $stdlib | $extensions)/ppx:types"/>
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    10
  <xsl:template match="ppx:project">
1938
87136f8697e3 Stripped useless node creation in instances_path stylesheet.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1937
diff changeset
    11
    <xsl:apply-templates select="ppx:instances/ppx:configurations/ppx:configuration"/>
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    12
  </xsl:template>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    13
  <xsl:template match="ppx:configuration">
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    14
    <xsl:apply-templates select="ppx:globalVars/ppx:variable[ppx:type/ppx:derived] | ppx:resource">
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    15
      <xsl:with-param name="parent_path">
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    16
        <xsl:value-of select="@name"/>
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    17
      </xsl:with-param>
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    18
    </xsl:apply-templates>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    19
  </xsl:template>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    20
  <xsl:template match="ppx:resource">
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    21
    <xsl:param name="parent_path"/>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    22
    <xsl:variable name="resource_path">
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    23
      <xsl:value-of select="$parent_path"/>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    24
      <xsl:text>.</xsl:text>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    25
      <xsl:value-of select="@name"/>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    26
    </xsl:variable>
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    27
    <xsl:apply-templates select="ppx:globalVars/ppx:variable[ppx:type/ppx:derived] | ppx:pouInstance | ppx:task/ppx:pouInstance">
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    28
      <xsl:with-param name="parent_path">
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    29
        <xsl:value-of select="$resource_path"/>
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    30
      </xsl:with-param>
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    31
    </xsl:apply-templates>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    32
  </xsl:template>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    33
  <xsl:template match="ppx:pouInstance">
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    34
    <xsl:param name="parent_path"/>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    35
    <xsl:variable name="pou_instance_path">
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    36
      <xsl:value-of select="$parent_path"/>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    37
      <xsl:text>.</xsl:text>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    38
      <xsl:value-of select="@name"/>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    39
    </xsl:variable>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    40
    <xsl:choose>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    41
      <xsl:when test="@typeName=$instance_type">
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    42
        <xsl:value-of select="ns:AddInstance($pou_instance_path)"/>
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    43
      </xsl:when>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    44
      <xsl:otherwise>
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    45
        <xsl:variable name="type_name">
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    46
          <xsl:value-of select="@typeName"/>
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    47
        </xsl:variable>
1949
c266fbaae0f6 Better writing of some xpath added in previous commits about XSLT optimization.
Edouard Tisserant
parents: 1946
diff changeset
    48
        <xsl:apply-templates select="$all_types/ppx:pous/ppx:pou[@name=$type_name] |                          $all_types/ppx:dataTypes/ppx:dataType[@name=$type_name]">
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    49
          <xsl:with-param name="instance_path">
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    50
            <xsl:value-of select="$pou_instance_path"/>
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    51
          </xsl:with-param>
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    52
        </xsl:apply-templates>
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    53
      </xsl:otherwise>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    54
    </xsl:choose>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    55
  </xsl:template>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    56
  <xsl:template match="ppx:pou">
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    57
    <xsl:param name="instance_path"/>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    58
    <xsl:apply-templates select="ppx:interface/*/ppx:variable[ppx:type/ppx:derived]">
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    59
      <xsl:with-param name="parent_path">
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    60
        <xsl:value-of select="$instance_path"/>
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    61
      </xsl:with-param>
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    62
    </xsl:apply-templates>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    63
  </xsl:template>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    64
  <xsl:template match="ppx:dataType">
2626
39d78c530cbb Fixed unitialized parameter in instances_path stylesheet, leading to
Edouard Tisserant
parents: 1949
diff changeset
    65
    <xsl:param name="instance_path" select="concat('#',@name)"/>
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    66
    <xsl:apply-templates select="ppx:baseType/*[self::ppx:derived or self::ppx:struct or self::ppx:array]">
2626
39d78c530cbb Fixed unitialized parameter in instances_path stylesheet, leading to
Edouard Tisserant
parents: 1949
diff changeset
    67
      <xsl:with-param name="variable_path">
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    68
        <xsl:value-of select="$instance_path"/>
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    69
      </xsl:with-param>
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    70
    </xsl:apply-templates>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    71
  </xsl:template>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    72
  <xsl:template match="ppx:variable">
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    73
    <xsl:param name="parent_path"/>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    74
    <xsl:variable name="variable_path">
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    75
      <xsl:value-of select="$parent_path"/>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    76
      <xsl:text>.</xsl:text>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    77
      <xsl:value-of select="@name"/>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    78
    </xsl:variable>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    79
    <xsl:apply-templates select="ppx:type/ppx:derived">
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    80
      <xsl:with-param name="variable_path">
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    81
        <xsl:value-of select="$variable_path"/>
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    82
      </xsl:with-param>
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    83
    </xsl:apply-templates>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    84
  </xsl:template>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    85
  <xsl:template match="ppx:derived">
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    86
    <xsl:param name="variable_path"/>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    87
    <xsl:choose>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    88
      <xsl:when test="@name=$instance_type">
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    89
        <xsl:value-of select="ns:AddInstance($variable_path)"/>
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    90
      </xsl:when>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    91
      <xsl:otherwise>
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    92
        <xsl:variable name="type_name">
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    93
          <xsl:value-of select="@name"/>
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    94
        </xsl:variable>
1949
c266fbaae0f6 Better writing of some xpath added in previous commits about XSLT optimization.
Edouard Tisserant
parents: 1946
diff changeset
    95
        <xsl:apply-templates select="$all_types/ppx:pous/ppx:pou[@name=$type_name] |                          $all_types/ppx:dataTypes/ppx:dataType[@name=$type_name]">
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    96
          <xsl:with-param name="instance_path">
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
    97
            <xsl:value-of select="$variable_path"/>
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    98
          </xsl:with-param>
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
    99
        </xsl:apply-templates>
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
   100
      </xsl:otherwise>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
   101
    </xsl:choose>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
   102
  </xsl:template>
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
   103
  <xsl:template match="ppx:struct">
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
   104
    <xsl:param name="variable_path"/>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
   105
    <xsl:for-each select="ppx:variable[ppx:type/ppx:derived or ppx:type/ppx:struct or ppx:type/ppx:array]">
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
   106
      <xsl:variable name="element_path">
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
   107
        <xsl:value-of select="$variable_path"/>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
   108
        <xsl:text>.</xsl:text>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
   109
        <xsl:value-of select="@name"/>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
   110
      </xsl:variable>
2626
39d78c530cbb Fixed unitialized parameter in instances_path stylesheet, leading to
Edouard Tisserant
parents: 1949
diff changeset
   111
      <xsl:apply-templates select="ppx:type/*[self::ppx:derived or self::ppx:struct or self::ppx:array]">
39d78c530cbb Fixed unitialized parameter in instances_path stylesheet, leading to
Edouard Tisserant
parents: 1949
diff changeset
   112
        <xsl:with-param name="variable_path">
39d78c530cbb Fixed unitialized parameter in instances_path stylesheet, leading to
Edouard Tisserant
parents: 1949
diff changeset
   113
          <xsl:value-of select="$element_path"/>
39d78c530cbb Fixed unitialized parameter in instances_path stylesheet, leading to
Edouard Tisserant
parents: 1949
diff changeset
   114
        </xsl:with-param>
39d78c530cbb Fixed unitialized parameter in instances_path stylesheet, leading to
Edouard Tisserant
parents: 1949
diff changeset
   115
      </xsl:apply-templates>
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
   116
    </xsl:for-each>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
   117
  </xsl:template>
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
   118
  <xsl:template match="ppx:array">
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
   119
    <xsl:param name="variable_path"/>
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
   120
    <xsl:apply-templates select="ppx:baseType/*[self::ppx:derived or self::ppx:struct or self::ppx:array]">
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
   121
      <xsl:with-param name="variable_path">
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
   122
        <xsl:value-of select="$variable_path"/>
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
   123
      </xsl:with-param>
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
   124
    </xsl:apply-templates>
1319
748347102c97 Replaced old list of pou instance in project generating process by xslt stylesheet
Laurent Bessard
parents:
diff changeset
   125
  </xsl:template>
1350
7280349a3375 Fixed pou instance path list computing stylesheet
Laurent Bessard
parents: 1319
diff changeset
   126
</xsl:stylesheet>