behavior_parser.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 
6 
7 import xml.sax
8 
9 import converter.xar_types as xar_types
10 
11 import converter.node.choregraphe_project as node_choregraphe_project
12 import converter.node.box_instance as node_box_instance
13 import converter.node.parameter_value as node_parameter_value
14 import converter.node.plugin_content as node_plugin_content
15 
16 
18  """ Generates the representation of the file designed by filename
19  in memory. Build a tree.
20 
21  :param filename: name of the file to parse
22  :returns: the tree representing the file
23  """
24  parser = xml.sax.make_parser()
25  handler = BehaviorHandler()
26  parser.setContentHandler(handler)
27  parser.parse(open(filename))
28 
29  root_node = handler.get_root()
30  if root_node.format_version != "4":
31  return None
32 
33  return root_node
34 
35 
36 class BehaviorHandler(xml.sax.handler.ContentHandler):
37  """ ContentHandler to parse the xar file
38  """
39 
40  def __init__(self):
41  xml.sax.handler.ContentHandler.__init__(self)
42  self._root = None
43  self._buffer = ""
44  self._nodes = []
45 
46  def startElement(self, name, attrs):
47  new_node = None
48  if name == 'ChoregrapheProject':
49  new_node = node_choregraphe_project.ChoregrapheProject(
50  xar_types.attributes(attrs))
51  elif name == 'BoxInstance':
52  new_node = node_box_instance.BoxInstance(
53  xar_types.attributes(attrs))
54  elif name == 'ParameterValue':
55  new_node = node_parameter_value.ParameterValue(
56  xar_types.attributes(attrs))
57  elif name == 'PluginContent':
58  new_node = node_plugin_content.PluginContent(
59  xar_types.attributes(attrs))
60 
61  if new_node:
62  if not self._root:
63  self._root = new_node
64  if self._nodes:
65  parent_node = self._nodes.pop()
66  parent_node.attach_attribute(name, new_node)
67  parent_node.add_child(new_node)
68  self._nodes.append(parent_node)
69 
70  self._nodes.append(new_node)
71  else:
72  """ pluginContent beacon can embed anything, raw string as well as
73  sub nodes.
74  """
75  new_node = node_plugin_content.PluginSubNode(name, attrs)
76  parent_node = self._nodes.pop()
77  parent_node.add_subnode(new_node)
78  parent_node.add_child(new_node)
79  self._nodes.append(parent_node)
80  self._nodes.append(new_node)
81 
82  self._buffer = ""
83 
84  def endElement(self, name):
85  if (name == 'BoxInstance'
86  or name == 'ChoregrapheProject'
87  or name == 'ParameterValue'
88  or name == 'PluginContent'):
89  self._nodes.pop()
90  else:
91  current_subnode = self._nodes.pop()
92  if self._buffer:
93  current_subnode.add_content(self._buffer)
94 
95  self._buffer = ""
96 
97  def characters(self, content):
98  self._buffer += content
99 
100  def get_root(self):
101  return self._root
converter.behavior_parser.BehaviorHandler
Definition: behavior_parser.py:36
converter.behavior_parser.BehaviorHandler.__init__
def __init__(self)
Definition: behavior_parser.py:40
converter.behavior_parser.BehaviorHandler.endElement
def endElement(self, name)
Definition: behavior_parser.py:84
converter.xar_types
Definition: xar_types.py:1
converter.behavior_parser.BehaviorHandler._buffer
_buffer
Definition: behavior_parser.py:43
converter.behavior_parser.BehaviorHandler.get_root
def get_root(self)
Definition: behavior_parser.py:100
converter.behavior_parser.BehaviorHandler._nodes
_nodes
Definition: behavior_parser.py:44
converter.xar_types.attributes
Copyright (c) 2012 Aldebaran Robotics.
Definition: xar_types.py:12
converter.behavior_parser.generate_tree_from_filename
def generate_tree_from_filename(filename)
Definition: behavior_parser.py:17
converter.behavior_parser.BehaviorHandler.characters
def characters(self, content)
Definition: behavior_parser.py:97
converter.node.choregraphe_project
Definition: choregraphe_project.py:1
converter.behavior_parser.BehaviorHandler.startElement
def startElement(self, name, attrs)
Definition: behavior_parser.py:46
converter.node.box_instance
Definition: box_instance.py:1
converter.node.parameter_value
Definition: parameter_value.py:1
converter.node.plugin_content
Definition: plugin_content.py:1
converter.behavior_parser.BehaviorHandler._root
_root
Definition: behavior_parser.py:42


naoqi_libqicore
Author(s): Aldebaran
autogenerated on Wed Sep 14 2022 02:22:41