diff options
Diffstat (limited to 'tools/glib-errors-enum-body-gen.py')
-rw-r--r-- | tools/glib-errors-enum-body-gen.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/tools/glib-errors-enum-body-gen.py b/tools/glib-errors-enum-body-gen.py new file mode 100644 index 000000000..44863ee4c --- /dev/null +++ b/tools/glib-errors-enum-body-gen.py @@ -0,0 +1,62 @@ +#!/usr/bin/python + +import sys +import xml.dom.minidom + +from libglibcodegen import NS_TP, camelcase_to_upper, get_docstring, \ + get_descendant_text + +class Generator(object): + def __init__(self, dom): + self.dom = dom + self.errors = self.dom.getElementsByTagNameNS(NS_TP, 'errors')[0] + + def do_header(self): + print '/* Generated from the Telepathy spec\n' + copyrights = self.errors.getElementsByTagNameNS(NS_TP, 'copyright') + for copyright in copyrights: + print get_descendant_text(copyright) + license = self.errors.getElementsByTagNameNS(NS_TP, 'license')[0] + print '\n' + get_descendant_text(license) + '\n*/' + + def do_enum_values(self): + for error in self.errors.getElementsByTagNameNS(NS_TP, 'error'): + print '' + nick = error.getAttribute('name').replace(' ', '') + name = camelcase_to_upper(nick.replace('.', '')) + ns = error.parentNode.getAttribute('namespace') + enum = 'TP_ERROR_' + name + print ' /* ' + ns + '.' + name + print ' ' + get_docstring(error) + print ' */' + print ' { %s, "%s", "%s" },' % (enum, enum, nick) + + + def do_get_type(self): + print """ +#include <_gen/telepathy-errors.h> + +GType +tp_error_get_type (void) +{ + static GType etype = 0; + if (G_UNLIKELY (etype == 0)) + { + static const GEnumValue values[] = {""" + self.do_enum_values() + print """\ + }; + + etype = g_enum_register_static ("TpError", values); + } + return etype; +} +""" + + def __call__(self): + self.do_header() + self.do_get_type() + +if __name__ == '__main__': + argv = sys.argv[1:] + Generator(xml.dom.minidom.parse(argv[0]))() |