RUNTIME: Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Retain still uses tree traversal.
include yslt_noindent.yml2
in xsl decl widget_desc(%name, match="widget[@type='%name']", mode="widget_desc") alias template {
type > «@type»
content;
};
decl nothing alias - ;
decl widget_class(%name) alias - {nothing};
decl widget_defs(%name) alias - {nothing};
decl widget_page(%name) alias - {nothing};
decl gen_index_xhtml alias - {nothing};
decl emit(*name) alias - {nothing};
istylesheet
/* From Inkscape */
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
extension-element-prefixes="ns func exsl regexp str dyn"
exclude-result-prefixes="ns func exsl regexp str dyn svg inkscape" {
const "indexed_hmitree", "/.."; // compatibility with parse_labels.ysl2
include parse_labels.ysl2
const "hmi_elements", "//svg:*[starts-with(@inkscape:label, 'HMI:')]";
include widget_*.ysl2
template "@* | node()", mode="document" {
xsl:copy apply "@* | node()", mode="document";
}
template "widget", mode="document" {
xsl:copy {
apply "@* | node()", mode="document";
defs apply ".", mode="widget_desc";
}
}
template "/" {
const "widgets"
apply "$hmi_elements", mode="parselabel";
const "widget_ns", "exsl:node-set($widgets)";
widgets
apply "$widget_ns", mode="document";
}
}