summaryrefslogtreecommitdiff
path: root/tools/defs_gen/girprinter.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/defs_gen/girprinter.py')
-rw-r--r--tools/defs_gen/girprinter.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/tools/defs_gen/girprinter.py b/tools/defs_gen/girprinter.py
new file mode 100644
index 00000000..f49ddfd0
--- /dev/null
+++ b/tools/defs_gen/girprinter.py
@@ -0,0 +1,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)