edouard@1936: include yslt_noindent.yml2
edouard@1936: istylesheet xmlns:ppx="http://www.plcopen.org/xml/tc6_0201"
Laurent@1350:             xmlns:xhtml="http://www.w3.org/1999/xhtml"
edouard@1939:             xmlns:ns="beremiz" 
Laurent@1350:             extension-element-prefixes="ns" 
Laurent@1350:             exclude-result-prefixes="ns" {
Laurent@1350:     
Laurent@1350:     param "instance_type";
Laurent@1350:     
Laurent@1350:     template "text()";
Laurent@1350:     
edouard@1937:     variable "project", "ns:GetProject()";
Laurent@1350:     
edouard@1937:     variable "stdlib", "ns:GetStdLibs()";
edouard@1937: 
edouard@1937:     variable "extensions", "ns:GetExtensions()";
edouard@1937: 
Edouard@1949:     variable "all_types", "($project | $stdlib | $extensions)/ppx:types";
edouard@1939: 
Laurent@1350:     template "ppx:project" {
edouard@1938:         apply "ppx:instances/ppx:configurations/ppx:configuration";
Laurent@1350:     }
Laurent@1350:     
Laurent@1350:     template "ppx:configuration" {
Laurent@1350:         apply "ppx:globalVars/ppx:variable[ppx:type/ppx:derived] | ppx:resource" {
Laurent@1350:             with "parent_path" > «@name»
Laurent@1350:         }
Laurent@1350:     }
Laurent@1350:     
Laurent@1350:     template "ppx:resource" {
Laurent@1350:         param "parent_path";
Laurent@1350:         variable "resource_path" > «$parent_path».«@name»
Laurent@1350:         apply "ppx:globalVars/ppx:variable[ppx:type/ppx:derived] | ppx:pouInstance | ppx:task/ppx:pouInstance" {
Laurent@1350:             with "parent_path" > «$resource_path»
Laurent@1350:         }
Laurent@1350:     }
Laurent@1350:     
Laurent@1350:     template "ppx:pouInstance" {
Laurent@1350:         param "parent_path";
Laurent@1350:         variable "pou_instance_path" > «$parent_path».«@name»
Laurent@1350:         choose {
Laurent@1350:             when "@typeName=$instance_type" {
Laurent@1350:                 value "ns:AddInstance($pou_instance_path)";
Laurent@1350:             }
Laurent@1350:             otherwise {
Laurent@1350:                 variable "type_name" > «@typeName»
Edouard@1949:                 apply """$all_types/ppx:pous/ppx:pou[@name=$type_name] | \
Edouard@1949:                          $all_types/ppx:dataTypes/ppx:dataType[@name=$type_name]""" {
Laurent@1350:                     with "instance_path" > «$pou_instance_path»
Laurent@1350:                 }
Laurent@1350:             }
Laurent@1350:         }
Laurent@1350:     }
Laurent@1350:     
Laurent@1350:     template "ppx:pou" {
Laurent@1350:         param "instance_path";
Laurent@1350:         apply "ppx:interface/*/ppx:variable[ppx:type/ppx:derived]" {
Laurent@1350:             with "parent_path" > «$instance_path»
Laurent@1350:         }
Laurent@1350:     }
Laurent@1350:     
Laurent@1350:     template "ppx:dataType" {
Edouard@2626:         param "instance_path","concat('#',@name)";
Laurent@1350:         apply "ppx:baseType/*[self::ppx:derived or self::ppx:struct or self::ppx:array]" {
Edouard@2626:             with "variable_path" > «$instance_path»
Laurent@1350:         }
Laurent@1350:     }
Laurent@1350:     
Laurent@1350:     template "ppx:variable" {
Laurent@1350:         param "parent_path";
Laurent@1350:         variable "variable_path" > «$parent_path».«@name»
Laurent@1350:         apply "ppx:type/ppx:derived" {
Laurent@1350:             with "variable_path" > «$variable_path»
Laurent@1350:         }
Laurent@1350:     }
Laurent@1350:     
Laurent@1350:     template "ppx:derived" {
Laurent@1350:         param "variable_path";
Laurent@1350:         choose {
Laurent@1350:             when "@name=$instance_type" {
Laurent@1350:                 value "ns:AddInstance($variable_path)";
Laurent@1350:             }
Laurent@1350:             otherwise {
Laurent@1350:                 variable "type_name" > «@name»
Edouard@1949:                 apply """$all_types/ppx:pous/ppx:pou[@name=$type_name] | \
Edouard@1949:                          $all_types/ppx:dataTypes/ppx:dataType[@name=$type_name]""" {
Laurent@1350:                     with "instance_path" > «$variable_path»
Laurent@1350:                 }
Laurent@1350:             }
Laurent@1350:         }
Laurent@1350:     }
Laurent@1350:     
Laurent@1350:     template "ppx:struct" {
Laurent@1350:         param "variable_path";
Laurent@1350:         foreach "ppx:variable[ppx:type/ppx:derived or ppx:type/ppx:struct or ppx:type/ppx:array]" {
Laurent@1350:             variable "element_path" > «$variable_path».«@name»
Edouard@2626:             apply "ppx:type/*[self::ppx:derived or self::ppx:struct or self::ppx:array]" {
Edouard@2626:                 with "variable_path" > «$element_path»
Edouard@2626:             }
Laurent@1350:         }
Laurent@1350:     }
Laurent@1350:     
Laurent@1350:     template "ppx:array" {
Laurent@1350:         param "variable_path";
Laurent@1350:         apply "ppx:baseType/*[self::ppx:derived or self::ppx:struct or self::ppx:array]" {
Laurent@1350:             with "variable_path" > «$variable_path»
Laurent@1350:         }
Laurent@1350:     }
Laurent@1350:     
Laurent@1350: }