6 from libtpcodegen import file_set_contents
7 from libglibcodegen import NS_TP, get_docstring, xml_escape
9 class Generator(object):
10 def __init__(self, dom, basename):
12 self.errors = self.dom.getElementsByTagNameNS(NS_TP, 'errors')[0]
13 self.basename = basename
20 if isinstance(s, unicode):
22 self.__header.append(s)
25 if isinstance(s, unicode):
30 if isinstance(s, unicode):
35 errors = self.errors.getElementsByTagNameNS(NS_TP, 'error')
37 self.b('#include <telepathy-glib/errors.h>')
39 self.b('const gchar *')
40 self.b('tp_error_get_dbus_name (TpError error)')
42 self.b(' switch (error)')
46 ns = error.parentNode.getAttribute('namespace')
47 nick = error.getAttribute('name').replace(' ', '')
48 uc_nick = error.getAttribute('name').replace(' ', '_').replace('.', '_').upper()
49 name = 'TP_ERROR_STR_' + uc_nick
50 error_name = '%s.%s' % (ns, nick)
53 self.d(' * %s:' % name)
55 self.d(' * The D-Bus error name %s' % error_name)
57 self.d(' * %s' % xml_escape(get_docstring(error)))
61 self.h('#define %s "%s"' % (name, error_name))
63 self.b(' case TP_ERROR_%s:' % uc_nick)
64 self.b(' return %s;' % name)
67 self.b(' g_return_val_if_reached (NULL);')
71 # make both files end with a newline
75 file_set_contents(self.basename + '.h', '\n'.join(self.__header))
76 file_set_contents(self.basename + '.c', '\n'.join(self.__body))
77 file_set_contents(self.basename + '-gtk-doc.h', '\n'.join(self.__docs))
79 if __name__ == '__main__':
83 Generator(xml.dom.minidom.parse(argv[1]), basename)()