3 # GDBus - GLib D-Bus Library
5 # Copyright (C) 2008-2011 Red Hat, Inc.
7 # This library is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU Lesser General Public
9 # License as published by the Free Software Foundation; either
10 # version 2 of the License, or (at your option) any later version.
12 # This library is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 # Lesser General Public License for more details.
17 # You should have received a copy of the GNU Lesser General
18 # Public License along with this library; if not, write to the
19 # Free Software Foundation, Inc., 59 Temple Place, Suite 330,
20 # Boston, MA 02111-1307, USA.
22 # Author: David Zeuthen <davidz@redhat.com>
27 def __init__(self, key, value):
33 def __init__(self, name, signature):
35 self.signature = signature
40 def post_process(self, interface_prefix, c_namespace, arg_number):
41 if len(self.doc_string) == 0:
42 self.doc_string = utils.lookup_docs(self.annotations)
43 if len(self.since) == 0:
44 self.since = utils.lookup_since(self.annotations)
47 self.name = 'unnamed_arg%d'%arg_number
49 self.ctype_in_g = 'GVariant *'
50 self.ctype_in = 'GVariant *'
51 self.ctype_in_dup = 'GVariant *'
52 self.ctype_out = 'GVariant **'
53 self.gtype = 'G_TYPE_VARIANT'
54 self.free_func = 'g_variant_unref'
55 self.format_in = '@' + self.signature
56 self.format_out = '@' + self.signature
57 self.gvariant_get = 'XXX'
58 self.gvalue_get = 'g_value_get_variant'
59 if not utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.ForceGVariant'):
60 if self.signature == 'b':
61 self.ctype_in_g = 'gboolean '
62 self.ctype_in = 'gboolean '
63 self.ctype_out = 'gboolean *'
64 self.gtype = 'G_TYPE_BOOLEAN'
68 self.gvariant_get = 'g_variant_get_boolean'
69 self.gvalue_get = 'g_value_get_boolean'
70 elif self.signature == 'y':
71 self.ctype_in_g = 'guchar '
72 self.ctype_in = 'guchar '
73 self.ctype_out = 'guchar *'
74 self.gtype = 'G_TYPE_UCHAR'
78 self.gvariant_get = 'g_variant_get_byte'
79 self.gvalue_get = 'g_value_get_uchar'
80 elif self.signature == 'n':
81 self.ctype_in_g = 'gint '
82 self.ctype_in = 'gint16 '
83 self.ctype_out = 'gint16 *'
84 self.gtype = 'G_TYPE_INT'
88 self.gvariant_get = 'g_variant_get_int16'
89 self.gvalue_get = 'g_value_get_int'
90 elif self.signature == 'q':
91 self.ctype_in_g = 'guint '
92 self.ctype_in = 'guint16 '
93 self.ctype_out = 'guint16 *'
94 self.gtype = 'G_TYPE_UINT'
98 self.gvariant_get = 'g_variant_get_uint16'
99 self.gvalue_get = 'g_value_get_uint'
100 elif self.signature == 'i':
101 self.ctype_in_g = 'gint '
102 self.ctype_in = 'gint '
103 self.ctype_out = 'gint *'
104 self.gtype = 'G_TYPE_INT'
105 self.free_func = None
107 self.format_out = 'i'
108 self.gvariant_get = 'g_variant_get_int32'
109 self.gvalue_get = 'g_value_get_int'
110 elif self.signature == 'u':
111 self.ctype_in_g = 'guint '
112 self.ctype_in = 'guint '
113 self.ctype_out = 'guint *'
114 self.gtype = 'G_TYPE_UINT'
115 self.free_func = None
117 self.format_out = 'u'
118 self.gvariant_get = 'g_variant_get_uint32'
119 self.gvalue_get = 'g_value_get_uint'
120 elif self.signature == 'x':
121 self.ctype_in_g = 'gint64 '
122 self.ctype_in = 'gint64 '
123 self.ctype_out = 'gint64 *'
124 self.gtype = 'G_TYPE_INT64'
125 self.free_func = None
127 self.format_out = 'x'
128 self.gvariant_get = 'g_variant_get_int64'
129 self.gvalue_get = 'g_value_get_int64'
130 elif self.signature == 't':
131 self.ctype_in_g = 'guint64 '
132 self.ctype_in = 'guint64 '
133 self.ctype_out = 'guint64 *'
134 self.gtype = 'G_TYPE_UINT64'
135 self.free_func = None
137 self.format_out = 't'
138 self.gvariant_get = 'g_variant_get_uint64'
139 self.gvalue_get = 'g_value_get_uint64'
140 elif self.signature == 'd':
141 self.ctype_in_g = 'gdouble '
142 self.ctype_in = 'gdouble '
143 self.ctype_out = 'gdouble *'
144 self.gtype = 'G_TYPE_DOUBLE'
145 self.free_func = None
147 self.format_out = 'd'
148 self.gvariant_get = 'g_variant_get_double'
149 self.gvalue_get = 'g_value_get_double'
150 elif self.signature == 's':
151 self.ctype_in_g = 'const gchar *'
152 self.ctype_in = 'const gchar *'
153 self.ctype_in_dup = 'gchar *'
154 self.ctype_out = 'gchar **'
155 self.gtype = 'G_TYPE_STRING'
156 self.free_func = 'g_free'
158 self.format_out = 's'
159 self.gvariant_get = 'g_variant_get_string'
160 self.gvalue_get = 'g_value_get_string'
161 elif self.signature == 'o':
162 self.ctype_in_g = 'const gchar *'
163 self.ctype_in = 'const gchar *'
164 self.ctype_in_dup = 'gchar *'
165 self.ctype_out = 'gchar **'
166 self.gtype = 'G_TYPE_STRING'
167 self.free_func = 'g_free'
169 self.format_out = 'o'
170 self.gvariant_get = 'g_variant_get_string'
171 self.gvalue_get = 'g_value_get_string'
172 elif self.signature == 'g':
173 self.ctype_in_g = 'const gchar *'
174 self.ctype_in = 'const gchar *'
175 self.ctype_in_dup = 'gchar *'
176 self.ctype_out = 'gchar **'
177 self.gtype = 'G_TYPE_STRING'
178 self.free_func = 'g_free'
180 self.format_out = 'g'
181 self.gvariant_get = 'g_variant_get_string'
182 self.gvalue_get = 'g_value_get_string'
183 elif self.signature == 'ay':
184 self.ctype_in_g = 'const gchar *'
185 self.ctype_in = 'const gchar *'
186 self.ctype_in_dup = 'gchar *'
187 self.ctype_out = 'gchar **'
188 self.gtype = 'G_TYPE_STRING'
189 self.free_func = 'g_free'
190 self.format_in = '^ay'
191 self.format_out = '^ay'
192 self.gvariant_get = 'g_variant_get_bytestring'
193 self.gvalue_get = 'g_value_get_string'
194 elif self.signature == 'as':
195 self.ctype_in_g = 'const gchar *const *'
196 self.ctype_in = 'const gchar *const *'
197 self.ctype_in_dup = 'gchar **'
198 self.ctype_out = 'gchar ***'
199 self.gtype = 'G_TYPE_STRV'
200 self.free_func = 'g_strfreev'
201 self.format_in = '^as'
202 self.format_out = '^as'
203 self.gvariant_get = 'g_variant_get_strv'
204 self.gvalue_get = 'g_value_get_boxed'
205 elif self.signature == 'ao':
206 self.ctype_in_g = 'const gchar *const *'
207 self.ctype_in = 'const gchar *const *'
208 self.ctype_in_dup = 'gchar **'
209 self.ctype_out = 'gchar ***'
210 self.gtype = 'G_TYPE_STRV'
211 self.free_func = 'g_strfreev'
212 self.format_in = '^ao'
213 self.format_out = '^ao'
214 self.gvariant_get = 'g_variant_get_objv'
215 self.gvalue_get = 'g_value_get_boxed'
216 elif self.signature == 'aay':
217 self.ctype_in_g = 'const gchar *const *'
218 self.ctype_in = 'const gchar *const *'
219 self.ctype_in_dup = 'gchar **'
220 self.ctype_out = 'gchar ***'
221 self.gtype = 'G_TYPE_STRV'
222 self.free_func = 'g_strfreev'
223 self.format_in = '^aay'
224 self.format_out = '^aay'
225 self.gvariant_get = 'g_variant_get_bytestring_array'
226 self.gvalue_get = 'g_value_get_boxed'
229 def __init__(self, name):
233 self.annotations = []
236 self.deprecated = False
238 def post_process(self, interface_prefix, c_namespace):
239 if len(self.doc_string) == 0:
240 self.doc_string = utils.lookup_docs(self.annotations)
241 if len(self.since) == 0:
242 self.since = utils.lookup_since(self.annotations)
245 overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name')
246 if utils.is_ugly_case(overridden_name):
247 self.name_lower = overridden_name.lower()
250 name = overridden_name
251 self.name_lower = utils.camel_case_to_uscore(name).lower().replace('-', '_')
252 self.name_hyphen = self.name_lower.replace('_', '-')
255 for a in self.in_args:
256 a.post_process(interface_prefix, c_namespace, arg_count)
259 for a in self.out_args:
260 a.post_process(interface_prefix, c_namespace, arg_count)
263 if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true':
264 self.deprecated = True
267 def __init__(self, name):
270 self.annotations = []
273 self.deprecated = False
275 def post_process(self, interface_prefix, c_namespace):
276 if len(self.doc_string) == 0:
277 self.doc_string = utils.lookup_docs(self.annotations)
278 if len(self.since) == 0:
279 self.since = utils.lookup_since(self.annotations)
282 overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name')
283 if utils.is_ugly_case(overridden_name):
284 self.name_lower = overridden_name.lower()
287 name = overridden_name
288 self.name_lower = utils.camel_case_to_uscore(name).lower().replace('-', '_')
289 self.name_hyphen = self.name_lower.replace('_', '-')
293 a.post_process(interface_prefix, c_namespace, arg_count)
296 if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true':
297 self.deprecated = True
300 def __init__(self, name, signature, access):
302 self.signature = signature
304 self.annotations = []
305 self.arg = Arg('value', self.signature)
306 self.arg.annotations = self.annotations
307 self.readable = False
308 self.writable = False
309 if self.access == 'readwrite':
312 elif self.access == 'read':
314 elif self.access == 'write':
317 raise RuntimeError('Invalid access type %s'%self.access)
320 self.deprecated = False
322 def post_process(self, interface_prefix, c_namespace):
323 if len(self.doc_string) == 0:
324 self.doc_string = utils.lookup_docs(self.annotations)
325 if len(self.since) == 0:
326 self.since = utils.lookup_since(self.annotations)
329 overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name')
330 if utils.is_ugly_case(overridden_name):
331 self.name_lower = overridden_name.lower()
334 name = overridden_name
335 self.name_lower = utils.camel_case_to_uscore(name).lower().replace('-', '_')
336 if self.name_lower == 'type':
337 self.name_lower = 'type_'
338 self.name_hyphen = self.name_lower.replace('_', '-')
341 self.arg.annotations = self.annotations
342 self.arg.post_process(interface_prefix, c_namespace, 0)
344 if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true':
345 self.deprecated = True
348 def __init__(self, name):
353 self.annotations = []
355 self.doc_string_brief = ''
357 self.deprecated = False
359 def post_process(self, interface_prefix, c_namespace):
360 if len(self.doc_string) == 0:
361 self.doc_string = utils.lookup_docs(self.annotations)
362 if len(self.doc_string_brief) == 0:
363 self.doc_string_brief = utils.lookup_brief_docs(self.annotations)
364 if len(self.since) == 0:
365 self.since = utils.lookup_since(self.annotations)
367 overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name')
368 if utils.is_ugly_case(overridden_name):
369 name = overridden_name.replace('_', '')
370 name_with_ns = c_namespace + name
371 self.name_without_prefix = name
372 self.camel_name = name_with_ns
373 if len(c_namespace) > 0:
374 self.ns_upper = utils.camel_case_to_uscore(c_namespace).upper() + '_'
375 self.name_lower = utils.camel_case_to_uscore(c_namespace) + '_' + overridden_name.lower()
378 self.name_lower = overridden_name.lower()
379 self.name_upper = overridden_name.upper()
381 #raise RuntimeError('handle Ugly_Case ', overridden_name)
384 name = overridden_name
387 if name.startswith(interface_prefix):
388 name = name[len(interface_prefix):]
389 self.name_without_prefix = name
390 name = utils.strip_dots(name)
391 name_with_ns = utils.strip_dots(c_namespace + '.' + name)
393 self.camel_name = name_with_ns
394 if len(c_namespace) > 0:
395 self.ns_upper = utils.camel_case_to_uscore(c_namespace).upper() + '_'
396 self.name_lower = utils.camel_case_to_uscore(c_namespace) + '_' + utils.camel_case_to_uscore(name)
399 self.name_lower = utils.camel_case_to_uscore(name_with_ns)
400 self.name_upper = utils.camel_case_to_uscore(name).upper()
402 self.name_hyphen = self.name_upper.lower().replace('_', '-')
404 if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true':
405 self.deprecated = True
407 for m in self.methods:
408 m.post_process(interface_prefix, c_namespace)
410 for s in self.signals:
411 s.post_process(interface_prefix, c_namespace)
413 for p in self.properties:
414 p.post_process(interface_prefix, c_namespace)