1
/* chess-pgn.c generated by valac 0.12.0, the Vala compiler
2
* generated from chess-pgn.vala, do not modify */
6
#include <glib-object.h>
11
#include <gobject/gvaluecollector.h>
14
#define TYPE_PGN_GAME (pgn_game_get_type ())
15
#define PGN_GAME(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PGN_GAME, PGNGame))
16
#define PGN_GAME_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PGN_GAME, PGNGameClass))
17
#define IS_PGN_GAME(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PGN_GAME))
18
#define IS_PGN_GAME_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PGN_GAME))
19
#define PGN_GAME_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PGN_GAME, PGNGameClass))
21
typedef struct _PGNGame PGNGame;
22
typedef struct _PGNGameClass PGNGameClass;
23
typedef struct _PGNGamePrivate PGNGamePrivate;
24
#define _g_hash_table_unref0(var) ((var == NULL) ? NULL : (var = (g_hash_table_unref (var), NULL)))
25
#define __g_list_free__g_free0_0(var) ((var == NULL) ? NULL : (var = (_g_list_free__g_free0_ (var), NULL)))
26
#define _g_free0(var) (var = (g_free (var), NULL))
27
#define _g_list_free0(var) ((var == NULL) ? NULL : (var = (g_list_free (var), NULL)))
28
#define _g_string_free0(var) ((var == NULL) ? NULL : (var = (g_string_free (var, TRUE), NULL)))
29
typedef struct _ParamSpecPGNGame ParamSpecPGNGame;
31
#define TYPE_STATE (state_get_type ())
33
#define TYPE_PGN (pgn_get_type ())
34
#define PGN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PGN, PGN))
35
#define PGN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PGN, PGNClass))
36
#define IS_PGN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PGN))
37
#define IS_PGN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PGN))
38
#define PGN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PGN, PGNClass))
40
typedef struct _PGN PGN;
41
typedef struct _PGNClass PGNClass;
42
typedef struct _PGNPrivate PGNPrivate;
43
#define __g_list_free__pgn_game_unref0_0(var) ((var == NULL) ? NULL : (var = (_g_list_free__pgn_game_unref0_ (var), NULL)))
44
#define _pgn_game_unref0(var) ((var == NULL) ? NULL : (var = (pgn_game_unref (var), NULL)))
45
#define _pgn_unref0(var) ((var == NULL) ? NULL : (var = (pgn_unref (var), NULL)))
46
typedef struct _ParamSpecPGN ParamSpecPGN;
51
#define PGN_ERROR pgn_error_quark ()
53
GTypeInstance parent_instance;
54
volatile int ref_count;
55
PGNGamePrivate * priv;
60
struct _PGNGameClass {
61
GTypeClass parent_class;
62
void (*finalize) (PGNGame *self);
65
struct _ParamSpecPGNGame {
66
GParamSpec parent_instance;
86
GTypeInstance parent_instance;
87
volatile int ref_count;
93
GTypeClass parent_class;
94
void (*finalize) (PGN *self);
97
struct _ParamSpecPGN {
98
GParamSpec parent_instance;
102
static gpointer pgn_game_parent_class = NULL;
103
extern gchar* pgn_game_RESULT_IN_PROGRESS;
104
gchar* pgn_game_RESULT_IN_PROGRESS = NULL;
105
extern gchar* pgn_game_RESULT_DRAW;
106
gchar* pgn_game_RESULT_DRAW = NULL;
107
extern gchar* pgn_game_RESULT_WHITE;
108
gchar* pgn_game_RESULT_WHITE = NULL;
109
extern gchar* pgn_game_RESULT_BLACK;
110
gchar* pgn_game_RESULT_BLACK = NULL;
111
extern gchar* pgn_game_TERMINATE_ABANDONED;
112
gchar* pgn_game_TERMINATE_ABANDONED = NULL;
113
extern gchar* pgn_game_TERMINATE_ADJUDICATION;
114
gchar* pgn_game_TERMINATE_ADJUDICATION = NULL;
115
extern gchar* pgn_game_TERMINATE_DEATH;
116
gchar* pgn_game_TERMINATE_DEATH = NULL;
117
extern gchar* pgn_game_TERMINATE_EMERGENCY;
118
gchar* pgn_game_TERMINATE_EMERGENCY = NULL;
119
extern gchar* pgn_game_TERMINATE_NORMAL;
120
gchar* pgn_game_TERMINATE_NORMAL = NULL;
121
extern gchar* pgn_game_TERMINATE_RULES_INFRACTION;
122
gchar* pgn_game_TERMINATE_RULES_INFRACTION = NULL;
123
extern gchar* pgn_game_TERMINATE_TIME_FORFEIT;
124
gchar* pgn_game_TERMINATE_TIME_FORFEIT = NULL;
125
extern gchar* pgn_game_TERMINATE_UNTERMINATED;
126
gchar* pgn_game_TERMINATE_UNTERMINATED = NULL;
127
static gpointer pgn_parent_class = NULL;
129
gint str_index (const gchar* name);
130
gint compare_tag (const gchar* name0, const gchar* name1);
131
GQuark pgn_error_quark (void);
132
gpointer pgn_game_ref (gpointer instance);
133
void pgn_game_unref (gpointer instance);
134
GParamSpec* param_spec_pgn_game (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
135
void value_set_pgn_game (GValue* value, gpointer v_object);
136
void value_take_pgn_game (GValue* value, gpointer v_object);
137
gpointer value_get_pgn_game (const GValue* value);
138
GType pgn_game_get_type (void) G_GNUC_CONST;
140
PGN_GAME_DUMMY_PROPERTY
142
static void _g_free0_ (gpointer var);
143
static void _g_list_free__g_free0_ (GList* self);
144
PGNGame* pgn_game_new (void);
145
PGNGame* pgn_game_construct (GType object_type);
146
void pgn_game_write (PGNGame* self, GFile* file, GError** error);
147
const gchar* pgn_game_get_result (PGNGame* self);
148
const gchar* pgn_game_get_event (PGNGame* self);
149
void pgn_game_set_event (PGNGame* self, const gchar* value);
150
const gchar* pgn_game_get_site (PGNGame* self);
151
void pgn_game_set_site (PGNGame* self, const gchar* value);
152
const gchar* pgn_game_get_date (PGNGame* self);
153
void pgn_game_set_date (PGNGame* self, const gchar* value);
154
const gchar* pgn_game_get_time (PGNGame* self);
155
void pgn_game_set_time (PGNGame* self, const gchar* value);
156
const gchar* pgn_game_get_round (PGNGame* self);
157
void pgn_game_set_round (PGNGame* self, const gchar* value);
158
const gchar* pgn_game_get_white (PGNGame* self);
159
void pgn_game_set_white (PGNGame* self, const gchar* value);
160
const gchar* pgn_game_get_black (PGNGame* self);
161
void pgn_game_set_black (PGNGame* self, const gchar* value);
162
void pgn_game_set_result (PGNGame* self, const gchar* value);
163
const gchar* pgn_game_get_annotator (PGNGame* self);
164
void pgn_game_set_annotator (PGNGame* self, const gchar* value);
165
const gchar* pgn_game_get_time_control (PGNGame* self);
166
void pgn_game_set_time_control (PGNGame* self, const gchar* value);
167
gboolean pgn_game_get_set_up (PGNGame* self);
168
void pgn_game_set_set_up (PGNGame* self, gboolean value);
169
const gchar* pgn_game_get_fen (PGNGame* self);
170
void pgn_game_set_fen (PGNGame* self, const gchar* value);
171
const gchar* pgn_game_get_termination (PGNGame* self);
172
void pgn_game_set_termination (PGNGame* self, const gchar* value);
173
static void pgn_game_finalize (PGNGame* obj);
174
GType state_get_type (void) G_GNUC_CONST;
175
gpointer pgn_ref (gpointer instance);
176
void pgn_unref (gpointer instance);
177
GParamSpec* param_spec_pgn (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
178
void value_set_pgn (GValue* value, gpointer v_object);
179
void value_take_pgn (GValue* value, gpointer v_object);
180
gpointer value_get_pgn (const GValue* value);
181
GType pgn_get_type (void) G_GNUC_CONST;
185
static void _pgn_game_unref0_ (gpointer var);
186
static void _g_list_free__pgn_game_unref0_ (GList* self);
188
PGN* pgn_construct (GType object_type);
189
PGN* pgn_new_from_string (const gchar* data, GError** error);
190
PGN* pgn_construct_from_string (GType object_type, const gchar* data, GError** error);
191
PGN* pgn_new_from_file (GFile* file, GError** error);
192
PGN* pgn_construct_from_file (GType object_type, GFile* file, GError** error);
193
static void pgn_finalize (PGN* obj);
196
gint str_index (const gchar* name) {
198
g_return_val_if_fail (name != NULL, 0);
199
if (g_strcmp0 (name, "Event") == 0) {
203
if (g_strcmp0 (name, "Site") == 0) {
207
if (g_strcmp0 (name, "Date") == 0) {
211
if (g_strcmp0 (name, "Round") == 0) {
215
if (g_strcmp0 (name, "White") == 0) {
219
if (g_strcmp0 (name, "Black") == 0) {
223
if (g_strcmp0 (name, "Result") == 0) {
239
gint compare_tag (const gchar* name0, const gchar* name1) {
245
gboolean _tmp2_ = FALSE;
246
g_return_val_if_fail (name0 != NULL, 0);
247
g_return_val_if_fail (name1 != NULL, 0);
248
_tmp0_ = str_index (name0);
250
_tmp1_ = str_index (name1);
252
if (str_index0 == 7) {
253
_tmp2_ = str_index1 == 7;
259
_tmp3_ = g_strcmp0 (name0, name1);
263
result = str_index0 - str_index1;
269
GQuark pgn_error_quark (void) {
270
return g_quark_from_static_string ("pgn_error-quark");
274
static void _g_free0_ (gpointer var) {
275
var = (g_free (var), NULL);
279
static void _g_list_free__g_free0_ (GList* self) {
280
g_list_foreach (self, (GFunc) _g_free0_, NULL);
285
PGNGame* pgn_game_construct (GType object_type) {
286
PGNGame* self = NULL;
287
GHashTable* _tmp0_ = NULL;
302
self = (PGNGame*) g_type_create_instance (object_type);
303
_tmp0_ = g_hash_table_new_full (g_str_hash, g_str_equal, _g_free0_, _g_free0_);
304
_g_hash_table_unref0 (self->tags);
306
_tmp1_ = g_strdup ("Event");
307
_tmp2_ = g_strdup ("?");
308
g_hash_table_insert (self->tags, _tmp1_, _tmp2_);
309
_tmp3_ = g_strdup ("Site");
310
_tmp4_ = g_strdup ("?");
311
g_hash_table_insert (self->tags, _tmp3_, _tmp4_);
312
_tmp5_ = g_strdup ("Date");
313
_tmp6_ = g_strdup ("????.??.??");
314
g_hash_table_insert (self->tags, _tmp5_, _tmp6_);
315
_tmp7_ = g_strdup ("Round");
316
_tmp8_ = g_strdup ("?");
317
g_hash_table_insert (self->tags, _tmp7_, _tmp8_);
318
_tmp9_ = g_strdup ("White");
319
_tmp10_ = g_strdup ("?");
320
g_hash_table_insert (self->tags, _tmp9_, _tmp10_);
321
_tmp11_ = g_strdup ("Black");
322
_tmp12_ = g_strdup ("?");
323
g_hash_table_insert (self->tags, _tmp11_, _tmp12_);
324
_tmp13_ = g_strdup ("Result");
325
_tmp14_ = g_strdup (pgn_game_RESULT_IN_PROGRESS);
326
g_hash_table_insert (self->tags, _tmp13_, _tmp14_);
331
PGNGame* pgn_game_new (void) {
332
return pgn_game_construct (TYPE_PGN_GAME);
336
void pgn_game_write (PGNGame* self, GFile* file, GError** error) {
337
GString* _tmp0_ = NULL;
339
GList* _tmp1_ = NULL;
342
const gchar* _tmp8_ = NULL;
343
GError * _inner_error_ = NULL;
344
g_return_if_fail (self != NULL);
345
g_return_if_fail (file != NULL);
346
_tmp0_ = g_string_new ("");
348
_tmp1_ = g_hash_table_get_keys (self->tags);
350
keys = g_list_sort (keys, (GCompareFunc) compare_tag);
352
GList* key_collection;
354
key_collection = keys;
355
for (key_it = key_collection; key_it != NULL; key_it = key_it->next) {
357
key = (const gchar*) key_it->data;
359
gconstpointer _tmp2_ = NULL;
360
gchar* _tmp3_ = NULL;
362
_tmp2_ = g_hash_table_lookup (self->tags, key);
363
_tmp3_ = g_strdup_printf ("[%s \"%s\"]\n", key, (const gchar*) _tmp2_);
365
g_string_append (data, _tmp4_);
370
g_string_append (data, "\n");
373
GList* move_collection;
375
move_collection = self->moves;
376
for (move_it = move_collection; move_it != NULL; move_it = move_it->next) {
379
_tmp5_ = g_strdup ((const gchar*) move_it->data);
383
gchar* _tmp6_ = NULL;
385
_tmp6_ = g_strdup_printf ("%d. ", (i / 2) + 1);
387
g_string_append (data, _tmp7_);
390
g_string_append (data, move);
391
g_string_append (data, " ");
397
_tmp8_ = pgn_game_get_result (self);
398
g_string_append (data, _tmp8_);
399
g_string_append (data, "\n");
400
g_file_replace_contents (file, data->str, (gsize) data->len, NULL, FALSE, G_FILE_CREATE_NONE, NULL, NULL, &_inner_error_);
401
if (_inner_error_ != NULL) {
402
g_propagate_error (error, _inner_error_);
403
_g_list_free0 (keys);
404
_g_string_free0 (data);
407
_g_list_free0 (keys);
408
_g_string_free0 (data);
412
const gchar* pgn_game_get_event (PGNGame* self) {
414
gconstpointer _tmp0_ = NULL;
415
g_return_val_if_fail (self != NULL, NULL);
416
_tmp0_ = g_hash_table_lookup (self->tags, "Event");
417
result = (const gchar*) _tmp0_;
422
void pgn_game_set_event (PGNGame* self, const gchar* value) {
425
g_return_if_fail (self != NULL);
426
_tmp0_ = g_strdup ("Event");
427
_tmp1_ = g_strdup (value);
428
g_hash_table_insert (self->tags, _tmp0_, _tmp1_);
432
const gchar* pgn_game_get_site (PGNGame* self) {
434
gconstpointer _tmp0_ = NULL;
435
g_return_val_if_fail (self != NULL, NULL);
436
_tmp0_ = g_hash_table_lookup (self->tags, "Site");
437
result = (const gchar*) _tmp0_;
442
void pgn_game_set_site (PGNGame* self, const gchar* value) {
445
g_return_if_fail (self != NULL);
446
_tmp0_ = g_strdup ("Site");
447
_tmp1_ = g_strdup (value);
448
g_hash_table_insert (self->tags, _tmp0_, _tmp1_);
452
const gchar* pgn_game_get_date (PGNGame* self) {
454
gconstpointer _tmp0_ = NULL;
455
g_return_val_if_fail (self != NULL, NULL);
456
_tmp0_ = g_hash_table_lookup (self->tags, "Date");
457
result = (const gchar*) _tmp0_;
462
void pgn_game_set_date (PGNGame* self, const gchar* value) {
465
g_return_if_fail (self != NULL);
466
_tmp0_ = g_strdup ("Date");
467
_tmp1_ = g_strdup (value);
468
g_hash_table_insert (self->tags, _tmp0_, _tmp1_);
472
const gchar* pgn_game_get_time (PGNGame* self) {
474
gconstpointer _tmp0_ = NULL;
475
g_return_val_if_fail (self != NULL, NULL);
476
_tmp0_ = g_hash_table_lookup (self->tags, "Time");
477
result = (const gchar*) _tmp0_;
482
void pgn_game_set_time (PGNGame* self, const gchar* value) {
485
g_return_if_fail (self != NULL);
486
_tmp0_ = g_strdup ("Time");
487
_tmp1_ = g_strdup (value);
488
g_hash_table_insert (self->tags, _tmp0_, _tmp1_);
492
const gchar* pgn_game_get_round (PGNGame* self) {
494
gconstpointer _tmp0_ = NULL;
495
g_return_val_if_fail (self != NULL, NULL);
496
_tmp0_ = g_hash_table_lookup (self->tags, "Round");
497
result = (const gchar*) _tmp0_;
502
void pgn_game_set_round (PGNGame* self, const gchar* value) {
505
g_return_if_fail (self != NULL);
506
_tmp0_ = g_strdup ("Round");
507
_tmp1_ = g_strdup (value);
508
g_hash_table_insert (self->tags, _tmp0_, _tmp1_);
512
const gchar* pgn_game_get_white (PGNGame* self) {
514
gconstpointer _tmp0_ = NULL;
515
g_return_val_if_fail (self != NULL, NULL);
516
_tmp0_ = g_hash_table_lookup (self->tags, "White");
517
result = (const gchar*) _tmp0_;
522
void pgn_game_set_white (PGNGame* self, const gchar* value) {
525
g_return_if_fail (self != NULL);
526
_tmp0_ = g_strdup ("White");
527
_tmp1_ = g_strdup (value);
528
g_hash_table_insert (self->tags, _tmp0_, _tmp1_);
532
const gchar* pgn_game_get_black (PGNGame* self) {
534
gconstpointer _tmp0_ = NULL;
535
g_return_val_if_fail (self != NULL, NULL);
536
_tmp0_ = g_hash_table_lookup (self->tags, "Black");
537
result = (const gchar*) _tmp0_;
542
void pgn_game_set_black (PGNGame* self, const gchar* value) {
545
g_return_if_fail (self != NULL);
546
_tmp0_ = g_strdup ("Black");
547
_tmp1_ = g_strdup (value);
548
g_hash_table_insert (self->tags, _tmp0_, _tmp1_);
552
const gchar* pgn_game_get_result (PGNGame* self) {
554
gconstpointer _tmp0_ = NULL;
555
g_return_val_if_fail (self != NULL, NULL);
556
_tmp0_ = g_hash_table_lookup (self->tags, "Result");
557
result = (const gchar*) _tmp0_;
562
void pgn_game_set_result (PGNGame* self, const gchar* value) {
565
g_return_if_fail (self != NULL);
566
_tmp0_ = g_strdup ("Result");
567
_tmp1_ = g_strdup (value);
568
g_hash_table_insert (self->tags, _tmp0_, _tmp1_);
572
const gchar* pgn_game_get_annotator (PGNGame* self) {
574
gconstpointer _tmp0_ = NULL;
575
g_return_val_if_fail (self != NULL, NULL);
576
_tmp0_ = g_hash_table_lookup (self->tags, "Annotator");
577
result = (const gchar*) _tmp0_;
582
void pgn_game_set_annotator (PGNGame* self, const gchar* value) {
585
g_return_if_fail (self != NULL);
586
_tmp0_ = g_strdup ("Annotator");
587
_tmp1_ = g_strdup (value);
588
g_hash_table_insert (self->tags, _tmp0_, _tmp1_);
592
const gchar* pgn_game_get_time_control (PGNGame* self) {
594
gconstpointer _tmp0_ = NULL;
595
g_return_val_if_fail (self != NULL, NULL);
596
_tmp0_ = g_hash_table_lookup (self->tags, "TimeControl");
597
result = (const gchar*) _tmp0_;
602
void pgn_game_set_time_control (PGNGame* self, const gchar* value) {
605
g_return_if_fail (self != NULL);
606
_tmp0_ = g_strdup ("TimeControl");
607
_tmp1_ = g_strdup (value);
608
g_hash_table_insert (self->tags, _tmp0_, _tmp1_);
612
gboolean pgn_game_get_set_up (PGNGame* self) {
614
gconstpointer _tmp0_ = NULL;
617
gboolean _tmp2_ = FALSE;
618
gboolean _tmp3_ = FALSE;
619
g_return_val_if_fail (self != NULL, FALSE);
620
_tmp0_ = g_hash_table_lookup (self->tags, "SetUp");
621
_tmp1_ = g_strdup ((const gchar*) _tmp0_);
624
_tmp3_ = g_strcmp0 (v, "1") == 0;
639
void pgn_game_set_set_up (PGNGame* self, gboolean value) {
640
const gchar* _tmp0_ = NULL;
643
g_return_if_fail (self != NULL);
649
_tmp1_ = g_strdup ("SetUp");
650
_tmp2_ = g_strdup (_tmp0_);
651
g_hash_table_insert (self->tags, _tmp1_, _tmp2_);
655
const gchar* pgn_game_get_fen (PGNGame* self) {
657
gconstpointer _tmp0_ = NULL;
658
g_return_val_if_fail (self != NULL, NULL);
659
_tmp0_ = g_hash_table_lookup (self->tags, "FEN");
660
result = (const gchar*) _tmp0_;
665
void pgn_game_set_fen (PGNGame* self, const gchar* value) {
668
g_return_if_fail (self != NULL);
669
_tmp0_ = g_strdup ("FEN");
670
_tmp1_ = g_strdup (value);
671
g_hash_table_insert (self->tags, _tmp0_, _tmp1_);
675
const gchar* pgn_game_get_termination (PGNGame* self) {
677
gconstpointer _tmp0_ = NULL;
678
g_return_val_if_fail (self != NULL, NULL);
679
_tmp0_ = g_hash_table_lookup (self->tags, "Termination");
680
result = (const gchar*) _tmp0_;
685
void pgn_game_set_termination (PGNGame* self, const gchar* value) {
688
g_return_if_fail (self != NULL);
689
_tmp0_ = g_strdup ("Termination");
690
_tmp1_ = g_strdup (value);
691
g_hash_table_insert (self->tags, _tmp0_, _tmp1_);
695
static void value_pgn_game_init (GValue* value) {
696
value->data[0].v_pointer = NULL;
700
static void value_pgn_game_free_value (GValue* value) {
701
if (value->data[0].v_pointer) {
702
pgn_game_unref (value->data[0].v_pointer);
707
static void value_pgn_game_copy_value (const GValue* src_value, GValue* dest_value) {
708
if (src_value->data[0].v_pointer) {
709
dest_value->data[0].v_pointer = pgn_game_ref (src_value->data[0].v_pointer);
711
dest_value->data[0].v_pointer = NULL;
716
static gpointer value_pgn_game_peek_pointer (const GValue* value) {
717
return value->data[0].v_pointer;
721
static gchar* value_pgn_game_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
722
if (collect_values[0].v_pointer) {
724
object = collect_values[0].v_pointer;
725
if (object->parent_instance.g_class == NULL) {
726
return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
727
} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
728
return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
730
value->data[0].v_pointer = pgn_game_ref (object);
732
value->data[0].v_pointer = NULL;
738
static gchar* value_pgn_game_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
740
object_p = collect_values[0].v_pointer;
742
return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
744
if (!value->data[0].v_pointer) {
746
} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
747
*object_p = value->data[0].v_pointer;
749
*object_p = pgn_game_ref (value->data[0].v_pointer);
755
GParamSpec* param_spec_pgn_game (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
756
ParamSpecPGNGame* spec;
757
g_return_val_if_fail (g_type_is_a (object_type, TYPE_PGN_GAME), NULL);
758
spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
759
G_PARAM_SPEC (spec)->value_type = object_type;
760
return G_PARAM_SPEC (spec);
764
gpointer value_get_pgn_game (const GValue* value) {
765
g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_PGN_GAME), NULL);
766
return value->data[0].v_pointer;
770
void value_set_pgn_game (GValue* value, gpointer v_object) {
772
g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_PGN_GAME));
773
old = value->data[0].v_pointer;
775
g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_PGN_GAME));
776
g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
777
value->data[0].v_pointer = v_object;
778
pgn_game_ref (value->data[0].v_pointer);
780
value->data[0].v_pointer = NULL;
783
pgn_game_unref (old);
788
void value_take_pgn_game (GValue* value, gpointer v_object) {
790
g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_PGN_GAME));
791
old = value->data[0].v_pointer;
793
g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_PGN_GAME));
794
g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
795
value->data[0].v_pointer = v_object;
797
value->data[0].v_pointer = NULL;
800
pgn_game_unref (old);
805
static void pgn_game_class_init (PGNGameClass * klass) {
818
pgn_game_parent_class = g_type_class_peek_parent (klass);
819
PGN_GAME_CLASS (klass)->finalize = pgn_game_finalize;
820
_tmp0_ = g_strdup ("*");
821
pgn_game_RESULT_IN_PROGRESS = _tmp0_;
822
_tmp1_ = g_strdup ("1/2-1/2");
823
pgn_game_RESULT_DRAW = _tmp1_;
824
_tmp2_ = g_strdup ("1-0");
825
pgn_game_RESULT_WHITE = _tmp2_;
826
_tmp3_ = g_strdup ("0-1");
827
pgn_game_RESULT_BLACK = _tmp3_;
828
_tmp4_ = g_strdup ("abandoned");
829
pgn_game_TERMINATE_ABANDONED = _tmp4_;
830
_tmp5_ = g_strdup ("adjudication");
831
pgn_game_TERMINATE_ADJUDICATION = _tmp5_;
832
_tmp6_ = g_strdup ("death");
833
pgn_game_TERMINATE_DEATH = _tmp6_;
834
_tmp7_ = g_strdup ("emergency");
835
pgn_game_TERMINATE_EMERGENCY = _tmp7_;
836
_tmp8_ = g_strdup ("normal");
837
pgn_game_TERMINATE_NORMAL = _tmp8_;
838
_tmp9_ = g_strdup ("rules infraction");
839
pgn_game_TERMINATE_RULES_INFRACTION = _tmp9_;
840
_tmp10_ = g_strdup ("time forfeit");
841
pgn_game_TERMINATE_TIME_FORFEIT = _tmp10_;
842
_tmp11_ = g_strdup ("unterminated");
843
pgn_game_TERMINATE_UNTERMINATED = _tmp11_;
847
static void pgn_game_instance_init (PGNGame * self) {
852
static void pgn_game_finalize (PGNGame* obj) {
854
self = PGN_GAME (obj);
855
_g_hash_table_unref0 (self->tags);
856
__g_list_free__g_free0_0 (self->moves);
860
GType pgn_game_get_type (void) {
861
static volatile gsize pgn_game_type_id__volatile = 0;
862
if (g_once_init_enter (&pgn_game_type_id__volatile)) {
863
static const GTypeValueTable g_define_type_value_table = { value_pgn_game_init, value_pgn_game_free_value, value_pgn_game_copy_value, value_pgn_game_peek_pointer, "p", value_pgn_game_collect_value, "p", value_pgn_game_lcopy_value };
864
static const GTypeInfo g_define_type_info = { sizeof (PGNGameClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) pgn_game_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (PGNGame), 0, (GInstanceInitFunc) pgn_game_instance_init, &g_define_type_value_table };
865
static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
866
GType pgn_game_type_id;
867
pgn_game_type_id = g_type_register_fundamental (g_type_fundamental_next (), "PGNGame", &g_define_type_info, &g_define_type_fundamental_info, 0);
868
g_once_init_leave (&pgn_game_type_id__volatile, pgn_game_type_id);
870
return pgn_game_type_id__volatile;
874
gpointer pgn_game_ref (gpointer instance) {
877
g_atomic_int_inc (&self->ref_count);
882
void pgn_game_unref (gpointer instance) {
885
if (g_atomic_int_dec_and_test (&self->ref_count)) {
886
PGN_GAME_GET_CLASS (self)->finalize (self);
887
g_type_free_instance ((GTypeInstance *) self);
892
GType state_get_type (void) {
893
static volatile gsize state_type_id__volatile = 0;
894
if (g_once_init_enter (&state_type_id__volatile)) {
895
static const GEnumValue values[] = {{STATE_TAGS, "STATE_TAGS", "tags"}, {STATE_MOVE_TEXT, "STATE_MOVE_TEXT", "move-text"}, {STATE_LINE_COMMENT, "STATE_LINE_COMMENT", "line-comment"}, {STATE_BRACE_COMMENT, "STATE_BRACE_COMMENT", "brace-comment"}, {STATE_TAG_START, "STATE_TAG_START", "tag-start"}, {STATE_TAG_NAME, "STATE_TAG_NAME", "tag-name"}, {STATE_PRE_TAG_VALUE, "STATE_PRE_TAG_VALUE", "pre-tag-value"}, {STATE_TAG_VALUE, "STATE_TAG_VALUE", "tag-value"}, {STATE_POST_TAG_VALUE, "STATE_POST_TAG_VALUE", "post-tag-value"}, {STATE_SYMBOL, "STATE_SYMBOL", "symbol"}, {STATE_PERIOD, "STATE_PERIOD", "period"}, {STATE_NAG, "STATE_NAG", "nag"}, {STATE_ERROR, "STATE_ERROR", "error"}, {0, NULL, NULL}};
897
state_type_id = g_enum_register_static ("State", values);
898
g_once_init_leave (&state_type_id__volatile, state_type_id);
900
return state_type_id__volatile;
904
static void _pgn_game_unref0_ (gpointer var) {
905
(var == NULL) ? NULL : (var = (pgn_game_unref (var), NULL));
909
static void _g_list_free__pgn_game_unref0_ (GList* self) {
910
g_list_foreach (self, (GFunc) _pgn_game_unref0_, NULL);
915
PGN* pgn_construct (GType object_type) {
917
self = (PGN*) g_type_create_instance (object_type);
922
PGN* pgn_new (void) {
923
return pgn_construct (TYPE_PGN);
927
static gchar string_get (const gchar* self, glong index) {
929
g_return_val_if_fail (self != NULL, '\0');
930
result = ((gchar*) self)[index];
935
static gpointer _pgn_game_ref0 (gpointer self) {
936
return self ? pgn_game_ref (self) : NULL;
940
static gchar* string_slice (const gchar* self, glong start, glong end) {
941
gchar* result = NULL;
944
gboolean _tmp1_ = FALSE;
945
gboolean _tmp2_ = FALSE;
946
gchar* _tmp3_ = NULL;
947
g_return_val_if_fail (self != NULL, NULL);
948
_tmp0_ = strlen (self);
949
string_length = (glong) _tmp0_;
951
start = string_length + start;
954
end = string_length + end;
957
_tmp1_ = start <= string_length;
961
g_return_val_if_fail (_tmp1_, NULL);
963
_tmp2_ = end <= string_length;
967
g_return_val_if_fail (_tmp2_, NULL);
968
g_return_val_if_fail (start <= end, NULL);
969
_tmp3_ = g_strndup (((gchar*) self) + start, (gsize) (end - start));
975
PGN* pgn_construct_from_string (GType object_type, const gchar* data, GError** error) {
979
PGNGame* _tmp0_ = NULL;
986
GString* _tmp2_ = NULL;
990
gboolean _tmp51_ = FALSE;
992
GError * _inner_error_ = NULL;
993
g_return_val_if_fail (data != NULL, NULL);
994
self = (PGN*) g_type_create_instance (object_type);
996
home_state = STATE_TAGS;
997
_tmp0_ = pgn_game_new ();
1000
token_start = (gsize) 0;
1001
line_offset = (gsize) 0;
1002
_tmp1_ = g_strdup ("");
1004
_tmp2_ = g_string_new ("");
1022
_tmp4_ = strlen (data);
1023
if (!(offset <= _tmp4_)) {
1026
_tmp5_ = string_get (data, (glong) offset);
1027
c = (gunichar) _tmp5_;
1030
line_offset = offset + 1;
1036
home_state = STATE_TAGS;
1037
_tmp6_ = g_unichar_isspace (c);
1041
state = STATE_LINE_COMMENT;
1044
state = STATE_BRACE_COMMENT;
1047
state = STATE_TAG_START;
1050
state = STATE_MOVE_TEXT;
1058
case STATE_MOVE_TEXT:
1061
home_state = STATE_MOVE_TEXT;
1062
_tmp7_ = g_unichar_isspace (c);
1066
state = STATE_LINE_COMMENT;
1069
state = STATE_BRACE_COMMENT;
1072
if (rav_level == 0) {
1074
PGNGame* _tmp9_ = NULL;
1075
pgn_game_set_result (game, pgn_game_RESULT_IN_PROGRESS);
1076
_tmp8_ = _pgn_game_ref0 (game);
1077
self->games = g_list_append (self->games, _tmp8_);
1078
_tmp9_ = pgn_game_new ();
1079
_pgn_game_unref0 (game);
1086
state = STATE_PERIOD;
1089
_tmp10_ = g_unichar_isalnum (c);
1091
token_start = offset;
1092
state = STATE_SYMBOL;
1095
token_start = offset + 1;
1103
if (rav_level == 0) {
1104
state = STATE_ERROR;
1109
state = STATE_ERROR;
1121
case STATE_LINE_COMMENT:
1128
case STATE_BRACE_COMMENT:
1135
case STATE_TAG_START:
1138
_tmp11_ = g_unichar_isspace (c);
1143
_tmp12_ = g_unichar_isalnum (c);
1145
token_start = offset;
1146
state = STATE_TAG_NAME;
1148
state = STATE_ERROR;
1153
case STATE_TAG_NAME:
1156
_tmp13_ = g_unichar_isspace (c);
1158
gchar* _tmp14_ = NULL;
1159
_tmp14_ = string_slice (data, (glong) token_start, (glong) offset);
1160
_g_free0 (tag_name);
1162
state = STATE_PRE_TAG_VALUE;
1164
gboolean _tmp15_ = FALSE;
1165
gboolean _tmp16_ = FALSE;
1166
gboolean _tmp17_ = FALSE;
1167
gboolean _tmp18_ = FALSE;
1168
gboolean _tmp19_ = FALSE;
1169
gboolean _tmp20_ = FALSE;
1171
_tmp21_ = g_unichar_isalnum (c);
1205
state = STATE_ERROR;
1210
case STATE_PRE_TAG_VALUE:
1213
_tmp22_ = g_unichar_isspace (c);
1218
state = STATE_TAG_VALUE;
1219
g_string_erase (tag_value, (gssize) 0, (gssize) (-1));
1222
state = STATE_ERROR;
1227
case STATE_TAG_VALUE:
1229
gboolean _tmp23_ = FALSE;
1231
_tmp23_ = !in_escape;
1238
gboolean _tmp24_ = FALSE;
1240
_tmp24_ = !in_escape;
1245
state = STATE_POST_TAG_VALUE;
1248
_tmp25_ = g_unichar_isprint (c);
1250
g_string_append_unichar (tag_value, c);
1253
state = STATE_ERROR;
1259
case STATE_POST_TAG_VALUE:
1262
_tmp26_ = g_unichar_isspace (c);
1269
_tmp27_ = g_strdup (tag_name);
1270
_tmp28_ = g_strdup (tag_value->str);
1271
g_hash_table_insert (game->tags, _tmp27_, _tmp28_);
1274
state = STATE_ERROR;
1281
gboolean _tmp29_ = FALSE;
1282
gboolean _tmp30_ = FALSE;
1283
gboolean _tmp31_ = FALSE;
1284
gboolean _tmp32_ = FALSE;
1285
gboolean _tmp33_ = FALSE;
1286
gboolean _tmp34_ = FALSE;
1287
gboolean _tmp35_ = FALSE;
1289
_tmp36_ = g_unichar_isalnum (c);
1328
gchar* _tmp37_ = NULL;
1331
gboolean _tmp42_ = FALSE;
1332
gboolean _tmp43_ = FALSE;
1333
_tmp37_ = string_slice (data, (glong) token_start, (glong) offset);
1350
_tmp39_ = strlen (symbol);
1351
if (!(i < _tmp39_)) {
1354
_tmp40_ = string_get (symbol, (glong) i);
1355
_tmp41_ = g_ascii_isdigit (_tmp40_);
1362
state = STATE_MOVE_TEXT;
1364
if (g_strcmp0 (symbol, pgn_game_RESULT_DRAW) == 0) {
1367
_tmp43_ = g_strcmp0 (symbol, pgn_game_RESULT_WHITE) == 0;
1372
_tmp42_ = g_strcmp0 (symbol, pgn_game_RESULT_BLACK) == 0;
1375
if (rav_level == 0) {
1377
PGNGame* _tmp45_ = NULL;
1378
pgn_game_set_result (game, symbol);
1379
_tmp44_ = _pgn_game_ref0 (game);
1380
self->games = g_list_append (self->games, _tmp44_);
1381
_tmp45_ = pgn_game_new ();
1382
_pgn_game_unref0 (game);
1388
if (rav_level == 0) {
1390
_tmp46_ = g_strdup (symbol);
1391
game->moves = g_list_append (game->moves, _tmp46_);
1401
state = STATE_MOVE_TEXT;
1407
_tmp47_ = g_unichar_isdigit (c);
1411
state = STATE_MOVE_TEXT;
1419
gchar* _tmp48_ = NULL;
1421
char_offset = (offset - line_offset) - 1;
1422
fprintf (stderr, "%d.%d: error: Unexpected character\n", line, (gint) (char_offset + 1));
1423
_tmp48_ = string_slice (data, (glong) line_offset, (glong) offset);
1425
fprintf (stderr, "%s\n", _tmp49_);
1438
if (!(i < char_offset)) {
1441
fprintf (stderr, " ");
1445
fprintf (stderr, "^\n");
1446
_g_string_free0 (tag_value);
1447
_g_free0 (tag_name);
1448
_pgn_game_unref0 (game);
1457
_tmp52_ = g_list_length (game->moves);
1462
_tmp53_ = g_hash_table_size (game->tags);
1463
_tmp51_ = _tmp53_ > 0;
1467
_tmp54_ = _pgn_game_ref0 (game);
1468
self->games = g_list_append (self->games, _tmp54_);
1470
if (self->games == NULL) {
1471
GError* _tmp55_ = NULL;
1472
_tmp55_ = g_error_new_literal (PGN_ERROR, PGN_ERROR_LOAD_ERROR, "No games in PGN file");
1473
_inner_error_ = _tmp55_;
1474
if (_inner_error_->domain == PGN_ERROR) {
1475
g_propagate_error (error, _inner_error_);
1476
_g_string_free0 (tag_value);
1477
_g_free0 (tag_name);
1478
_pgn_game_unref0 (game);
1482
_g_string_free0 (tag_value);
1483
_g_free0 (tag_name);
1484
_pgn_game_unref0 (game);
1485
g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
1486
g_clear_error (&_inner_error_);
1490
_g_string_free0 (tag_value);
1491
_g_free0 (tag_name);
1492
_pgn_game_unref0 (game);
1497
PGN* pgn_new_from_string (const gchar* data, GError** error) {
1498
return pgn_construct_from_string (TYPE_PGN, data, error);
1502
PGN* pgn_construct_from_file (GType object_type, GFile* file, GError** error) {
1504
gchar* contents = NULL;
1506
gchar* _tmp0_ = NULL;
1508
GError * _inner_error_ = NULL;
1509
g_return_val_if_fail (file != NULL, NULL);
1510
self = (PGN*) g_type_create_instance (object_type);
1511
g_file_load_contents (file, NULL, &_tmp0_, &_tmp1_, NULL, &_inner_error_);
1512
_g_free0 (contents);
1515
if (_inner_error_ != NULL) {
1516
g_propagate_error (error, _inner_error_);
1517
_g_free0 (contents);
1521
self = (PGN*) pgn_construct_from_string (object_type, contents, &_inner_error_);
1522
if (_inner_error_ != NULL) {
1523
g_propagate_error (error, _inner_error_);
1524
_g_free0 (contents);
1528
_g_free0 (contents);
1533
PGN* pgn_new_from_file (GFile* file, GError** error) {
1534
return pgn_construct_from_file (TYPE_PGN, file, error);
1538
static void value_pgn_init (GValue* value) {
1539
value->data[0].v_pointer = NULL;
1543
static void value_pgn_free_value (GValue* value) {
1544
if (value->data[0].v_pointer) {
1545
pgn_unref (value->data[0].v_pointer);
1550
static void value_pgn_copy_value (const GValue* src_value, GValue* dest_value) {
1551
if (src_value->data[0].v_pointer) {
1552
dest_value->data[0].v_pointer = pgn_ref (src_value->data[0].v_pointer);
1554
dest_value->data[0].v_pointer = NULL;
1559
static gpointer value_pgn_peek_pointer (const GValue* value) {
1560
return value->data[0].v_pointer;
1564
static gchar* value_pgn_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
1565
if (collect_values[0].v_pointer) {
1567
object = collect_values[0].v_pointer;
1568
if (object->parent_instance.g_class == NULL) {
1569
return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
1570
} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
1571
return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
1573
value->data[0].v_pointer = pgn_ref (object);
1575
value->data[0].v_pointer = NULL;
1581
static gchar* value_pgn_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
1583
object_p = collect_values[0].v_pointer;
1585
return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
1587
if (!value->data[0].v_pointer) {
1589
} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
1590
*object_p = value->data[0].v_pointer;
1592
*object_p = pgn_ref (value->data[0].v_pointer);
1598
GParamSpec* param_spec_pgn (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
1600
g_return_val_if_fail (g_type_is_a (object_type, TYPE_PGN), NULL);
1601
spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
1602
G_PARAM_SPEC (spec)->value_type = object_type;
1603
return G_PARAM_SPEC (spec);
1607
gpointer value_get_pgn (const GValue* value) {
1608
g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_PGN), NULL);
1609
return value->data[0].v_pointer;
1613
void value_set_pgn (GValue* value, gpointer v_object) {
1615
g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_PGN));
1616
old = value->data[0].v_pointer;
1618
g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_PGN));
1619
g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
1620
value->data[0].v_pointer = v_object;
1621
pgn_ref (value->data[0].v_pointer);
1623
value->data[0].v_pointer = NULL;
1631
void value_take_pgn (GValue* value, gpointer v_object) {
1633
g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_PGN));
1634
old = value->data[0].v_pointer;
1636
g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_PGN));
1637
g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
1638
value->data[0].v_pointer = v_object;
1640
value->data[0].v_pointer = NULL;
1648
static void pgn_class_init (PGNClass * klass) {
1649
pgn_parent_class = g_type_class_peek_parent (klass);
1650
PGN_CLASS (klass)->finalize = pgn_finalize;
1654
static void pgn_instance_init (PGN * self) {
1655
self->ref_count = 1;
1659
static void pgn_finalize (PGN* obj) {
1662
__g_list_free__pgn_game_unref0_0 (self->games);
1666
GType pgn_get_type (void) {
1667
static volatile gsize pgn_type_id__volatile = 0;
1668
if (g_once_init_enter (&pgn_type_id__volatile)) {
1669
static const GTypeValueTable g_define_type_value_table = { value_pgn_init, value_pgn_free_value, value_pgn_copy_value, value_pgn_peek_pointer, "p", value_pgn_collect_value, "p", value_pgn_lcopy_value };
1670
static const GTypeInfo g_define_type_info = { sizeof (PGNClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) pgn_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (PGN), 0, (GInstanceInitFunc) pgn_instance_init, &g_define_type_value_table };
1671
static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
1673
pgn_type_id = g_type_register_fundamental (g_type_fundamental_next (), "PGN", &g_define_type_info, &g_define_type_fundamental_info, 0);
1674
g_once_init_leave (&pgn_type_id__volatile, pgn_type_id);
1676
return pgn_type_id__volatile;
1680
gpointer pgn_ref (gpointer instance) {
1683
g_atomic_int_inc (&self->ref_count);
1688
void pgn_unref (gpointer instance) {
1691
if (g_atomic_int_dec_and_test (&self->ref_count)) {
1692
PGN_GET_CLASS (self)->finalize (self);
1693
g_type_free_instance ((GTypeInstance *) self);