Mercurial > MadButterfly
annotate pyink/html5css3.py @ 1526:04b67119df8c
Prevent users from changing name of main component and its timelines
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Wed, 31 Aug 2011 15:41:12 +0800 |
parents | 9e7ec3b96968 |
children |
rev | line source |
---|---|
1341
599b606c4669
Start to implement HTML5/CSS3 exporter
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1 import pybExtension |
1353
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
2 from domview import component_manager, layers_parser, scenes_parser |
1362
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
3 from trait import composite, trait, require |
1353
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
4 |
1361
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
5 |
1353
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
6 @composite |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
7 class dom_parser(object): |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
8 use_traits = (component_manager, layers_parser, scenes_parser) |
1362
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
9 provide_traits = {layers_parser.get_scene: '_scenes_get_scene'} |
1353
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
10 method_map_traits = { |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
11 scenes_parser._find_maxframe: '_find_maxframe', |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
12 scenes_parser._collect_all_scenes: '_collect_all_scenes', |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
13 scenes_parser._collect_node_ids: '_collect_node_ids', |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
14 component_manager._start_component_manager: |
1362
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
15 '_start_component_manager', |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
16 scenes_parser.get_scene: '_scenes_get_scene' |
1353
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
17 } |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
18 |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
19 def __init__(self): |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
20 self._metadata_node = None |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
21 self._scenes_node = None |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
22 |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
23 self._doc = None |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
24 self._root = None |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
25 self._layers = [] |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
26 self._layers_parent = None |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
27 self._maxframe = 0 |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
28 self.current = 0 |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
29 self._id2node = {} |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
30 self._group2scene = {} |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
31 pass |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
32 |
1366
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
33 def _find_metadata(self): |
1353
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
34 for child in self._root.childList(): |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
35 if child.name() == 'svg:metadata': |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
36 self._metadata_node = child |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
37 break |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
38 pass |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
39 else: |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
40 raise RuntimeError, 'can not find \'svg:metadata\' node' |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
41 |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
42 for child in self._metadata_node.childList(): |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
43 if child.name() == 'ns0:scenes': |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
44 self._scenes_node = child |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
45 break |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
46 pass |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
47 else: |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
48 raise RuntimeError, \ |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
49 'can not find \'ns0:scenes\' node under \'svg:metadata\'' |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
50 |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
51 pass |
1366
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
52 |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
53 ## \brief Return the range of a scene node. |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
54 # |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
55 @staticmethod |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
56 def _scene_node_range(node): |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
57 start = node.getAttribute('start') |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
58 try: |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
59 end = node.getAttribute('end') |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
60 except: |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
61 end = start |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
62 pass |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
63 try: |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
64 scene_type = node.getAttribute('type') |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
65 except: |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
66 scene_type = 'normal' |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
67 pass |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
68 |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
69 return int(start), int(end), scene_type |
1353
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
70 |
1366
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
71 ## \brief To handle the parsing for the given document. |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
72 # |
1353
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
73 def start_handle(self, doc): |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
74 self._doc = doc |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
75 self._root = doc.root() |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
76 self._layers_parent = self._root |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
77 |
1366
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
78 self._find_metadata() |
1353
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
79 |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
80 self._collect_node_ids() |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
81 self._collect_all_scenes() |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
82 |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
83 self.parse_all_layers() |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
84 |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
85 self._start_component_manager() |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
86 pass |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
87 |
1366
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
88 ## \brief Reset the content of the parser before next parsing. |
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
89 # |
1353
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
90 def reset(self): |
1354
f92be354ad24
Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents:
1353
diff
changeset
|
91 self.reset_layers() |
1353
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
92 pass |
1361
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
93 |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
94 def get_maxframe(self): |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
95 return self._maxframe |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
96 |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
97 def _find_scene_node(self, frame_idx, layer_idx): |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
98 layer = self._layers[layer_idx] |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
99 for scene_node in layer.scenes: |
1366
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
100 start, end, scene_type = self._scene_node_range(scene_node) |
1361
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
101 if start <= frame_idx and frame_idx <= end: |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
102 return scene_node |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
103 pass |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
104 pass |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
105 |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
106 def get_scene(self, frame_idx, layer_idx): |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
107 scene_node = self._find_scene_node(frame_idx, layer_idx) |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
108 if scene_node: |
1366
dc6591b4079d
Collect functions together
Thinker K.F. Li <thinker@codemud.net>
parents:
1364
diff
changeset
|
109 start, end, scene_type = self._scene_node_range(scene_node) |
1361
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
110 return start, end, scene_type |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
111 return None |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
112 |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
113 def get_scene_group(self, frame_idx, layer_idx): |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
114 scene_node = self._find_scene_node(frame_idx, layer_idx) |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
115 if scene_node: |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
116 gid = scene_node.getAttribute('ref') |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
117 scene_group = self.get_node(gid) |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
118 return scene_group |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
119 return None |
1353
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
120 pass |
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
121 |
1341
599b606c4669
Start to implement HTML5/CSS3 exporter
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
122 |
1368
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
123 def _print_subtree(node, lvl, out): |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
124 ## \brief Determize whether to skip a node and its descendants. |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
125 # |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
126 # Some part of the tree is useless in the result document. |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
127 # |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
128 def skip(node): |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
129 node_name = node.name() |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
130 if node_name == 'svg:metadata': |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
131 return True |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
132 |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
133 try: |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
134 label = node.getAttribute('inkscape:label') |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
135 except: |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
136 return False |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
137 if label == 'dup': |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
138 return True |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
139 |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
140 return False |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
141 |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
142 ## \brief Last modify style properties before generate output. |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
143 # |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
144 # This is function return a string that will be written out as |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
145 # value of style attribute. |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
146 # |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
147 def filter_style(node): |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
148 from tween import _parse_style_ani |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
149 |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
150 try: |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
151 style = node.getAttribute('style') |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
152 except: |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
153 style = '' |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
154 pass |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
155 |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
156 # |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
157 # Make scene groups hidden |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
158 # |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
159 try: |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
160 scene_group = node.getAttribute('scene_group') |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
161 except: |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
162 return style |
1361
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
163 |
1368
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
164 if scene_group != 'true': |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
165 return style |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
166 |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
167 props = {} |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
168 _parse_style_ani(node, props) |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
169 props['display'] = 'none' |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
170 |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
171 return ';'.join([key + ':' + value for key, value in props.items()]) |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
172 |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
173 def _print_level(txt, lvl, out): |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
174 indent = ' ' * lvl |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
175 print >> out, '%s%s' % (indent, txt) |
1364
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
176 pass |
1368
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
177 |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
178 def _print_node_open(node, lvl, out): |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
179 node_name = node.name() |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
180 if node_name.startswith('svg:'): |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
181 node_name = node_name[4:] |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
182 pass |
1364
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
183 |
1368
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
184 attrs = [] |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
185 for attrname in node.allAttributes(): |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
186 if attrname == 'style': |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
187 attrvalue = filter_style(node) |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
188 if not attrvalue: |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
189 continue |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
190 pass |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
191 else: |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
192 attrvalue = node.getAttribute(attrname) |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
193 pass |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
194 attr = '%s="%s"' % (attrname, attrvalue) |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
195 attrs.append(attr) |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
196 pass |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
197 |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
198 if attrs: |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
199 attrs_str = ' '.join(attrs) |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
200 line = '<%s %s>' % (node_name, attrs_str) |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
201 else: |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
202 line = '<%s>' % (node_name) |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
203 pass |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
204 _print_level(line, lvl, out) |
1361
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
205 pass |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
206 |
1368
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
207 def _print_node_close(node, lvl, out): |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
208 node_name = node.name() |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
209 if node_name.startswith('svg:'): |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
210 node_name = node_name[4:] |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
211 pass |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
212 |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
213 line = '</%s>' % (node_name) |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
214 _print_level(line, lvl, out) |
1364
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
215 pass |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
216 |
1368
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
217 def _print_node_single(node, lvl, out): |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
218 node_name = node.name() |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
219 if node_name.startswith('svg:'): |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
220 node_name = node_name[4:] |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
221 pass |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
222 |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
223 attrs = [] |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
224 for attrname in node.allAttributes(): |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
225 attrvalue = node.getAttribute(attrname) |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
226 attr = '%s="%s"' % (attrname, attrvalue) |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
227 attrs.append(attr) |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
228 pass |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
229 |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
230 if attrs: |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
231 attrs_str = ' '.join(attrs) |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
232 line = '<%s %s/>' % (node_name, attrs_str) |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
233 else: |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
234 line = '<%s/>' % (node_name) |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
235 pass |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
236 _print_level(line, lvl, out) |
1361
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
237 pass |
1368
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
238 |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
239 def _print_node_content(node, lvl, out): |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
240 line = node.content() |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
241 _print_level(line, lvl, out) |
1361
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
242 pass |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
243 |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
244 children = node.childList() |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
245 if not children: |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
246 if node.name() != 'string': |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
247 _print_node_single(node, lvl, out) |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
248 else: |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
249 _print_node_content(node, lvl, out) |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
250 pass |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
251 return |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
252 |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
253 _print_node_open(node, lvl, out) |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
254 for child in children: |
1368
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
255 if skip(child): |
9e7ec3b96968
Skip and fielt content of the tree before being written out
Thinker K.F. Li <thinker@codemud.net>
parents:
1367
diff
changeset
|
256 continue |
1361
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
257 _print_subtree(child, lvl + 1, out) |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
258 pass |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
259 _print_node_close(node, lvl, out) |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
260 pass |
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
261 |
1362
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
262 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
263 ## \brief CSS3 animation code generator. |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
264 # |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
265 # This trait parses and generate transition code, in CSS3, for two |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
266 # nodes. |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
267 # |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
268 @trait |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
269 class css3_ani_gen(object): |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
270 _parse_ani_attrs = require |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
271 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
272 _passing = lambda name, value: (name, str(value)) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
273 _trans_transform = lambda name, value: \ |
1367
9d46f2982fa3
Write animation information in javascript variable
Thinker K.F. Li <thinker@codemud.net>
parents:
1366
diff
changeset
|
274 (name, 'matrix(' + ','.join([str(e) for e in value[0]]) + ')') |
1362
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
275 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
276 _translators = {'x': _passing, 'y': _passing, |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
277 'width': _passing, 'height': _passing, |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
278 'opacity': _passing, 'transform': _trans_transform |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
279 } |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
280 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
281 del _trans_transform |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
282 del _passing |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
283 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
284 @staticmethod |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
285 def _ani_attr_to_css3(attrname, attrvalue, css): |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
286 translator = css3_ani_gen._translators[attrname] |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
287 cssname, cssvalue = translator(attrname, attrvalue) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
288 css[cssname] = cssvalue |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
289 pass |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
290 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
291 def _make_css3_transition(self, node1, node2, duration): |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
292 from tween import _normalize_attrs |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
293 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
294 ani_attrs1 = self._parse_ani_attrs(node1) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
295 ani_attrs2 = self._parse_ani_attrs(node2) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
296 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
297 _normalize_attrs(node1, ani_attrs1, node2, ani_attrs2) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
298 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
299 css = {} |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
300 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
301 attrnames = set(ani_attrs1.keys() + ani_attrs2.keys()) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
302 for attrname in attrnames: |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
303 attrvalue = ani_attrs2[attrname] |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
304 self._ani_attr_to_css3(attrname, attrvalue, css) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
305 pass |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
306 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
307 properties = css.keys() |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
308 css['transition-property'] = ', '.join(properties) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
309 css['transition-duration'] = '%gs' % (duration) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
310 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
311 return css |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
312 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
313 def _write_css(self, selector, css_props, out): |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
314 print >> out, '%s {' % (selector) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
315 for prop_name, prop_value in css_props.items(): |
1363
a05ea7fa43ec
Generate CSS rule for key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1362
diff
changeset
|
316 print >> out, ' %s: %s;' % (prop_name, prop_value) |
1362
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
317 pass |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
318 print >> out, '}' |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
319 pass |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
320 pass |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
321 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
322 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
323 @composite |
1341
599b606c4669
Start to implement HTML5/CSS3 exporter
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
324 class html5css3_ext(pybExtension.PYBindExtImp): |
1362
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
325 use_traits = (css3_ani_gen,) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
326 method_map_traits = {css3_ani_gen._make_css3_transition: |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
327 '_make_css3_transition', |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
328 css3_ani_gen._write_css: '_write_css' |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
329 } |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
330 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
331 _frame_rate = 12 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
332 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
333 def __init__(self): |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
334 self._stylesheet = {} |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
335 pass |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
336 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
337 @staticmethod |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
338 def _parse_ani_attrs(node): |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
339 from tween import _parse_attr_ani, _parse_style_ani |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
340 attrs = {} |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
341 _parse_attr_ani(node, attrs) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
342 _parse_style_ani(node, attrs) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
343 return attrs |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
344 |
1341
599b606c4669
Start to implement HTML5/CSS3 exporter
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
345 def save(self, module, doc, filename): |
1361
cf5ed0b8f45d
Write out all content of a DOM-tree
Thinker K.F. Li <thinker@codemud.net>
parents:
1354
diff
changeset
|
346 import sys |
1353
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
347 parser = dom_parser() |
1362
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
348 self._parser = parser |
1353
ce19a11657a7
Try parsing DOM in html5css3.py try with parser from domview.py
Thinker K.F. Li <thinker@codemud.net>
parents:
1341
diff
changeset
|
349 parser.start_handle(doc.rdoc) |
1354
f92be354ad24
Refactory code to layer_parser.reset_layers()
Thinker K.F. Li <thinker@codemud.net>
parents:
1353
diff
changeset
|
350 |
1364
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
351 self._handle_transition_layers() |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
352 |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
353 out = file(filename, 'w+') |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
354 print >> out, '''\ |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
355 <html |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
356 xmlns:dc="http://purl.org/dc/elements/1.1/" |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
357 xmlns:cc="http://creativecommons.org/ns#" |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
358 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
359 xmlns:svg="http://www.w3.org/2000/svg" |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
360 xmlns:xlink="http://www.w3.org/1999/xlink" |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
361 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
362 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
363 xmlns:ns0="http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd" |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
364 > |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
365 <head> |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
366 <title>Scribboo Test Page</title> |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
367 <!-- Style for animation transitions --> |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
368 <style type='text/css'>''' |
1362
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
369 |
1364
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
370 for selector, style in self._stylesheet.items(): |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
371 self._write_css(selector, style, out) |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
372 pass |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
373 |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
374 print >> out, '''\ |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
375 </style> |
1367
9d46f2982fa3
Write animation information in javascript variable
Thinker K.F. Li <thinker@codemud.net>
parents:
1366
diff
changeset
|
376 <script>''' |
9d46f2982fa3
Write animation information in javascript variable
Thinker K.F. Li <thinker@codemud.net>
parents:
1366
diff
changeset
|
377 |
9d46f2982fa3
Write animation information in javascript variable
Thinker K.F. Li <thinker@codemud.net>
parents:
1366
diff
changeset
|
378 print >>out, 'var animation_info = ' |
9d46f2982fa3
Write animation information in javascript variable
Thinker K.F. Li <thinker@codemud.net>
parents:
1366
diff
changeset
|
379 import pprint |
9d46f2982fa3
Write animation information in javascript variable
Thinker K.F. Li <thinker@codemud.net>
parents:
1366
diff
changeset
|
380 pprint.pprint(self._stylesheet, stream=out, indent=4, depth=2) |
9d46f2982fa3
Write animation information in javascript variable
Thinker K.F. Li <thinker@codemud.net>
parents:
1366
diff
changeset
|
381 |
9d46f2982fa3
Write animation information in javascript variable
Thinker K.F. Li <thinker@codemud.net>
parents:
1366
diff
changeset
|
382 print >> out, '''\ |
9d46f2982fa3
Write animation information in javascript variable
Thinker K.F. Li <thinker@codemud.net>
parents:
1366
diff
changeset
|
383 </script> |
1364
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
384 </head> |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
385 <body>''' |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
386 |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
387 root = doc.rdoc.root() |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
388 _print_subtree(root, 1, out) |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
389 |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
390 print >> out, '''\ |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
391 </body> |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
392 </html>''' |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
393 |
aa7cbf2cbf34
Fix bug of SVG been fault for showing
Thinker K.F. Li <thinker@codemud.net>
parents:
1363
diff
changeset
|
394 out.close() |
1362
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
395 pass |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
396 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
397 ## \brief Find all animation pairs. |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
398 # |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
399 # An animation pair is two nodes, one from start scene group and |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
400 # another from stop scene group. The node from start scene group |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
401 # will transite to the state of the node from stop scene group. |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
402 # This method is responsible for finding all pairs. |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
403 # |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
404 @staticmethod |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
405 def _find_transition_pairs(start_scene_group, stop_scene_group): |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
406 # Collect all nodes in stop scene |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
407 stop_nodes = {} |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
408 node = stop_scene_group.firstChild() |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
409 while node: |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
410 try: |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
411 node_label = node.getAttribute("ns0:duplicate-src") |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
412 stop_nodes[node_label] = node |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
413 except: |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
414 pass |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
415 node = node.next() |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
416 pass |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
417 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
418 # Collect all nodes in start scene |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
419 start_nodes = {} |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
420 node = start_scene_group.firstChild() |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
421 while node: |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
422 try: |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
423 node_label = node.getAttribute("id") |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
424 start_nodes[node_label] = node |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
425 except: |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
426 pass |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
427 node = node.next() |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
428 pass |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
429 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
430 pairs = [] |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
431 for start_node in start_scene_group.childList(): |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
432 start_node_id = start_node.getAttribute('id') |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
433 try: |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
434 stop_node = stop_nodes[start_node_id] |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
435 except: |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
436 stop_node = start_node |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
437 pass |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
438 pairs.append((start_node, stop_node)) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
439 pass |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
440 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
441 return pairs |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
442 |
1363
a05ea7fa43ec
Generate CSS rule for key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1362
diff
changeset
|
443 def _make_scene_group_style(self, frame_idx, layer_idx): |
a05ea7fa43ec
Generate CSS rule for key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1362
diff
changeset
|
444 scene_group = self._parser.get_scene_group(frame_idx, layer_idx) |
a05ea7fa43ec
Generate CSS rule for key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1362
diff
changeset
|
445 gid = scene_group.getAttribute('id') |
a05ea7fa43ec
Generate CSS rule for key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1362
diff
changeset
|
446 selector = '.frame%04d #%s' % (frame_idx, gid) |
a05ea7fa43ec
Generate CSS rule for key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1362
diff
changeset
|
447 style = {'display': 'inline'} |
a05ea7fa43ec
Generate CSS rule for key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1362
diff
changeset
|
448 self._stylesheet[selector] = style |
a05ea7fa43ec
Generate CSS rule for key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1362
diff
changeset
|
449 pass |
a05ea7fa43ec
Generate CSS rule for key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1362
diff
changeset
|
450 |
1362
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
451 def _handle_transition_layer(self, layer_idx): |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
452 parser = self._parser |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
453 maxframe = parser.get_maxframe() |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
454 stylesheet = self._stylesheet |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
455 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
456 frame_idx = 0 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
457 while frame_idx < maxframe: |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
458 scene = parser.get_scene(frame_idx, layer_idx) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
459 if not scene: |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
460 frame_idx = frame_idx + 1 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
461 continue |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
462 |
1363
a05ea7fa43ec
Generate CSS rule for key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1362
diff
changeset
|
463 self._make_scene_group_style(frame_idx, layer_idx) |
a05ea7fa43ec
Generate CSS rule for key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1362
diff
changeset
|
464 |
1362
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
465 start, end, tween_type = scene |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
466 if start == end: |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
467 frame_idx = frame_idx + 1 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
468 continue |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
469 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
470 next_start = end + 1 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
471 scene = parser.get_scene(next_start, layer_idx) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
472 if not scene: |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
473 frame_idx = next_start + 1 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
474 continue |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
475 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
476 scene_group = parser.get_scene_group(start, layer_idx) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
477 next_scene_group = parser.get_scene_group(next_start, layer_idx) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
478 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
479 duration = float(next_start - start) / self._frame_rate |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
480 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
481 # |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
482 # Generate style for every transition pair |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
483 # |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
484 transition_pairs = \ |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
485 self._find_transition_pairs(scene_group, next_scene_group) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
486 for start_node, stop_node in transition_pairs: |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
487 css_props = self._make_css3_transition(start_node, |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
488 stop_node, |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
489 duration) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
490 node_id = start_node.getAttribute('id') |
1363
a05ea7fa43ec
Generate CSS rule for key frames
Thinker K.F. Li <thinker@codemud.net>
parents:
1362
diff
changeset
|
491 selector = '.frame%04d #%s' % (start, node_id) |
1362
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
492 stylesheet[selector] = css_props |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
493 pass |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
494 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
495 frame_idx = next_start |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
496 pass |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
497 pass |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
498 |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
499 def _handle_transition_layers(self): |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
500 num_layers = self._parser.get_layer_num() |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
501 for layer_idx in range(num_layers): |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
502 self._handle_transition_layer(layer_idx) |
bb76f9d57363
Generate CSS3 transition rules
Thinker K.F. Li <thinker@codemud.net>
parents:
1361
diff
changeset
|
503 pass |
1341
599b606c4669
Start to implement HTML5/CSS3 exporter
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
504 pass |
599b606c4669
Start to implement HTML5/CSS3 exporter
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
505 pass |
599b606c4669
Start to implement HTML5/CSS3 exporter
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
506 |
599b606c4669
Start to implement HTML5/CSS3 exporter
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
507 extension = (html5css3_ext(), |
599b606c4669
Start to implement HTML5/CSS3 exporter
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
508 'net.scribboo.html5css3', |
599b606c4669
Start to implement HTML5/CSS3 exporter
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
509 'HTML5/CSS3 exporter', |
599b606c4669
Start to implement HTML5/CSS3 exporter
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
510 'output', |
599b606c4669
Start to implement HTML5/CSS3 exporter
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
511 {'extension': '.html', |
599b606c4669
Start to implement HTML5/CSS3 exporter
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
512 'mimetype': 'text/html', |
599b606c4669
Start to implement HTML5/CSS3 exporter
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
513 '_filetypename': 'HTML5/CSS3 (*.html)'}) |