svghmi/parse_labels.ysl2
author Edouard Tisserant <edouard.tisserant@gmail.com>
Tue, 19 Oct 2021 12:58:22 +0200
changeset 3366 1ca385429bba
parent 3259 76da573569a6
child 3408 13c5cac55ac7
permissions -rw-r--r--
OPCUA: Add browsing of variables exposed by client when selecting location from variable panel.
3221
3d307ad803ea SVGHMI: Widget Library Picker now transforms SVG widget before allowing DnD. Transform is just identity forn now, but label parsing have already been included. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3205
diff changeset
     1
// parse_labels.ysl2
2790
8fab1886ebec SVGHI: compute hmitree variables ordered index in xslt
Edouard Tisserant
parents: 2789
diff changeset
     2
2843
94696b3f69fb SVGHMI : still trying to optimize. Added xslt code to identitfy minimum set of elements needed by a particular page. Plan is to remove unseen/unused elements from the DOM, and re-appending them later when used, on page switch. Disabled previous optimization.
Edouard Tisserant
parents: 2842
diff changeset
     3
2882
ac08a5d15c15 SVGHMI: moving comments
Edouard Tisserant
parents: 2877
diff changeset
     4
//  Parses:
3097
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
     5
//  "HMI:WidgetType:param1:param2@path1,path1min,path1max@path2"
2882
ac08a5d15c15 SVGHMI: moving comments
Edouard Tisserant
parents: 2877
diff changeset
     6
//
ac08a5d15c15 SVGHMI: moving comments
Edouard Tisserant
parents: 2877
diff changeset
     7
//  Into:
2893
d57a12b8f5db SVGHMI: added func:get_hmi_tree_elt to match HMI tree node from path. Continue implementing ForEach widget : force order and completeness of items list. Now also collecting ForEach buttons.
Edouard Tisserant
parents: 2890
diff changeset
     8
//  widget type="WidgetType" id="blah456" {
2882
ac08a5d15c15 SVGHMI: moving comments
Edouard Tisserant
parents: 2877
diff changeset
     9
//      arg value="param1";
ac08a5d15c15 SVGHMI: moving comments
Edouard Tisserant
parents: 2877
diff changeset
    10
//      arg value="param2";
3097
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    11
//      path value=".path1" index=".path1" min="path1min" max="path1max" type="PAGE_LOCAL";
3060
4d20b92282e3 SVGHMI: Documentation fix
Edouard Tisserant
parents: 3017
diff changeset
    12
//      path value="/path1" index="348" type="HMI_INT";
4d20b92282e3 SVGHMI: Documentation fix
Edouard Tisserant
parents: 3017
diff changeset
    13
//      path value="path4" index="path4" type="HMI_LOCAL";
2882
ac08a5d15c15 SVGHMI: moving comments
Edouard Tisserant
parents: 2877
diff changeset
    14
//  }
ac08a5d15c15 SVGHMI: moving comments
Edouard Tisserant
parents: 2877
diff changeset
    15
//
3236
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    16
const "pathregex",!"'^([^\[,]+)(\[[^\]]+\])?([\d,]*)$'"!;
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    17
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    18
template "*", mode="parselabel" 
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    19
{
2886
6c82fad8be65 SVGHMI: Simplification and optimization. func:parselabel becomes a template.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2885
diff changeset
    20
    const "label","@inkscape:label";
3097
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    21
    const "id","@id";
3259
76da573569a6 SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3236
diff changeset
    22
2877
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    23
    const "description", "substring-after($label,'HMI:')";
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    24
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    25
    const "_args", "substring-before($description,'@')";
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    26
    const "args" choose {
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    27
        when "$_args" value "$_args";
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    28
        otherwise value "$description";
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    29
    }
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    30
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    31
    const "_type", "substring-before($args,':')";
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    32
    const "type" choose {
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    33
        when "$_type" value "$_type";
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    34
        otherwise value "$args";
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    35
    }
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    36
2886
6c82fad8be65 SVGHMI: Simplification and optimization. func:parselabel becomes a template.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2885
diff changeset
    37
    if "$type" widget {
3097
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    38
        attrib "id" > «$id»
2877
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    39
        attrib "type" > «$type»
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    40
        foreach "str:split(substring-after($args, ':'), ':')" {
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    41
            arg {
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    42
                attrib "value" > «.»
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    43
            }
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    44
        }
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    45
        const "paths", "substring-after($description,'@')";
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    46
        foreach "str:split($paths, '@')" {
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    47
            if "string-length(.) > 0" path {
3236
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    48
                // 1 : global match
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    49
                // 2 : /path
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    50
                // 3 : [accepts]
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    51
                // 4 : min,max
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    52
                const "path_match", "regexp:match(.,$pathregex)";
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    53
                const "pathminmax", "str:split($path_match[4],',')";
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    54
                const "path", "$path_match[2]";
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    55
                const "path_accepts", "$path_match[3]";
3097
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    56
                const "pathminmaxcount", "count($pathminmax)";
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    57
                attrib "value" > «$path»
3236
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    58
                if "string-length($path_accepts)"
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    59
                    attrib "accepts" > «$path_accepts»
3017
15e2df3e5610 SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2941
diff changeset
    60
                choose {
3236
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    61
                    when "$pathminmaxcount = 2" {
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    62
                        attrib "min" > «$pathminmax[1]»
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    63
                        attrib "max" > «$pathminmax[2]»
3097
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    64
                    }
3236
e4e27c4efb96 SVGHMI: Extend widget labels parsing to allow expressing widget's accepted types in labels
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3230
diff changeset
    65
                    when "$pathminmaxcount = 1 or $pathminmaxcount > 2" {
3097
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    66
                        error > Widget id:«$id» label:«$label» has wrong syntax of path section «$pathminmax»
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    67
                    }
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    68
                }
3229
c5be4fd425e7 SVGHMI: still quite naive path substitution whn prepearing widget for DnD, but now uses label generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3221
diff changeset
    69
                if "$indexed_hmitree" choose {
3127
d4dfd47f8156 SVGHMI: Enforce formating HMI_LOCAL and PAGE_LOCAL variables until the end of variable name
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3097
diff changeset
    70
                    when "regexp:test($path,'^\.[a-zA-Z0-9_]+$')" {
3097
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    71
                        attrib "type" > PAGE_LOCAL
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    72
                    }
3127
d4dfd47f8156 SVGHMI: Enforce formating HMI_LOCAL and PAGE_LOCAL variables until the end of variable name
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3097
diff changeset
    73
                    when "regexp:test($path,'^[a-zA-Z0-9_]+$')" {
3097
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    74
                        attrib "type" > HMI_LOCAL
3017
15e2df3e5610 SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2941
diff changeset
    75
                    }
15e2df3e5610 SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2941
diff changeset
    76
                    otherwise {
3097
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    77
                        const "item", "$indexed_hmitree/*[@hmipath = $path]";
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    78
                        const "pathtype", "local-name($item)";
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    79
                        if "$pathminmaxcount = 3 and not($pathtype = 'HMI_INT' or $pathtype = 'HMI_REAL')" {
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    80
                            error > Widget id:«$id» label:«$label» path section «$pathminmax» use min and max on non mumeric value
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    81
                        }
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    82
                        if "count($item) = 1" {
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    83
                            attrib "index" > «$item/@index»
a098b2dd9dff SVGHMI: Added parsing of min and max value that can be given as @path,min,max in widget description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3060
diff changeset
    84
                            attrib "type" > «$pathtype»
3017
15e2df3e5610 SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2941
diff changeset
    85
                        }
15e2df3e5610 SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2941
diff changeset
    86
                    }
2911
211d6a185e31 SVGHMI: More infrastructure for editing values with a keypad.
Edouard Tisserant
parents: 2904
diff changeset
    87
                }
2877
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    88
            }
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    89
        }
3259
76da573569a6 SVGHMI: UI: added prefill of arguments according to values in widget instance in library. Also added library's widget instance description to description field.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3236
diff changeset
    90
        if "svg:desc" desc value "svg:desc/text()";
2877
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    91
    }
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    92
}
682bce953795 SVGHMI: detachable_elements.ysl2 becomes detachable_pages.ysl2, and includes logic to process pages elements. Other minor code moves.
Edouard Tisserant
parents: 2874
diff changeset
    93
3229
c5be4fd425e7 SVGHMI: still quite naive path substitution whn prepearing widget for DnD, but now uses label generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3221
diff changeset
    94
c5be4fd425e7 SVGHMI: still quite naive path substitution whn prepearing widget for DnD, but now uses label generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3221
diff changeset
    95
// Templates to generate label back from parsed tree
c5be4fd425e7 SVGHMI: still quite naive path substitution whn prepearing widget for DnD, but now uses label generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3221
diff changeset
    96
template "arg", mode="genlabel" > :«@value»
c5be4fd425e7 SVGHMI: still quite naive path substitution whn prepearing widget for DnD, but now uses label generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3221
diff changeset
    97
c5be4fd425e7 SVGHMI: still quite naive path substitution whn prepearing widget for DnD, but now uses label generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3221
diff changeset
    98
template "path", mode="genlabel" {
c5be4fd425e7 SVGHMI: still quite naive path substitution whn prepearing widget for DnD, but now uses label generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3221
diff changeset
    99
    > @«@value»
3230
95f07764991f SVGHMI: fixed typo
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3229
diff changeset
   100
    if "string-length(@min)>0 or string-length(@max)>0"  > ,«@min»,«@max»
3229
c5be4fd425e7 SVGHMI: still quite naive path substitution whn prepearing widget for DnD, but now uses label generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3221
diff changeset
   101
}
c5be4fd425e7 SVGHMI: still quite naive path substitution whn prepearing widget for DnD, but now uses label generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3221
diff changeset
   102
c5be4fd425e7 SVGHMI: still quite naive path substitution whn prepearing widget for DnD, but now uses label generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3221
diff changeset
   103
template "widget", mode="genlabel" {
c5be4fd425e7 SVGHMI: still quite naive path substitution whn prepearing widget for DnD, but now uses label generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3221
diff changeset
   104
    > HMI:«@type»
c5be4fd425e7 SVGHMI: still quite naive path substitution whn prepearing widget for DnD, but now uses label generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3221
diff changeset
   105
    apply "arg", mode="genlabel";
c5be4fd425e7 SVGHMI: still quite naive path substitution whn prepearing widget for DnD, but now uses label generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3221
diff changeset
   106
    apply "path", mode="genlabel";
c5be4fd425e7 SVGHMI: still quite naive path substitution whn prepearing widget for DnD, but now uses label generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3221
diff changeset
   107
}
c5be4fd425e7 SVGHMI: still quite naive path substitution whn prepearing widget for DnD, but now uses label generation.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3221
diff changeset
   108