include yslt_noindent.yml2 in xsl decl svgtmpl(match, xmlns="http://www.w3.org/2000/svg") alias template; istylesheet /* From Inkscape */ xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" /* Namespace to invoke python code */ xmlns:ns="beremiz" extension-element-prefixes="ns func exsl regexp str dyn" exclude-result-prefixes="ns func exsl regexp str dyn" { param "hmi_path"; const "hmi_elements", "//svg:*[starts-with(@inkscape:label, 'HMI:')]"; const "subhmitree", "ns:GetSubHMITree()"; const "indexed_hmitree", "/.."; // compatibility with parse_labels.ysl2 include parse_labels.ysl2 const "_parsed_widgets" apply "$hmi_elements", mode="parselabel"; const "parsed_widgets","exsl:node-set($_parsed_widgets)"; const "selected_node_type","local-name($subhmitree)"; 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; // 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"; } const "NODES_TYPES","str:split('HMI_ROOT HMI_NODE')"; const "HMI_NODES_COMPAT","str:split('Page Jump Foreach')"; template "/" { comment > Widget dropped in Inkscape from Beremiz choose { when "$svg_widget_count < 1" error > No widget detected on selected SVG when "$svg_widget_count > 1" error > Multiple widget DnD not yet supported when """$selected_node_type = $NODES_TYPES and \ not($svg_widget_type = $HMI_NODES_COMPAT)""" error > Widget incompatible with selected HMI tree node } const "testmsg" { msg value "$hmi_path"; msg value "$selected_node_type"; msg value "$svg_widget_type"; } value "ns:PassMessage($testmsg)"; apply "/", mode="inline_svg"; } }