aboutsummaryrefslogtreecommitdiff
path: root/Release/share/glib-2.0/codegen/dbustypes.py
diff options
context:
space:
mode:
Diffstat (limited to 'Release/share/glib-2.0/codegen/dbustypes.py')
-rw-r--r--Release/share/glib-2.0/codegen/dbustypes.py424
1 files changed, 424 insertions, 0 deletions
diff --git a/Release/share/glib-2.0/codegen/dbustypes.py b/Release/share/glib-2.0/codegen/dbustypes.py
new file mode 100644
index 0000000..8787c92
--- /dev/null
+++ b/Release/share/glib-2.0/codegen/dbustypes.py
@@ -0,0 +1,424 @@
+# -*- Mode: Python -*-
+
+# GDBus - GLib D-Bus Library
+#
+# Copyright (C) 2008-2011 Red Hat, Inc.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General
+# Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
+#
+# Author: David Zeuthen <davidz@redhat.com>
+
+from . import utils
+
+class Annotation:
+ def __init__(self, key, value):
+ self.key = key
+ self.value = value
+ self.annotations = []
+
+class Arg:
+ def __init__(self, name, signature):
+ self.name = name
+ self.signature = signature
+ self.annotations = []
+ self.doc_string = ''
+ self.since = ''
+
+ def post_process(self, interface_prefix, cns, cns_upper, cns_lower, arg_number):
+ if len(self.doc_string) == 0:
+ self.doc_string = utils.lookup_docs(self.annotations)
+ if len(self.since) == 0:
+ self.since = utils.lookup_since(self.annotations)
+
+ if self.name == None:
+ self.name = 'unnamed_arg%d'%arg_number
+ # default to GVariant
+ self.ctype_in_g = 'GVariant *'
+ self.ctype_in = 'GVariant *'
+ self.ctype_in_dup = 'GVariant *'
+ self.ctype_out = 'GVariant **'
+ self.gtype = 'G_TYPE_VARIANT'
+ self.free_func = 'g_variant_unref'
+ self.format_in = '@' + self.signature
+ self.format_out = '@' + self.signature
+ self.gvariant_get = 'XXX'
+ self.gvalue_get = 'g_value_get_variant'
+ if not utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.ForceGVariant'):
+ if self.signature == 'b':
+ self.ctype_in_g = 'gboolean '
+ self.ctype_in = 'gboolean '
+ self.ctype_out = 'gboolean *'
+ self.gtype = 'G_TYPE_BOOLEAN'
+ self.free_func = None
+ self.format_in = 'b'
+ self.format_out = 'b'
+ self.gvariant_get = 'g_variant_get_boolean'
+ self.gvalue_get = 'g_value_get_boolean'
+ elif self.signature == 'y':
+ self.ctype_in_g = 'guchar '
+ self.ctype_in = 'guchar '
+ self.ctype_out = 'guchar *'
+ self.gtype = 'G_TYPE_UCHAR'
+ self.free_func = None
+ self.format_in = 'y'
+ self.format_out = 'y'
+ self.gvariant_get = 'g_variant_get_byte'
+ self.gvalue_get = 'g_value_get_uchar'
+ elif self.signature == 'n':
+ self.ctype_in_g = 'gint '
+ self.ctype_in = 'gint16 '
+ self.ctype_out = 'gint16 *'
+ self.gtype = 'G_TYPE_INT'
+ self.free_func = None
+ self.format_in = 'n'
+ self.format_out = 'n'
+ self.gvariant_get = 'g_variant_get_int16'
+ self.gvalue_get = 'g_value_get_int'
+ elif self.signature == 'q':
+ self.ctype_in_g = 'guint '
+ self.ctype_in = 'guint16 '
+ self.ctype_out = 'guint16 *'
+ self.gtype = 'G_TYPE_UINT'
+ self.free_func = None
+ self.format_in = 'q'
+ self.format_out = 'q'
+ self.gvariant_get = 'g_variant_get_uint16'
+ self.gvalue_get = 'g_value_get_uint'
+ elif self.signature == 'i':
+ self.ctype_in_g = 'gint '
+ self.ctype_in = 'gint '
+ self.ctype_out = 'gint *'
+ self.gtype = 'G_TYPE_INT'
+ self.free_func = None
+ self.format_in = 'i'
+ self.format_out = 'i'
+ self.gvariant_get = 'g_variant_get_int32'
+ self.gvalue_get = 'g_value_get_int'
+ elif self.signature == 'u':
+ self.ctype_in_g = 'guint '
+ self.ctype_in = 'guint '
+ self.ctype_out = 'guint *'
+ self.gtype = 'G_TYPE_UINT'
+ self.free_func = None
+ self.format_in = 'u'
+ self.format_out = 'u'
+ self.gvariant_get = 'g_variant_get_uint32'
+ self.gvalue_get = 'g_value_get_uint'
+ elif self.signature == 'x':
+ self.ctype_in_g = 'gint64 '
+ self.ctype_in = 'gint64 '
+ self.ctype_out = 'gint64 *'
+ self.gtype = 'G_TYPE_INT64'
+ self.free_func = None
+ self.format_in = 'x'
+ self.format_out = 'x'
+ self.gvariant_get = 'g_variant_get_int64'
+ self.gvalue_get = 'g_value_get_int64'
+ elif self.signature == 't':
+ self.ctype_in_g = 'guint64 '
+ self.ctype_in = 'guint64 '
+ self.ctype_out = 'guint64 *'
+ self.gtype = 'G_TYPE_UINT64'
+ self.free_func = None
+ self.format_in = 't'
+ self.format_out = 't'
+ self.gvariant_get = 'g_variant_get_uint64'
+ self.gvalue_get = 'g_value_get_uint64'
+ elif self.signature == 'd':
+ self.ctype_in_g = 'gdouble '
+ self.ctype_in = 'gdouble '
+ self.ctype_out = 'gdouble *'
+ self.gtype = 'G_TYPE_DOUBLE'
+ self.free_func = None
+ self.format_in = 'd'
+ self.format_out = 'd'
+ self.gvariant_get = 'g_variant_get_double'
+ self.gvalue_get = 'g_value_get_double'
+ elif self.signature == 's':
+ self.ctype_in_g = 'const gchar *'
+ self.ctype_in = 'const gchar *'
+ self.ctype_in_dup = 'gchar *'
+ self.ctype_out = 'gchar **'
+ self.gtype = 'G_TYPE_STRING'
+ self.free_func = 'g_free'
+ self.format_in = 's'
+ self.format_out = 's'
+ self.gvariant_get = 'g_variant_get_string'
+ self.gvalue_get = 'g_value_get_string'
+ elif self.signature == 'o':
+ self.ctype_in_g = 'const gchar *'
+ self.ctype_in = 'const gchar *'
+ self.ctype_in_dup = 'gchar *'
+ self.ctype_out = 'gchar **'
+ self.gtype = 'G_TYPE_STRING'
+ self.free_func = 'g_free'
+ self.format_in = 'o'
+ self.format_out = 'o'
+ self.gvariant_get = 'g_variant_get_string'
+ self.gvalue_get = 'g_value_get_string'
+ elif self.signature == 'g':
+ self.ctype_in_g = 'const gchar *'
+ self.ctype_in = 'const gchar *'
+ self.ctype_in_dup = 'gchar *'
+ self.ctype_out = 'gchar **'
+ self.gtype = 'G_TYPE_STRING'
+ self.free_func = 'g_free'
+ self.format_in = 'g'
+ self.format_out = 'g'
+ self.gvariant_get = 'g_variant_get_string'
+ self.gvalue_get = 'g_value_get_string'
+ elif self.signature == 'ay':
+ self.ctype_in_g = 'const gchar *'
+ self.ctype_in = 'const gchar *'
+ self.ctype_in_dup = 'gchar *'
+ self.ctype_out = 'gchar **'
+ self.gtype = 'G_TYPE_STRING'
+ self.free_func = 'g_free'
+ self.format_in = '^ay'
+ self.format_out = '^ay'
+ self.gvariant_get = 'g_variant_get_bytestring'
+ self.gvalue_get = 'g_value_get_string'
+ elif self.signature == 'as':
+ self.ctype_in_g = 'const gchar *const *'
+ self.ctype_in = 'const gchar *const *'
+ self.ctype_in_dup = 'gchar **'
+ self.ctype_out = 'gchar ***'
+ self.gtype = 'G_TYPE_STRV'
+ self.free_func = 'g_strfreev'
+ self.format_in = '^as'
+ self.format_out = '^as'
+ self.gvariant_get = 'g_variant_get_strv'
+ self.gvalue_get = 'g_value_get_boxed'
+ elif self.signature == 'ao':
+ self.ctype_in_g = 'const gchar *const *'
+ self.ctype_in = 'const gchar *const *'
+ self.ctype_in_dup = 'gchar **'
+ self.ctype_out = 'gchar ***'
+ self.gtype = 'G_TYPE_STRV'
+ self.free_func = 'g_strfreev'
+ self.format_in = '^ao'
+ self.format_out = '^ao'
+ self.gvariant_get = 'g_variant_get_objv'
+ self.gvalue_get = 'g_value_get_boxed'
+ elif self.signature == 'aay':
+ self.ctype_in_g = 'const gchar *const *'
+ self.ctype_in = 'const gchar *const *'
+ self.ctype_in_dup = 'gchar **'
+ self.ctype_out = 'gchar ***'
+ self.gtype = 'G_TYPE_STRV'
+ self.free_func = 'g_strfreev'
+ self.format_in = '^aay'
+ self.format_out = '^aay'
+ self.gvariant_get = 'g_variant_get_bytestring_array'
+ self.gvalue_get = 'g_value_get_boxed'
+
+class Method:
+ def __init__(self, name):
+ self.name = name
+ self.in_args = []
+ self.out_args = []
+ self.annotations = []
+ self.doc_string = ''
+ self.since = ''
+ self.deprecated = False
+
+ def post_process(self, interface_prefix, cns, cns_upper, cns_lower, containing_iface):
+ if len(self.doc_string) == 0:
+ self.doc_string = utils.lookup_docs(self.annotations)
+ if len(self.since) == 0:
+ self.since = utils.lookup_since(self.annotations)
+ if len(self.since) == 0:
+ self.since = containing_iface.since
+
+ name = self.name
+ overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name')
+ if utils.is_ugly_case(overridden_name):
+ self.name_lower = overridden_name.lower()
+ else:
+ if overridden_name:
+ name = overridden_name
+ self.name_lower = utils.camel_case_to_uscore(name).lower().replace('-', '_')
+ self.name_hyphen = self.name_lower.replace('_', '-')
+
+ arg_count = 0
+ for a in self.in_args:
+ a.post_process(interface_prefix, cns, cns_upper, cns_lower, arg_count)
+ arg_count += 1
+
+ for a in self.out_args:
+ a.post_process(interface_prefix, cns, cns_upper, cns_lower, arg_count)
+ arg_count += 1
+
+ if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true':
+ self.deprecated = True
+
+class Signal:
+ def __init__(self, name):
+ self.name = name
+ self.args = []
+ self.annotations = []
+ self.doc_string = ''
+ self.since = ''
+ self.deprecated = False
+
+ def post_process(self, interface_prefix, cns, cns_upper, cns_lower, containing_iface):
+ if len(self.doc_string) == 0:
+ self.doc_string = utils.lookup_docs(self.annotations)
+ if len(self.since) == 0:
+ self.since = utils.lookup_since(self.annotations)
+ if len(self.since) == 0:
+ self.since = containing_iface.since
+
+ name = self.name
+ overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name')
+ if utils.is_ugly_case(overridden_name):
+ self.name_lower = overridden_name.lower()
+ else:
+ if overridden_name:
+ name = overridden_name
+ self.name_lower = utils.camel_case_to_uscore(name).lower().replace('-', '_')
+ self.name_hyphen = self.name_lower.replace('_', '-')
+
+ arg_count = 0
+ for a in self.args:
+ a.post_process(interface_prefix, cns, cns_upper, cns_lower, arg_count)
+ arg_count += 1
+
+ if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true':
+ self.deprecated = True
+
+class Property:
+ def __init__(self, name, signature, access):
+ self.name = name
+ self.signature = signature
+ self.access = access
+ self.annotations = []
+ self.arg = Arg('value', self.signature)
+ self.arg.annotations = self.annotations
+ self.readable = False
+ self.writable = False
+ if self.access == 'readwrite':
+ self.readable = True
+ self.writable = True
+ elif self.access == 'read':
+ self.readable = True
+ elif self.access == 'write':
+ self.writable = True
+ else:
+ raise RuntimeError('Invalid access type %s'%self.access)
+ self.doc_string = ''
+ self.since = ''
+ self.deprecated = False
+
+ def post_process(self, interface_prefix, cns, cns_upper, cns_lower, containing_iface):
+ if len(self.doc_string) == 0:
+ self.doc_string = utils.lookup_docs(self.annotations)
+ if len(self.since) == 0:
+ self.since = utils.lookup_since(self.annotations)
+ if len(self.since) == 0:
+ self.since = containing_iface.since
+
+ name = self.name
+ overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name')
+ if utils.is_ugly_case(overridden_name):
+ self.name_lower = overridden_name.lower()
+ else:
+ if overridden_name:
+ name = overridden_name
+ self.name_lower = utils.camel_case_to_uscore(name).lower().replace('-', '_')
+ self.name_hyphen = self.name_lower.replace('_', '-')
+ # don't clash with the GType getter, e.g.: GType foo_bar_get_type (void); G_GNUC_CONST
+ if self.name_lower == 'type':
+ self.name_lower = 'type_'
+
+ # recalculate arg
+ self.arg.annotations = self.annotations
+ self.arg.post_process(interface_prefix, cns, cns_upper, cns_lower, 0)
+
+ if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true':
+ self.deprecated = True
+
+class Interface:
+ def __init__(self, name):
+ self.name = name
+ self.methods = []
+ self.signals = []
+ self.properties = []
+ self.annotations = []
+ self.doc_string = ''
+ self.doc_string_brief = ''
+ self.since = ''
+ self.deprecated = False
+
+ def post_process(self, interface_prefix, c_namespace):
+ if len(self.doc_string) == 0:
+ self.doc_string = utils.lookup_docs(self.annotations)
+ if len(self.doc_string_brief) == 0:
+ self.doc_string_brief = utils.lookup_brief_docs(self.annotations)
+ if len(self.since) == 0:
+ self.since = utils.lookup_since(self.annotations)
+
+ if len(c_namespace) > 0:
+ if utils.is_ugly_case(c_namespace):
+ cns = c_namespace.replace('_', '')
+ cns_upper = c_namespace.upper() + '_'
+ cns_lower = c_namespace.lower() + '_'
+ else:
+ cns = c_namespace
+ cns_upper = utils.camel_case_to_uscore(c_namespace).upper() + '_'
+ cns_lower = utils.camel_case_to_uscore(c_namespace).lower() + '_'
+ else:
+ cns = ''
+ cns_upper = ''
+ cns_lower = ''
+
+ overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name')
+ if utils.is_ugly_case(overridden_name):
+ name = overridden_name.replace('_', '')
+ name_with_ns = cns + name
+ self.name_without_prefix = name
+ self.camel_name = name_with_ns
+ self.ns_upper = cns_upper
+ self.name_lower = cns_lower + overridden_name.lower()
+ self.name_upper = overridden_name.upper()
+
+ #raise RuntimeError('handle Ugly_Case ', overridden_name)
+ else:
+ if overridden_name:
+ name = overridden_name
+ else:
+ name = self.name
+ if name.startswith(interface_prefix):
+ name = name[len(interface_prefix):]
+ self.name_without_prefix = name
+ name = utils.strip_dots(name)
+ name_with_ns = utils.strip_dots(cns + '.' + name)
+ self.camel_name = name_with_ns
+ self.ns_upper = cns_upper
+ self.name_lower = cns_lower + utils.camel_case_to_uscore(name)
+ self.name_upper = utils.camel_case_to_uscore(name).upper()
+
+ self.name_hyphen = self.name_upper.lower().replace('_', '-')
+
+ if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true':
+ self.deprecated = True
+
+ for m in self.methods:
+ m.post_process(interface_prefix, cns, cns_upper, cns_lower, self)
+
+ for s in self.signals:
+ s.post_process(interface_prefix, cns, cns_upper, cns_lower, self)
+
+ for p in self.properties:
+ p.post_process(interface_prefix, cns, cns_upper, cns_lower, self)