include yslt_noindent.yml2
// overrides yslt's output function to set CDATA
decl output(method, cdata-section-elements="script");
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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns="http://www.w3.org/1999/xhtml"
/* Our namespace to invoke python code */
xmlns:ns="beremiz"
extension-element-prefixes="ns"
exclude-result-prefixes="ns" {
/* This retrieves geometry obtained through "inkscape -S"
* already parsed by python and presented as a list of
* <bbox x="0" y="0" w="42" h="42">
*/
variable "geometry", "ns:GetSVGGeometry()";
variable "hmitree", "ns:GetHMITree()";
/* Identity template :
* - copy every attributes
* - copy every sub-elements
*/
template "@* | node()" {
/* use real xsl:copy instead copy-of alias from yslt.yml2 */
xsl:copy apply "@* | node()";
}
variable "mark" > =HMI=\n
/* copy root node and add geometry as comment for a test */
template "/"
html xmlns="http://www.w3.org/1999/xhtml" {
head;
body style="margin:0;" {
xsl:copy {
comment {
apply "$geometry", mode="testgeo";
}
comment {
apply "$hmitree", mode="testtree";
}
apply "@* | node()";
}
script{
||
function evaluate_js_from_descriptions() {
var Page;
var Input;
var Display;
var res = [];
||
variable "midmark" > \n«$mark»
apply """//*[contains(child::svg:desc, $midmark) or \
starts-with(child::svg:desc, $mark)]""",2
mode="code_from_descs";
||
return res;
}
||
/*TODO add :
- pages content
+ with ref to elt ?
- widgets parameters
*/
include text svghmi.js
}
}
}
template "*", mode="code_from_descs" {
||
{
var path, role, name, priv;
var id = "«@id»";
||
/* if label is used, use it as default name */
if "«@inkscape:label»"
|> name = "«@inkscape:label»";
| /* -------------- */
// this breaks indent, but fixing indent could break string literals
value "substring-after(svg:desc, $mark)";
// nobody reads generated code anyhow...
||
/* -------------- */
res.push({
path:path,
role:role,
name:name,
priv:priv
})
}
||
}
template "bbox", mode="testgeo"{
| ID: «@Id» x: «@x» y: «@y» w: «@w» h: «@h»
}
template "*", mode="testtree"{
param "indent", "''";
| «$indent» «local-name()» «@name» «@type» «@path»
apply "*", mode="testtree" {
with "indent" value "concat($indent,'>')"
};
}
}