]> git.0d.be Git - empathy.git/blob - tools/glib-errors-enum-header-gen.py
Merge branch 'debugger'
[empathy.git] / tools / glib-errors-enum-header-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_gtkdoc(self):
23         for error in self.errors.getElementsByTagNameNS(NS_TP, 'error'):
24             ns = error.parentNode.getAttribute('namespace')
25             nick = error.getAttribute('name').replace(' ', '')
26             enum = 'TP_ERROR_' + camelcase_to_upper(nick.replace('.', ''))
27             print ' * @' + enum + ': ' + ns + '.' + nick + ':'
28             print ' *     ' + get_docstring(error) + '    '
29
30     def do_enumnames(self):
31         for error in self.errors.getElementsByTagNameNS(NS_TP, 'error'):
32             nick = error.getAttribute('name').replace(' ', '')
33             enum = 'TP_ERROR_' + camelcase_to_upper(nick.replace('.', ''))
34             print '    ' + enum + ','
35
36     def do_get_type(self):
37         print """
38 #include <glib-object.h>
39
40 G_BEGIN_DECLS
41
42 GType tp_error_get_type (void);
43
44 /**
45  * TP_TYPE_ERROR:
46  *
47  * The GType of the Telepathy error enumeration.
48  */
49 #define TP_TYPE_ERROR (tp_error_get_type())
50 """
51
52     def do_enum(self):
53         print """\
54 /**
55  * TpError:"""
56         self.do_gtkdoc()
57         print """\
58  *
59  * Enumerated type representing the Telepathy D-Bus errors.
60  */
61 typedef enum {"""
62         self.do_enumnames()
63         print """\
64 } TpError;
65
66 G_END_DECLS"""
67
68     def __call__(self):
69         self.do_header()
70         self.do_get_type()
71         self.do_enum()
72
73 if __name__ == '__main__':
74     argv = sys.argv[1:]
75     Generator(xml.dom.minidom.parse(argv[0]))()