edouard@3221: // parse_labels.ysl2 Edouard@2790: Edouard@2843: Edouard@2882: // Parses: edouard@3097: // "HMI:WidgetType:param1:param2@path1,path1min,path1max@path2" Edouard@2882: // Edouard@2882: // Into: Edouard@2893: // widget type="WidgetType" id="blah456" { Edouard@2882: // arg value="param1"; Edouard@2882: // arg value="param2"; edouard@3097: // path value=".path1" index=".path1" min="path1min" max="path1max" type="PAGE_LOCAL"; Edouard@3060: // path value="/path1" index="348" type="HMI_INT"; Edouard@3060: // path value="path4" index="path4" type="HMI_LOCAL"; Edouard@2882: // } Edouard@2882: // edouard@2886: template "*", mode="parselabel" { edouard@2886: const "label","@inkscape:label"; edouard@3097: const "id","@id"; Edouard@2877: const "description", "substring-after($label,'HMI:')"; Edouard@2877: Edouard@2877: const "_args", "substring-before($description,'@')"; Edouard@2877: const "args" choose { Edouard@2877: when "$_args" value "$_args"; Edouard@2877: otherwise value "$description"; Edouard@2877: } Edouard@2877: Edouard@2877: const "_type", "substring-before($args,':')"; Edouard@2877: const "type" choose { Edouard@2877: when "$_type" value "$_type"; Edouard@2877: otherwise value "$args"; Edouard@2877: } Edouard@2877: edouard@2886: if "$type" widget { edouard@3097: attrib "id" > «$id» Edouard@2877: attrib "type" > «$type» Edouard@2877: foreach "str:split(substring-after($args, ':'), ':')" { Edouard@2877: arg { Edouard@2877: attrib "value" > «.» Edouard@2877: } Edouard@2877: } Edouard@2877: const "paths", "substring-after($description,'@')"; Edouard@2877: foreach "str:split($paths, '@')" { Edouard@2877: if "string-length(.) > 0" path { edouard@3097: const "pathminmax", "str:split(.,',')"; edouard@3097: const "path", "$pathminmax[1]"; edouard@3097: const "pathminmaxcount", "count($pathminmax)"; edouard@3097: attrib "value" > «$path» edouard@3017: choose { edouard@3097: when "$pathminmaxcount = 3" { edouard@3097: attrib "min" > «$pathminmax[2]» edouard@3097: attrib "max" > «$pathminmax[3]» edouard@3097: } edouard@3097: when "$pathminmaxcount = 2" { edouard@3097: error > Widget id:«$id» label:«$label» has wrong syntax of path section «$pathminmax» edouard@3097: } edouard@3097: } edouard@3097: choose { edouard@3127: when "regexp:test($path,'^\.[a-zA-Z0-9_]+$')" { edouard@3097: attrib "type" > PAGE_LOCAL edouard@3097: } edouard@3127: when "regexp:test($path,'^[a-zA-Z0-9_]+$')" { edouard@3097: attrib "type" > HMI_LOCAL edouard@3017: } edouard@3017: otherwise { edouard@3097: const "item", "$indexed_hmitree/*[@hmipath = $path]"; edouard@3097: const "pathtype", "local-name($item)"; edouard@3097: if "$pathminmaxcount = 3 and not($pathtype = 'HMI_INT' or $pathtype = 'HMI_REAL')" { edouard@3097: error > Widget id:«$id» label:«$label» path section «$pathminmax» use min and max on non mumeric value edouard@3097: } edouard@3097: if "count($item) = 1" { edouard@3097: attrib "index" > «$item/@index» edouard@3097: attrib "type" > «$pathtype» edouard@3017: } edouard@3017: } Edouard@2911: } Edouard@2877: } Edouard@2877: } Edouard@2877: } Edouard@2877: } Edouard@2877: