Changeset 130 for pyyaml/trunk/lib/yaml/parser.py
- Timestamp:
- 04/03/06 14:20:25 (7 years ago)
- File:
-
- 1 edited
-
pyyaml/trunk/lib/yaml/parser.py (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
-
pyyaml/trunk/lib/yaml/parser.py
r118 r130 131 131 # Parse start of stream. 132 132 token = self.scanner.get() 133 yield StreamStartEvent(token.start_mark, token.end_mark) 133 yield StreamStartEvent(token.start_mark, token.end_mark, 134 encoding=token.encoding) 134 135 135 136 # Parse implicit document. … … 139 140 token = self.scanner.peek() 140 141 start_mark = end_mark = token.start_mark 141 yield DocumentStartEvent(start_mark, end_mark) 142 yield DocumentStartEvent(start_mark, end_mark, 143 implicit=True) 142 144 for event in self.parse_block_node(): 143 145 yield event 144 146 token = self.scanner.peek() 145 147 start_mark = end_mark = token.start_mark 148 implicit = True 146 149 while self.scanner.check(DocumentEndToken): 147 150 token = self.scanner.get() 148 151 end_mark = token.end_mark 149 yield DocumentEndEvent(start_mark, end_mark) 152 implicit = True 153 yield DocumentEndEvent(start_mark, end_mark, 154 implicit=implicit) 150 155 151 156 # Parse explicit documents. … … 153 158 token = self.scanner.peek() 154 159 start_mark = token.start_mark 155 self.process_directives()160 version, tags = self.process_directives() 156 161 if not self.scanner.check(DocumentStartToken): 157 162 raise ParserError(None, None, … … 161 166 token = self.scanner.get() 162 167 end_mark = token.end_mark 163 yield DocumentStartEvent(start_mark, end_mark) 168 yield DocumentStartEvent(start_mark, end_mark, 169 implicit=False, version=version, tags=tags) 164 170 if self.scanner.check(DirectiveToken, 165 171 DocumentStartToken, DocumentEndToken, StreamEndToken): … … 170 176 token = self.scanner.peek() 171 177 start_mark = end_mark = token.start_mark 178 implicit=True 172 179 while self.scanner.check(DocumentEndToken): 173 180 token = self.scanner.get() 174 181 end_mark = token.end_mark 175 yield DocumentEndEvent(start_mark, end_mark) 182 implicit=False 183 yield DocumentEndEvent(start_mark, end_mark, 184 implicit=implicit) 176 185 177 186 # Parse end of stream. … … 202 211 token.start_mark) 203 212 self.tag_handles[handle] = prefix 213 if self.tag_handles: 214 value = self.yaml_version, self.tag_handles.copy() 215 else: 216 value = self.yaml_version, None 204 217 for key in self.DEFAULT_TAGS: 205 218 if key not in self.tag_handles: 206 219 self.tag_handles[key] = self.DEFAULT_TAGS[key] 220 return value 207 221 208 222 def parse_block_node(self): … … 233 247 if self.scanner.check(AnchorToken): 234 248 token = self.scanner.get() 235 start_mark = end_mark = token.start_mark 249 start_mark = token.start_mark 250 end_mark = token.end_mark 236 251 anchor = token.value 237 252 if self.scanner.check(TagToken): 238 253 token = self.scanner.get() 239 end_mark = tag_mark = token.start_mark 254 tag_mark = token.start_mark 255 end_mark = token.end_mark 240 256 tag = token.value 241 257 elif self.scanner.check(TagToken): 242 258 token = self.scanner.get() 243 start_mark = end_mark = tag_mark = token.start_mark 259 start_mark = tag_mark = token.start_mark 260 end_mark = token.end_mark 244 261 tag = token.value 245 262 if self.scanner.check(AnchorToken): 246 263 token = self.scanner.get() 247 end_mark = token. start_mark264 end_mark = token.end_mark 248 265 anchor = token.value 249 266 if tag is not None: … … 259 276 if tag is None: 260 277 if not (self.scanner.check(ScalarToken) and 261 self.scanner.peek(). plain):278 self.scanner.peek().implicit): 262 279 tag = u'!' 263 280 if start_mark is None: 264 start_mark = self.scanner.peek().start_mark281 start_mark = end_mark = self.scanner.peek().start_mark 265 282 event = None 266 283 collection_events = None 267 284 if indentless_sequence and self.scanner.check(BlockEntryToken): 268 285 end_mark = self.scanner.peek().end_mark 269 event = Sequence Event(anchor, tag, start_mark, end_mark)286 event = SequenceStartEvent(anchor, tag, start_mark, end_mark) 270 287 collection_events = self.parse_indentless_sequence() 271 288 else: … … 274 291 end_mark = token.end_mark 275 292 event = ScalarEvent(anchor, tag, token.value, 276 start_mark, end_mark) 293 start_mark, end_mark, 294 implicit=token.implicit, style=token.style) 277 295 elif self.scanner.check(FlowSequenceStartToken): 278 296 end_mark = self.scanner.peek().end_mark 279 event = SequenceEvent(anchor, tag, start_mark, end_mark) 297 event = SequenceStartEvent(anchor, tag, start_mark, end_mark, 298 flow_style=True) 280 299 collection_events = self.parse_flow_sequence() 281 300 elif self.scanner.check(FlowMappingStartToken): 282 301 end_mark = self.scanner.peek().end_mark 283 event = MappingEvent(anchor, tag, start_mark, end_mark) 302 event = MappingStartEvent(anchor, tag, start_mark, end_mark, 303 flow_style=True) 284 304 collection_events = self.parse_flow_mapping() 285 305 elif block and self.scanner.check(BlockSequenceStartToken): 286 306 end_mark = self.scanner.peek().start_mark 287 event = SequenceEvent(anchor, tag, start_mark, end_mark) 307 event = SequenceStartEvent(anchor, tag, start_mark, end_mark, 308 flow_style=False) 288 309 collection_events = self.parse_block_sequence() 289 310 elif block and self.scanner.check(BlockMappingStartToken): 290 311 end_mark = self.scanner.peek().start_mark 291 event = MappingEvent(anchor, tag, start_mark, end_mark) 312 event = MappingStartEvent(anchor, tag, start_mark, end_mark, 313 flow_style=False) 292 314 collection_events = self.parse_block_mapping() 315 elif anchor is not None or tag is not None: 316 # Empty scalars are allowed even if a tag or an anchor is 317 # specified. 318 event = ScalarEvent(anchor, tag, u'', start_mark, end_mark, 319 implicit=True) 293 320 else: 294 321 if block: … … 321 348 "expected <block end>, but found %r" % token.id, token.start_mark) 322 349 token = self.scanner.get() 323 yield CollectionEndEvent(token.start_mark, token.end_mark)350 yield SequenceEndEvent(token.start_mark, token.end_mark) 324 351 325 352 def parse_indentless_sequence(self): … … 334 361 yield self.process_empty_scalar(token.end_mark) 335 362 token = self.scanner.peek() 336 yield CollectionEndEvent(token.start_mark, token.start_mark)363 yield SequenceEndEvent(token.start_mark, token.start_mark) 337 364 338 365 def parse_block_mapping(self): … … 366 393 "expected <block end>, but found %r" % token.id, token.start_mark) 367 394 token = self.scanner.get() 368 yield CollectionEndEvent(token.start_mark, token.end_mark)395 yield MappingEndEvent(token.start_mark, token.end_mark) 369 396 370 397 def parse_flow_sequence(self): … … 384 411 if self.scanner.check(KeyToken): 385 412 token = self.scanner.get() 386 yield MappingEvent(None, u'!', 387 token.start_mark, token.end_mark) 413 yield MappingStartEvent(None, u'!', 414 token.start_mark, token.end_mark, 415 flow_style=True) 388 416 if not self.scanner.check(ValueToken, 389 417 FlowEntryToken, FlowSequenceEndToken): … … 403 431 yield self.process_empty_scalar(token.start_mark) 404 432 token = self.scanner.peek() 405 yield CollectionEndEvent(token.start_mark, token.start_mark)433 yield MappingEndEvent(token.start_mark, token.start_mark) 406 434 else: 407 435 for event in self.parse_flow_node(): … … 414 442 self.scanner.get() 415 443 token = self.scanner.get() 416 yield CollectionEndEvent(token.start_mark, token.end_mark)444 yield SequenceEndEvent(token.start_mark, token.end_mark) 417 445 418 446 def parse_flow_mapping(self): … … 458 486 "expected '}', but found %r" % token.id, token.start_mark) 459 487 token = self.scanner.get() 460 yield CollectionEndEvent(token.start_mark, token.end_mark)488 yield MappingEndEvent(token.start_mark, token.end_mark) 461 489 462 490 def process_empty_scalar(self, mark): 463 return ScalarEvent(None, None, u'', mark, mark) 464 491 return ScalarEvent(None, None, u'', mark, mark, 492 implicit=True) 493
Note: See TracChangeset
for help on using the changeset viewer.
