edouard@3221: include yslt_noindent.yml2 edouard@3221: edouard@3221: in xsl decl svgtmpl(match, xmlns="http://www.w3.org/2000/svg") alias template; edouard@3221: edouard@3221: istylesheet edouard@3221: /* From Inkscape */ edouard@3221: xmlns:dc="http://purl.org/dc/elements/1.1/" edouard@3221: xmlns:cc="http://creativecommons.org/ns#" edouard@3221: xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" edouard@3221: xmlns:svg="http://www.w3.org/2000/svg" edouard@3221: xmlns:xlink="http://www.w3.org/1999/xlink" edouard@3221: xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" edouard@3221: xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" edouard@3221: edouard@3221: /* Namespace to invoke python code */ edouard@3221: xmlns:ns="beremiz" edouard@3221: edouard@3221: extension-element-prefixes="ns func exsl regexp str dyn" edouard@3221: exclude-result-prefixes="ns func exsl regexp str dyn" { edouard@3221: edouard@3221: const "hmi_elements", "//svg:*[starts-with(@inkscape:label, 'HMI:')]"; edouard@3261: const "widgetparams", "ns:GetWidgetParams()"; edouard@3221: edouard@3222: const "indexed_hmitree", "/.."; // compatibility with parse_labels.ysl2 edouard@3221: include parse_labels.ysl2 edouard@3222: const "_parsed_widgets" apply "$hmi_elements", mode="parselabel"; edouard@3222: const "parsed_widgets","exsl:node-set($_parsed_widgets)"; edouard@3221: edouard@3261: const "svg_widget", "$parsed_widgets/widget[1]"; edouard@3223: const "svg_widget_type", "$svg_widget/@type"; edouard@3223: const "svg_widget_path", "$svg_widget/@path"; edouard@3223: const "svg_widget_count", "count($parsed_widgets/widget)"; edouard@3223: edouard@3229: // Templates to change label paths(s) edouard@3261: template "@* | node()", mode="replace_params" { edouard@3261: xsl:copy apply "@* | node()", mode="replace_params"; edouard@3229: } edouard@3229: edouard@3261: template "arg", mode="replace_params"; edouard@3261: template "path", mode="replace_params"; edouard@3261: template "widget", mode="replace_params" { edouard@3261: xsl:copy { Edouard@3263: apply "@* | node()", mode="replace_params"; Edouard@3263: copy "$widgetparams/*"; edouard@3261: }; edouard@3229: } edouard@3229: edouard@3229: // all attribs are usually copied edouard@3221: svgtmpl "@*", mode="inline_svg" xsl:copy; edouard@3221: edouard@3229: // except labels, ignored edouard@3229: svgtmpl "@inkscape:label[starts-with(., 'HMI:')]", mode="inline_svg"; edouard@3229: edouard@3229: template "node()", mode="inline_svg" xsl:copy { edouard@3229: edouard@3229: // in case this node widget's main element inject label edouard@3229: if "@id = $svg_widget/@id" { edouard@3261: const "substituted_widget" apply "$svg_widget", mode="replace_params"; edouard@3229: const "substituted_widget_ns", "exsl:node-set($substituted_widget)"; edouard@3229: const "new_label" apply "$substituted_widget_ns", mode="genlabel"; edouard@3229: attrib "inkscape:label" > «$new_label» edouard@3229: } edouard@3229: // all nodes are copied as well edouard@3229: apply "@* | node()", mode="inline_svg"; edouard@3223: } edouard@3223: edouard@3221: template "/" { edouard@3221: comment > Widget dropped in Inkscape from Beremiz edouard@3221: edouard@3222: choose { edouard@3222: when "$svg_widget_count < 1" edouard@3222: error > No widget detected on selected SVG edouard@3222: when "$svg_widget_count > 1" edouard@3222: error > Multiple widget DnD not yet supported edouard@3222: } edouard@3223: edouard@3221: apply "/", mode="inline_svg"; edouard@3221: } edouard@3221: }