diff -r ec365ef396b1 -r 3d307ad803ea svghmi/hmi_tree.ysl2 --- 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" {