include yslt_noindent.yml2
istylesheet xmlns:ppx="http://www.plcopen.org/xml/tc6_0201"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
extension-element-prefixes="ns"
exclude-result-prefixes="ns" {
variable "project", "ns:GetProject()";
variable "stdlib", "ns:GetStdLibs()";
variable "extensions", "ns:GetExtensions()";
variable "all_types", "($project | $stdlib | $extensions)/ppx:types";
template "ppx:configuration" {
template "ppx:resource" {
template "ppx:returnType" {
apply ".", mode="var_type";
function "variables_infos" {
when "@constant='true' or @constant='1'" > Constant
when "@retain='true' or @retain='1'" > Retain
when "@nonretain='true' or @nonretain='1'" > Non-Retain
variable "initial_value" {
apply "ppx:initialValue";
when "$var_class='Global' or $var_class='External'" > true
apply "ppx:type", mode="var_edit";
apply "ppx:type", mode="var_type";
value "ns:AddVariable(@name, $var_class, $var_option, @address, $initial_value, $edit, ppx:documentation/xhtml:p/text())";
template "ppx:localVars" {
template "ppx:globalVars" {
with "var_class" > Global
template "ppx:externalVars" {
with "var_class" > External
template "ppx:tempVars" {
template "ppx:inputVars" {
template "ppx:outputVars" {
with "var_class" > Output
template "ppx:inOutVars" {
template "ppx:pou", mode="var_type" {
apply "ppx:interface/*[self::ppx:inputVars or self::ppx:inOutVars or self::ppx:outputVars]/ppx:variable", mode="var_type";
template "ppx:variable", mode="var_type" {
variable "name" > «@name»
apply "ppx:type", mode="var_type";
value "ns:AddVarToTree($name)";
template "ppx:dataType", mode="var_type" {
apply "ppx:baseType", mode="var_type";
template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:struct", mode="var_type" {
apply "ppx:variable", mode="var_type";
template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:derived", mode="var_type" {
variable "type_name" > «@name»
apply """$all_types/ppx:pous/ppx:pou[@name=$type_name] | \
$all_types/ppx:dataTypes/ppx:dataType[@name=$type_name]""", mode="var_type";
value "ns:SetType($type_name)";
template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:array", mode="var_type" {
apply "ppx:baseType", mode="var_type";
foreach "ppx:dimension" {
variable "lower" > «@lower»
variable "upper" > «@upper»
value "ns:AddDimension($lower, $upper)";
template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:string", mode="var_type" {
value "ns:SetType($name)";
template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:wstring", mode="var_type" {
variable "name" > WSTRING
value "ns:SetType($name)";
template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/*", mode="var_type" {
variable "name" > «local-name()»
value "ns:SetType($name)";
template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:derived", mode="var_edit" {
variable "type_name" > «@name»
variable "pou_infos", "$all_types/ppx:pous/ppx:pou[@name=$type_name]";
when "$pou_infos != ''" > false
template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/*", mode="var_edit" {
when "@repetitionValue" {
template "ppx:simpleValue" {
function "complex_type_value" {
when "position()!=last()" > ,
template "ppx:arrayValue" {
call "complex_type_value" {
template "ppx:structValue" {
call "complex_type_value" {