--- a/svghmi/hmi_tree.ysl2 Thu Apr 01 16:00:58 2021 +0200
+++ b/svghmi/hmi_tree.ysl2 Fri Apr 02 21:16:18 2021 +0200
@@ -73,82 +73,7 @@
}
}
-// Parses:
-// "HMI:WidgetType:param1:param2@path1,path1min,path1max@path2"
-//
-// Into:
-// widget type="WidgetType" id="blah456" {
-// arg value="param1";
-// arg value="param2";
-// path value=".path1" index=".path1" min="path1min" max="path1max" type="PAGE_LOCAL";
-// path value="/path1" index="348" type="HMI_INT";
-// path value="path4" index="path4" type="HMI_LOCAL";
-// }
-//
-template "*", mode="parselabel" {
- const "label","@inkscape:label";
- const "id","@id";
- const "description", "substring-after($label,'HMI:')";
-
- const "_args", "substring-before($description,'@')";
- const "args" choose {
- when "$_args" value "$_args";
- otherwise value "$description";
- }
-
- const "_type", "substring-before($args,':')";
- const "type" choose {
- when "$_type" value "$_type";
- otherwise value "$args";
- }
-
- if "$type" widget {
- attrib "id" > «$id»
- attrib "type" > «$type»
- foreach "str:split(substring-after($args, ':'), ':')" {
- arg {
- attrib "value" > «.»
- }
- }
- const "paths", "substring-after($description,'@')";
- foreach "str:split($paths, '@')" {
- if "string-length(.) > 0" path {
- const "pathminmax", "str:split(.,',')";
- const "path", "$pathminmax[1]";
- const "pathminmaxcount", "count($pathminmax)";
- attrib "value" > «$path»
- choose {
- when "$pathminmaxcount = 3" {
- attrib "min" > «$pathminmax[2]»
- attrib "max" > «$pathminmax[3]»
- }
- when "$pathminmaxcount = 2" {
- error > Widget id:«$id» label:«$label» has wrong syntax of path section «$pathminmax»
- }
- }
- choose {
- when "regexp:test($path,'^\.[a-zA-Z0-9_]+$')" {
- attrib "type" > PAGE_LOCAL
- }
- when "regexp:test($path,'^[a-zA-Z0-9_]+$')" {
- attrib "type" > HMI_LOCAL
- }
- otherwise {
- const "item", "$indexed_hmitree/*[@hmipath = $path]";
- const "pathtype", "local-name($item)";
- if "$pathminmaxcount = 3 and not($pathtype = 'HMI_INT' or $pathtype = 'HMI_REAL')" {
- error > Widget id:«$id» label:«$label» path section «$pathminmax» use min and max on non mumeric value
- }
- if "count($item) = 1" {
- attrib "index" > «$item/@index»
- attrib "type" > «$pathtype»
- }
- }
- }
- }
- }
- }
-}
+include parse_labels.ysl2
const "_parsed_widgets" {
widget type="VarInitPersistent" {