diff -r 80f96db773bd -r c5be4fd425e7 svghmi/gen_dnd_widget_svg.ysl2 --- 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 "/" {