]> andersk Git - libyaml.git/blame - tests/example-deconstructor-alt.c
Fix pointer and enum warnings in deconstructor-alt
[libyaml.git] / tests / example-deconstructor-alt.c
CommitLineData
e27a3c88
KS
1
2#include <yaml.h>
3
4#include <stdlib.h>
5#include <stdio.h>
6
7int
8main(int argc, char *argv[])
9{
10 int help = 0;
11 int canonical = 0;
12 int unicode = 0;
13 int k;
14 int done = 0;
15
16 yaml_parser_t parser;
17 yaml_emitter_t emitter;
18 yaml_event_t input_event;
19 yaml_document_t output_document;
20
21 int root;
22
23 /* Clear the objects. */
24
25 memset(&parser, 0, sizeof(parser));
26 memset(&emitter, 0, sizeof(emitter));
27 memset(&input_event, 0, sizeof(input_event));
28 memset(&output_document, 0, sizeof(output_document));
29
30 /* Analyze command line options. */
31
32 for (k = 1; k < argc; k ++)
33 {
34 if (strcmp(argv[k], "-h") == 0
35 || strcmp(argv[k], "--help") == 0) {
36 help = 1;
37 }
38
39 else if (strcmp(argv[k], "-c") == 0
40 || strcmp(argv[k], "--canonical") == 0) {
41 canonical = 1;
42 }
43
44 else if (strcmp(argv[k], "-u") == 0
45 || strcmp(argv[k], "--unicode") == 0) {
46 unicode = 1;
47 }
48
49 else {
50 fprintf(stderr, "Unrecognized option: %s\n"
51 "Try `%s --help` for more information.\n",
52 argv[k], argv[0]);
53 return 1;
54 }
55 }
56
57 /* Display the help string. */
58
59 if (help)
60 {
61 printf("%s <input\n"
62 "or\n%s -h | --help\nDeconstruct a YAML stream\n\nOptions:\n"
63 "-h, --help\t\tdisplay this help and exit\n"
64 "-c, --canonical\t\toutput in the canonical YAML format\n"
65 "-u, --unicode\t\toutput unescaped non-ASCII characters\n",
66 argv[0], argv[0]);
67 return 0;
68 }
69
70 /* Initialize the parser and emitter objects. */
71
72 if (!yaml_parser_initialize(&parser)) {
73 fprintf(stderr, "Could not initialize the parser object\n");
74 return 1;
75 }
76
77 if (!yaml_emitter_initialize(&emitter)) {
78 yaml_parser_delete(&parser);
79 fprintf(stderr, "Could not inialize the emitter object\n");
80 return 1;
81 }
82
83 /* Set the parser parameters. */
84
85 yaml_parser_set_input_file(&parser, stdin);
86
87 /* Set the emitter parameters. */
88
89 yaml_emitter_set_output_file(&emitter, stdout);
90
91 yaml_emitter_set_canonical(&emitter, canonical);
92 yaml_emitter_set_unicode(&emitter, unicode);
93
94 /* Create and emit the STREAM-START event. */
95
96 if (!yaml_emitter_open(&emitter))
97 goto emitter_error;
98
99 /* Create a output_document object. */
100
101 if (!yaml_document_initialize(&output_document, NULL, NULL, NULL, 0, 0))
102 goto document_error;
103
104 /* Create the root sequence. */
105
106 root = yaml_document_add_sequence(&output_document, NULL,
107 YAML_BLOCK_SEQUENCE_STYLE);
108 if (!root) goto document_error;
109
110 /* Loop through the input events. */
111
112 while (!done)
113 {
114 int properties, key, value, map, seq;
115
116 /* Get the next event. */
117
118 if (!yaml_parser_parse(&parser, &input_event))
119 goto parser_error;
120
121 /* Check if this is the stream end. */
122
123 if (input_event.type == YAML_STREAM_END_EVENT) {
124 done = 1;
125 }
126
127 /* Create a mapping node and attach it to the root sequence. */
128
129 properties = yaml_document_add_mapping(&output_document, NULL,
130 YAML_BLOCK_MAPPING_STYLE);
131 if (!properties) goto document_error;
132 if (!yaml_document_append_sequence_item(&output_document,
133 root, properties)) goto document_error;
134
135 /* Analyze the event. */
136
137 switch (input_event.type)
138 {
139 case YAML_STREAM_START_EVENT:
140
141 /* Add 'type': 'STREAM-START'. */
142
143 key = yaml_document_add_scalar(&output_document, NULL,
70342132 144 (yaml_char_t *)"type", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
145 if (!key) goto document_error;
146 value = yaml_document_add_scalar(&output_document, NULL,
70342132 147 (yaml_char_t *)"STREAM-START", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
148 if (!value) goto document_error;
149 if (!yaml_document_append_mapping_pair(&output_document,
150 properties, key, value)) goto document_error;
151
152 /* Add 'encoding': <encoding>. */
153
154 if (input_event.data.stream_start.encoding)
155 {
156 yaml_encoding_t encoding
157 = input_event.data.stream_start.encoding;
158
159 key = yaml_document_add_scalar(&output_document, NULL,
70342132 160 (yaml_char_t *)"encoding", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
161 if (!key) goto document_error;
162 value = yaml_document_add_scalar(&output_document, NULL,
70342132 163 (yaml_char_t *)(encoding == YAML_UTF8_ENCODING ? "utf-8" :
e27a3c88
KS
164 encoding == YAML_UTF16LE_ENCODING ? "utf-16-le" :
165 encoding == YAML_UTF16BE_ENCODING ? "utf-16-be" :
166 "unknown"), -1, YAML_PLAIN_SCALAR_STYLE);
167 if (!value) goto document_error;
168 if (!yaml_document_append_mapping_pair(&output_document,
169 properties, key, value)) goto document_error;
170 }
171
172 break;
173
174 case YAML_STREAM_END_EVENT:
175
176 /* Add 'type': 'STREAM-END'. */
177
178 key = yaml_document_add_scalar(&output_document, NULL,
70342132 179 (yaml_char_t *)"type", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
180 if (!key) goto document_error;
181 value = yaml_document_add_scalar(&output_document, NULL,
70342132 182 (yaml_char_t *)"STREAM-END", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
183 if (!value) goto document_error;
184 if (!yaml_document_append_mapping_pair(&output_document,
185 properties, key, value)) goto document_error;
186
187 break;
188
189 case YAML_DOCUMENT_START_EVENT:
190
191 /* Add 'type': 'DOCUMENT-START'. */
192
193 key = yaml_document_add_scalar(&output_document, NULL,
70342132 194 (yaml_char_t *)"type", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
195 if (!key) goto document_error;
196 value = yaml_document_add_scalar(&output_document, NULL,
70342132 197 (yaml_char_t *)"DOCUMENT-START", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
198 if (!value) goto document_error;
199 if (!yaml_document_append_mapping_pair(&output_document,
200 properties, key, value)) goto document_error;
201
202 /* Display the output_document version numbers. */
203
204 if (input_event.data.document_start.version_directive)
205 {
206 yaml_version_directive_t *version
207 = input_event.data.document_start.version_directive;
208 char number[64];
209
210 /* Add 'version': {}. */
211
212 key = yaml_document_add_scalar(&output_document, NULL,
70342132 213 (yaml_char_t *)"version", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
214 if (!key) goto document_error;
215 map = yaml_document_add_mapping(&output_document, NULL,
216 YAML_FLOW_MAPPING_STYLE);
217 if (!map) goto document_error;
218 if (!yaml_document_append_mapping_pair(&output_document,
219 properties, key, map)) goto document_error;
220
221 /* Add 'major': <number>. */
222
223 key = yaml_document_add_scalar(&output_document, NULL,
70342132 224 (yaml_char_t *)"major", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
225 if (!key) goto document_error;
226 sprintf(number, "%d", version->major);
70342132
IC
227 value = yaml_document_add_scalar(&output_document, (yaml_char_t *)YAML_INT_TAG,
228 (yaml_char_t *)number, -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
229 if (!value) goto document_error;
230 if (!yaml_document_append_mapping_pair(&output_document,
231 map, key, value)) goto document_error;
232
233 /* Add 'minor': <number>. */
234
235 key = yaml_document_add_scalar(&output_document, NULL,
70342132 236 (yaml_char_t *)"minor", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
237 if (!key) goto document_error;
238 sprintf(number, "%d", version->minor);
70342132
IC
239 value = yaml_document_add_scalar(&output_document, (yaml_char_t *)YAML_INT_TAG,
240 (yaml_char_t *)number, -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
241 if (!value) goto document_error;
242 if (!yaml_document_append_mapping_pair(&output_document,
243 map, key, value)) goto document_error;
244 }
245
246 /* Display the output_document tag directives. */
247
248 if (input_event.data.document_start.tag_directives.start
249 != input_event.data.document_start.tag_directives.end)
250 {
251 yaml_tag_directive_t *tag;
252
253 /* Add 'tags': []. */
254
255 key = yaml_document_add_scalar(&output_document, NULL,
70342132 256 (yaml_char_t *)"tags", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
257 if (!key) goto document_error;
258 seq = yaml_document_add_sequence(&output_document, NULL,
259 YAML_BLOCK_SEQUENCE_STYLE);
260 if (!seq) goto document_error;
261 if (!yaml_document_append_mapping_pair(&output_document,
262 properties, key, seq)) goto document_error;
263
264 for (tag = input_event.data.document_start.tag_directives.start;
265 tag != input_event.data.document_start.tag_directives.end;
266 tag ++)
267 {
268 /* Add {}. */
269
270 map = yaml_document_add_mapping(&output_document, NULL,
271 YAML_FLOW_MAPPING_STYLE);
272 if (!map) goto document_error;
273 if (!yaml_document_append_sequence_item(&output_document,
274 seq, map)) goto document_error;
275
276 /* Add 'handle': <handle>. */
277
278 key = yaml_document_add_scalar(&output_document, NULL,
70342132 279 (yaml_char_t *)"handle", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
280 if (!key) goto document_error;
281 value = yaml_document_add_scalar(&output_document, NULL,
282 tag->handle, -1, YAML_DOUBLE_QUOTED_SCALAR_STYLE);
283 if (!value) goto document_error;
284 if (!yaml_document_append_mapping_pair(&output_document,
285 map, key, value)) goto document_error;
286
287 /* Add 'prefix': <prefix>. */
288
289 key = yaml_document_add_scalar(&output_document, NULL,
70342132 290 (yaml_char_t *)"prefix", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
291 if (!key) goto document_error;
292 value = yaml_document_add_scalar(&output_document, NULL,
293 tag->prefix, -1, YAML_DOUBLE_QUOTED_SCALAR_STYLE);
294 if (!value) goto document_error;
295 if (!yaml_document_append_mapping_pair(&output_document,
296 map, key, value)) goto document_error;
297 }
298 }
299
300 /* Add 'implicit': <flag>. */
301
302 key = yaml_document_add_scalar(&output_document, NULL,
70342132 303 (yaml_char_t *)"implicit", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88 304 if (!key) goto document_error;
70342132
IC
305 value = yaml_document_add_scalar(&output_document, (yaml_char_t *)YAML_BOOL_TAG,
306 (yaml_char_t *)(input_event.data.document_start.implicit ?
e27a3c88
KS
307 "true" : "false"), -1, YAML_PLAIN_SCALAR_STYLE);
308 if (!value) goto document_error;
309 if (!yaml_document_append_mapping_pair(&output_document,
310 properties, key, value)) goto document_error;
311
312 break;
313
314 case YAML_DOCUMENT_END_EVENT:
315
316 /* Add 'type': 'DOCUMENT-END'. */
317
318 key = yaml_document_add_scalar(&output_document, NULL,
70342132 319 (yaml_char_t *)"type", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
320 if (!key) goto document_error;
321 value = yaml_document_add_scalar(&output_document, NULL,
70342132 322 (yaml_char_t *)"DOCUMENT-END", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
323 if (!value) goto document_error;
324 if (!yaml_document_append_mapping_pair(&output_document,
325 properties, key, value)) goto document_error;
326
327 /* Add 'implicit': <flag>. */
328
329 key = yaml_document_add_scalar(&output_document, NULL,
70342132 330 (yaml_char_t *)"implicit", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88 331 if (!key) goto document_error;
70342132
IC
332 value = yaml_document_add_scalar(&output_document, (yaml_char_t *)YAML_BOOL_TAG,
333 (yaml_char_t *)(input_event.data.document_end.implicit ?
e27a3c88
KS
334 "true" : "false"), -1, YAML_PLAIN_SCALAR_STYLE);
335 if (!value) goto document_error;
336 if (!yaml_document_append_mapping_pair(&output_document,
337 properties, key, value)) goto document_error;
338
339 break;
340
341 case YAML_ALIAS_EVENT:
342
343 /* Add 'type': 'ALIAS'. */
344
345 key = yaml_document_add_scalar(&output_document, NULL,
70342132 346 (yaml_char_t *)"type", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
347 if (!key) goto document_error;
348 value = yaml_document_add_scalar(&output_document, NULL,
70342132 349 (yaml_char_t *)"ALIAS", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
350 if (!value) goto document_error;
351 if (!yaml_document_append_mapping_pair(&output_document,
352 properties, key, value)) goto document_error;
353
354 /* Add 'anchor': <anchor>. */
355
356 key = yaml_document_add_scalar(&output_document, NULL,
70342132 357 (yaml_char_t *)"anchor", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
358 if (!key) goto document_error;
359 value = yaml_document_add_scalar(&output_document, NULL,
360 input_event.data.alias.anchor, -1,
361 YAML_DOUBLE_QUOTED_SCALAR_STYLE);
362 if (!value) goto document_error;
363 if (!yaml_document_append_mapping_pair(&output_document,
364 properties, key, value)) goto document_error;
365
366 break;
367
368 case YAML_SCALAR_EVENT:
369
370 /* Add 'type': 'SCALAR'. */
371
372 key = yaml_document_add_scalar(&output_document, NULL,
70342132 373 (yaml_char_t *)"type", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
374 if (!key) goto document_error;
375 value = yaml_document_add_scalar(&output_document, NULL,
70342132 376 (yaml_char_t *)"SCALAR", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
377 if (!value) goto document_error;
378 if (!yaml_document_append_mapping_pair(&output_document,
379 properties, key, value)) goto document_error;
380
381 /* Add 'anchor': <anchor>. */
382
383 if (input_event.data.scalar.anchor)
384 {
385 key = yaml_document_add_scalar(&output_document, NULL,
70342132 386 (yaml_char_t *)"anchor", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
387 if (!key) goto document_error;
388 value = yaml_document_add_scalar(&output_document, NULL,
389 input_event.data.scalar.anchor, -1,
390 YAML_DOUBLE_QUOTED_SCALAR_STYLE);
391 if (!value) goto document_error;
392 if (!yaml_document_append_mapping_pair(&output_document,
393 properties, key, value)) goto document_error;
394 }
395
396 /* Add 'tag': <tag>. */
397
398 if (input_event.data.scalar.tag)
399 {
400 key = yaml_document_add_scalar(&output_document, NULL,
70342132 401 (yaml_char_t *)"tag", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
402 if (!key) goto document_error;
403 value = yaml_document_add_scalar(&output_document, NULL,
404 input_event.data.scalar.tag, -1,
405 YAML_DOUBLE_QUOTED_SCALAR_STYLE);
406 if (!value) goto document_error;
407 if (!yaml_document_append_mapping_pair(&output_document,
408 properties, key, value)) goto document_error;
409 }
410
411 /* Add 'value': <value>. */
412
413 key = yaml_document_add_scalar(&output_document, NULL,
70342132 414 (yaml_char_t *)"value", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
415 if (!key) goto document_error;
416 value = yaml_document_add_scalar(&output_document, NULL,
417 input_event.data.scalar.value,
418 input_event.data.scalar.length,
419 YAML_DOUBLE_QUOTED_SCALAR_STYLE);
420 if (!value) goto document_error;
421 if (!yaml_document_append_mapping_pair(&output_document,
422 properties, key, value)) goto document_error;
423
424 /* Display if the scalar tag is implicit. */
425
426 /* Add 'implicit': {} */
427
428 key = yaml_document_add_scalar(&output_document, NULL,
70342132 429 (yaml_char_t *)"version", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
430 if (!key) goto document_error;
431 map = yaml_document_add_mapping(&output_document, NULL,
432 YAML_FLOW_MAPPING_STYLE);
433 if (!map) goto document_error;
434 if (!yaml_document_append_mapping_pair(&output_document,
435 properties, key, map)) goto document_error;
436
437 /* Add 'plain': <flag>. */
438
439 key = yaml_document_add_scalar(&output_document, NULL,
70342132 440 (yaml_char_t *)"plain", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88 441 if (!key) goto document_error;
70342132
IC
442 value = yaml_document_add_scalar(&output_document, (yaml_char_t *)YAML_BOOL_TAG,
443 (yaml_char_t *)(input_event.data.scalar.plain_implicit ?
e27a3c88
KS
444 "true" : "false"), -1, YAML_PLAIN_SCALAR_STYLE);
445 if (!value) goto document_error;
446 if (!yaml_document_append_mapping_pair(&output_document,
447 map, key, value)) goto document_error;
448
449 /* Add 'quoted': <flag>. */
450
451 key = yaml_document_add_scalar(&output_document, NULL,
70342132 452 (yaml_char_t *)"quoted", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88 453 if (!key) goto document_error;
70342132
IC
454 value = yaml_document_add_scalar(&output_document, (yaml_char_t *)YAML_BOOL_TAG,
455 (yaml_char_t *)(input_event.data.scalar.quoted_implicit ?
e27a3c88
KS
456 "true" : "false"), -1, YAML_PLAIN_SCALAR_STYLE);
457 if (!value) goto document_error;
458 if (!yaml_document_append_mapping_pair(&output_document,
459 map, key, value)) goto document_error;
460
461 /* Display the style information. */
462
463 if (input_event.data.scalar.style)
464 {
465 yaml_scalar_style_t style = input_event.data.scalar.style;
466
467 /* Add 'style': <style>. */
468
469 key = yaml_document_add_scalar(&output_document, NULL,
70342132 470 (yaml_char_t *)"style", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
471 if (!key) goto document_error;
472 value = yaml_document_add_scalar(&output_document, NULL,
70342132 473 (yaml_char_t *)(style == YAML_PLAIN_SCALAR_STYLE ? "plain" :
e27a3c88
KS
474 style == YAML_SINGLE_QUOTED_SCALAR_STYLE ?
475 "single-quoted" :
476 style == YAML_DOUBLE_QUOTED_SCALAR_STYLE ?
477 "double-quoted" :
478 style == YAML_LITERAL_SCALAR_STYLE ? "literal" :
479 style == YAML_FOLDED_SCALAR_STYLE ? "folded" :
480 "unknown"), -1, YAML_PLAIN_SCALAR_STYLE);
481 if (!value) goto document_error;
482 if (!yaml_document_append_mapping_pair(&output_document,
483 properties, key, value)) goto document_error;
484 }
485
486 break;
487
488 case YAML_SEQUENCE_START_EVENT:
489
490 /* Add 'type': 'SEQUENCE-START'. */
491
492 key = yaml_document_add_scalar(&output_document, NULL,
70342132 493 (yaml_char_t *)"type", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
494 if (!key) goto document_error;
495 value = yaml_document_add_scalar(&output_document, NULL,
70342132 496 (yaml_char_t *)"SEQUENCE-START", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
497 if (!value) goto document_error;
498 if (!yaml_document_append_mapping_pair(&output_document,
499 properties, key, value)) goto document_error;
500
501 /* Add 'anchor': <anchor>. */
502
503 if (input_event.data.sequence_start.anchor)
504 {
505 key = yaml_document_add_scalar(&output_document, NULL,
70342132 506 (yaml_char_t *)"anchor", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
507 if (!key) goto document_error;
508 value = yaml_document_add_scalar(&output_document, NULL,
509 input_event.data.sequence_start.anchor, -1,
510 YAML_DOUBLE_QUOTED_SCALAR_STYLE);
511 if (!value) goto document_error;
512 if (!yaml_document_append_mapping_pair(&output_document,
513 properties, key, value)) goto document_error;
514 }
515
516 /* Add 'tag': <tag>. */
517
518 if (input_event.data.sequence_start.tag)
519 {
520 key = yaml_document_add_scalar(&output_document, NULL,
70342132 521 (yaml_char_t *)"tag", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
522 if (!key) goto document_error;
523 value = yaml_document_add_scalar(&output_document, NULL,
524 input_event.data.sequence_start.tag, -1,
525 YAML_DOUBLE_QUOTED_SCALAR_STYLE);
526 if (!value) goto document_error;
527 if (!yaml_document_append_mapping_pair(&output_document,
528 properties, key, value)) goto document_error;
529 }
530
531 /* Add 'implicit': <flag>. */
532
533 key = yaml_document_add_scalar(&output_document, NULL,
70342132 534 (yaml_char_t *)"implicit", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88 535 if (!key) goto document_error;
70342132
IC
536 value = yaml_document_add_scalar(&output_document, (yaml_char_t *)YAML_BOOL_TAG,
537 (yaml_char_t *)(input_event.data.sequence_start.implicit ?
e27a3c88
KS
538 "true" : "false"), -1, YAML_PLAIN_SCALAR_STYLE);
539 if (!value) goto document_error;
540 if (!yaml_document_append_mapping_pair(&output_document,
541 properties, key, value)) goto document_error;
542
543 /* Display the style information. */
544
545 if (input_event.data.sequence_start.style)
546 {
547 yaml_sequence_style_t style
548 = input_event.data.sequence_start.style;
549
550 /* Add 'style': <style>. */
551
552 key = yaml_document_add_scalar(&output_document, NULL,
70342132 553 (yaml_char_t *)"style", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
554 if (!key) goto document_error;
555 value = yaml_document_add_scalar(&output_document, NULL,
70342132 556 (yaml_char_t *)(style == YAML_BLOCK_SEQUENCE_STYLE ? "block" :
e27a3c88
KS
557 style == YAML_FLOW_SEQUENCE_STYLE ? "flow" :
558 "unknown"), -1, YAML_PLAIN_SCALAR_STYLE);
559 if (!value) goto document_error;
560 if (!yaml_document_append_mapping_pair(&output_document,
561 properties, key, value)) goto document_error;
562 }
563
564 break;
565
566 case YAML_SEQUENCE_END_EVENT:
567
568 /* Add 'type': 'SEQUENCE-END'. */
569
570 key = yaml_document_add_scalar(&output_document, NULL,
70342132 571 (yaml_char_t *)"type", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
572 if (!key) goto document_error;
573 value = yaml_document_add_scalar(&output_document, NULL,
70342132 574 (yaml_char_t *)"SEQUENCE-END", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
575 if (!value) goto document_error;
576 if (!yaml_document_append_mapping_pair(&output_document,
577 properties, key, value)) goto document_error;
578
579 break;
580
581 case YAML_MAPPING_START_EVENT:
582
583 /* Add 'type': 'MAPPING-START'. */
584
585 key = yaml_document_add_scalar(&output_document, NULL,
70342132 586 (yaml_char_t *)"type", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
587 if (!key) goto document_error;
588 value = yaml_document_add_scalar(&output_document, NULL,
70342132 589 (yaml_char_t *)"MAPPING-START", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
590 if (!value) goto document_error;
591 if (!yaml_document_append_mapping_pair(&output_document,
592 properties, key, value)) goto document_error;
593
594 /* Add 'anchor': <anchor>. */
595
596 if (input_event.data.mapping_start.anchor)
597 {
598 key = yaml_document_add_scalar(&output_document, NULL,
70342132 599 (yaml_char_t *)"anchor", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
600 if (!key) goto document_error;
601 value = yaml_document_add_scalar(&output_document, NULL,
602 input_event.data.mapping_start.anchor, -1,
603 YAML_DOUBLE_QUOTED_SCALAR_STYLE);
604 if (!value) goto document_error;
605 if (!yaml_document_append_mapping_pair(&output_document,
606 properties, key, value)) goto document_error;
607 }
608
609 /* Add 'tag': <tag>. */
610
611 if (input_event.data.mapping_start.tag)
612 {
613 key = yaml_document_add_scalar(&output_document, NULL,
70342132 614 (yaml_char_t *)"tag", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
615 if (!key) goto document_error;
616 value = yaml_document_add_scalar(&output_document, NULL,
617 input_event.data.mapping_start.tag, -1,
618 YAML_DOUBLE_QUOTED_SCALAR_STYLE);
619 if (!value) goto document_error;
620 if (!yaml_document_append_mapping_pair(&output_document,
621 properties, key, value)) goto document_error;
622 }
623
624 /* Add 'implicit': <flag>. */
625
626 key = yaml_document_add_scalar(&output_document, NULL,
70342132 627 (yaml_char_t *)"implicit", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88 628 if (!key) goto document_error;
70342132
IC
629 value = yaml_document_add_scalar(&output_document, (yaml_char_t *)YAML_BOOL_TAG,
630 (yaml_char_t *)(input_event.data.mapping_start.implicit ?
e27a3c88
KS
631 "true" : "false"), -1, YAML_PLAIN_SCALAR_STYLE);
632 if (!value) goto document_error;
633 if (!yaml_document_append_mapping_pair(&output_document,
634 properties, key, value)) goto document_error;
635
636 /* Display the style information. */
637
638 if (input_event.data.sequence_start.style)
639 {
640 yaml_sequence_style_t style
70342132 641 = (yaml_sequence_style_t) input_event.data.mapping_start.style;
e27a3c88
KS
642
643 /* Add 'style': <style>. */
644
645 key = yaml_document_add_scalar(&output_document, NULL,
70342132 646 (yaml_char_t *)"style", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
647 if (!key) goto document_error;
648 value = yaml_document_add_scalar(&output_document, NULL,
70342132 649 (yaml_char_t *)(style == YAML_BLOCK_MAPPING_STYLE ? "block" :
e27a3c88
KS
650 style == YAML_FLOW_MAPPING_STYLE ? "flow" :
651 "unknown"), -1, YAML_PLAIN_SCALAR_STYLE);
652 if (!value) goto document_error;
653 if (!yaml_document_append_mapping_pair(&output_document,
654 properties, key, value)) goto document_error;
655 }
656
657 break;
658
659 case YAML_MAPPING_END_EVENT:
660
661 /* Add 'type': 'MAPPING-END'. */
662
663 key = yaml_document_add_scalar(&output_document, NULL,
70342132 664 (yaml_char_t *)"type", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
665 if (!key) goto document_error;
666 value = yaml_document_add_scalar(&output_document, NULL,
70342132 667 (yaml_char_t *)"MAPPING-END", -1, YAML_PLAIN_SCALAR_STYLE);
e27a3c88
KS
668 if (!value) goto document_error;
669 if (!yaml_document_append_mapping_pair(&output_document,
670 properties, key, value)) goto document_error;
671
672 break;
673
674 default:
675 /* It couldn't really happen. */
676 break;
677 }
678
679 /* Delete the event object. */
680
681 yaml_event_delete(&input_event);
682 }
683
684 if (!yaml_emitter_dump(&emitter, &output_document))
685 goto emitter_error;
686 if (!yaml_emitter_close(&emitter))
687 goto emitter_error;
688
689 yaml_parser_delete(&parser);
690 yaml_emitter_delete(&emitter);
691
692 return 0;
693
694parser_error:
695
696 /* Display a parser error message. */
697
698 switch (parser.error)
699 {
700 case YAML_MEMORY_ERROR:
701 fprintf(stderr, "Memory error: Not enough memory for parsing\n");
702 break;
703
704 case YAML_READER_ERROR:
705 if (parser.problem_value != -1) {
44d49c90 706 fprintf(stderr, "Reader error: %s: #%X at %zd\n", parser.problem,
e27a3c88
KS
707 parser.problem_value, parser.problem_offset);
708 }
709 else {
44d49c90 710 fprintf(stderr, "Reader error: %s at %zd\n", parser.problem,
e27a3c88
KS
711 parser.problem_offset);
712 }
713 break;
714
715 case YAML_SCANNER_ERROR:
716 if (parser.context) {
44d49c90
IC
717 fprintf(stderr, "Scanner error: %s at line %lu, column %lu\n"
718 "%s at line %lu, column %lu\n", parser.context,
e27a3c88
KS
719 parser.context_mark.line+1, parser.context_mark.column+1,
720 parser.problem, parser.problem_mark.line+1,
721 parser.problem_mark.column+1);
722 }
723 else {
44d49c90 724 fprintf(stderr, "Scanner error: %s at line %lu, column %lu\n",
e27a3c88
KS
725 parser.problem, parser.problem_mark.line+1,
726 parser.problem_mark.column+1);
727 }
728 break;
729
730 case YAML_PARSER_ERROR:
731 if (parser.context) {
44d49c90
IC
732 fprintf(stderr, "Parser error: %s at line %lu, column %lu\n"
733 "%s at line %lu, column %lu\n", parser.context,
e27a3c88
KS
734 parser.context_mark.line+1, parser.context_mark.column+1,
735 parser.problem, parser.problem_mark.line+1,
736 parser.problem_mark.column+1);
737 }
738 else {
44d49c90 739 fprintf(stderr, "Parser error: %s at line %lu, column %lu\n",
e27a3c88
KS
740 parser.problem, parser.problem_mark.line+1,
741 parser.problem_mark.column+1);
742 }
743 break;
744
745 default:
746 /* Couldn't happen. */
747 fprintf(stderr, "Internal error\n");
748 break;
749 }
750
751 yaml_event_delete(&input_event);
752 yaml_document_delete(&output_document);
753 yaml_parser_delete(&parser);
754 yaml_emitter_delete(&emitter);
755
756 return 1;
757
758emitter_error:
759
760 /* Display an emitter error message. */
761
762 switch (emitter.error)
763 {
764 case YAML_MEMORY_ERROR:
765 fprintf(stderr, "Memory error: Not enough memory for emitting\n");
766 break;
767
768 case YAML_WRITER_ERROR:
769 fprintf(stderr, "Writer error: %s\n", emitter.problem);
770 break;
771
772 case YAML_EMITTER_ERROR:
773 fprintf(stderr, "Emitter error: %s\n", emitter.problem);
774 break;
775
776 default:
777 /* Couldn't happen. */
778 fprintf(stderr, "Internal error\n");
779 break;
780 }
781
782 yaml_event_delete(&input_event);
783 yaml_document_delete(&output_document);
784 yaml_parser_delete(&parser);
785 yaml_emitter_delete(&emitter);
786
787 return 1;
788
789document_error:
790
791 fprintf(stderr, "Memory error: Not enough memory for creating a document\n");
792
793 yaml_event_delete(&input_event);
794 yaml_document_delete(&output_document);
795 yaml_parser_delete(&parser);
796 yaml_emitter_delete(&emitter);
797
798 return 1;
799}
800
This page took 0.158778 seconds and 5 git commands to generate.