flow_diagram_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.flow_diagram as node_flow_diagram
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 reprenstation 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 = FlowDiagramHandler()
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 FlowDiagramHandler(xml.sax.handler.ContentHandler):
37  """ ContentHandler to parse the flow diagram fld file
38  """
39 
40  def __init__(self):
41  xml.sax.handler.ContentHandler.__init__(self)
42  self._nodes = []
43  self._buffer = ""
44  self._plugin_content = False
45  self._root = None
46 
47  def startElement(self, name, attrs):
48  new_node = None
49  if name == 'FlowDiagram':
50  new_node = node_flow_diagram.FlowDiagram(
51  xar_types.attributes(attrs))
52  elif name == 'BoxInstance':
53  new_node = node_box_instance.BoxInstance(
54  xar_types.attributes(attrs))
55  elif name == 'ParameterValue':
56  new_node = node_parameter_value.ParameterValue(
57  xar_types.attributes(attrs))
58  elif name == 'PluginContent':
59  new_node = node_plugin_content.PluginContent(
60  xar_types.attributes(attrs))
61  self._plugin_content = True
62 
63  if new_node:
64  if not self._root:
65  self._root = new_node
66  # Attach to parent here
67  if self._nodes:
68  parent_node = self._nodes.pop()
69  parent_node.attach_attribute(name, new_node)
70  parent_node.add_child(new_node)
71  self._nodes.append(parent_node)
72 
73  self._nodes.append(new_node)
74  else:
75  if self._plugin_content:
76  """ this beacon can embed anything, raw string as well as
77  sub nodes.
78  """
79  new_node = node_plugin_content.PluginSubNode(name, attrs)
80  parent_node = self._nodes.pop()
81  parent_node.add_subnode(new_node)
82  parent_node.add_child(new_node)
83  self._nodes.append(parent_node)
84 
85  self._nodes.append(new_node)
86  else:
87  parent_node = self._nodes.pop()
88  parent_node.attach_attribute(name,
89  xar_types.attributes(attrs))
90  self._nodes.append(parent_node)
91 
92  self._buffer = ""
93 
94  def endElement(self, name):
95  if (name == 'BoxInstance'
96  or name == 'FlowDiagram'
97  or name == 'ParameterValue'):
98  self._nodes.pop()
99 
100  elif name == 'PluginContent':
101  self._plugin_content = False
102  self._nodes.pop()
103 
104  elif self._plugin_content:
105  current_subnode = self._nodes.pop()
106  if self._buffer:
107  current_subnode.add_content(self._buffer)
108 
109  self._buffer = ""
110 
111  def characters(self, content):
112  self._buffer += content
113 
114  def get_root(self):
115  return self._root
converter.flow_diagram_parser.FlowDiagramHandler._plugin_content
_plugin_content
Definition: flow_diagram_parser.py:44
converter.flow_diagram_parser.FlowDiagramHandler.__init__
def __init__(self)
Definition: flow_diagram_parser.py:40
converter.xar_types
Definition: xar_types.py:1
converter.flow_diagram_parser.FlowDiagramHandler.characters
def characters(self, content)
Definition: flow_diagram_parser.py:111
converter.flow_diagram_parser.FlowDiagramHandler.endElement
def endElement(self, name)
Definition: flow_diagram_parser.py:94
converter.xar_types.attributes
Copyright (c) 2012 Aldebaran Robotics.
Definition: xar_types.py:12
converter.node.flow_diagram
Definition: flow_diagram.py:1
converter.node.box_instance
Definition: box_instance.py:1
converter.flow_diagram_parser.FlowDiagramHandler._root
_root
Definition: flow_diagram_parser.py:45
converter.flow_diagram_parser.FlowDiagramHandler.get_root
def get_root(self)
Definition: flow_diagram_parser.py:114
converter.node.parameter_value
Definition: parameter_value.py:1
converter.flow_diagram_parser.FlowDiagramHandler
Definition: flow_diagram_parser.py:36
converter.flow_diagram_parser.FlowDiagramHandler._nodes
_nodes
Definition: flow_diagram_parser.py:42
converter.flow_diagram_parser.FlowDiagramHandler.startElement
def startElement(self, name, attrs)
Definition: flow_diagram_parser.py:47
converter.node.plugin_content
Definition: plugin_content.py:1
converter.flow_diagram_parser.FlowDiagramHandler._buffer
_buffer
Definition: flow_diagram_parser.py:43
converter.flow_diagram_parser.generate_tree_from_filename
def generate_tree_from_filename(filename)
Definition: flow_diagram_parser.py:17


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