gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

apic.go (21281B)


      1 package yaml
      2 
      3 import (
      4 	"io"
      5 )
      6 
      7 func yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) {
      8 	//fmt.Println("yaml_insert_token", "pos:", pos, "typ:", token.typ, "head:", parser.tokens_head, "len:", len(parser.tokens))
      9 
     10 	// Check if we can move the queue at the beginning of the buffer.
     11 	if parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) {
     12 		if parser.tokens_head != len(parser.tokens) {
     13 			copy(parser.tokens, parser.tokens[parser.tokens_head:])
     14 		}
     15 		parser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head]
     16 		parser.tokens_head = 0
     17 	}
     18 	parser.tokens = append(parser.tokens, *token)
     19 	if pos < 0 {
     20 		return
     21 	}
     22 	copy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:])
     23 	parser.tokens[parser.tokens_head+pos] = *token
     24 }
     25 
     26 // Create a new parser object.
     27 func yaml_parser_initialize(parser *yaml_parser_t) bool {
     28 	*parser = yaml_parser_t{
     29 		raw_buffer: make([]byte, 0, input_raw_buffer_size),
     30 		buffer:     make([]byte, 0, input_buffer_size),
     31 	}
     32 	return true
     33 }
     34 
     35 // Destroy a parser object.
     36 func yaml_parser_delete(parser *yaml_parser_t) {
     37 	*parser = yaml_parser_t{}
     38 }
     39 
     40 // String read handler.
     41 func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {
     42 	if parser.input_pos == len(parser.input) {
     43 		return 0, io.EOF
     44 	}
     45 	n = copy(buffer, parser.input[parser.input_pos:])
     46 	parser.input_pos += n
     47 	return n, nil
     48 }
     49 
     50 // Reader read handler.
     51 func yaml_reader_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {
     52 	return parser.input_reader.Read(buffer)
     53 }
     54 
     55 // Set a string input.
     56 func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) {
     57 	if parser.read_handler != nil {
     58 		panic("must set the input source only once")
     59 	}
     60 	parser.read_handler = yaml_string_read_handler
     61 	parser.input = input
     62 	parser.input_pos = 0
     63 }
     64 
     65 // Set a file input.
     66 func yaml_parser_set_input_reader(parser *yaml_parser_t, r io.Reader) {
     67 	if parser.read_handler != nil {
     68 		panic("must set the input source only once")
     69 	}
     70 	parser.read_handler = yaml_reader_read_handler
     71 	parser.input_reader = r
     72 }
     73 
     74 // Set the source encoding.
     75 func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) {
     76 	if parser.encoding != yaml_ANY_ENCODING {
     77 		panic("must set the encoding only once")
     78 	}
     79 	parser.encoding = encoding
     80 }
     81 
     82 var disableLineWrapping = false
     83 
     84 // Create a new emitter object.
     85 func yaml_emitter_initialize(emitter *yaml_emitter_t) {
     86 	*emitter = yaml_emitter_t{
     87 		buffer:     make([]byte, output_buffer_size),
     88 		raw_buffer: make([]byte, 0, output_raw_buffer_size),
     89 		states:     make([]yaml_emitter_state_t, 0, initial_stack_size),
     90 		events:     make([]yaml_event_t, 0, initial_queue_size),
     91 	}
     92 	if disableLineWrapping {
     93 		emitter.best_width = -1
     94 	}
     95 }
     96 
     97 // Destroy an emitter object.
     98 func yaml_emitter_delete(emitter *yaml_emitter_t) {
     99 	*emitter = yaml_emitter_t{}
    100 }
    101 
    102 // String write handler.
    103 func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error {
    104 	*emitter.output_buffer = append(*emitter.output_buffer, buffer...)
    105 	return nil
    106 }
    107 
    108 // yaml_writer_write_handler uses emitter.output_writer to write the
    109 // emitted text.
    110 func yaml_writer_write_handler(emitter *yaml_emitter_t, buffer []byte) error {
    111 	_, err := emitter.output_writer.Write(buffer)
    112 	return err
    113 }
    114 
    115 // Set a string output.
    116 func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) {
    117 	if emitter.write_handler != nil {
    118 		panic("must set the output target only once")
    119 	}
    120 	emitter.write_handler = yaml_string_write_handler
    121 	emitter.output_buffer = output_buffer
    122 }
    123 
    124 // Set a file output.
    125 func yaml_emitter_set_output_writer(emitter *yaml_emitter_t, w io.Writer) {
    126 	if emitter.write_handler != nil {
    127 		panic("must set the output target only once")
    128 	}
    129 	emitter.write_handler = yaml_writer_write_handler
    130 	emitter.output_writer = w
    131 }
    132 
    133 // Set the output encoding.
    134 func yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) {
    135 	if emitter.encoding != yaml_ANY_ENCODING {
    136 		panic("must set the output encoding only once")
    137 	}
    138 	emitter.encoding = encoding
    139 }
    140 
    141 // Set the canonical output style.
    142 func yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) {
    143 	emitter.canonical = canonical
    144 }
    145 
    146 //// Set the indentation increment.
    147 func yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) {
    148 	if indent < 2 || indent > 9 {
    149 		indent = 2
    150 	}
    151 	emitter.best_indent = indent
    152 }
    153 
    154 // Set the preferred line width.
    155 func yaml_emitter_set_width(emitter *yaml_emitter_t, width int) {
    156 	if width < 0 {
    157 		width = -1
    158 	}
    159 	emitter.best_width = width
    160 }
    161 
    162 // Set if unescaped non-ASCII characters are allowed.
    163 func yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) {
    164 	emitter.unicode = unicode
    165 }
    166 
    167 // Set the preferred line break character.
    168 func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) {
    169 	emitter.line_break = line_break
    170 }
    171 
    172 ///*
    173 // * Destroy a token object.
    174 // */
    175 //
    176 //YAML_DECLARE(void)
    177 //yaml_token_delete(yaml_token_t *token)
    178 //{
    179 //    assert(token);  // Non-NULL token object expected.
    180 //
    181 //    switch (token.type)
    182 //    {
    183 //        case YAML_TAG_DIRECTIVE_TOKEN:
    184 //            yaml_free(token.data.tag_directive.handle);
    185 //            yaml_free(token.data.tag_directive.prefix);
    186 //            break;
    187 //
    188 //        case YAML_ALIAS_TOKEN:
    189 //            yaml_free(token.data.alias.value);
    190 //            break;
    191 //
    192 //        case YAML_ANCHOR_TOKEN:
    193 //            yaml_free(token.data.anchor.value);
    194 //            break;
    195 //
    196 //        case YAML_TAG_TOKEN:
    197 //            yaml_free(token.data.tag.handle);
    198 //            yaml_free(token.data.tag.suffix);
    199 //            break;
    200 //
    201 //        case YAML_SCALAR_TOKEN:
    202 //            yaml_free(token.data.scalar.value);
    203 //            break;
    204 //
    205 //        default:
    206 //            break;
    207 //    }
    208 //
    209 //    memset(token, 0, sizeof(yaml_token_t));
    210 //}
    211 //
    212 ///*
    213 // * Check if a string is a valid UTF-8 sequence.
    214 // *
    215 // * Check 'reader.c' for more details on UTF-8 encoding.
    216 // */
    217 //
    218 //static int
    219 //yaml_check_utf8(yaml_char_t *start, size_t length)
    220 //{
    221 //    yaml_char_t *end = start+length;
    222 //    yaml_char_t *pointer = start;
    223 //
    224 //    while (pointer < end) {
    225 //        unsigned char octet;
    226 //        unsigned int width;
    227 //        unsigned int value;
    228 //        size_t k;
    229 //
    230 //        octet = pointer[0];
    231 //        width = (octet & 0x80) == 0x00 ? 1 :
    232 //                (octet & 0xE0) == 0xC0 ? 2 :
    233 //                (octet & 0xF0) == 0xE0 ? 3 :
    234 //                (octet & 0xF8) == 0xF0 ? 4 : 0;
    235 //        value = (octet & 0x80) == 0x00 ? octet & 0x7F :
    236 //                (octet & 0xE0) == 0xC0 ? octet & 0x1F :
    237 //                (octet & 0xF0) == 0xE0 ? octet & 0x0F :
    238 //                (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0;
    239 //        if (!width) return 0;
    240 //        if (pointer+width > end) return 0;
    241 //        for (k = 1; k < width; k ++) {
    242 //            octet = pointer[k];
    243 //            if ((octet & 0xC0) != 0x80) return 0;
    244 //            value = (value << 6) + (octet & 0x3F);
    245 //        }
    246 //        if (!((width == 1) ||
    247 //            (width == 2 && value >= 0x80) ||
    248 //            (width == 3 && value >= 0x800) ||
    249 //            (width == 4 && value >= 0x10000))) return 0;
    250 //
    251 //        pointer += width;
    252 //    }
    253 //
    254 //    return 1;
    255 //}
    256 //
    257 
    258 // Create STREAM-START.
    259 func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) {
    260 	*event = yaml_event_t{
    261 		typ:      yaml_STREAM_START_EVENT,
    262 		encoding: encoding,
    263 	}
    264 }
    265 
    266 // Create STREAM-END.
    267 func yaml_stream_end_event_initialize(event *yaml_event_t) {
    268 	*event = yaml_event_t{
    269 		typ: yaml_STREAM_END_EVENT,
    270 	}
    271 }
    272 
    273 // Create DOCUMENT-START.
    274 func yaml_document_start_event_initialize(
    275 	event *yaml_event_t,
    276 	version_directive *yaml_version_directive_t,
    277 	tag_directives []yaml_tag_directive_t,
    278 	implicit bool,
    279 ) {
    280 	*event = yaml_event_t{
    281 		typ:               yaml_DOCUMENT_START_EVENT,
    282 		version_directive: version_directive,
    283 		tag_directives:    tag_directives,
    284 		implicit:          implicit,
    285 	}
    286 }
    287 
    288 // Create DOCUMENT-END.
    289 func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) {
    290 	*event = yaml_event_t{
    291 		typ:      yaml_DOCUMENT_END_EVENT,
    292 		implicit: implicit,
    293 	}
    294 }
    295 
    296 ///*
    297 // * Create ALIAS.
    298 // */
    299 //
    300 //YAML_DECLARE(int)
    301 //yaml_alias_event_initialize(event *yaml_event_t, anchor *yaml_char_t)
    302 //{
    303 //    mark yaml_mark_t = { 0, 0, 0 }
    304 //    anchor_copy *yaml_char_t = NULL
    305 //
    306 //    assert(event) // Non-NULL event object is expected.
    307 //    assert(anchor) // Non-NULL anchor is expected.
    308 //
    309 //    if (!yaml_check_utf8(anchor, strlen((char *)anchor))) return 0
    310 //
    311 //    anchor_copy = yaml_strdup(anchor)
    312 //    if (!anchor_copy)
    313 //        return 0
    314 //
    315 //    ALIAS_EVENT_INIT(*event, anchor_copy, mark, mark)
    316 //
    317 //    return 1
    318 //}
    319 
    320 // Create SCALAR.
    321 func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool {
    322 	*event = yaml_event_t{
    323 		typ:             yaml_SCALAR_EVENT,
    324 		anchor:          anchor,
    325 		tag:             tag,
    326 		value:           value,
    327 		implicit:        plain_implicit,
    328 		quoted_implicit: quoted_implicit,
    329 		style:           yaml_style_t(style),
    330 	}
    331 	return true
    332 }
    333 
    334 // Create SEQUENCE-START.
    335 func yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool {
    336 	*event = yaml_event_t{
    337 		typ:      yaml_SEQUENCE_START_EVENT,
    338 		anchor:   anchor,
    339 		tag:      tag,
    340 		implicit: implicit,
    341 		style:    yaml_style_t(style),
    342 	}
    343 	return true
    344 }
    345 
    346 // Create SEQUENCE-END.
    347 func yaml_sequence_end_event_initialize(event *yaml_event_t) bool {
    348 	*event = yaml_event_t{
    349 		typ: yaml_SEQUENCE_END_EVENT,
    350 	}
    351 	return true
    352 }
    353 
    354 // Create MAPPING-START.
    355 func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) {
    356 	*event = yaml_event_t{
    357 		typ:      yaml_MAPPING_START_EVENT,
    358 		anchor:   anchor,
    359 		tag:      tag,
    360 		implicit: implicit,
    361 		style:    yaml_style_t(style),
    362 	}
    363 }
    364 
    365 // Create MAPPING-END.
    366 func yaml_mapping_end_event_initialize(event *yaml_event_t) {
    367 	*event = yaml_event_t{
    368 		typ: yaml_MAPPING_END_EVENT,
    369 	}
    370 }
    371 
    372 // Destroy an event object.
    373 func yaml_event_delete(event *yaml_event_t) {
    374 	*event = yaml_event_t{}
    375 }
    376 
    377 ///*
    378 // * Create a document object.
    379 // */
    380 //
    381 //YAML_DECLARE(int)
    382 //yaml_document_initialize(document *yaml_document_t,
    383 //        version_directive *yaml_version_directive_t,
    384 //        tag_directives_start *yaml_tag_directive_t,
    385 //        tag_directives_end *yaml_tag_directive_t,
    386 //        start_implicit int, end_implicit int)
    387 //{
    388 //    struct {
    389 //        error yaml_error_type_t
    390 //    } context
    391 //    struct {
    392 //        start *yaml_node_t
    393 //        end *yaml_node_t
    394 //        top *yaml_node_t
    395 //    } nodes = { NULL, NULL, NULL }
    396 //    version_directive_copy *yaml_version_directive_t = NULL
    397 //    struct {
    398 //        start *yaml_tag_directive_t
    399 //        end *yaml_tag_directive_t
    400 //        top *yaml_tag_directive_t
    401 //    } tag_directives_copy = { NULL, NULL, NULL }
    402 //    value yaml_tag_directive_t = { NULL, NULL }
    403 //    mark yaml_mark_t = { 0, 0, 0 }
    404 //
    405 //    assert(document) // Non-NULL document object is expected.
    406 //    assert((tag_directives_start && tag_directives_end) ||
    407 //            (tag_directives_start == tag_directives_end))
    408 //                            // Valid tag directives are expected.
    409 //
    410 //    if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error
    411 //
    412 //    if (version_directive) {
    413 //        version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t))
    414 //        if (!version_directive_copy) goto error
    415 //        version_directive_copy.major = version_directive.major
    416 //        version_directive_copy.minor = version_directive.minor
    417 //    }
    418 //
    419 //    if (tag_directives_start != tag_directives_end) {
    420 //        tag_directive *yaml_tag_directive_t
    421 //        if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE))
    422 //            goto error
    423 //        for (tag_directive = tag_directives_start
    424 //                tag_directive != tag_directives_end; tag_directive ++) {
    425 //            assert(tag_directive.handle)
    426 //            assert(tag_directive.prefix)
    427 //            if (!yaml_check_utf8(tag_directive.handle,
    428 //                        strlen((char *)tag_directive.handle)))
    429 //                goto error
    430 //            if (!yaml_check_utf8(tag_directive.prefix,
    431 //                        strlen((char *)tag_directive.prefix)))
    432 //                goto error
    433 //            value.handle = yaml_strdup(tag_directive.handle)
    434 //            value.prefix = yaml_strdup(tag_directive.prefix)
    435 //            if (!value.handle || !value.prefix) goto error
    436 //            if (!PUSH(&context, tag_directives_copy, value))
    437 //                goto error
    438 //            value.handle = NULL
    439 //            value.prefix = NULL
    440 //        }
    441 //    }
    442 //
    443 //    DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy,
    444 //            tag_directives_copy.start, tag_directives_copy.top,
    445 //            start_implicit, end_implicit, mark, mark)
    446 //
    447 //    return 1
    448 //
    449 //error:
    450 //    STACK_DEL(&context, nodes)
    451 //    yaml_free(version_directive_copy)
    452 //    while (!STACK_EMPTY(&context, tag_directives_copy)) {
    453 //        value yaml_tag_directive_t = POP(&context, tag_directives_copy)
    454 //        yaml_free(value.handle)
    455 //        yaml_free(value.prefix)
    456 //    }
    457 //    STACK_DEL(&context, tag_directives_copy)
    458 //    yaml_free(value.handle)
    459 //    yaml_free(value.prefix)
    460 //
    461 //    return 0
    462 //}
    463 //
    464 ///*
    465 // * Destroy a document object.
    466 // */
    467 //
    468 //YAML_DECLARE(void)
    469 //yaml_document_delete(document *yaml_document_t)
    470 //{
    471 //    struct {
    472 //        error yaml_error_type_t
    473 //    } context
    474 //    tag_directive *yaml_tag_directive_t
    475 //
    476 //    context.error = YAML_NO_ERROR // Eliminate a compiler warning.
    477 //
    478 //    assert(document) // Non-NULL document object is expected.
    479 //
    480 //    while (!STACK_EMPTY(&context, document.nodes)) {
    481 //        node yaml_node_t = POP(&context, document.nodes)
    482 //        yaml_free(node.tag)
    483 //        switch (node.type) {
    484 //            case YAML_SCALAR_NODE:
    485 //                yaml_free(node.data.scalar.value)
    486 //                break
    487 //            case YAML_SEQUENCE_NODE:
    488 //                STACK_DEL(&context, node.data.sequence.items)
    489 //                break
    490 //            case YAML_MAPPING_NODE:
    491 //                STACK_DEL(&context, node.data.mapping.pairs)
    492 //                break
    493 //            default:
    494 //                assert(0) // Should not happen.
    495 //        }
    496 //    }
    497 //    STACK_DEL(&context, document.nodes)
    498 //
    499 //    yaml_free(document.version_directive)
    500 //    for (tag_directive = document.tag_directives.start
    501 //            tag_directive != document.tag_directives.end
    502 //            tag_directive++) {
    503 //        yaml_free(tag_directive.handle)
    504 //        yaml_free(tag_directive.prefix)
    505 //    }
    506 //    yaml_free(document.tag_directives.start)
    507 //
    508 //    memset(document, 0, sizeof(yaml_document_t))
    509 //}
    510 //
    511 ///**
    512 // * Get a document node.
    513 // */
    514 //
    515 //YAML_DECLARE(yaml_node_t *)
    516 //yaml_document_get_node(document *yaml_document_t, index int)
    517 //{
    518 //    assert(document) // Non-NULL document object is expected.
    519 //
    520 //    if (index > 0 && document.nodes.start + index <= document.nodes.top) {
    521 //        return document.nodes.start + index - 1
    522 //    }
    523 //    return NULL
    524 //}
    525 //
    526 ///**
    527 // * Get the root object.
    528 // */
    529 //
    530 //YAML_DECLARE(yaml_node_t *)
    531 //yaml_document_get_root_node(document *yaml_document_t)
    532 //{
    533 //    assert(document) // Non-NULL document object is expected.
    534 //
    535 //    if (document.nodes.top != document.nodes.start) {
    536 //        return document.nodes.start
    537 //    }
    538 //    return NULL
    539 //}
    540 //
    541 ///*
    542 // * Add a scalar node to a document.
    543 // */
    544 //
    545 //YAML_DECLARE(int)
    546 //yaml_document_add_scalar(document *yaml_document_t,
    547 //        tag *yaml_char_t, value *yaml_char_t, length int,
    548 //        style yaml_scalar_style_t)
    549 //{
    550 //    struct {
    551 //        error yaml_error_type_t
    552 //    } context
    553 //    mark yaml_mark_t = { 0, 0, 0 }
    554 //    tag_copy *yaml_char_t = NULL
    555 //    value_copy *yaml_char_t = NULL
    556 //    node yaml_node_t
    557 //
    558 //    assert(document) // Non-NULL document object is expected.
    559 //    assert(value) // Non-NULL value is expected.
    560 //
    561 //    if (!tag) {
    562 //        tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG
    563 //    }
    564 //
    565 //    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
    566 //    tag_copy = yaml_strdup(tag)
    567 //    if (!tag_copy) goto error
    568 //
    569 //    if (length < 0) {
    570 //        length = strlen((char *)value)
    571 //    }
    572 //
    573 //    if (!yaml_check_utf8(value, length)) goto error
    574 //    value_copy = yaml_malloc(length+1)
    575 //    if (!value_copy) goto error
    576 //    memcpy(value_copy, value, length)
    577 //    value_copy[length] = '\0'
    578 //
    579 //    SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark)
    580 //    if (!PUSH(&context, document.nodes, node)) goto error
    581 //
    582 //    return document.nodes.top - document.nodes.start
    583 //
    584 //error:
    585 //    yaml_free(tag_copy)
    586 //    yaml_free(value_copy)
    587 //
    588 //    return 0
    589 //}
    590 //
    591 ///*
    592 // * Add a sequence node to a document.
    593 // */
    594 //
    595 //YAML_DECLARE(int)
    596 //yaml_document_add_sequence(document *yaml_document_t,
    597 //        tag *yaml_char_t, style yaml_sequence_style_t)
    598 //{
    599 //    struct {
    600 //        error yaml_error_type_t
    601 //    } context
    602 //    mark yaml_mark_t = { 0, 0, 0 }
    603 //    tag_copy *yaml_char_t = NULL
    604 //    struct {
    605 //        start *yaml_node_item_t
    606 //        end *yaml_node_item_t
    607 //        top *yaml_node_item_t
    608 //    } items = { NULL, NULL, NULL }
    609 //    node yaml_node_t
    610 //
    611 //    assert(document) // Non-NULL document object is expected.
    612 //
    613 //    if (!tag) {
    614 //        tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG
    615 //    }
    616 //
    617 //    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
    618 //    tag_copy = yaml_strdup(tag)
    619 //    if (!tag_copy) goto error
    620 //
    621 //    if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error
    622 //
    623 //    SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end,
    624 //            style, mark, mark)
    625 //    if (!PUSH(&context, document.nodes, node)) goto error
    626 //
    627 //    return document.nodes.top - document.nodes.start
    628 //
    629 //error:
    630 //    STACK_DEL(&context, items)
    631 //    yaml_free(tag_copy)
    632 //
    633 //    return 0
    634 //}
    635 //
    636 ///*
    637 // * Add a mapping node to a document.
    638 // */
    639 //
    640 //YAML_DECLARE(int)
    641 //yaml_document_add_mapping(document *yaml_document_t,
    642 //        tag *yaml_char_t, style yaml_mapping_style_t)
    643 //{
    644 //    struct {
    645 //        error yaml_error_type_t
    646 //    } context
    647 //    mark yaml_mark_t = { 0, 0, 0 }
    648 //    tag_copy *yaml_char_t = NULL
    649 //    struct {
    650 //        start *yaml_node_pair_t
    651 //        end *yaml_node_pair_t
    652 //        top *yaml_node_pair_t
    653 //    } pairs = { NULL, NULL, NULL }
    654 //    node yaml_node_t
    655 //
    656 //    assert(document) // Non-NULL document object is expected.
    657 //
    658 //    if (!tag) {
    659 //        tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG
    660 //    }
    661 //
    662 //    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
    663 //    tag_copy = yaml_strdup(tag)
    664 //    if (!tag_copy) goto error
    665 //
    666 //    if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error
    667 //
    668 //    MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end,
    669 //            style, mark, mark)
    670 //    if (!PUSH(&context, document.nodes, node)) goto error
    671 //
    672 //    return document.nodes.top - document.nodes.start
    673 //
    674 //error:
    675 //    STACK_DEL(&context, pairs)
    676 //    yaml_free(tag_copy)
    677 //
    678 //    return 0
    679 //}
    680 //
    681 ///*
    682 // * Append an item to a sequence node.
    683 // */
    684 //
    685 //YAML_DECLARE(int)
    686 //yaml_document_append_sequence_item(document *yaml_document_t,
    687 //        sequence int, item int)
    688 //{
    689 //    struct {
    690 //        error yaml_error_type_t
    691 //    } context
    692 //
    693 //    assert(document) // Non-NULL document is required.
    694 //    assert(sequence > 0
    695 //            && document.nodes.start + sequence <= document.nodes.top)
    696 //                            // Valid sequence id is required.
    697 //    assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE)
    698 //                            // A sequence node is required.
    699 //    assert(item > 0 && document.nodes.start + item <= document.nodes.top)
    700 //                            // Valid item id is required.
    701 //
    702 //    if (!PUSH(&context,
    703 //                document.nodes.start[sequence-1].data.sequence.items, item))
    704 //        return 0
    705 //
    706 //    return 1
    707 //}
    708 //
    709 ///*
    710 // * Append a pair of a key and a value to a mapping node.
    711 // */
    712 //
    713 //YAML_DECLARE(int)
    714 //yaml_document_append_mapping_pair(document *yaml_document_t,
    715 //        mapping int, key int, value int)
    716 //{
    717 //    struct {
    718 //        error yaml_error_type_t
    719 //    } context
    720 //
    721 //    pair yaml_node_pair_t
    722 //
    723 //    assert(document) // Non-NULL document is required.
    724 //    assert(mapping > 0
    725 //            && document.nodes.start + mapping <= document.nodes.top)
    726 //                            // Valid mapping id is required.
    727 //    assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE)
    728 //                            // A mapping node is required.
    729 //    assert(key > 0 && document.nodes.start + key <= document.nodes.top)
    730 //                            // Valid key id is required.
    731 //    assert(value > 0 && document.nodes.start + value <= document.nodes.top)
    732 //                            // Valid value id is required.
    733 //
    734 //    pair.key = key
    735 //    pair.value = value
    736 //
    737 //    if (!PUSH(&context,
    738 //                document.nodes.start[mapping-1].data.mapping.pairs, pair))
    739 //        return 0
    740 //
    741 //    return 1
    742 //}
    743 //
    744 //