26 """ Generates the reprenstation of the file designed by filename
27 in memory. Build a tree.
29 :param filename: name of the file to parse
30 :returns: the tree representing the file
35 parser = xml.sax.make_parser()
37 parser.setContentHandler(handler)
38 parser.parse(open(filename))
39 return handler.get_root()
43 with codecs.open(filename, encoding=
'utf-8', mode=
'r')
as ofile:
44 header = ofile.readline()
45 header = header + ofile.readline()
46 if (
not (
"xar_version=\"3\"" in header)):
52 """ ContentHandler to parse the xar file
56 xml.sax.handler.ContentHandler.__init__(self)
66 elif name ==
'script':
68 elif name ==
'Parameter':
70 elif name ==
'pluginContent':
71 new_node = node_plugin_content.PluginContent(
74 elif name ==
'Timeline':
76 elif name ==
'BehaviorLayer':
77 new_node = node_behavior_layer.BehaviorLayer(
79 elif name ==
'BehaviorKeyframe':
80 new_node = node_behavior_keyframe.BehaviorKeyframe(
82 elif name ==
'Diagram':
84 elif name ==
'ActuatorList':
85 new_node = node_actuator_list.ActuatorList(
87 elif name ==
'ActuatorCurve':
88 new_node = node_actuator_curve.ActuatorCurve(
91 new_node = node_actuator_key.ActuatorKey(
99 parent_node = self.
_nodes.pop()
100 parent_node.attach_attribute(name, new_node)
101 parent_node.add_child(new_node)
102 self.
_nodes.append(parent_node)
104 self.
_nodes.append(new_node)
106 """ pluginContent beacon can embed anything, raw string as well as
110 new_node = node_plugin_content.PluginSubNode(name, attrs)
111 parent_node = self.
_nodes.pop()
112 parent_node.add_subnode(new_node)
113 parent_node.add_child(new_node)
114 self.
_nodes.append(parent_node)
115 self.
_nodes.append(new_node)
117 elif (self.
_nodes and name !=
'bitmap' and name !=
'content'):
118 parent_node = self.
_nodes.pop()
119 parent_node.attach_attribute(name,
121 self.
_nodes.append(parent_node)
127 or name ==
'script' or name ==
'Parameter'
128 or name ==
'Timeline' or name ==
'BehaviorLayer'
129 or name ==
'BehaviorKeyframe' or name ==
'Diagram'
130 or name ==
'ActuatorList' or name ==
'ActuatorCurve'
133 elif name ==
'pluginContent':
137 current_subnode = self.
_nodes.pop()
139 current_subnode.add_content(self.
_buffer)
140 elif name ==
'bitmap':
141 bitmap = node_bitmap.Bitmap(self.
_buffer)
142 parent_node = self.
_nodes.pop()
143 parent_node.attach_attribute(name, bitmap)
144 parent_node.add_child(bitmap)
145 self.
_nodes.append(parent_node)
146 elif name ==
'content':
147 parent_node = self.
_nodes.pop()
148 parent_node.attach_attribute(name, self.
_buffer)
149 self.
_nodes.append(parent_node)