annotate pyink/html5css3.py @ 1395:a768d74e5f49

Fix the svg:use. For a svg:use, it is a group which include the content it reference. It means that we can not tween it to its origin object directly. Instead, we need to ungroup it and then use the result matrix to generate the tweened transformation matrix. Therefore, we need to concate its matrix to the referenced object. Ad center object when the bbox-x is not available.
author wycc
date Sat, 02 Apr 2011 05:36:36 +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)'})