blob: f49ddfd08262259eb102e9e7bdcb281db3d123e9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
class GirPrinter:
def __init__(self, parser):
self._parser = parser
@staticmethod
def _print_single_method(method_object, parent, nam):
# todo do it better, move it to method's class maybe..
is_static = False
if len(method_object.parameters) + method_object.is_throwable > 0:
i = 0
for param in method_object.parameters:
if param.type is not None and nam == param.type.name and i == 0:
is_static = True
i += 1
if is_static or method_object.has_instance_parameter:
print("(define-method " + method_object.name)
print(" (of-object \"" + parent + "\")")
else:
print("(define-function " + method_object.name)
print(" (c-name \"" + method_object.c_name + "\")")
ret = method_object.returnValue.returnType.c_name if method_object.returnValue.returnType is not None else "void"
print(" (return-type \"" + ret + "\")")
if len(method_object.parameters) + method_object.is_throwable > 0:
print(" (parameters")
i = 0
for param in method_object.parameters:
if param.type is not None:
print(" '(\"" + param.type.c_name + "\" \"" + param.name + "\")")
if method_object.is_throwable == 1:
print(" '(\"GError**\" \"error\")")
print(" )")
print(")")
print("")
@staticmethod
def _print_single_enumeration(enum_object):
if enum_object.is_flag:
enum_type = "flags"
else:
enum_type = "enum"
print("(define-" + enum_type + "-extended " + enum_object.name)
print(" (in-module \"" + enum_object.module + "\")")
print(" (c-name \"" + enum_object.c_name + "\")")
print(" (values")
for member in enum_object.members:
print(" '(\"" + member.name + "\" " +
"\"" + member.c_name + "\" " +
"\"" + member.value + "\")")
print(" )")
print(")\n")
def print_enumerations(self):
for enumeration in self._parser.get_enumerations():
GirPrinter._print_single_enumeration(enumeration)
def print_methods(self):
for record in self._parser.get_records():
for method in record.functions:
if method.has_instance_parameter or method.is_constructor:
GirPrinter._print_single_method(method, record.c_name, record.name)
|