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 = { |