6 from libglibcodegen import NS_TP, get_docstring, xml_escape
8 class Generator(object):
9 def __init__(self, dom, basename):
11 self.errors = self.dom.getElementsByTagNameNS(NS_TP, 'errors')[0]
12 self.basename = basename
19 if isinstance(s, unicode):
21 self.__header.append(s)
24 if isinstance(s, unicode):
29 if isinstance(s, unicode):
34 errors = self.errors.getElementsByTagNameNS(NS_TP, 'error')
36 self.b('#include <telepathy-glib/errors.h>')
38 self.b('const gchar *')
39 self.b('tp_error_get_dbus_name (TpError error)')
41 self.b(' switch (error)')
45 ns = error.parentNode.getAttribute('namespace')
46 nick = error.getAttribute('name').replace(' ', '')
47 uc_nick = error.getAttribute('name').replace(' ', '_').replace('.', '_').upper()
48 name = 'TP_ERROR_STR_' + uc_nick
49 error_name = '%s.%s' % (ns, nick)
52 self.d(' * %s:' % name)
54 self.d(' * The D-Bus error name %s' % error_name)
56 self.d(' * %s' % xml_escape(get_docstring(error)))
60 self.h('#define %s "%s"' % (name, error_name))
62 self.b(' case TP_ERROR_%s:' % uc_nick)
63 self.b(' return %s;' % name)
66 self.b(' g_return_val_if_reached (NULL);')
70 # make both files end with a newline
74 open(self.basename + '.h', 'w').write('\n'.join(self.__header))
75 open(self.basename + '.c', 'w').write('\n'.join(self.__body))
76 open(self.basename + '-gtk-doc.h', 'w').write('\n'.join(self.__docs))
78 if __name__ == '__main__':
82 Generator(xml.dom.minidom.parse(argv[1]), basename)()