xref: /freebsd/contrib/libyaml/include/yaml.h (revision 0f5c86ddb0257f4b7620f1d8e898289be30b19bf)
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 occured. */
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 destroing @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 expessed 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 documen 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 
1986