--- /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