]> git.0d.be Git - empathy.git/blob - tools/glib-errors-enum-body-gen.py
Merge branch 'debugger'
[empathy.git] / tools / glib-errors-enum-body-gen.py
1 #!/usr/bin/python
2
3 import sys
4 import xml.dom.minidom
5
6 from libglibcodegen import NS_TP, camelcase_to_upper, get_docstring, \
7         get_descendant_text
8
9 class Generator(object):
10     def __init__(self, dom):
11         self.dom = dom
12         self.errors = self.dom.getElementsByTagNameNS(NS_TP, 'errors')[0]
13
14     def do_header(self):
15         print '/* Generated from the Telepathy spec\n'
16         copyrights = self.errors.getElementsByTagNameNS(NS_TP, 'copyright')
17         for copyright in copyrights:
18             print get_descendant_text(copyright)
19         license = self.errors.getElementsByTagNameNS(NS_TP, 'license')[0]
20         print '\n' + get_descendant_text(license) + '\n*/'
21
22     def do_enum_values(self):
23         for error in self.errors.getElementsByTagNameNS(NS_TP, 'error'):
24             print ''
25             nick = error.getAttribute('name').replace(' ', '')
26             name = camelcase_to_upper(nick.replace('.', ''))
27             ns = error.parentNode.getAttribute('namespace')
28             enum = 'TP_ERROR_' + name
29             print '        /* ' + ns + '.' + name
30             print '    ' + get_docstring(error)
31             print '     */'
32             print '        { %s, "%s", "%s" },' % (enum, enum, nick)
33
34
35     def do_get_type(self):
36         print """
37 #include <_gen/telepathy-errors.h>
38
39 GType
40 tp_error_get_type (void)
41 {
42   static GType etype = 0;
43   if (G_UNLIKELY (etype == 0))
44     {
45       static const GEnumValue values[] = {"""
46         self.do_enum_values()
47         print """\
48       };
49
50       etype = g_enum_register_static ("TpError", values);
51     }
52   return etype;
53 }
54 """
55
56     def __call__(self):
57         self.do_header()
58         self.do_get_type()
59
60 if __name__ == '__main__':
61     argv = sys.argv[1:]
62     Generator(xml.dom.minidom.parse(argv[0]))()