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
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
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
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
01971
01972