summaryrefslogtreecommitdiff
path: root/gio/gdbus-2.0/codegen/parser.py
diff options
context:
space:
mode:
Diffstat (limited to 'gio/gdbus-2.0/codegen/parser.py')
-rw-r--r--gio/gdbus-2.0/codegen/parser.py164
1 files changed, 86 insertions, 78 deletions
diff --git a/gio/gdbus-2.0/codegen/parser.py b/gio/gdbus-2.0/codegen/parser.py
index 7dcc73558..d5aa0bfb5 100644
--- a/gio/gdbus-2.0/codegen/parser.py
+++ b/gio/gdbus-2.0/codegen/parser.py
@@ -25,16 +25,17 @@ import xml.parsers.expat
from . import dbustypes
from .utils import print_error
+
class DBusXMLParser:
- STATE_TOP = 'top'
- STATE_NODE = 'node'
- STATE_INTERFACE = 'interface'
- STATE_METHOD = 'method'
- STATE_SIGNAL = 'signal'
- STATE_PROPERTY = 'property'
- STATE_ARG = 'arg'
- STATE_ANNOTATION = 'annotation'
- STATE_IGNORED = 'ignored'
+ STATE_TOP = "top"
+ STATE_NODE = "node"
+ STATE_INTERFACE = "interface"
+ STATE_METHOD = "method"
+ STATE_SIGNAL = "signal"
+ STATE_PROPERTY = "property"
+ STATE_ARG = "arg"
+ STATE_ANNOTATION = "annotation"
+ STATE_IGNORED = "ignored"
def __init__(self, xml_data, h_type_implies_unix_fd=True):
self._parser = xml.parsers.expat.ParserCreate()
@@ -51,21 +52,22 @@ class DBusXMLParser:
self._cur_object = None
self._cur_object_stack = []
- self.doc_comment_last_symbol = ''
+ self.doc_comment_last_symbol = ""
self._h_type_implies_unix_fd = h_type_implies_unix_fd
self._parser.Parse(xml_data)
- COMMENT_STATE_BEGIN = 'begin'
- COMMENT_STATE_PARAMS = 'params'
- COMMENT_STATE_BODY = 'body'
- COMMENT_STATE_SKIP = 'skip'
+ COMMENT_STATE_BEGIN = "begin"
+ COMMENT_STATE_PARAMS = "params"
+ COMMENT_STATE_BODY = "body"
+ COMMENT_STATE_SKIP = "skip"
+
def handle_comment(self, data):
- comment_state = DBusXMLParser.COMMENT_STATE_BEGIN;
- lines = data.split('\n')
- symbol = ''
- body = ''
+ comment_state = DBusXMLParser.COMMENT_STATE_BEGIN
+ lines = data.split("\n")
+ symbol = ""
+ body = ""
in_para = False
params = {}
for line in lines:
@@ -73,59 +75,59 @@ class DBusXMLParser:
line = line.lstrip()
if comment_state == DBusXMLParser.COMMENT_STATE_BEGIN:
if len(line) > 0:
- colon_index = line.find(': ')
+ colon_index = line.find(": ")
if colon_index == -1:
- if line.endswith(':'):
- symbol = line[0:len(line)-1]
+ if line.endswith(":"):
+ symbol = line[0 : len(line) - 1]
comment_state = DBusXMLParser.COMMENT_STATE_PARAMS
else:
comment_state = DBusXMLParser.COMMENT_STATE_SKIP
else:
symbol = line[0:colon_index]
- rest_of_line = line[colon_index+2:].strip()
+ rest_of_line = line[colon_index + 2 :].strip()
if len(rest_of_line) > 0:
- body += '<para>' + rest_of_line + '</para>'
+ body += "<para>" + rest_of_line + "</para>"
comment_state = DBusXMLParser.COMMENT_STATE_PARAMS
elif comment_state == DBusXMLParser.COMMENT_STATE_PARAMS:
- if line.startswith('@'):
- colon_index = line.find(': ')
+ if line.startswith("@"):
+ colon_index = line.find(": ")
if colon_index == -1:
comment_state = DBusXMLParser.COMMENT_STATE_BODY
if not in_para:
- body += '<para>'
+ body += "<para>"
in_para = True
- body += orig_line + '\n'
+ body += orig_line + "\n"
else:
param = line[1:colon_index]
- docs = line[colon_index + 2:]
+ docs = line[colon_index + 2 :]
params[param] = docs
else:
comment_state = DBusXMLParser.COMMENT_STATE_BODY
if len(line) > 0:
if not in_para:
- body += '<para>'
+ body += "<para>"
in_para = True
- body += orig_line + '\n'
+ body += orig_line + "\n"
elif comment_state == DBusXMLParser.COMMENT_STATE_BODY:
if len(line) > 0:
if not in_para:
- body += '<para>'
+ body += "<para>"
in_para = True
- body += orig_line + '\n'
+ body += orig_line + "\n"
else:
if in_para:
- body += '</para>'
+ body += "</para>"
in_para = False
if in_para:
- body += '</para>'
+ body += "</para>"
- if symbol != '':
+ if symbol != "":
self.doc_comment_last_symbol = symbol
self.doc_comment_params = params
self.doc_comment_body = body
def handle_char_data(self, data):
- #print 'char_data=%s'%data
+ # print 'char_data=%s'%data
pass
def handle_start_element(self, name, attrs):
@@ -141,77 +143,76 @@ class DBusXMLParser:
elif self.state == DBusXMLParser.STATE_NODE:
if name == DBusXMLParser.STATE_INTERFACE:
self.state = DBusXMLParser.STATE_INTERFACE
- iface = dbustypes.Interface(attrs['name'])
+ iface = dbustypes.Interface(attrs["name"])
self._cur_object = iface
self.parsed_interfaces.append(iface)
elif name == DBusXMLParser.STATE_ANNOTATION:
self.state = DBusXMLParser.STATE_ANNOTATION
- anno = dbustypes.Annotation(attrs['name'], attrs['value'])
+ anno = dbustypes.Annotation(attrs["name"], attrs["value"])
self._cur_object.annotations.append(anno)
self._cur_object = anno
else:
self.state = DBusXMLParser.STATE_IGNORED
# assign docs, if any
- if 'name' in attrs and self.doc_comment_last_symbol == attrs['name']:
+ if "name" in attrs and self.doc_comment_last_symbol == attrs["name"]:
self._cur_object.doc_string = self.doc_comment_body
- if 'short_description' in self.doc_comment_params:
- short_description = self.doc_comment_params['short_description']
+ if "short_description" in self.doc_comment_params:
+ short_description = self.doc_comment_params["short_description"]
self._cur_object.doc_string_brief = short_description
- if 'since' in self.doc_comment_params:
- self._cur_object.since = \
- self.doc_comment_params['since'].strip()
+ if "since" in self.doc_comment_params:
+ self._cur_object.since = self.doc_comment_params["since"].strip()
elif self.state == DBusXMLParser.STATE_INTERFACE:
if name == DBusXMLParser.STATE_METHOD:
self.state = DBusXMLParser.STATE_METHOD
- method = dbustypes.Method(attrs['name'],
- h_type_implies_unix_fd=self._h_type_implies_unix_fd)
+ method = dbustypes.Method(
+ attrs["name"], h_type_implies_unix_fd=self._h_type_implies_unix_fd
+ )
self._cur_object.methods.append(method)
self._cur_object = method
elif name == DBusXMLParser.STATE_SIGNAL:
self.state = DBusXMLParser.STATE_SIGNAL
- signal = dbustypes.Signal(attrs['name'])
+ signal = dbustypes.Signal(attrs["name"])
self._cur_object.signals.append(signal)
self._cur_object = signal
elif name == DBusXMLParser.STATE_PROPERTY:
self.state = DBusXMLParser.STATE_PROPERTY
- prop = dbustypes.Property(attrs['name'], attrs['type'], attrs['access'])
+ prop = dbustypes.Property(attrs["name"], attrs["type"], attrs["access"])
self._cur_object.properties.append(prop)
self._cur_object = prop
elif name == DBusXMLParser.STATE_ANNOTATION:
self.state = DBusXMLParser.STATE_ANNOTATION
- anno = dbustypes.Annotation(attrs['name'], attrs['value'])
+ anno = dbustypes.Annotation(attrs["name"], attrs["value"])
self._cur_object.annotations.append(anno)
self._cur_object = anno
else:
self.state = DBusXMLParser.STATE_IGNORED
# assign docs, if any
- if 'name' in attrs and self.doc_comment_last_symbol == attrs['name']:
+ if "name" in attrs and self.doc_comment_last_symbol == attrs["name"]:
self._cur_object.doc_string = self.doc_comment_body
- if 'since' in self.doc_comment_params:
- self._cur_object.since = \
- self.doc_comment_params['since'].strip()
+ if "since" in self.doc_comment_params:
+ self._cur_object.since = self.doc_comment_params["since"].strip()
elif self.state == DBusXMLParser.STATE_METHOD:
if name == DBusXMLParser.STATE_ARG:
self.state = DBusXMLParser.STATE_ARG
arg_name = None
- if 'name' in attrs:
- arg_name = attrs['name']
- arg = dbustypes.Arg(arg_name, attrs['type'])
- direction = attrs.get('direction', 'in')
- if direction == 'in':
+ if "name" in attrs:
+ arg_name = attrs["name"]
+ arg = dbustypes.Arg(arg_name, attrs["type"])
+ direction = attrs.get("direction", "in")
+ if direction == "in":
self._cur_object.in_args.append(arg)
- elif direction == 'out':
+ elif direction == "out":
self._cur_object.out_args.append(arg)
else:
print_error('Invalid direction "{}"'.format(direction))
self._cur_object = arg
elif name == DBusXMLParser.STATE_ANNOTATION:
self.state = DBusXMLParser.STATE_ANNOTATION
- anno = dbustypes.Annotation(attrs['name'], attrs['value'])
+ anno = dbustypes.Annotation(attrs["name"], attrs["value"])
self._cur_object.annotations.append(anno)
self._cur_object = anno
else:
@@ -219,26 +220,27 @@ class DBusXMLParser:
# assign docs, if any
if self.doc_comment_last_symbol == old_cur_object.name:
- if 'name' in attrs and attrs['name'] in self.doc_comment_params:
- doc_string = self.doc_comment_params[attrs['name']]
+ if "name" in attrs and attrs["name"] in self.doc_comment_params:
+ doc_string = self.doc_comment_params[attrs["name"]]
if doc_string != None:
self._cur_object.doc_string = doc_string
- if 'since' in self.doc_comment_params:
- self._cur_object.since = \
- self.doc_comment_params['since'].strip()
+ if "since" in self.doc_comment_params:
+ self._cur_object.since = self.doc_comment_params[
+ "since"
+ ].strip()
elif self.state == DBusXMLParser.STATE_SIGNAL:
if name == DBusXMLParser.STATE_ARG:
self.state = DBusXMLParser.STATE_ARG
arg_name = None
- if 'name' in attrs:
- arg_name = attrs['name']
- arg = dbustypes.Arg(arg_name, attrs['type'])
+ if "name" in attrs:
+ arg_name = attrs["name"]
+ arg = dbustypes.Arg(arg_name, attrs["type"])
self._cur_object.args.append(arg)
self._cur_object = arg
elif name == DBusXMLParser.STATE_ANNOTATION:
self.state = DBusXMLParser.STATE_ANNOTATION
- anno = dbustypes.Annotation(attrs['name'], attrs['value'])
+ anno = dbustypes.Annotation(attrs["name"], attrs["value"])
self._cur_object.annotations.append(anno)
self._cur_object = anno
else:
@@ -246,18 +248,19 @@ class DBusXMLParser:
# assign docs, if any
if self.doc_comment_last_symbol == old_cur_object.name:
- if 'name' in attrs and attrs['name'] in self.doc_comment_params:
- doc_string = self.doc_comment_params[attrs['name']]
+ if "name" in attrs and attrs["name"] in self.doc_comment_params:
+ doc_string = self.doc_comment_params[attrs["name"]]
if doc_string != None:
self._cur_object.doc_string = doc_string
- if 'since' in self.doc_comment_params:
- self._cur_object.since = \
- self.doc_comment_params['since'].strip()
+ if "since" in self.doc_comment_params:
+ self._cur_object.since = self.doc_comment_params[
+ "since"
+ ].strip()
elif self.state == DBusXMLParser.STATE_PROPERTY:
if name == DBusXMLParser.STATE_ANNOTATION:
self.state = DBusXMLParser.STATE_ANNOTATION
- anno = dbustypes.Annotation(attrs['name'], attrs['value'])
+ anno = dbustypes.Annotation(attrs["name"], attrs["value"])
self._cur_object.annotations.append(anno)
self._cur_object = anno
else:
@@ -266,7 +269,7 @@ class DBusXMLParser:
elif self.state == DBusXMLParser.STATE_ARG:
if name == DBusXMLParser.STATE_ANNOTATION:
self.state = DBusXMLParser.STATE_ANNOTATION
- anno = dbustypes.Annotation(attrs['name'], attrs['value'])
+ anno = dbustypes.Annotation(attrs["name"], attrs["value"])
self._cur_object.annotations.append(anno)
self._cur_object = anno
else:
@@ -275,14 +278,18 @@ class DBusXMLParser:
elif self.state == DBusXMLParser.STATE_ANNOTATION:
if name == DBusXMLParser.STATE_ANNOTATION:
self.state = DBusXMLParser.STATE_ANNOTATION
- anno = dbustypes.Annotation(attrs['name'], attrs['value'])
+ anno = dbustypes.Annotation(attrs["name"], attrs["value"])
self._cur_object.annotations.append(anno)
self._cur_object = anno
else:
self.state = DBusXMLParser.STATE_IGNORED
else:
- print_error('Unhandled state "{}" while entering element with name "{}"'.format(self.state, name))
+ print_error(
+ 'Unhandled state "{}" while entering element with name "{}"'.format(
+ self.state, name
+ )
+ )
self.state_stack.append(old_state)
self._cur_object_stack.append(old_cur_object)
@@ -291,6 +298,7 @@ class DBusXMLParser:
self.state = self.state_stack.pop()
self._cur_object = self._cur_object_stack.pop()
+
def parse_dbus_xml(xml_data, h_type_implies_unix_fd):
parser = DBusXMLParser(xml_data, h_type_implies_unix_fd)
return parser.parsed_interfaces