svghmi/parse_labels.ysl2
author Edouard Tisserant <edouard.tisserant@gmail.com>
Sun, 21 Aug 2022 17:44:03 +0200
branchwxPython4
changeset 3587 295f21f9c581
parent 3579 c5070b6973ba
child 3592 b2bdb8b433e0
permissions -rw-r--r--
Cleanup and update version.py
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:
3408
13c5cac55ac7 SVGHMI: add syntax for widget update frequency in widget label: HMI:WidgetType|freq:arg0:arg1@path
Edouard Tisserant
parents: 3259
diff changeset
     5
//  "HMI:WidgetType|freq: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
//
3503
49fcd5d62139 SVGHMI: fix parsing of floating point and negative min and max limits in widget label syntax.
Edouard Tisserant
parents: 3473
diff changeset
    16
const "pathregex",!"'^([^\[,]+)(\[[^\]]+\])?([-.\d,]*)$'"!;
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
    17
3579
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    18
const "newline" |
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    19
const "twonewlines", "concat($newline,$newline)";
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    20
3473
1202b47e7e63 SVGHMI: fix widget's update frequency forcing : syntax checking was enforcing unit and js code was using undefined variables
Edouard Tisserant
parents: 3455
diff changeset
    21
template "*", mode="parselabel"
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
    22
{
3579
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    23
    const "part","@inkscape:label";
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    24
    const "desc", "svg:desc";
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    25
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    26
    // add svg:desc field if continuation "\" marker is found at the end of label
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    27
    const "len","string-length($part)";
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    28
    const "has_continuation", "substring($part,$len,1)='\\'";
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    29
    const "label" choose{
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    30
        when "$has_continuation" {
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    31
           const "_continuation", "substring-before($desc, $twonewlines)";
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    32
           const "continuation" choose {
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    33
               when "$_continuation" value "$_continuation";
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    34
               otherwise value "$desc";
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    35
           }
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    36
           value "concat(substring($part,1,$len - 1),translate($continuation,$newline,''))";
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    37
        }
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    38
        otherwise value "$part";
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    39
    }
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
    40
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
    41
    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
    42
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
    43
    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
    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 "_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
    46
    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
    47
        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
    48
        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
    49
    }
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
    50
3408
13c5cac55ac7 SVGHMI: add syntax for widget update frequency in widget label: HMI:WidgetType|freq:arg0:arg1@path
Edouard Tisserant
parents: 3259
diff changeset
    51
    const "_typefreq", "substring-before($args,':')";
13c5cac55ac7 SVGHMI: add syntax for widget update frequency in widget label: HMI:WidgetType|freq:arg0:arg1@path
Edouard Tisserant
parents: 3259
diff changeset
    52
    const "typefreq" choose {
13c5cac55ac7 SVGHMI: add syntax for widget update frequency in widget label: HMI:WidgetType|freq:arg0:arg1@path
Edouard Tisserant
parents: 3259
diff changeset
    53
        when "$_typefreq" value "$_typefreq";
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
    54
        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
    55
    }
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
    56
3412
04c4835ca376 SVGHMI: Fixed support for frequency parsing in widget label
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3408
diff changeset
    57
    const "freq", "substring-after($typefreq,'|')";
3408
13c5cac55ac7 SVGHMI: add syntax for widget update frequency in widget label: HMI:WidgetType|freq:arg0:arg1@path
Edouard Tisserant
parents: 3259
diff changeset
    58
13c5cac55ac7 SVGHMI: add syntax for widget update frequency in widget label: HMI:WidgetType|freq:arg0:arg1@path
Edouard Tisserant
parents: 3259
diff changeset
    59
    const "_type", "substring-before($typefreq,'|')";
13c5cac55ac7 SVGHMI: add syntax for widget update frequency in widget label: HMI:WidgetType|freq:arg0:arg1@path
Edouard Tisserant
parents: 3259
diff changeset
    60
    const "type" choose {
13c5cac55ac7 SVGHMI: add syntax for widget update frequency in widget label: HMI:WidgetType|freq:arg0:arg1@path
Edouard Tisserant
parents: 3259
diff changeset
    61
        when "$_type" value "$_type";
13c5cac55ac7 SVGHMI: add syntax for widget update frequency in widget label: HMI:WidgetType|freq:arg0:arg1@path
Edouard Tisserant
parents: 3259
diff changeset
    62
        otherwise value "$typefreq";
13c5cac55ac7 SVGHMI: add syntax for widget update frequency in widget label: HMI:WidgetType|freq:arg0:arg1@path
Edouard Tisserant
parents: 3259
diff changeset
    63
    }
2886
6c82fad8be65 SVGHMI: Simplification and optimization. func:parselabel becomes a template.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2885
diff changeset
    64
    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
    65
        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
    66
        attrib "type" > «$type»
3455
2716cd8e498d SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents: 3412
diff changeset
    67
        if "$freq" {
3473
1202b47e7e63 SVGHMI: fix widget's update frequency forcing : syntax checking was enforcing unit and js code was using undefined variables
Edouard Tisserant
parents: 3455
diff changeset
    68
            if "not(regexp:test($freq,'^[0-9]*(\.[0-9]+)?[smh]?'))" {
3455
2716cd8e498d SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents: 3412
diff changeset
    69
                error > Widget id:«$id» label:«$label» has wrong syntax of frequency forcing «$freq»
2716cd8e498d SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents: 3412
diff changeset
    70
            }
2716cd8e498d SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents: 3412
diff changeset
    71
            attrib "freq" > «$freq»
2716cd8e498d SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents: 3412
diff changeset
    72
        }
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
    73
        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
    74
            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
    75
                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
    76
            }
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
    77
        }
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
    78
        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
    79
        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
    80
            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
    81
                // 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
    82
                // 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
    83
                // 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
    84
                // 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
    85
                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
    86
                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
    87
                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
    88
                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
    89
                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
    90
                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
    91
                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
    92
                    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
    93
                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
    94
                    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
    95
                        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
    96
                        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
    97
                    }
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
    98
                    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
    99
                        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
   100
                    }
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
   101
                }
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
   102
                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
   103
                    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
   104
                        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
   105
                    }
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
   106
                    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
   107
                        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
   108
                    }
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
   109
                    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
   110
                        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
   111
                        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
   112
                        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
   113
                            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
   114
                        }
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
   115
                        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
   116
                            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
   117
                            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
   118
                        }
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
   119
                    }
2911
211d6a185e31 SVGHMI: More infrastructure for editing values with a keypad.
Edouard Tisserant
parents: 2904
diff changeset
   120
                }
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
   121
            }
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
   122
        }
3579
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
   123
        choose{
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
   124
            when "$has_continuation" {
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
   125
               const "_continuation", "substring-after($desc, $twonewlines)";
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
   126
               if "$_continuation"
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
   127
                       desc value "$_continuation";
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
   128
            }
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
   129
            otherwise
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
   130
                if "$desc" desc value "$desc/text()";
c5070b6973ba SVGHMI: add support for multiline widget declaration using svg:desc.
Edouard Tisserant
parents: 3503
diff changeset
   131
        }
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
   132
    }
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
   133
}
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
   134
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
   135
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
   136
// 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
   137
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
   138
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
   139
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
   140
    > @«@value»
3230
95f07764991f SVGHMI: fixed typo
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 3229
diff changeset
   141
    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
   142
}
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
   143
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
   144
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
   145
    > 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
   146
    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
   147
    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
   148
}
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
   149