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