|
Packit |
79f644 |
#!/usr/bin/python
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
import sys
|
|
Packit |
79f644 |
import xml.dom.minidom
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
from libtpcodegen import file_set_contents, u
|
|
Packit |
79f644 |
from libglibcodegen import NS_TP, get_docstring, xml_escape
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
class Generator(object):
|
|
Packit |
79f644 |
def __init__(self, dom, basename):
|
|
Packit |
79f644 |
self.dom = dom
|
|
Packit |
79f644 |
self.errors = self.dom.getElementsByTagNameNS(NS_TP, 'errors')[0]
|
|
Packit |
79f644 |
self.basename = basename
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
self.__header = []
|
|
Packit |
79f644 |
self.__body = []
|
|
Packit |
79f644 |
self.__docs = []
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
def h(self, s):
|
|
Packit |
79f644 |
self.__header.append(s)
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
def b(self, s):
|
|
Packit |
79f644 |
self.__body.append(s)
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
def d(self, s):
|
|
Packit |
79f644 |
self.__docs.append(s)
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
def __call__(self):
|
|
Packit |
79f644 |
errors = self.errors.getElementsByTagNameNS(NS_TP, 'error')
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
self.b('#include <telepathy-glib/errors.h>')
|
|
Packit |
79f644 |
self.b('')
|
|
Packit |
79f644 |
self.b('const gchar *')
|
|
Packit |
79f644 |
self.b('tp_error_get_dbus_name (TpError error)')
|
|
Packit |
79f644 |
self.b('{')
|
|
Packit |
79f644 |
self.b(' switch (error)')
|
|
Packit |
79f644 |
self.b(' {')
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
for error in errors:
|
|
Packit |
79f644 |
ns = error.parentNode.getAttribute('namespace')
|
|
Packit |
79f644 |
nick = error.getAttribute('name').replace(' ', '')
|
|
Packit |
79f644 |
uc_nick = error.getAttribute('name').replace(' ', '_').replace('.', '_').upper()
|
|
Packit |
79f644 |
name = 'TP_ERROR_STR_' + uc_nick
|
|
Packit |
79f644 |
error_name = '%s.%s' % (ns, nick)
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
self.d('/**')
|
|
Packit |
79f644 |
self.d(' * %s:' % name)
|
|
Packit |
79f644 |
self.d(' *')
|
|
Packit |
79f644 |
self.d(' * The D-Bus error name %s' % error_name)
|
|
Packit |
79f644 |
self.d(' *')
|
|
Packit |
79f644 |
self.d(' * %s' % xml_escape(get_docstring(error)))
|
|
Packit |
79f644 |
self.d(' */')
|
|
Packit |
79f644 |
self.d('')
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
self.h('#define %s "%s"' % (name, error_name))
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
self.b(' case TP_ERROR_%s:' % uc_nick)
|
|
Packit |
79f644 |
self.b(' return %s;' % name)
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
self.b(' default:')
|
|
Packit |
79f644 |
self.b(' g_return_val_if_reached (NULL);')
|
|
Packit |
79f644 |
self.b(' }')
|
|
Packit |
79f644 |
self.b('}')
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
# make both files end with a newline
|
|
Packit |
79f644 |
self.h('')
|
|
Packit |
79f644 |
self.b('')
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
file_set_contents(self.basename + '.h', u('\n').join(self.__header).encode('utf-8'))
|
|
Packit |
79f644 |
file_set_contents(self.basename + '.c', u('\n').join(self.__body).encode('utf-8'))
|
|
Packit |
79f644 |
file_set_contents(self.basename + '-gtk-doc.h', u('\n').join(self.__docs).encode('utf-8'))
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if __name__ == '__main__':
|
|
Packit |
79f644 |
argv = sys.argv[1:]
|
|
Packit |
79f644 |
basename = argv[0]
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
Generator(xml.dom.minidom.parse(argv[1]), basename)()
|