diff options
author | David Zeuthen <davidz@redhat.com> | 2011-04-03 16:01:04 -0400 |
---|---|---|
committer | David Zeuthen <davidz@redhat.com> | 2011-04-03 16:01:04 -0400 |
commit | 3c52a86ca5a4f40c5a536d95b81d5c9a164afd0f (patch) | |
tree | 33bff270ae1b4effe500acc9dee79b91b8a4e5c7 | |
parent | cce9a9c56077c8fef9a9f4a53c532a42b868609d (diff) |
Generalize strip prefix and use it in the doc index
Signed-off-by: David Zeuthen <davidz@redhat.com>
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/codegen.py | 5 | ||||
-rw-r--r-- | src/codegen_docbook.py | 8 | ||||
-rw-r--r-- | src/codegen_main.py | 10 | ||||
-rw-r--r-- | src/dbustypes.py | 30 | ||||
-rwxr-xr-x | src/gdbus-codegen.in | 2 | ||||
-rw-r--r-- | src/parser.py | 8 |
7 files changed, 32 insertions, 33 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index df461f4..3bc9760 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -99,7 +99,7 @@ BUILT_SOURCES += test-generated.h test-generated.c test-generated.h test-generated.c : Makefile.am org.project.xml $(codegen_PYTHON) $(PYTHON) ./codegen_main.py \ --c-namespace Foo \ - --c-strip-prefix org.project. \ + --interface-prefix org.project. \ --generate-c-code test-generated \ --generate-docbook test-generated-docs.xml \ --annotate "org.project.Bar" Key1 Value1 \ diff --git a/src/codegen.py b/src/codegen.py index 8e38f22..490e5c7 100644 --- a/src/codegen.py +++ b/src/codegen.py @@ -6,12 +6,11 @@ import argparse import config import utils import dbustypes -import parser # ---------------------------------------------------------------------------------------------------- class CodeGenerator: - def __init__(self, ifaces, namespace, strip_prefix, h, c): + def __init__(self, ifaces, namespace, interface_prefix, h, c): self.ifaces = ifaces self.h = h self.c = c @@ -22,7 +21,7 @@ class CodeGenerator: else: self.ns_upper = '' self.ns_lower = '' - self.strip_prefix = strip_prefix + self.interface_prefix = interface_prefix self.header_guard = self.h.name.upper().replace('.', '_').replace('-', '_') # ---------------------------------------------------------------------------------------------------- diff --git a/src/codegen_docbook.py b/src/codegen_docbook.py index 82b9b84..b70e6d3 100644 --- a/src/codegen_docbook.py +++ b/src/codegen_docbook.py @@ -146,7 +146,7 @@ class DocbookCodeGenerator: def print_method(self, i, m): self.out.write('<refsect2 role="method" id="gdbus-method-%s.%s">\n'%(i.name, m.name)) self.out.write(' <title>%s</title>\n'%(m.name)) - self.out.write(' <indexterm zone="gdbus-method-%s.%s"><primary>%s.%s() D-Bus Method</primary></indexterm>\n'%(i.name, m.name, i.name, m.name)) + self.out.write(' <indexterm zone="gdbus-method-%s.%s"><primary sortas="%s.%s">The %s.%s() D-Bus Method</primary></indexterm>\n'%(i.name, m.name, i.name_without_prefix, m.name, i.name, m.name)) self.out.write('<programlisting>\n') self.print_method_prototype(i, m, in_synopsis=False) self.out.write('</programlisting>\n') @@ -168,7 +168,7 @@ class DocbookCodeGenerator: def print_signal(self, i, s): self.out.write('<refsect2 role="signal" id="gdbus-signal-%s.%s">\n'%(i.name, s.name)) self.out.write(' <title>%s</title>\n'%(s.name)) - self.out.write(' <indexterm zone="gdbus-signal-%s.%s"><primary>%s::%s D-Bus Signal</primary></indexterm>\n'%(i.name, s.name, i.name, s.name)) + self.out.write(' <indexterm zone="gdbus-signal-%s.%s"><primary sortas="%s::%s">The %s::%s D-Bus Signal</primary></indexterm>\n'%(i.name, s.name, i.name_without_prefix, s.name, i.name, s.name)) self.out.write('<programlisting>\n') self.print_signal_prototype(i, s, in_synopsis=False) self.out.write('</programlisting>\n') @@ -185,7 +185,7 @@ class DocbookCodeGenerator: def print_property(self, i, p): self.out.write('<refsect2 role="property" id="gdbus-property-%s.%s">\n'%(i.name, p.name)) self.out.write(' <title>%s</title>\n'%(p.name)) - self.out.write(' <indexterm zone="gdbus-property-%s.%s"><primary>%s:%s D-Bus Property</primary></indexterm>\n'%(i.name, p.name, i.name, p.name)) + self.out.write(' <indexterm zone="gdbus-property-%s.%s"><primary sortas="%s:%s">The %s:%s D-Bus Property</primary></indexterm>\n'%(i.name, p.name, i.name_without_prefix, p.name, i.name, p.name)) self.out.write('<programlisting>\n') self.print_property_prototype(i, p, in_synopsis=False) self.out.write('</programlisting>\n') @@ -199,6 +199,7 @@ class DocbookCodeGenerator: self.out.write('<refentry id="gdbus-%s">\n'%(i.name)) self.out.write(' <refmeta>'%()) self.out.write(' <refentrytitle role="top_of_page" id="gdbus-%s.top_of_page">%s</refentrytitle>\n'%(i.name, i.name)) + self.out.write(' <indexterm zone="gdbus-interface-%s"><primary sortas="%s">The %s D-Bus Interface</primary></indexterm>\n'%(i.name, i.name_without_prefix, i.name)) self.out.write(' </refmeta>'%()) self.out.write(' <refnamediv>'%()) @@ -215,7 +216,6 @@ class DocbookCodeGenerator: self.out.write('<refsect1 role="desc" id="gdbus-interface-%s">\n'%(i.name)) self.out.write(' <title role="desc.title">Description</title>\n'%()) - self.out.write(' <indexterm zone="gdbus-interface-%s"><primary>%s D-Bus Interface</primary></indexterm>\n'%(i.name, i.name)) self.out.write(' <para>%s</para>\n'%(i.doc_string)) self.out.write('</refsect1>\n'%()) diff --git a/src/codegen_main.py b/src/codegen_main.py index dada60f..1ebd428 100644 --- a/src/codegen_main.py +++ b/src/codegen_main.py @@ -128,10 +128,10 @@ def codegen_main(): arg_parser = argparse.ArgumentParser(description='GDBus Code Generator') arg_parser.add_argument('xml_files', metavar='FILE', type=file, nargs='+', help='D-Bus introspection XML file') + arg_parser.add_argument('--interface-prefix', nargs='?', metavar='PREFIX', default='', + help='String to strip from D-Bus interface names for code and docs') arg_parser.add_argument('--c-namespace', nargs='?', metavar='NAMESPACE', default='', help='The namespace to use for generated C code') - arg_parser.add_argument('--c-strip-prefix', nargs='?', metavar='PREFIX', default='', - help='String to strip from D-Bus names when generating C code') arg_parser.add_argument('--generate-c-code', nargs='?', metavar='OUTFILE', help='Generate C code in OUTFILE.[ch]') arg_parser.add_argument('--generate-docbook', nargs='?', metavar='OUTFILE', @@ -144,20 +144,20 @@ def codegen_main(): for f in args.xml_files: xml_data = f.read() f.close() - parsed_ifaces = parser.parse_dbus_xml(xml_data, args.c_strip_prefix, args.c_namespace) + parsed_ifaces = parser.parse_dbus_xml(xml_data) all_ifaces.extend(parsed_ifaces) if args.annotate != None: apply_annotations(all_ifaces, args.annotate) for i in parsed_ifaces: - i.post_process(args.c_strip_prefix, args.c_namespace) + i.post_process(args.interface_prefix, args.c_namespace) c_code = args.generate_c_code if c_code: h = file(c_code + '.h', 'w') c = file(c_code + '.c', 'w') - gen = codegen.CodeGenerator(all_ifaces, args.c_namespace, args.c_strip_prefix, h, c); + gen = codegen.CodeGenerator(all_ifaces, args.c_namespace, args.interface_prefix, h, c); ret = gen.generate() docbook = args.generate_docbook diff --git a/src/dbustypes.py b/src/dbustypes.py index b20173f..01b2dda 100644 --- a/src/dbustypes.py +++ b/src/dbustypes.py @@ -15,7 +15,7 @@ class Arg: self.annotations = [] self.doc_string = '' - def post_process(self, c_strip_prefix, c_namespace, arg_number): + def post_process(self, interface_prefix, c_namespace, arg_number): if len(self.doc_string) == 0: self.doc_string = utils.lookup_docs(self.annotations) @@ -159,7 +159,7 @@ class Method: self.annotations = [] self.doc_string = '' - def post_process(self, c_strip_prefix, c_namespace): + def post_process(self, interface_prefix, c_namespace): if len(self.doc_string) == 0: self.doc_string = utils.lookup_docs(self.annotations) @@ -173,11 +173,11 @@ class Method: arg_count = 0 for a in self.in_args: - a.post_process(c_strip_prefix, c_namespace, arg_count) + a.post_process(interface_prefix, c_namespace, arg_count) arg_count += 1 for a in self.out_args: - a.post_process(c_strip_prefix, c_namespace, arg_count) + a.post_process(interface_prefix, c_namespace, arg_count) arg_count += 1 class Signal: @@ -187,7 +187,7 @@ class Signal: self.annotations = [] self.doc_string = '' - def post_process(self, c_strip_prefix, c_namespace): + def post_process(self, interface_prefix, c_namespace): if len(self.doc_string) == 0: self.doc_string = utils.lookup_docs(self.annotations) @@ -201,7 +201,7 @@ class Signal: arg_count = 0 for a in self.args: - a.post_process(c_strip_prefix, c_namespace, arg_count) + a.post_process(interface_prefix, c_namespace, arg_count) arg_count += 1 class Property: @@ -225,7 +225,7 @@ class Property: raise RuntimeError('Invalid access type %s'%self.access) self.doc_string = '' - def post_process(self, c_strip_prefix, c_namespace): + def post_process(self, interface_prefix, c_namespace): if len(self.doc_string) == 0: self.doc_string = utils.lookup_docs(self.annotations) @@ -239,7 +239,7 @@ class Property: # recalculate arg self.arg.annotations = self.annotations - self.arg.post_process(c_strip_prefix, c_namespace, 0) + self.arg.post_process(interface_prefix, c_namespace, 0) class Interface: def __init__(self, name): @@ -251,7 +251,7 @@ class Interface: self.doc_string = '' self.doc_string_brief = '' - def post_process(self, c_strip_prefix, c_namespace): + def post_process(self, interface_prefix, c_namespace): if len(self.doc_string) == 0: self.doc_string = utils.lookup_docs(self.annotations) if len(self.doc_string_brief) == 0: @@ -262,11 +262,13 @@ class Interface: name = overridden_name else: name = self.name - if name.startswith(c_strip_prefix): - name = name[len(c_strip_prefix):] + if name.startswith(interface_prefix): + name = name[len(interface_prefix):] + self.name_without_prefix = name name = utils.strip_dots(name) name_with_ns = utils.strip_dots(c_namespace + '.' + name) + self.camel_name = name_with_ns if len(c_namespace) > 0: self.ns_upper = utils.camel_case_to_uscore(c_namespace).upper() + '_' @@ -277,10 +279,10 @@ class Interface: self.name_upper = utils.camel_case_to_uscore(name).upper() for m in self.methods: - m.post_process(c_strip_prefix, c_namespace) + m.post_process(interface_prefix, c_namespace) for s in self.signals: - s.post_process(c_strip_prefix, c_namespace) + s.post_process(interface_prefix, c_namespace) for p in self.properties: - p.post_process(c_strip_prefix, c_namespace) + p.post_process(interface_prefix, c_namespace) diff --git a/src/gdbus-codegen.in b/src/gdbus-codegen.in index 8c024a1..12136d7 100755 --- a/src/gdbus-codegen.in +++ b/src/gdbus-codegen.in @@ -6,6 +6,6 @@ import sys path = os.path.join('@libdir@', 'gdbus-codegen') sys.path.insert(0, path) -from codegen import codegen_main +from codegen_main import codegen_main sys.exit(codegen_main()) diff --git a/src/parser.py b/src/parser.py index 2f0fcf8..e5d93bc 100644 --- a/src/parser.py +++ b/src/parser.py @@ -15,7 +15,7 @@ class DBusXMLParser: STATE_ARG = 'arg' STATE_ANNOTATION = 'annotation' - def __init__(self, xml_data, dbus_strip_prefix, dbus_namespace): + def __init__(self, xml_data): self._parser = xml.parsers.expat.ParserCreate() self._parser.CommentHandler = self.handle_comment self._parser.CharacterDataHandler = self.handle_char_data @@ -25,8 +25,6 @@ class DBusXMLParser: self.parsed_interfaces = [] self._cur_object = None - self.dbus_strip_prefix = dbus_strip_prefix - self.dbus_namespace = dbus_namespace self.state = DBusXMLParser.STATE_TOP self.state_stack = [] self._cur_object = None @@ -252,6 +250,6 @@ class DBusXMLParser: self.state = self.state_stack.pop() self._cur_object = self._cur_object_stack.pop() -def parse_dbus_xml(xml_data, dbus_strip_prefix, dbus_namespace): - parser = DBusXMLParser(xml_data, dbus_strip_prefix, dbus_namespace) +def parse_dbus_xml(xml_data): + parser = DBusXMLParser(xml_data) return parser.parsed_interfaces |