author | Edouard Tisserant <edouard.tisserant@gmail.com> |
Tue, 17 Mar 2020 09:29:04 +0100 | |
branch | svghmi |
changeset 2875 | 6a12e1084deb |
parent 2874 | svghmi/gen_index_xhtml.ysl2@b67af0b8dc72 |
child 2876 | d2adbc273125 |
permissions | -rw-r--r-- |
2875
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
1 |
// detachable_elements.ysl2 |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
2 |
// |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
3 |
// compute what elements are required by pages |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
4 |
// and decide where to cut when removing/attaching |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
5 |
// pages elements on page switch |
2779
75c6a31caca6
SVGHMI: Work In Progress : fixed pointer types in ctypes interface, cleaned up server startup and cleanup code, changed document type to XHTML, cleaner JS script : encapsulated in a function and in CDATA.
Edouard Tisserant
parents:
2763
diff
changeset
|
6 |
|
2875
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
7 |
// returns all directly or indirectly refered elements |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
8 |
def "func:refered_elements" { |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
9 |
param "elems"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
10 |
const "descend", "$elems/descendant-or-self::svg:*"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
11 |
const "clones", "$descend[self::svg:use]"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
12 |
const "originals", "//svg:*[concat('#',@id) = $clones/@xlink:href]"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
13 |
choose { |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
14 |
when "$originals" |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
15 |
result "$descend | func:refered_elements($originals)"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
16 |
otherwise |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
17 |
result "$descend"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
18 |
} |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
19 |
} |
2792
0c0d3895b036
SVGHMI: moved/fixed some templates, avoided namespace problems, added parsing of HMI:* inkscape labels
Edouard Tisserant
parents:
2791
diff
changeset
|
20 |
|
2875
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
21 |
def "func:all_related_elements" { |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
22 |
param "page"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
23 |
const "page_overlapping_geometry", "func:overlapping_geometry($page)"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
24 |
const "page_overlapping_elements", "//svg:*[@id = $page_overlapping_geometry/@Id]"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
25 |
const "page_sub_elements", "func:refered_elements($page | $page_overlapping_elements)"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
26 |
result "$page_sub_elements"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
27 |
} |
2808
dc78ffa5253d
SVGHMI: SVG viewport now defined so that HMI take scales and fit to the view. Implemented page switch through viewport change, no hiding of widget for now.
Edouard Tisserant
parents:
2807
diff
changeset
|
28 |
|
2875
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
29 |
def "func:required_elements" { |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
30 |
param "pages"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
31 |
choose{ |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
32 |
when "$pages"{ |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
33 |
result """func:all_related_elements($pages[1]) |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
34 |
| func:required_elements($pages[position()!=1])"""; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
35 |
}otherwise{ |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
36 |
result "/.."; |
2844
eee5dcd9fc92
SVGHMI: detachable and discardable elements sets, Reworked geometric intersection, toward more accurate page content detection.
Edouard Tisserant
parents:
2843
diff
changeset
|
37 |
} |
eee5dcd9fc92
SVGHMI: detachable and discardable elements sets, Reworked geometric intersection, toward more accurate page content detection.
Edouard Tisserant
parents:
2843
diff
changeset
|
38 |
} |
2875
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
39 |
} |
2844
eee5dcd9fc92
SVGHMI: detachable and discardable elements sets, Reworked geometric intersection, toward more accurate page content detection.
Edouard Tisserant
parents:
2843
diff
changeset
|
40 |
|
2875
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
41 |
const "required_elements", |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
42 |
"""//svg:defs/descendant-or-self::svg:* |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
43 |
| func:required_elements($hmi_pages)/ancestor-or-self::svg:*"""; |
2873
022db76c3bff
SVGHMI : create hmi_tree.ysl2, rename bbox_intersect.ysl2 into geometry.ysl2 and move more code into. Add per included ysl2 file debug output.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2872
diff
changeset
|
44 |
|
2875
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
45 |
const "discardable_elements", "//svg:*[not(@id = $required_elements/@id)]"; |
2844
eee5dcd9fc92
SVGHMI: detachable and discardable elements sets, Reworked geometric intersection, toward more accurate page content detection.
Edouard Tisserant
parents:
2843
diff
changeset
|
46 |
|
2875
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
47 |
def "func:sumarized_elements" { |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
48 |
param "elements"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
49 |
const "short_list", "$elements[not(ancestor::*/@id = $elements/@id)]"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
50 |
const "filled_groups", """$short_list/parent::svg:*[ |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
51 |
not(descendant::*[ |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
52 |
not(self::svg:g) and |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
53 |
not(@id = $discardable_elements/@id) and |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
54 |
not(@id = $short_list/descendant-or-self::*[not(self::svg:g)]/@id) |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
55 |
])]"""; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
56 |
const "groups_to_add", "$filled_groups[not(ancestor::*/@id = $filled_groups/@id)]"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
57 |
result "$groups_to_add | $short_list[not(ancestor::svg:g/@id = $filled_groups/@id)]"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
58 |
} |
2844
eee5dcd9fc92
SVGHMI: detachable and discardable elements sets, Reworked geometric intersection, toward more accurate page content detection.
Edouard Tisserant
parents:
2843
diff
changeset
|
59 |
|
2875
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
60 |
def "func:detachable_elements" { |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
61 |
param "pages"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
62 |
choose{ |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
63 |
when "$pages"{ |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
64 |
result """func:sumarized_elements(func:all_related_elements($pages[1])) |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
65 |
| func:detachable_elements($pages[position()!=1])"""; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
66 |
}otherwise{ |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
67 |
result "/.."; |
2846
7b1db17287b6
SVGHMI: now compute discardable elements first so that we can do better grouping of required elements when sumarizing.
Edouard Tisserant
parents:
2845
diff
changeset
|
68 |
} |
7b1db17287b6
SVGHMI: now compute discardable elements first so that we can do better grouping of required elements when sumarizing.
Edouard Tisserant
parents:
2845
diff
changeset
|
69 |
} |
2875
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
70 |
} |
2846
7b1db17287b6
SVGHMI: now compute discardable elements first so that we can do better grouping of required elements when sumarizing.
Edouard Tisserant
parents:
2845
diff
changeset
|
71 |
|
2875
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
72 |
// Avoid nested detachables |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
73 |
const "_detachable_elements", "func:detachable_elements($hmi_pages)"; |
6a12e1084deb
SVGHMI: created detachable_elements.ysl2
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2874
diff
changeset
|
74 |
const "detachable_elements", "$_detachable_elements[not(ancestor::*/@id = $_detachable_elements/@id)]"; |
2846
7b1db17287b6
SVGHMI: now compute discardable elements first so that we can do better grouping of required elements when sumarizing.
Edouard Tisserant
parents:
2845
diff
changeset
|
75 |