diff options
Diffstat (limited to 'gio/gdbus-2.0/codegen/parser.py')
-rw-r--r-- | gio/gdbus-2.0/codegen/parser.py | 164 |
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 |