153efea5cSLisandro Dalcin /** 253efea5cSLisandro Dalcin * @file yaml.h 353efea5cSLisandro Dalcin * @brief Public interface for libyaml. 453efea5cSLisandro Dalcin * 553efea5cSLisandro Dalcin * Include the header file with the code: 653efea5cSLisandro Dalcin * @code 753efea5cSLisandro Dalcin * #include <yaml.h> 853efea5cSLisandro Dalcin * @endcode 953efea5cSLisandro Dalcin */ 1053efea5cSLisandro Dalcin 1153efea5cSLisandro Dalcin #ifndef YAML_H 1253efea5cSLisandro Dalcin #define YAML_H 1353efea5cSLisandro Dalcin 1453efea5cSLisandro Dalcin #ifdef __cplusplus 1553efea5cSLisandro Dalcin extern "C" { 1653efea5cSLisandro Dalcin #endif 1753efea5cSLisandro Dalcin 1853efea5cSLisandro Dalcin #include <stdlib.h> 1953efea5cSLisandro Dalcin #include <stdio.h> 2053efea5cSLisandro Dalcin #include <string.h> 2153efea5cSLisandro Dalcin 2253efea5cSLisandro Dalcin /** 2353efea5cSLisandro Dalcin * @defgroup export Export Definitions 2453efea5cSLisandro Dalcin * @{ 2553efea5cSLisandro Dalcin */ 2653efea5cSLisandro Dalcin 2753efea5cSLisandro Dalcin /** The public API declaration. */ 2853efea5cSLisandro Dalcin 2953efea5cSLisandro Dalcin #define YAML_DECLARE(type) static type 3053efea5cSLisandro Dalcin 3153efea5cSLisandro Dalcin /** @} */ 3253efea5cSLisandro Dalcin 3353efea5cSLisandro Dalcin /** 3453efea5cSLisandro Dalcin * @defgroup basic Basic Types 3553efea5cSLisandro Dalcin * @{ 3653efea5cSLisandro Dalcin */ 3753efea5cSLisandro Dalcin 3853efea5cSLisandro Dalcin /** The character type (UTF-8 octet). */ 3953efea5cSLisandro Dalcin typedef unsigned char yaml_char_t; 4053efea5cSLisandro Dalcin 4153efea5cSLisandro Dalcin /** The version directive data. */ 4253efea5cSLisandro Dalcin typedef struct yaml_version_directive_s { 4353efea5cSLisandro Dalcin /** The major version number. */ 4453efea5cSLisandro Dalcin int major; 4553efea5cSLisandro Dalcin /** The minor version number. */ 4653efea5cSLisandro Dalcin int minor; 4753efea5cSLisandro Dalcin } yaml_version_directive_t; 4853efea5cSLisandro Dalcin 4953efea5cSLisandro Dalcin /** The tag directive data. */ 5053efea5cSLisandro Dalcin typedef struct yaml_tag_directive_s { 5153efea5cSLisandro Dalcin /** The tag handle. */ 5253efea5cSLisandro Dalcin yaml_char_t *handle; 5353efea5cSLisandro Dalcin /** The tag prefix. */ 5453efea5cSLisandro Dalcin yaml_char_t *prefix; 5553efea5cSLisandro Dalcin } yaml_tag_directive_t; 5653efea5cSLisandro Dalcin 5753efea5cSLisandro Dalcin /** The stream encoding. */ 5853efea5cSLisandro Dalcin typedef enum yaml_encoding_e { 5953efea5cSLisandro Dalcin /** Let the parser choose the encoding. */ 6053efea5cSLisandro Dalcin YAML_ANY_ENCODING, 6153efea5cSLisandro Dalcin /** The default UTF-8 encoding. */ 6253efea5cSLisandro Dalcin YAML_UTF8_ENCODING, 6353efea5cSLisandro Dalcin /** The UTF-16-LE encoding with BOM. */ 6453efea5cSLisandro Dalcin YAML_UTF16LE_ENCODING, 6553efea5cSLisandro Dalcin /** The UTF-16-BE encoding with BOM. */ 6653efea5cSLisandro Dalcin YAML_UTF16BE_ENCODING 6753efea5cSLisandro Dalcin } yaml_encoding_t; 6853efea5cSLisandro Dalcin 6953efea5cSLisandro Dalcin /** Line break types. */ 7053efea5cSLisandro Dalcin 7153efea5cSLisandro Dalcin typedef enum yaml_break_e { 7253efea5cSLisandro Dalcin /** Let the parser choose the break type. */ 7353efea5cSLisandro Dalcin YAML_ANY_BREAK, 7453efea5cSLisandro Dalcin /** Use CR for line breaks (Mac style). */ 7553efea5cSLisandro Dalcin YAML_CR_BREAK, 7653efea5cSLisandro Dalcin /** Use LN for line breaks (Unix style). */ 7753efea5cSLisandro Dalcin YAML_LN_BREAK, 7853efea5cSLisandro Dalcin /** Use CR LN for line breaks (DOS style). */ 7953efea5cSLisandro Dalcin YAML_CRLN_BREAK 8053efea5cSLisandro Dalcin } yaml_break_t; 8153efea5cSLisandro Dalcin 8253efea5cSLisandro Dalcin /** Many bad things could happen with the parser and emitter. */ 8353efea5cSLisandro Dalcin typedef enum yaml_error_type_e { 8453efea5cSLisandro Dalcin /** No error is produced. */ 8553efea5cSLisandro Dalcin YAML_NO_ERROR, 8653efea5cSLisandro Dalcin 8753efea5cSLisandro Dalcin /** Cannot allocate or reallocate a block of memory. */ 8853efea5cSLisandro Dalcin YAML_MEMORY_ERROR, 8953efea5cSLisandro Dalcin 9053efea5cSLisandro Dalcin /** Cannot read or decode the input stream. */ 9153efea5cSLisandro Dalcin YAML_READER_ERROR, 9253efea5cSLisandro Dalcin /** Cannot scan the input stream. */ 9353efea5cSLisandro Dalcin YAML_SCANNER_ERROR, 9453efea5cSLisandro Dalcin /** Cannot parse the input stream. */ 9553efea5cSLisandro Dalcin YAML_PARSER_ERROR, 9653efea5cSLisandro Dalcin /** Cannot compose a YAML document. */ 9753efea5cSLisandro Dalcin YAML_COMPOSER_ERROR, 9853efea5cSLisandro Dalcin 9953efea5cSLisandro Dalcin /** Cannot write to the output stream. */ 10053efea5cSLisandro Dalcin YAML_WRITER_ERROR, 10153efea5cSLisandro Dalcin /** Cannot emit a YAML stream. */ 10253efea5cSLisandro Dalcin YAML_EMITTER_ERROR 10353efea5cSLisandro Dalcin } yaml_error_type_t; 10453efea5cSLisandro Dalcin 10553efea5cSLisandro Dalcin /** The pointer position. */ 10653efea5cSLisandro Dalcin typedef struct yaml_mark_s { 10753efea5cSLisandro Dalcin /** The position index. */ 10853efea5cSLisandro Dalcin size_t index; 10953efea5cSLisandro Dalcin 11053efea5cSLisandro Dalcin /** The position line. */ 11153efea5cSLisandro Dalcin size_t line; 11253efea5cSLisandro Dalcin 11353efea5cSLisandro Dalcin /** The position column. */ 11453efea5cSLisandro Dalcin size_t column; 11553efea5cSLisandro Dalcin } yaml_mark_t; 11653efea5cSLisandro Dalcin 11753efea5cSLisandro Dalcin /** @} */ 11853efea5cSLisandro Dalcin 11953efea5cSLisandro Dalcin /** 12053efea5cSLisandro Dalcin * @defgroup styles Node Styles 12153efea5cSLisandro Dalcin * @{ 12253efea5cSLisandro Dalcin */ 12353efea5cSLisandro Dalcin 12453efea5cSLisandro Dalcin /** Scalar styles. */ 12553efea5cSLisandro Dalcin typedef enum yaml_scalar_style_e { 12653efea5cSLisandro Dalcin /** Let the emitter choose the style. */ 12753efea5cSLisandro Dalcin YAML_ANY_SCALAR_STYLE, 12853efea5cSLisandro Dalcin 12953efea5cSLisandro Dalcin /** The plain scalar style. */ 13053efea5cSLisandro Dalcin YAML_PLAIN_SCALAR_STYLE, 13153efea5cSLisandro Dalcin 13253efea5cSLisandro Dalcin /** The single-quoted scalar style. */ 13353efea5cSLisandro Dalcin YAML_SINGLE_QUOTED_SCALAR_STYLE, 13453efea5cSLisandro Dalcin /** The double-quoted scalar style. */ 13553efea5cSLisandro Dalcin YAML_DOUBLE_QUOTED_SCALAR_STYLE, 13653efea5cSLisandro Dalcin 13753efea5cSLisandro Dalcin /** The literal scalar style. */ 13853efea5cSLisandro Dalcin YAML_LITERAL_SCALAR_STYLE, 13953efea5cSLisandro Dalcin /** The folded scalar style. */ 14053efea5cSLisandro Dalcin YAML_FOLDED_SCALAR_STYLE 14153efea5cSLisandro Dalcin } yaml_scalar_style_t; 14253efea5cSLisandro Dalcin 14353efea5cSLisandro Dalcin /** Sequence styles. */ 14453efea5cSLisandro Dalcin typedef enum yaml_sequence_style_e { 14553efea5cSLisandro Dalcin /** Let the emitter choose the style. */ 14653efea5cSLisandro Dalcin YAML_ANY_SEQUENCE_STYLE, 14753efea5cSLisandro Dalcin 14853efea5cSLisandro Dalcin /** The block sequence style. */ 14953efea5cSLisandro Dalcin YAML_BLOCK_SEQUENCE_STYLE, 15053efea5cSLisandro Dalcin /** The flow sequence style. */ 15153efea5cSLisandro Dalcin YAML_FLOW_SEQUENCE_STYLE 15253efea5cSLisandro Dalcin } yaml_sequence_style_t; 15353efea5cSLisandro Dalcin 15453efea5cSLisandro Dalcin /** Mapping styles. */ 15553efea5cSLisandro Dalcin typedef enum yaml_mapping_style_e { 15653efea5cSLisandro Dalcin /** Let the emitter choose the style. */ 15753efea5cSLisandro Dalcin YAML_ANY_MAPPING_STYLE, 15853efea5cSLisandro Dalcin 15953efea5cSLisandro Dalcin /** The block mapping style. */ 16053efea5cSLisandro Dalcin YAML_BLOCK_MAPPING_STYLE, 16153efea5cSLisandro Dalcin /** The flow mapping style. */ 16253efea5cSLisandro Dalcin YAML_FLOW_MAPPING_STYLE 16353efea5cSLisandro Dalcin /* YAML_FLOW_SET_MAPPING_STYLE */ 16453efea5cSLisandro Dalcin } yaml_mapping_style_t; 16553efea5cSLisandro Dalcin 16653efea5cSLisandro Dalcin /** @} */ 16753efea5cSLisandro Dalcin 16853efea5cSLisandro Dalcin /** 16953efea5cSLisandro Dalcin * @defgroup tokens Tokens 17053efea5cSLisandro Dalcin * @{ 17153efea5cSLisandro Dalcin */ 17253efea5cSLisandro Dalcin 17353efea5cSLisandro Dalcin /** Token types. */ 17453efea5cSLisandro Dalcin typedef enum yaml_token_type_e { 17553efea5cSLisandro Dalcin /** An empty token. */ 17653efea5cSLisandro Dalcin YAML_NO_TOKEN, 17753efea5cSLisandro Dalcin 17853efea5cSLisandro Dalcin /** A STREAM-START token. */ 17953efea5cSLisandro Dalcin YAML_STREAM_START_TOKEN, 18053efea5cSLisandro Dalcin /** A STREAM-END token. */ 18153efea5cSLisandro Dalcin YAML_STREAM_END_TOKEN, 18253efea5cSLisandro Dalcin 18353efea5cSLisandro Dalcin /** A VERSION-DIRECTIVE token. */ 18453efea5cSLisandro Dalcin YAML_VERSION_DIRECTIVE_TOKEN, 18553efea5cSLisandro Dalcin /** A TAG-DIRECTIVE token. */ 18653efea5cSLisandro Dalcin YAML_TAG_DIRECTIVE_TOKEN, 18753efea5cSLisandro Dalcin /** A DOCUMENT-START token. */ 18853efea5cSLisandro Dalcin YAML_DOCUMENT_START_TOKEN, 18953efea5cSLisandro Dalcin /** A DOCUMENT-END token. */ 19053efea5cSLisandro Dalcin YAML_DOCUMENT_END_TOKEN, 19153efea5cSLisandro Dalcin 19253efea5cSLisandro Dalcin /** A BLOCK-SEQUENCE-START token. */ 19353efea5cSLisandro Dalcin YAML_BLOCK_SEQUENCE_START_TOKEN, 19453efea5cSLisandro Dalcin /** A BLOCK-MAPPING-START token. */ 19553efea5cSLisandro Dalcin YAML_BLOCK_MAPPING_START_TOKEN, 19653efea5cSLisandro Dalcin /** A BLOCK-END token. */ 19753efea5cSLisandro Dalcin YAML_BLOCK_END_TOKEN, 19853efea5cSLisandro Dalcin 19953efea5cSLisandro Dalcin /** A FLOW-SEQUENCE-START token. */ 20053efea5cSLisandro Dalcin YAML_FLOW_SEQUENCE_START_TOKEN, 20153efea5cSLisandro Dalcin /** A FLOW-SEQUENCE-END token. */ 20253efea5cSLisandro Dalcin YAML_FLOW_SEQUENCE_END_TOKEN, 20353efea5cSLisandro Dalcin /** A FLOW-MAPPING-START token. */ 20453efea5cSLisandro Dalcin YAML_FLOW_MAPPING_START_TOKEN, 20553efea5cSLisandro Dalcin /** A FLOW-MAPPING-END token. */ 20653efea5cSLisandro Dalcin YAML_FLOW_MAPPING_END_TOKEN, 20753efea5cSLisandro Dalcin 20853efea5cSLisandro Dalcin /** A BLOCK-ENTRY token. */ 20953efea5cSLisandro Dalcin YAML_BLOCK_ENTRY_TOKEN, 21053efea5cSLisandro Dalcin /** A FLOW-ENTRY token. */ 21153efea5cSLisandro Dalcin YAML_FLOW_ENTRY_TOKEN, 21253efea5cSLisandro Dalcin /** A KEY token. */ 21353efea5cSLisandro Dalcin YAML_KEY_TOKEN, 21453efea5cSLisandro Dalcin /** A VALUE token. */ 21553efea5cSLisandro Dalcin YAML_VALUE_TOKEN, 21653efea5cSLisandro Dalcin 21753efea5cSLisandro Dalcin /** An ALIAS token. */ 21853efea5cSLisandro Dalcin YAML_ALIAS_TOKEN, 21953efea5cSLisandro Dalcin /** An ANCHOR token. */ 22053efea5cSLisandro Dalcin YAML_ANCHOR_TOKEN, 22153efea5cSLisandro Dalcin /** A TAG token. */ 22253efea5cSLisandro Dalcin YAML_TAG_TOKEN, 22353efea5cSLisandro Dalcin /** A SCALAR token. */ 22453efea5cSLisandro Dalcin YAML_SCALAR_TOKEN 22553efea5cSLisandro Dalcin } yaml_token_type_t; 22653efea5cSLisandro Dalcin 22753efea5cSLisandro Dalcin /** The token structure. */ 22853efea5cSLisandro Dalcin typedef struct yaml_token_s { 22953efea5cSLisandro Dalcin 23053efea5cSLisandro Dalcin /** The token type. */ 23153efea5cSLisandro Dalcin yaml_token_type_t type; 23253efea5cSLisandro Dalcin 23353efea5cSLisandro Dalcin /** The token data. */ 23453efea5cSLisandro Dalcin union { 23553efea5cSLisandro Dalcin 23653efea5cSLisandro Dalcin /** The stream start (for @c YAML_STREAM_START_TOKEN). */ 23753efea5cSLisandro Dalcin struct { 23853efea5cSLisandro Dalcin /** The stream encoding. */ 23953efea5cSLisandro Dalcin yaml_encoding_t encoding; 24053efea5cSLisandro Dalcin } stream_start; 24153efea5cSLisandro Dalcin 24253efea5cSLisandro Dalcin /** The alias (for @c YAML_ALIAS_TOKEN). */ 24353efea5cSLisandro Dalcin struct { 24453efea5cSLisandro Dalcin /** The alias value. */ 24553efea5cSLisandro Dalcin yaml_char_t *value; 24653efea5cSLisandro Dalcin } alias; 24753efea5cSLisandro Dalcin 24853efea5cSLisandro Dalcin /** The anchor (for @c YAML_ANCHOR_TOKEN). */ 24953efea5cSLisandro Dalcin struct { 25053efea5cSLisandro Dalcin /** The anchor value. */ 25153efea5cSLisandro Dalcin yaml_char_t *value; 25253efea5cSLisandro Dalcin } anchor; 25353efea5cSLisandro Dalcin 25453efea5cSLisandro Dalcin /** The tag (for @c YAML_TAG_TOKEN). */ 25553efea5cSLisandro Dalcin struct { 25653efea5cSLisandro Dalcin /** The tag handle. */ 25753efea5cSLisandro Dalcin yaml_char_t *handle; 25853efea5cSLisandro Dalcin /** The tag suffix. */ 25953efea5cSLisandro Dalcin yaml_char_t *suffix; 26053efea5cSLisandro Dalcin } tag; 26153efea5cSLisandro Dalcin 26253efea5cSLisandro Dalcin /** The scalar value (for @c YAML_SCALAR_TOKEN). */ 26353efea5cSLisandro Dalcin struct { 26453efea5cSLisandro Dalcin /** The scalar value. */ 26553efea5cSLisandro Dalcin yaml_char_t *value; 26653efea5cSLisandro Dalcin /** The length of the scalar value. */ 26753efea5cSLisandro Dalcin size_t length; 26853efea5cSLisandro Dalcin /** The scalar style. */ 26953efea5cSLisandro Dalcin yaml_scalar_style_t style; 27053efea5cSLisandro Dalcin } scalar; 27153efea5cSLisandro Dalcin 27253efea5cSLisandro Dalcin /** The version directive (for @c YAML_VERSION_DIRECTIVE_TOKEN). */ 27353efea5cSLisandro Dalcin struct { 27453efea5cSLisandro Dalcin /** The major version number. */ 27553efea5cSLisandro Dalcin int major; 27653efea5cSLisandro Dalcin /** The minor version number. */ 27753efea5cSLisandro Dalcin int minor; 27853efea5cSLisandro Dalcin } version_directive; 27953efea5cSLisandro Dalcin 28053efea5cSLisandro Dalcin /** The tag directive (for @c YAML_TAG_DIRECTIVE_TOKEN). */ 28153efea5cSLisandro Dalcin struct { 28253efea5cSLisandro Dalcin /** The tag handle. */ 28353efea5cSLisandro Dalcin yaml_char_t *handle; 28453efea5cSLisandro Dalcin /** The tag prefix. */ 28553efea5cSLisandro Dalcin yaml_char_t *prefix; 28653efea5cSLisandro Dalcin } tag_directive; 28753efea5cSLisandro Dalcin 28853efea5cSLisandro Dalcin } data; 28953efea5cSLisandro Dalcin 29053efea5cSLisandro Dalcin /** The beginning of the token. */ 29153efea5cSLisandro Dalcin yaml_mark_t start_mark; 29253efea5cSLisandro Dalcin /** The end of the token. */ 29353efea5cSLisandro Dalcin yaml_mark_t end_mark; 29453efea5cSLisandro Dalcin 29553efea5cSLisandro Dalcin } yaml_token_t; 29653efea5cSLisandro Dalcin 29753efea5cSLisandro Dalcin /** 29853efea5cSLisandro Dalcin * Free any memory allocated for a token object. 29953efea5cSLisandro Dalcin * 30053efea5cSLisandro Dalcin * @param[in,out] token A token object. 30153efea5cSLisandro Dalcin */ 30253efea5cSLisandro Dalcin 30353efea5cSLisandro Dalcin YAML_DECLARE(void) 30453efea5cSLisandro Dalcin yaml_token_delete(yaml_token_t *token); 30553efea5cSLisandro Dalcin 30653efea5cSLisandro Dalcin /** @} */ 30753efea5cSLisandro Dalcin 30853efea5cSLisandro Dalcin /** 30953efea5cSLisandro Dalcin * @defgroup events Events 31053efea5cSLisandro Dalcin * @{ 31153efea5cSLisandro Dalcin */ 31253efea5cSLisandro Dalcin 31353efea5cSLisandro Dalcin /** Event types. */ 31453efea5cSLisandro Dalcin typedef enum yaml_event_type_e { 31553efea5cSLisandro Dalcin /** An empty event. */ 31653efea5cSLisandro Dalcin YAML_NO_EVENT, 31753efea5cSLisandro Dalcin 31853efea5cSLisandro Dalcin /** A STREAM-START event. */ 31953efea5cSLisandro Dalcin YAML_STREAM_START_EVENT, 32053efea5cSLisandro Dalcin /** A STREAM-END event. */ 32153efea5cSLisandro Dalcin YAML_STREAM_END_EVENT, 32253efea5cSLisandro Dalcin 32353efea5cSLisandro Dalcin /** A DOCUMENT-START event. */ 32453efea5cSLisandro Dalcin YAML_DOCUMENT_START_EVENT, 32553efea5cSLisandro Dalcin /** A DOCUMENT-END event. */ 32653efea5cSLisandro Dalcin YAML_DOCUMENT_END_EVENT, 32753efea5cSLisandro Dalcin 32853efea5cSLisandro Dalcin /** An ALIAS event. */ 32953efea5cSLisandro Dalcin YAML_ALIAS_EVENT, 33053efea5cSLisandro Dalcin /** A SCALAR event. */ 33153efea5cSLisandro Dalcin YAML_SCALAR_EVENT, 33253efea5cSLisandro Dalcin 33353efea5cSLisandro Dalcin /** A SEQUENCE-START event. */ 33453efea5cSLisandro Dalcin YAML_SEQUENCE_START_EVENT, 33553efea5cSLisandro Dalcin /** A SEQUENCE-END event. */ 33653efea5cSLisandro Dalcin YAML_SEQUENCE_END_EVENT, 33753efea5cSLisandro Dalcin 33853efea5cSLisandro Dalcin /** A MAPPING-START event. */ 33953efea5cSLisandro Dalcin YAML_MAPPING_START_EVENT, 34053efea5cSLisandro Dalcin /** A MAPPING-END event. */ 34153efea5cSLisandro Dalcin YAML_MAPPING_END_EVENT 34253efea5cSLisandro Dalcin } yaml_event_type_t; 34353efea5cSLisandro Dalcin 34453efea5cSLisandro Dalcin /** The event structure. */ 34553efea5cSLisandro Dalcin typedef struct yaml_event_s { 34653efea5cSLisandro Dalcin 34753efea5cSLisandro Dalcin /** The event type. */ 34853efea5cSLisandro Dalcin yaml_event_type_t type; 34953efea5cSLisandro Dalcin 35053efea5cSLisandro Dalcin /** The event data. */ 35153efea5cSLisandro Dalcin union { 35253efea5cSLisandro Dalcin 35353efea5cSLisandro Dalcin /** The stream parameters (for @c YAML_STREAM_START_EVENT). */ 35453efea5cSLisandro Dalcin struct { 35553efea5cSLisandro Dalcin /** The document encoding. */ 35653efea5cSLisandro Dalcin yaml_encoding_t encoding; 35753efea5cSLisandro Dalcin } stream_start; 35853efea5cSLisandro Dalcin 35953efea5cSLisandro Dalcin /** The document parameters (for @c YAML_DOCUMENT_START_EVENT). */ 36053efea5cSLisandro Dalcin struct { 36153efea5cSLisandro Dalcin /** The version directive. */ 36253efea5cSLisandro Dalcin yaml_version_directive_t *version_directive; 36353efea5cSLisandro Dalcin 36453efea5cSLisandro Dalcin /** The list of tag directives. */ 36553efea5cSLisandro Dalcin struct { 36653efea5cSLisandro Dalcin /** The beginning of the tag directives list. */ 36753efea5cSLisandro Dalcin yaml_tag_directive_t *start; 36853efea5cSLisandro Dalcin /** The end of the tag directives list. */ 36953efea5cSLisandro Dalcin yaml_tag_directive_t *end; 37053efea5cSLisandro Dalcin } tag_directives; 37153efea5cSLisandro Dalcin 37253efea5cSLisandro Dalcin /** Is the document indicator implicit? */ 37353efea5cSLisandro Dalcin int implicit; 37453efea5cSLisandro Dalcin } document_start; 37553efea5cSLisandro Dalcin 37653efea5cSLisandro Dalcin /** The document end parameters (for @c YAML_DOCUMENT_END_EVENT). */ 37753efea5cSLisandro Dalcin struct { 37853efea5cSLisandro Dalcin /** Is the document end indicator implicit? */ 37953efea5cSLisandro Dalcin int implicit; 38053efea5cSLisandro Dalcin } document_end; 38153efea5cSLisandro Dalcin 38253efea5cSLisandro Dalcin /** The alias parameters (for @c YAML_ALIAS_EVENT). */ 38353efea5cSLisandro Dalcin struct { 38453efea5cSLisandro Dalcin /** The anchor. */ 38553efea5cSLisandro Dalcin yaml_char_t *anchor; 38653efea5cSLisandro Dalcin } alias; 38753efea5cSLisandro Dalcin 38853efea5cSLisandro Dalcin /** The scalar parameters (for @c YAML_SCALAR_EVENT). */ 38953efea5cSLisandro Dalcin struct { 39053efea5cSLisandro Dalcin /** The anchor. */ 39153efea5cSLisandro Dalcin yaml_char_t *anchor; 39253efea5cSLisandro Dalcin /** The tag. */ 39353efea5cSLisandro Dalcin yaml_char_t *tag; 39453efea5cSLisandro Dalcin /** The scalar value. */ 39553efea5cSLisandro Dalcin yaml_char_t *value; 39653efea5cSLisandro Dalcin /** The length of the scalar value. */ 39753efea5cSLisandro Dalcin size_t length; 39853efea5cSLisandro Dalcin /** Is the tag optional for the plain style? */ 39953efea5cSLisandro Dalcin int plain_implicit; 40053efea5cSLisandro Dalcin /** Is the tag optional for any non-plain style? */ 40153efea5cSLisandro Dalcin int quoted_implicit; 40253efea5cSLisandro Dalcin /** The scalar style. */ 40353efea5cSLisandro Dalcin yaml_scalar_style_t style; 40453efea5cSLisandro Dalcin } scalar; 40553efea5cSLisandro Dalcin 40653efea5cSLisandro Dalcin /** The sequence parameters (for @c YAML_SEQUENCE_START_EVENT). */ 40753efea5cSLisandro Dalcin struct { 40853efea5cSLisandro Dalcin /** The anchor. */ 40953efea5cSLisandro Dalcin yaml_char_t *anchor; 41053efea5cSLisandro Dalcin /** The tag. */ 41153efea5cSLisandro Dalcin yaml_char_t *tag; 41253efea5cSLisandro Dalcin /** Is the tag optional? */ 41353efea5cSLisandro Dalcin int implicit; 41453efea5cSLisandro Dalcin /** The sequence style. */ 41553efea5cSLisandro Dalcin yaml_sequence_style_t style; 41653efea5cSLisandro Dalcin } sequence_start; 41753efea5cSLisandro Dalcin 41853efea5cSLisandro Dalcin /** The mapping parameters (for @c YAML_MAPPING_START_EVENT). */ 41953efea5cSLisandro Dalcin struct { 42053efea5cSLisandro Dalcin /** The anchor. */ 42153efea5cSLisandro Dalcin yaml_char_t *anchor; 42253efea5cSLisandro Dalcin /** The tag. */ 42353efea5cSLisandro Dalcin yaml_char_t *tag; 42453efea5cSLisandro Dalcin /** Is the tag optional? */ 42553efea5cSLisandro Dalcin int implicit; 42653efea5cSLisandro Dalcin /** The mapping style. */ 42753efea5cSLisandro Dalcin yaml_mapping_style_t style; 42853efea5cSLisandro Dalcin } mapping_start; 42953efea5cSLisandro Dalcin 43053efea5cSLisandro Dalcin } data; 43153efea5cSLisandro Dalcin 43253efea5cSLisandro Dalcin /** The beginning of the event. */ 43353efea5cSLisandro Dalcin yaml_mark_t start_mark; 43453efea5cSLisandro Dalcin /** The end of the event. */ 43553efea5cSLisandro Dalcin yaml_mark_t end_mark; 43653efea5cSLisandro Dalcin 43753efea5cSLisandro Dalcin } yaml_event_t; 43853efea5cSLisandro Dalcin 43953efea5cSLisandro Dalcin /** @} */ 44053efea5cSLisandro Dalcin 44153efea5cSLisandro Dalcin /** 44253efea5cSLisandro Dalcin * @defgroup nodes Nodes 44353efea5cSLisandro Dalcin * @{ 44453efea5cSLisandro Dalcin */ 44553efea5cSLisandro Dalcin 44653efea5cSLisandro Dalcin /** The tag @c !!null with the only possible value: @c null. */ 44753efea5cSLisandro Dalcin #define YAML_NULL_TAG "tag:yaml.org,2002:null" 44853efea5cSLisandro Dalcin /** The tag @c !!bool with the values: @c true and @c false. */ 44953efea5cSLisandro Dalcin #define YAML_BOOL_TAG "tag:yaml.org,2002:bool" 45053efea5cSLisandro Dalcin /** The tag @c !!str for string values. */ 45153efea5cSLisandro Dalcin #define YAML_STR_TAG "tag:yaml.org,2002:str" 45253efea5cSLisandro Dalcin /** The tag @c !!int for integer values. */ 45353efea5cSLisandro Dalcin #define YAML_INT_TAG "tag:yaml.org,2002:int" 45453efea5cSLisandro Dalcin /** The tag @c !!float for float values. */ 45553efea5cSLisandro Dalcin #define YAML_FLOAT_TAG "tag:yaml.org,2002:float" 45653efea5cSLisandro Dalcin /** The tag @c !!timestamp for date and time values. */ 45753efea5cSLisandro Dalcin #define YAML_TIMESTAMP_TAG "tag:yaml.org,2002:timestamp" 45853efea5cSLisandro Dalcin 45953efea5cSLisandro Dalcin /** The tag @c !!seq is used to denote sequences. */ 46053efea5cSLisandro Dalcin #define YAML_SEQ_TAG "tag:yaml.org,2002:seq" 46153efea5cSLisandro Dalcin /** The tag @c !!map is used to denote mapping. */ 46253efea5cSLisandro Dalcin #define YAML_MAP_TAG "tag:yaml.org,2002:map" 46353efea5cSLisandro Dalcin 46453efea5cSLisandro Dalcin /** The default scalar tag is @c !!str. */ 46553efea5cSLisandro Dalcin #define YAML_DEFAULT_SCALAR_TAG YAML_STR_TAG 46653efea5cSLisandro Dalcin /** The default sequence tag is @c !!seq. */ 46753efea5cSLisandro Dalcin #define YAML_DEFAULT_SEQUENCE_TAG YAML_SEQ_TAG 46853efea5cSLisandro Dalcin /** The default mapping tag is @c !!map. */ 46953efea5cSLisandro Dalcin #define YAML_DEFAULT_MAPPING_TAG YAML_MAP_TAG 47053efea5cSLisandro Dalcin 47153efea5cSLisandro Dalcin /** Node types. */ 47253efea5cSLisandro Dalcin typedef enum yaml_node_type_e { 47353efea5cSLisandro Dalcin /** An empty node. */ 47453efea5cSLisandro Dalcin YAML_NO_NODE, 47553efea5cSLisandro Dalcin 47653efea5cSLisandro Dalcin /** A scalar node. */ 47753efea5cSLisandro Dalcin YAML_SCALAR_NODE, 47853efea5cSLisandro Dalcin /** A sequence node. */ 47953efea5cSLisandro Dalcin YAML_SEQUENCE_NODE, 48053efea5cSLisandro Dalcin /** A mapping node. */ 48153efea5cSLisandro Dalcin YAML_MAPPING_NODE 48253efea5cSLisandro Dalcin } yaml_node_type_t; 48353efea5cSLisandro Dalcin 48453efea5cSLisandro Dalcin /** The forward definition of a document node structure. */ 48553efea5cSLisandro Dalcin typedef struct yaml_node_s yaml_node_t; 48653efea5cSLisandro Dalcin 48753efea5cSLisandro Dalcin /** An element of a sequence node. */ 48853efea5cSLisandro Dalcin typedef int yaml_node_item_t; 48953efea5cSLisandro Dalcin 49053efea5cSLisandro Dalcin /** An element of a mapping node. */ 49153efea5cSLisandro Dalcin typedef struct yaml_node_pair_s { 49253efea5cSLisandro Dalcin /** The key of the element. */ 49353efea5cSLisandro Dalcin int key; 49453efea5cSLisandro Dalcin /** The value of the element. */ 49553efea5cSLisandro Dalcin int value; 49653efea5cSLisandro Dalcin } yaml_node_pair_t; 49753efea5cSLisandro Dalcin 49853efea5cSLisandro Dalcin /** The node structure. */ 49953efea5cSLisandro Dalcin struct yaml_node_s { 50053efea5cSLisandro Dalcin 50153efea5cSLisandro Dalcin /** The node type. */ 50253efea5cSLisandro Dalcin yaml_node_type_t type; 50353efea5cSLisandro Dalcin 50453efea5cSLisandro Dalcin /** The node tag. */ 50553efea5cSLisandro Dalcin yaml_char_t *tag; 50653efea5cSLisandro Dalcin 50753efea5cSLisandro Dalcin /** The node data. */ 50853efea5cSLisandro Dalcin union { 50953efea5cSLisandro Dalcin 51053efea5cSLisandro Dalcin /** The scalar parameters (for @c YAML_SCALAR_NODE). */ 51153efea5cSLisandro Dalcin struct { 51253efea5cSLisandro Dalcin /** The scalar value. */ 51353efea5cSLisandro Dalcin yaml_char_t *value; 51453efea5cSLisandro Dalcin /** The length of the scalar value. */ 51553efea5cSLisandro Dalcin size_t length; 51653efea5cSLisandro Dalcin /** The scalar style. */ 51753efea5cSLisandro Dalcin yaml_scalar_style_t style; 51853efea5cSLisandro Dalcin } scalar; 51953efea5cSLisandro Dalcin 52053efea5cSLisandro Dalcin /** The sequence parameters (for @c YAML_SEQUENCE_NODE). */ 52153efea5cSLisandro Dalcin struct { 52253efea5cSLisandro Dalcin /** The stack of sequence items. */ 52353efea5cSLisandro Dalcin struct { 52453efea5cSLisandro Dalcin /** The beginning of the stack. */ 52553efea5cSLisandro Dalcin yaml_node_item_t *start; 52653efea5cSLisandro Dalcin /** The end of the stack. */ 52753efea5cSLisandro Dalcin yaml_node_item_t *end; 52853efea5cSLisandro Dalcin /** The top of the stack. */ 52953efea5cSLisandro Dalcin yaml_node_item_t *top; 53053efea5cSLisandro Dalcin } items; 53153efea5cSLisandro Dalcin /** The sequence style. */ 53253efea5cSLisandro Dalcin yaml_sequence_style_t style; 53353efea5cSLisandro Dalcin } sequence; 53453efea5cSLisandro Dalcin 53553efea5cSLisandro Dalcin /** The mapping parameters (for @c YAML_MAPPING_NODE). */ 53653efea5cSLisandro Dalcin struct { 53753efea5cSLisandro Dalcin /** The stack of mapping pairs (key, value). */ 53853efea5cSLisandro Dalcin struct { 53953efea5cSLisandro Dalcin /** The beginning of the stack. */ 54053efea5cSLisandro Dalcin yaml_node_pair_t *start; 54153efea5cSLisandro Dalcin /** The end of the stack. */ 54253efea5cSLisandro Dalcin yaml_node_pair_t *end; 54353efea5cSLisandro Dalcin /** The top of the stack. */ 54453efea5cSLisandro Dalcin yaml_node_pair_t *top; 54553efea5cSLisandro Dalcin } pairs; 54653efea5cSLisandro Dalcin /** The mapping style. */ 54753efea5cSLisandro Dalcin yaml_mapping_style_t style; 54853efea5cSLisandro Dalcin } mapping; 54953efea5cSLisandro Dalcin 55053efea5cSLisandro Dalcin } data; 55153efea5cSLisandro Dalcin 55253efea5cSLisandro Dalcin /** The beginning of the node. */ 55353efea5cSLisandro Dalcin yaml_mark_t start_mark; 55453efea5cSLisandro Dalcin /** The end of the node. */ 55553efea5cSLisandro Dalcin yaml_mark_t end_mark; 55653efea5cSLisandro Dalcin 55753efea5cSLisandro Dalcin }; 55853efea5cSLisandro Dalcin 55953efea5cSLisandro Dalcin /** The document structure. */ 56053efea5cSLisandro Dalcin typedef struct yaml_document_s { 56153efea5cSLisandro Dalcin 56253efea5cSLisandro Dalcin /** The document nodes. */ 56353efea5cSLisandro Dalcin struct { 56453efea5cSLisandro Dalcin /** The beginning of the stack. */ 56553efea5cSLisandro Dalcin yaml_node_t *start; 56653efea5cSLisandro Dalcin /** The end of the stack. */ 56753efea5cSLisandro Dalcin yaml_node_t *end; 56853efea5cSLisandro Dalcin /** The top of the stack. */ 56953efea5cSLisandro Dalcin yaml_node_t *top; 57053efea5cSLisandro Dalcin } nodes; 57153efea5cSLisandro Dalcin 57253efea5cSLisandro Dalcin /** The version directive. */ 57353efea5cSLisandro Dalcin yaml_version_directive_t *version_directive; 57453efea5cSLisandro Dalcin 57553efea5cSLisandro Dalcin /** The list of tag directives. */ 57653efea5cSLisandro Dalcin struct { 57753efea5cSLisandro Dalcin /** The beginning of the tag directives list. */ 57853efea5cSLisandro Dalcin yaml_tag_directive_t *start; 57953efea5cSLisandro Dalcin /** The end of the tag directives list. */ 58053efea5cSLisandro Dalcin yaml_tag_directive_t *end; 58153efea5cSLisandro Dalcin } tag_directives; 58253efea5cSLisandro Dalcin 58353efea5cSLisandro Dalcin /** Is the document start indicator implicit? */ 58453efea5cSLisandro Dalcin int start_implicit; 58553efea5cSLisandro Dalcin /** Is the document end indicator implicit? */ 58653efea5cSLisandro Dalcin int end_implicit; 58753efea5cSLisandro Dalcin 58853efea5cSLisandro Dalcin /** The beginning of the document. */ 58953efea5cSLisandro Dalcin yaml_mark_t start_mark; 59053efea5cSLisandro Dalcin /** The end of the document. */ 59153efea5cSLisandro Dalcin yaml_mark_t end_mark; 59253efea5cSLisandro Dalcin 59353efea5cSLisandro Dalcin } yaml_document_t; 59453efea5cSLisandro Dalcin 59553efea5cSLisandro Dalcin /** 59653efea5cSLisandro Dalcin * Delete a YAML document and all its nodes. 59753efea5cSLisandro Dalcin * 59853efea5cSLisandro Dalcin * @param[in,out] document A document object. 59953efea5cSLisandro Dalcin */ 60053efea5cSLisandro Dalcin 60153efea5cSLisandro Dalcin YAML_DECLARE(void) 60253efea5cSLisandro Dalcin yaml_document_delete(yaml_document_t *document); 60353efea5cSLisandro Dalcin 60453efea5cSLisandro Dalcin /** 60553efea5cSLisandro Dalcin * Get a node of a YAML document. 60653efea5cSLisandro Dalcin * 60753efea5cSLisandro Dalcin * The pointer returned by this function is valid until any of the functions 60853efea5cSLisandro Dalcin * modifying the documents are called. 60953efea5cSLisandro Dalcin * 61053efea5cSLisandro Dalcin * @param[in] document A document object. 61153efea5cSLisandro Dalcin * @param[in] index The node id. 61253efea5cSLisandro Dalcin * 613*f332b1cbSPierre Jolivet * @returns the node object or @c NULL if @c node_id is out of range. 61453efea5cSLisandro Dalcin */ 61553efea5cSLisandro Dalcin 61653efea5cSLisandro Dalcin YAML_DECLARE(yaml_node_t *) 61753efea5cSLisandro Dalcin yaml_document_get_node(yaml_document_t *document, int index); 61853efea5cSLisandro Dalcin 61953efea5cSLisandro Dalcin /** 62053efea5cSLisandro Dalcin * Get the root of a YAML document node. 62153efea5cSLisandro Dalcin * 62253efea5cSLisandro Dalcin * The root object is the first object added to the document. 62353efea5cSLisandro Dalcin * 62453efea5cSLisandro Dalcin * The pointer returned by this function is valid until any of the functions 62553efea5cSLisandro Dalcin * modifying the documents are called. 62653efea5cSLisandro Dalcin * 62753efea5cSLisandro Dalcin * An empty document produced by the parser signifies the end of a YAML 62853efea5cSLisandro Dalcin * stream. 62953efea5cSLisandro Dalcin * 63053efea5cSLisandro Dalcin * @param[in] document A document object. 63153efea5cSLisandro Dalcin * 63253efea5cSLisandro Dalcin * @returns the node object or @c NULL if the document is empty. 63353efea5cSLisandro Dalcin */ 63453efea5cSLisandro Dalcin 63553efea5cSLisandro Dalcin YAML_DECLARE(yaml_node_t *) 63653efea5cSLisandro Dalcin yaml_document_get_root_node(yaml_document_t *document); 63753efea5cSLisandro Dalcin 63853efea5cSLisandro Dalcin /** 63953efea5cSLisandro Dalcin * Create a SCALAR node and attach it to the document. 64053efea5cSLisandro Dalcin * 64153efea5cSLisandro Dalcin * The @a style argument may be ignored by the emitter. 64253efea5cSLisandro Dalcin * 64353efea5cSLisandro Dalcin * @param[in,out] document A document object. 64453efea5cSLisandro Dalcin * @param[in] tag The scalar tag. 64553efea5cSLisandro Dalcin * @param[in] value The scalar value. 64653efea5cSLisandro Dalcin * @param[in] length The length of the scalar value. 64753efea5cSLisandro Dalcin * @param[in] style The scalar style. 64853efea5cSLisandro Dalcin * 64953efea5cSLisandro Dalcin * @returns the node id or @c 0 on error. 65053efea5cSLisandro Dalcin */ 65153efea5cSLisandro Dalcin 65253efea5cSLisandro Dalcin /** @} */ 65353efea5cSLisandro Dalcin 65453efea5cSLisandro Dalcin /** 65553efea5cSLisandro Dalcin * @defgroup parser Parser Definitions 65653efea5cSLisandro Dalcin * @{ 65753efea5cSLisandro Dalcin */ 65853efea5cSLisandro Dalcin 65953efea5cSLisandro Dalcin /** 66053efea5cSLisandro Dalcin * The prototype of a read handler. 66153efea5cSLisandro Dalcin * 66253efea5cSLisandro Dalcin * The read handler is called when the parser needs to read more bytes from the 66353efea5cSLisandro Dalcin * source. The handler should write not more than @a size bytes to the @a 66453efea5cSLisandro Dalcin * buffer. The number of written bytes should be set to the @a length variable. 66553efea5cSLisandro Dalcin * 66653efea5cSLisandro Dalcin * @param[in,out] data A pointer to an application data specified by 66753efea5cSLisandro Dalcin * yaml_parser_set_input(). 66853efea5cSLisandro Dalcin * @param[out] buffer The buffer to write the data from the source. 66953efea5cSLisandro Dalcin * @param[in] size The size of the buffer. 67053efea5cSLisandro Dalcin * @param[out] size_read The actual number of bytes read from the source. 67153efea5cSLisandro Dalcin * 67253efea5cSLisandro Dalcin * @returns On success, the handler should return @c 1. If the handler failed, 67353efea5cSLisandro Dalcin * the returned value should be @c 0. On EOF, the handler should set the 67453efea5cSLisandro Dalcin * @a size_read to @c 0 and return @c 1. 67553efea5cSLisandro Dalcin */ 67653efea5cSLisandro Dalcin 67753efea5cSLisandro Dalcin typedef int yaml_read_handler_t(void *data, unsigned char *buffer, size_t size, 67853efea5cSLisandro Dalcin size_t *size_read); 67953efea5cSLisandro Dalcin 68053efea5cSLisandro Dalcin /** 68153efea5cSLisandro Dalcin * This structure holds information about a potential simple key. 68253efea5cSLisandro Dalcin */ 68353efea5cSLisandro Dalcin 68453efea5cSLisandro Dalcin typedef struct yaml_simple_key_s { 68553efea5cSLisandro Dalcin /** Is a simple key possible? */ 68653efea5cSLisandro Dalcin int possible; 68753efea5cSLisandro Dalcin 68853efea5cSLisandro Dalcin /** Is a simple key required? */ 68953efea5cSLisandro Dalcin int required; 69053efea5cSLisandro Dalcin 69153efea5cSLisandro Dalcin /** The number of the token. */ 69253efea5cSLisandro Dalcin size_t token_number; 69353efea5cSLisandro Dalcin 69453efea5cSLisandro Dalcin /** The position mark. */ 69553efea5cSLisandro Dalcin yaml_mark_t mark; 69653efea5cSLisandro Dalcin } yaml_simple_key_t; 69753efea5cSLisandro Dalcin 69853efea5cSLisandro Dalcin /** 69953efea5cSLisandro Dalcin * The states of the parser. 70053efea5cSLisandro Dalcin */ 70153efea5cSLisandro Dalcin typedef enum yaml_parser_state_e { 70253efea5cSLisandro Dalcin /** Expect STREAM-START. */ 70353efea5cSLisandro Dalcin YAML_PARSE_STREAM_START_STATE, 70453efea5cSLisandro Dalcin /** Expect the beginning of an implicit document. */ 70553efea5cSLisandro Dalcin YAML_PARSE_IMPLICIT_DOCUMENT_START_STATE, 70653efea5cSLisandro Dalcin /** Expect DOCUMENT-START. */ 70753efea5cSLisandro Dalcin YAML_PARSE_DOCUMENT_START_STATE, 70853efea5cSLisandro Dalcin /** Expect the content of a document. */ 70953efea5cSLisandro Dalcin YAML_PARSE_DOCUMENT_CONTENT_STATE, 71053efea5cSLisandro Dalcin /** Expect DOCUMENT-END. */ 71153efea5cSLisandro Dalcin YAML_PARSE_DOCUMENT_END_STATE, 71253efea5cSLisandro Dalcin 71353efea5cSLisandro Dalcin /** Expect a block node. */ 71453efea5cSLisandro Dalcin YAML_PARSE_BLOCK_NODE_STATE, 71553efea5cSLisandro Dalcin /** Expect a block node or indentless sequence. */ 71653efea5cSLisandro Dalcin YAML_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE, 71753efea5cSLisandro Dalcin /** Expect a flow node. */ 71853efea5cSLisandro Dalcin YAML_PARSE_FLOW_NODE_STATE, 71953efea5cSLisandro Dalcin /** Expect the first entry of a block sequence. */ 72053efea5cSLisandro Dalcin YAML_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE, 72153efea5cSLisandro Dalcin /** Expect an entry of a block sequence. */ 72253efea5cSLisandro Dalcin YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE, 72353efea5cSLisandro Dalcin 72453efea5cSLisandro Dalcin /** Expect an entry of an indentless sequence. */ 72553efea5cSLisandro Dalcin YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE, 72653efea5cSLisandro Dalcin /** Expect the first key of a block mapping. */ 72753efea5cSLisandro Dalcin YAML_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE, 72853efea5cSLisandro Dalcin /** Expect a block mapping key. */ 72953efea5cSLisandro Dalcin YAML_PARSE_BLOCK_MAPPING_KEY_STATE, 73053efea5cSLisandro Dalcin /** Expect a block mapping value. */ 73153efea5cSLisandro Dalcin YAML_PARSE_BLOCK_MAPPING_VALUE_STATE, 73253efea5cSLisandro Dalcin /** Expect the first entry of a flow sequence. */ 73353efea5cSLisandro Dalcin YAML_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE, 73453efea5cSLisandro Dalcin 73553efea5cSLisandro Dalcin /** Expect an entry of a flow sequence. */ 73653efea5cSLisandro Dalcin YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE, 73753efea5cSLisandro Dalcin /** Expect a key of an ordered mapping. */ 73853efea5cSLisandro Dalcin YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE, 73953efea5cSLisandro Dalcin /** Expect a value of an ordered mapping. */ 74053efea5cSLisandro Dalcin YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE, 74153efea5cSLisandro Dalcin /** Expect the and of an ordered mapping entry. */ 74253efea5cSLisandro Dalcin YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE, 74353efea5cSLisandro Dalcin /** Expect the first key of a flow mapping. */ 74453efea5cSLisandro Dalcin YAML_PARSE_FLOW_MAPPING_FIRST_KEY_STATE, 74553efea5cSLisandro Dalcin /** Expect a key of a flow mapping. */ 74653efea5cSLisandro Dalcin 74753efea5cSLisandro Dalcin YAML_PARSE_FLOW_MAPPING_KEY_STATE, 74853efea5cSLisandro Dalcin /** Expect a value of a flow mapping. */ 74953efea5cSLisandro Dalcin YAML_PARSE_FLOW_MAPPING_VALUE_STATE, 75053efea5cSLisandro Dalcin /** Expect an empty value of a flow mapping. */ 75153efea5cSLisandro Dalcin YAML_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE, 75253efea5cSLisandro Dalcin /** Expect nothing. */ 75353efea5cSLisandro Dalcin YAML_PARSE_END_STATE 75453efea5cSLisandro Dalcin } yaml_parser_state_t; 75553efea5cSLisandro Dalcin 75653efea5cSLisandro Dalcin /** 75753efea5cSLisandro Dalcin * This structure holds aliases data. 75853efea5cSLisandro Dalcin */ 75953efea5cSLisandro Dalcin 76053efea5cSLisandro Dalcin typedef struct yaml_alias_data_s { 76153efea5cSLisandro Dalcin /** The anchor. */ 76253efea5cSLisandro Dalcin yaml_char_t *anchor; 76353efea5cSLisandro Dalcin /** The node id. */ 76453efea5cSLisandro Dalcin int index; 76553efea5cSLisandro Dalcin /** The anchor mark. */ 76653efea5cSLisandro Dalcin yaml_mark_t mark; 76753efea5cSLisandro Dalcin } yaml_alias_data_t; 76853efea5cSLisandro Dalcin 76953efea5cSLisandro Dalcin /** 77053efea5cSLisandro Dalcin * The parser structure. 77153efea5cSLisandro Dalcin * 77253efea5cSLisandro Dalcin * All members are internal. Manage the structure using the @c yaml_parser_ 77353efea5cSLisandro Dalcin * family of functions. 77453efea5cSLisandro Dalcin */ 77553efea5cSLisandro Dalcin 77653efea5cSLisandro Dalcin typedef struct yaml_parser_s { 77753efea5cSLisandro Dalcin 77853efea5cSLisandro Dalcin /** 77953efea5cSLisandro Dalcin * @name Error handling 78053efea5cSLisandro Dalcin * @{ 78153efea5cSLisandro Dalcin */ 78253efea5cSLisandro Dalcin 78353efea5cSLisandro Dalcin /** Error type. */ 78453efea5cSLisandro Dalcin yaml_error_type_t error; 78553efea5cSLisandro Dalcin /** Error description. */ 78653efea5cSLisandro Dalcin const char *problem; 787a5b23f4aSJose E. Roman /** The byte about which the problem occurred. */ 78853efea5cSLisandro Dalcin size_t problem_offset; 78953efea5cSLisandro Dalcin /** The problematic value (@c -1 is none). */ 79053efea5cSLisandro Dalcin int problem_value; 79153efea5cSLisandro Dalcin /** The problem position. */ 79253efea5cSLisandro Dalcin yaml_mark_t problem_mark; 79353efea5cSLisandro Dalcin /** The error context. */ 79453efea5cSLisandro Dalcin const char *context; 79553efea5cSLisandro Dalcin /** The context position. */ 79653efea5cSLisandro Dalcin yaml_mark_t context_mark; 79753efea5cSLisandro Dalcin 79853efea5cSLisandro Dalcin /** 79953efea5cSLisandro Dalcin * @} 80053efea5cSLisandro Dalcin */ 80153efea5cSLisandro Dalcin 80253efea5cSLisandro Dalcin /** 80353efea5cSLisandro Dalcin * @name Reader stuff 80453efea5cSLisandro Dalcin * @{ 80553efea5cSLisandro Dalcin */ 80653efea5cSLisandro Dalcin 80753efea5cSLisandro Dalcin /** Read handler. */ 80853efea5cSLisandro Dalcin yaml_read_handler_t *read_handler; 80953efea5cSLisandro Dalcin 81053efea5cSLisandro Dalcin /** A pointer for passing to the read handler. */ 81153efea5cSLisandro Dalcin void *read_handler_data; 81253efea5cSLisandro Dalcin 81353efea5cSLisandro Dalcin /** Standard (string or file) input data. */ 81453efea5cSLisandro Dalcin union { 81553efea5cSLisandro Dalcin /** String input data. */ 81653efea5cSLisandro Dalcin struct { 81753efea5cSLisandro Dalcin /** The string start pointer. */ 81853efea5cSLisandro Dalcin const unsigned char *start; 81953efea5cSLisandro Dalcin /** The string end pointer. */ 82053efea5cSLisandro Dalcin const unsigned char *end; 82153efea5cSLisandro Dalcin /** The string current position. */ 82253efea5cSLisandro Dalcin const unsigned char *current; 82353efea5cSLisandro Dalcin } string; 82453efea5cSLisandro Dalcin 82553efea5cSLisandro Dalcin /** File input data. */ 82653efea5cSLisandro Dalcin FILE *file; 82753efea5cSLisandro Dalcin } input; 82853efea5cSLisandro Dalcin 82953efea5cSLisandro Dalcin /** EOF flag */ 83053efea5cSLisandro Dalcin int eof; 83153efea5cSLisandro Dalcin 83253efea5cSLisandro Dalcin /** The working buffer. */ 83353efea5cSLisandro Dalcin struct { 83453efea5cSLisandro Dalcin /** The beginning of the buffer. */ 83553efea5cSLisandro Dalcin yaml_char_t *start; 83653efea5cSLisandro Dalcin /** The end of the buffer. */ 83753efea5cSLisandro Dalcin yaml_char_t *end; 83853efea5cSLisandro Dalcin /** The current position of the buffer. */ 83953efea5cSLisandro Dalcin yaml_char_t *pointer; 84053efea5cSLisandro Dalcin /** The last filled position of the buffer. */ 84153efea5cSLisandro Dalcin yaml_char_t *last; 84253efea5cSLisandro Dalcin } buffer; 84353efea5cSLisandro Dalcin 84453efea5cSLisandro Dalcin /* The number of unread characters in the buffer. */ 84553efea5cSLisandro Dalcin size_t unread; 84653efea5cSLisandro Dalcin 84753efea5cSLisandro Dalcin /** The raw buffer. */ 84853efea5cSLisandro Dalcin struct { 84953efea5cSLisandro Dalcin /** The beginning of the buffer. */ 85053efea5cSLisandro Dalcin unsigned char *start; 85153efea5cSLisandro Dalcin /** The end of the buffer. */ 85253efea5cSLisandro Dalcin unsigned char *end; 85353efea5cSLisandro Dalcin /** The current position of the buffer. */ 85453efea5cSLisandro Dalcin unsigned char *pointer; 85553efea5cSLisandro Dalcin /** The last filled position of the buffer. */ 85653efea5cSLisandro Dalcin unsigned char *last; 85753efea5cSLisandro Dalcin } raw_buffer; 85853efea5cSLisandro Dalcin 85953efea5cSLisandro Dalcin /** The input encoding. */ 86053efea5cSLisandro Dalcin yaml_encoding_t encoding; 86153efea5cSLisandro Dalcin 86253efea5cSLisandro Dalcin /** The offset of the current position (in bytes). */ 86353efea5cSLisandro Dalcin size_t offset; 86453efea5cSLisandro Dalcin 86553efea5cSLisandro Dalcin /** The mark of the current position. */ 86653efea5cSLisandro Dalcin yaml_mark_t mark; 86753efea5cSLisandro Dalcin 86853efea5cSLisandro Dalcin /** 86953efea5cSLisandro Dalcin * @} 87053efea5cSLisandro Dalcin */ 87153efea5cSLisandro Dalcin 87253efea5cSLisandro Dalcin /** 87353efea5cSLisandro Dalcin * @name Scanner stuff 87453efea5cSLisandro Dalcin * @{ 87553efea5cSLisandro Dalcin */ 87653efea5cSLisandro Dalcin 87753efea5cSLisandro Dalcin /** Have we started to scan the input stream? */ 87853efea5cSLisandro Dalcin int stream_start_produced; 87953efea5cSLisandro Dalcin 88053efea5cSLisandro Dalcin /** Have we reached the end of the input stream? */ 88153efea5cSLisandro Dalcin int stream_end_produced; 88253efea5cSLisandro Dalcin 88353efea5cSLisandro Dalcin /** The number of unclosed '[' and '{' indicators. */ 88453efea5cSLisandro Dalcin int flow_level; 88553efea5cSLisandro Dalcin 88653efea5cSLisandro Dalcin /** The tokens queue. */ 88753efea5cSLisandro Dalcin struct { 88853efea5cSLisandro Dalcin /** The beginning of the tokens queue. */ 88953efea5cSLisandro Dalcin yaml_token_t *start; 89053efea5cSLisandro Dalcin /** The end of the tokens queue. */ 89153efea5cSLisandro Dalcin yaml_token_t *end; 89253efea5cSLisandro Dalcin /** The head of the tokens queue. */ 89353efea5cSLisandro Dalcin yaml_token_t *head; 89453efea5cSLisandro Dalcin /** The tail of the tokens queue. */ 89553efea5cSLisandro Dalcin yaml_token_t *tail; 89653efea5cSLisandro Dalcin } tokens; 89753efea5cSLisandro Dalcin 89853efea5cSLisandro Dalcin /** The number of tokens fetched from the queue. */ 89953efea5cSLisandro Dalcin size_t tokens_parsed; 90053efea5cSLisandro Dalcin 90153efea5cSLisandro Dalcin /** Does the tokens queue contain a token ready for dequeueing. */ 90253efea5cSLisandro Dalcin int token_available; 90353efea5cSLisandro Dalcin 90453efea5cSLisandro Dalcin /** The indentation levels stack. */ 90553efea5cSLisandro Dalcin struct { 90653efea5cSLisandro Dalcin /** The beginning of the stack. */ 90753efea5cSLisandro Dalcin int *start; 90853efea5cSLisandro Dalcin /** The end of the stack. */ 90953efea5cSLisandro Dalcin int *end; 91053efea5cSLisandro Dalcin /** The top of the stack. */ 91153efea5cSLisandro Dalcin int *top; 91253efea5cSLisandro Dalcin } indents; 91353efea5cSLisandro Dalcin 91453efea5cSLisandro Dalcin /** The current indentation level. */ 91553efea5cSLisandro Dalcin int indent; 91653efea5cSLisandro Dalcin 91753efea5cSLisandro Dalcin /** May a simple key occur at the current position? */ 91853efea5cSLisandro Dalcin int simple_key_allowed; 91953efea5cSLisandro Dalcin 92053efea5cSLisandro Dalcin /** The stack of simple keys. */ 92153efea5cSLisandro Dalcin struct { 92253efea5cSLisandro Dalcin /** The beginning of the stack. */ 92353efea5cSLisandro Dalcin yaml_simple_key_t *start; 92453efea5cSLisandro Dalcin /** The end of the stack. */ 92553efea5cSLisandro Dalcin yaml_simple_key_t *end; 92653efea5cSLisandro Dalcin /** The top of the stack. */ 92753efea5cSLisandro Dalcin yaml_simple_key_t *top; 92853efea5cSLisandro Dalcin } simple_keys; 92953efea5cSLisandro Dalcin 93053efea5cSLisandro Dalcin /** 93153efea5cSLisandro Dalcin * @} 93253efea5cSLisandro Dalcin */ 93353efea5cSLisandro Dalcin 93453efea5cSLisandro Dalcin /** 93553efea5cSLisandro Dalcin * @name Parser stuff 93653efea5cSLisandro Dalcin * @{ 93753efea5cSLisandro Dalcin */ 93853efea5cSLisandro Dalcin 93953efea5cSLisandro Dalcin /** The parser states stack. */ 94053efea5cSLisandro Dalcin struct { 94153efea5cSLisandro Dalcin /** The beginning of the stack. */ 94253efea5cSLisandro Dalcin yaml_parser_state_t *start; 94353efea5cSLisandro Dalcin /** The end of the stack. */ 94453efea5cSLisandro Dalcin yaml_parser_state_t *end; 94553efea5cSLisandro Dalcin /** The top of the stack. */ 94653efea5cSLisandro Dalcin yaml_parser_state_t *top; 94753efea5cSLisandro Dalcin } states; 94853efea5cSLisandro Dalcin 94953efea5cSLisandro Dalcin /** The current parser state. */ 95053efea5cSLisandro Dalcin yaml_parser_state_t state; 95153efea5cSLisandro Dalcin 95253efea5cSLisandro Dalcin /** The stack of marks. */ 95353efea5cSLisandro Dalcin struct { 95453efea5cSLisandro Dalcin /** The beginning of the stack. */ 95553efea5cSLisandro Dalcin yaml_mark_t *start; 95653efea5cSLisandro Dalcin /** The end of the stack. */ 95753efea5cSLisandro Dalcin yaml_mark_t *end; 95853efea5cSLisandro Dalcin /** The top of the stack. */ 95953efea5cSLisandro Dalcin yaml_mark_t *top; 96053efea5cSLisandro Dalcin } marks; 96153efea5cSLisandro Dalcin 96253efea5cSLisandro Dalcin /** The list of TAG directives. */ 96353efea5cSLisandro Dalcin struct { 96453efea5cSLisandro Dalcin /** The beginning of the list. */ 96553efea5cSLisandro Dalcin yaml_tag_directive_t *start; 96653efea5cSLisandro Dalcin /** The end of the list. */ 96753efea5cSLisandro Dalcin yaml_tag_directive_t *end; 96853efea5cSLisandro Dalcin /** The top of the list. */ 96953efea5cSLisandro Dalcin yaml_tag_directive_t *top; 97053efea5cSLisandro Dalcin } tag_directives; 97153efea5cSLisandro Dalcin 97253efea5cSLisandro Dalcin /** 97353efea5cSLisandro Dalcin * @} 97453efea5cSLisandro Dalcin */ 97553efea5cSLisandro Dalcin 97653efea5cSLisandro Dalcin /** 97753efea5cSLisandro Dalcin * @name Dumper stuff 97853efea5cSLisandro Dalcin * @{ 97953efea5cSLisandro Dalcin */ 98053efea5cSLisandro Dalcin 98153efea5cSLisandro Dalcin /** The alias data. */ 98253efea5cSLisandro Dalcin struct { 98353efea5cSLisandro Dalcin /** The beginning of the list. */ 98453efea5cSLisandro Dalcin yaml_alias_data_t *start; 98553efea5cSLisandro Dalcin /** The end of the list. */ 98653efea5cSLisandro Dalcin yaml_alias_data_t *end; 98753efea5cSLisandro Dalcin /** The top of the list. */ 98853efea5cSLisandro Dalcin yaml_alias_data_t *top; 98953efea5cSLisandro Dalcin } aliases; 99053efea5cSLisandro Dalcin 99153efea5cSLisandro Dalcin /** The currently parsed document. */ 99253efea5cSLisandro Dalcin yaml_document_t *document; 99353efea5cSLisandro Dalcin 99453efea5cSLisandro Dalcin /** 99553efea5cSLisandro Dalcin * @} 99653efea5cSLisandro Dalcin */ 99753efea5cSLisandro Dalcin 99853efea5cSLisandro Dalcin } yaml_parser_t; 99953efea5cSLisandro Dalcin 100053efea5cSLisandro Dalcin /** 100153efea5cSLisandro Dalcin * Initialize a parser. 100253efea5cSLisandro Dalcin * 100353efea5cSLisandro Dalcin * This function creates a new parser object. An application is responsible 100453efea5cSLisandro Dalcin * for destroying the object using the yaml_parser_delete() function. 100553efea5cSLisandro Dalcin * 100653efea5cSLisandro Dalcin * @param[out] parser An empty parser object. 100753efea5cSLisandro Dalcin * 100853efea5cSLisandro Dalcin * @returns @c 1 if the function succeeded, @c 0 on error. 100953efea5cSLisandro Dalcin */ 101053efea5cSLisandro Dalcin 101153efea5cSLisandro Dalcin YAML_DECLARE(int) 101253efea5cSLisandro Dalcin yaml_parser_initialize(yaml_parser_t *parser); 101353efea5cSLisandro Dalcin 101453efea5cSLisandro Dalcin /** 101553efea5cSLisandro Dalcin * Destroy a parser. 101653efea5cSLisandro Dalcin * 101753efea5cSLisandro Dalcin * @param[in,out] parser A parser object. 101853efea5cSLisandro Dalcin */ 101953efea5cSLisandro Dalcin 102053efea5cSLisandro Dalcin YAML_DECLARE(void) 102153efea5cSLisandro Dalcin yaml_parser_delete(yaml_parser_t *parser); 102253efea5cSLisandro Dalcin 102353efea5cSLisandro Dalcin /** 102453efea5cSLisandro Dalcin * Set a string input. 102553efea5cSLisandro Dalcin * 102653efea5cSLisandro Dalcin * Note that the @a input pointer must be valid while the @a parser object 10271a28a8ebSPierre Jolivet * exists. The application is responsible for destroying @a input after 102853efea5cSLisandro Dalcin * destroying the @a parser. 102953efea5cSLisandro Dalcin * 103053efea5cSLisandro Dalcin * @param[in,out] parser A parser object. 103153efea5cSLisandro Dalcin * @param[in] input A source data. 103253efea5cSLisandro Dalcin * @param[in] size The length of the source data in bytes. 103353efea5cSLisandro Dalcin */ 103453efea5cSLisandro Dalcin 103553efea5cSLisandro Dalcin YAML_DECLARE(void) 103653efea5cSLisandro Dalcin yaml_parser_set_input_string(yaml_parser_t *parser, 103753efea5cSLisandro Dalcin const unsigned char *input, size_t size); 103853efea5cSLisandro Dalcin 103953efea5cSLisandro Dalcin /** 104053efea5cSLisandro Dalcin * Set a file input. 104153efea5cSLisandro Dalcin * 104253efea5cSLisandro Dalcin * @a file should be a file object open for reading. The application is 104353efea5cSLisandro Dalcin * responsible for closing the @a file. 104453efea5cSLisandro Dalcin * 104553efea5cSLisandro Dalcin * @param[in,out] parser A parser object. 104653efea5cSLisandro Dalcin * @param[in] file An open file. 104753efea5cSLisandro Dalcin */ 104853efea5cSLisandro Dalcin 104953efea5cSLisandro Dalcin YAML_DECLARE(void) 105053efea5cSLisandro Dalcin yaml_parser_set_input_file(yaml_parser_t *parser, FILE *file); 105153efea5cSLisandro Dalcin 105253efea5cSLisandro Dalcin /** 105353efea5cSLisandro Dalcin * Set a generic input handler. 105453efea5cSLisandro Dalcin * 105553efea5cSLisandro Dalcin * @param[in,out] parser A parser object. 105653efea5cSLisandro Dalcin * @param[in] handler A read handler. 105753efea5cSLisandro Dalcin * @param[in] data Any application data for passing to the read 105853efea5cSLisandro Dalcin * handler. 105953efea5cSLisandro Dalcin */ 106053efea5cSLisandro Dalcin 106153efea5cSLisandro Dalcin YAML_DECLARE(void) 106253efea5cSLisandro Dalcin yaml_parser_set_input(yaml_parser_t *parser, 106353efea5cSLisandro Dalcin yaml_read_handler_t *handler, void *data); 106453efea5cSLisandro Dalcin 106553efea5cSLisandro Dalcin /** 106653efea5cSLisandro Dalcin * Set the source encoding. 106753efea5cSLisandro Dalcin * 106853efea5cSLisandro Dalcin * @param[in,out] parser A parser object. 106953efea5cSLisandro Dalcin * @param[in] encoding The source encoding. 107053efea5cSLisandro Dalcin */ 107153efea5cSLisandro Dalcin 107253efea5cSLisandro Dalcin YAML_DECLARE(void) 107353efea5cSLisandro Dalcin yaml_parser_set_encoding(yaml_parser_t *parser, yaml_encoding_t encoding); 107453efea5cSLisandro Dalcin 107553efea5cSLisandro Dalcin /** 107653efea5cSLisandro Dalcin * Scan the input stream and produce the next token. 107753efea5cSLisandro Dalcin * 107853efea5cSLisandro Dalcin * Call the function subsequently to produce a sequence of tokens corresponding 107953efea5cSLisandro Dalcin * to the input stream. The initial token has the type 108053efea5cSLisandro Dalcin * @c YAML_STREAM_START_TOKEN while the ending token has the type 108153efea5cSLisandro Dalcin * @c YAML_STREAM_END_TOKEN. 108253efea5cSLisandro Dalcin * 108353efea5cSLisandro Dalcin * An application is responsible for freeing any buffers associated with the 108453efea5cSLisandro Dalcin * produced token object using the @c yaml_token_delete function. 108553efea5cSLisandro Dalcin * 108653efea5cSLisandro Dalcin * An application must not alternate the calls of yaml_parser_scan() with the 108753efea5cSLisandro Dalcin * calls of yaml_parser_parse() or yaml_parser_load(). Doing this will break 108853efea5cSLisandro Dalcin * the parser. 108953efea5cSLisandro Dalcin * 109053efea5cSLisandro Dalcin * @param[in,out] parser A parser object. 109153efea5cSLisandro Dalcin * @param[out] token An empty token object. 109253efea5cSLisandro Dalcin * 109353efea5cSLisandro Dalcin * @returns @c 1 if the function succeeded, @c 0 on error. 109453efea5cSLisandro Dalcin */ 109553efea5cSLisandro Dalcin 109653efea5cSLisandro Dalcin YAML_DECLARE(int) 109753efea5cSLisandro Dalcin yaml_parser_scan(yaml_parser_t *parser, yaml_token_t *token); 109853efea5cSLisandro Dalcin 109953efea5cSLisandro Dalcin /** 110053efea5cSLisandro Dalcin * Parse the input stream and produce the next parsing event. 110153efea5cSLisandro Dalcin * 110253efea5cSLisandro Dalcin * Call the function subsequently to produce a sequence of events corresponding 110353efea5cSLisandro Dalcin * to the input stream. The initial event has the type 110453efea5cSLisandro Dalcin * @c YAML_STREAM_START_EVENT while the ending event has the type 110553efea5cSLisandro Dalcin * @c YAML_STREAM_END_EVENT. 110653efea5cSLisandro Dalcin * 110753efea5cSLisandro Dalcin * An application is responsible for freeing any buffers associated with the 110853efea5cSLisandro Dalcin * produced event object using the yaml_event_delete() function. 110953efea5cSLisandro Dalcin * 111053efea5cSLisandro Dalcin * An application must not alternate the calls of yaml_parser_parse() with the 111153efea5cSLisandro Dalcin * calls of yaml_parser_scan() or yaml_parser_load(). Doing this will break the 111253efea5cSLisandro Dalcin * parser. 111353efea5cSLisandro Dalcin * 111453efea5cSLisandro Dalcin * @param[in,out] parser A parser object. 111553efea5cSLisandro Dalcin * @param[out] event An empty event object. 111653efea5cSLisandro Dalcin * 111753efea5cSLisandro Dalcin * @returns @c 1 if the function succeeded, @c 0 on error. 111853efea5cSLisandro Dalcin */ 111953efea5cSLisandro Dalcin 112053efea5cSLisandro Dalcin YAML_DECLARE(int) 112153efea5cSLisandro Dalcin yaml_parser_parse(yaml_parser_t *parser, yaml_event_t *event); 112253efea5cSLisandro Dalcin 112353efea5cSLisandro Dalcin /** 112453efea5cSLisandro Dalcin * Parse the input stream and produce the next YAML document. 112553efea5cSLisandro Dalcin * 112653efea5cSLisandro Dalcin * Call this function subsequently to produce a sequence of documents 112753efea5cSLisandro Dalcin * constituting the input stream. 112853efea5cSLisandro Dalcin * 112953efea5cSLisandro Dalcin * If the produced document has no root node, it means that the document 113053efea5cSLisandro Dalcin * end has been reached. 113153efea5cSLisandro Dalcin * 113253efea5cSLisandro Dalcin * An application is responsible for freeing any data associated with the 113353efea5cSLisandro Dalcin * produced document object using the yaml_document_delete() function. 113453efea5cSLisandro Dalcin * 113553efea5cSLisandro Dalcin * An application must not alternate the calls of yaml_parser_load() with the 113653efea5cSLisandro Dalcin * calls of yaml_parser_scan() or yaml_parser_parse(). Doing this will break 113753efea5cSLisandro Dalcin * the parser. 113853efea5cSLisandro Dalcin * 113953efea5cSLisandro Dalcin * @param[in,out] parser A parser object. 114053efea5cSLisandro Dalcin * @param[out] document An empty document object. 114153efea5cSLisandro Dalcin * 114253efea5cSLisandro Dalcin * @returns @c 1 if the function succeeded, @c 0 on error. 114353efea5cSLisandro Dalcin */ 114453efea5cSLisandro Dalcin 114553efea5cSLisandro Dalcin YAML_DECLARE(int) 114653efea5cSLisandro Dalcin yaml_parser_load(yaml_parser_t *parser, yaml_document_t *document); 114753efea5cSLisandro Dalcin 114853efea5cSLisandro Dalcin /** @} */ 114953efea5cSLisandro Dalcin 115053efea5cSLisandro Dalcin #ifdef __cplusplus 115153efea5cSLisandro Dalcin } 115253efea5cSLisandro Dalcin #endif 115353efea5cSLisandro Dalcin 115453efea5cSLisandro Dalcin #endif /* #ifndef YAML_H */ 115553efea5cSLisandro Dalcin 1156