diff -r 92efd8fe3120 -r 533741e5075c plcopen/variables_infos.ysl2 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plcopen/variables_infos.ysl2 Wed Oct 09 10:57:20 2013 +0200 @@ -0,0 +1,233 @@ +include yslt.yml2 +estylesheet xmlns:ppx="http://www.plcopen.org/xml/tc6_0201" + xmlns:xhtml="http://www.w3.org/1999/xhtml" + xmlns:ns="var_infos_ns" + extension-element-prefixes="ns" + exclude-result-prefixes="ns" { + + param "tree"; + + template "text()"; + + variable "project" { + choose { + when "$tree='True'" { + copy "document('project')/project/*"; + } + } + } + + variable "stdlib" { + choose { + when "$tree='True'" { + copy "document('stdlib')/stdlib/*"; + } + } + } + variable "extensions" { + choose { + when "$tree='True'" { + copy "document('extensions')/extensions/*"; + } + } + } + + template "ppx:returnType" { + value "ns:AddTree()"; + apply; + } + + function "variables_infos" { + param "var_class"; + variable "var_option" { + choose { + when "@constant='true' or @constant='1'" > Constant + when "@retain='true' or @retain='1'" > Retain + when "@nonretain='true' or @nonretain='1'" > Non-Retain + } + } + foreach "ppx:variable" { + variable "initial_value" { + apply "ppx:initialValue"; + } + variable "edit" { + choose { + when "$var_class='Global' or $var_class='External'" > true + otherwise { + apply "ppx:type", mode="var_edit"; + } + } + } + value "ns:AddTree()"; + apply "ppx:type"; + value "ns:AddVariable(@name, $var_class, $var_option, @address, $initial_value, $edit, ppx:documentation/xhtml:p/text())"; + } + } + + template "ppx:localVars" { + call "variables_infos" { + with "var_class" > Local + } + } + + template "ppx:globalVars" { + call "variables_infos" { + with "var_class" > Global + } + } + + template "ppx:externalVars" { + call "variables_infos" { + with "var_class" > External + } + } + + template "ppx:tempVars" { + call "variables_infos" { + with "var_class" > Temp + } + } + + template "ppx:inputVars" { + call "variables_infos" { + with "var_class" > Input + } + } + + template "ppx:outputVars" { + call "variables_infos" { + with "var_class" > Output + } + } + + template "ppx:inOutVars" { + call "variables_infos" { + with "var_class" > InOut + } + } + + template "ppx:pou" { + apply "ppx:interface/*[self::ppx:inputVars or self::ppx:inOutVars or self::ppx:outputVars]/ppx:variable"; + } + + template "ppx:variable" { + variable "name" > «@name» + value "ns:AddTree($name)"; + apply "ppx:type"; + value "ns:AddVarToTree($name)"; + } + + template "ppx:dataType" { + apply "ppx:baseType"; + } + + template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:struct" { + apply "ppx:variable"; + } + + template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:derived" { + variable "type_name" > «@name» + choose { + when "$tree='True'" { + apply """exsl:node-set($project)/ppx:project/ppx:types/ppx:pous/ppx:pou[@name=$type_name] | + exsl:node-set($project)/ppx:project/ppx:types/ppx:dataTypes/ppx:dataType[@name=$type_name] | + exsl:node-set($stdlib)/ppx:project/ppx:types/ppx:pous/ppx:pou[@name=$type_name] | + exsl:node-set($stdlib)/ppx:project/ppx:types/ppx:dataTypes/ppx:dataType[@name=$type_name] | + exsl:node-set($extensions)/ppx:project/ppx:types/ppx:pous/ppx:pou[@name=$type_name] | + exsl:node-set($extensions)/ppx:project/ppx:types/ppx:dataTypes/ppx:dataType[@name=$type_name]"""; + } + } + value "ns:SetType($type_name)"; + } + + template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:array" { + apply "ppx:baseType"; + foreach "ppx:dimension" { + value "ns:AddDimension(@lower, @upper)"; + } + } + + template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:string" { + variable "name" > STRING + value "ns:SetType($name)"; + } + + template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:wstring" { + variable "name" > WSTRING + value "ns:SetType($name)"; + } + + template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/*" { + 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" { + copy """exsl:node-set($project)/ppx:project/ppx:types/ppx:pous/ppx:pou[@name=$type_name] | + exsl:node-set($stdlib)/ppx:project/ppx:types/ppx:pous/ppx:pou[@name=$type_name] | + exsl:node-set($extensions)/ppx:project/ppx:types/ppx:pous/ppx:pou[@name=$type_name]"""; + } + choose { + when "$pou_infos != ''" > false + otherwise > true + } + } + + template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/*", mode="var_edit" { + > true + } + + template "ppx:value" { + choose { + when "@repetitionValue" { + > «@repetitionValue»( + apply; + > ) + } + when "@member" { + > «@member» := + apply; + } + otherwise { + apply; + } + } + } + + template "ppx:simpleValue" { + > «@value» + } + + function "complex_type_value" { + param "start_bracket"; + param "end_bracket"; + > «@start_bracket» + foreach "ppx:value" { + apply "."; + choose { + when "position()!=last()" > , + } + } + > «@end_bracket» + } + + template "ppx:arrayValue" { + call "complex_type_value" { + with "start_bracket" > [ + with "end_bracket" > ] + } + } + + template "ppx:structValue" { + call "complex_type_value" { + with "start_bracket" > ( + with "end_bracket" > ) + } + } + +} + + + \ No newline at end of file