3 * @brief Public interface for libyaml.
5 * Include the header file with the code:
7 * #include <yaml/yaml.h>
23 * @defgroup export Export Definitions
27 /** The public API declaration. */
30 # if defined(YAML_DECLARE_STATIC)
31 # define YAML_DECLARE(type) type
32 # elif defined(YAML_DECLARE_EXPORT)
33 # define YAML_DECLARE(type) __declspec(dllexport) type
35 # define YAML_DECLARE(type) __declspec(dllimport) type
38 # define YAML_DECLARE(type) type
44 * @defgroup version Version Information
49 * Get the library version as a string.
51 * @returns The function returns the pointer to a static string of the form
52 * @c "X.Y.Z", where @c X is the major version number, @c Y is a minor version
53 * number, and @c Z is the patch version number.
56 YAML_DECLARE(const char *)
57 yaml_get_version_string(void);
60 * Get the library version numbers.
62 * @param[out] major Major version number.
63 * @param[out] minor Minor version number.
64 * @param[out] patch Patch version number.
68 yaml_get_version(int *major, int *minor, int *patch);
73 * @defgroup basic Basic Types
77 /** The character type (UTF-8 octet). */
78 typedef unsigned char yaml_char_t;
80 /** The version directive data. */
82 /** The major version number. */
84 /** The minor version number. */
86 } yaml_version_directive_t;
88 /** The tag directive data. */
90 /** The tag handle. */
92 /** The tag prefix. */
94 } yaml_tag_directive_t;
96 /** The stream encoding. */
100 YAML_UTF16LE_ENCODING,
101 YAML_UTF16BE_ENCODING
104 /** Line break types. */
113 /** Many bad things could happen with the parser and emitter. */
127 /** The pointer position. */
129 /** The position index. */
132 /** The position line. */
135 /** The position column. */
142 * @defgroup styles Node Styles
146 /** Scalar styles. */
148 YAML_ANY_SCALAR_STYLE,
150 YAML_PLAIN_SCALAR_STYLE,
152 YAML_SINGLE_QUOTED_SCALAR_STYLE,
153 YAML_DOUBLE_QUOTED_SCALAR_STYLE,
155 YAML_LITERAL_SCALAR_STYLE,
156 YAML_FOLDED_SCALAR_STYLE
157 } yaml_scalar_style_t;
159 /** Sequence styles. */
161 YAML_ANY_SEQUENCE_STYLE,
163 YAML_BLOCK_SEQUENCE_STYLE,
164 YAML_FLOW_SEQUENCE_STYLE
165 } yaml_sequence_style_t;
167 /** Mapping styles. */
169 YAML_ANY_MAPPING_STYLE,
171 YAML_BLOCK_MAPPING_STYLE,
172 YAML_FLOW_MAPPING_STYLE
173 /* YAML_FLOW_SET_MAPPING_STYLE */
174 } yaml_mapping_style_t;
179 * @defgroup tokens Tokens
187 YAML_STREAM_START_TOKEN,
188 YAML_STREAM_END_TOKEN,
190 YAML_VERSION_DIRECTIVE_TOKEN,
191 YAML_TAG_DIRECTIVE_TOKEN,
192 YAML_DOCUMENT_START_TOKEN,
193 YAML_DOCUMENT_END_TOKEN,
195 YAML_BLOCK_SEQUENCE_START_TOKEN,
196 YAML_BLOCK_MAPPING_START_TOKEN,
197 YAML_BLOCK_END_TOKEN,
199 YAML_FLOW_SEQUENCE_START_TOKEN,
200 YAML_FLOW_SEQUENCE_END_TOKEN,
201 YAML_FLOW_MAPPING_START_TOKEN,
202 YAML_FLOW_MAPPING_END_TOKEN,
204 YAML_BLOCK_ENTRY_TOKEN,
205 YAML_FLOW_ENTRY_TOKEN,
215 /** The token structure. */
218 /** The token type. */
219 yaml_token_type_t type;
221 /** The token data. */
224 /** The stream start (for @c YAML_STREAM_START_TOKEN). */
226 /** The stream encoding. */
227 yaml_encoding_t encoding;
230 /** The alias (for @c YAML_ALIAS_TOKEN). */
232 /** The alias value. */
236 /** The anchor (for @c YAML_ANCHOR_TOKEN). */
238 /** The anchor value. */
242 /** The tag (for @c YAML_TAG_TOKEN). */
244 /** The tag handle. */
246 /** The tag suffix. */
250 /** The scalar value (for @c YAML_SCALAR_TOKEN). */
252 /** The scalar value. */
254 /** The length of the scalar value. */
256 /** The scalar style. */
257 yaml_scalar_style_t style;
260 /** The version directive (for @c YAML_VERSION_DIRECTIVE_TOKEN). */
262 /** The major version number. */
264 /** The minor version number. */
268 /** The tag directive (for @c YAML_TAG_DIRECTIVE_TOKEN). */
270 /** The tag handle. */
272 /** The tag prefix. */
278 /** The beginning of the token. */
279 yaml_mark_t start_mark;
280 /** The end of the token. */
281 yaml_mark_t end_mark;
286 * Free any memory allocated for a token object.
288 * @param[in] token A token object.
292 yaml_token_delete(yaml_token_t *token);
297 * @defgroup events Events
305 YAML_STREAM_START_EVENT,
306 YAML_STREAM_END_EVENT,
308 YAML_DOCUMENT_START_EVENT,
309 YAML_DOCUMENT_END_EVENT,
314 YAML_SEQUENCE_START_EVENT,
315 YAML_SEQUENCE_END_EVENT,
317 YAML_MAPPING_START_EVENT,
318 YAML_MAPPING_END_EVENT
321 /** The event structure. */
324 /** The event type. */
325 yaml_event_type_t type;
327 /** The event data. */
330 /** The stream parameters (for @c YAML_STREAM_START_EVENT). */
332 /** The document encoding. */
333 yaml_encoding_t encoding;
336 /** The document parameters (for @c YAML_DOCUMENT_START_EVENT). */
338 /** The version directive. */
339 yaml_version_directive_t *version_directive;
341 /** The list of tag directives. */
343 /** The beginning of the tag directives list. */
344 yaml_tag_directive_t *start;
345 /** The end of the tag directives list. */
346 yaml_tag_directive_t *end;
349 /** Is the document indicator implicit? */
353 /** The document end parameters (for @c YAML_DOCUMENT_END_EVENT). */
355 /** Is the document end indicator implicit? */
359 /** The alias parameters (for @c YAML_ALIAS_EVENT). */
365 /** The scalar parameters (for @c YAML_SCALAR_EVENT). */
371 /** The scalar value. */
373 /** The length of the scalar value. */
375 /** Is the tag optional for the plain style? */
377 /** Is the tag optional for any non-plain style? */
379 /** The scalar style. */
380 yaml_scalar_style_t style;
383 /** The sequence parameters (for @c YAML_SEQUENCE_START_EVENT). */
389 /** Is the tag optional? */
391 /** The sequence style. */
392 yaml_sequence_style_t style;
395 /** The mapping parameters (for @c YAML_MAPPING_START_EVENT). */
401 /** Is the tag optional? */
403 /** The mapping style. */
404 yaml_mapping_style_t style;
409 /** The beginning of the token. */
410 yaml_mark_t start_mark;
411 /** The end of the token. */
412 yaml_mark_t end_mark;
417 * Create the STREAM-START event.
419 * @param[in] event An empty event object.
421 * @returns @c 1 if the function succeeded, @c 0 on error.
425 yaml_stream_start_event_initialize(yaml_event_t *event,
426 yaml_encoding_t encoding);
429 * Create the STREAM-END event.
431 * @param[in] event An empty event object.
433 * @returns @c 1 if the function succeeded, @c 0 on error.
437 yaml_stream_end_event_initialize(yaml_event_t *event);
440 * Create the DOCUMENT-START event.
442 * The @a implicit argument is considered as a stylistic parameter and may be
443 * ignored by the emitter.
445 * @param[in] event An empty event object.
446 * @param[in] version_directive The %YAML directive value or @c NULL.
447 * @param[in] tag_directives_start The beginning of the %TAG directives list.
448 * @param[in] tag_directives_end The end of the %TAG directives list.
449 * @param[in] implicit If the document start indicator is implicit.
451 * @returns @c 1 if the function succeeded, @c 0 on error.
455 yaml_document_start_event_initialize(yaml_event_t *event,
456 yaml_version_directive_t *version_directive,
457 yaml_tag_directive_t *tag_directives_start,
458 yaml_tag_directive_t *tag_directives_end,
462 * Create the DOCUMENT-END event.
464 * The @a implicit argument is considered as a stylistic parameter and may be
465 * ignored by the emitter.
467 * @param[in] event An empty event object.
468 * @param[in] implicit If the document end indicator is implicit.
470 * @returns @c 1 if the function succeeded, @c 0 on error.
474 yaml_document_end_event_initialize(yaml_event_t *event, int implicit);
477 * Create an ALIAS event.
479 * @param[in] event An empty event object.
480 * @param[in] anchor The anchor value.
482 * @returns @c 1 if the function succeeded, @c 0 on error.
486 yaml_alias_event_initialize(yaml_event_t *event, yaml_char_t *anchor);
489 * Create a SCALAR event.
491 * The @a style argument may be ignored by the emitter.
493 * Either the @a tag attribute or one of the @a plain_implicit and
494 * @a quoted_implicit flags must be set.
496 * @param[in] event An empty event object.
497 * @param[in] anchor The scalar anchor or @c NULL.
498 * @param[in] tag The scalar tag or @c NULL.
499 * @param[in] value The scalar value.
500 * @param[in] length The length of the scalar value.
501 * @param[in] plain_implicit If the tag may be omitted for the plain style.
502 * @param[in] quoted_implicit If the tag may be omitted for any non-plain style.
503 * @param[in] style The scalar style.
505 * @returns @c 1 if the function succeeded, @c 0 on error.
509 yaml_scalar_event_initialize(yaml_event_t *event,
510 yaml_char_t *anchor, yaml_char_t *tag,
511 yaml_char_t *value, size_t length,
512 int plain_implicit, int quoted_implicit,
513 yaml_scalar_style_t style);
516 * Create a SEQUENCE-START event.
518 * The @a style argument may be ignored by the emitter.
520 * Either the @a tag attribute or the @a implicit flag must be set.
522 * @param[in] event An empty event object.
523 * @param[in] anchor The sequence anchor or @c NULL.
524 * @param[in] tag The sequence tag or @c NULL.
525 * @param[in] implicit If the tag may be omitted.
526 * @param[in] style The sequence style.
528 * @returns @c 1 if the function succeeded, @c 0 on error.
532 yaml_sequence_start_event_initialize(yaml_event_t *event,
533 yaml_char_t *anchor, yaml_char_t *tag, int implicit,
534 yaml_sequence_style_t style);
537 * Create a SEQUENCE-END event.
539 * @param[in] event An empty event object.
541 * @returns @c 1 if the function succeeded, @c 0 on error.
545 yaml_sequence_end_event_initialize(yaml_event_t *event);
548 * Create a MAPPING-START event.
550 * The @a style argument may be ignored by the emitter.
552 * Either the @a tag attribute or the @a implicit flag must be set.
554 * @param[in] event An empty event object.
555 * @param[in] anchor The mapping anchor or @c NULL.
556 * @param[in] tag The mapping tag or @c NULL.
557 * @param[in] implicit If the tag may be omitted.
558 * @param[in] style The mapping style.
560 * @returns @c 1 if the function succeeded, @c 0 on error.
564 yaml_mapping_start_event_initialize(yaml_event_t *event,
565 yaml_char_t *anchor, yaml_char_t *tag, int implicit,
566 yaml_mapping_style_t style);
569 * Create a MAPPING-END event.
571 * @param[in] event An empty event object.
573 * @returns @c 1 if the function succeeded, @c 0 on error.
577 yaml_mapping_end_event_initialize(yaml_event_t *event);
580 * Free any memory allocated for an event object.
582 * @param[in] event An event object.
586 yaml_event_delete(yaml_event_t *event);
591 * @defgroup parser Parser Definitions
596 * The prototype of a read handler.
598 * The read handler is called when the parser needs to read more bytes from the
599 * source. The handler should write not more than @a size bytes to the @a
600 * buffer. The number of written bytes should be set to the @a length variable.
602 * @param[in] data A pointer to an application data specified by
603 * @c yaml_parser_set_read_handler.
604 * @param[out] buffer The buffer to write the data from the source.
605 * @param[in] size The size of the buffer.
606 * @param[out] size_read The actual number of bytes read from the source.
608 * @returns On success, the handler should return @c 1. If the handler failed,
609 * the returned value should be @c 0. On EOF, the handler should set the
610 * @a size_read to @c 0 and return @c 1.
613 typedef int yaml_read_handler_t(void *data, unsigned char *buffer, size_t size,
617 * This structure holds information about a potential simple key.
621 /** Is a simple key possible? */
624 /** Is a simple key required? */
627 /** The number of the token. */
630 /** The position mark. */
635 * The states of the parser.
638 YAML_PARSE_STREAM_START_STATE,
639 YAML_PARSE_IMPLICIT_DOCUMENT_START_STATE,
640 YAML_PARSE_DOCUMENT_START_STATE,
641 YAML_PARSE_DOCUMENT_CONTENT_STATE,
642 YAML_PARSE_DOCUMENT_END_STATE,
643 YAML_PARSE_BLOCK_NODE_STATE,
644 YAML_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE,
645 YAML_PARSE_FLOW_NODE_STATE,
646 YAML_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE,
647 YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE,
648 YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE,
649 YAML_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE,
650 YAML_PARSE_BLOCK_MAPPING_KEY_STATE,
651 YAML_PARSE_BLOCK_MAPPING_VALUE_STATE,
652 YAML_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE,
653 YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE,
654 YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE,
655 YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE,
656 YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE,
657 YAML_PARSE_FLOW_MAPPING_FIRST_KEY_STATE,
658 YAML_PARSE_FLOW_MAPPING_KEY_STATE,
659 YAML_PARSE_FLOW_MAPPING_VALUE_STATE,
660 YAML_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE,
662 } yaml_parser_state_t;
665 * The parser structure.
667 * All members are internal. Manage the structure using the @c yaml_parser_
668 * family of functions.
674 * @name Error handling
679 yaml_error_type_t error;
680 /** Error description. */
682 /** The byte about which the problem occured. */
683 size_t problem_offset;
684 /** The problematic value (@c -1 is none). */
686 /** The problem position. */
687 yaml_mark_t problem_mark;
688 /** The error context. */
690 /** The context position. */
691 yaml_mark_t context_mark;
703 yaml_read_handler_t *read_handler;
705 /** A pointer for passing to the read handler. */
706 void *read_handler_data;
708 /** Standard (string or file) input data. */
710 /** String input data. */
712 /** The string start pointer. */
713 unsigned char *start;
714 /** The string end pointer. */
716 /** The string current position. */
717 unsigned char *current;
720 /** File input data. */
727 /** The working buffer. */
729 /** The beginning of the buffer. */
731 /** The end of the buffer. */
733 /** The current position of the buffer. */
734 yaml_char_t *pointer;
735 /** The last filled position of the buffer. */
739 /* The number of unread characters in the buffer. */
742 /** The raw buffer. */
744 /** The beginning of the buffer. */
745 unsigned char *start;
746 /** The end of the buffer. */
748 /** The current position of the buffer. */
749 unsigned char *pointer;
750 /** The last filled position of the buffer. */
754 /** The input encoding. */
755 yaml_encoding_t encoding;
757 /** The offset of the current position (in bytes). */
760 /** The mark of the current position. */
768 * @name Scanner stuff
772 /** Have we started to scan the input stream? */
773 int stream_start_produced;
775 /** Have we reached the end of the input stream? */
776 int stream_end_produced;
778 /** The number of unclosed '[' and '{' indicators. */
781 /** The tokens queue. */
783 /** The beginning of the tokens queue. */
785 /** The end of the tokens queue. */
787 /** The head of the tokens queue. */
789 /** The tail of the tokens queue. */
793 /** The number of tokens fetched from the queue. */
794 size_t tokens_parsed;
796 /* Does the tokens queue contain a token ready for dequeueing. */
799 /** The indentation levels stack. */
801 /** The beginning of the stack. */
803 /** The end of the stack. */
805 /** The top of the stack. */
809 /** The current indentation level. */
812 /** May a simple key occur at the current position? */
813 int simple_key_allowed;
815 /** The stack of simple keys. */
817 /** The beginning of the stack. */
818 yaml_simple_key_t *start;
819 /** The end of the stack. */
820 yaml_simple_key_t *end;
821 /** The top of the stack. */
822 yaml_simple_key_t *top;
834 /** The parser states stack. */
836 /** The beginning of the stack. */
837 yaml_parser_state_t *start;
838 /** The end of the stack. */
839 yaml_parser_state_t *end;
840 /** The top of the stack. */
841 yaml_parser_state_t *top;
844 /** The current parser state. */
845 yaml_parser_state_t state;
847 /** The stack of marks. */
849 /** The beginning of the stack. */
851 /** The end of the stack. */
853 /** The top of the stack. */
857 /** The list of TAG directives. */
859 /** The beginning of the list. */
860 yaml_tag_directive_t *start;
861 /** The end of the list. */
862 yaml_tag_directive_t *end;
863 /** The top of the list. */
864 yaml_tag_directive_t *top;
874 * Initialize a parser.
876 * This function creates a new parser object. An application is responsible
877 * for destroying the object using the @c yaml_parser_delete function.
879 * @param[in] parser An empty parser object.
881 * @returns @c 1 if the function succeeded, @c 0 on error.
885 yaml_parser_initialize(yaml_parser_t *parser);
890 * @param[in] parser A parser object.
894 yaml_parser_delete(yaml_parser_t *parser);
897 * Set a string input.
899 * Note that the @a input pointer must be valid while the @a parser object
900 * exists. The application is responsible for destroing @a input after
901 * destroying the @a parser.
903 * @param[in] parser A parser object.
904 * @param[in] input A source data.
905 * @param[in] size The length of the source data in bytes.
909 yaml_parser_set_input_string(yaml_parser_t *parser,
910 unsigned char *input, size_t size);
915 * @a file should be a file object open for reading. The application is
916 * responsible for closing the @a file.
918 * @param[in] parser A parser object.
919 * @param[in] file An open file.
923 yaml_parser_set_input_file(yaml_parser_t *parser, FILE *file);
926 * Set a generic input handler.
928 * @param[in] parser A parser object.
929 * @param[in] handler A read handler.
930 * @param[in] data Any application data for passing to the read handler.
934 yaml_parser_set_input(yaml_parser_t *parser,
935 yaml_read_handler_t *handler, void *data);
938 * Set the source encoding.
940 * @param[in] parser A parser object.
941 * @param[in] encoding The source encoding.
945 yaml_parser_set_encoding(yaml_parser_t *parser, yaml_encoding_t encoding);
948 * Scan the input stream and produce the next token.
950 * Call the function subsequently to produce a sequence of tokens corresponding
951 * to the input stream. The initial token has the type
952 * @c YAML_STREAM_START_TOKEN while the ending token has the type
953 * @c YAML_STREAM_END_TOKEN.
955 * An application is responsible for freeing any buffers associated with the
956 * produced token object using the @c yaml_token_delete function.
958 * An application must not alternate the calls of @c yaml_parser_scan with the
959 * calls of @c yaml_parser_parse. Doing this will break the parser.
961 * @param[in] parser A parser object.
962 * @param[in] token An empty token object.
964 * @returns @c 1 if the function succeeded, @c 0 on error.
968 yaml_parser_scan(yaml_parser_t *parser, yaml_token_t *token);
971 * Parse the input stream and produce the next parsing event.
973 * Call the function subsequently to produce a sequence of events corresponding
974 * to the input stream. The initial event has the type
975 * @c YAML_STREAM_START_EVENT while the ending event has the type
976 * @c YAML_STREAM_END_EVENT.
978 * An application is responsible for freeing any buffers associated with the
979 * produced event object using the @c yaml_event_delete function.
981 * An application must not alternate the calls of @c yaml_parser_scan with the
982 * calls of @c yaml_parser_parse. Doing this will break the parser.
984 * @param[in] parser A parser object.
985 * @param[in] event An empty event object.
987 * @returns @c 1 if the function succeeded, @c 0 on error.
991 yaml_parser_parse(yaml_parser_t *parser, yaml_event_t *event);
996 * @defgroup emitter Emitter Definitions
1001 * The prototype of a write handler.
1003 * The write handler is called when the emitter needs to flush the accumulated
1004 * characters to the output. The handler should write @a size bytes of the
1005 * @a buffer to the output.
1007 * @param[in] data A pointer to an application data specified by
1008 * @c yaml_emitter_set_write_handler.
1009 * @param[out] buffer The buffer with bytes to be written.
1010 * @param[in] size The size of the buffer.
1012 * @returns On success, the handler should return @c 1. If the handler failed,
1013 * the returned value should be @c 0.
1016 typedef int yaml_write_handler_t(void *data, unsigned char *buffer, size_t size);
1018 /** The emitter states. */
1020 YAML_EMIT_STREAM_START_STATE,
1021 YAML_EMIT_FIRST_DOCUMENT_START_STATE,
1022 YAML_EMIT_DOCUMENT_START_STATE,
1023 YAML_EMIT_DOCUMENT_CONTENT_STATE,
1024 YAML_EMIT_DOCUMENT_END_STATE,
1025 YAML_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE,
1026 YAML_EMIT_FLOW_SEQUENCE_ITEM_STATE,
1027 YAML_EMIT_FLOW_MAPPING_FIRST_KEY_STATE,
1028 YAML_EMIT_FLOW_MAPPING_KEY_STATE,
1029 YAML_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE,
1030 YAML_EMIT_FLOW_MAPPING_VALUE_STATE,
1031 YAML_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE,
1032 YAML_EMIT_BLOCK_SEQUENCE_ITEM_STATE,
1033 YAML_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE,
1034 YAML_EMIT_BLOCK_MAPPING_KEY_STATE,
1035 YAML_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE,
1036 YAML_EMIT_BLOCK_MAPPING_VALUE_STATE,
1038 } yaml_emitter_state_t;
1041 * The emitter structure.
1043 * All members are internal. Manage the structure using the @c yaml_emitter_
1044 * family of functions.
1050 * @name Error handling
1055 yaml_error_type_t error;
1056 /** Error description. */
1057 const char *problem;
1064 * @name Writer stuff
1068 /** Write handler. */
1069 yaml_write_handler_t *write_handler;
1071 /** A pointer for passing to the white handler. */
1072 void *write_handler_data;
1074 /** Standard (string or file) output data. */
1076 /** String output data. */
1078 /** The buffer pointer. */
1079 unsigned char *buffer;
1080 /** The buffer size. */
1082 /** The number of written bytes. */
1083 size_t *size_written;
1086 /** File output data. */
1090 /** The working buffer. */
1092 /** The beginning of the buffer. */
1094 /** The end of the buffer. */
1096 /** The current position of the buffer. */
1097 yaml_char_t *pointer;
1098 /** The last filled position of the buffer. */
1102 /** The raw buffer. */
1104 /** The beginning of the buffer. */
1105 unsigned char *start;
1106 /** The end of the buffer. */
1108 /** The current position of the buffer. */
1109 unsigned char *pointer;
1110 /** The last filled position of the buffer. */
1111 unsigned char *last;
1114 /** The stream encoding. */
1115 yaml_encoding_t encoding;
1122 * @name Emitter stuff
1126 /** If the output is in the canonical style? */
1128 /** The number of indentation spaces. */
1130 /** The preferred width of the output lines. */
1132 /** Allow unescaped non-ASCII characters? */
1134 /** The preferred line break. */
1135 yaml_break_t line_break;
1137 /** The stack of states. */
1139 /** The beginning of the stack. */
1140 yaml_emitter_state_t *start;
1141 /** The end of the stack. */
1142 yaml_emitter_state_t *end;
1143 /** The top of the stack. */
1144 yaml_emitter_state_t *top;
1147 /** The current emitter state. */
1148 yaml_emitter_state_t state;
1150 /** The event queue. */
1152 /** The beginning of the event queue. */
1153 yaml_event_t *start;
1154 /** The end of the event queue. */
1156 /** The head of the event queue. */
1158 /** The tail of the event queue. */
1162 /** The stack of indentation levels. */
1164 /** The beginning of the stack. */
1166 /** The end of the stack. */
1168 /** The top of the stack. */
1172 /** The list of tag directives. */
1174 /** The beginning of the list. */
1175 yaml_tag_directive_t *start;
1176 /** The end of the list. */
1177 yaml_tag_directive_t *end;
1178 /** The top of the list. */
1179 yaml_tag_directive_t *top;
1182 /** The current indentation level. */
1185 /** The current flow level. */
1188 /** Is it the document root context? */
1190 /** Is it a sequence context? */
1191 int sequence_context;
1192 /** Is it a mapping context? */
1193 int mapping_context;
1194 /** Is it a simple mapping key context? */
1195 int simple_key_context;
1197 /** The current line. */
1199 /** The current column. */
1201 /** If the last character was a whitespace? */
1203 /** If the last character was an indentation character (' ', '-', '?', ':')? */
1213 * Initialize an emitter.
1215 * This function creates a new emitter object. An application is responsible
1216 * for destroying the object using the @c yaml_emitter_delete function.
1218 * @param[in] emitter An empty parser object.
1220 * @returns @c 1 if the function succeeded, @c 0 on error.
1224 yaml_emitter_initialize(yaml_emitter_t *emitter);
1227 * Destroy an emitter.
1229 * @param[in] emitter An emitter object.
1233 yaml_emitter_delete(yaml_emitter_t *emitter);
1236 * Set a string output.
1238 * The emitter will write the output characters to the @a output buffer of the
1239 * size @a size. The emitter will set @a size_written to the number of written
1240 * bytes. If the buffer is smaller than required, the emitter produces the
1241 * YAML_WRITE_ERROR error.
1243 * @param[in] emitter An emitter object.
1244 * @param[in] output An output buffer.
1245 * @param[in] size The buffer size.
1246 * @param[in] size_written The pointer to save the number of written bytes.
1250 yaml_emitter_set_output_string(yaml_emitter_t *emitter,
1251 unsigned char *output, size_t size, size_t *size_written);
1254 * Set a file output.
1256 * @a file should be a file object open for writing. The application is
1257 * responsible for closing the @a file.
1259 * @param[in] emitter An emitter object.
1260 * @param[in] file An open file.
1264 yaml_emitter_set_output_file(yaml_emitter_t *emitter, FILE *file);
1267 * Set a generic output handler.
1269 * @param[in] emitter An emitter object.
1270 * @param[in] handler A write handler.
1271 * @param[in] data Any application data for passing to the write handler.
1275 yaml_emitter_set_output(yaml_emitter_t *emitter,
1276 yaml_write_handler_t *handler, void *data);
1279 * Set the output encoding.
1281 * @param[in] emitter An emitter object.
1282 * @param[in] encoding The output encoding.
1286 yaml_emitter_set_encoding(yaml_emitter_t *emitter, yaml_encoding_t encoding);
1289 * Set if the output should be in the "canonical" format as in the YAML
1292 * @param[in] emitter An emitter object.
1293 * @param[in] canonical If the output is canonical.
1297 yaml_emitter_set_canonical(yaml_emitter_t *emitter, int canonical);
1300 * Set the intendation increment.
1302 * @param[in] emitter An emitter object.
1303 * @param[in] indent The indentation increment (1 < . < 10).
1307 yaml_emitter_set_indent(yaml_emitter_t *emitter, int indent);
1310 * Set the preferred line width. @c -1 means unlimited.
1312 * @param[in] emitter An emitter object.
1313 * @param[in] width The preferred line width.
1317 yaml_emitter_set_width(yaml_emitter_t *emitter, int width);
1320 * Set if unescaped non-ASCII characters are allowed.
1322 * @param[in] emitter An emitter object.
1323 * @param[in] unicode If unescaped Unicode characters are allowed.
1327 yaml_emitter_set_unicode(yaml_emitter_t *emitter, int unicode);
1330 * Set the preferred line break.
1332 * @param[in] emitter An emitter object.
1333 * @param[in] line_break The preferred line break.
1337 yaml_emitter_set_break(yaml_emitter_t *emitter, yaml_break_t line_break);
1342 * The event object may be generated using the @c yaml_parser_parse function.
1343 * The emitter takes the responsibility for the event object and destroys its
1344 * content after it is emitted. The event object is destroyed even if the
1347 * @param[in] emitter An emitter object.
1348 * @param[in] event An event object.
1350 * @returns @c 1 if the function succeeded, @c 0 on error.
1354 yaml_emitter_emit(yaml_emitter_t *emitter, yaml_event_t *event);
1357 * Flush the accumulated characters to the output.
1359 * @param[in] emitter An emitter object.
1361 * @returns @c 1 if the function succeeded, @c 0 on error.
1365 yaml_emitter_flush(yaml_emitter_t *emitter);
1373 #endif /* #ifndef YAML_H */