--- a/svghmi/gen_dnd_widget_svg.ysl2 Tue Apr 13 21:00:34 2021 +0200
+++ b/svghmi/gen_dnd_widget_svg.ysl2 Tue Apr 13 21:04:46 2021 +0200
@@ -30,22 +30,39 @@
const "parsed_widgets","exsl:node-set($_parsed_widgets)";
const "selected_node_type","local-name($subhmitree)";
- const "svg_widget", "$parsed_widgets/widget[1]";
+ const "svg_widget", "$parsed_widgets/widget[1]"; // TODO take all widgets
const "svg_widget_type", "$svg_widget/@type";
const "svg_widget_path", "$svg_widget/@path";
const "svg_widget_count", "count($parsed_widgets/widget)";
+ // Templates to change label paths(s)
+ template "@* | node()", mode="replace_path" {
+ xsl:copy apply "@* | node()", mode="replace_path";
+ }
+
+ template "path/@value", mode="replace_path" {
+ attrib "value" > «$hmi_path»
+ }
+
+ // all attribs are usually copied
svgtmpl "@*", mode="inline_svg" xsl:copy;
- svgtmpl "@inkscape:label[starts-with(., 'HMI:')]", mode="inline_svg" {
- attrib "inkscape:label" > «substring-before(., '@')»@«$hmi_path»
+ // except labels, ignored
+ svgtmpl "@inkscape:label[starts-with(., 'HMI:')]", mode="inline_svg";
+
+ template "node()", mode="inline_svg" xsl:copy {
+
+ // in case this node widget's main element inject label
+ if "@id = $svg_widget/@id" {
+ const "substituted_widget" apply "$svg_widget", mode="replace_path";
+ const "substituted_widget_ns", "exsl:node-set($substituted_widget)";
+ const "new_label" apply "$substituted_widget_ns", mode="genlabel";
+ attrib "inkscape:label" > «$new_label»
+ }
+ // all nodes are copied as well
+ apply "@* | node()", mode="inline_svg";
}
- template "node()", mode="inline_svg" {
- xsl:copy apply "@* | node()", mode="inline_svg";
- }
-
-
const "NODES_TYPES","str:split('HMI_ROOT HMI_NODE')";
const "HMI_NODES_COMPAT","str:split('Page Jump Foreach')";
template "/" {