annotate vendor/gopkg.in/yaml.v2/parserc.go @ 68:4b79810863f6 draft

Ready to release 0.6.0 Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Wed, 13 Sep 2023 10:49:50 +0000
parents 787b5ee0289d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
66
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1 package yaml
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
2
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
3 import (
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
4 "bytes"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
5 )
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
6
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
7 // The parser implements the following grammar:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
8 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
9 // stream ::= STREAM-START implicit_document? explicit_document* STREAM-END
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
10 // implicit_document ::= block_node DOCUMENT-END*
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
11 // explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
12 // block_node_or_indentless_sequence ::=
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
13 // ALIAS
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
14 // | properties (block_content | indentless_block_sequence)?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
15 // | block_content
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
16 // | indentless_block_sequence
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
17 // block_node ::= ALIAS
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
18 // | properties block_content?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
19 // | block_content
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
20 // flow_node ::= ALIAS
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
21 // | properties flow_content?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
22 // | flow_content
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
23 // properties ::= TAG ANCHOR? | ANCHOR TAG?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
24 // block_content ::= block_collection | flow_collection | SCALAR
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
25 // flow_content ::= flow_collection | SCALAR
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
26 // block_collection ::= block_sequence | block_mapping
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
27 // flow_collection ::= flow_sequence | flow_mapping
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
28 // block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
29 // indentless_sequence ::= (BLOCK-ENTRY block_node?)+
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
30 // block_mapping ::= BLOCK-MAPPING_START
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
31 // ((KEY block_node_or_indentless_sequence?)?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
32 // (VALUE block_node_or_indentless_sequence?)?)*
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
33 // BLOCK-END
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
34 // flow_sequence ::= FLOW-SEQUENCE-START
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
35 // (flow_sequence_entry FLOW-ENTRY)*
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
36 // flow_sequence_entry?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
37 // FLOW-SEQUENCE-END
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
38 // flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
39 // flow_mapping ::= FLOW-MAPPING-START
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
40 // (flow_mapping_entry FLOW-ENTRY)*
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
41 // flow_mapping_entry?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
42 // FLOW-MAPPING-END
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
43 // flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
44
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
45 // Peek the next token in the token queue.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
46 func peek_token(parser *yaml_parser_t) *yaml_token_t {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
47 if parser.token_available || yaml_parser_fetch_more_tokens(parser) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
48 return &parser.tokens[parser.tokens_head]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
49 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
50 return nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
51 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
52
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
53 // Remove the next token from the queue (must be called after peek_token).
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
54 func skip_token(parser *yaml_parser_t) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
55 parser.token_available = false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
56 parser.tokens_parsed++
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
57 parser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
58 parser.tokens_head++
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
59 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
60
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
61 // Get the next event.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
62 func yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
63 // Erase the event object.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
64 *event = yaml_event_t{}
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
65
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
66 // No events after the end of the stream or error.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
67 if parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
68 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
69 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
70
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
71 // Generate the next event.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
72 return yaml_parser_state_machine(parser, event)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
73 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
74
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
75 // Set parser error.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
76 func yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
77 parser.error = yaml_PARSER_ERROR
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
78 parser.problem = problem
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
79 parser.problem_mark = problem_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
80 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
81 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
82
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
83 func yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
84 parser.error = yaml_PARSER_ERROR
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
85 parser.context = context
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
86 parser.context_mark = context_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
87 parser.problem = problem
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
88 parser.problem_mark = problem_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
89 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
90 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
91
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
92 // State dispatcher.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
93 func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
94 //trace("yaml_parser_state_machine", "state:", parser.state.String())
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
95
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
96 switch parser.state {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
97 case yaml_PARSE_STREAM_START_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
98 return yaml_parser_parse_stream_start(parser, event)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
99
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
100 case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
101 return yaml_parser_parse_document_start(parser, event, true)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
102
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
103 case yaml_PARSE_DOCUMENT_START_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
104 return yaml_parser_parse_document_start(parser, event, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
105
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
106 case yaml_PARSE_DOCUMENT_CONTENT_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
107 return yaml_parser_parse_document_content(parser, event)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
108
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
109 case yaml_PARSE_DOCUMENT_END_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
110 return yaml_parser_parse_document_end(parser, event)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
111
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
112 case yaml_PARSE_BLOCK_NODE_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
113 return yaml_parser_parse_node(parser, event, true, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
114
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
115 case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
116 return yaml_parser_parse_node(parser, event, true, true)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
117
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
118 case yaml_PARSE_FLOW_NODE_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
119 return yaml_parser_parse_node(parser, event, false, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
120
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
121 case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
122 return yaml_parser_parse_block_sequence_entry(parser, event, true)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
123
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
124 case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
125 return yaml_parser_parse_block_sequence_entry(parser, event, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
126
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
127 case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
128 return yaml_parser_parse_indentless_sequence_entry(parser, event)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
129
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
130 case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
131 return yaml_parser_parse_block_mapping_key(parser, event, true)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
132
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
133 case yaml_PARSE_BLOCK_MAPPING_KEY_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
134 return yaml_parser_parse_block_mapping_key(parser, event, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
135
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
136 case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
137 return yaml_parser_parse_block_mapping_value(parser, event)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
138
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
139 case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
140 return yaml_parser_parse_flow_sequence_entry(parser, event, true)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
141
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
142 case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
143 return yaml_parser_parse_flow_sequence_entry(parser, event, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
144
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
145 case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
146 return yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
147
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
148 case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
149 return yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
150
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
151 case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
152 return yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
153
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
154 case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
155 return yaml_parser_parse_flow_mapping_key(parser, event, true)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
156
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
157 case yaml_PARSE_FLOW_MAPPING_KEY_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
158 return yaml_parser_parse_flow_mapping_key(parser, event, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
159
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
160 case yaml_PARSE_FLOW_MAPPING_VALUE_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
161 return yaml_parser_parse_flow_mapping_value(parser, event, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
162
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
163 case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
164 return yaml_parser_parse_flow_mapping_value(parser, event, true)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
165
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
166 default:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
167 panic("invalid parser state")
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
168 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
169 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
170
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
171 // Parse the production:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
172 // stream ::= STREAM-START implicit_document? explicit_document* STREAM-END
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
173 // ************
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
174 func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
175 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
176 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
177 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
178 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
179 if token.typ != yaml_STREAM_START_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
180 return yaml_parser_set_parser_error(parser, "did not find expected <stream-start>", token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
181 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
182 parser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
183 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
184 typ: yaml_STREAM_START_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
185 start_mark: token.start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
186 end_mark: token.end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
187 encoding: token.encoding,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
188 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
189 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
190 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
191 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
192
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
193 // Parse the productions:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
194 // implicit_document ::= block_node DOCUMENT-END*
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
195 // *
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
196 // explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
197 // *************************
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
198 func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
199
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
200 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
201 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
202 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
203 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
204
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
205 // Parse extra document end indicators.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
206 if !implicit {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
207 for token.typ == yaml_DOCUMENT_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
208 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
209 token = peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
210 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
211 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
212 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
213 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
214 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
215
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
216 if implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN &&
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
217 token.typ != yaml_TAG_DIRECTIVE_TOKEN &&
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
218 token.typ != yaml_DOCUMENT_START_TOKEN &&
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
219 token.typ != yaml_STREAM_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
220 // Parse an implicit document.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
221 if !yaml_parser_process_directives(parser, nil, nil) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
222 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
223 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
224 parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
225 parser.state = yaml_PARSE_BLOCK_NODE_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
226
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
227 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
228 typ: yaml_DOCUMENT_START_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
229 start_mark: token.start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
230 end_mark: token.end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
231 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
232
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
233 } else if token.typ != yaml_STREAM_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
234 // Parse an explicit document.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
235 var version_directive *yaml_version_directive_t
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
236 var tag_directives []yaml_tag_directive_t
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
237 start_mark := token.start_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
238 if !yaml_parser_process_directives(parser, &version_directive, &tag_directives) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
239 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
240 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
241 token = peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
242 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
243 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
244 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
245 if token.typ != yaml_DOCUMENT_START_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
246 yaml_parser_set_parser_error(parser,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
247 "did not find expected <document start>", token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
248 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
249 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
250 parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
251 parser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
252 end_mark := token.end_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
253
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
254 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
255 typ: yaml_DOCUMENT_START_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
256 start_mark: start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
257 end_mark: end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
258 version_directive: version_directive,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
259 tag_directives: tag_directives,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
260 implicit: false,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
261 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
262 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
263
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
264 } else {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
265 // Parse the stream end.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
266 parser.state = yaml_PARSE_END_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
267 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
268 typ: yaml_STREAM_END_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
269 start_mark: token.start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
270 end_mark: token.end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
271 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
272 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
273 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
274
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
275 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
276 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
277
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
278 // Parse the productions:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
279 // explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
280 // ***********
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
281 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
282 func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
283 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
284 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
285 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
286 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
287 if token.typ == yaml_VERSION_DIRECTIVE_TOKEN ||
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
288 token.typ == yaml_TAG_DIRECTIVE_TOKEN ||
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
289 token.typ == yaml_DOCUMENT_START_TOKEN ||
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
290 token.typ == yaml_DOCUMENT_END_TOKEN ||
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
291 token.typ == yaml_STREAM_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
292 parser.state = parser.states[len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
293 parser.states = parser.states[:len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
294 return yaml_parser_process_empty_scalar(parser, event,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
295 token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
296 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
297 return yaml_parser_parse_node(parser, event, true, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
298 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
299
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
300 // Parse the productions:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
301 // implicit_document ::= block_node DOCUMENT-END*
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
302 // *************
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
303 // explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
304 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
305 func yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
306 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
307 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
308 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
309 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
310
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
311 start_mark := token.start_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
312 end_mark := token.start_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
313
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
314 implicit := true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
315 if token.typ == yaml_DOCUMENT_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
316 end_mark = token.end_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
317 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
318 implicit = false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
319 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
320
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
321 parser.tag_directives = parser.tag_directives[:0]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
322
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
323 parser.state = yaml_PARSE_DOCUMENT_START_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
324 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
325 typ: yaml_DOCUMENT_END_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
326 start_mark: start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
327 end_mark: end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
328 implicit: implicit,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
329 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
330 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
331 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
332
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
333 // Parse the productions:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
334 // block_node_or_indentless_sequence ::=
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
335 // ALIAS
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
336 // *****
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
337 // | properties (block_content | indentless_block_sequence)?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
338 // ********** *
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
339 // | block_content | indentless_block_sequence
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
340 // *
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
341 // block_node ::= ALIAS
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
342 // *****
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
343 // | properties block_content?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
344 // ********** *
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
345 // | block_content
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
346 // *
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
347 // flow_node ::= ALIAS
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
348 // *****
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
349 // | properties flow_content?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
350 // ********** *
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
351 // | flow_content
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
352 // *
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
353 // properties ::= TAG ANCHOR? | ANCHOR TAG?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
354 // *************************
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
355 // block_content ::= block_collection | flow_collection | SCALAR
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
356 // ******
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
357 // flow_content ::= flow_collection | SCALAR
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
358 // ******
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
359 func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
360 //defer trace("yaml_parser_parse_node", "block:", block, "indentless_sequence:", indentless_sequence)()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
361
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
362 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
363 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
364 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
365 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
366
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
367 if token.typ == yaml_ALIAS_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
368 parser.state = parser.states[len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
369 parser.states = parser.states[:len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
370 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
371 typ: yaml_ALIAS_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
372 start_mark: token.start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
373 end_mark: token.end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
374 anchor: token.value,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
375 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
376 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
377 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
378 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
379
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
380 start_mark := token.start_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
381 end_mark := token.start_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
382
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
383 var tag_token bool
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
384 var tag_handle, tag_suffix, anchor []byte
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
385 var tag_mark yaml_mark_t
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
386 if token.typ == yaml_ANCHOR_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
387 anchor = token.value
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
388 start_mark = token.start_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
389 end_mark = token.end_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
390 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
391 token = peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
392 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
393 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
394 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
395 if token.typ == yaml_TAG_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
396 tag_token = true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
397 tag_handle = token.value
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
398 tag_suffix = token.suffix
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
399 tag_mark = token.start_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
400 end_mark = token.end_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
401 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
402 token = peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
403 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
404 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
405 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
406 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
407 } else if token.typ == yaml_TAG_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
408 tag_token = true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
409 tag_handle = token.value
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
410 tag_suffix = token.suffix
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
411 start_mark = token.start_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
412 tag_mark = token.start_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
413 end_mark = token.end_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
414 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
415 token = peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
416 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
417 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
418 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
419 if token.typ == yaml_ANCHOR_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
420 anchor = token.value
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
421 end_mark = token.end_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
422 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
423 token = peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
424 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
425 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
426 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
427 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
428 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
429
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
430 var tag []byte
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
431 if tag_token {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
432 if len(tag_handle) == 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
433 tag = tag_suffix
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
434 tag_suffix = nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
435 } else {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
436 for i := range parser.tag_directives {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
437 if bytes.Equal(parser.tag_directives[i].handle, tag_handle) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
438 tag = append([]byte(nil), parser.tag_directives[i].prefix...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
439 tag = append(tag, tag_suffix...)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
440 break
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
441 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
442 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
443 if len(tag) == 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
444 yaml_parser_set_parser_error_context(parser,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
445 "while parsing a node", start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
446 "found undefined tag handle", tag_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
447 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
448 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
449 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
450 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
451
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
452 implicit := len(tag) == 0
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
453 if indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
454 end_mark = token.end_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
455 parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
456 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
457 typ: yaml_SEQUENCE_START_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
458 start_mark: start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
459 end_mark: end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
460 anchor: anchor,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
461 tag: tag,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
462 implicit: implicit,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
463 style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
464 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
465 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
466 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
467 if token.typ == yaml_SCALAR_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
468 var plain_implicit, quoted_implicit bool
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
469 end_mark = token.end_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
470 if (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
471 plain_implicit = true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
472 } else if len(tag) == 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
473 quoted_implicit = true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
474 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
475 parser.state = parser.states[len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
476 parser.states = parser.states[:len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
477
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
478 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
479 typ: yaml_SCALAR_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
480 start_mark: start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
481 end_mark: end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
482 anchor: anchor,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
483 tag: tag,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
484 value: token.value,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
485 implicit: plain_implicit,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
486 quoted_implicit: quoted_implicit,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
487 style: yaml_style_t(token.style),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
488 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
489 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
490 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
491 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
492 if token.typ == yaml_FLOW_SEQUENCE_START_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
493 // [Go] Some of the events below can be merged as they differ only on style.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
494 end_mark = token.end_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
495 parser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
496 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
497 typ: yaml_SEQUENCE_START_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
498 start_mark: start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
499 end_mark: end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
500 anchor: anchor,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
501 tag: tag,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
502 implicit: implicit,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
503 style: yaml_style_t(yaml_FLOW_SEQUENCE_STYLE),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
504 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
505 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
506 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
507 if token.typ == yaml_FLOW_MAPPING_START_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
508 end_mark = token.end_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
509 parser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
510 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
511 typ: yaml_MAPPING_START_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
512 start_mark: start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
513 end_mark: end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
514 anchor: anchor,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
515 tag: tag,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
516 implicit: implicit,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
517 style: yaml_style_t(yaml_FLOW_MAPPING_STYLE),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
518 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
519 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
520 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
521 if block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
522 end_mark = token.end_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
523 parser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
524 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
525 typ: yaml_SEQUENCE_START_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
526 start_mark: start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
527 end_mark: end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
528 anchor: anchor,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
529 tag: tag,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
530 implicit: implicit,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
531 style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
532 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
533 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
534 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
535 if block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
536 end_mark = token.end_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
537 parser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
538 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
539 typ: yaml_MAPPING_START_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
540 start_mark: start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
541 end_mark: end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
542 anchor: anchor,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
543 tag: tag,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
544 implicit: implicit,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
545 style: yaml_style_t(yaml_BLOCK_MAPPING_STYLE),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
546 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
547 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
548 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
549 if len(anchor) > 0 || len(tag) > 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
550 parser.state = parser.states[len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
551 parser.states = parser.states[:len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
552
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
553 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
554 typ: yaml_SCALAR_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
555 start_mark: start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
556 end_mark: end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
557 anchor: anchor,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
558 tag: tag,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
559 implicit: implicit,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
560 quoted_implicit: false,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
561 style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
562 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
563 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
564 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
565
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
566 context := "while parsing a flow node"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
567 if block {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
568 context = "while parsing a block node"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
569 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
570 yaml_parser_set_parser_error_context(parser, context, start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
571 "did not find expected node content", token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
572 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
573 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
574
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
575 // Parse the productions:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
576 // block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
577 // ******************** *********** * *********
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
578 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
579 func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
580 if first {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
581 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
582 parser.marks = append(parser.marks, token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
583 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
584 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
585
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
586 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
587 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
588 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
589 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
590
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
591 if token.typ == yaml_BLOCK_ENTRY_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
592 mark := token.end_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
593 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
594 token = peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
595 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
596 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
597 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
598 if token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
599 parser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
600 return yaml_parser_parse_node(parser, event, true, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
601 } else {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
602 parser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
603 return yaml_parser_process_empty_scalar(parser, event, mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
604 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
605 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
606 if token.typ == yaml_BLOCK_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
607 parser.state = parser.states[len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
608 parser.states = parser.states[:len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
609 parser.marks = parser.marks[:len(parser.marks)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
610
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
611 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
612 typ: yaml_SEQUENCE_END_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
613 start_mark: token.start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
614 end_mark: token.end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
615 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
616
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
617 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
618 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
619 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
620
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
621 context_mark := parser.marks[len(parser.marks)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
622 parser.marks = parser.marks[:len(parser.marks)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
623 return yaml_parser_set_parser_error_context(parser,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
624 "while parsing a block collection", context_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
625 "did not find expected '-' indicator", token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
626 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
627
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
628 // Parse the productions:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
629 // indentless_sequence ::= (BLOCK-ENTRY block_node?)+
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
630 // *********** *
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
631 func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
632 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
633 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
634 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
635 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
636
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
637 if token.typ == yaml_BLOCK_ENTRY_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
638 mark := token.end_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
639 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
640 token = peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
641 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
642 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
643 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
644 if token.typ != yaml_BLOCK_ENTRY_TOKEN &&
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
645 token.typ != yaml_KEY_TOKEN &&
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
646 token.typ != yaml_VALUE_TOKEN &&
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
647 token.typ != yaml_BLOCK_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
648 parser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
649 return yaml_parser_parse_node(parser, event, true, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
650 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
651 parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
652 return yaml_parser_process_empty_scalar(parser, event, mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
653 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
654 parser.state = parser.states[len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
655 parser.states = parser.states[:len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
656
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
657 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
658 typ: yaml_SEQUENCE_END_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
659 start_mark: token.start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
660 end_mark: token.start_mark, // [Go] Shouldn't this be token.end_mark?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
661 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
662 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
663 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
664
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
665 // Parse the productions:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
666 // block_mapping ::= BLOCK-MAPPING_START
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
667 // *******************
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
668 // ((KEY block_node_or_indentless_sequence?)?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
669 // *** *
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
670 // (VALUE block_node_or_indentless_sequence?)?)*
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
671 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
672 // BLOCK-END
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
673 // *********
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
674 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
675 func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
676 if first {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
677 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
678 parser.marks = append(parser.marks, token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
679 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
680 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
681
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
682 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
683 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
684 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
685 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
686
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
687 if token.typ == yaml_KEY_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
688 mark := token.end_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
689 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
690 token = peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
691 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
692 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
693 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
694 if token.typ != yaml_KEY_TOKEN &&
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
695 token.typ != yaml_VALUE_TOKEN &&
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
696 token.typ != yaml_BLOCK_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
697 parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
698 return yaml_parser_parse_node(parser, event, true, true)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
699 } else {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
700 parser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
701 return yaml_parser_process_empty_scalar(parser, event, mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
702 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
703 } else if token.typ == yaml_BLOCK_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
704 parser.state = parser.states[len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
705 parser.states = parser.states[:len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
706 parser.marks = parser.marks[:len(parser.marks)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
707 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
708 typ: yaml_MAPPING_END_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
709 start_mark: token.start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
710 end_mark: token.end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
711 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
712 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
713 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
714 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
715
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
716 context_mark := parser.marks[len(parser.marks)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
717 parser.marks = parser.marks[:len(parser.marks)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
718 return yaml_parser_set_parser_error_context(parser,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
719 "while parsing a block mapping", context_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
720 "did not find expected key", token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
721 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
722
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
723 // Parse the productions:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
724 // block_mapping ::= BLOCK-MAPPING_START
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
725 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
726 // ((KEY block_node_or_indentless_sequence?)?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
727 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
728 // (VALUE block_node_or_indentless_sequence?)?)*
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
729 // ***** *
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
730 // BLOCK-END
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
731 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
732 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
733 func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
734 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
735 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
736 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
737 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
738 if token.typ == yaml_VALUE_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
739 mark := token.end_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
740 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
741 token = peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
742 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
743 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
744 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
745 if token.typ != yaml_KEY_TOKEN &&
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
746 token.typ != yaml_VALUE_TOKEN &&
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
747 token.typ != yaml_BLOCK_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
748 parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
749 return yaml_parser_parse_node(parser, event, true, true)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
750 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
751 parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
752 return yaml_parser_process_empty_scalar(parser, event, mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
753 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
754 parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
755 return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
756 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
757
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
758 // Parse the productions:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
759 // flow_sequence ::= FLOW-SEQUENCE-START
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
760 // *******************
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
761 // (flow_sequence_entry FLOW-ENTRY)*
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
762 // * **********
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
763 // flow_sequence_entry?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
764 // *
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
765 // FLOW-SEQUENCE-END
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
766 // *****************
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
767 // flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
768 // *
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
769 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
770 func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
771 if first {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
772 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
773 parser.marks = append(parser.marks, token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
774 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
775 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
776 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
777 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
778 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
779 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
780 if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
781 if !first {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
782 if token.typ == yaml_FLOW_ENTRY_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
783 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
784 token = peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
785 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
786 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
787 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
788 } else {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
789 context_mark := parser.marks[len(parser.marks)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
790 parser.marks = parser.marks[:len(parser.marks)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
791 return yaml_parser_set_parser_error_context(parser,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
792 "while parsing a flow sequence", context_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
793 "did not find expected ',' or ']'", token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
794 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
795 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
796
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
797 if token.typ == yaml_KEY_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
798 parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
799 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
800 typ: yaml_MAPPING_START_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
801 start_mark: token.start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
802 end_mark: token.end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
803 implicit: true,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
804 style: yaml_style_t(yaml_FLOW_MAPPING_STYLE),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
805 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
806 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
807 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
808 } else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
809 parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
810 return yaml_parser_parse_node(parser, event, false, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
811 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
812 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
813
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
814 parser.state = parser.states[len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
815 parser.states = parser.states[:len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
816 parser.marks = parser.marks[:len(parser.marks)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
817
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
818 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
819 typ: yaml_SEQUENCE_END_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
820 start_mark: token.start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
821 end_mark: token.end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
822 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
823
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
824 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
825 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
826 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
827
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
828 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
829 // Parse the productions:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
830 // flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
831 // *** *
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
832 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
833 func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
834 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
835 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
836 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
837 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
838 if token.typ != yaml_VALUE_TOKEN &&
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
839 token.typ != yaml_FLOW_ENTRY_TOKEN &&
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
840 token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
841 parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
842 return yaml_parser_parse_node(parser, event, false, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
843 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
844 mark := token.end_mark
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
845 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
846 parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
847 return yaml_parser_process_empty_scalar(parser, event, mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
848 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
849
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
850 // Parse the productions:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
851 // flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
852 // ***** *
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
853 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
854 func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
855 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
856 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
857 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
858 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
859 if token.typ == yaml_VALUE_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
860 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
861 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
862 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
863 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
864 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
865 if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
866 parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
867 return yaml_parser_parse_node(parser, event, false, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
868 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
869 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
870 parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
871 return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
872 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
873
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
874 // Parse the productions:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
875 // flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
876 // *
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
877 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
878 func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
879 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
880 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
881 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
882 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
883 parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
884 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
885 typ: yaml_MAPPING_END_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
886 start_mark: token.start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
887 end_mark: token.start_mark, // [Go] Shouldn't this be end_mark?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
888 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
889 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
890 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
891
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
892 // Parse the productions:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
893 // flow_mapping ::= FLOW-MAPPING-START
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
894 // ******************
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
895 // (flow_mapping_entry FLOW-ENTRY)*
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
896 // * **********
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
897 // flow_mapping_entry?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
898 // ******************
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
899 // FLOW-MAPPING-END
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
900 // ****************
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
901 // flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
902 // * *** *
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
903 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
904 func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
905 if first {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
906 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
907 parser.marks = append(parser.marks, token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
908 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
909 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
910
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
911 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
912 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
913 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
914 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
915
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
916 if token.typ != yaml_FLOW_MAPPING_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
917 if !first {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
918 if token.typ == yaml_FLOW_ENTRY_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
919 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
920 token = peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
921 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
922 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
923 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
924 } else {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
925 context_mark := parser.marks[len(parser.marks)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
926 parser.marks = parser.marks[:len(parser.marks)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
927 return yaml_parser_set_parser_error_context(parser,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
928 "while parsing a flow mapping", context_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
929 "did not find expected ',' or '}'", token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
930 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
931 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
932
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
933 if token.typ == yaml_KEY_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
934 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
935 token = peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
936 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
937 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
938 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
939 if token.typ != yaml_VALUE_TOKEN &&
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
940 token.typ != yaml_FLOW_ENTRY_TOKEN &&
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
941 token.typ != yaml_FLOW_MAPPING_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
942 parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
943 return yaml_parser_parse_node(parser, event, false, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
944 } else {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
945 parser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
946 return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
947 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
948 } else if token.typ != yaml_FLOW_MAPPING_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
949 parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
950 return yaml_parser_parse_node(parser, event, false, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
951 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
952 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
953
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
954 parser.state = parser.states[len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
955 parser.states = parser.states[:len(parser.states)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
956 parser.marks = parser.marks[:len(parser.marks)-1]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
957 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
958 typ: yaml_MAPPING_END_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
959 start_mark: token.start_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
960 end_mark: token.end_mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
961 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
962 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
963 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
964 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
965
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
966 // Parse the productions:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
967 // flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
968 // * ***** *
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
969 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
970 func yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
971 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
972 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
973 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
974 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
975 if empty {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
976 parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
977 return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
978 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
979 if token.typ == yaml_VALUE_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
980 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
981 token = peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
982 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
983 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
984 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
985 if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
986 parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
987 return yaml_parser_parse_node(parser, event, false, false)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
988 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
989 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
990 parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
991 return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
992 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
993
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
994 // Generate an empty scalar event.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
995 func yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
996 *event = yaml_event_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
997 typ: yaml_SCALAR_EVENT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
998 start_mark: mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
999 end_mark: mark,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1000 value: nil, // Empty
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1001 implicit: true,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1002 style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1003 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1004 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1005 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1006
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1007 var default_tag_directives = []yaml_tag_directive_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1008 {[]byte("!"), []byte("!")},
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1009 {[]byte("!!"), []byte("tag:yaml.org,2002:")},
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1010 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1011
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1012 // Parse directives.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1013 func yaml_parser_process_directives(parser *yaml_parser_t,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1014 version_directive_ref **yaml_version_directive_t,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1015 tag_directives_ref *[]yaml_tag_directive_t) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1016
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1017 var version_directive *yaml_version_directive_t
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1018 var tag_directives []yaml_tag_directive_t
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1019
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1020 token := peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1021 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1022 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1023 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1024
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1025 for token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1026 if token.typ == yaml_VERSION_DIRECTIVE_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1027 if version_directive != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1028 yaml_parser_set_parser_error(parser,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1029 "found duplicate %YAML directive", token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1030 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1031 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1032 if token.major != 1 || token.minor != 1 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1033 yaml_parser_set_parser_error(parser,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1034 "found incompatible YAML document", token.start_mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1035 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1036 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1037 version_directive = &yaml_version_directive_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1038 major: token.major,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1039 minor: token.minor,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1040 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1041 } else if token.typ == yaml_TAG_DIRECTIVE_TOKEN {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1042 value := yaml_tag_directive_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1043 handle: token.value,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1044 prefix: token.prefix,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1045 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1046 if !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1047 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1048 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1049 tag_directives = append(tag_directives, value)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1050 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1051
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1052 skip_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1053 token = peek_token(parser)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1054 if token == nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1055 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1056 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1057 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1058
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1059 for i := range default_tag_directives {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1060 if !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1061 return false
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1062 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1063 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1064
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1065 if version_directive_ref != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1066 *version_directive_ref = version_directive
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1067 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1068 if tag_directives_ref != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1069 *tag_directives_ref = tag_directives
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1070 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1071 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1072 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1073
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1074 // Append a tag directive to the directives stack.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1075 func yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1076 for i := range parser.tag_directives {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1077 if bytes.Equal(value.handle, parser.tag_directives[i].handle) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1078 if allow_duplicates {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1079 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1080 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1081 return yaml_parser_set_parser_error(parser, "found duplicate %TAG directive", mark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1082 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1083 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1084
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1085 // [Go] I suspect the copy is unnecessary. This was likely done
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1086 // because there was no way to track ownership of the data.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1087 value_copy := yaml_tag_directive_t{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1088 handle: make([]byte, len(value.handle)),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1089 prefix: make([]byte, len(value.prefix)),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1090 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1091 copy(value_copy.handle, value.handle)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1092 copy(value_copy.prefix, value.prefix)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1093 parser.tag_directives = append(parser.tag_directives, value_copy)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1094 return true
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1095 }