1 /* girmetadata.c generated by valac, the Vala compiler
2 * generated from girmetadata.vala, do not modify */
3
4 /* girmetadata.vala
5 *
6 * Copyright (C) 2012-2014 Florian Brosch
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 *
22 * Author:
23 * Brosch Florian <flo.brosch@gmail.com>
24 */
25
26 #include "valadoc.h"
27 #include <stdlib.h>
28 #include <string.h>
29 #include <glib.h>
30 #include <glib/gstdio.h>
31 #include <glib-object.h>
32
33 enum {
34 VALADOC_GIR_META_DATA_0_PROPERTY,
35 VALADOC_GIR_META_DATA_IS_DOCBOOK_PROPERTY,
36 VALADOC_GIR_META_DATA_INDEX_SGML_PROPERTY,
37 VALADOC_GIR_META_DATA_INDEX_SGML_ONLINE_PROPERTY,
38 VALADOC_GIR_META_DATA_NUM_PROPERTIES
39 };
40 static GParamSpec* valadoc_gir_meta_data_properties[VALADOC_GIR_META_DATA_NUM_PROPERTIES];
41 #define _g_free0(var) (var = (g_free (var), NULL))
42 #define _g_key_file_unref0(var) ((var == NULL) ? NULL : (var = (g_key_file_unref (var), NULL)))
43 #define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
44
45 struct _ValadocGirMetaDataPrivate {
46 gchar* metadata_path;
47 gchar* resource_dir;
48 gboolean _is_docbook;
49 gchar* _index_sgml;
50 gchar* _index_sgml_online;
51 };
52
53 static gint ValadocGirMetaData_private_offset;
54 static gpointer valadoc_gir_meta_data_parent_class = NULL;
55
56 static void valadoc_gir_meta_data_set_is_docbook (ValadocGirMetaData* self,
57 gboolean value);
58 static void valadoc_gir_meta_data_set_index_sgml (ValadocGirMetaData* self,
59 const gchar* value);
60 static void valadoc_gir_meta_data_set_index_sgml_online (ValadocGirMetaData* self,
61 const gchar* value);
62 static gchar* valadoc_gir_meta_data_get_metadata_file_name (ValadocGirMetaData* self,
63 const gchar* gir_file_path);
64 static gchar* valadoc_gir_meta_data_get_metadata_path (ValadocGirMetaData* self,
65 const gchar* gir_file_path,
66 gchar** metadata_dirs,
67 gint metadata_dirs_length1);
68 static void valadoc_gir_meta_data_load_general_metadata (ValadocGirMetaData* self,
69 GKeyFile* key_file,
70 ValadocErrorReporter* reporter,
71 GError** error);
72 static void valadoc_gir_meta_data_finalize (GObject * obj);
73 static GType valadoc_gir_meta_data_get_type_once (void);
74 static void _vala_valadoc_gir_meta_data_get_property (GObject * object,
75 guint property_id,
76 GValue * value,
77 GParamSpec * pspec);
78 static void _vala_valadoc_gir_meta_data_set_property (GObject * object,
79 guint property_id,
80 const GValue * value,
81 GParamSpec * pspec);
82 static void _vala_array_destroy (gpointer array,
83 gint array_length,
84 GDestroyNotify destroy_func);
85 static void _vala_array_free (gpointer array,
86 gint array_length,
87 GDestroyNotify destroy_func);
88
89 static inline gpointer
valadoc_gir_meta_data_get_instance_private(ValadocGirMetaData * self)90 valadoc_gir_meta_data_get_instance_private (ValadocGirMetaData* self)
91 {
92 return G_STRUCT_MEMBER_P (self, ValadocGirMetaData_private_offset);
93 }
94
95 gboolean
valadoc_gir_meta_data_get_is_docbook(ValadocGirMetaData * self)96 valadoc_gir_meta_data_get_is_docbook (ValadocGirMetaData* self)
97 {
98 gboolean result;
99 g_return_val_if_fail (self != NULL, FALSE);
100 result = self->priv->_is_docbook;
101 return result;
102 }
103
104 static void
valadoc_gir_meta_data_set_is_docbook(ValadocGirMetaData * self,gboolean value)105 valadoc_gir_meta_data_set_is_docbook (ValadocGirMetaData* self,
106 gboolean value)
107 {
108 gboolean old_value;
109 g_return_if_fail (self != NULL);
110 old_value = valadoc_gir_meta_data_get_is_docbook (self);
111 if (old_value != value) {
112 self->priv->_is_docbook = value;
113 g_object_notify_by_pspec ((GObject *) self, valadoc_gir_meta_data_properties[VALADOC_GIR_META_DATA_IS_DOCBOOK_PROPERTY]);
114 }
115 }
116
117 const gchar*
valadoc_gir_meta_data_get_index_sgml(ValadocGirMetaData * self)118 valadoc_gir_meta_data_get_index_sgml (ValadocGirMetaData* self)
119 {
120 const gchar* result;
121 const gchar* _tmp0_;
122 g_return_val_if_fail (self != NULL, NULL);
123 _tmp0_ = self->priv->_index_sgml;
124 result = _tmp0_;
125 return result;
126 }
127
128 static void
valadoc_gir_meta_data_set_index_sgml(ValadocGirMetaData * self,const gchar * value)129 valadoc_gir_meta_data_set_index_sgml (ValadocGirMetaData* self,
130 const gchar* value)
131 {
132 gchar* old_value;
133 g_return_if_fail (self != NULL);
134 old_value = valadoc_gir_meta_data_get_index_sgml (self);
135 if (g_strcmp0 (value, old_value) != 0) {
136 gchar* _tmp0_;
137 _tmp0_ = g_strdup (value);
138 _g_free0 (self->priv->_index_sgml);
139 self->priv->_index_sgml = _tmp0_;
140 g_object_notify_by_pspec ((GObject *) self, valadoc_gir_meta_data_properties[VALADOC_GIR_META_DATA_INDEX_SGML_PROPERTY]);
141 }
142 }
143
144 const gchar*
valadoc_gir_meta_data_get_index_sgml_online(ValadocGirMetaData * self)145 valadoc_gir_meta_data_get_index_sgml_online (ValadocGirMetaData* self)
146 {
147 const gchar* result;
148 const gchar* _tmp0_;
149 g_return_val_if_fail (self != NULL, NULL);
150 _tmp0_ = self->priv->_index_sgml_online;
151 result = _tmp0_;
152 return result;
153 }
154
155 static void
valadoc_gir_meta_data_set_index_sgml_online(ValadocGirMetaData * self,const gchar * value)156 valadoc_gir_meta_data_set_index_sgml_online (ValadocGirMetaData* self,
157 const gchar* value)
158 {
159 gchar* old_value;
160 g_return_if_fail (self != NULL);
161 old_value = valadoc_gir_meta_data_get_index_sgml_online (self);
162 if (g_strcmp0 (value, old_value) != 0) {
163 gchar* _tmp0_;
164 _tmp0_ = g_strdup (value);
165 _g_free0 (self->priv->_index_sgml_online);
166 self->priv->_index_sgml_online = _tmp0_;
167 g_object_notify_by_pspec ((GObject *) self, valadoc_gir_meta_data_properties[VALADOC_GIR_META_DATA_INDEX_SGML_ONLINE_PROPERTY]);
168 }
169 }
170
171 /**
172 * Used to manipulate paths to resources inside gir-files
173 */
174 gchar*
valadoc_gir_meta_data_get_resource_path(ValadocGirMetaData * self,const gchar * resource)175 valadoc_gir_meta_data_get_resource_path (ValadocGirMetaData* self,
176 const gchar* resource)
177 {
178 gboolean _tmp0_ = FALSE;
179 const gchar* _tmp1_;
180 const gchar* _tmp4_;
181 const gchar* _tmp7_;
182 gchar* _tmp8_;
183 gchar* _tmp9_;
184 const gchar* _tmp10_;
185 gchar* _tmp11_;
186 gchar* _tmp12_;
187 gchar* result = NULL;
188 g_return_val_if_fail (self != NULL, NULL);
189 g_return_val_if_fail (resource != NULL, NULL);
190 _tmp1_ = self->priv->resource_dir;
191 if (_tmp1_ == NULL) {
192 _tmp0_ = TRUE;
193 } else {
194 const gchar* _tmp2_;
195 _tmp2_ = self->priv->metadata_path;
196 _tmp0_ = _tmp2_ == NULL;
197 }
198 if (_tmp0_) {
199 gchar* _tmp3_;
200 _tmp3_ = g_strdup (resource);
201 result = _tmp3_;
202 return result;
203 }
204 _tmp4_ = self->priv->resource_dir;
205 if (g_path_is_absolute (_tmp4_)) {
206 const gchar* _tmp5_;
207 gchar* _tmp6_;
208 _tmp5_ = self->priv->resource_dir;
209 _tmp6_ = g_build_filename (_tmp5_, resource, NULL);
210 result = _tmp6_;
211 return result;
212 }
213 _tmp7_ = self->priv->metadata_path;
214 _tmp8_ = g_path_get_dirname (_tmp7_);
215 _tmp9_ = _tmp8_;
216 _tmp10_ = self->priv->resource_dir;
217 _tmp11_ = g_build_filename (_tmp9_, _tmp10_, resource, NULL);
218 _tmp12_ = _tmp11_;
219 _g_free0 (_tmp9_);
220 result = _tmp12_;
221 return result;
222 }
223
224 static gint
string_last_index_of(const gchar * self,const gchar * needle,gint start_index)225 string_last_index_of (const gchar* self,
226 const gchar* needle,
227 gint start_index)
228 {
229 gchar* _result_ = NULL;
230 gchar* _tmp0_;
231 gchar* _tmp1_;
232 gint result = 0;
233 g_return_val_if_fail (self != NULL, 0);
234 g_return_val_if_fail (needle != NULL, 0);
235 _tmp0_ = g_strrstr (((gchar*) self) + start_index, (gchar*) needle);
236 _result_ = _tmp0_;
237 _tmp1_ = _result_;
238 if (_tmp1_ != NULL) {
239 gchar* _tmp2_;
240 _tmp2_ = _result_;
241 result = (gint) (_tmp2_ - ((gchar*) self));
242 return result;
243 } else {
244 result = -1;
245 return result;
246 }
247 }
248
249 static glong
string_strnlen(gchar * str,glong maxlen)250 string_strnlen (gchar* str,
251 glong maxlen)
252 {
253 gchar* end = NULL;
254 gchar* _tmp0_;
255 gchar* _tmp1_;
256 glong result = 0L;
257 _tmp0_ = memchr (str, 0, (gsize) maxlen);
258 end = _tmp0_;
259 _tmp1_ = end;
260 if (_tmp1_ == NULL) {
261 result = maxlen;
262 return result;
263 } else {
264 gchar* _tmp2_;
265 _tmp2_ = end;
266 result = (glong) (_tmp2_ - str);
267 return result;
268 }
269 }
270
271 static gchar*
string_substring(const gchar * self,glong offset,glong len)272 string_substring (const gchar* self,
273 glong offset,
274 glong len)
275 {
276 glong string_length = 0L;
277 gboolean _tmp0_ = FALSE;
278 gchar* _tmp3_;
279 gchar* result = NULL;
280 g_return_val_if_fail (self != NULL, NULL);
281 if (offset >= ((glong) 0)) {
282 _tmp0_ = len >= ((glong) 0);
283 } else {
284 _tmp0_ = FALSE;
285 }
286 if (_tmp0_) {
287 string_length = string_strnlen ((gchar*) self, offset + len);
288 } else {
289 gint _tmp1_;
290 gint _tmp2_;
291 _tmp1_ = strlen (self);
292 _tmp2_ = _tmp1_;
293 string_length = (glong) _tmp2_;
294 }
295 if (offset < ((glong) 0)) {
296 offset = string_length + offset;
297 g_return_val_if_fail (offset >= ((glong) 0), NULL);
298 } else {
299 g_return_val_if_fail (offset <= string_length, NULL);
300 }
301 if (len < ((glong) 0)) {
302 len = string_length - offset;
303 }
304 g_return_val_if_fail ((offset + len) <= string_length, NULL);
305 _tmp3_ = g_strndup (((gchar*) self) + offset, (gsize) len);
306 result = _tmp3_;
307 return result;
308 }
309
310 static gchar*
valadoc_gir_meta_data_get_metadata_file_name(ValadocGirMetaData * self,const gchar * gir_file_path)311 valadoc_gir_meta_data_get_metadata_file_name (ValadocGirMetaData* self,
312 const gchar* gir_file_path)
313 {
314 gchar* metadata_file_name = NULL;
315 gchar* _tmp0_;
316 gint last_dot_pos = 0;
317 const gchar* _tmp1_;
318 const gchar* _tmp2_;
319 gchar* _tmp3_;
320 const gchar* _tmp4_;
321 gchar* _tmp5_;
322 gchar* result = NULL;
323 g_return_val_if_fail (self != NULL, NULL);
324 g_return_val_if_fail (gir_file_path != NULL, NULL);
325 _tmp0_ = g_path_get_basename (gir_file_path);
326 metadata_file_name = _tmp0_;
327 _tmp1_ = metadata_file_name;
328 last_dot_pos = string_last_index_of (_tmp1_, ".", 0);
329 if (last_dot_pos < 0) {
330 result = NULL;
331 _g_free0 (metadata_file_name);
332 return result;
333 }
334 _tmp2_ = metadata_file_name;
335 _tmp3_ = string_substring (_tmp2_, (glong) 0, (glong) last_dot_pos);
336 _g_free0 (metadata_file_name);
337 metadata_file_name = _tmp3_;
338 _tmp4_ = metadata_file_name;
339 _tmp5_ = g_strconcat (_tmp4_, ".valadoc.metadata", NULL);
340 result = _tmp5_;
341 _g_free0 (metadata_file_name);
342 return result;
343 }
344
345 static gchar*
valadoc_gir_meta_data_get_metadata_path(ValadocGirMetaData * self,const gchar * gir_file_path,gchar ** metadata_dirs,gint metadata_dirs_length1)346 valadoc_gir_meta_data_get_metadata_path (ValadocGirMetaData* self,
347 const gchar* gir_file_path,
348 gchar** metadata_dirs,
349 gint metadata_dirs_length1)
350 {
351 gchar* metadata_file_name = NULL;
352 gchar* _tmp0_;
353 const gchar* _tmp1_;
354 gchar* metadata_path = NULL;
355 gchar* _tmp2_;
356 gchar* _tmp3_;
357 const gchar* _tmp4_;
358 gchar* _tmp5_;
359 gchar* _tmp6_;
360 const gchar* _tmp7_;
361 gchar* result = NULL;
362 g_return_val_if_fail (self != NULL, NULL);
363 g_return_val_if_fail (gir_file_path != NULL, NULL);
364 _tmp0_ = valadoc_gir_meta_data_get_metadata_file_name (self, gir_file_path);
365 metadata_file_name = _tmp0_;
366 _tmp1_ = metadata_file_name;
367 if (_tmp1_ == NULL) {
368 result = NULL;
369 _g_free0 (metadata_file_name);
370 return result;
371 }
372 _tmp2_ = g_path_get_dirname (gir_file_path);
373 _tmp3_ = _tmp2_;
374 _tmp4_ = metadata_file_name;
375 _tmp5_ = g_build_filename (_tmp3_, _tmp4_, NULL);
376 _tmp6_ = _tmp5_;
377 _g_free0 (_tmp3_);
378 metadata_path = _tmp6_;
379 _tmp7_ = metadata_path;
380 if (g_file_test (_tmp7_, G_FILE_TEST_IS_REGULAR)) {
381 result = metadata_path;
382 _g_free0 (metadata_file_name);
383 return result;
384 }
385 {
386 gchar** metadata_dir_collection = NULL;
387 gint metadata_dir_collection_length1 = 0;
388 gint _metadata_dir_collection_size_ = 0;
389 gint metadata_dir_it = 0;
390 metadata_dir_collection = metadata_dirs;
391 metadata_dir_collection_length1 = metadata_dirs_length1;
392 for (metadata_dir_it = 0; metadata_dir_it < metadata_dir_collection_length1; metadata_dir_it = metadata_dir_it + 1) {
393 gchar* _tmp8_;
394 gchar* metadata_dir = NULL;
395 _tmp8_ = g_strdup (metadata_dir_collection[metadata_dir_it]);
396 metadata_dir = _tmp8_;
397 {
398 const gchar* _tmp9_;
399 const gchar* _tmp10_;
400 gchar* _tmp11_;
401 const gchar* _tmp12_;
402 _tmp9_ = metadata_dir;
403 _tmp10_ = metadata_file_name;
404 _tmp11_ = g_build_filename (_tmp9_, _tmp10_, NULL);
405 _g_free0 (metadata_path);
406 metadata_path = _tmp11_;
407 _tmp12_ = metadata_path;
408 if (g_file_test (_tmp12_, G_FILE_TEST_IS_REGULAR)) {
409 result = metadata_path;
410 _g_free0 (metadata_dir);
411 _g_free0 (metadata_file_name);
412 return result;
413 }
414 _g_free0 (metadata_dir);
415 }
416 }
417 }
418 result = NULL;
419 _g_free0 (metadata_path);
420 _g_free0 (metadata_file_name);
421 return result;
422 }
423
424 static void
valadoc_gir_meta_data_load_general_metadata(ValadocGirMetaData * self,GKeyFile * key_file,ValadocErrorReporter * reporter,GError ** error)425 valadoc_gir_meta_data_load_general_metadata (ValadocGirMetaData* self,
426 GKeyFile* key_file,
427 ValadocErrorReporter* reporter,
428 GError** error)
429 {
430 gchar** _tmp0_ = NULL;
431 gsize _tmp1_ = 0;
432 gchar** _tmp2_;
433 gint _tmp0__length1;
434 gint __tmp0__size_;
435 GError* _inner_error0_ = NULL;
436 g_return_if_fail (self != NULL);
437 g_return_if_fail (key_file != NULL);
438 g_return_if_fail (reporter != NULL);
439 _tmp2_ = g_key_file_get_keys (key_file, "General", &_tmp1_, &_inner_error0_);
440 _tmp0_ = _tmp2_;
441 _tmp0__length1 = _tmp1_;
442 __tmp0__size_ = _tmp0__length1;
443 if (G_UNLIKELY (_inner_error0_ != NULL)) {
444 if (_inner_error0_->domain == G_KEY_FILE_ERROR) {
445 g_propagate_error (error, _inner_error0_);
446 return;
447 } else {
448 g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
449 g_clear_error (&_inner_error0_);
450 return;
451 }
452 }
453 {
454 gchar** key_collection = NULL;
455 gint key_collection_length1 = 0;
456 gint _key_collection_size_ = 0;
457 gint key_it = 0;
458 key_collection = _tmp0_;
459 key_collection_length1 = _tmp0__length1;
460 for (key_it = 0; key_it < key_collection_length1; key_it = key_it + 1) {
461 gchar* _tmp3_;
462 gchar* key = NULL;
463 _tmp3_ = g_strdup (key_collection[key_it]);
464 key = _tmp3_;
465 {
466 const gchar* _tmp4_;
467 const gchar* _tmp5_;
468 GQuark _tmp7_ = 0U;
469 static GQuark _tmp6_label0 = 0;
470 static GQuark _tmp6_label1 = 0;
471 static GQuark _tmp6_label2 = 0;
472 static GQuark _tmp6_label3 = 0;
473 _tmp4_ = key;
474 _tmp5_ = _tmp4_;
475 _tmp7_ = (NULL == _tmp5_) ? 0 : g_quark_from_string (_tmp5_);
476 if (_tmp7_ == ((0 != _tmp6_label0) ? _tmp6_label0 : (_tmp6_label0 = g_quark_from_static_string ("resources")))) {
477 switch (0) {
478 default:
479 {
480 gchar* _tmp8_ = NULL;
481 gchar* _tmp9_;
482 gchar* _tmp10_;
483 _tmp9_ = g_key_file_get_string (key_file, "General", "resources", &_inner_error0_);
484 _tmp8_ = _tmp9_;
485 if (G_UNLIKELY (_inner_error0_ != NULL)) {
486 if (_inner_error0_->domain == G_KEY_FILE_ERROR) {
487 g_propagate_error (error, _inner_error0_);
488 _g_free0 (key);
489 _tmp0_ = (_vala_array_free (_tmp0_, _tmp0__length1, (GDestroyNotify) g_free), NULL);
490 return;
491 } else {
492 _g_free0 (key);
493 _tmp0_ = (_vala_array_free (_tmp0_, _tmp0__length1, (GDestroyNotify) g_free), NULL);
494 g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
495 g_clear_error (&_inner_error0_);
496 return;
497 }
498 }
499 _tmp10_ = _tmp8_;
500 _tmp8_ = NULL;
501 _g_free0 (self->priv->resource_dir);
502 self->priv->resource_dir = _tmp10_;
503 _g_free0 (_tmp8_);
504 break;
505 }
506 }
507 } else if (_tmp7_ == ((0 != _tmp6_label1) ? _tmp6_label1 : (_tmp6_label1 = g_quark_from_static_string ("is_docbook")))) {
508 switch (0) {
509 default:
510 {
511 gboolean _tmp11_ = FALSE;
512 _tmp11_ = g_key_file_get_boolean (key_file, "General", "is_docbook", &_inner_error0_);
513 if (G_UNLIKELY (_inner_error0_ != NULL)) {
514 if (_inner_error0_->domain == G_KEY_FILE_ERROR) {
515 g_propagate_error (error, _inner_error0_);
516 _g_free0 (key);
517 _tmp0_ = (_vala_array_free (_tmp0_, _tmp0__length1, (GDestroyNotify) g_free), NULL);
518 return;
519 } else {
520 _g_free0 (key);
521 _tmp0_ = (_vala_array_free (_tmp0_, _tmp0__length1, (GDestroyNotify) g_free), NULL);
522 g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
523 g_clear_error (&_inner_error0_);
524 return;
525 }
526 }
527 valadoc_gir_meta_data_set_is_docbook (self, _tmp11_);
528 break;
529 }
530 }
531 } else if (_tmp7_ == ((0 != _tmp6_label2) ? _tmp6_label2 : (_tmp6_label2 = g_quark_from_static_string ("index_sgml")))) {
532 switch (0) {
533 default:
534 {
535 gchar* tmp = NULL;
536 gchar* _tmp12_;
537 const gchar* _tmp13_;
538 gchar* _tmp14_;
539 gchar* _tmp15_;
540 const gchar* _tmp16_;
541 gchar* _tmp17_;
542 gchar* _tmp18_;
543 _tmp12_ = g_key_file_get_string (key_file, "General", "index_sgml", &_inner_error0_);
544 tmp = _tmp12_;
545 if (G_UNLIKELY (_inner_error0_ != NULL)) {
546 if (_inner_error0_->domain == G_KEY_FILE_ERROR) {
547 g_propagate_error (error, _inner_error0_);
548 _g_free0 (key);
549 _tmp0_ = (_vala_array_free (_tmp0_, _tmp0__length1, (GDestroyNotify) g_free), NULL);
550 return;
551 } else {
552 _g_free0 (key);
553 _tmp0_ = (_vala_array_free (_tmp0_, _tmp0__length1, (GDestroyNotify) g_free), NULL);
554 g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
555 g_clear_error (&_inner_error0_);
556 return;
557 }
558 }
559 _tmp13_ = self->priv->metadata_path;
560 _tmp14_ = g_path_get_dirname (_tmp13_);
561 _tmp15_ = _tmp14_;
562 _tmp16_ = tmp;
563 _tmp17_ = g_build_filename (_tmp15_, _tmp16_, NULL);
564 _tmp18_ = _tmp17_;
565 valadoc_gir_meta_data_set_index_sgml (self, _tmp18_);
566 _g_free0 (_tmp18_);
567 _g_free0 (_tmp15_);
568 _g_free0 (tmp);
569 break;
570 }
571 }
572 } else if (_tmp7_ == ((0 != _tmp6_label3) ? _tmp6_label3 : (_tmp6_label3 = g_quark_from_static_string ("index_sgml_online")))) {
573 switch (0) {
574 default:
575 {
576 gchar* _tmp19_ = NULL;
577 gchar* _tmp20_;
578 _tmp20_ = g_key_file_get_string (key_file, "General", "index_sgml_online", &_inner_error0_);
579 _tmp19_ = _tmp20_;
580 if (G_UNLIKELY (_inner_error0_ != NULL)) {
581 if (_inner_error0_->domain == G_KEY_FILE_ERROR) {
582 g_propagate_error (error, _inner_error0_);
583 _g_free0 (key);
584 _tmp0_ = (_vala_array_free (_tmp0_, _tmp0__length1, (GDestroyNotify) g_free), NULL);
585 return;
586 } else {
587 _g_free0 (key);
588 _tmp0_ = (_vala_array_free (_tmp0_, _tmp0__length1, (GDestroyNotify) g_free), NULL);
589 g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
590 g_clear_error (&_inner_error0_);
591 return;
592 }
593 }
594 valadoc_gir_meta_data_set_index_sgml_online (self, _tmp19_);
595 _g_free0 (_tmp19_);
596 break;
597 }
598 }
599 } else {
600 switch (0) {
601 default:
602 {
603 const gchar* _tmp21_;
604 const gchar* _tmp22_;
605 _tmp21_ = self->priv->metadata_path;
606 _tmp22_ = key;
607 valadoc_error_reporter_simple_warning (reporter, _tmp21_, "Unknown key 'General.%s'", _tmp22_);
608 break;
609 }
610 }
611 }
612 _g_free0 (key);
613 }
614 }
615 }
616 _tmp0_ = (_vala_array_free (_tmp0_, _tmp0__length1, (GDestroyNotify) g_free), NULL);
617 }
618
619 ValadocGirMetaData*
valadoc_gir_meta_data_construct(GType object_type,const gchar * gir_file_path,gchar ** metadata_dirs,gint metadata_dirs_length1,ValadocErrorReporter * reporter)620 valadoc_gir_meta_data_construct (GType object_type,
621 const gchar* gir_file_path,
622 gchar** metadata_dirs,
623 gint metadata_dirs_length1,
624 ValadocErrorReporter* reporter)
625 {
626 ValadocGirMetaData * self = NULL;
627 gchar* _tmp0_;
628 const gchar* _tmp1_;
629 GKeyFile* key_file = NULL;
630 GError* _inner_error0_ = NULL;
631 g_return_val_if_fail (gir_file_path != NULL, NULL);
632 g_return_val_if_fail (reporter != NULL, NULL);
633 self = (ValadocGirMetaData*) g_object_new (object_type, NULL);
634 if (!g_file_test (gir_file_path, G_FILE_TEST_IS_REGULAR)) {
635 return self;
636 }
637 _tmp0_ = valadoc_gir_meta_data_get_metadata_path (self, gir_file_path, metadata_dirs, (gint) metadata_dirs_length1);
638 _g_free0 (self->priv->metadata_path);
639 self->priv->metadata_path = _tmp0_;
640 _tmp1_ = self->priv->metadata_path;
641 if (_tmp1_ == NULL) {
642 return self;
643 }
644 {
645 GKeyFile* _tmp2_;
646 GKeyFile* _tmp3_;
647 const gchar* _tmp4_;
648 _tmp2_ = g_key_file_new ();
649 _g_key_file_unref0 (key_file);
650 key_file = _tmp2_;
651 _tmp3_ = key_file;
652 _tmp4_ = self->priv->metadata_path;
653 g_key_file_load_from_file (_tmp3_, _tmp4_, G_KEY_FILE_NONE, &_inner_error0_);
654 if (G_UNLIKELY (_inner_error0_ != NULL)) {
655 if (_inner_error0_->domain == G_KEY_FILE_ERROR) {
656 goto __catch0_g_key_file_error;
657 }
658 if (_inner_error0_->domain == G_FILE_ERROR) {
659 goto __catch0_g_file_error;
660 }
661 _g_key_file_unref0 (key_file);
662 g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
663 g_clear_error (&_inner_error0_);
664 return NULL;
665 }
666 }
667 goto __finally0;
668 __catch0_g_key_file_error:
669 {
670 GError* e = NULL;
671 const gchar* _tmp5_;
672 GError* _tmp6_;
673 const gchar* _tmp7_;
674 e = _inner_error0_;
675 _inner_error0_ = NULL;
676 _tmp5_ = self->priv->metadata_path;
677 _tmp6_ = e;
678 _tmp7_ = _tmp6_->message;
679 valadoc_error_reporter_simple_error (reporter, _tmp5_, "%s", _tmp7_);
680 _g_error_free0 (e);
681 _g_key_file_unref0 (key_file);
682 return self;
683 }
684 goto __finally0;
685 __catch0_g_file_error:
686 {
687 GError* e = NULL;
688 const gchar* _tmp8_;
689 GError* _tmp9_;
690 const gchar* _tmp10_;
691 e = _inner_error0_;
692 _inner_error0_ = NULL;
693 _tmp8_ = self->priv->metadata_path;
694 _tmp9_ = e;
695 _tmp10_ = _tmp9_->message;
696 valadoc_error_reporter_simple_error (reporter, _tmp8_, "%s", _tmp10_);
697 _g_error_free0 (e);
698 _g_key_file_unref0 (key_file);
699 return self;
700 }
701 __finally0:
702 if (G_UNLIKELY (_inner_error0_ != NULL)) {
703 _g_key_file_unref0 (key_file);
704 g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
705 g_clear_error (&_inner_error0_);
706 return NULL;
707 }
708 {
709 GKeyFile* _tmp11_;
710 gsize _tmp12_ = 0;
711 gchar** _tmp13_;
712 _tmp11_ = key_file;
713 _tmp13_ = g_key_file_get_groups (_tmp11_, &_tmp12_);
714 {
715 gchar** group_collection = NULL;
716 gint group_collection_length1 = 0;
717 gint _group_collection_size_ = 0;
718 gint group_it = 0;
719 group_collection = _tmp13_;
720 group_collection_length1 = _tmp12_;
721 for (group_it = 0; group_it < group_collection_length1; group_it = group_it + 1) {
722 gchar* _tmp14_;
723 gchar* group = NULL;
724 _tmp14_ = g_strdup (group_collection[group_it]);
725 group = _tmp14_;
726 {
727 const gchar* _tmp15_;
728 const gchar* _tmp16_;
729 GQuark _tmp18_ = 0U;
730 static GQuark _tmp17_label0 = 0;
731 _tmp15_ = group;
732 _tmp16_ = _tmp15_;
733 _tmp18_ = (NULL == _tmp16_) ? 0 : g_quark_from_string (_tmp16_);
734 if (_tmp18_ == ((0 != _tmp17_label0) ? _tmp17_label0 : (_tmp17_label0 = g_quark_from_static_string ("General")))) {
735 switch (0) {
736 default:
737 {
738 GKeyFile* _tmp19_;
739 _tmp19_ = key_file;
740 valadoc_gir_meta_data_load_general_metadata (self, _tmp19_, reporter, &_inner_error0_);
741 if (G_UNLIKELY (_inner_error0_ != NULL)) {
742 _g_free0 (group);
743 group_collection = (_vala_array_free (group_collection, group_collection_length1, (GDestroyNotify) g_free), NULL);
744 if (_inner_error0_->domain == G_KEY_FILE_ERROR) {
745 goto __catch1_g_key_file_error;
746 }
747 _g_key_file_unref0 (key_file);
748 g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
749 g_clear_error (&_inner_error0_);
750 return NULL;
751 }
752 break;
753 }
754 }
755 } else {
756 switch (0) {
757 default:
758 {
759 const gchar* _tmp20_;
760 const gchar* _tmp21_;
761 _tmp20_ = self->priv->metadata_path;
762 _tmp21_ = group;
763 valadoc_error_reporter_simple_warning (reporter, _tmp20_, "Unknown group '%s'", _tmp21_);
764 break;
765 }
766 }
767 }
768 _g_free0 (group);
769 }
770 }
771 group_collection = (_vala_array_free (group_collection, group_collection_length1, (GDestroyNotify) g_free), NULL);
772 }
773 }
774 goto __finally1;
775 __catch1_g_key_file_error:
776 {
777 GError* e = NULL;
778 const gchar* _tmp22_;
779 GError* _tmp23_;
780 const gchar* _tmp24_;
781 e = _inner_error0_;
782 _inner_error0_ = NULL;
783 _tmp22_ = self->priv->metadata_path;
784 _tmp23_ = e;
785 _tmp24_ = _tmp23_->message;
786 valadoc_error_reporter_simple_error (reporter, NULL, "Unable to read file '%s': %s", _tmp22_, _tmp24_);
787 _g_error_free0 (e);
788 }
789 __finally1:
790 if (G_UNLIKELY (_inner_error0_ != NULL)) {
791 _g_key_file_unref0 (key_file);
792 g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
793 g_clear_error (&_inner_error0_);
794 return NULL;
795 }
796 _g_key_file_unref0 (key_file);
797 return self;
798 }
799
800 ValadocGirMetaData*
valadoc_gir_meta_data_new(const gchar * gir_file_path,gchar ** metadata_dirs,gint metadata_dirs_length1,ValadocErrorReporter * reporter)801 valadoc_gir_meta_data_new (const gchar* gir_file_path,
802 gchar** metadata_dirs,
803 gint metadata_dirs_length1,
804 ValadocErrorReporter* reporter)
805 {
806 return valadoc_gir_meta_data_construct (VALADOC_TYPE_GIR_META_DATA, gir_file_path, metadata_dirs, metadata_dirs_length1, reporter);
807 }
808
809 static void
valadoc_gir_meta_data_class_init(ValadocGirMetaDataClass * klass,gpointer klass_data)810 valadoc_gir_meta_data_class_init (ValadocGirMetaDataClass * klass,
811 gpointer klass_data)
812 {
813 valadoc_gir_meta_data_parent_class = g_type_class_peek_parent (klass);
814 g_type_class_adjust_private_offset (klass, &ValadocGirMetaData_private_offset);
815 G_OBJECT_CLASS (klass)->get_property = _vala_valadoc_gir_meta_data_get_property;
816 G_OBJECT_CLASS (klass)->set_property = _vala_valadoc_gir_meta_data_set_property;
817 G_OBJECT_CLASS (klass)->finalize = valadoc_gir_meta_data_finalize;
818 g_object_class_install_property (G_OBJECT_CLASS (klass), VALADOC_GIR_META_DATA_IS_DOCBOOK_PROPERTY, valadoc_gir_meta_data_properties[VALADOC_GIR_META_DATA_IS_DOCBOOK_PROPERTY] = g_param_spec_boolean ("is-docbook", "is-docbook", "is-docbook", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
819 g_object_class_install_property (G_OBJECT_CLASS (klass), VALADOC_GIR_META_DATA_INDEX_SGML_PROPERTY, valadoc_gir_meta_data_properties[VALADOC_GIR_META_DATA_INDEX_SGML_PROPERTY] = g_param_spec_string ("index-sgml", "index-sgml", "index-sgml", NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
820 g_object_class_install_property (G_OBJECT_CLASS (klass), VALADOC_GIR_META_DATA_INDEX_SGML_ONLINE_PROPERTY, valadoc_gir_meta_data_properties[VALADOC_GIR_META_DATA_INDEX_SGML_ONLINE_PROPERTY] = g_param_spec_string ("index-sgml-online", "index-sgml-online", "index-sgml-online", NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
821 }
822
823 static void
valadoc_gir_meta_data_instance_init(ValadocGirMetaData * self,gpointer klass)824 valadoc_gir_meta_data_instance_init (ValadocGirMetaData * self,
825 gpointer klass)
826 {
827 self->priv = valadoc_gir_meta_data_get_instance_private (self);
828 self->priv->metadata_path = NULL;
829 self->priv->resource_dir = NULL;
830 self->priv->_is_docbook = FALSE;
831 self->priv->_index_sgml = NULL;
832 self->priv->_index_sgml_online = NULL;
833 }
834
835 static void
valadoc_gir_meta_data_finalize(GObject * obj)836 valadoc_gir_meta_data_finalize (GObject * obj)
837 {
838 ValadocGirMetaData * self;
839 self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALADOC_TYPE_GIR_META_DATA, ValadocGirMetaData);
840 _g_free0 (self->priv->metadata_path);
841 _g_free0 (self->priv->resource_dir);
842 _g_free0 (self->priv->_index_sgml);
843 _g_free0 (self->priv->_index_sgml_online);
844 G_OBJECT_CLASS (valadoc_gir_meta_data_parent_class)->finalize (obj);
845 }
846
847 /**
848 * Metadata reader for GIR files
849 */
850 static GType
valadoc_gir_meta_data_get_type_once(void)851 valadoc_gir_meta_data_get_type_once (void)
852 {
853 static const GTypeInfo g_define_type_info = { sizeof (ValadocGirMetaDataClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) valadoc_gir_meta_data_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValadocGirMetaData), 0, (GInstanceInitFunc) valadoc_gir_meta_data_instance_init, NULL };
854 GType valadoc_gir_meta_data_type_id;
855 valadoc_gir_meta_data_type_id = g_type_register_static (G_TYPE_OBJECT, "ValadocGirMetaData", &g_define_type_info, 0);
856 ValadocGirMetaData_private_offset = g_type_add_instance_private (valadoc_gir_meta_data_type_id, sizeof (ValadocGirMetaDataPrivate));
857 return valadoc_gir_meta_data_type_id;
858 }
859
860 GType
valadoc_gir_meta_data_get_type(void)861 valadoc_gir_meta_data_get_type (void)
862 {
863 static volatile gsize valadoc_gir_meta_data_type_id__volatile = 0;
864 if (g_once_init_enter (&valadoc_gir_meta_data_type_id__volatile)) {
865 GType valadoc_gir_meta_data_type_id;
866 valadoc_gir_meta_data_type_id = valadoc_gir_meta_data_get_type_once ();
867 g_once_init_leave (&valadoc_gir_meta_data_type_id__volatile, valadoc_gir_meta_data_type_id);
868 }
869 return valadoc_gir_meta_data_type_id__volatile;
870 }
871
872 static void
_vala_valadoc_gir_meta_data_get_property(GObject * object,guint property_id,GValue * value,GParamSpec * pspec)873 _vala_valadoc_gir_meta_data_get_property (GObject * object,
874 guint property_id,
875 GValue * value,
876 GParamSpec * pspec)
877 {
878 ValadocGirMetaData * self;
879 self = G_TYPE_CHECK_INSTANCE_CAST (object, VALADOC_TYPE_GIR_META_DATA, ValadocGirMetaData);
880 switch (property_id) {
881 case VALADOC_GIR_META_DATA_IS_DOCBOOK_PROPERTY:
882 g_value_set_boolean (value, valadoc_gir_meta_data_get_is_docbook (self));
883 break;
884 case VALADOC_GIR_META_DATA_INDEX_SGML_PROPERTY:
885 g_value_set_string (value, valadoc_gir_meta_data_get_index_sgml (self));
886 break;
887 case VALADOC_GIR_META_DATA_INDEX_SGML_ONLINE_PROPERTY:
888 g_value_set_string (value, valadoc_gir_meta_data_get_index_sgml_online (self));
889 break;
890 default:
891 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
892 break;
893 }
894 }
895
896 static void
_vala_valadoc_gir_meta_data_set_property(GObject * object,guint property_id,const GValue * value,GParamSpec * pspec)897 _vala_valadoc_gir_meta_data_set_property (GObject * object,
898 guint property_id,
899 const GValue * value,
900 GParamSpec * pspec)
901 {
902 ValadocGirMetaData * self;
903 self = G_TYPE_CHECK_INSTANCE_CAST (object, VALADOC_TYPE_GIR_META_DATA, ValadocGirMetaData);
904 switch (property_id) {
905 case VALADOC_GIR_META_DATA_IS_DOCBOOK_PROPERTY:
906 valadoc_gir_meta_data_set_is_docbook (self, g_value_get_boolean (value));
907 break;
908 case VALADOC_GIR_META_DATA_INDEX_SGML_PROPERTY:
909 valadoc_gir_meta_data_set_index_sgml (self, g_value_get_string (value));
910 break;
911 case VALADOC_GIR_META_DATA_INDEX_SGML_ONLINE_PROPERTY:
912 valadoc_gir_meta_data_set_index_sgml_online (self, g_value_get_string (value));
913 break;
914 default:
915 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
916 break;
917 }
918 }
919
920 static void
_vala_array_destroy(gpointer array,gint array_length,GDestroyNotify destroy_func)921 _vala_array_destroy (gpointer array,
922 gint array_length,
923 GDestroyNotify destroy_func)
924 {
925 if ((array != NULL) && (destroy_func != NULL)) {
926 gint i;
927 for (i = 0; i < array_length; i = i + 1) {
928 if (((gpointer*) array)[i] != NULL) {
929 destroy_func (((gpointer*) array)[i]);
930 }
931 }
932 }
933 }
934
935 static void
_vala_array_free(gpointer array,gint array_length,GDestroyNotify destroy_func)936 _vala_array_free (gpointer array,
937 gint array_length,
938 GDestroyNotify destroy_func)
939 {
940 _vala_array_destroy (array, array_length, destroy_func);
941 g_free (array);
942 }
943
944