svghmi/detachable_pages.ysl2
branchsvghmi
changeset 3170 aaa203270ab0
parent 3165 2db69e2c5673
child 3186 1e9b9d7451cd
equal deleted inserted replaced
3169:91207ee5b6af 3170:aaa203270ab0
    49 // (apparently libxml doesn't cache exslt function results)
    49 // (apparently libxml doesn't cache exslt function results)
    50 // in order to optimize further, func:overlapping_geometry 
    50 // in order to optimize further, func:overlapping_geometry 
    51 // should be implemented in python or even C,
    51 // should be implemented in python or even C,
    52 // as this is still the main bottleneck here
    52 // as this is still the main bottleneck here
    53 const "_overlapping_geometry" {
    53 const "_overlapping_geometry" {
    54     const "k", "'overlapping'";
       
    55     const "m", "'computing belonging of widgets to pages'";
       
    56     value "ns:ProgressStart($k, $m)";
       
    57     foreach "$hmi_pages | $keypads" {
    54     foreach "$hmi_pages | $keypads" {
    58         const "k2", "concat('overlapping:', @id)";
    55         const "k", "concat('overlapping:', @id)";
    59         const "m2", "concat('collecting membership of ', @inkscape:label)";
    56         value "ns:ProgressStart($k, concat('collecting membership of ', @inkscape:label))";
    60         value "ns:ProgressStart($k2, $m2)";
       
    61         elt {
    57         elt {
    62             attrib "id" > «@id»
    58             attrib "id" > «@id»
    63             copy "func:overlapping_geometry(.)";
    59             copy "func:overlapping_geometry(.)";
    64         }
    60         }
    65         value "ns:ProgressEnd($k2, $m2)";
    61         value "ns:ProgressEnd($k)";
    66     }
    62     }
    67     value "ns:ProgressEnd($k, $m)";
       
    68 }
    63 }
    69 
    64 
    70 const "overlapping_geometry", "exsl:node-set($_overlapping_geometry)";
    65 const "overlapping_geometry", "exsl:node-set($_overlapping_geometry)";
    71 
    66 
    72 def "func:all_related_elements" {
    67 def "func:all_related_elements" {
   140 template "svg:*", mode="page_desc" {
   135 template "svg:*", mode="page_desc" {
   141     if "ancestor::*[@id = $hmi_pages/@id]" error > HMI:Page «@id» is nested in another HMI:Page
   136     if "ancestor::*[@id = $hmi_pages/@id]" error > HMI:Page «@id» is nested in another HMI:Page
   142 
   137 
   143 
   138 
   144     const "desc", "func:widget(@id)";
   139     const "desc", "func:widget(@id)";
   145     const "msg", "concat('generating page description ', $desc/arg[1]/@value)";
   140     const "pagename", "$desc/arg[1]/@value";
   146     value "ns:ProgressStart($msg)";
   141     const "msg", "concat('generating page description ', $pagename)";
       
   142     value "ns:ProgressStart($pagename, $msg)";
   147     const "page", ".";
   143     const "page", ".";
   148     const "p", "$geometry[@Id = $page/@id]";
   144     const "p", "$geometry[@Id = $page/@id]";
   149 
   145 
   150     const "page_all_elements", "func:all_related_elements($page)";
   146     const "page_all_elements", "func:all_related_elements($page)";
   151 
   147 
   161 
   157 
   162     const "required_detachables", 
   158     const "required_detachables", 
   163         """$sumarized_page/
   159         """$sumarized_page/
   164            ancestor-or-self::*[@id = $detachable_elements/@id]""";
   160            ancestor-or-self::*[@id = $detachable_elements/@id]""";
   165 
   161 
   166     |   "«$desc/arg[1]/@value»": {
   162     |   "«$pagename»": {
   167     //|     widget: hmi_widgets["«@id»"],
   163     //|     widget: hmi_widgets["«@id»"],
   168     |     bbox: [«$p/@x», «$p/@y», «$p/@w», «$p/@h»],
   164     |     bbox: [«$p/@x», «$p/@y», «$p/@w», «$p/@h»],
   169     if "$desc/path/@value" {
   165     if "$desc/path/@value" {
   170         if "count($desc/path/@index)=0"
   166         if "count($desc/path/@index)=0"
   171             warning > Page id="«$page/@id»" : No match for path "«$desc/path/@value»" in HMI tree
   167             warning > Page id="«$page/@id»" : No match for path "«$desc/path/@value»" in HMI tree
   194     /* TODO generate some code for init() instead */
   190     /* TODO generate some code for init() instead */
   195     apply "$parsed_widgets/widget[@id = $all_page_widgets/@id]", mode="per_page_widget_template"{
   191     apply "$parsed_widgets/widget[@id = $all_page_widgets/@id]", mode="per_page_widget_template"{
   196         with "page_desc", "$desc";
   192         with "page_desc", "$desc";
   197     }
   193     }
   198     |   }`if "position()!=last()" > ,`
   194     |   }`if "position()!=last()" > ,`
   199     value "ns:ProgressEnd($msg)";
   195     value "ns:ProgressEnd($pagename)";
   200 }
   196 }
   201 
   197 
   202 emit "definitions:page-desc" {
   198 emit "definitions:page-desc" {
   203     |
   199     |
   204     | var page_desc = {
   200     | var page_desc = {