Changeset 116 for pyyaml/trunk/lib/yaml/scanner.py
- Timestamp:
- 03/18/06 08:37:09 (7 years ago)
- File:
-
- 1 edited
-
pyyaml/trunk/lib/yaml/scanner.py (modified) (52 diffs)
Legend:
- Unmodified
- Added
- Removed
-
pyyaml/trunk/lib/yaml/scanner.py
r60 r116 35 35 # See below simple keys treatment. 36 36 37 def __init__(self, token_number, required, index, line, column, mark er):37 def __init__(self, token_number, required, index, line, column, mark): 38 38 self.token_number = token_number 39 39 self.required = required … … 41 41 self.line = line 42 42 self.column = column 43 self.mark er = marker43 self.mark = mark 44 44 45 45 class Scanner: … … 103 103 # is `flow_level`; there can be no more that one possible simple key 104 104 # for each level. The value is a SimpleKey record: 105 # (token_number, required, index, line, column, mark er)105 # (token_number, required, index, line, column, mark) 106 106 # A simple key may start with ALIAS, ANCHOR, TAG, SCALAR(flow), 107 107 # '[', or '{' tokens. … … 262 262 raise ScannerError("while scanning for the next token", None, 263 263 "found character %r that cannot start any token" 264 % ch.encode('utf-8'), self.reader.get_mark er())264 % ch.encode('utf-8'), self.reader.get_mark()) 265 265 266 266 # Simple keys treatment. … … 293 293 or self.reader.index-key.index > 1024: 294 294 if key.required: 295 raise ScannerError("while scanning a simple key", key.mark er,296 "could not found expected ':'", self.reader.get_mark er())295 raise ScannerError("while scanning a simple key", key.mark, 296 "could not found expected ':'", self.reader.get_mark()) 297 297 del self.possible_simple_keys[level] 298 298 … … 317 317 line = self.reader.line 318 318 column = self.reader.column 319 mark er = self.reader.get_marker()319 mark = self.reader.get_mark() 320 320 key = SimpleKey(token_number, required, 321 index, line, column, mark er)321 index, line, column, mark) 322 322 self.possible_simple_keys[self.flow_level] = key 323 323 … … 330 330 assert not key.required 331 331 #if key.required: 332 # raise ScannerError("while scanning a simple key", key.mark er,333 # "could not found expected ':'", self.reader.get_mark er())332 # raise ScannerError("while scanning a simple key", key.mark, 333 # "could not found expected ':'", self.reader.get_mark()) 334 334 335 335 # Indentation functions. … … 346 346 raise ScannerError(None, None, 347 347 "invalid intendation or unclosed '[' or '{'", 348 self.reader.get_mark er())348 self.reader.get_mark()) 349 349 350 350 # In block context, we may need to issue the BLOCK-END tokens. 351 351 while self.indent > column: 352 mark er = self.reader.get_marker()352 mark = self.reader.get_mark() 353 353 self.indent = self.indents.pop() 354 self.tokens.append(BlockEndToken(mark er, marker))354 self.tokens.append(BlockEndToken(mark, mark)) 355 355 356 356 def add_indent(self, column): … … 374 374 375 375 # Read the token. 376 mark er = self.reader.get_marker()376 mark = self.reader.get_mark() 377 377 378 378 # Add END. 379 self.tokens.append(StreamEndToken(mark er, marker))379 self.tokens.append(StreamEndToken(mark, mark)) 380 380 381 381 # The reader is ended. … … 411 411 412 412 # Add DOCUMENT-START or DOCUMENT-END. 413 start_mark er = self.reader.get_marker()413 start_mark = self.reader.get_mark() 414 414 self.reader.forward(3) 415 end_mark er = self.reader.get_marker()416 self.tokens.append(TokenClass(start_mark er, end_marker))415 end_mark = self.reader.get_mark() 416 self.tokens.append(TokenClass(start_mark, end_mark)) 417 417 418 418 def fetch_flow_sequence_start(self): … … 434 434 435 435 # Add FLOW-SEQUENCE-START or FLOW-MAPPING-START. 436 start_mark er = self.reader.get_marker()436 start_mark = self.reader.get_mark() 437 437 self.reader.forward() 438 end_mark er = self.reader.get_marker()439 self.tokens.append(TokenClass(start_mark er, end_marker))438 end_mark = self.reader.get_mark() 439 self.tokens.append(TokenClass(start_mark, end_mark)) 440 440 441 441 def fetch_flow_sequence_end(self): … … 457 457 458 458 # Add FLOW-SEQUENCE-END or FLOW-MAPPING-END. 459 start_mark er = self.reader.get_marker()459 start_mark = self.reader.get_mark() 460 460 self.reader.forward() 461 end_mark er = self.reader.get_marker()462 self.tokens.append(TokenClass(start_mark er, end_marker))461 end_mark = self.reader.get_mark() 462 self.tokens.append(TokenClass(start_mark, end_mark)) 463 463 464 464 def fetch_flow_entry(self): … … 471 471 472 472 # Add FLOW-ENTRY. 473 start_mark er = self.reader.get_marker()473 start_mark = self.reader.get_mark() 474 474 self.reader.forward() 475 end_mark er = self.reader.get_marker()476 self.tokens.append(FlowEntryToken(start_mark er, end_marker))475 end_mark = self.reader.get_mark() 476 self.tokens.append(FlowEntryToken(start_mark, end_mark)) 477 477 478 478 def fetch_block_entry(self): … … 485 485 raise ScannerError(None, None, 486 486 "sequence entries are not allowed here", 487 self.reader.get_mark er())487 self.reader.get_mark()) 488 488 489 489 # We may need to add BLOCK-SEQUENCE-START. 490 490 if self.add_indent(self.reader.column): 491 mark er = self.reader.get_marker()492 self.tokens.append(BlockSequenceStartToken(mark er, marker))491 mark = self.reader.get_mark() 492 self.tokens.append(BlockSequenceStartToken(mark, mark)) 493 493 494 494 # It's an error for the block entry to occur in the flow context, … … 504 504 505 505 # Add BLOCK-ENTRY. 506 start_mark er = self.reader.get_marker()506 start_mark = self.reader.get_mark() 507 507 self.reader.forward() 508 end_mark er = self.reader.get_marker()509 self.tokens.append(BlockEntryToken(start_mark er, end_marker))508 end_mark = self.reader.get_mark() 509 self.tokens.append(BlockEntryToken(start_mark, end_mark)) 510 510 511 511 def fetch_key(self): … … 518 518 raise ScannerError(None, None, 519 519 "mapping keys are not allowed here", 520 self.reader.get_mark er())520 self.reader.get_mark()) 521 521 522 522 # We may need to add BLOCK-MAPPING-START. 523 523 if self.add_indent(self.reader.column): 524 mark er = self.reader.get_marker()525 self.tokens.append(BlockMappingStartToken(mark er, marker))524 mark = self.reader.get_mark() 525 self.tokens.append(BlockMappingStartToken(mark, mark)) 526 526 527 527 # Simple keys are allowed after '?' in the block context. … … 532 532 533 533 # Add KEY. 534 start_mark er = self.reader.get_marker()534 start_mark = self.reader.get_mark() 535 535 self.reader.forward() 536 end_mark er = self.reader.get_marker()537 self.tokens.append(KeyToken(start_mark er, end_marker))536 end_mark = self.reader.get_mark() 537 self.tokens.append(KeyToken(start_mark, end_mark)) 538 538 539 539 def fetch_value(self): … … 546 546 del self.possible_simple_keys[self.flow_level] 547 547 self.tokens.insert(key.token_number-self.tokens_taken, 548 KeyToken(key.mark er, key.marker))548 KeyToken(key.mark, key.mark)) 549 549 550 550 # If this key starts a new block mapping, we need to add … … 553 553 if self.add_indent(key.column): 554 554 self.tokens.insert(key.token_number-self.tokens_taken, 555 BlockMappingStartToken(key.mark er, key.marker))555 BlockMappingStartToken(key.mark, key.mark)) 556 556 557 557 # There cannot be two simple keys one after another. … … 571 571 raise ScannerError(None, None, 572 572 "mapping values are not allowed here", 573 self.reader.get_mark er())573 self.reader.get_mark()) 574 574 575 575 # Simple keys are allowed after ':' in the block context. … … 580 580 581 581 # Add VALUE. 582 start_mark er = self.reader.get_marker()582 start_mark = self.reader.get_mark() 583 583 self.reader.forward() 584 end_mark er = self.reader.get_marker()585 self.tokens.append(ValueToken(start_mark er, end_marker))584 end_mark = self.reader.get_mark() 585 self.tokens.append(ValueToken(start_mark, end_mark)) 586 586 587 587 def fetch_alias(self): … … 774 774 def scan_directive(self): 775 775 # See the specification for details. 776 start_mark er = self.reader.get_marker()776 start_mark = self.reader.get_mark() 777 777 self.reader.forward() 778 name = self.scan_directive_name(start_mark er)778 name = self.scan_directive_name(start_mark) 779 779 value = None 780 780 if name == u'YAML': 781 value = self.scan_yaml_directive_value(start_mark er)782 end_mark er = self.reader.get_marker()781 value = self.scan_yaml_directive_value(start_mark) 782 end_mark = self.reader.get_mark() 783 783 elif name == u'TAG': 784 value = self.scan_tag_directive_value(start_mark er)785 end_mark er = self.reader.get_marker()784 value = self.scan_tag_directive_value(start_mark) 785 end_mark = self.reader.get_mark() 786 786 else: 787 end_mark er = self.reader.get_marker()787 end_mark = self.reader.get_mark() 788 788 while self.reader.peek() not in u'\0\r\n\x85\u2028\u2029': 789 789 self.reader.forward() 790 self.scan_directive_ignored_line(start_mark er)791 return DirectiveToken(name, value, start_mark er, end_marker)792 793 def scan_directive_name(self, start_mark er):790 self.scan_directive_ignored_line(start_mark) 791 return DirectiveToken(name, value, start_mark, end_mark) 792 793 def scan_directive_name(self, start_mark): 794 794 # See the specification for details. 795 795 length = 0 … … 800 800 ch = self.reader.peek(length) 801 801 if not length: 802 raise ScannerError("while scanning a directive", start_mark er,802 raise ScannerError("while scanning a directive", start_mark, 803 803 "expected alphabetic or numeric character, but found %r" 804 % ch.encode('utf-8'), self.reader.get_mark er())804 % ch.encode('utf-8'), self.reader.get_mark()) 805 805 value = self.reader.prefix(length) 806 806 self.reader.forward(length) 807 807 ch = self.reader.peek() 808 808 if ch not in u'\0 \r\n\x85\u2028\u2029': 809 raise ScannerError("while scanning a directive", start_mark er,809 raise ScannerError("while scanning a directive", start_mark, 810 810 "expected alphabetic or numeric character, but found %r" 811 % ch.encode('utf-8'), self.reader.get_mark er())811 % ch.encode('utf-8'), self.reader.get_mark()) 812 812 return value 813 813 814 def scan_yaml_directive_value(self, start_mark er):814 def scan_yaml_directive_value(self, start_mark): 815 815 # See the specification for details. 816 816 while self.reader.peek() == u' ': 817 817 self.reader.forward() 818 major = self.scan_yaml_directive_number(start_mark er)818 major = self.scan_yaml_directive_number(start_mark) 819 819 if self.reader.peek() != '.': 820 raise ScannerError("while scanning a directive", start_mark er,820 raise ScannerError("while scanning a directive", start_mark, 821 821 "expected a digit or '.', but found %r" 822 822 % self.reader.peek().encode('utf-8'), 823 self.reader.get_mark er())823 self.reader.get_mark()) 824 824 self.reader.forward() 825 minor = self.scan_yaml_directive_number(start_mark er)825 minor = self.scan_yaml_directive_number(start_mark) 826 826 if self.reader.peek() not in u'\0 \r\n\x85\u2028\u2029': 827 raise ScannerError("while scanning a directive", start_mark er,827 raise ScannerError("while scanning a directive", start_mark, 828 828 "expected a digit or ' ', but found %r" 829 829 % self.reader.peek().encode('utf-8'), 830 self.reader.get_mark er())830 self.reader.get_mark()) 831 831 return (major, minor) 832 832 833 def scan_yaml_directive_number(self, start_mark er):833 def scan_yaml_directive_number(self, start_mark): 834 834 # See the specification for details. 835 835 ch = self.reader.peek() 836 836 if not (u'0' <= ch <= '9'): 837 raise ScannerError("while scanning a directive", start_mark er,837 raise ScannerError("while scanning a directive", start_mark, 838 838 "expected a digit, but found %r" % ch.encode('utf-8'), 839 self.reader.get_mark er())839 self.reader.get_mark()) 840 840 length = 0 841 841 while u'0' <= self.reader.peek(length) <= u'9': … … 845 845 return value 846 846 847 def scan_tag_directive_value(self, start_mark er):847 def scan_tag_directive_value(self, start_mark): 848 848 # See the specification for details. 849 849 while self.reader.peek() == u' ': 850 850 self.reader.forward() 851 handle = self.scan_tag_directive_handle(start_mark er)851 handle = self.scan_tag_directive_handle(start_mark) 852 852 while self.reader.peek() == u' ': 853 853 self.reader.forward() 854 prefix = self.scan_tag_directive_prefix(start_mark er)854 prefix = self.scan_tag_directive_prefix(start_mark) 855 855 return (handle, prefix) 856 856 857 def scan_tag_directive_handle(self, start_mark er):858 # See the specification for details. 859 value = self.scan_tag_handle('directive', start_mark er)857 def scan_tag_directive_handle(self, start_mark): 858 # See the specification for details. 859 value = self.scan_tag_handle('directive', start_mark) 860 860 ch = self.reader.peek() 861 861 if ch != u' ': 862 raise ScannerError("while scanning a directive", start_mark er,862 raise ScannerError("while scanning a directive", start_mark, 863 863 "expected ' ', but found %r" % ch.encode('utf-8'), 864 self.reader.get_mark er())864 self.reader.get_mark()) 865 865 return value 866 866 867 def scan_tag_directive_prefix(self, start_mark er):868 # See the specification for details. 869 value = self.scan_tag_uri('directive', start_mark er)867 def scan_tag_directive_prefix(self, start_mark): 868 # See the specification for details. 869 value = self.scan_tag_uri('directive', start_mark) 870 870 ch = self.reader.peek() 871 871 if ch not in u'\0 \r\n\x85\u2028\u2029': 872 raise ScannerError("while scanning a directive", start_mark er,872 raise ScannerError("while scanning a directive", start_mark, 873 873 "expected ' ', but found %r" % ch.encode('utf-8'), 874 self.reader.get_mark er())874 self.reader.get_mark()) 875 875 return value 876 876 877 def scan_directive_ignored_line(self, start_mark er):877 def scan_directive_ignored_line(self, start_mark): 878 878 # See the specification for details. 879 879 while self.reader.peek() == u' ': … … 884 884 ch = self.reader.peek() 885 885 if ch not in u'\0\r\n\x85\u2028\u2029': 886 raise ScannerError("while scanning a directive", start_mark er,886 raise ScannerError("while scanning a directive", start_mark, 887 887 "expected a comment or a line break, but found %r" 888 % ch.encode('utf-8'), self.reader.get_mark er())888 % ch.encode('utf-8'), self.reader.get_mark()) 889 889 self.scan_line_break() 890 890 … … 898 898 # [ *alias , "value" ] 899 899 # Therefore we restrict aliases to numbers and ASCII letters. 900 start_mark er = self.reader.get_marker()900 start_mark = self.reader.get_mark() 901 901 indicator = self.reader.peek() 902 902 if indicator == '*': … … 912 912 ch = self.reader.peek(length) 913 913 if not length: 914 raise ScannerError("while scanning an %s" % name, start_mark er,914 raise ScannerError("while scanning an %s" % name, start_mark, 915 915 "expected alphabetic or numeric character, but found %r" 916 % ch.encode('utf-8'), self.reader.get_mark er())916 % ch.encode('utf-8'), self.reader.get_mark()) 917 917 value = self.reader.prefix(length) 918 918 self.reader.forward(length) 919 919 ch = self.reader.peek() 920 920 if ch not in u'\0 \t\r\n\x85\u2028\u2029?:,]}%@`': 921 raise ScannerError("while scanning an %s" % name, start_mark er,921 raise ScannerError("while scanning an %s" % name, start_mark, 922 922 "expected alphabetic or numeric character, but found %r" 923 % ch.encode('utf-8'), self.reader.get_mark er())924 end_mark er = self.reader.get_marker()925 return TokenClass(value, start_mark er, end_marker)923 % ch.encode('utf-8'), self.reader.get_mark()) 924 end_mark = self.reader.get_mark() 925 return TokenClass(value, start_mark, end_mark) 926 926 927 927 def scan_tag(self): 928 928 # See the specification for details. 929 start_mark er = self.reader.get_marker()929 start_mark = self.reader.get_mark() 930 930 ch = self.reader.peek(1) 931 931 if ch == u'<': 932 932 handle = None 933 933 self.reader.forward(2) 934 suffix = self.scan_tag_uri('tag', start_mark er)934 suffix = self.scan_tag_uri('tag', start_mark) 935 935 if self.reader.peek() != u'>': 936 raise ScannerError("while parsing a tag", start_mark er,936 raise ScannerError("while parsing a tag", start_mark, 937 937 "expected '>', but found %r" % self.reader.peek().encode('utf-8'), 938 self.reader.get_mark er())938 self.reader.get_mark()) 939 939 self.reader.forward() 940 940 elif ch in u'\0 \t\r\n\x85\u2028\u2029': … … 953 953 handle = u'!' 954 954 if use_handle: 955 handle = self.scan_tag_handle('tag', start_mark er)955 handle = self.scan_tag_handle('tag', start_mark) 956 956 else: 957 957 handle = u'!' 958 958 self.reader.forward() 959 suffix = self.scan_tag_uri('tag', start_mark er)959 suffix = self.scan_tag_uri('tag', start_mark) 960 960 ch = self.reader.peek() 961 961 if ch not in u'\0 \r\n\x85\u2028\u2029': 962 raise ScannerError("while scanning a tag", start_mark er,962 raise ScannerError("while scanning a tag", start_mark, 963 963 "expected ' ', but found %r" % ch.encode('utf-8'), 964 self.reader.get_mark er())964 self.reader.get_mark()) 965 965 value = (handle, suffix) 966 end_mark er = self.reader.get_marker()967 return TagToken(value, start_mark er, end_marker)966 end_mark = self.reader.get_mark() 967 return TagToken(value, start_mark, end_mark) 968 968 969 969 def scan_block_scalar(self, folded): … … 971 971 972 972 chunks = [] 973 start_mark er = self.reader.get_marker()973 start_mark = self.reader.get_mark() 974 974 975 975 # Scan the header. 976 976 self.reader.forward() 977 chomping, increment = self.scan_block_scalar_indicators(start_mark er)978 self.scan_block_scalar_ignored_line(start_mark er)977 chomping, increment = self.scan_block_scalar_indicators(start_mark) 978 self.scan_block_scalar_ignored_line(start_mark) 979 979 980 980 # Determine the indentation level and go to the first non-empty line. … … 983 983 min_indent = 1 984 984 if increment is None: 985 breaks, max_indent, end_mark er= self.scan_block_scalar_indentation()985 breaks, max_indent, end_mark = self.scan_block_scalar_indentation() 986 986 indent = max(min_indent, max_indent) 987 987 else: 988 988 indent = min_indent+increment-1 989 breaks, end_mark er= self.scan_block_scalar_breaks(indent)989 breaks, end_mark = self.scan_block_scalar_breaks(indent) 990 990 line_break = u'' 991 991 … … 1000 1000 self.reader.forward(length) 1001 1001 line_break = self.scan_line_break() 1002 breaks, end_mark er= self.scan_block_scalar_breaks(indent)1002 breaks, end_mark = self.scan_block_scalar_breaks(indent) 1003 1003 if self.reader.column == indent and self.reader.peek() != u'\0': 1004 1004 # Unfortunately, folding rules are ambiguous. … … 1034 1034 1035 1035 # We are done. 1036 return ScalarToken(u''.join(chunks), False, start_mark er, end_marker)1037 1038 def scan_block_scalar_indicators(self, start_mark er):1036 return ScalarToken(u''.join(chunks), False, start_mark, end_mark) 1037 1038 def scan_block_scalar_indicators(self, start_mark): 1039 1039 # See the specification for details. 1040 1040 chomping = None … … 1051 1051 increment = int(ch) 1052 1052 if increment == 0: 1053 raise ScannerError("while scanning a block scalar", start_mark er,1053 raise ScannerError("while scanning a block scalar", start_mark, 1054 1054 "expected indentation indicator in the range 1-9, but found 0", 1055 self.reader.get_mark er())1055 self.reader.get_mark()) 1056 1056 self.reader.forward() 1057 1057 elif ch in u'0123456789': 1058 1058 increment = int(ch) 1059 1059 if increment == 0: 1060 raise ScannerError("while scanning a block scalar", start_mark er,1060 raise ScannerError("while scanning a block scalar", start_mark, 1061 1061 "expected indentation indicator in the range 1-9, but found 0", 1062 self.reader.get_mark er())1062 self.reader.get_mark()) 1063 1063 self.reader.forward() 1064 1064 ch = self.reader.peek() … … 1071 1071 ch = self.reader.peek() 1072 1072 if ch not in u'\0 \r\n\x85\u2028\u2029': 1073 raise ScannerError("while scanning a block scalar", start_mark er,1073 raise ScannerError("while scanning a block scalar", start_mark, 1074 1074 "expected chomping or indentation indicators, but found %r" 1075 % ch.encode('utf-8'), self.reader.get_mark er())1075 % ch.encode('utf-8'), self.reader.get_mark()) 1076 1076 return chomping, increment 1077 1077 1078 def scan_block_scalar_ignored_line(self, start_mark er):1078 def scan_block_scalar_ignored_line(self, start_mark): 1079 1079 # See the specification for details. 1080 1080 while self.reader.peek() == u' ': … … 1085 1085 ch = self.reader.peek() 1086 1086 if ch not in u'\0\r\n\x85\u2028\u2029': 1087 raise ScannerError("while scanning a block scalar", start_mark er,1087 raise ScannerError("while scanning a block scalar", start_mark, 1088 1088 "expected a comment or a line break, but found %r" 1089 % ch.encode('utf-8'), self.reader.get_mark er())1089 % ch.encode('utf-8'), self.reader.get_mark()) 1090 1090 self.scan_line_break() 1091 1091 … … 1094 1094 chunks = [] 1095 1095 max_indent = 0 1096 end_mark er = self.reader.get_marker()1096 end_mark = self.reader.get_mark() 1097 1097 while self.reader.peek() in u' \r\n\x85\u2028\u2029': 1098 1098 if self.reader.peek() != u' ': 1099 1099 chunks.append(self.scan_line_break()) 1100 end_mark er = self.reader.get_marker()1100 end_mark = self.reader.get_mark() 1101 1101 else: 1102 1102 self.reader.forward() 1103 1103 if self.reader.column > max_indent: 1104 1104 max_indent = self.reader.column 1105 return chunks, max_indent, end_mark er1105 return chunks, max_indent, end_mark 1106 1106 1107 1107 def scan_block_scalar_breaks(self, indent): 1108 1108 # See the specification for details. 1109 1109 chunks = [] 1110 end_mark er = self.reader.get_marker()1110 end_mark = self.reader.get_mark() 1111 1111 while self.reader.column < indent and self.reader.peek() == u' ': 1112 1112 self.reader.forward() 1113 1113 while self.reader.peek() in u'\r\n\x85\u2028\u2029': 1114 1114 chunks.append(self.scan_line_break()) 1115 end_mark er = self.reader.get_marker()1115 end_mark = self.reader.get_mark() 1116 1116 while self.reader.column < indent and self.reader.peek() == u' ': 1117 1117 self.reader.forward() 1118 return chunks, end_mark er1118 return chunks, end_mark 1119 1119 1120 1120 def scan_flow_scalar(self, double): 1121 1121 # See the specification for details. 1122 1122 chunks = [] 1123 start_mark er = self.reader.get_marker()1123 start_mark = self.reader.get_mark() 1124 1124 indent = self.indent+1 1125 1125 if indent == 0: … … 1127 1127 quote = self.reader.peek() 1128 1128 self.reader.forward() 1129 chunks.extend(self.scan_flow_scalar_non_spaces(double, indent, start_mark er))1129 chunks.extend(self.scan_flow_scalar_non_spaces(double, indent, start_mark)) 1130 1130 while self.reader.peek() != quote: 1131 chunks.extend(self.scan_flow_scalar_spaces(double, indent, start_mark er))1132 chunks.extend(self.scan_flow_scalar_non_spaces(double, indent, start_mark er))1131 chunks.extend(self.scan_flow_scalar_spaces(double, indent, start_mark)) 1132 chunks.extend(self.scan_flow_scalar_non_spaces(double, indent, start_mark)) 1133 1133 self.reader.forward() 1134 end_mark er = self.reader.get_marker()1135 return ScalarToken(u''.join(chunks), False, start_mark er, end_marker)1134 end_mark = self.reader.get_mark() 1135 return ScalarToken(u''.join(chunks), False, start_mark, end_mark) 1136 1136 1137 1137 ESCAPE_REPLACEMENTS = { … … 1161 1161 } 1162 1162 1163 def scan_flow_scalar_non_spaces(self, double, indent, start_mark er):1163 def scan_flow_scalar_non_spaces(self, double, indent, start_mark): 1164 1164 # See the specification for details. 1165 1165 chunks = [] … … 1189 1189 for k in range(length): 1190 1190 if self.reader.peek(k) not in u'0123456789ABCDEFabcdef': 1191 raise ScannerError("while scanning a double-quoted scalar", start_mark er,1191 raise ScannerError("while scanning a double-quoted scalar", start_mark, 1192 1192 "expected escape sequence of %d hexdecimal numbers, but found %r" % 1193 (length, self.reader.peek(k).encode('utf-8')), self.reader.get_mark er())1193 (length, self.reader.peek(k).encode('utf-8')), self.reader.get_mark()) 1194 1194 code = int(self.reader.prefix(length), 16) 1195 1195 chunks.append(unichr(code)) … … 1197 1197 elif ch in u'\r\n\x85\u2028\u2029': 1198 1198 self.scan_line_break() 1199 chunks.extend(self.scan_flow_scalar_breaks(double, indent, start_mark er))1199 chunks.extend(self.scan_flow_scalar_breaks(double, indent, start_mark)) 1200 1200 else: 1201 raise ScannerError("while scanning a double-quoted scalar", start_mark er,1202 "found unknown escape character %r" % ch.encode('utf-8'), self.reader.get_mark er())1201 raise ScannerError("while scanning a double-quoted scalar", start_mark, 1202 "found unknown escape character %r" % ch.encode('utf-8'), self.reader.get_mark()) 1203 1203 else: 1204 1204 return chunks 1205 1205 1206 def scan_flow_scalar_spaces(self, double, indent, start_mark er):1206 def scan_flow_scalar_spaces(self, double, indent, start_mark): 1207 1207 # See the specification for details. 1208 1208 chunks = [] … … 1214 1214 ch = self.reader.peek() 1215 1215 if ch == u'\0': 1216 raise ScannerError("while scanning a quoted scalar", start_mark er,1217 "found unexpected end of stream", self.reader.get_mark er())1216 raise ScannerError("while scanning a quoted scalar", start_mark, 1217 "found unexpected end of stream", self.reader.get_mark()) 1218 1218 elif ch in u'\r\n\x85\u2028\u2029': 1219 1219 line_break = self.scan_line_break() 1220 breaks = self.scan_flow_scalar_breaks(double, indent, start_mark er)1220 breaks = self.scan_flow_scalar_breaks(double, indent, start_mark) 1221 1221 if line_break != u'\n': 1222 1222 chunks.append(line_break) … … 1228 1228 return chunks 1229 1229 1230 def scan_flow_scalar_breaks(self, double, indent, start_mark er):1230 def scan_flow_scalar_breaks(self, double, indent, start_mark): 1231 1231 # See the specification for details. 1232 1232 chunks = [] … … 1239 1239 if indent == 1: 1240 1240 s = '' 1241 raise ScannerError("while scanning a quoted scalar", start_mark er,1241 raise ScannerError("while scanning a quoted scalar", start_mark, 1242 1242 "expected %d space%s indentation, but found %r" 1243 1243 % (indent, s, self.reader.peek().encode('utf-8')), 1244 self.reader.get_mark er())1244 self.reader.get_mark()) 1245 1245 while self.reader.peek() in u' \t': 1246 1246 self.reader.forward() … … 1256 1256 # We also keep track of the `allow_simple_key` flag here. 1257 1257 chunks = [] 1258 start_mark er = self.reader.get_marker()1259 end_mark er = start_marker1258 start_mark = self.reader.get_mark() 1259 end_mark = start_mark 1260 1260 indent = self.indent+1 1261 1261 if indent == 0: … … 1280 1280 chunks.append(self.reader.prefix(length)) 1281 1281 self.reader.forward(length) 1282 end_mark er = self.reader.get_marker()1282 end_mark = self.reader.get_mark() 1283 1283 spaces = self.scan_plain_spaces(indent) 1284 1284 if not spaces or self.reader.peek() == u'#' \ 1285 1285 or self.reader.column < indent: 1286 1286 break 1287 return ScalarToken(u''.join(chunks), True, start_mark er, end_marker)1287 return ScalarToken(u''.join(chunks), True, start_mark, end_mark) 1288 1288 1289 1289 def scan_plain_spaces(self, indent): … … 1316 1316 return chunks 1317 1317 1318 def scan_tag_handle(self, name, start_mark er):1318 def scan_tag_handle(self, name, start_mark): 1319 1319 # See the specification for details. 1320 1320 # For some strange reasons, the specification does not allow '_' in … … 1322 1322 ch = self.reader.peek() 1323 1323 if ch != u'!': 1324 raise ScannerError("while scanning a %s" % name, start_mark er,1324 raise ScannerError("while scanning a %s" % name, start_mark, 1325 1325 "expected '!', but found %r" % ch.encode('utf-8'), 1326 self.reader.get_mark er())1326 self.reader.get_mark()) 1327 1327 length = 1 1328 1328 ch = self.reader.peek(length) … … 1334 1334 if ch != u'!': 1335 1335 self.reader.forward(length) 1336 raise ScannerError("while scanning a %s" % name, start_mark er,1336 raise ScannerError("while scanning a %s" % name, start_mark, 1337 1337 "expected '!', but found %r" % ch.encode('utf-8'), 1338 self.reader.get_mark er())1338 self.reader.get_mark()) 1339 1339 length += 1 1340 1340 value = self.reader.prefix(length) … … 1342 1342 return value 1343 1343 1344 def scan_tag_uri(self, name, start_mark er):1344 def scan_tag_uri(self, name, start_mark): 1345 1345 # See the specification for details. 1346 1346 # Note: we do not check if URI is well-formed. … … 1354 1354 self.reader.forward(length) 1355 1355 length = 0 1356 chunks.append(self.scan_uri_escapes(name, start_mark er))1356 chunks.append(self.scan_uri_escapes(name, start_mark)) 1357 1357 else: 1358 1358 length += 1 … … 1363 1363 length = 0 1364 1364 if not chunks: 1365 raise ScannerError("while parsing a %s" % name, start_mark er,1365 raise ScannerError("while parsing a %s" % name, start_mark, 1366 1366 "expected URI, but found %r" % ch.encode('utf-8'), 1367 self.reader.get_mark er())1367 self.reader.get_mark()) 1368 1368 return u''.join(chunks) 1369 1369 1370 def scan_uri_escapes(self, name, start_mark er):1370 def scan_uri_escapes(self, name, start_mark): 1371 1371 # See the specification for details. 1372 1372 bytes = [] 1373 mark er = self.reader.get_marker()1373 mark = self.reader.get_mark() 1374 1374 while self.reader.peek() == u'%': 1375 1375 self.reader.forward() 1376 1376 for k in range(2): 1377 1377 if self.reader.peek(k) not in u'0123456789ABCDEFabcdef': 1378 raise ScannerError("while scanning a %s" % name, start_mark er,1378 raise ScannerError("while scanning a %s" % name, start_mark, 1379 1379 "expected URI escape sequence of 2 hexdecimal numbers, but found %r" % 1380 (self.reader.peek(k).encode('utf-8')), self.reader.get_mark er())1380 (self.reader.peek(k).encode('utf-8')), self.reader.get_mark()) 1381 1381 bytes.append(chr(int(self.reader.prefix(2), 16))) 1382 1382 self.reader.forward(2) … … 1384 1384 value = unicode(''.join(bytes), 'utf-8') 1385 1385 except UnicodeDecodeError, exc: 1386 raise ScannerError("while scanning a %s" % name, start_mark er, str(exc), marker)1386 raise ScannerError("while scanning a %s" % name, start_mark, str(exc), mark) 1387 1387 return value 1388 1388
Note: See TracChangeset
for help on using the changeset viewer.
