Changeset 44
- Timestamp:
- 02/15/06 08:35:29 (7 years ago)
- Location:
- branches/pyyaml3000
- Files:
-
- 29 added
- 28 edited
-
lib/yaml/parser.py (modified) (2 diffs)
-
lib/yaml/scanner.py (modified) (26 diffs)
-
lib/yaml/stream.py (modified) (1 diff)
-
tests/data/spec-02-01.structure (added)
-
tests/data/spec-02-02.structure (added)
-
tests/data/spec-02-03.structure (added)
-
tests/data/spec-02-04.structure (added)
-
tests/data/spec-02-05.structure (added)
-
tests/data/spec-02-06.structure (added)
-
tests/data/spec-02-07.structure (added)
-
tests/data/spec-02-08.structure (added)
-
tests/data/spec-02-09.structure (added)
-
tests/data/spec-02-10.structure (added)
-
tests/data/spec-02-11.structure (added)
-
tests/data/spec-02-12.structure (added)
-
tests/data/spec-02-13.structure (added)
-
tests/data/spec-02-14.structure (added)
-
tests/data/spec-02-15.structure (added)
-
tests/data/spec-02-16.structure (added)
-
tests/data/spec-02-17.structure (added)
-
tests/data/spec-02-18.structure (added)
-
tests/data/spec-02-19.structure (added)
-
tests/data/spec-02-20.structure (added)
-
tests/data/spec-02-21.structure (added)
-
tests/data/spec-02-22.structure (added)
-
tests/data/spec-02-23.structure (added)
-
tests/data/spec-02-24.structure (added)
-
tests/data/spec-02-25.structure (added)
-
tests/data/spec-02-26.structure (added)
-
tests/data/spec-02-27.structure (added)
-
tests/data/spec-02-28.structure (added)
-
tests/data/spec-05-03.canonical (modified) (1 diff)
-
tests/data/spec-07-10.canonical (modified) (1 diff)
-
tests/data/spec-08-01.data (modified) (1 diff)
-
tests/data/spec-08-12.data (modified) (1 diff)
-
tests/data/spec-08-13.canonical (modified) (1 diff)
-
tests/data/spec-08-15.canonical (modified) (1 diff)
-
tests/data/spec-08-15.data (modified) (1 diff)
-
tests/data/spec-09-12.data (modified) (1 diff)
-
tests/data/spec-09-25.canonical (modified) (1 diff)
-
tests/data/spec-09-29.canonical (modified) (1 diff)
-
tests/data/spec-09-30.canonical (modified) (1 diff)
-
tests/data/spec-09-31.canonical (modified) (1 diff)
-
tests/data/spec-09-32.canonical (modified) (1 diff)
-
tests/data/spec-09-33.canonical (modified) (1 diff)
-
tests/data/spec-10-05.canonical (modified) (1 diff)
-
tests/data/spec-10-07.canonical (modified) (1 diff)
-
tests/data/spec-10-07.data (modified) (1 diff)
-
tests/data/spec-10-09.canonical (modified) (1 diff)
-
tests/data/spec-10-10.canonical (modified) (1 diff)
-
tests/data/spec-10-11.canonical (modified) (2 diffs)
-
tests/data/spec-10-13.canonical (modified) (1 diff)
-
tests/data/spec-10-14.canonical (modified) (1 diff)
-
tests/test_appliance.py (modified) (1 diff)
-
tests/test_structure.py (added)
-
tests/test_tokens.py (modified) (3 diffs)
-
tests/test_yaml.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/pyyaml3000/lib/yaml/parser.py
r43 r44 40 40 # flow_mapping_entry: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START KEY } 41 41 42 from scanner import * 43 44 class Error(Exception): 45 pass 46 47 class Node: 48 def __repr__(self): 49 args = [] 50 for attribute in ['anchor', 'tag', 'value']: 51 if hasattr(self, attribute): 52 args.append(repr(getattr(self, attribute))) 53 return "%s(%s)" % (self.__class__.__name__, ', '.join(args)) 54 55 class AliasNode(Node): 56 def __init__(self, anchor): 57 self.anchor = anchor 58 59 class ScalarNode(Node): 60 def __init__(self, anchor, tag, value): 61 self.anchor = anchor 62 self.tag = tag 63 self.value = value 64 65 class SequenceNode(Node): 66 def __init__(self, anchor, tag, value): 67 self.anchor = anchor 68 self.tag = tag 69 self.value = value 70 71 class MappingNode(Node): 72 def __init__(self, anchor, tag, value): 73 self.anchor = anchor 74 self.tag = tag 75 self.value = value 76 42 77 class Parser: 43 78 44 def parse(self, source, data): 45 scanner = Scanner() 46 self.tokens = scanner.scan(source, data) 47 self.tokens.append('END') 48 documents = self.parse_stream() 49 if len(documents) == 1: 50 return documents[0] 51 return documents 79 def __init__(self, source, data): 80 self.scanner = Scanner(source, data) 81 82 def is_token(self, *choices): 83 token = self.scanner.peek_token() 84 for choice in choices: 85 if isinstance(token, choices): 86 return True 87 return False 88 89 def get_token(self): 90 return self.scanner.get_token() 91 92 def parse(self): 93 return self.parse_stream() 52 94 53 95 def parse_stream(self): 54 96 documents = [] 55 if self.tokens[0] not in ['DIRECTIVE', 'DOCUMENT_START', 'END']:97 if not self.is_token(DirectiveToken, DocumentStartToken, EndToken): 56 98 documents.append(self.parse_block_node()) 57 while self.tokens[0] != 'END': 58 while self.tokens[0] == 'DIRECTIVE': 59 self.tokens.pop(0) 60 if self.tokens[0] != 'DOCUMENT_START': 61 self.error('DOCUMENT_START is expected') 62 self.tokens.pop(0) 63 if self.tokens[0] in ['DIRECTIVE', 'DOCUMENT_START', 'DOCUMENT_END', 'END']: 99 while not self.is_token(EndToken): 100 while self.is_token(DirectiveToken): 101 self.get_token() 102 if not self.is_token(DocumentStartToken): 103 self.fail('DOCUMENT-START is expected') 104 self.get_token() 105 if self.is_token(DirectiveToken, 106 DocumentStartToken, DocumentEndToken, EndToken): 64 107 documents.append(None) 65 108 else: 66 109 documents.append(self.parse_block_node()) 67 while self. tokens[0] == 'DOCUMENT_END':68 self. tokens.pop(0)69 if self.tokens[0] != 'END':70 self. error("END is expected")71 return tuple(documents)110 while self.is_token(DocumentEndToken): 111 self.get_token() 112 if not self.is_token(EndToken): 113 self.fail("END is expected") 114 return documents 72 115 73 116 def parse_block_node(self): 74 if self.tokens[0] == 'ALIAS': 75 self.tokens.pop(0) 76 return '*' 77 if self.tokens[0] == 'TAG': 78 self.tokens.pop(0) 79 if self.tokens[0] == 'ANCHOR': 80 self.tokens.pop(0) 81 elif self.tokens[0] == 'ANCHOR': 82 self.tokens.pop(0) 83 if self.tokens[0] == 'TAG': 84 self.tokens.pop(0) 85 return self.parse_block_content() 117 return self.parse_node(block=True) 86 118 87 119 def parse_flow_node(self): 88 if self.tokens[0] == 'ALIAS': 89 self.tokens.pop(0) 90 return '*' 91 if self.tokens[0] == 'TAG': 92 self.tokens.pop(0) 93 if self.tokens[0] == 'ANCHOR': 94 self.tokens.pop(0) 95 elif self.tokens[0] == 'ANCHOR': 96 self.tokens.pop(0) 97 if self.tokens[0] == 'TAG': 98 self.tokens.pop(0) 99 return self.parse_flow_content() 120 return self.parse_node() 100 121 101 122 def parse_block_node_or_indentless_sequence(self): 102 if self.tokens[0] == 'ALIAS': 103 self.tokens.pop(0) 104 return '*' 105 if self.tokens[0] == 'TAG': 106 self.tokens.pop(0) 107 if self.tokens[0] == 'ANCHOR': 108 self.tokens.pop(0) 109 elif self.tokens[0] == 'ANCHOR': 110 self.tokens.pop(0) 111 if self.tokens[0] == 'TAG': 112 self.tokens.pop(0) 113 if self.tokens[0] == 'ENTRY': 114 return self.parse_indentless_sequence(self) 115 return self.parse_block_content() 123 return self.parse_node(block=True, indentless_sequence=True) 124 125 def parse_node(self, block=False, indentless_sequence=False): 126 if self.is_token(AliasToken): 127 token = self.get_token() 128 return AliasNode(token.value) 129 anchor = None 130 tag = None 131 if self.is_token(AnchorToken): 132 anchor = self.get_token().value 133 if self.is_token(TagToken): 134 tag = self.get_token().value 135 elif self.is_token(TagToken): 136 tag = self.get_token().value 137 if self.is_token(AnchorToken): 138 anchor = self.get_token().value 139 if indentless_sequence and self.is_token(EntryToken): 140 NodeClass = SequenceNode 141 value = self.parse_indentless_sequence() 142 else: 143 if self.is_token(ScalarToken): 144 NodeClass = ScalarNode 145 elif self.is_token(BlockSequenceStartToken, FlowSequenceStartToken): 146 NodeClass = SequenceNode 147 elif self.is_token(BlockMappingStartToken, FlowMappingStartToken): 148 NodeClass = MappingNode 149 if block: 150 value = self.parse_block_content() 151 else: 152 value = self.parse_flow_content() 153 return NodeClass(anchor, tag, value) 116 154 117 155 def parse_block_content(self): 118 if self.tokens[0] == 'SCALAR': 119 self.tokens.pop(0) 120 return True 121 elif self.tokens[0] == 'BLOCK_SEQ_START': 156 if self.is_token(ScalarToken): 157 return self.get_token().value 158 elif self.is_token(BlockSequenceStartToken): 122 159 return self.parse_block_sequence() 123 elif self. tokens[0] == 'BLOCK_MAP_START':160 elif self.is_token(BlockMappingStartToken): 124 161 return self.parse_block_mapping() 125 elif self. tokens[0] == 'FLOW_SEQ_START':162 elif self.is_token(FlowSequenceStartToken): 126 163 return self.parse_flow_sequence() 127 elif self. tokens[0] == 'FLOW_MAP_START':164 elif self.is_token(FlowMappingStartToken): 128 165 return self.parse_flow_mapping() 129 166 else: 130 self. error('block content is expected')167 self.fail('block content is expected') 131 168 132 169 def parse_flow_content(self): 133 if self.tokens[0] == 'SCALAR': 134 self.tokens.pop(0) 135 return True 136 elif self.tokens[0] == 'FLOW_SEQ_START': 170 if self.is_token(ScalarToken): 171 return self.get_token().value 172 elif self.is_token(FlowSequenceStartToken): 137 173 return self.parse_flow_sequence() 138 elif self. tokens[0] == 'FLOW_MAP_START':174 elif self.is_token(FlowMappingStartToken): 139 175 return self.parse_flow_mapping() 140 176 else: 141 self. error('flow content is expected')177 self.fail('flow content is expected') 142 178 143 179 def parse_block_sequence(self): 144 180 sequence = [] 145 if self.tokens[0] != 'BLOCK_SEQ_START':146 self. error('BLOCK_SEQ_START is expected')147 self. tokens.pop(0)148 while self. tokens[0] == 'ENTRY':149 self. tokens.pop(0)150 if self.tokens[0] not in ['ENTRY', 'BLOCK_END']:181 if not self.is_token(BlockSequenceStartToken): 182 self.fail('BLOCK-SEQUENCE-START is expected') 183 self.get_token() 184 while self.is_token(EntryToken): 185 self.get_token() 186 if not self.is_token(EntryToken, BlockEndToken): 151 187 sequence.append(self.parse_block_node()) 152 188 else: 153 189 sequence.append(None) 154 if self.tokens[0] != 'BLOCK_END':155 self. error('BLOCK_END is expected')156 self. tokens.pop(0)190 if not self.is_token(BlockEndToken): 191 self.fail('BLOCK-END is expected') 192 self.get_token() 157 193 return sequence 158 194 159 195 def parse_indentless_sequence(self): 160 196 sequence = [] 161 while self. tokens[0] == 'ENTRY':162 self. tokens.pop(0)163 if self.tokens[0] not in ['ENTRY']:197 while self.is_token(EntryToken): 198 self.get_token() 199 if not self.is_token(EntryToken): 164 200 sequence.append(self.parse_block_node()) 165 201 else: … … 169 205 def parse_block_mapping(self): 170 206 mapping = [] 171 if self.tokens[0] != 'BLOCK_MAP_START':172 self. error('BLOCK_MAP_START is expected')173 self. tokens.pop(0)174 while self. tokens[0] in ['KEY', 'VALUE']:207 if not self.is_token(BlockMappingStartToken): 208 self.fail('BLOCK-MAPPING-START is expected') 209 self.get_token() 210 while self.is_token(KeyToken, ValueToken): 175 211 key = None 176 212 value = None 177 if self. tokens[0] == 'KEY':178 self. tokens.pop(0)179 if self.tokens[0] not in ['KEY', 'VALUE', 'BLOCK_END']:213 if self.is_token(KeyToken): 214 self.get_token() 215 if not self.is_token(KeyToken, ValueToken, BlockEndToken): 180 216 key = self.parse_block_node_or_indentless_sequence() 181 if self. tokens[0] == 'VALUE':182 self. tokens.pop(0)183 if self.tokens[0] not in ['KEY', 'VALUE', 'BLOCK_END']:217 if self.is_token(ValueToken): 218 self.get_token() 219 if not self.is_token(KeyToken, ValueToken, BlockEndToken): 184 220 value = self.parse_block_node_or_indentless_sequence() 185 221 mapping.append((key, value)) 186 if self.tokens[0] != 'BLOCK_END':187 self. error('BLOCK_END is expected')188 self. tokens.pop(0)222 if not self.is_token(BlockEndToken): 223 self.fail('BLOCK-END is expected') 224 self.get_token() 189 225 return mapping 190 226 191 227 def parse_flow_sequence(self): 192 228 sequence = [] 193 if self.tokens[0] != 'FLOW_SEQ_START':194 self. error('FLOW_SEQ_START is expected')195 self. tokens.pop(0)196 while self.tokens[0] != 'FLOW_SEQ_END':197 if self. tokens[0] == 'KEY':198 self. tokens.pop(0)229 if not self.is_token(FlowSequenceStartToken): 230 self.fail('FLOW-SEQUENCE-START is expected') 231 self.get_token() 232 while not self.is_token(FlowSequenceEndToken): 233 if self.is_token(KeyToken): 234 self.get_token() 199 235 key = None 200 236 value = None 201 if self.tokens[0] != 'VALUE':237 if not self.is_token(ValueToken): 202 238 key = self.parse_flow_node() 203 if self. tokens[0] == 'VALUE':204 self. tokens.pop(0)205 if self.tokens[0] not in ['ENTRY', 'FLOW_SEQ_END']:239 if self.is_token(ValueToken): 240 self.get_token() 241 if not self.is_token(EntryToken, FlowSequenceEndToken): 206 242 value = self.parse_flow_node() 207 sequence.append([(key, value)]) 243 node = MappingNode(None, None, [(key, value)]) 244 sequence.append(node) 208 245 else: 209 246 sequence.append(self.parse_flow_node()) 210 if self.tokens[0] not in ['ENTRY', 'FLOW_SEQ_END']:211 self. error("ENTRY or FLOW_SEQ_END isexpected")212 if self. tokens[0] == 'ENTRY':213 self. tokens.pop(0)214 if self.tokens[0] != 'FLOW_SEQ_END':215 self. error('FLOW_SEQ_END is expected')216 self. tokens.pop(0)247 if not self.is_token(EntryToken, FlowSequenceEndToken): 248 self.fail("ENTRY or FLOW-SEQUENCE-END are expected") 249 if self.is_token(EntryToken): 250 self.get_token() 251 if not self.is_token(FlowSequenceEndToken): 252 self.fail('FLOW-SEQUENCE-END is expected') 253 self.get_token() 217 254 return sequence 218 255 219 256 def parse_flow_mapping(self): 220 257 mapping = [] 221 if self.tokens[0] != 'FLOW_MAP_START':222 self. error('FLOW_MAP_START is expected')223 self. tokens.pop(0)224 while self.tokens[0] != 'FLOW_MAP_END':225 if self. tokens[0] == 'KEY':226 self. tokens.pop(0)258 if not self.is_token(FlowMappingStartToken): 259 self.fail('FLOW-MAPPING-START is expected') 260 self.get_token() 261 while not self.is_token(FlowMappingEndToken): 262 if self.is_token(KeyToken): 263 self.get_token() 227 264 key = None 228 265 value = None 229 if self.tokens[0] != 'VALUE':266 if not self.is_token(ValueToken): 230 267 key = self.parse_flow_node() 231 if self. tokens[0] == 'VALUE':232 self. tokens.pop(0)233 if self.tokens[0] not in ['ENTRY', 'FLOW_MAP_END']:268 if self.is_token(ValueToken): 269 self.get_token() 270 if not self.is_token(EntryToken, FlowMappingEndToken): 234 271 value = self.parse_flow_node() 235 272 mapping.append((key, value)) 236 273 else: 237 274 mapping.append((self.parse_flow_node(), None)) 238 if self.tokens[0] not in ['ENTRY', 'FLOW_MAP_END']:239 self. error("ENTRY or FLOW_MAP_END isexpected")240 if self. tokens[0] == 'ENTRY':241 self. tokens.pop(0)242 if self.tokens[0] != 'FLOW_MAP_END':243 self. error('FLOW_MAP_END is expected')244 self. tokens.pop(0)275 if not self.is_token(EntryToken, FlowMappingEndToken): 276 self.fail("ENTRY or FLOW-MAPPING-END are expected") 277 if self.is_token(EntryToken): 278 self.get_token() 279 if not self.is_token(FlowMappingEndToken): 280 self.fail('FLOW-MAPPING-END is expected') 281 self.get_token() 245 282 return mapping 246 283 247 def error(self, message):248 raise Error(message+': '+str(self.tokens))249 250 284 def fail(self, message): 285 marker = self.scanner.peek_token().start_marker 286 raise Error(message+':\n'+marker.get_snippet()) 287 -
branches/pyyaml3000/lib/yaml/scanner.py
r43 r44 23 23 self.end_marker = end_marker 24 24 25 class YAMLDirective(Token): 25 class DirectiveToken(Token): 26 pass 27 28 class YAMLDirectiveToken(DirectiveToken): 26 29 def __init__(self, major_version, minor_version, start_marker, end_marker): 27 30 self.major_version = major_version … … 30 33 self.end_marker = end_marker 31 34 32 class TagDirective (Token):33 pass 34 35 class ReservedDirective (Token):35 class TagDirectiveToken(DirectiveToken): 36 pass 37 38 class ReservedDirectiveToken(DirectiveToken): 36 39 def __init__(self, name, start_marker, end_marker): 37 40 self.name = name … … 39 42 self.end_marker = end_marker 40 43 41 class DocumentStart (Token):42 pass 43 44 class DocumentEnd (Token):45 pass 46 47 class End (Token):48 pass 49 50 class BlockSequenceStart (Token):51 pass 52 53 class BlockMappingStart (Token):54 pass 55 56 class BlockEnd (Token):57 pass 58 59 class FlowSequenceStart (Token):60 pass 61 62 class FlowMappingStart (Token):63 pass 64 65 class FlowSequenceEnd (Token):66 pass 67 68 class FlowMappingEnd (Token):69 pass 70 71 class Key (Token):72 pass 73 74 class Value (Token):75 pass 76 77 class Entry (Token):78 pass 79 80 class Alias (Token):44 class DocumentStartToken(Token): 45 pass 46 47 class DocumentEndToken(Token): 48 pass 49 50 class EndToken(Token): 51 pass 52 53 class BlockSequenceStartToken(Token): 54 pass 55 56 class BlockMappingStartToken(Token): 57 pass 58 59 class BlockEndToken(Token): 60 pass 61 62 class FlowSequenceStartToken(Token): 63 pass 64 65 class FlowMappingStartToken(Token): 66 pass 67 68 class FlowSequenceEndToken(Token): 69 pass 70 71 class FlowMappingEndToken(Token): 72 pass 73 74 class KeyToken(Token): 75 pass 76 77 class ValueToken(Token): 78 pass 79 80 class EntryToken(Token): 81 pass 82 83 class AliasToken(Token): 81 84 def __init__(self, value, start_marker, end_marker): 82 85 self.value = value … … 84 87 self.end_marker = end_marker 85 88 86 class Anchor (Token):89 class AnchorToken(Token): 87 90 def __init__(self, value, start_marker, end_marker): 88 91 self.value = value … … 90 93 self.end_marker = end_marker 91 94 92 class Tag (Token):95 class TagToken(Token): 93 96 def __init__(self, value, start_marker, end_marker): 94 97 self.value = value … … 96 99 self.end_marker = end_marker 97 100 98 class Scalar (Token):101 class ScalarToken(Token): 99 102 def __init__(self, value, plain, start_marker, end_marker): 100 103 self.value = value … … 380 383 marker = self.stream.get_marker() 381 384 self.indent = self.indents.pop() 382 self.tokens.append(BlockEnd (marker, marker))385 self.tokens.append(BlockEndToken(marker, marker)) 383 386 384 387 def add_indent(self, column): … … 405 408 406 409 # Add END. 407 self.tokens.append(End (marker, marker))410 self.tokens.append(EndToken(marker, marker)) 408 411 409 412 # The stream is ended. … … 423 426 424 427 def fetch_document_start(self): 425 self.fetch_document_indicator(DocumentStart )428 self.fetch_document_indicator(DocumentStartToken) 426 429 427 430 def fetch_document_end(self): 428 self.fetch_document_indicator(DocumentEnd )431 self.fetch_document_indicator(DocumentEndToken) 429 432 430 433 def fetch_document_indicator(self, TokenClass): … … 445 448 446 449 def fetch_flow_sequence_start(self): 447 self.fetch_flow_collection_start(FlowSequenceStart )450 self.fetch_flow_collection_start(FlowSequenceStartToken) 448 451 449 452 def fetch_flow_mapping_start(self): 450 self.fetch_flow_collection_start(FlowMappingStart )453 self.fetch_flow_collection_start(FlowMappingStartToken) 451 454 452 455 def fetch_flow_collection_start(self, TokenClass): 456 457 # '[' and '{' may start a simple key. 458 self.save_possible_simple_key() 453 459 454 460 # Increase the flow level. 455 461 self.flow_level += 1 456 457 # '[' and '{' may start a simple key.458 self.save_possible_simple_key()459 462 460 463 # Simple keys are allowed after '[' and '{'. … … 468 471 469 472 def fetch_flow_sequence_end(self): 470 self.fetch_flow_collection_end(FlowSequenceEnd )473 self.fetch_flow_collection_end(FlowSequenceEndToken) 471 474 472 475 def fetch_flow_mapping_end(self): 473 self.fetch_flow_collection_end(FlowMappingEnd )476 self.fetch_flow_collection_end(FlowMappingEndToken) 474 477 475 478 def fetch_flow_collection_end(self, TokenClass): … … 502 505 if self.add_indent(self.stream.column): 503 506 marker = self.stream.get_marker() 504 self.tokens.append(BlockSequenceStart (marker, marker))507 self.tokens.append(BlockSequenceStartToken(marker, marker)) 505 508 506 509 # Simple keys are allowed after '-' and ','. … … 514 517 self.stream.read() 515 518 end_marker = self.stream.get_marker() 516 self.tokens.append(Entry (start_marker, end_marker))519 self.tokens.append(EntryToken(start_marker, end_marker)) 517 520 518 521 def fetch_key(self): … … 528 531 if self.add_indent(self.stream.column): 529 532 marker = self.stream.get_marker() 530 self.tokens.append(BlockMappingStart (marker, marker))533 self.tokens.append(BlockMappingStartToken(marker, marker)) 531 534 532 535 # Simple keys are allowed after '?' in the block context. … … 540 543 self.stream.read() 541 544 end_marker = self.stream.get_marker() 542 self.tokens.append(Key (start_marker, end_marker))545 self.tokens.append(KeyToken(start_marker, end_marker)) 543 546 544 547 def fetch_value(self): … … 551 554 del self.possible_simple_keys[self.flow_level] 552 555 self.tokens.insert(key.token_number-self.tokens_taken, 553 Key (key.marker, key.marker))556 KeyToken(key.marker, key.marker)) 554 557 555 558 # If this key starts a new block mapping, we need to add … … 558 561 if self.add_indent(key.column): 559 562 self.tokens.insert(key.token_number-self.tokens_taken, 560 BlockMappingStart (key.marker, key.marker))563 BlockMappingStartToken(key.marker, key.marker)) 561 564 562 565 # There cannot be two simple keys one after another. … … 576 579 self.stream.read() 577 580 end_marker = self.stream.get_marker() 578 self.tokens.append(Value (start_marker, end_marker))581 self.tokens.append(ValueToken(start_marker, end_marker)) 579 582 580 583 def fetch_alias(self): … … 587 590 588 591 # Scan and add ALIAS. 589 self.scan_anchor(Alias )592 self.scan_anchor(AliasToken) 590 593 591 594 def fetch_anchor(self): … … 598 601 599 602 # Scan and add ANCHOR. 600 self.scan_anchor(Anchor )603 self.scan_anchor(AnchorToken) 601 604 602 605 def fetch_tag(self): … … 739 742 marker = self.stream.get_marker() 740 743 if self.stream.peek(5) == u'%YAML ': 741 self.tokens.append(YAMLDirective (1, 1, marker, marker))744 self.tokens.append(YAMLDirectiveToken(1, 1, marker, marker)) 742 745 elif self.stream.peek(4) == u'%TAG ': 743 self.tokens.append(TagDirective (marker, marker))746 self.tokens.append(TagDirectiveToken(marker, marker)) 744 747 else: 745 self.tokens.append(ReservedDirective ('', marker, marker))748 self.tokens.append(ReservedDirectiveToken('', marker, marker)) 746 749 while self.stream.peek() not in u'\0\r\n': 747 750 self.stream.read() … … 760 763 self.stream.read() 761 764 end_marker = self.stream.get_marker() 762 self.tokens.append(Tag ('', start_marker, end_marker))765 self.tokens.append(TagToken('', start_marker, end_marker)) 763 766 764 767 def scan_block_scalar(self, folded): … … 768 771 indent = 1 769 772 while True: 770 while self.stream.peek() and self.stream.peek() and self.stream.peek() not in u'\0\r\n ':773 while self.stream.peek() and self.stream.peek() and self.stream.peek() not in u'\0\r\n\x85\u2028\u2029': 771 774 self.stream.read() 772 775 if self.stream.peek() != u'\0': … … 776 779 self.stream.read() 777 780 count += 1 778 if count < indent and self.stream.peek() not in u'#\r\n ':781 if count < indent and self.stream.peek() not in u'#\r\n\x85\u2028\u2029': 779 782 break 780 self.tokens.append(Scalar ('', False, start_marker, start_marker))783 self.tokens.append(ScalarToken('', False, start_marker, start_marker)) 781 784 782 785 def scan_flow_scalar(self, double): … … 791 794 self.stream.read(1) 792 795 self.stream.read(1) 793 self.tokens.append(Scalar ('', False, marker, marker))796 self.tokens.append(ScalarToken('', False, marker, marker)) 794 797 795 798 def scan_plain(self): … … 823 826 break 824 827 space = True 825 self.tokens.append(Scalar ('', True, marker, marker))828 self.tokens.append(ScalarToken('', True, marker, marker)) 826 829 827 830 def invalid_token(self): -
branches/pyyaml3000/lib/yaml/stream.py
r43 r44 19 19 if self.index >= len(self.data): 20 20 break 21 if self.data[self.index] in u'\r\n ':21 if self.data[self.index] in u'\r\n\x85\u2028\u2029': 22 22 self.line += 1 23 23 self.column = 0 -
branches/pyyaml3000/tests/data/spec-05-03.canonical
r38 r44 9 9 : !!map { 10 10 ? !!str "sky" : !!str "blue", 11 ? !!str "sea" : !!str "green", 11 # ? !!str "sea" : !!str "green", 12 ? !!map { ? !!str "sea" : !!str "green" } : !!null "", 12 13 } 13 14 } -
branches/pyyaml3000/tests/data/spec-07-10.canonical
r38 r44 12 12 } 13 13 --- 14 !!str "" 14 #!!str "" 15 !!null "" -
branches/pyyaml3000/tests/data/spec-08-01.data
r38 r44 1 !!str 2 &a1 3 "foo" : !!str bar 1 !!str &a1 "foo" : !!str bar 4 2 &a2 baz : *a1 -
branches/pyyaml3000/tests/data/spec-08-12.data
r38 r44 4 4 !!str 'Tagged', 5 5 *anchor, # Alias node 6 !!str, # Empty plain scalar 6 # !!str, # Empty plain scalar 7 '', # Empty plain scalar 7 8 ] -
branches/pyyaml3000/tests/data/spec-08-13.canonical
r42 r44 3 3 !!map { 4 4 ? !!str "foo" 5 : !!str "", 6 ? !!str "" 5 # : !!str "", 6 # ? !!str "" 7 : !!null "", 8 ? !!null "" 7 9 : !!str "bar", 8 10 } -
branches/pyyaml3000/tests/data/spec-08-15.canonical
r42 r44 2 2 --- 3 3 !!seq [ 4 !! str"",4 !!null "", 5 5 !!map { 6 6 ? !!str "foo" 7 : !! str"",8 ? !! str""7 : !!null "", 8 ? !!null "" 9 9 : !!str "bar", 10 10 } -
branches/pyyaml3000/tests/data/spec-08-15.data
r38 r44 1 seq:2 1 - # Empty plain scalar 3 2 - ? foo 4 3 : 5 4 ? 6 : bar ,5 : bar -
branches/pyyaml3000/tests/data/spec-09-12.data
r38 r44 4 4 - -123 5 5 # Inside flow collection: 6 - [ ::std::vector,6 - [ '::std::vector', 7 7 "Up, up and away!", 8 8 -123 ] -
branches/pyyaml3000/tests/data/spec-09-25.canonical
r38 r44 1 1 %YAML 1.1 2 2 --- 3 !!seq [ 4 !!str "literal\n\ 5 \ttext\n" 6 ] 3 !!str "literal\n\ 4 \ttext\n" -
branches/pyyaml3000/tests/data/spec-09-29.canonical
r38 r44 1 1 %YAML 1.1 2 2 --- 3 !!seq [ 4 !!str "folded text\n\ 5 \tlines\n" 6 ] 3 !!str "folded text\n\ 4 \tlines\n" -
branches/pyyaml3000/tests/data/spec-09-30.canonical
r38 r44 1 1 %YAML 1.1 2 2 --- 3 !!seq [ 4 !!str "folded line\n\ 5 next line\n\ 6 \ * bullet\n\ 7 \ * list\n\ 8 last line\n" 9 ] 3 !!str "folded line\n\ 4 next line\n\ 5 \ * bullet\n\ 6 \ * list\n\ 7 last line\n" -
branches/pyyaml3000/tests/data/spec-09-31.canonical
r38 r44 1 1 %YAML 1.1 2 2 --- 3 !!seq [ 4 !!str "folded line\n\ 5 next line\n\ 6 \ * bullet\n\ 7 \ * list\n\ 8 last line\n" 9 ] 3 !!str "folded line\n\ 4 next line\n\ 5 \ * bullet\n\ 6 \ * list\n\ 7 last line\n" -
branches/pyyaml3000/tests/data/spec-09-32.canonical
r38 r44 1 1 %YAML 1.1 2 2 --- 3 !!seq [ 4 !!str "folded line\n\ 5 next line\n\ 6 \ * bullet\n\ 7 \ * list\n\ 8 last line\n" 9 ] 3 !!str "folded line\n\ 4 next line\n\ 5 \ * bullet\n\ 6 \ * list\n\ 7 last line\n" -
branches/pyyaml3000/tests/data/spec-09-33.canonical
r38 r44 1 1 %YAML 1.1 2 2 --- 3 !!seq [ 4 !!str "folded line\n\ 5 next line\n\ 6 \ * bullet\n\ 7 \ * list\n\ 8 last line\n" 9 ] 3 !!str "folded line\n\ 4 next line\n\ 5 \ * bullet\n\ 6 \ * list\n\ 7 last line\n" -
branches/pyyaml3000/tests/data/spec-10-05.canonical
r42 r44 2 2 --- 3 3 !!seq [ 4 !! str"",4 !!null "", 5 5 !!str "block node\n", 6 6 !!seq [ -
branches/pyyaml3000/tests/data/spec-10-07.canonical
r38 r44 2 2 --- 3 3 !!map { 4 ? !! str""4 ? !!null "" 5 5 : !!str "value", 6 6 ? !!str "explicit key" -
branches/pyyaml3000/tests/data/spec-10-07.data
r38 r44 1 1 { 2 ? : value # Empty key 2 #? : value # Empty key 3 ? ~ : value, # Empty key 3 4 ? explicit 4 5 key: value, 5 simple key : value 6 simple key : value, 6 7 [ collection, simple, key ]: value 7 8 } -
branches/pyyaml3000/tests/data/spec-10-09.canonical
r38 r44 5 5 : !!str "value", 6 6 ? !!str "empty" 7 : !! str"",7 : !!null "", 8 8 } -
branches/pyyaml3000/tests/data/spec-10-10.canonical
r38 r44 5 5 : !!str "explicit value", 6 6 ? !!str "explicit key2" 7 : !! str"",7 : !!null "", 8 8 ? !!str "explicit key3" 9 : !! str"",9 : !!null "", 10 10 ? !!str "simple key1" 11 11 : !!str "explicit value", 12 12 ? !!str "simple key2" 13 : !! str"",13 : !!null "", 14 14 ? !!str "simple key3" 15 : !! str"",15 : !!null "", 16 16 } -
branches/pyyaml3000/tests/data/spec-10-11.canonical
r38 r44 8 8 !!map { 9 9 ? !!str "explicit key2" 10 : !! str"",10 : !!null "", 11 11 }, 12 12 !!map { 13 13 ? !!str "explicit key3" 14 : !! str"",14 : !!null "", 15 15 }, 16 16 !!map { … … 20 20 !!map { 21 21 ? !!str "simple key2" 22 : !! str"",22 : !!null "", 23 23 }, 24 24 ] -
branches/pyyaml3000/tests/data/spec-10-13.canonical
r38 r44 3 3 !!map { 4 4 ? !!str "explicit key" 5 : !! str"",5 : !!null "", 6 6 ? !!str "block key\n" 7 7 : !!seq [ -
branches/pyyaml3000/tests/data/spec-10-14.canonical
r38 r44 3 3 !!map { 4 4 ? !!str "plain key" 5 : !! str"",5 : !!null "", 6 6 ? !!str "quoted key\n" 7 7 : !!seq [ -
branches/pyyaml3000/tests/test_appliance.py
r43 r44 33 33 if hasattr(self, attribute): 34 34 args.append(repr(getattr(self, attribute))) 35 return "%s(%s)" % (self.__class__.__name__, ' '.join(args))35 return "%s(%s)" % (self.__class__.__name__, ', '.join(args)) 36 36 37 37 class AliasNode(Node): -
branches/pyyaml3000/tests/test_tokens.py
r43 r44 26 26 27 27 replaces = { 28 YAMLDirective : '%',29 TagDirective : '%',30 ReservedDirective : '%',31 DocumentStart : '---',32 DocumentEnd : '...',33 Alias : '*',34 Anchor : '&',35 Tag : '!',36 Scalar : '_',37 BlockSequenceStart : '[[',38 BlockMappingStart : '{{',39 BlockEnd : ']}',40 FlowSequenceStart : '[',41 FlowSequenceEnd : ']',42 FlowMappingStart : '{',43 FlowMappingEnd : '}',44 Entry : ',',45 Key : '?',46 Value : ':',28 YAMLDirectiveToken: '%', 29 TagDirectiveToken: '%', 30 ReservedDirectiveToken: '%', 31 DocumentStartToken: '---', 32 DocumentEndToken: '...', 33 AliasToken: '*', 34 AnchorToken: '&', 35 TagToken: '!', 36 ScalarToken: '_', 37 BlockSequenceStartToken: '[[', 38 BlockMappingStartToken: '{{', 39 BlockEndToken: ']}', 40 FlowSequenceStartToken: '[', 41 FlowSequenceEndToken: ']', 42 FlowMappingStartToken: '{', 43 FlowMappingEndToken: '}', 44 EntryToken: ',', 45 KeyToken: '?', 46 ValueToken: ':', 47 47 } 48 48 … … 53 53 scanner = Scanner(data_filename, file(data_filename, 'rb').read()) 54 54 tokens1 = [] 55 while not isinstance(scanner.peek_token(), End ):55 while not isinstance(scanner.peek_token(), EndToken): 56 56 tokens1.append(scanner.get_token()) 57 57 tokens1 = [self.replaces[t.__class__] for t in tokens1] … … 75 75 scanner = Scanner(filename, file(filename, 'rb').read()) 76 76 tokens = [] 77 while not isinstance(scanner.peek_token(), End ):77 while not isinstance(scanner.peek_token(), EndToken): 78 78 tokens.append(scanner.get_token().__class__.__name__) 79 79 except: -
branches/pyyaml3000/tests/test_yaml.py
r43 r44 5 5 from test_canonical import * 6 6 from test_tokens import * 7 from test_structure import * 7 8 8 9 def main(module='__main__'):
Note: See TracChangeset
for help on using the changeset viewer.
