rcee_packaged_source 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,141 @@
1
+
2
+ #include "yaml_private.h"
3
+
4
+ /*
5
+ * Declarations.
6
+ */
7
+
8
+ static int
9
+ yaml_emitter_set_writer_error(yaml_emitter_t *emitter, const char *problem);
10
+
11
+ YAML_DECLARE(int)
12
+ yaml_emitter_flush(yaml_emitter_t *emitter);
13
+
14
+ /*
15
+ * Set the writer error and return 0.
16
+ */
17
+
18
+ static int
19
+ yaml_emitter_set_writer_error(yaml_emitter_t *emitter, const char *problem)
20
+ {
21
+ emitter->error = YAML_WRITER_ERROR;
22
+ emitter->problem = problem;
23
+
24
+ return 0;
25
+ }
26
+
27
+ /*
28
+ * Flush the output buffer.
29
+ */
30
+
31
+ YAML_DECLARE(int)
32
+ yaml_emitter_flush(yaml_emitter_t *emitter)
33
+ {
34
+ int low, high;
35
+
36
+ assert(emitter); /* Non-NULL emitter object is expected. */
37
+ assert(emitter->write_handler); /* Write handler must be set. */
38
+ assert(emitter->encoding); /* Output encoding must be set. */
39
+
40
+ emitter->buffer.last = emitter->buffer.pointer;
41
+ emitter->buffer.pointer = emitter->buffer.start;
42
+
43
+ /* Check if the buffer is empty. */
44
+
45
+ if (emitter->buffer.start == emitter->buffer.last) {
46
+ return 1;
47
+ }
48
+
49
+ /* If the output encoding is UTF-8, we don't need to recode the buffer. */
50
+
51
+ if (emitter->encoding == YAML_UTF8_ENCODING)
52
+ {
53
+ if (emitter->write_handler(emitter->write_handler_data,
54
+ emitter->buffer.start,
55
+ emitter->buffer.last - emitter->buffer.start)) {
56
+ emitter->buffer.last = emitter->buffer.start;
57
+ emitter->buffer.pointer = emitter->buffer.start;
58
+ return 1;
59
+ }
60
+ else {
61
+ return yaml_emitter_set_writer_error(emitter, "write error");
62
+ }
63
+ }
64
+
65
+ /* Recode the buffer into the raw buffer. */
66
+
67
+ low = (emitter->encoding == YAML_UTF16LE_ENCODING ? 0 : 1);
68
+ high = (emitter->encoding == YAML_UTF16LE_ENCODING ? 1 : 0);
69
+
70
+ while (emitter->buffer.pointer != emitter->buffer.last)
71
+ {
72
+ unsigned char octet;
73
+ unsigned int width;
74
+ unsigned int value;
75
+ size_t k;
76
+
77
+ /*
78
+ * See the "reader.c" code for more details on UTF-8 encoding. Note
79
+ * that we assume that the buffer contains a valid UTF-8 sequence.
80
+ */
81
+
82
+ /* Read the next UTF-8 character. */
83
+
84
+ octet = emitter->buffer.pointer[0];
85
+
86
+ width = (octet & 0x80) == 0x00 ? 1 :
87
+ (octet & 0xE0) == 0xC0 ? 2 :
88
+ (octet & 0xF0) == 0xE0 ? 3 :
89
+ (octet & 0xF8) == 0xF0 ? 4 : 0;
90
+
91
+ value = (octet & 0x80) == 0x00 ? octet & 0x7F :
92
+ (octet & 0xE0) == 0xC0 ? octet & 0x1F :
93
+ (octet & 0xF0) == 0xE0 ? octet & 0x0F :
94
+ (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0;
95
+
96
+ for (k = 1; k < width; k ++) {
97
+ octet = emitter->buffer.pointer[k];
98
+ value = (value << 6) + (octet & 0x3F);
99
+ }
100
+
101
+ emitter->buffer.pointer += width;
102
+
103
+ /* Write the character. */
104
+
105
+ if (value < 0x10000)
106
+ {
107
+ emitter->raw_buffer.last[high] = value >> 8;
108
+ emitter->raw_buffer.last[low] = value & 0xFF;
109
+
110
+ emitter->raw_buffer.last += 2;
111
+ }
112
+ else
113
+ {
114
+ /* Write the character using a surrogate pair (check "reader.c"). */
115
+
116
+ value -= 0x10000;
117
+ emitter->raw_buffer.last[high] = 0xD8 + (value >> 18);
118
+ emitter->raw_buffer.last[low] = (value >> 10) & 0xFF;
119
+ emitter->raw_buffer.last[high+2] = 0xDC + ((value >> 8) & 0xFF);
120
+ emitter->raw_buffer.last[low+2] = value & 0xFF;
121
+
122
+ emitter->raw_buffer.last += 4;
123
+ }
124
+ }
125
+
126
+ /* Write the raw buffer. */
127
+
128
+ if (emitter->write_handler(emitter->write_handler_data,
129
+ emitter->raw_buffer.start,
130
+ emitter->raw_buffer.last - emitter->raw_buffer.start)) {
131
+ emitter->buffer.last = emitter->buffer.start;
132
+ emitter->buffer.pointer = emitter->buffer.start;
133
+ emitter->raw_buffer.last = emitter->raw_buffer.start;
134
+ emitter->raw_buffer.pointer = emitter->raw_buffer.start;
135
+ return 1;
136
+ }
137
+ else {
138
+ return yaml_emitter_set_writer_error(emitter, "write error");
139
+ }
140
+ }
141
+
@@ -0,0 +1,1985 @@
1
+ /**
2
+ * @file yaml.h
3
+ * @brief Public interface for libyaml.
4
+ *
5
+ * Include the header file with the code:
6
+ * @code
7
+ * #include <yaml.h>
8
+ * @endcode
9
+ */
10
+
11
+ #ifndef YAML_H
12
+ #define YAML_H
13
+
14
+ #ifdef __cplusplus
15
+ extern "C" {
16
+ #endif
17
+
18
+ #include <stdlib.h>
19
+ #include <stdio.h>
20
+ #include <string.h>
21
+
22
+ /**
23
+ * @defgroup export Export Definitions
24
+ * @{
25
+ */
26
+
27
+ /** The public API declaration. */
28
+
29
+ #if defined(__MINGW32__)
30
+ # define YAML_DECLARE(type) type
31
+ #elif defined(_WIN32)
32
+ # if defined(YAML_DECLARE_STATIC)
33
+ # define YAML_DECLARE(type) type
34
+ # elif defined(YAML_DECLARE_EXPORT)
35
+ # define YAML_DECLARE(type) __declspec(dllexport) type
36
+ # else
37
+ # define YAML_DECLARE(type) __declspec(dllimport) type
38
+ # endif
39
+ #else
40
+ # define YAML_DECLARE(type) type
41
+ #endif
42
+
43
+ /** @} */
44
+
45
+ /**
46
+ * @defgroup version Version Information
47
+ * @{
48
+ */
49
+
50
+ /**
51
+ * Get the library version as a string.
52
+ *
53
+ * @returns The function returns the pointer to a static string of the form
54
+ * @c "X.Y.Z", where @c X is the major version number, @c Y is a minor version
55
+ * number, and @c Z is the patch version number.
56
+ */
57
+
58
+ YAML_DECLARE(const char *)
59
+ yaml_get_version_string(void);
60
+
61
+ /**
62
+ * Get the library version numbers.
63
+ *
64
+ * @param[out] major Major version number.
65
+ * @param[out] minor Minor version number.
66
+ * @param[out] patch Patch version number.
67
+ */
68
+
69
+ YAML_DECLARE(void)
70
+ yaml_get_version(int *major, int *minor, int *patch);
71
+
72
+ /** @} */
73
+
74
+ /**
75
+ * @defgroup basic Basic Types
76
+ * @{
77
+ */
78
+
79
+ /** The character type (UTF-8 octet). */
80
+ typedef unsigned char yaml_char_t;
81
+
82
+ /** The version directive data. */
83
+ typedef struct yaml_version_directive_s {
84
+ /** The major version number. */
85
+ int major;
86
+ /** The minor version number. */
87
+ int minor;
88
+ } yaml_version_directive_t;
89
+
90
+ /** The tag directive data. */
91
+ typedef struct yaml_tag_directive_s {
92
+ /** The tag handle. */
93
+ yaml_char_t *handle;
94
+ /** The tag prefix. */
95
+ yaml_char_t *prefix;
96
+ } yaml_tag_directive_t;
97
+
98
+ /** The stream encoding. */
99
+ typedef enum yaml_encoding_e {
100
+ /** Let the parser choose the encoding. */
101
+ YAML_ANY_ENCODING,
102
+ /** The default UTF-8 encoding. */
103
+ YAML_UTF8_ENCODING,
104
+ /** The UTF-16-LE encoding with BOM. */
105
+ YAML_UTF16LE_ENCODING,
106
+ /** The UTF-16-BE encoding with BOM. */
107
+ YAML_UTF16BE_ENCODING
108
+ } yaml_encoding_t;
109
+
110
+ /** Line break types. */
111
+
112
+ typedef enum yaml_break_e {
113
+ /** Let the parser choose the break type. */
114
+ YAML_ANY_BREAK,
115
+ /** Use CR for line breaks (Mac style). */
116
+ YAML_CR_BREAK,
117
+ /** Use LN for line breaks (Unix style). */
118
+ YAML_LN_BREAK,
119
+ /** Use CR LN for line breaks (DOS style). */
120
+ YAML_CRLN_BREAK
121
+ } yaml_break_t;
122
+
123
+ /** Many bad things could happen with the parser and emitter. */
124
+ typedef enum yaml_error_type_e {
125
+ /** No error is produced. */
126
+ YAML_NO_ERROR,
127
+
128
+ /** Cannot allocate or reallocate a block of memory. */
129
+ YAML_MEMORY_ERROR,
130
+
131
+ /** Cannot read or decode the input stream. */
132
+ YAML_READER_ERROR,
133
+ /** Cannot scan the input stream. */
134
+ YAML_SCANNER_ERROR,
135
+ /** Cannot parse the input stream. */
136
+ YAML_PARSER_ERROR,
137
+ /** Cannot compose a YAML document. */
138
+ YAML_COMPOSER_ERROR,
139
+
140
+ /** Cannot write to the output stream. */
141
+ YAML_WRITER_ERROR,
142
+ /** Cannot emit a YAML stream. */
143
+ YAML_EMITTER_ERROR
144
+ } yaml_error_type_t;
145
+
146
+ /** The pointer position. */
147
+ typedef struct yaml_mark_s {
148
+ /** The position index. */
149
+ size_t index;
150
+
151
+ /** The position line. */
152
+ size_t line;
153
+
154
+ /** The position column. */
155
+ size_t column;
156
+ } yaml_mark_t;
157
+
158
+ /** @} */
159
+
160
+ /**
161
+ * @defgroup styles Node Styles
162
+ * @{
163
+ */
164
+
165
+ /** Scalar styles. */
166
+ typedef enum yaml_scalar_style_e {
167
+ /** Let the emitter choose the style. */
168
+ YAML_ANY_SCALAR_STYLE,
169
+
170
+ /** The plain scalar style. */
171
+ YAML_PLAIN_SCALAR_STYLE,
172
+
173
+ /** The single-quoted scalar style. */
174
+ YAML_SINGLE_QUOTED_SCALAR_STYLE,
175
+ /** The double-quoted scalar style. */
176
+ YAML_DOUBLE_QUOTED_SCALAR_STYLE,
177
+
178
+ /** The literal scalar style. */
179
+ YAML_LITERAL_SCALAR_STYLE,
180
+ /** The folded scalar style. */
181
+ YAML_FOLDED_SCALAR_STYLE
182
+ } yaml_scalar_style_t;
183
+
184
+ /** Sequence styles. */
185
+ typedef enum yaml_sequence_style_e {
186
+ /** Let the emitter choose the style. */
187
+ YAML_ANY_SEQUENCE_STYLE,
188
+
189
+ /** The block sequence style. */
190
+ YAML_BLOCK_SEQUENCE_STYLE,
191
+ /** The flow sequence style. */
192
+ YAML_FLOW_SEQUENCE_STYLE
193
+ } yaml_sequence_style_t;
194
+
195
+ /** Mapping styles. */
196
+ typedef enum yaml_mapping_style_e {
197
+ /** Let the emitter choose the style. */
198
+ YAML_ANY_MAPPING_STYLE,
199
+
200
+ /** The block mapping style. */
201
+ YAML_BLOCK_MAPPING_STYLE,
202
+ /** The flow mapping style. */
203
+ YAML_FLOW_MAPPING_STYLE
204
+ /* YAML_FLOW_SET_MAPPING_STYLE */
205
+ } yaml_mapping_style_t;
206
+
207
+ /** @} */
208
+
209
+ /**
210
+ * @defgroup tokens Tokens
211
+ * @{
212
+ */
213
+
214
+ /** Token types. */
215
+ typedef enum yaml_token_type_e {
216
+ /** An empty token. */
217
+ YAML_NO_TOKEN,
218
+
219
+ /** A STREAM-START token. */
220
+ YAML_STREAM_START_TOKEN,
221
+ /** A STREAM-END token. */
222
+ YAML_STREAM_END_TOKEN,
223
+
224
+ /** A VERSION-DIRECTIVE token. */
225
+ YAML_VERSION_DIRECTIVE_TOKEN,
226
+ /** A TAG-DIRECTIVE token. */
227
+ YAML_TAG_DIRECTIVE_TOKEN,
228
+ /** A DOCUMENT-START token. */
229
+ YAML_DOCUMENT_START_TOKEN,
230
+ /** A DOCUMENT-END token. */
231
+ YAML_DOCUMENT_END_TOKEN,
232
+
233
+ /** A BLOCK-SEQUENCE-START token. */
234
+ YAML_BLOCK_SEQUENCE_START_TOKEN,
235
+ /** A BLOCK-MAPPING-START token. */
236
+ YAML_BLOCK_MAPPING_START_TOKEN,
237
+ /** A BLOCK-END token. */
238
+ YAML_BLOCK_END_TOKEN,
239
+
240
+ /** A FLOW-SEQUENCE-START token. */
241
+ YAML_FLOW_SEQUENCE_START_TOKEN,
242
+ /** A FLOW-SEQUENCE-END token. */
243
+ YAML_FLOW_SEQUENCE_END_TOKEN,
244
+ /** A FLOW-MAPPING-START token. */
245
+ YAML_FLOW_MAPPING_START_TOKEN,
246
+ /** A FLOW-MAPPING-END token. */
247
+ YAML_FLOW_MAPPING_END_TOKEN,
248
+
249
+ /** A BLOCK-ENTRY token. */
250
+ YAML_BLOCK_ENTRY_TOKEN,
251
+ /** A FLOW-ENTRY token. */
252
+ YAML_FLOW_ENTRY_TOKEN,
253
+ /** A KEY token. */
254
+ YAML_KEY_TOKEN,
255
+ /** A VALUE token. */
256
+ YAML_VALUE_TOKEN,
257
+
258
+ /** An ALIAS token. */
259
+ YAML_ALIAS_TOKEN,
260
+ /** An ANCHOR token. */
261
+ YAML_ANCHOR_TOKEN,
262
+ /** A TAG token. */
263
+ YAML_TAG_TOKEN,
264
+ /** A SCALAR token. */
265
+ YAML_SCALAR_TOKEN
266
+ } yaml_token_type_t;
267
+
268
+ /** The token structure. */
269
+ typedef struct yaml_token_s {
270
+
271
+ /** The token type. */
272
+ yaml_token_type_t type;
273
+
274
+ /** The token data. */
275
+ union {
276
+
277
+ /** The stream start (for @c YAML_STREAM_START_TOKEN). */
278
+ struct {
279
+ /** The stream encoding. */
280
+ yaml_encoding_t encoding;
281
+ } stream_start;
282
+
283
+ /** The alias (for @c YAML_ALIAS_TOKEN). */
284
+ struct {
285
+ /** The alias value. */
286
+ yaml_char_t *value;
287
+ } alias;
288
+
289
+ /** The anchor (for @c YAML_ANCHOR_TOKEN). */
290
+ struct {
291
+ /** The anchor value. */
292
+ yaml_char_t *value;
293
+ } anchor;
294
+
295
+ /** The tag (for @c YAML_TAG_TOKEN). */
296
+ struct {
297
+ /** The tag handle. */
298
+ yaml_char_t *handle;
299
+ /** The tag suffix. */
300
+ yaml_char_t *suffix;
301
+ } tag;
302
+
303
+ /** The scalar value (for @c YAML_SCALAR_TOKEN). */
304
+ struct {
305
+ /** The scalar value. */
306
+ yaml_char_t *value;
307
+ /** The length of the scalar value. */
308
+ size_t length;
309
+ /** The scalar style. */
310
+ yaml_scalar_style_t style;
311
+ } scalar;
312
+
313
+ /** The version directive (for @c YAML_VERSION_DIRECTIVE_TOKEN). */
314
+ struct {
315
+ /** The major version number. */
316
+ int major;
317
+ /** The minor version number. */
318
+ int minor;
319
+ } version_directive;
320
+
321
+ /** The tag directive (for @c YAML_TAG_DIRECTIVE_TOKEN). */
322
+ struct {
323
+ /** The tag handle. */
324
+ yaml_char_t *handle;
325
+ /** The tag prefix. */
326
+ yaml_char_t *prefix;
327
+ } tag_directive;
328
+
329
+ } data;
330
+
331
+ /** The beginning of the token. */
332
+ yaml_mark_t start_mark;
333
+ /** The end of the token. */
334
+ yaml_mark_t end_mark;
335
+
336
+ } yaml_token_t;
337
+
338
+ /**
339
+ * Free any memory allocated for a token object.
340
+ *
341
+ * @param[in,out] token A token object.
342
+ */
343
+
344
+ YAML_DECLARE(void)
345
+ yaml_token_delete(yaml_token_t *token);
346
+
347
+ /** @} */
348
+
349
+ /**
350
+ * @defgroup events Events
351
+ * @{
352
+ */
353
+
354
+ /** Event types. */
355
+ typedef enum yaml_event_type_e {
356
+ /** An empty event. */
357
+ YAML_NO_EVENT,
358
+
359
+ /** A STREAM-START event. */
360
+ YAML_STREAM_START_EVENT,
361
+ /** A STREAM-END event. */
362
+ YAML_STREAM_END_EVENT,
363
+
364
+ /** A DOCUMENT-START event. */
365
+ YAML_DOCUMENT_START_EVENT,
366
+ /** A DOCUMENT-END event. */
367
+ YAML_DOCUMENT_END_EVENT,
368
+
369
+ /** An ALIAS event. */
370
+ YAML_ALIAS_EVENT,
371
+ /** A SCALAR event. */
372
+ YAML_SCALAR_EVENT,
373
+
374
+ /** A SEQUENCE-START event. */
375
+ YAML_SEQUENCE_START_EVENT,
376
+ /** A SEQUENCE-END event. */
377
+ YAML_SEQUENCE_END_EVENT,
378
+
379
+ /** A MAPPING-START event. */
380
+ YAML_MAPPING_START_EVENT,
381
+ /** A MAPPING-END event. */
382
+ YAML_MAPPING_END_EVENT
383
+ } yaml_event_type_t;
384
+
385
+ /** The event structure. */
386
+ typedef struct yaml_event_s {
387
+
388
+ /** The event type. */
389
+ yaml_event_type_t type;
390
+
391
+ /** The event data. */
392
+ union {
393
+
394
+ /** The stream parameters (for @c YAML_STREAM_START_EVENT). */
395
+ struct {
396
+ /** The document encoding. */
397
+ yaml_encoding_t encoding;
398
+ } stream_start;
399
+
400
+ /** The document parameters (for @c YAML_DOCUMENT_START_EVENT). */
401
+ struct {
402
+ /** The version directive. */
403
+ yaml_version_directive_t *version_directive;
404
+
405
+ /** The list of tag directives. */
406
+ struct {
407
+ /** The beginning of the tag directives list. */
408
+ yaml_tag_directive_t *start;
409
+ /** The end of the tag directives list. */
410
+ yaml_tag_directive_t *end;
411
+ } tag_directives;
412
+
413
+ /** Is the document indicator implicit? */
414
+ int implicit;
415
+ } document_start;
416
+
417
+ /** The document end parameters (for @c YAML_DOCUMENT_END_EVENT). */
418
+ struct {
419
+ /** Is the document end indicator implicit? */
420
+ int implicit;
421
+ } document_end;
422
+
423
+ /** The alias parameters (for @c YAML_ALIAS_EVENT). */
424
+ struct {
425
+ /** The anchor. */
426
+ yaml_char_t *anchor;
427
+ } alias;
428
+
429
+ /** The scalar parameters (for @c YAML_SCALAR_EVENT). */
430
+ struct {
431
+ /** The anchor. */
432
+ yaml_char_t *anchor;
433
+ /** The tag. */
434
+ yaml_char_t *tag;
435
+ /** The scalar value. */
436
+ yaml_char_t *value;
437
+ /** The length of the scalar value. */
438
+ size_t length;
439
+ /** Is the tag optional for the plain style? */
440
+ int plain_implicit;
441
+ /** Is the tag optional for any non-plain style? */
442
+ int quoted_implicit;
443
+ /** The scalar style. */
444
+ yaml_scalar_style_t style;
445
+ } scalar;
446
+
447
+ /** The sequence parameters (for @c YAML_SEQUENCE_START_EVENT). */
448
+ struct {
449
+ /** The anchor. */
450
+ yaml_char_t *anchor;
451
+ /** The tag. */
452
+ yaml_char_t *tag;
453
+ /** Is the tag optional? */
454
+ int implicit;
455
+ /** The sequence style. */
456
+ yaml_sequence_style_t style;
457
+ } sequence_start;
458
+
459
+ /** The mapping parameters (for @c YAML_MAPPING_START_EVENT). */
460
+ struct {
461
+ /** The anchor. */
462
+ yaml_char_t *anchor;
463
+ /** The tag. */
464
+ yaml_char_t *tag;
465
+ /** Is the tag optional? */
466
+ int implicit;
467
+ /** The mapping style. */
468
+ yaml_mapping_style_t style;
469
+ } mapping_start;
470
+
471
+ } data;
472
+
473
+ /** The beginning of the event. */
474
+ yaml_mark_t start_mark;
475
+ /** The end of the event. */
476
+ yaml_mark_t end_mark;
477
+
478
+ } yaml_event_t;
479
+
480
+ /**
481
+ * Create the STREAM-START event.
482
+ *
483
+ * @param[out] event An empty event object.
484
+ * @param[in] encoding The stream encoding.
485
+ *
486
+ * @returns @c 1 if the function succeeded, @c 0 on error.
487
+ */
488
+
489
+ YAML_DECLARE(int)
490
+ yaml_stream_start_event_initialize(yaml_event_t *event,
491
+ yaml_encoding_t encoding);
492
+
493
+ /**
494
+ * Create the STREAM-END event.
495
+ *
496
+ * @param[out] event An empty event object.
497
+ *
498
+ * @returns @c 1 if the function succeeded, @c 0 on error.
499
+ */
500
+
501
+ YAML_DECLARE(int)
502
+ yaml_stream_end_event_initialize(yaml_event_t *event);
503
+
504
+ /**
505
+ * Create the DOCUMENT-START event.
506
+ *
507
+ * The @a implicit argument is considered as a stylistic parameter and may be
508
+ * ignored by the emitter.
509
+ *
510
+ * @param[out] event An empty event object.
511
+ * @param[in] version_directive The %YAML directive value or
512
+ * @c NULL.
513
+ * @param[in] tag_directives_start The beginning of the %TAG
514
+ * directives list.
515
+ * @param[in] tag_directives_end The end of the %TAG directives
516
+ * list.
517
+ * @param[in] implicit If the document start indicator is
518
+ * implicit.
519
+ *
520
+ * @returns @c 1 if the function succeeded, @c 0 on error.
521
+ */
522
+
523
+ YAML_DECLARE(int)
524
+ yaml_document_start_event_initialize(yaml_event_t *event,
525
+ yaml_version_directive_t *version_directive,
526
+ yaml_tag_directive_t *tag_directives_start,
527
+ yaml_tag_directive_t *tag_directives_end,
528
+ int implicit);
529
+
530
+ /**
531
+ * Create the DOCUMENT-END event.
532
+ *
533
+ * The @a implicit argument is considered as a stylistic parameter and may be
534
+ * ignored by the emitter.
535
+ *
536
+ * @param[out] event An empty event object.
537
+ * @param[in] implicit If the document end indicator is implicit.
538
+ *
539
+ * @returns @c 1 if the function succeeded, @c 0 on error.
540
+ */
541
+
542
+ YAML_DECLARE(int)
543
+ yaml_document_end_event_initialize(yaml_event_t *event, int implicit);
544
+
545
+ /**
546
+ * Create an ALIAS event.
547
+ *
548
+ * @param[out] event An empty event object.
549
+ * @param[in] anchor The anchor value.
550
+ *
551
+ * @returns @c 1 if the function succeeded, @c 0 on error.
552
+ */
553
+
554
+ YAML_DECLARE(int)
555
+ yaml_alias_event_initialize(yaml_event_t *event, const yaml_char_t *anchor);
556
+
557
+ /**
558
+ * Create a SCALAR event.
559
+ *
560
+ * The @a style argument may be ignored by the emitter.
561
+ *
562
+ * Either the @a tag attribute or one of the @a plain_implicit and
563
+ * @a quoted_implicit flags must be set.
564
+ *
565
+ * @param[out] event An empty event object.
566
+ * @param[in] anchor The scalar anchor or @c NULL.
567
+ * @param[in] tag The scalar tag or @c NULL.
568
+ * @param[in] value The scalar value.
569
+ * @param[in] length The length of the scalar value.
570
+ * @param[in] plain_implicit If the tag may be omitted for the plain
571
+ * style.
572
+ * @param[in] quoted_implicit If the tag may be omitted for any
573
+ * non-plain style.
574
+ * @param[in] style The scalar style.
575
+ *
576
+ * @returns @c 1 if the function succeeded, @c 0 on error.
577
+ */
578
+
579
+ YAML_DECLARE(int)
580
+ yaml_scalar_event_initialize(yaml_event_t *event,
581
+ const yaml_char_t *anchor, const yaml_char_t *tag,
582
+ const yaml_char_t *value, int length,
583
+ int plain_implicit, int quoted_implicit,
584
+ yaml_scalar_style_t style);
585
+
586
+ /**
587
+ * Create a SEQUENCE-START event.
588
+ *
589
+ * The @a style argument may be ignored by the emitter.
590
+ *
591
+ * Either the @a tag attribute or the @a implicit flag must be set.
592
+ *
593
+ * @param[out] event An empty event object.
594
+ * @param[in] anchor The sequence anchor or @c NULL.
595
+ * @param[in] tag The sequence tag or @c NULL.
596
+ * @param[in] implicit If the tag may be omitted.
597
+ * @param[in] style The sequence style.
598
+ *
599
+ * @returns @c 1 if the function succeeded, @c 0 on error.
600
+ */
601
+
602
+ YAML_DECLARE(int)
603
+ yaml_sequence_start_event_initialize(yaml_event_t *event,
604
+ const yaml_char_t *anchor, const yaml_char_t *tag, int implicit,
605
+ yaml_sequence_style_t style);
606
+
607
+ /**
608
+ * Create a SEQUENCE-END event.
609
+ *
610
+ * @param[out] event An empty event object.
611
+ *
612
+ * @returns @c 1 if the function succeeded, @c 0 on error.
613
+ */
614
+
615
+ YAML_DECLARE(int)
616
+ yaml_sequence_end_event_initialize(yaml_event_t *event);
617
+
618
+ /**
619
+ * Create a MAPPING-START event.
620
+ *
621
+ * The @a style argument may be ignored by the emitter.
622
+ *
623
+ * Either the @a tag attribute or the @a implicit flag must be set.
624
+ *
625
+ * @param[out] event An empty event object.
626
+ * @param[in] anchor The mapping anchor or @c NULL.
627
+ * @param[in] tag The mapping tag or @c NULL.
628
+ * @param[in] implicit If the tag may be omitted.
629
+ * @param[in] style The mapping style.
630
+ *
631
+ * @returns @c 1 if the function succeeded, @c 0 on error.
632
+ */
633
+
634
+ YAML_DECLARE(int)
635
+ yaml_mapping_start_event_initialize(yaml_event_t *event,
636
+ const yaml_char_t *anchor, const yaml_char_t *tag, int implicit,
637
+ yaml_mapping_style_t style);
638
+
639
+ /**
640
+ * Create a MAPPING-END event.
641
+ *
642
+ * @param[out] event An empty event object.
643
+ *
644
+ * @returns @c 1 if the function succeeded, @c 0 on error.
645
+ */
646
+
647
+ YAML_DECLARE(int)
648
+ yaml_mapping_end_event_initialize(yaml_event_t *event);
649
+
650
+ /**
651
+ * Free any memory allocated for an event object.
652
+ *
653
+ * @param[in,out] event An event object.
654
+ */
655
+
656
+ YAML_DECLARE(void)
657
+ yaml_event_delete(yaml_event_t *event);
658
+
659
+ /** @} */
660
+
661
+ /**
662
+ * @defgroup nodes Nodes
663
+ * @{
664
+ */
665
+
666
+ /** The tag @c !!null with the only possible value: @c null. */
667
+ #define YAML_NULL_TAG "tag:yaml.org,2002:null"
668
+ /** The tag @c !!bool with the values: @c true and @c false. */
669
+ #define YAML_BOOL_TAG "tag:yaml.org,2002:bool"
670
+ /** The tag @c !!str for string values. */
671
+ #define YAML_STR_TAG "tag:yaml.org,2002:str"
672
+ /** The tag @c !!int for integer values. */
673
+ #define YAML_INT_TAG "tag:yaml.org,2002:int"
674
+ /** The tag @c !!float for float values. */
675
+ #define YAML_FLOAT_TAG "tag:yaml.org,2002:float"
676
+ /** The tag @c !!timestamp for date and time values. */
677
+ #define YAML_TIMESTAMP_TAG "tag:yaml.org,2002:timestamp"
678
+
679
+ /** The tag @c !!seq is used to denote sequences. */
680
+ #define YAML_SEQ_TAG "tag:yaml.org,2002:seq"
681
+ /** The tag @c !!map is used to denote mapping. */
682
+ #define YAML_MAP_TAG "tag:yaml.org,2002:map"
683
+
684
+ /** The default scalar tag is @c !!str. */
685
+ #define YAML_DEFAULT_SCALAR_TAG YAML_STR_TAG
686
+ /** The default sequence tag is @c !!seq. */
687
+ #define YAML_DEFAULT_SEQUENCE_TAG YAML_SEQ_TAG
688
+ /** The default mapping tag is @c !!map. */
689
+ #define YAML_DEFAULT_MAPPING_TAG YAML_MAP_TAG
690
+
691
+ /** Node types. */
692
+ typedef enum yaml_node_type_e {
693
+ /** An empty node. */
694
+ YAML_NO_NODE,
695
+
696
+ /** A scalar node. */
697
+ YAML_SCALAR_NODE,
698
+ /** A sequence node. */
699
+ YAML_SEQUENCE_NODE,
700
+ /** A mapping node. */
701
+ YAML_MAPPING_NODE
702
+ } yaml_node_type_t;
703
+
704
+ /** The forward definition of a document node structure. */
705
+ typedef struct yaml_node_s yaml_node_t;
706
+
707
+ /** An element of a sequence node. */
708
+ typedef int yaml_node_item_t;
709
+
710
+ /** An element of a mapping node. */
711
+ typedef struct yaml_node_pair_s {
712
+ /** The key of the element. */
713
+ int key;
714
+ /** The value of the element. */
715
+ int value;
716
+ } yaml_node_pair_t;
717
+
718
+ /** The node structure. */
719
+ struct yaml_node_s {
720
+
721
+ /** The node type. */
722
+ yaml_node_type_t type;
723
+
724
+ /** The node tag. */
725
+ yaml_char_t *tag;
726
+
727
+ /** The node data. */
728
+ union {
729
+
730
+ /** The scalar parameters (for @c YAML_SCALAR_NODE). */
731
+ struct {
732
+ /** The scalar value. */
733
+ yaml_char_t *value;
734
+ /** The length of the scalar value. */
735
+ size_t length;
736
+ /** The scalar style. */
737
+ yaml_scalar_style_t style;
738
+ } scalar;
739
+
740
+ /** The sequence parameters (for @c YAML_SEQUENCE_NODE). */
741
+ struct {
742
+ /** The stack of sequence items. */
743
+ struct {
744
+ /** The beginning of the stack. */
745
+ yaml_node_item_t *start;
746
+ /** The end of the stack. */
747
+ yaml_node_item_t *end;
748
+ /** The top of the stack. */
749
+ yaml_node_item_t *top;
750
+ } items;
751
+ /** The sequence style. */
752
+ yaml_sequence_style_t style;
753
+ } sequence;
754
+
755
+ /** The mapping parameters (for @c YAML_MAPPING_NODE). */
756
+ struct {
757
+ /** The stack of mapping pairs (key, value). */
758
+ struct {
759
+ /** The beginning of the stack. */
760
+ yaml_node_pair_t *start;
761
+ /** The end of the stack. */
762
+ yaml_node_pair_t *end;
763
+ /** The top of the stack. */
764
+ yaml_node_pair_t *top;
765
+ } pairs;
766
+ /** The mapping style. */
767
+ yaml_mapping_style_t style;
768
+ } mapping;
769
+
770
+ } data;
771
+
772
+ /** The beginning of the node. */
773
+ yaml_mark_t start_mark;
774
+ /** The end of the node. */
775
+ yaml_mark_t end_mark;
776
+
777
+ };
778
+
779
+ /** The document structure. */
780
+ typedef struct yaml_document_s {
781
+
782
+ /** The document nodes. */
783
+ struct {
784
+ /** The beginning of the stack. */
785
+ yaml_node_t *start;
786
+ /** The end of the stack. */
787
+ yaml_node_t *end;
788
+ /** The top of the stack. */
789
+ yaml_node_t *top;
790
+ } nodes;
791
+
792
+ /** The version directive. */
793
+ yaml_version_directive_t *version_directive;
794
+
795
+ /** The list of tag directives. */
796
+ struct {
797
+ /** The beginning of the tag directives list. */
798
+ yaml_tag_directive_t *start;
799
+ /** The end of the tag directives list. */
800
+ yaml_tag_directive_t *end;
801
+ } tag_directives;
802
+
803
+ /** Is the document start indicator implicit? */
804
+ int start_implicit;
805
+ /** Is the document end indicator implicit? */
806
+ int end_implicit;
807
+
808
+ /** The beginning of the document. */
809
+ yaml_mark_t start_mark;
810
+ /** The end of the document. */
811
+ yaml_mark_t end_mark;
812
+
813
+ } yaml_document_t;
814
+
815
+ /**
816
+ * Create a YAML document.
817
+ *
818
+ * @param[out] document An empty document object.
819
+ * @param[in] version_directive The %YAML directive value or
820
+ * @c NULL.
821
+ * @param[in] tag_directives_start The beginning of the %TAG
822
+ * directives list.
823
+ * @param[in] tag_directives_end The end of the %TAG directives
824
+ * list.
825
+ * @param[in] start_implicit If the document start indicator is
826
+ * implicit.
827
+ * @param[in] end_implicit If the document end indicator is
828
+ * implicit.
829
+ *
830
+ * @returns @c 1 if the function succeeded, @c 0 on error.
831
+ */
832
+
833
+ YAML_DECLARE(int)
834
+ yaml_document_initialize(yaml_document_t *document,
835
+ yaml_version_directive_t *version_directive,
836
+ yaml_tag_directive_t *tag_directives_start,
837
+ yaml_tag_directive_t *tag_directives_end,
838
+ int start_implicit, int end_implicit);
839
+
840
+ /**
841
+ * Delete a YAML document and all its nodes.
842
+ *
843
+ * @param[in,out] document A document object.
844
+ */
845
+
846
+ YAML_DECLARE(void)
847
+ yaml_document_delete(yaml_document_t *document);
848
+
849
+ /**
850
+ * Get a node of a YAML document.
851
+ *
852
+ * The pointer returned by this function is valid until any of the functions
853
+ * modifying the documents are called.
854
+ *
855
+ * @param[in] document A document object.
856
+ * @param[in] index The node id.
857
+ *
858
+ * @returns the node objct or @c NULL if @c node_id is out of range.
859
+ */
860
+
861
+ YAML_DECLARE(yaml_node_t *)
862
+ yaml_document_get_node(yaml_document_t *document, int index);
863
+
864
+ /**
865
+ * Get the root of a YAML document node.
866
+ *
867
+ * The root object is the first object added to the document.
868
+ *
869
+ * The pointer returned by this function is valid until any of the functions
870
+ * modifying the documents are called.
871
+ *
872
+ * An empty document produced by the parser signifies the end of a YAML
873
+ * stream.
874
+ *
875
+ * @param[in] document A document object.
876
+ *
877
+ * @returns the node object or @c NULL if the document is empty.
878
+ */
879
+
880
+ YAML_DECLARE(yaml_node_t *)
881
+ yaml_document_get_root_node(yaml_document_t *document);
882
+
883
+ /**
884
+ * Create a SCALAR node and attach it to the document.
885
+ *
886
+ * The @a style argument may be ignored by the emitter.
887
+ *
888
+ * @param[in,out] document A document object.
889
+ * @param[in] tag The scalar tag.
890
+ * @param[in] value The scalar value.
891
+ * @param[in] length The length of the scalar value.
892
+ * @param[in] style The scalar style.
893
+ *
894
+ * @returns the node id or @c 0 on error.
895
+ */
896
+
897
+ YAML_DECLARE(int)
898
+ yaml_document_add_scalar(yaml_document_t *document,
899
+ const yaml_char_t *tag, const yaml_char_t *value, int length,
900
+ yaml_scalar_style_t style);
901
+
902
+ /**
903
+ * Create a SEQUENCE node and attach it to the document.
904
+ *
905
+ * The @a style argument may be ignored by the emitter.
906
+ *
907
+ * @param[in,out] document A document object.
908
+ * @param[in] tag The sequence tag.
909
+ * @param[in] style The sequence style.
910
+ *
911
+ * @returns the node id or @c 0 on error.
912
+ */
913
+
914
+ YAML_DECLARE(int)
915
+ yaml_document_add_sequence(yaml_document_t *document,
916
+ const yaml_char_t *tag, yaml_sequence_style_t style);
917
+
918
+ /**
919
+ * Create a MAPPING node and attach it to the document.
920
+ *
921
+ * The @a style argument may be ignored by the emitter.
922
+ *
923
+ * @param[in,out] document A document object.
924
+ * @param[in] tag The sequence tag.
925
+ * @param[in] style The sequence style.
926
+ *
927
+ * @returns the node id or @c 0 on error.
928
+ */
929
+
930
+ YAML_DECLARE(int)
931
+ yaml_document_add_mapping(yaml_document_t *document,
932
+ const yaml_char_t *tag, yaml_mapping_style_t style);
933
+
934
+ /**
935
+ * Add an item to a SEQUENCE node.
936
+ *
937
+ * @param[in,out] document A document object.
938
+ * @param[in] sequence The sequence node id.
939
+ * @param[in] item The item node id.
940
+ *
941
+ * @returns @c 1 if the function succeeded, @c 0 on error.
942
+ */
943
+
944
+ YAML_DECLARE(int)
945
+ yaml_document_append_sequence_item(yaml_document_t *document,
946
+ int sequence, int item);
947
+
948
+ /**
949
+ * Add a pair of a key and a value to a MAPPING node.
950
+ *
951
+ * @param[in,out] document A document object.
952
+ * @param[in] mapping The mapping node id.
953
+ * @param[in] key The key node id.
954
+ * @param[in] value The value node id.
955
+ *
956
+ * @returns @c 1 if the function succeeded, @c 0 on error.
957
+ */
958
+
959
+ YAML_DECLARE(int)
960
+ yaml_document_append_mapping_pair(yaml_document_t *document,
961
+ int mapping, int key, int value);
962
+
963
+ /** @} */
964
+
965
+ /**
966
+ * @defgroup parser Parser Definitions
967
+ * @{
968
+ */
969
+
970
+ /**
971
+ * The prototype of a read handler.
972
+ *
973
+ * The read handler is called when the parser needs to read more bytes from the
974
+ * source. The handler should write not more than @a size bytes to the @a
975
+ * buffer. The number of written bytes should be set to the @a length variable.
976
+ *
977
+ * @param[in,out] data A pointer to an application data specified by
978
+ * yaml_parser_set_input().
979
+ * @param[out] buffer The buffer to write the data from the source.
980
+ * @param[in] size The size of the buffer.
981
+ * @param[out] size_read The actual number of bytes read from the source.
982
+ *
983
+ * @returns On success, the handler should return @c 1. If the handler failed,
984
+ * the returned value should be @c 0. On EOF, the handler should set the
985
+ * @a size_read to @c 0 and return @c 1.
986
+ */
987
+
988
+ typedef int yaml_read_handler_t(void *data, unsigned char *buffer, size_t size,
989
+ size_t *size_read);
990
+
991
+ /**
992
+ * This structure holds information about a potential simple key.
993
+ */
994
+
995
+ typedef struct yaml_simple_key_s {
996
+ /** Is a simple key possible? */
997
+ int possible;
998
+
999
+ /** Is a simple key required? */
1000
+ int required;
1001
+
1002
+ /** The number of the token. */
1003
+ size_t token_number;
1004
+
1005
+ /** The position mark. */
1006
+ yaml_mark_t mark;
1007
+ } yaml_simple_key_t;
1008
+
1009
+ /**
1010
+ * The states of the parser.
1011
+ */
1012
+ typedef enum yaml_parser_state_e {
1013
+ /** Expect STREAM-START. */
1014
+ YAML_PARSE_STREAM_START_STATE,
1015
+ /** Expect the beginning of an implicit document. */
1016
+ YAML_PARSE_IMPLICIT_DOCUMENT_START_STATE,
1017
+ /** Expect DOCUMENT-START. */
1018
+ YAML_PARSE_DOCUMENT_START_STATE,
1019
+ /** Expect the content of a document. */
1020
+ YAML_PARSE_DOCUMENT_CONTENT_STATE,
1021
+ /** Expect DOCUMENT-END. */
1022
+ YAML_PARSE_DOCUMENT_END_STATE,
1023
+
1024
+ /** Expect a block node. */
1025
+ YAML_PARSE_BLOCK_NODE_STATE,
1026
+ /** Expect a block node or indentless sequence. */
1027
+ YAML_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE,
1028
+ /** Expect a flow node. */
1029
+ YAML_PARSE_FLOW_NODE_STATE,
1030
+ /** Expect the first entry of a block sequence. */
1031
+ YAML_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE,
1032
+ /** Expect an entry of a block sequence. */
1033
+ YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE,
1034
+
1035
+ /** Expect an entry of an indentless sequence. */
1036
+ YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE,
1037
+ /** Expect the first key of a block mapping. */
1038
+ YAML_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE,
1039
+ /** Expect a block mapping key. */
1040
+ YAML_PARSE_BLOCK_MAPPING_KEY_STATE,
1041
+ /** Expect a block mapping value. */
1042
+ YAML_PARSE_BLOCK_MAPPING_VALUE_STATE,
1043
+ /** Expect the first entry of a flow sequence. */
1044
+ YAML_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE,
1045
+
1046
+ /** Expect an entry of a flow sequence. */
1047
+ YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE,
1048
+ /** Expect a key of an ordered mapping. */
1049
+ YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE,
1050
+ /** Expect a value of an ordered mapping. */
1051
+ YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE,
1052
+ /** Expect the and of an ordered mapping entry. */
1053
+ YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE,
1054
+ /** Expect the first key of a flow mapping. */
1055
+ YAML_PARSE_FLOW_MAPPING_FIRST_KEY_STATE,
1056
+ /** Expect a key of a flow mapping. */
1057
+
1058
+ YAML_PARSE_FLOW_MAPPING_KEY_STATE,
1059
+ /** Expect a value of a flow mapping. */
1060
+ YAML_PARSE_FLOW_MAPPING_VALUE_STATE,
1061
+ /** Expect an empty value of a flow mapping. */
1062
+ YAML_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE,
1063
+ /** Expect nothing. */
1064
+ YAML_PARSE_END_STATE
1065
+ } yaml_parser_state_t;
1066
+
1067
+ /**
1068
+ * This structure holds aliases data.
1069
+ */
1070
+
1071
+ typedef struct yaml_alias_data_s {
1072
+ /** The anchor. */
1073
+ yaml_char_t *anchor;
1074
+ /** The node id. */
1075
+ int index;
1076
+ /** The anchor mark. */
1077
+ yaml_mark_t mark;
1078
+ } yaml_alias_data_t;
1079
+
1080
+ /**
1081
+ * The parser structure.
1082
+ *
1083
+ * All members are internal. Manage the structure using the @c yaml_parser_
1084
+ * family of functions.
1085
+ */
1086
+
1087
+ typedef struct yaml_parser_s {
1088
+
1089
+ /**
1090
+ * @name Error handling
1091
+ * @{
1092
+ */
1093
+
1094
+ /** Error type. */
1095
+ yaml_error_type_t error;
1096
+ /** Error description. */
1097
+ const char *problem;
1098
+ /** The byte about which the problem occurred. */
1099
+ size_t problem_offset;
1100
+ /** The problematic value (@c -1 is none). */
1101
+ int problem_value;
1102
+ /** The problem position. */
1103
+ yaml_mark_t problem_mark;
1104
+ /** The error context. */
1105
+ const char *context;
1106
+ /** The context position. */
1107
+ yaml_mark_t context_mark;
1108
+
1109
+ /**
1110
+ * @}
1111
+ */
1112
+
1113
+ /**
1114
+ * @name Reader stuff
1115
+ * @{
1116
+ */
1117
+
1118
+ /** Read handler. */
1119
+ yaml_read_handler_t *read_handler;
1120
+
1121
+ /** A pointer for passing to the read handler. */
1122
+ void *read_handler_data;
1123
+
1124
+ /** Standard (string or file) input data. */
1125
+ union {
1126
+ /** String input data. */
1127
+ struct {
1128
+ /** The string start pointer. */
1129
+ const unsigned char *start;
1130
+ /** The string end pointer. */
1131
+ const unsigned char *end;
1132
+ /** The string current position. */
1133
+ const unsigned char *current;
1134
+ } string;
1135
+
1136
+ /** File input data. */
1137
+ FILE *file;
1138
+ } input;
1139
+
1140
+ /** EOF flag */
1141
+ int eof;
1142
+
1143
+ /** The working buffer. */
1144
+ struct {
1145
+ /** The beginning of the buffer. */
1146
+ yaml_char_t *start;
1147
+ /** The end of the buffer. */
1148
+ yaml_char_t *end;
1149
+ /** The current position of the buffer. */
1150
+ yaml_char_t *pointer;
1151
+ /** The last filled position of the buffer. */
1152
+ yaml_char_t *last;
1153
+ } buffer;
1154
+
1155
+ /* The number of unread characters in the buffer. */
1156
+ size_t unread;
1157
+
1158
+ /** The raw buffer. */
1159
+ struct {
1160
+ /** The beginning of the buffer. */
1161
+ unsigned char *start;
1162
+ /** The end of the buffer. */
1163
+ unsigned char *end;
1164
+ /** The current position of the buffer. */
1165
+ unsigned char *pointer;
1166
+ /** The last filled position of the buffer. */
1167
+ unsigned char *last;
1168
+ } raw_buffer;
1169
+
1170
+ /** The input encoding. */
1171
+ yaml_encoding_t encoding;
1172
+
1173
+ /** The offset of the current position (in bytes). */
1174
+ size_t offset;
1175
+
1176
+ /** The mark of the current position. */
1177
+ yaml_mark_t mark;
1178
+
1179
+ /**
1180
+ * @}
1181
+ */
1182
+
1183
+ /**
1184
+ * @name Scanner stuff
1185
+ * @{
1186
+ */
1187
+
1188
+ /** Have we started to scan the input stream? */
1189
+ int stream_start_produced;
1190
+
1191
+ /** Have we reached the end of the input stream? */
1192
+ int stream_end_produced;
1193
+
1194
+ /** The number of unclosed '[' and '{' indicators. */
1195
+ int flow_level;
1196
+
1197
+ /** The tokens queue. */
1198
+ struct {
1199
+ /** The beginning of the tokens queue. */
1200
+ yaml_token_t *start;
1201
+ /** The end of the tokens queue. */
1202
+ yaml_token_t *end;
1203
+ /** The head of the tokens queue. */
1204
+ yaml_token_t *head;
1205
+ /** The tail of the tokens queue. */
1206
+ yaml_token_t *tail;
1207
+ } tokens;
1208
+
1209
+ /** The number of tokens fetched from the queue. */
1210
+ size_t tokens_parsed;
1211
+
1212
+ /** Does the tokens queue contain a token ready for dequeueing. */
1213
+ int token_available;
1214
+
1215
+ /** The indentation levels stack. */
1216
+ struct {
1217
+ /** The beginning of the stack. */
1218
+ int *start;
1219
+ /** The end of the stack. */
1220
+ int *end;
1221
+ /** The top of the stack. */
1222
+ int *top;
1223
+ } indents;
1224
+
1225
+ /** The current indentation level. */
1226
+ int indent;
1227
+
1228
+ /** May a simple key occur at the current position? */
1229
+ int simple_key_allowed;
1230
+
1231
+ /** The stack of simple keys. */
1232
+ struct {
1233
+ /** The beginning of the stack. */
1234
+ yaml_simple_key_t *start;
1235
+ /** The end of the stack. */
1236
+ yaml_simple_key_t *end;
1237
+ /** The top of the stack. */
1238
+ yaml_simple_key_t *top;
1239
+ } simple_keys;
1240
+
1241
+ /**
1242
+ * @}
1243
+ */
1244
+
1245
+ /**
1246
+ * @name Parser stuff
1247
+ * @{
1248
+ */
1249
+
1250
+ /** The parser states stack. */
1251
+ struct {
1252
+ /** The beginning of the stack. */
1253
+ yaml_parser_state_t *start;
1254
+ /** The end of the stack. */
1255
+ yaml_parser_state_t *end;
1256
+ /** The top of the stack. */
1257
+ yaml_parser_state_t *top;
1258
+ } states;
1259
+
1260
+ /** The current parser state. */
1261
+ yaml_parser_state_t state;
1262
+
1263
+ /** The stack of marks. */
1264
+ struct {
1265
+ /** The beginning of the stack. */
1266
+ yaml_mark_t *start;
1267
+ /** The end of the stack. */
1268
+ yaml_mark_t *end;
1269
+ /** The top of the stack. */
1270
+ yaml_mark_t *top;
1271
+ } marks;
1272
+
1273
+ /** The list of TAG directives. */
1274
+ struct {
1275
+ /** The beginning of the list. */
1276
+ yaml_tag_directive_t *start;
1277
+ /** The end of the list. */
1278
+ yaml_tag_directive_t *end;
1279
+ /** The top of the list. */
1280
+ yaml_tag_directive_t *top;
1281
+ } tag_directives;
1282
+
1283
+ /**
1284
+ * @}
1285
+ */
1286
+
1287
+ /**
1288
+ * @name Dumper stuff
1289
+ * @{
1290
+ */
1291
+
1292
+ /** The alias data. */
1293
+ struct {
1294
+ /** The beginning of the list. */
1295
+ yaml_alias_data_t *start;
1296
+ /** The end of the list. */
1297
+ yaml_alias_data_t *end;
1298
+ /** The top of the list. */
1299
+ yaml_alias_data_t *top;
1300
+ } aliases;
1301
+
1302
+ /** The currently parsed document. */
1303
+ yaml_document_t *document;
1304
+
1305
+ /**
1306
+ * @}
1307
+ */
1308
+
1309
+ } yaml_parser_t;
1310
+
1311
+ /**
1312
+ * Initialize a parser.
1313
+ *
1314
+ * This function creates a new parser object. An application is responsible
1315
+ * for destroying the object using the yaml_parser_delete() function.
1316
+ *
1317
+ * @param[out] parser An empty parser object.
1318
+ *
1319
+ * @returns @c 1 if the function succeeded, @c 0 on error.
1320
+ */
1321
+
1322
+ YAML_DECLARE(int)
1323
+ yaml_parser_initialize(yaml_parser_t *parser);
1324
+
1325
+ /**
1326
+ * Destroy a parser.
1327
+ *
1328
+ * @param[in,out] parser A parser object.
1329
+ */
1330
+
1331
+ YAML_DECLARE(void)
1332
+ yaml_parser_delete(yaml_parser_t *parser);
1333
+
1334
+ /**
1335
+ * Set a string input.
1336
+ *
1337
+ * Note that the @a input pointer must be valid while the @a parser object
1338
+ * exists. The application is responsible for destroying @a input after
1339
+ * destroying the @a parser.
1340
+ *
1341
+ * @param[in,out] parser A parser object.
1342
+ * @param[in] input A source data.
1343
+ * @param[in] size The length of the source data in bytes.
1344
+ */
1345
+
1346
+ YAML_DECLARE(void)
1347
+ yaml_parser_set_input_string(yaml_parser_t *parser,
1348
+ const unsigned char *input, size_t size);
1349
+
1350
+ /**
1351
+ * Set a file input.
1352
+ *
1353
+ * @a file should be a file object open for reading. The application is
1354
+ * responsible for closing the @a file.
1355
+ *
1356
+ * @param[in,out] parser A parser object.
1357
+ * @param[in] file An open file.
1358
+ */
1359
+
1360
+ YAML_DECLARE(void)
1361
+ yaml_parser_set_input_file(yaml_parser_t *parser, FILE *file);
1362
+
1363
+ /**
1364
+ * Set a generic input handler.
1365
+ *
1366
+ * @param[in,out] parser A parser object.
1367
+ * @param[in] handler A read handler.
1368
+ * @param[in] data Any application data for passing to the read
1369
+ * handler.
1370
+ */
1371
+
1372
+ YAML_DECLARE(void)
1373
+ yaml_parser_set_input(yaml_parser_t *parser,
1374
+ yaml_read_handler_t *handler, void *data);
1375
+
1376
+ /**
1377
+ * Set the source encoding.
1378
+ *
1379
+ * @param[in,out] parser A parser object.
1380
+ * @param[in] encoding The source encoding.
1381
+ */
1382
+
1383
+ YAML_DECLARE(void)
1384
+ yaml_parser_set_encoding(yaml_parser_t *parser, yaml_encoding_t encoding);
1385
+
1386
+ /**
1387
+ * Scan the input stream and produce the next token.
1388
+ *
1389
+ * Call the function subsequently to produce a sequence of tokens corresponding
1390
+ * to the input stream. The initial token has the type
1391
+ * @c YAML_STREAM_START_TOKEN while the ending token has the type
1392
+ * @c YAML_STREAM_END_TOKEN.
1393
+ *
1394
+ * An application is responsible for freeing any buffers associated with the
1395
+ * produced token object using the @c yaml_token_delete function.
1396
+ *
1397
+ * An application must not alternate the calls of yaml_parser_scan() with the
1398
+ * calls of yaml_parser_parse() or yaml_parser_load(). Doing this will break
1399
+ * the parser.
1400
+ *
1401
+ * @param[in,out] parser A parser object.
1402
+ * @param[out] token An empty token object.
1403
+ *
1404
+ * @returns @c 1 if the function succeeded, @c 0 on error.
1405
+ */
1406
+
1407
+ YAML_DECLARE(int)
1408
+ yaml_parser_scan(yaml_parser_t *parser, yaml_token_t *token);
1409
+
1410
+ /**
1411
+ * Parse the input stream and produce the next parsing event.
1412
+ *
1413
+ * Call the function subsequently to produce a sequence of events corresponding
1414
+ * to the input stream. The initial event has the type
1415
+ * @c YAML_STREAM_START_EVENT while the ending event has the type
1416
+ * @c YAML_STREAM_END_EVENT.
1417
+ *
1418
+ * An application is responsible for freeing any buffers associated with the
1419
+ * produced event object using the yaml_event_delete() function.
1420
+ *
1421
+ * An application must not alternate the calls of yaml_parser_parse() with the
1422
+ * calls of yaml_parser_scan() or yaml_parser_load(). Doing this will break the
1423
+ * parser.
1424
+ *
1425
+ * @param[in,out] parser A parser object.
1426
+ * @param[out] event An empty event object.
1427
+ *
1428
+ * @returns @c 1 if the function succeeded, @c 0 on error.
1429
+ */
1430
+
1431
+ YAML_DECLARE(int)
1432
+ yaml_parser_parse(yaml_parser_t *parser, yaml_event_t *event);
1433
+
1434
+ /**
1435
+ * Parse the input stream and produce the next YAML document.
1436
+ *
1437
+ * Call this function subsequently to produce a sequence of documents
1438
+ * constituting the input stream.
1439
+ *
1440
+ * If the produced document has no root node, it means that the document
1441
+ * end has been reached.
1442
+ *
1443
+ * An application is responsible for freeing any data associated with the
1444
+ * produced document object using the yaml_document_delete() function.
1445
+ *
1446
+ * An application must not alternate the calls of yaml_parser_load() with the
1447
+ * calls of yaml_parser_scan() or yaml_parser_parse(). Doing this will break
1448
+ * the parser.
1449
+ *
1450
+ * @param[in,out] parser A parser object.
1451
+ * @param[out] document An empty document object.
1452
+ *
1453
+ * @returns @c 1 if the function succeeded, @c 0 on error.
1454
+ */
1455
+
1456
+ YAML_DECLARE(int)
1457
+ yaml_parser_load(yaml_parser_t *parser, yaml_document_t *document);
1458
+
1459
+ /** @} */
1460
+
1461
+ /**
1462
+ * @defgroup emitter Emitter Definitions
1463
+ * @{
1464
+ */
1465
+
1466
+ /**
1467
+ * The prototype of a write handler.
1468
+ *
1469
+ * The write handler is called when the emitter needs to flush the accumulated
1470
+ * characters to the output. The handler should write @a size bytes of the
1471
+ * @a buffer to the output.
1472
+ *
1473
+ * @param[in,out] data A pointer to an application data specified by
1474
+ * yaml_emitter_set_output().
1475
+ * @param[in] buffer The buffer with bytes to be written.
1476
+ * @param[in] size The size of the buffer.
1477
+ *
1478
+ * @returns On success, the handler should return @c 1. If the handler failed,
1479
+ * the returned value should be @c 0.
1480
+ */
1481
+
1482
+ typedef int yaml_write_handler_t(void *data, unsigned char *buffer, size_t size);
1483
+
1484
+ /** The emitter states. */
1485
+ typedef enum yaml_emitter_state_e {
1486
+ /** Expect STREAM-START. */
1487
+ YAML_EMIT_STREAM_START_STATE,
1488
+ /** Expect the first DOCUMENT-START or STREAM-END. */
1489
+ YAML_EMIT_FIRST_DOCUMENT_START_STATE,
1490
+ /** Expect DOCUMENT-START or STREAM-END. */
1491
+ YAML_EMIT_DOCUMENT_START_STATE,
1492
+ /** Expect the content of a document. */
1493
+ YAML_EMIT_DOCUMENT_CONTENT_STATE,
1494
+ /** Expect DOCUMENT-END. */
1495
+ YAML_EMIT_DOCUMENT_END_STATE,
1496
+
1497
+ /** Expect the first item of a flow sequence. */
1498
+ YAML_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE,
1499
+ /** Expect an item of a flow sequence. */
1500
+ YAML_EMIT_FLOW_SEQUENCE_ITEM_STATE,
1501
+ /** Expect the first key of a flow mapping. */
1502
+ YAML_EMIT_FLOW_MAPPING_FIRST_KEY_STATE,
1503
+ /** Expect a key of a flow mapping. */
1504
+ YAML_EMIT_FLOW_MAPPING_KEY_STATE,
1505
+ /** Expect a value for a simple key of a flow mapping. */
1506
+ YAML_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE,
1507
+
1508
+ /** Expect a value of a flow mapping. */
1509
+ YAML_EMIT_FLOW_MAPPING_VALUE_STATE,
1510
+ /** Expect the first item of a block sequence. */
1511
+ YAML_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE,
1512
+ /** Expect an item of a block sequence. */
1513
+ YAML_EMIT_BLOCK_SEQUENCE_ITEM_STATE,
1514
+ /** Expect the first key of a block mapping. */
1515
+ YAML_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE,
1516
+ /** Expect the key of a block mapping. */
1517
+ YAML_EMIT_BLOCK_MAPPING_KEY_STATE,
1518
+
1519
+ /** Expect a value for a simple key of a block mapping. */
1520
+ YAML_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE,
1521
+ /** Expect a value of a block mapping. */
1522
+ YAML_EMIT_BLOCK_MAPPING_VALUE_STATE,
1523
+ /** Expect nothing. */
1524
+ YAML_EMIT_END_STATE
1525
+ } yaml_emitter_state_t;
1526
+
1527
+
1528
+ /* This is needed for C++ */
1529
+
1530
+ typedef struct yaml_anchors_s {
1531
+ /** The number of references. */
1532
+ int references;
1533
+ /** The anchor id. */
1534
+ int anchor;
1535
+ /** If the node has been emitted? */
1536
+ int serialized;
1537
+ } yaml_anchors_t;
1538
+
1539
+ /**
1540
+ * The emitter structure.
1541
+ *
1542
+ * All members are internal. Manage the structure using the @c yaml_emitter_
1543
+ * family of functions.
1544
+ */
1545
+
1546
+ typedef struct yaml_emitter_s {
1547
+
1548
+ /**
1549
+ * @name Error handling
1550
+ * @{
1551
+ */
1552
+
1553
+ /** Error type. */
1554
+ yaml_error_type_t error;
1555
+ /** Error description. */
1556
+ const char *problem;
1557
+
1558
+ /**
1559
+ * @}
1560
+ */
1561
+
1562
+ /**
1563
+ * @name Writer stuff
1564
+ * @{
1565
+ */
1566
+
1567
+ /** Write handler. */
1568
+ yaml_write_handler_t *write_handler;
1569
+
1570
+ /** A pointer for passing to the write handler. */
1571
+ void *write_handler_data;
1572
+
1573
+ /** Standard (string or file) output data. */
1574
+ union {
1575
+ /** String output data. */
1576
+ struct {
1577
+ /** The buffer pointer. */
1578
+ unsigned char *buffer;
1579
+ /** The buffer size. */
1580
+ size_t size;
1581
+ /** The number of written bytes. */
1582
+ size_t *size_written;
1583
+ } string;
1584
+
1585
+ /** File output data. */
1586
+ FILE *file;
1587
+ } output;
1588
+
1589
+ /** The working buffer. */
1590
+ struct {
1591
+ /** The beginning of the buffer. */
1592
+ yaml_char_t *start;
1593
+ /** The end of the buffer. */
1594
+ yaml_char_t *end;
1595
+ /** The current position of the buffer. */
1596
+ yaml_char_t *pointer;
1597
+ /** The last filled position of the buffer. */
1598
+ yaml_char_t *last;
1599
+ } buffer;
1600
+
1601
+ /** The raw buffer. */
1602
+ struct {
1603
+ /** The beginning of the buffer. */
1604
+ unsigned char *start;
1605
+ /** The end of the buffer. */
1606
+ unsigned char *end;
1607
+ /** The current position of the buffer. */
1608
+ unsigned char *pointer;
1609
+ /** The last filled position of the buffer. */
1610
+ unsigned char *last;
1611
+ } raw_buffer;
1612
+
1613
+ /** The stream encoding. */
1614
+ yaml_encoding_t encoding;
1615
+
1616
+ /**
1617
+ * @}
1618
+ */
1619
+
1620
+ /**
1621
+ * @name Emitter stuff
1622
+ * @{
1623
+ */
1624
+
1625
+ /** If the output is in the canonical style? */
1626
+ int canonical;
1627
+ /** The number of indentation spaces. */
1628
+ int best_indent;
1629
+ /** The preferred width of the output lines. */
1630
+ int best_width;
1631
+ /** Allow unescaped non-ASCII characters? */
1632
+ int unicode;
1633
+ /** The preferred line break. */
1634
+ yaml_break_t line_break;
1635
+
1636
+ /** The stack of states. */
1637
+ struct {
1638
+ /** The beginning of the stack. */
1639
+ yaml_emitter_state_t *start;
1640
+ /** The end of the stack. */
1641
+ yaml_emitter_state_t *end;
1642
+ /** The top of the stack. */
1643
+ yaml_emitter_state_t *top;
1644
+ } states;
1645
+
1646
+ /** The current emitter state. */
1647
+ yaml_emitter_state_t state;
1648
+
1649
+ /** The event queue. */
1650
+ struct {
1651
+ /** The beginning of the event queue. */
1652
+ yaml_event_t *start;
1653
+ /** The end of the event queue. */
1654
+ yaml_event_t *end;
1655
+ /** The head of the event queue. */
1656
+ yaml_event_t *head;
1657
+ /** The tail of the event queue. */
1658
+ yaml_event_t *tail;
1659
+ } events;
1660
+
1661
+ /** The stack of indentation levels. */
1662
+ struct {
1663
+ /** The beginning of the stack. */
1664
+ int *start;
1665
+ /** The end of the stack. */
1666
+ int *end;
1667
+ /** The top of the stack. */
1668
+ int *top;
1669
+ } indents;
1670
+
1671
+ /** The list of tag directives. */
1672
+ struct {
1673
+ /** The beginning of the list. */
1674
+ yaml_tag_directive_t *start;
1675
+ /** The end of the list. */
1676
+ yaml_tag_directive_t *end;
1677
+ /** The top of the list. */
1678
+ yaml_tag_directive_t *top;
1679
+ } tag_directives;
1680
+
1681
+ /** The current indentation level. */
1682
+ int indent;
1683
+
1684
+ /** The current flow level. */
1685
+ int flow_level;
1686
+
1687
+ /** Is it the document root context? */
1688
+ int root_context;
1689
+ /** Is it a sequence context? */
1690
+ int sequence_context;
1691
+ /** Is it a mapping context? */
1692
+ int mapping_context;
1693
+ /** Is it a simple mapping key context? */
1694
+ int simple_key_context;
1695
+
1696
+ /** The current line. */
1697
+ int line;
1698
+ /** The current column. */
1699
+ int column;
1700
+ /** If the last character was a whitespace? */
1701
+ int whitespace;
1702
+ /** If the last character was an indentation character (' ', '-', '?', ':')? */
1703
+ int indention;
1704
+ /** If an explicit document end is required? */
1705
+ int open_ended;
1706
+
1707
+ /** Anchor analysis. */
1708
+ struct {
1709
+ /** The anchor value. */
1710
+ yaml_char_t *anchor;
1711
+ /** The anchor length. */
1712
+ size_t anchor_length;
1713
+ /** Is it an alias? */
1714
+ int alias;
1715
+ } anchor_data;
1716
+
1717
+ /** Tag analysis. */
1718
+ struct {
1719
+ /** The tag handle. */
1720
+ yaml_char_t *handle;
1721
+ /** The tag handle length. */
1722
+ size_t handle_length;
1723
+ /** The tag suffix. */
1724
+ yaml_char_t *suffix;
1725
+ /** The tag suffix length. */
1726
+ size_t suffix_length;
1727
+ } tag_data;
1728
+
1729
+ /** Scalar analysis. */
1730
+ struct {
1731
+ /** The scalar value. */
1732
+ yaml_char_t *value;
1733
+ /** The scalar length. */
1734
+ size_t length;
1735
+ /** Does the scalar contain line breaks? */
1736
+ int multiline;
1737
+ /** Can the scalar be expressed in the flow plain style? */
1738
+ int flow_plain_allowed;
1739
+ /** Can the scalar be expressed in the block plain style? */
1740
+ int block_plain_allowed;
1741
+ /** Can the scalar be expressed in the single quoted style? */
1742
+ int single_quoted_allowed;
1743
+ /** Can the scalar be expressed in the literal or folded styles? */
1744
+ int block_allowed;
1745
+ /** The output style. */
1746
+ yaml_scalar_style_t style;
1747
+ } scalar_data;
1748
+
1749
+ /**
1750
+ * @}
1751
+ */
1752
+
1753
+ /**
1754
+ * @name Dumper stuff
1755
+ * @{
1756
+ */
1757
+
1758
+ /** If the stream was already opened? */
1759
+ int opened;
1760
+ /** If the stream was already closed? */
1761
+ int closed;
1762
+
1763
+ /** The information associated with the document nodes. */
1764
+ yaml_anchors_t *anchors;
1765
+
1766
+ /** The last assigned anchor id. */
1767
+ int last_anchor_id;
1768
+
1769
+ /** The currently emitted document. */
1770
+ yaml_document_t *document;
1771
+
1772
+ /**
1773
+ * @}
1774
+ */
1775
+
1776
+ } yaml_emitter_t;
1777
+
1778
+ /**
1779
+ * Initialize an emitter.
1780
+ *
1781
+ * This function creates a new emitter object. An application is responsible
1782
+ * for destroying the object using the yaml_emitter_delete() function.
1783
+ *
1784
+ * @param[out] emitter An empty parser object.
1785
+ *
1786
+ * @returns @c 1 if the function succeeded, @c 0 on error.
1787
+ */
1788
+
1789
+ YAML_DECLARE(int)
1790
+ yaml_emitter_initialize(yaml_emitter_t *emitter);
1791
+
1792
+ /**
1793
+ * Destroy an emitter.
1794
+ *
1795
+ * @param[in,out] emitter An emitter object.
1796
+ */
1797
+
1798
+ YAML_DECLARE(void)
1799
+ yaml_emitter_delete(yaml_emitter_t *emitter);
1800
+
1801
+ /**
1802
+ * Set a string output.
1803
+ *
1804
+ * The emitter will write the output characters to the @a output buffer of the
1805
+ * size @a size. The emitter will set @a size_written to the number of written
1806
+ * bytes. If the buffer is smaller than required, the emitter produces the
1807
+ * YAML_WRITE_ERROR error.
1808
+ *
1809
+ * @param[in,out] emitter An emitter object.
1810
+ * @param[in] output An output buffer.
1811
+ * @param[in] size The buffer size.
1812
+ * @param[in] size_written The pointer to save the number of written
1813
+ * bytes.
1814
+ */
1815
+
1816
+ YAML_DECLARE(void)
1817
+ yaml_emitter_set_output_string(yaml_emitter_t *emitter,
1818
+ unsigned char *output, size_t size, size_t *size_written);
1819
+
1820
+ /**
1821
+ * Set a file output.
1822
+ *
1823
+ * @a file should be a file object open for writing. The application is
1824
+ * responsible for closing the @a file.
1825
+ *
1826
+ * @param[in,out] emitter An emitter object.
1827
+ * @param[in] file An open file.
1828
+ */
1829
+
1830
+ YAML_DECLARE(void)
1831
+ yaml_emitter_set_output_file(yaml_emitter_t *emitter, FILE *file);
1832
+
1833
+ /**
1834
+ * Set a generic output handler.
1835
+ *
1836
+ * @param[in,out] emitter An emitter object.
1837
+ * @param[in] handler A write handler.
1838
+ * @param[in] data Any application data for passing to the write
1839
+ * handler.
1840
+ */
1841
+
1842
+ YAML_DECLARE(void)
1843
+ yaml_emitter_set_output(yaml_emitter_t *emitter,
1844
+ yaml_write_handler_t *handler, void *data);
1845
+
1846
+ /**
1847
+ * Set the output encoding.
1848
+ *
1849
+ * @param[in,out] emitter An emitter object.
1850
+ * @param[in] encoding The output encoding.
1851
+ */
1852
+
1853
+ YAML_DECLARE(void)
1854
+ yaml_emitter_set_encoding(yaml_emitter_t *emitter, yaml_encoding_t encoding);
1855
+
1856
+ /**
1857
+ * Set if the output should be in the "canonical" format as in the YAML
1858
+ * specification.
1859
+ *
1860
+ * @param[in,out] emitter An emitter object.
1861
+ * @param[in] canonical If the output is canonical.
1862
+ */
1863
+
1864
+ YAML_DECLARE(void)
1865
+ yaml_emitter_set_canonical(yaml_emitter_t *emitter, int canonical);
1866
+
1867
+ /**
1868
+ * Set the indentation increment.
1869
+ *
1870
+ * @param[in,out] emitter An emitter object.
1871
+ * @param[in] indent The indentation increment (1 < . < 10).
1872
+ */
1873
+
1874
+ YAML_DECLARE(void)
1875
+ yaml_emitter_set_indent(yaml_emitter_t *emitter, int indent);
1876
+
1877
+ /**
1878
+ * Set the preferred line width. @c -1 means unlimited.
1879
+ *
1880
+ * @param[in,out] emitter An emitter object.
1881
+ * @param[in] width The preferred line width.
1882
+ */
1883
+
1884
+ YAML_DECLARE(void)
1885
+ yaml_emitter_set_width(yaml_emitter_t *emitter, int width);
1886
+
1887
+ /**
1888
+ * Set if unescaped non-ASCII characters are allowed.
1889
+ *
1890
+ * @param[in,out] emitter An emitter object.
1891
+ * @param[in] unicode If unescaped Unicode characters are allowed.
1892
+ */
1893
+
1894
+ YAML_DECLARE(void)
1895
+ yaml_emitter_set_unicode(yaml_emitter_t *emitter, int unicode);
1896
+
1897
+ /**
1898
+ * Set the preferred line break.
1899
+ *
1900
+ * @param[in,out] emitter An emitter object.
1901
+ * @param[in] line_break The preferred line break.
1902
+ */
1903
+
1904
+ YAML_DECLARE(void)
1905
+ yaml_emitter_set_break(yaml_emitter_t *emitter, yaml_break_t line_break);
1906
+
1907
+ /**
1908
+ * Emit an event.
1909
+ *
1910
+ * The event object may be generated using the yaml_parser_parse() function.
1911
+ * The emitter takes the responsibility for the event object and destroys its
1912
+ * content after it is emitted. The event object is destroyed even if the
1913
+ * function fails.
1914
+ *
1915
+ * @param[in,out] emitter An emitter object.
1916
+ * @param[in,out] event An event object.
1917
+ *
1918
+ * @returns @c 1 if the function succeeded, @c 0 on error.
1919
+ */
1920
+
1921
+ YAML_DECLARE(int)
1922
+ yaml_emitter_emit(yaml_emitter_t *emitter, yaml_event_t *event);
1923
+
1924
+ /**
1925
+ * Start a YAML stream.
1926
+ *
1927
+ * This function should be used before yaml_emitter_dump() is called.
1928
+ *
1929
+ * @param[in,out] emitter An emitter object.
1930
+ *
1931
+ * @returns @c 1 if the function succeeded, @c 0 on error.
1932
+ */
1933
+
1934
+ YAML_DECLARE(int)
1935
+ yaml_emitter_open(yaml_emitter_t *emitter);
1936
+
1937
+ /**
1938
+ * Finish a YAML stream.
1939
+ *
1940
+ * This function should be used after yaml_emitter_dump() is called.
1941
+ *
1942
+ * @param[in,out] emitter An emitter object.
1943
+ *
1944
+ * @returns @c 1 if the function succeeded, @c 0 on error.
1945
+ */
1946
+
1947
+ YAML_DECLARE(int)
1948
+ yaml_emitter_close(yaml_emitter_t *emitter);
1949
+
1950
+ /**
1951
+ * Emit a YAML document.
1952
+ *
1953
+ * The document object may be generated using the yaml_parser_load() function
1954
+ * or the yaml_document_initialize() function. The emitter takes the
1955
+ * responsibility for the document object and destroys its content after
1956
+ * it is emitted. The document object is destroyed even if the function fails.
1957
+ *
1958
+ * @param[in,out] emitter An emitter object.
1959
+ * @param[in,out] document A document object.
1960
+ *
1961
+ * @returns @c 1 if the function succeeded, @c 0 on error.
1962
+ */
1963
+
1964
+ YAML_DECLARE(int)
1965
+ yaml_emitter_dump(yaml_emitter_t *emitter, yaml_document_t *document);
1966
+
1967
+ /**
1968
+ * Flush the accumulated characters to the output.
1969
+ *
1970
+ * @param[in,out] emitter An emitter object.
1971
+ *
1972
+ * @returns @c 1 if the function succeeded, @c 0 on error.
1973
+ */
1974
+
1975
+ YAML_DECLARE(int)
1976
+ yaml_emitter_flush(yaml_emitter_t *emitter);
1977
+
1978
+ /** @} */
1979
+
1980
+ #ifdef __cplusplus
1981
+ }
1982
+ #endif
1983
+
1984
+ #endif /* #ifndef YAML_H */
1985
+