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