Ruby  2.0.0p247(2013-06-27revision41674)
ext/psych/yaml/yaml.h
Go to the documentation of this file.
00001 
00011 #ifndef YAML_H
00012 #define YAML_H
00013 
00014 #ifdef __cplusplus
00015 extern "C" {
00016 #endif
00017 
00018 #include <stdlib.h>
00019 #include <stdio.h>
00020 #include <string.h>
00021 
00029 #ifdef _WIN32
00030 #   if defined(YAML_DECLARE_STATIC)
00031 #       define  YAML_DECLARE(type)  type
00032 #   elif defined(YAML_DECLARE_EXPORT)
00033 #       define  YAML_DECLARE(type)  __declspec(dllexport) type
00034 #   else
00035 #       define  YAML_DECLARE(type)  __declspec(dllimport) type
00036 #   endif
00037 #else
00038 #   define  YAML_DECLARE(type)  type
00039 #endif
00040 
00056 YAML_DECLARE(const char *)
00057 yaml_get_version_string(void);
00058 
00067 YAML_DECLARE(void)
00068 yaml_get_version(int *major, int *minor, int *patch);
00069 
00078 typedef unsigned char yaml_char_t;
00079 
00081 typedef struct yaml_version_directive_s {
00083     int major;
00085     int minor;
00086 } yaml_version_directive_t;
00087 
00089 typedef struct yaml_tag_directive_s {
00091     yaml_char_t *handle;
00093     yaml_char_t *prefix;
00094 } yaml_tag_directive_t;
00095 
00097 typedef enum yaml_encoding_e {
00099     YAML_ANY_ENCODING,
00101     YAML_UTF8_ENCODING,
00103     YAML_UTF16LE_ENCODING,
00105     YAML_UTF16BE_ENCODING
00106 } yaml_encoding_t;
00107 
00110 typedef enum yaml_break_e {
00112     YAML_ANY_BREAK,
00114     YAML_CR_BREAK,
00116     YAML_LN_BREAK,
00118     YAML_CRLN_BREAK
00119 } yaml_break_t;
00120 
00122 typedef enum yaml_error_type_e {
00124     YAML_NO_ERROR,
00125 
00127     YAML_MEMORY_ERROR,
00128 
00130     YAML_READER_ERROR,
00132     YAML_SCANNER_ERROR,
00134     YAML_PARSER_ERROR,
00136     YAML_COMPOSER_ERROR,
00137 
00139     YAML_WRITER_ERROR,
00141     YAML_EMITTER_ERROR
00142 } yaml_error_type_t;
00143 
00145 typedef struct yaml_mark_s {
00147     size_t index;
00148 
00150     size_t line;
00151 
00153     size_t column;
00154 } yaml_mark_t;
00155 
00164 typedef enum yaml_scalar_style_e {
00166     YAML_ANY_SCALAR_STYLE,
00167 
00169     YAML_PLAIN_SCALAR_STYLE,
00170 
00172     YAML_SINGLE_QUOTED_SCALAR_STYLE,
00174     YAML_DOUBLE_QUOTED_SCALAR_STYLE,
00175 
00177     YAML_LITERAL_SCALAR_STYLE,
00179     YAML_FOLDED_SCALAR_STYLE
00180 } yaml_scalar_style_t;
00181 
00183 typedef enum yaml_sequence_style_e {
00185     YAML_ANY_SEQUENCE_STYLE,
00186 
00188     YAML_BLOCK_SEQUENCE_STYLE,
00190     YAML_FLOW_SEQUENCE_STYLE
00191 } yaml_sequence_style_t;
00192 
00194 typedef enum yaml_mapping_style_e {
00196     YAML_ANY_MAPPING_STYLE,
00197 
00199     YAML_BLOCK_MAPPING_STYLE,
00201     YAML_FLOW_MAPPING_STYLE
00202 /*    YAML_FLOW_SET_MAPPING_STYLE   */
00203 } yaml_mapping_style_t;
00204 
00213 typedef enum yaml_token_type_e {
00215     YAML_NO_TOKEN,
00216 
00218     YAML_STREAM_START_TOKEN,
00220     YAML_STREAM_END_TOKEN,
00221 
00223     YAML_VERSION_DIRECTIVE_TOKEN,
00225     YAML_TAG_DIRECTIVE_TOKEN,
00227     YAML_DOCUMENT_START_TOKEN,
00229     YAML_DOCUMENT_END_TOKEN,
00230 
00232     YAML_BLOCK_SEQUENCE_START_TOKEN,
00234     YAML_BLOCK_MAPPING_START_TOKEN,
00236     YAML_BLOCK_END_TOKEN,
00237 
00239     YAML_FLOW_SEQUENCE_START_TOKEN,
00241     YAML_FLOW_SEQUENCE_END_TOKEN,
00243     YAML_FLOW_MAPPING_START_TOKEN,
00245     YAML_FLOW_MAPPING_END_TOKEN,
00246 
00248     YAML_BLOCK_ENTRY_TOKEN,
00250     YAML_FLOW_ENTRY_TOKEN,
00252     YAML_KEY_TOKEN,
00254     YAML_VALUE_TOKEN,
00255 
00257     YAML_ALIAS_TOKEN,
00259     YAML_ANCHOR_TOKEN,
00261     YAML_TAG_TOKEN,
00263     YAML_SCALAR_TOKEN
00264 } yaml_token_type_t;
00265 
00267 typedef struct yaml_token_s {
00268 
00270     yaml_token_type_t type;
00271 
00273     union {
00274 
00276         struct {
00278             yaml_encoding_t encoding;
00279         } stream_start;
00280 
00282         struct {
00284             yaml_char_t *value;
00285         } alias;
00286 
00288         struct {
00290             yaml_char_t *value;
00291         } anchor;
00292 
00294         struct {
00296             yaml_char_t *handle;
00298             yaml_char_t *suffix;
00299         } tag;
00300 
00302         struct {
00304             yaml_char_t *value;
00306             size_t length;
00308             yaml_scalar_style_t style;
00309         } scalar;
00310 
00312         struct {
00314             int major;
00316             int minor;
00317         } version_directive;
00318 
00320         struct {
00322             yaml_char_t *handle;
00324             yaml_char_t *prefix;
00325         } tag_directive;
00326 
00327     } data;
00328 
00330     yaml_mark_t start_mark;
00332     yaml_mark_t end_mark;
00333 
00334 } yaml_token_t;
00335 
00342 YAML_DECLARE(void)
00343 yaml_token_delete(yaml_token_t *token);
00344 
00353 typedef enum yaml_event_type_e {
00355     YAML_NO_EVENT,
00356 
00358     YAML_STREAM_START_EVENT,
00360     YAML_STREAM_END_EVENT,
00361 
00363     YAML_DOCUMENT_START_EVENT,
00365     YAML_DOCUMENT_END_EVENT,
00366 
00368     YAML_ALIAS_EVENT,
00370     YAML_SCALAR_EVENT,
00371 
00373     YAML_SEQUENCE_START_EVENT,
00375     YAML_SEQUENCE_END_EVENT,
00376 
00378     YAML_MAPPING_START_EVENT,
00380     YAML_MAPPING_END_EVENT
00381 } yaml_event_type_t;
00382 
00384 typedef struct yaml_event_s {
00385 
00387     yaml_event_type_t type;
00388 
00390     union {
00391 
00393         struct {
00395             yaml_encoding_t encoding;
00396         } stream_start;
00397 
00399         struct {
00401             yaml_version_directive_t *version_directive;
00402 
00404             struct {
00406                 yaml_tag_directive_t *start;
00408                 yaml_tag_directive_t *end;
00409             } tag_directives;
00410 
00412             int implicit;
00413         } document_start;
00414 
00416         struct {
00418             int implicit;
00419         } document_end;
00420 
00422         struct {
00424             yaml_char_t *anchor;
00425         } alias;
00426 
00428         struct {
00430             yaml_char_t *anchor;
00432             yaml_char_t *tag;
00434             yaml_char_t *value;
00436             size_t length;
00438             int plain_implicit;
00440             int quoted_implicit;
00442             yaml_scalar_style_t style;
00443         } scalar;
00444 
00446         struct {
00448             yaml_char_t *anchor;
00450             yaml_char_t *tag;
00452             int implicit;
00454             yaml_sequence_style_t style;
00455         } sequence_start;
00456 
00458         struct {
00460             yaml_char_t *anchor;
00462             yaml_char_t *tag;
00464             int implicit;
00466             yaml_mapping_style_t style;
00467         } mapping_start;
00468 
00469     } data;
00470 
00472     yaml_mark_t start_mark;
00474     yaml_mark_t end_mark;
00475 
00476 } yaml_event_t;
00477 
00487 YAML_DECLARE(int)
00488 yaml_stream_start_event_initialize(yaml_event_t *event,
00489         yaml_encoding_t encoding);
00490 
00499 YAML_DECLARE(int)
00500 yaml_stream_end_event_initialize(yaml_event_t *event);
00501 
00521 YAML_DECLARE(int)
00522 yaml_document_start_event_initialize(yaml_event_t *event,
00523         yaml_version_directive_t *version_directive,
00524         yaml_tag_directive_t *tag_directives_start,
00525         yaml_tag_directive_t *tag_directives_end,
00526         int implicit);
00527 
00540 YAML_DECLARE(int)
00541 yaml_document_end_event_initialize(yaml_event_t *event, int implicit);
00542 
00552 YAML_DECLARE(int)
00553 yaml_alias_event_initialize(yaml_event_t *event, yaml_char_t *anchor);
00554 
00577 YAML_DECLARE(int)
00578 yaml_scalar_event_initialize(yaml_event_t *event,
00579         yaml_char_t *anchor, yaml_char_t *tag,
00580         yaml_char_t *value, int length,
00581         int plain_implicit, int quoted_implicit,
00582         yaml_scalar_style_t style);
00583 
00600 YAML_DECLARE(int)
00601 yaml_sequence_start_event_initialize(yaml_event_t *event,
00602         yaml_char_t *anchor, yaml_char_t *tag, int implicit,
00603         yaml_sequence_style_t style);
00604 
00613 YAML_DECLARE(int)
00614 yaml_sequence_end_event_initialize(yaml_event_t *event);
00615 
00632 YAML_DECLARE(int)
00633 yaml_mapping_start_event_initialize(yaml_event_t *event,
00634         yaml_char_t *anchor, yaml_char_t *tag, int implicit,
00635         yaml_mapping_style_t style);
00636 
00645 YAML_DECLARE(int)
00646 yaml_mapping_end_event_initialize(yaml_event_t *event);
00647 
00654 YAML_DECLARE(void)
00655 yaml_event_delete(yaml_event_t *event);
00656 
00665 #define YAML_NULL_TAG       "tag:yaml.org,2002:null"
00666 
00667 #define YAML_BOOL_TAG       "tag:yaml.org,2002:bool"
00668 
00669 #define YAML_STR_TAG        "tag:yaml.org,2002:str"
00670 
00671 #define YAML_INT_TAG        "tag:yaml.org,2002:int"
00672 
00673 #define YAML_FLOAT_TAG      "tag:yaml.org,2002:float"
00674 
00675 #define YAML_TIMESTAMP_TAG  "tag:yaml.org,2002:timestamp"
00676 
00678 #define YAML_SEQ_TAG        "tag:yaml.org,2002:seq"
00679 
00680 #define YAML_MAP_TAG        "tag:yaml.org,2002:map"
00681 
00683 #define YAML_DEFAULT_SCALAR_TAG     YAML_STR_TAG
00684 
00685 #define YAML_DEFAULT_SEQUENCE_TAG   YAML_SEQ_TAG
00686 
00687 #define YAML_DEFAULT_MAPPING_TAG    YAML_MAP_TAG
00688 
00690 typedef enum yaml_node_type_e {
00692     YAML_NO_NODE,
00693 
00695     YAML_SCALAR_NODE,
00697     YAML_SEQUENCE_NODE,
00699     YAML_MAPPING_NODE
00700 } yaml_node_type_t;
00701 
00703 typedef struct yaml_node_s yaml_node_t;
00704 
00706 typedef int yaml_node_item_t;
00707 
00709 typedef struct yaml_node_pair_s {
00711     int key;
00713     int value;
00714 } yaml_node_pair_t;
00715 
00717 struct yaml_node_s {
00718 
00720     yaml_node_type_t type;
00721 
00723     yaml_char_t *tag;
00724 
00726     union {
00727 
00729         struct {
00731             yaml_char_t *value;
00733             size_t length;
00735             yaml_scalar_style_t style;
00736         } scalar;
00737 
00739         struct {
00741             struct {
00743                 yaml_node_item_t *start;
00745                 yaml_node_item_t *end;
00747                 yaml_node_item_t *top;
00748             } items;
00750             yaml_sequence_style_t style;
00751         } sequence;
00752 
00754         struct {
00756             struct {
00758                 yaml_node_pair_t *start;
00760                 yaml_node_pair_t *end;
00762                 yaml_node_pair_t *top;
00763             } pairs;
00765             yaml_mapping_style_t style;
00766         } mapping;
00767 
00768     } data;
00769 
00771     yaml_mark_t start_mark;
00773     yaml_mark_t end_mark;
00774 
00775 };
00776 
00778 typedef struct yaml_document_s {
00779 
00781     struct {
00783         yaml_node_t *start;
00785         yaml_node_t *end;
00787         yaml_node_t *top;
00788     } nodes;
00789 
00791     yaml_version_directive_t *version_directive;
00792 
00794     struct {
00796         yaml_tag_directive_t *start;
00798         yaml_tag_directive_t *end;
00799     } tag_directives;
00800 
00802     int start_implicit;
00804     int end_implicit;
00805 
00807     yaml_mark_t start_mark;
00809     yaml_mark_t end_mark;
00810 
00811 } yaml_document_t;
00812 
00831 YAML_DECLARE(int)
00832 yaml_document_initialize(yaml_document_t *document,
00833         yaml_version_directive_t *version_directive,
00834         yaml_tag_directive_t *tag_directives_start,
00835         yaml_tag_directive_t *tag_directives_end,
00836         int start_implicit, int end_implicit);
00837 
00844 YAML_DECLARE(void)
00845 yaml_document_delete(yaml_document_t *document);
00846 
00859 YAML_DECLARE(yaml_node_t *)
00860 yaml_document_get_node(yaml_document_t *document, int index);
00861 
00878 YAML_DECLARE(yaml_node_t *)
00879 yaml_document_get_root_node(yaml_document_t *document);
00880 
00895 YAML_DECLARE(int)
00896 yaml_document_add_scalar(yaml_document_t *document,
00897         yaml_char_t *tag, yaml_char_t *value, int length,
00898         yaml_scalar_style_t style);
00899 
00912 YAML_DECLARE(int)
00913 yaml_document_add_sequence(yaml_document_t *document,
00914         yaml_char_t *tag, yaml_sequence_style_t style);
00915 
00928 YAML_DECLARE(int)
00929 yaml_document_add_mapping(yaml_document_t *document,
00930         yaml_char_t *tag, yaml_mapping_style_t style);
00931 
00942 YAML_DECLARE(int)
00943 yaml_document_append_sequence_item(yaml_document_t *document,
00944         int sequence, int item);
00945 
00957 YAML_DECLARE(int)
00958 yaml_document_append_mapping_pair(yaml_document_t *document,
00959         int mapping, int key, int value);
00960 
00986 typedef int yaml_read_handler_t(void *data, unsigned char *buffer, size_t size,
00987         size_t *size_read);
00988 
00993 typedef struct yaml_simple_key_s {
00995     int possible;
00996 
00998     int required;
00999 
01001     size_t token_number;
01002 
01004     yaml_mark_t mark;
01005 } yaml_simple_key_t;
01006 
01010 typedef enum yaml_parser_state_e {
01012     YAML_PARSE_STREAM_START_STATE,
01014     YAML_PARSE_IMPLICIT_DOCUMENT_START_STATE,
01016     YAML_PARSE_DOCUMENT_START_STATE,
01018     YAML_PARSE_DOCUMENT_CONTENT_STATE,
01020     YAML_PARSE_DOCUMENT_END_STATE,
01022     YAML_PARSE_BLOCK_NODE_STATE,
01024     YAML_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE,
01026     YAML_PARSE_FLOW_NODE_STATE,
01028     YAML_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE,
01030     YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE,
01032     YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE,
01034     YAML_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE,
01036     YAML_PARSE_BLOCK_MAPPING_KEY_STATE,
01038     YAML_PARSE_BLOCK_MAPPING_VALUE_STATE,
01040     YAML_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE,
01042     YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE,
01044     YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE,
01046     YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE,
01048     YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE,
01050     YAML_PARSE_FLOW_MAPPING_FIRST_KEY_STATE,
01052     YAML_PARSE_FLOW_MAPPING_KEY_STATE,
01054     YAML_PARSE_FLOW_MAPPING_VALUE_STATE,
01056     YAML_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE,
01058     YAML_PARSE_END_STATE
01059 } yaml_parser_state_t;
01060 
01065 typedef struct yaml_alias_data_s {
01067     yaml_char_t *anchor;
01069     int index;
01071     yaml_mark_t mark;
01072 } yaml_alias_data_t;
01073 
01081 typedef struct yaml_parser_s {
01082 
01089     yaml_error_type_t error;
01091     const char *problem;
01093     size_t problem_offset;
01095     int problem_value;
01097     yaml_mark_t problem_mark;
01099     const char *context;
01101     yaml_mark_t context_mark;
01102 
01113     yaml_read_handler_t *read_handler;
01114 
01116     void *read_handler_data;
01117 
01119     union {
01121         struct {
01123             const unsigned char *start;
01125             const unsigned char *end;
01127             const unsigned char *current;
01128         } string;
01129 
01131         FILE *file;
01132     } input;
01133 
01135     int eof;
01136 
01138     struct {
01140         yaml_char_t *start;
01142         yaml_char_t *end;
01144         yaml_char_t *pointer;
01146         yaml_char_t *last;
01147     } buffer;
01148 
01149     /* The number of unread characters in the buffer. */
01150     size_t unread;
01151 
01153     struct {
01155         unsigned char *start;
01157         unsigned char *end;
01159         unsigned char *pointer;
01161         unsigned char *last;
01162     } raw_buffer;
01163 
01165     yaml_encoding_t encoding;
01166 
01168     size_t offset;
01169 
01171     yaml_mark_t mark;
01172 
01183     int stream_start_produced;
01184 
01186     int stream_end_produced;
01187 
01189     int flow_level;
01190 
01192     struct {
01194         yaml_token_t *start;
01196         yaml_token_t *end;
01198         yaml_token_t *head;
01200         yaml_token_t *tail;
01201     } tokens;
01202 
01204     size_t tokens_parsed;
01205 
01206     /* Does the tokens queue contain a token ready for dequeueing. */
01207     int token_available;
01208 
01210     struct {
01212         int *start;
01214         int *end;
01216         int *top;
01217     } indents;
01218 
01220     int indent;
01221 
01223     int simple_key_allowed;
01224 
01226     struct {
01228         yaml_simple_key_t *start;
01230         yaml_simple_key_t *end;
01232         yaml_simple_key_t *top;
01233     } simple_keys;
01234 
01245     struct {
01247         yaml_parser_state_t *start;
01249         yaml_parser_state_t *end;
01251         yaml_parser_state_t *top;
01252     } states;
01253 
01255     yaml_parser_state_t state;
01256 
01258     struct {
01260         yaml_mark_t *start;
01262         yaml_mark_t *end;
01264         yaml_mark_t *top;
01265     } marks;
01266 
01268     struct {
01270         yaml_tag_directive_t *start;
01272         yaml_tag_directive_t *end;
01274         yaml_tag_directive_t *top;
01275     } tag_directives;
01276 
01287     struct {
01289         yaml_alias_data_t *start;
01291         yaml_alias_data_t *end;
01293         yaml_alias_data_t *top;
01294     } aliases;
01295 
01297     yaml_document_t *document;
01298 
01303 } yaml_parser_t;
01304 
01316 YAML_DECLARE(int)
01317 yaml_parser_initialize(yaml_parser_t *parser);
01318 
01325 YAML_DECLARE(void)
01326 yaml_parser_delete(yaml_parser_t *parser);
01327 
01340 YAML_DECLARE(void)
01341 yaml_parser_set_input_string(yaml_parser_t *parser,
01342         const unsigned char *input, size_t size);
01343 
01354 YAML_DECLARE(void)
01355 yaml_parser_set_input_file(yaml_parser_t *parser, FILE *file);
01356 
01366 YAML_DECLARE(void)
01367 yaml_parser_set_input(yaml_parser_t *parser,
01368         yaml_read_handler_t *handler, void *data);
01369 
01377 YAML_DECLARE(void)
01378 yaml_parser_set_encoding(yaml_parser_t *parser, yaml_encoding_t encoding);
01379 
01401 YAML_DECLARE(int)
01402 yaml_parser_scan(yaml_parser_t *parser, yaml_token_t *token);
01403 
01425 YAML_DECLARE(int)
01426 yaml_parser_parse(yaml_parser_t *parser, yaml_event_t *event);
01427 
01450 YAML_DECLARE(int)
01451 yaml_parser_load(yaml_parser_t *parser, yaml_document_t *document);
01452 
01476 typedef int yaml_write_handler_t(void *data, unsigned char *buffer, size_t size);
01477 
01479 typedef enum yaml_emitter_state_e {
01481     YAML_EMIT_STREAM_START_STATE,
01483     YAML_EMIT_FIRST_DOCUMENT_START_STATE,
01485     YAML_EMIT_DOCUMENT_START_STATE,
01487     YAML_EMIT_DOCUMENT_CONTENT_STATE,
01489     YAML_EMIT_DOCUMENT_END_STATE,
01491     YAML_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE,
01493     YAML_EMIT_FLOW_SEQUENCE_ITEM_STATE,
01495     YAML_EMIT_FLOW_MAPPING_FIRST_KEY_STATE,
01497     YAML_EMIT_FLOW_MAPPING_KEY_STATE,
01499     YAML_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE,
01501     YAML_EMIT_FLOW_MAPPING_VALUE_STATE,
01503     YAML_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE,
01505     YAML_EMIT_BLOCK_SEQUENCE_ITEM_STATE,
01507     YAML_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE,
01509     YAML_EMIT_BLOCK_MAPPING_KEY_STATE,
01511     YAML_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE,
01513     YAML_EMIT_BLOCK_MAPPING_VALUE_STATE,
01515     YAML_EMIT_END_STATE
01516 } yaml_emitter_state_t;
01517 
01525 typedef struct yaml_emitter_s {
01526 
01533     yaml_error_type_t error;
01535     const char *problem;
01536 
01547     yaml_write_handler_t *write_handler;
01548 
01550     void *write_handler_data;
01551 
01553     union {
01555         struct {
01557             unsigned char *buffer;
01559             size_t size;
01561             size_t *size_written;
01562         } string;
01563 
01565         FILE *file;
01566     } output;
01567 
01569     struct {
01571         yaml_char_t *start;
01573         yaml_char_t *end;
01575         yaml_char_t *pointer;
01577         yaml_char_t *last;
01578     } buffer;
01579 
01581     struct {
01583         unsigned char *start;
01585         unsigned char *end;
01587         unsigned char *pointer;
01589         unsigned char *last;
01590     } raw_buffer;
01591 
01593     yaml_encoding_t encoding;
01594 
01605     int canonical;
01607     int best_indent;
01609     int best_width;
01611     int unicode;
01613     yaml_break_t line_break;
01614 
01616     struct {
01618         yaml_emitter_state_t *start;
01620         yaml_emitter_state_t *end;
01622         yaml_emitter_state_t *top;
01623     } states;
01624 
01626     yaml_emitter_state_t state;
01627 
01629     struct {
01631         yaml_event_t *start;
01633         yaml_event_t *end;
01635         yaml_event_t *head;
01637         yaml_event_t *tail;
01638     } events;
01639 
01641     struct {
01643         int *start;
01645         int *end;
01647         int *top;
01648     } indents;
01649 
01651     struct {
01653         yaml_tag_directive_t *start;
01655         yaml_tag_directive_t *end;
01657         yaml_tag_directive_t *top;
01658     } tag_directives;
01659 
01661     int indent;
01662 
01664     int flow_level;
01665 
01667     int root_context;
01669     int sequence_context;
01671     int mapping_context;
01673     int simple_key_context;
01674 
01676     int line;
01678     int column;
01680     int whitespace;
01682     int indention;
01684     int open_ended;
01685 
01687     struct {
01689         yaml_char_t *anchor;
01691         size_t anchor_length;
01693         int alias;
01694     } anchor_data;
01695 
01697     struct {
01699         yaml_char_t *handle;
01701         size_t handle_length;
01703         yaml_char_t *suffix;
01705         size_t suffix_length;
01706     } tag_data;
01707 
01709     struct {
01711         yaml_char_t *value;
01713         size_t length;
01715         int multiline;
01717         int flow_plain_allowed;
01719         int block_plain_allowed;
01721         int single_quoted_allowed;
01723         int block_allowed;
01725         yaml_scalar_style_t style;
01726     } scalar_data;
01727 
01738     int opened;
01740     int closed;
01741 
01743     struct {
01745         int references;
01747         int anchor;
01749         int serialized;
01750     } *anchors;
01751 
01753     int last_anchor_id;
01754 
01756     yaml_document_t *document;
01757 
01762 } yaml_emitter_t;
01763 
01775 YAML_DECLARE(int)
01776 yaml_emitter_initialize(yaml_emitter_t *emitter);
01777 
01784 YAML_DECLARE(void)
01785 yaml_emitter_delete(yaml_emitter_t *emitter);
01786 
01802 YAML_DECLARE(void)
01803 yaml_emitter_set_output_string(yaml_emitter_t *emitter,
01804         unsigned char *output, size_t size, size_t *size_written);
01805 
01816 YAML_DECLARE(void)
01817 yaml_emitter_set_output_file(yaml_emitter_t *emitter, FILE *file);
01818 
01828 YAML_DECLARE(void)
01829 yaml_emitter_set_output(yaml_emitter_t *emitter,
01830         yaml_write_handler_t *handler, void *data);
01831 
01839 YAML_DECLARE(void)
01840 yaml_emitter_set_encoding(yaml_emitter_t *emitter, yaml_encoding_t encoding);
01841 
01850 YAML_DECLARE(void)
01851 yaml_emitter_set_canonical(yaml_emitter_t *emitter, int canonical);
01852 
01860 YAML_DECLARE(void)
01861 yaml_emitter_set_indent(yaml_emitter_t *emitter, int indent);
01862 
01870 YAML_DECLARE(void)
01871 yaml_emitter_set_width(yaml_emitter_t *emitter, int width);
01872 
01880 YAML_DECLARE(void)
01881 yaml_emitter_set_unicode(yaml_emitter_t *emitter, int unicode);
01882 
01890 YAML_DECLARE(void)
01891 yaml_emitter_set_break(yaml_emitter_t *emitter, yaml_break_t line_break);
01892 
01907 YAML_DECLARE(int)
01908 yaml_emitter_emit(yaml_emitter_t *emitter, yaml_event_t *event);
01909 
01920 YAML_DECLARE(int)
01921 yaml_emitter_open(yaml_emitter_t *emitter);
01922 
01933 YAML_DECLARE(int)
01934 yaml_emitter_close(yaml_emitter_t *emitter);
01935 
01950 YAML_DECLARE(int)
01951 yaml_emitter_dump(yaml_emitter_t *emitter, yaml_document_t *document);
01952 
01961 YAML_DECLARE(int)
01962 yaml_emitter_flush(yaml_emitter_t *emitter);
01963 
01966 #ifdef __cplusplus
01967 }
01968 #endif
01969 
01970 #endif /* #ifndef YAML_H */
01971 
01972