edouard@2873: // hmi_tree.ysl2 Edouard@2790: Edouard@2843: edouard@2873: // HMI Tree computed from VARIABLES.CSV in svghmi.py edouard@2873: const "hmitree", "ns:GetHMITree()"; Edouard@2853: Edouard@2877: const "_categories" { Edouard@2877: noindex > HMI_ROOT Edouard@2877: noindex > HMI_PLC_STATUS Edouard@2877: noindex > HMI_CURRENT_PAGE Edouard@2877: } Edouard@2877: const "categories", "exsl:node-set($_categories)"; Edouard@2867: edouard@2873: // HMI Tree Index edouard@2873: const "_indexed_hmitree" apply "$hmitree", mode="index"; edouard@2873: const "indexed_hmitree", "exsl:node-set($_indexed_hmitree)"; Edouard@2843: edouard@2873: template "*", mode="index" { edouard@2873: param "index", "0"; edouard@2873: param "parentpath", "''"; edouard@2873: const "content" { edouard@2873: const "path" edouard@2873: choose { edouard@2873: when "local-name() = 'HMI_ROOT'" > «$parentpath» edouard@2873: otherwise > «$parentpath»/«@name» edouard@2873: } edouard@2873: choose { edouard@2873: when "not(local-name() = $categories/noindex)" { edouard@2873: xsl:copy { edouard@2873: attrib "index" > «$index» edouard@2873: attrib "hmipath" > «$path» edouard@2873: foreach "@*" xsl:copy; Edouard@2791: } edouard@2873: apply "*[1]", mode="index"{ edouard@2873: with "index", "$index + 1"; edouard@2873: with "parentpath" > «$path» Edouard@2854: } Edouard@2854: } Edouard@2854: otherwise { edouard@2873: apply "*[1]", mode="index"{ edouard@2873: with "index", "$index"; edouard@2873: with "parentpath" > «$path» Edouard@2854: } Edouard@2854: } Edouard@2854: } Edouard@2854: } Edouard@2842: edouard@2873: copy "$content"; edouard@2873: apply "following-sibling::*[1]", mode="index" { edouard@2873: with "index", "$index + count(exsl:node-set($content)/*)"; edouard@2873: with "parentpath" > «$parentpath» Edouard@2808: } Edouard@2753: } edouard@2874: Edouard@2877: def "func:parselabel" { Edouard@2877: param "label"; Edouard@2877: const "description", "substring-after($label,'HMI:')"; Edouard@2877: Edouard@2877: const "_args", "substring-before($description,'@')"; Edouard@2877: const "args" choose { Edouard@2877: when "$_args" value "$_args"; Edouard@2877: otherwise value "$description"; Edouard@2877: } Edouard@2877: Edouard@2877: const "_type", "substring-before($args,':')"; Edouard@2877: const "type" choose { Edouard@2877: when "$_type" value "$_type"; Edouard@2877: otherwise value "$args"; Edouard@2877: } Edouard@2877: Edouard@2877: const "ast" if "$type" widget { Edouard@2877: attrib "type" > «$type» Edouard@2877: foreach "str:split(substring-after($args, ':'), ':')" { Edouard@2877: arg { Edouard@2877: attrib "value" > «.» Edouard@2877: } Edouard@2877: } Edouard@2877: const "paths", "substring-after($description,'@')"; Edouard@2877: foreach "str:split($paths, '@')" { Edouard@2877: if "string-length(.) > 0" path { Edouard@2877: attrib "value" > «.» Edouard@2877: const "path", "."; Edouard@2877: const "item", "$indexed_hmitree/*[@hmipath = $path]"; Edouard@2877: if "count($item) = 1" Edouard@2877: attrib "index" > «$item/@index» Edouard@2877: } Edouard@2877: } Edouard@2877: } Edouard@2877: Edouard@2877: result "exsl:node-set($ast)"; Edouard@2877: } Edouard@2877: edouard@2874: // Debug data edouard@2874: template "*", mode="testtree"{ edouard@2874: param "indent", "''"; edouard@2874: > «$indent» «local-name()» edouard@2874: foreach "@*" > «local-name()»="«.»" edouard@2874: > \n edouard@2874: apply "*", mode="testtree" { edouard@2874: with "indent" value "concat($indent,'>')" edouard@2874: }; edouard@2874: } edouard@2874: function "debug_hmitree" { edouard@2874: | Raw HMI tree edouard@2874: apply "$hmitree", mode="testtree"; edouard@2874: | edouard@2874: | Indexed HMI tree edouard@2874: apply "$indexed_hmitree", mode="testtree"; edouard@2874: } edouard@2874: !debug_output_calls.append("debug_hmitree")