github.com/pankona/gometalinter@v2.0.11+incompatible/_linters/src/gopkg.in/yaml.v2/apic.go (about)

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