summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Zeuthen <davidz@redhat.com>2011-04-03 16:01:04 -0400
committerDavid Zeuthen <davidz@redhat.com>2011-04-03 16:01:04 -0400
commit3c52a86ca5a4f40c5a536d95b81d5c9a164afd0f (patch)
tree33bff270ae1b4effe500acc9dee79b91b8a4e5c7
parentcce9a9c56077c8fef9a9f4a53c532a42b868609d (diff)
Generalize strip prefix and use it in the doc index
Signed-off-by: David Zeuthen <davidz@redhat.com>
-rw-r--r--src/Makefile.am2
-rw-r--r--src/codegen.py5
-rw-r--r--src/codegen_docbook.py8
-rw-r--r--src/codegen_main.py10
-rw-r--r--src/dbustypes.py30
-rwxr-xr-xsrc/gdbus-codegen.in2
-rw-r--r--src/parser.py8
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