# Parser Definitions

## Data Structures

struct | yaml_simple_key_s
| This structure holds information about a potential simple key. More...
struct | yaml_alias_data_s
| This structure holds aliases data. More...
struct | yaml_parser_s
| The parser structure. More...

## Typedefs

typedef int | yaml_read_handler_t (void *data, unsigned char *buffer, size_t size, size_t *size_read)
| The prototype of a read handler.
typedef struct yaml_simple_key_s | yaml_simple_key_t
| This structure holds information about a potential simple key.
typedef enum yaml_parser_state_e | yaml_parser_state_t
| The states of the parser.
typedef struct yaml_alias_data_s | yaml_alias_data_t
| This structure holds aliases data.
typedef struct yaml_parser_s | yaml_parser_t
| The parser structure.

## Enumerations

enum

yaml_parser_state_e {
YAML_PARSE_STREAM_START_STATE,
YAML_PARSE_IMPLICIT_DOCUMENT_START_STATE,
YAML_PARSE_DOCUMENT_START_STATE,
YAML_PARSE_DOCUMENT_CONTENT_STATE,
YAML_PARSE_DOCUMENT_END_STATE,
YAML_PARSE_BLOCK_NODE_STATE,
YAML_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE,
YAML_PARSE_FLOW_NODE_STATE,
YAML_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE,
YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE,
YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE,
YAML_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE,
YAML_PARSE_BLOCK_MAPPING_KEY_STATE,
YAML_PARSE_BLOCK_MAPPING_VALUE_STATE,
YAML_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE,
YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE,
YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE,
YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE,
YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE,
YAML_PARSE_FLOW_MAPPING_FIRST_KEY_STATE,
YAML_PARSE_FLOW_MAPPING_KEY_STATE,
YAML_PARSE_FLOW_MAPPING_VALUE_STATE,
YAML_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE,
YAML_PARSE_END_STATE
}

| The states of the parser. More...

## Functions

int | yaml_parser_initialize (yaml_parser_t *parser)
| Initialize a parser.
void | yaml_parser_delete (yaml_parser_t *parser)
| Destroy a parser.
void | yaml_parser_set_input_string (yaml_parser_t *parser, const unsigned char *input, size_t size)
| Set a string input.
void | yaml_parser_set_input_file (yaml_parser_t *parser, FILE *file)
| Set a file input.
void | yaml_parser_set_input (yaml_parser_t *parser, yaml_read_handler_t *handler, void *data)
| Set a generic input handler.
void | yaml_parser_set_encoding (yaml_parser_t *parser, yaml_encoding_t encoding)
| Set the source encoding.
int | yaml_parser_scan (yaml_parser_t *parser, yaml_token_t *token)
| Scan the input stream and produce the next token.
int | yaml_parser_parse (yaml_parser_t *parser, yaml_event_t *event)
| Parse the input stream and produce the next parsing event.
int | yaml_parser_load (yaml_parser_t *parser, yaml_document_t *document)
| Parse the input stream and produce the next YAML document.

## Typedef Documentation

typedef int yaml_read_handler_t(void *data, unsigned char *buffer, size_t size, size_t *size_read)

The prototype of a read handler.

The read handler is called when the parser needs to read more bytes from the source. The handler should write not more than size bytes to the buffer. The number of written bytes should be set to the length variable.

Parameters:

  `[in,out]` | data | A pointer to an application data specified by yaml_parser_set_input().
  `[out]` | buffer | The buffer to write the data from the source.
  `[in]` | size | The size of the buffer.
  `[out]` | size_read | The actual number of bytes read from the source.

Returns:
  On success, the handler should return `1`. If the handler failed, the returned value should be `0`. On EOF, the handler should set the size_read to `0` and return `1`.

typedef struct yaml_parser_s yaml_parser_t

The parser structure.

All members are internal. Manage the structure using the `yaml_parser_` family of functions.

## Enumeration Type Documentation

enum yaml_parser_state_e

The states of the parser.

Enumerator:

  YAML_PARSE_STREAM_START_STATE | Expect STREAM-START.
  YAML_PARSE_IMPLICIT_DOCUMENT_START_STATE | Expect the beginning of an implicit document.
  YAML_PARSE_DOCUMENT_START_STATE | Expect DOCUMENT-START.
  YAML_PARSE_DOCUMENT_CONTENT_STATE | Expect the content of a document.
  YAML_PARSE_DOCUMENT_END_STATE | Expect DOCUMENT-END.
  YAML_PARSE_BLOCK_NODE_STATE | Expect a block node.
  YAML_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE | Expect a block node or indentless sequence.
  YAML_PARSE_FLOW_NODE_STATE | Expect a flow node.
  YAML_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE | Expect the first entry of a block sequence.
  YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE | Expect an entry of a block sequence.
  YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE | Expect an entry of an indentless sequence.
  YAML_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE | Expect the first key of a block mapping.
  YAML_PARSE_BLOCK_MAPPING_KEY_STATE | Expect a block mapping key.
  YAML_PARSE_BLOCK_MAPPING_VALUE_STATE | Expect a block mapping value.
  YAML_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE | Expect the first entry of a flow sequence.
  YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE | Expect an entry of a flow sequence.
  YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE | Expect a key of an ordered mapping.
  YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE | Expect a value of an ordered mapping.
  YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE | Expect the and of an ordered mapping entry.
  YAML_PARSE_FLOW_MAPPING_FIRST_KEY_STATE | Expect the first key of a flow mapping.
  YAML_PARSE_FLOW_MAPPING_KEY_STATE | Expect a key of a flow mapping.
  YAML_PARSE_FLOW_MAPPING_VALUE_STATE | Expect a value of a flow mapping.
  YAML_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE | Expect an empty value of a flow mapping.
  YAML_PARSE_END_STATE | Expect nothing.

## Function Documentation

int yaml_parser_initialize | ( | yaml_parser_t * | parser | ) |

Initialize a parser.

This function creates a new parser object. An application is responsible for destroying the object using the yaml_parser_delete() function.

Parameters:

  `[out]` | parser | An empty parser object.

Returns:
  `1` if the function succeeded, `0` on error.

void yaml_parser_delete | ( | yaml_parser_t * | parser | ) |

Destroy a parser.

Parameters:

  `[in,out]` | parser | A parser object.

void yaml_parser_set_input_string | ( | yaml_parser_t * | parser,
|  | const unsigned char * | input,
|  | size_t | size |
| ) |  |  |

Set a string input.

Note that the input pointer must be valid while the parser object exists. The application is responsible for destroing input after destroying the parser.

Parameters:

  `[in,out]` | parser | A parser object.
  `[in]` | input | A source data.
  `[in]` | size | The length of the source data in bytes.

void yaml_parser_set_input_file | ( | yaml_parser_t * | parser,
|  | FILE * | file |
| ) |  |  |

Set a file input.

file should be a file object open for reading. The application is responsible for closing the file.

Parameters:

  `[in,out]` | parser | A parser object.
  `[in]` | file | An open file.

void yaml_parser_set_input | ( | yaml_parser_t * | parser,
|  | yaml_read_handler_t * | handler,
|  | void * | data |
| ) |  |  |

Set a generic input handler.

Parameters:

  `[in,out]` | parser | A parser object.
  `[in]` | handler | A read handler.
  `[in]` | data | Any application data for passing to the read handler.

void yaml_parser_set_encoding | ( | yaml_parser_t * | parser,
|  | yaml_encoding_t | encoding |
| ) |  |  |

Set the source encoding.

Parameters:

  `[in,out]` | parser | A parser object.
  `[in]` | encoding | The source encoding.

int yaml_parser_scan | ( | yaml_parser_t * | parser,
|  | yaml_token_t * | token |
| ) |  |  |

Scan the input stream and produce the next token.

Call the function subsequently to produce a sequence of tokens corresponding to the input stream. The initial token has the type `YAML_STREAM_START_TOKEN` while the ending token has the type `YAML_STREAM_END_TOKEN`.

An application is responsible for freeing any buffers associated with the produced token object using the `yaml_token_delete` function.

An application must not alternate the calls of yaml_parser_scan() with the calls of yaml_parser_parse() or yaml_parser_load(). Doing this will break the parser.

Parameters:

  `[in,out]` | parser | A parser object.
  `[out]` | token | An empty token object.

Returns:
  `1` if the function succeeded, `0` on error.

int yaml_parser_parse | ( | yaml_parser_t * | parser,
|  | yaml_event_t * | event |
| ) |  |  |

Parse the input stream and produce the next parsing event.

Call the function subsequently to produce a sequence of events corresponding to the input stream. The initial event has the type `YAML_STREAM_START_EVENT` while the ending event has the type `YAML_STREAM_END_EVENT`.

An application is responsible for freeing any buffers associated with the produced event object using the yaml_event_delete() function.

An application must not alternate the calls of yaml_parser_parse() with the calls of yaml_parser_scan() or yaml_parser_load(). Doing this will break the parser.

Parameters:

  `[in,out]` | parser | A parser object.
  `[out]` | event | An empty event object.

Returns:
  `1` if the function succeeded, `0` on error.

int yaml_parser_load | ( | yaml_parser_t * | parser,
|  | yaml_document_t * | document |
| ) |  |  |

Parse the input stream and produce the next YAML document.

Call this function subsequently to produce a sequence of documents constituting the input stream.

If the produced document has no root node, it means that the document end has been reached.

An application is responsible for freeing any data associated with the produced document object using the yaml_document_delete() function.

An application must not alternate the calls of yaml_parser_load() with the calls of yaml_parser_scan() or yaml_parser_parse(). Doing this will break the parser.

Parameters:

  `[in,out]` | parser | A parser object.
  `[out]` | document | An empty document object.

Returns:
  `1` if the function succeeded, `0` on error.