Changeset 116
- Timestamp:
- 03/18/06 08:37:09 (7 years ago)
- Location:
- pyyaml/trunk
- Files:
-
- 10 edited
- 2 moved
-
lib/yaml/composer.py (modified) (5 diffs)
-
lib/yaml/constructor.py (modified) (12 diffs)
-
lib/yaml/error.py (modified) (2 diffs)
-
lib/yaml/events.py (modified) (3 diffs)
-
lib/yaml/nodes.py (modified) (1 diff)
-
lib/yaml/parser.py (modified) (21 diffs)
-
lib/yaml/reader.py (modified) (3 diffs)
-
lib/yaml/scanner.py (modified) (52 diffs)
-
lib/yaml/tokens.py (modified) (3 diffs)
-
tests/data/test_mark.marks (moved) (moved from pyyaml/trunk/tests/data/test_marker.markers)
-
tests/test_mark.py (moved) (moved from pyyaml/trunk/tests/test_marker.py) (3 diffs)
-
tests/test_yaml.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
pyyaml/trunk/lib/yaml/composer.py
r57 r116 42 42 if anchor not in self.all_anchors: 43 43 raise ComposerError(None, None, "found undefined alias %r" 44 % anchor.encode('utf-8'), event.start_mark er)44 % anchor.encode('utf-8'), event.start_mark) 45 45 if anchor not in self.complete_anchors: 46 46 collection_event = self.all_anchors[anchor] 47 47 raise ComposerError("while composing a collection", 48 collection_event.start_mark er,48 collection_event.start_mark, 49 49 "found recursive anchor %r" % anchor.encode('utf-8'), 50 event.start_mark er)50 event.start_mark) 51 51 return self.complete_anchors[anchor] 52 52 event = self.parser.peek() … … 55 55 if anchor in self.all_anchors: 56 56 raise ComposerError("found duplicate anchor %r; first occurence" 57 % anchor.encode('utf-8'), self.all_anchors[anchor].start_mark er,58 "second occurence", event.start_mark er)57 % anchor.encode('utf-8'), self.all_anchors[anchor].start_mark, 58 "second occurence", event.start_mark) 59 59 self.all_anchors[anchor] = event 60 60 if self.parser.check(ScalarEvent): … … 71 71 event = self.parser.get() 72 72 return ScalarNode(event.tag, event.value, 73 event.start_mark er, event.end_marker)73 event.start_mark, event.end_mark) 74 74 75 75 def compose_sequence_node(self): … … 80 80 end_event = self.parser.get() 81 81 return SequenceNode(start_event.tag, value, 82 start_event.start_mark er, end_event.end_marker)82 start_event.start_mark, end_event.end_mark) 83 83 84 84 def compose_mapping_node(self): … … 90 90 item_value = self.compose_node() 91 91 if item_key in value: 92 raise ComposerError("while composing a mapping", start_event.start_mark er,93 "found duplicate key", key_event.start_mark er)92 raise ComposerError("while composing a mapping", start_event.start_mark, 93 "found duplicate key", key_event.start_mark) 94 94 value[item_key] = item_value 95 95 end_event = self.parser.get() 96 96 return MappingNode(start_event.tag, value, 97 start_event.start_mark er, end_event.end_marker)97 start_event.start_mark, end_event.end_mark) 98 98 -
pyyaml/trunk/lib/yaml/constructor.py
r59 r116 71 71 raise ConstructorError(None, None, 72 72 "expected a scalar node, but found %s" % node.id, 73 node.start_mark er)73 node.start_mark) 74 74 return node.value 75 75 … … 78 78 raise ConstructorError(None, None, 79 79 "expected a sequence node, but found %s" % node.id, 80 node.start_mark er)80 node.start_mark) 81 81 return [self.construct_object(child) for child in node.value] 82 82 … … 85 85 raise ConstructorError(None, None, 86 86 "expected a mapping node, but found %s" % node.id, 87 node.start_mark er)87 node.start_mark) 88 88 mapping = {} 89 89 merge = None … … 91 91 if key_node.tag == u'tag:yaml.org,2002:merge': 92 92 if merge is not None: 93 raise ConstructorError("while constructing a mapping", node.start_mark er,94 "found duplicate merge key", key_node.start_mark er)93 raise ConstructorError("while constructing a mapping", node.start_mark, 94 "found duplicate merge key", key_node.start_mark) 95 95 value_node = node.value[key_node] 96 96 if isinstance(value_node, MappingNode): … … 101 101 if not isinstance(subnode, MappingNode): 102 102 raise ConstructorError("while constructing a mapping", 103 node.start_mark er,103 node.start_mark, 104 104 "expected a mapping for merging, but found %s" 105 % subnode.id, subnode.start_mark er)105 % subnode.id, subnode.start_mark) 106 106 merge.append(self.construct_mapping(subnode)) 107 107 merge.reverse() 108 108 else: 109 raise ConstructorError("while constructing a mapping", node.start_mark er,109 raise ConstructorError("while constructing a mapping", node.start_mark, 110 110 "expected a mapping or list of mappings for merging, but found %s" 111 % value_node.id, value_node.start_mark er)111 % value_node.id, value_node.start_mark) 112 112 elif key_node.tag == u'tag:yaml.org,2002:value': 113 113 if '=' in mapping: 114 raise ConstructorError("while construction a mapping", node.start_mark er,115 "found duplicate value key", key_node.start_mark er)114 raise ConstructorError("while construction a mapping", node.start_mark, 115 "found duplicate value key", key_node.start_mark) 116 116 value = self.construct_object(node.value[key_node]) 117 117 mapping['='] = value … … 121 121 duplicate_key = key in mapping 122 122 except TypeError, exc: 123 raise ConstructorError("while constructing a mapping", node.start_mark er,124 "found unacceptable key (%s)" % exc, key_node.start_mark er)123 raise ConstructorError("while constructing a mapping", node.start_mark, 124 "found unacceptable key (%s)" % exc, key_node.start_mark) 125 125 if duplicate_key: 126 raise ConstructorError("while constructing a mapping", node.start_mark er,127 "found duplicate key", key_node.start_mark er)126 raise ConstructorError("while constructing a mapping", node.start_mark, 127 "found duplicate key", key_node.start_mark) 128 128 value = self.construct_object(node.value[key_node]) 129 129 mapping[key] = value … … 139 139 raise ConstructorError(None, None, 140 140 "expected a mapping node, but found %s" % node.id, 141 node.start_mark er)141 node.start_mark) 142 142 pairs = [] 143 143 for key_node in node.value: … … 235 235 except (binascii.Error, UnicodeEncodeError), exc: 236 236 raise ConstructorError(None, None, 237 "failed to decode base64 data: %s" % exc, node.start_mark er)237 "failed to decode base64 data: %s" % exc, node.start_mark) 238 238 239 239 timestamp_regexp = re.compile( … … 272 272 # CPU-expensive. 273 273 if not isinstance(node, SequenceNode): 274 raise ConstructorError("while constructing an ordered map", node.start_mark er,275 "expected a sequence, but found %s" % node.id, node.start_mark er)274 raise ConstructorError("while constructing an ordered map", node.start_mark, 275 "expected a sequence, but found %s" % node.id, node.start_mark) 276 276 omap = [] 277 277 for subnode in node.value: 278 278 if not isinstance(subnode, MappingNode): 279 raise ConstructorError("while constructing an ordered map", node.start_mark er,279 raise ConstructorError("while constructing an ordered map", node.start_mark, 280 280 "expected a mapping of length 1, but found %s" % subnode.id, 281 subnode.start_mark er)281 subnode.start_mark) 282 282 if len(subnode.value) != 1: 283 raise ConstructorError("while constructing an ordered map", node.start_mark er,283 raise ConstructorError("while constructing an ordered map", node.start_mark, 284 284 "expected a single mapping item, but found %d items" % len(subnode.value), 285 subnode.start_mark er)285 subnode.start_mark) 286 286 key_node = subnode.value.keys()[0] 287 287 key = self.construct_object(key_node) … … 293 293 # Note: the same code as `construct_yaml_omap`. 294 294 if not isinstance(node, SequenceNode): 295 raise ConstructorError("while constructing pairs", node.start_mark er,296 "expected a sequence, but found %s" % node.id, node.start_mark er)295 raise ConstructorError("while constructing pairs", node.start_mark, 296 "expected a sequence, but found %s" % node.id, node.start_mark) 297 297 pairs = [] 298 298 for subnode in node.value: 299 299 if not isinstance(subnode, MappingNode): 300 raise ConstructorError("while constructing pairs", node.start_mark er,300 raise ConstructorError("while constructing pairs", node.start_mark, 301 301 "expected a mapping of length 1, but found %s" % subnode.id, 302 subnode.start_mark er)302 subnode.start_mark) 303 303 if len(subnode.value) != 1: 304 raise ConstructorError("while constructing pairs", node.start_mark er,304 raise ConstructorError("while constructing pairs", node.start_mark, 305 305 "expected a single mapping item, but found %d items" % len(subnode.value), 306 subnode.start_mark er)306 subnode.start_mark) 307 307 key_node = subnode.value.keys()[0] 308 308 key = self.construct_object(key_node) … … 331 331 raise ConstructorError(None, None, 332 332 "could not determine a constructor for the tag %r" % node.tag.encode('utf-8'), 333 node.start_mark er)333 node.start_mark) 334 334 335 335 Constructor.add_constructor( … … 403 403 raise ConstructorError(None, None, 404 404 "found undefined constructor for the tag %r" 405 % node.tag.encode('utf-8'), node.start_mark er)405 % node.tag.encode('utf-8'), node.start_mark) 406 406 from_yaml = classmethod(from_yaml) 407 407 -
pyyaml/trunk/lib/yaml/error.py
r53 r116 1 1 2 __all__ = ['Mark er', 'YAMLError', 'MarkedYAMLError']2 __all__ = ['Mark', 'YAMLError', 'MarkedYAMLError'] 3 3 4 class Mark er:4 class Mark: 5 5 6 6 def __init__(self, name, line, column, buffer, pointer): … … 47 47 class MarkedYAMLError(YAMLError): 48 48 49 def __init__(self, context=None, context_mark er=None,50 problem=None, problem_mark er=None):49 def __init__(self, context=None, context_mark=None, 50 problem=None, problem_mark=None): 51 51 self.context = context 52 self.context_mark er = context_marker52 self.context_mark = context_mark 53 53 self.problem = problem 54 self.problem_mark er = problem_marker54 self.problem_mark = problem_mark 55 55 56 56 def __str__(self): 57 57 lines = [] 58 #for (place, mark er) in [(self.context, self.context_marker),59 # (self.problem, self.problem_mark er)]:58 #for (place, mark) in [(self.context, self.context_mark), 59 # (self.problem, self.problem_mark)]: 60 60 # if place is not None: 61 61 # lines.append(place) 62 # if mark eris not None:63 # lines.append(str(mark er))62 # if mark is not None: 63 # lines.append(str(mark)) 64 64 if self.context is not None: 65 65 lines.append(self.context) 66 if self.context_mark eris not None \67 and (self.problem is None or self.problem_mark eris None68 or self.context_mark er.name != self.problem_marker.name69 or self.context_mark er.line != self.problem_marker.line70 or self.context_mark er.column != self.problem_marker.column):71 lines.append(str(self.context_mark er))66 if self.context_mark is not None \ 67 and (self.problem is None or self.problem_mark is None 68 or self.context_mark.name != self.problem_mark.name 69 or self.context_mark.line != self.problem_mark.line 70 or self.context_mark.column != self.problem_mark.column): 71 lines.append(str(self.context_mark)) 72 72 if self.problem is not None: 73 73 lines.append(self.problem) 74 if self.problem_mark eris not None:75 lines.append(str(self.problem_mark er))74 if self.problem_mark is not None: 75 lines.append(str(self.problem_mark)) 76 76 return '\n'.join(lines) 77 77 -
pyyaml/trunk/lib/yaml/events.py
r53 r116 1 1 2 2 class Event: 3 def __init__(self, start_mark er, end_marker):4 self.start_mark er = start_marker5 self.end_mark er = end_marker3 def __init__(self, start_mark, end_mark): 4 self.start_mark = start_mark 5 self.end_mark = end_mark 6 6 def __repr__(self): 7 7 attributes = [key for key in self.__dict__ 8 if not key.endswith('_mark er')]8 if not key.endswith('_mark')] 9 9 attributes.sort() 10 10 arguments = ', '.join(['%s=%r' % (key, getattr(self, key)) … … 13 13 14 14 class NodeEvent(Event): 15 def __init__(self, anchor, start_mark er, end_marker):15 def __init__(self, anchor, start_mark, end_mark): 16 16 self.anchor = anchor 17 self.start_mark er = start_marker18 self.end_mark er = end_marker17 self.start_mark = start_mark 18 self.end_mark = end_mark 19 19 20 20 class AliasEvent(NodeEvent): … … 22 22 23 23 class ScalarEvent(NodeEvent): 24 def __init__(self, anchor, tag, value, start_mark er, end_marker):24 def __init__(self, anchor, tag, value, start_mark, end_mark): 25 25 self.anchor = anchor 26 26 self.tag = tag 27 27 self.value = value 28 self.start_mark er = start_marker29 self.end_mark er = end_marker28 self.start_mark = start_mark 29 self.end_mark = end_mark 30 30 31 31 class CollectionEvent(NodeEvent): 32 def __init__(self, anchor, tag, start_mark er, end_marker):32 def __init__(self, anchor, tag, start_mark, end_mark): 33 33 self.anchor = anchor 34 34 self.tag = tag 35 self.start_mark er = start_marker36 self.end_mark er = end_marker35 self.start_mark = start_mark 36 self.end_mark = end_mark 37 37 38 38 class SequenceEvent(CollectionEvent): -
pyyaml/trunk/lib/yaml/nodes.py
r55 r116 1 1 2 2 class Node: 3 def __init__(self, tag, value, start_mark er, end_marker):3 def __init__(self, tag, value, start_mark, end_mark): 4 4 self.tag = tag 5 5 self.value = value 6 self.start_mark er = start_marker7 self.end_mark er = end_marker6 self.start_mark = start_mark 7 self.end_mark = end_mark 8 8 def __repr__(self): 9 9 value = self.value -
pyyaml/trunk/lib/yaml/parser.py
r57 r116 143 143 "expected '<document start>', but found %r" 144 144 % self.scanner.peek().id, 145 self.scanner.peek().start_mark er)145 self.scanner.peek().start_mark) 146 146 token = self.scanner.get() 147 147 if self.scanner.check(DirectiveToken, 148 148 DocumentStartToken, DocumentEndToken, StreamEndToken): 149 yield self.process_empty_scalar(token.end_mark er)149 yield self.process_empty_scalar(token.end_mark) 150 150 else: 151 151 for event in self.parse_block_node(): … … 156 156 # Parse end of stream. 157 157 token = self.scanner.get() 158 yield StreamEndEvent(token.start_mark er, token.end_marker)158 yield StreamEndEvent(token.start_mark, token.end_mark) 159 159 160 160 def process_directives(self): … … 167 167 if self.yaml_version is not None: 168 168 raise ParserError(None, None, 169 "found duplicate YAML directive", token.start_mark er)169 "found duplicate YAML directive", token.start_mark) 170 170 major, minor = token.value 171 171 if major != 1: 172 172 raise ParserError(None, None, 173 173 "found incompatible YAML document (version 1.* is required)", 174 token.start_mark er)174 token.start_mark) 175 175 self.yaml_version = token.value 176 176 elif token.name == u'TAG': … … 179 179 raise ParserError(None, None, 180 180 "duplicate tag handle %r" % handle.encode('utf-8'), 181 token.start_mark er)181 token.start_mark) 182 182 self.tag_handles[handle] = prefix 183 183 for key in self.DEFAULT_TAGS: … … 205 205 if self.scanner.check(AliasToken): 206 206 token = self.scanner.get() 207 yield AliasEvent(token.value, token.start_mark er, token.end_marker)207 yield AliasEvent(token.value, token.start_mark, token.end_mark) 208 208 else: 209 209 anchor = None 210 210 tag = None 211 start_mark er = end_marker = tag_marker= None211 start_mark = end_mark = tag_mark = None 212 212 if self.scanner.check(AnchorToken): 213 213 token = self.scanner.get() 214 start_mark er = end_marker = token.start_marker214 start_mark = end_mark = token.start_mark 215 215 anchor = token.value 216 216 if self.scanner.check(TagToken): 217 217 token = self.scanner.get() 218 end_mark er = tag_marker = token.start_marker218 end_mark = tag_mark = token.start_mark 219 219 tag = token.value 220 220 elif self.scanner.check(TagToken): 221 221 token = self.scanner.get() 222 start_mark er = end_marker = tag_marker = token.start_marker222 start_mark = end_mark = tag_mark = token.start_mark 223 223 tag = token.value 224 224 if self.scanner.check(AnchorToken): 225 225 token = self.scanner.get() 226 end_mark er = token.start_marker226 end_mark = token.start_mark 227 227 anchor = token.value 228 228 if tag is not None: … … 230 230 if handle is not None: 231 231 if handle not in self.tag_handles: 232 raise ParserError("while parsing a node", start_mark er,232 raise ParserError("while parsing a node", start_mark, 233 233 "found undefined tag handle %r" % handle.encode('utf-8'), 234 tag_mark er)234 tag_mark) 235 235 tag = self.tag_handles[handle]+suffix 236 236 else: … … 240 240 self.scanner.peek().plain): 241 241 tag = u'!' 242 if start_mark eris None:243 start_mark er = self.scanner.peek().start_marker242 if start_mark is None: 243 start_mark = self.scanner.peek().start_mark 244 244 event = None 245 245 collection_events = None 246 246 if indentless_sequence and self.scanner.check(BlockEntryToken): 247 end_mark er = self.scanner.peek().end_marker248 event = SequenceEvent(anchor, tag, start_mark er, end_marker)247 end_mark = self.scanner.peek().end_mark 248 event = SequenceEvent(anchor, tag, start_mark, end_mark) 249 249 collection_events = self.parse_indentless_sequence() 250 250 else: 251 251 if self.scanner.check(ScalarToken): 252 252 token = self.scanner.get() 253 end_mark er = token.end_marker253 end_mark = token.end_mark 254 254 event = ScalarEvent(anchor, tag, token.value, 255 start_mark er, end_marker)255 start_mark, end_mark) 256 256 elif self.scanner.check(FlowSequenceStartToken): 257 end_mark er = self.scanner.peek().end_marker258 event = SequenceEvent(anchor, tag, start_mark er, end_marker)257 end_mark = self.scanner.peek().end_mark 258 event = SequenceEvent(anchor, tag, start_mark, end_mark) 259 259 collection_events = self.parse_flow_sequence() 260 260 elif self.scanner.check(FlowMappingStartToken): 261 end_mark er = self.scanner.peek().end_marker262 event = MappingEvent(anchor, tag, start_mark er, end_marker)261 end_mark = self.scanner.peek().end_mark 262 event = MappingEvent(anchor, tag, start_mark, end_mark) 263 263 collection_events = self.parse_flow_mapping() 264 264 elif block and self.scanner.check(BlockSequenceStartToken): 265 end_mark er = self.scanner.peek().start_marker266 event = SequenceEvent(anchor, tag, start_mark er, end_marker)265 end_mark = self.scanner.peek().start_mark 266 event = SequenceEvent(anchor, tag, start_mark, end_mark) 267 267 collection_events = self.parse_block_sequence() 268 268 elif block and self.scanner.check(BlockMappingStartToken): 269 end_mark er = self.scanner.peek().start_marker270 event = MappingEvent(anchor, tag, start_mark er, end_marker)269 end_mark = self.scanner.peek().start_mark 270 event = MappingEvent(anchor, tag, start_mark, end_mark) 271 271 collection_events = self.parse_block_mapping() 272 272 else: … … 276 276 node = 'flow' 277 277 token = self.scanner.peek() 278 raise ParserError("while scanning a %s node" % node, start_mark er,278 raise ParserError("while scanning a %s node" % node, start_mark, 279 279 "expected the node content, but found %r" % token.id, 280 token.start_mark er)280 token.start_mark) 281 281 yield event 282 282 if collection_events is not None: … … 287 287 # BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END 288 288 token = self.scanner.get() 289 start_mark er = token.start_marker289 start_mark = token.start_mark 290 290 while self.scanner.check(BlockEntryToken): 291 291 token = self.scanner.get() … … 294 294 yield event 295 295 else: 296 yield self.process_empty_scalar(token.end_mark er)296 yield self.process_empty_scalar(token.end_mark) 297 297 if not self.scanner.check(BlockEndToken): 298 298 token = self.scanner.peek() 299 raise ParserError("while scanning a block collection", start_mark er,300 "expected <block end>, but found %r" % token.id, token.start_mark er)301 token = self.scanner.get() 302 yield CollectionEndEvent(token.start_mark er, token.end_marker)299 raise ParserError("while scanning a block collection", start_mark, 300 "expected <block end>, but found %r" % token.id, token.start_mark) 301 token = self.scanner.get() 302 yield CollectionEndEvent(token.start_mark, token.end_mark) 303 303 304 304 def parse_indentless_sequence(self): … … 311 311 yield event 312 312 else: 313 yield self.process_empty_scalar(token.end_mark er)313 yield self.process_empty_scalar(token.end_mark) 314 314 token = self.scanner.peek() 315 yield CollectionEndEvent(token.start_mark er, token.start_marker)315 yield CollectionEndEvent(token.start_mark, token.start_mark) 316 316 317 317 def parse_block_mapping(self): … … 321 321 # BLOCK-END 322 322 token = self.scanner.get() 323 start_mark er = token.start_marker323 start_mark = token.start_mark 324 324 while self.scanner.check(KeyToken, ValueToken): 325 325 if self.scanner.check(KeyToken): … … 329 329 yield event 330 330 else: 331 yield self.process_empty_scalar(token.end_mark er)331 yield self.process_empty_scalar(token.end_mark) 332 332 if self.scanner.check(ValueToken): 333 333 token = self.scanner.get() … … 336 336 yield event 337 337 else: 338 yield self.process_empty_scalar(token.end_mark er)338 yield self.process_empty_scalar(token.end_mark) 339 339 else: 340 340 token = self.scanner.peek() 341 yield self.process_empty_scalar(token.start_mark er)341 yield self.process_empty_scalar(token.start_mark) 342 342 if not self.scanner.check(BlockEndToken): 343 343 token = self.scanner.peek() 344 raise ParserError("while scanning a block mapping", start_mark er,345 "expected <block end>, but found %r" % token.id, token.start_mark er)346 token = self.scanner.get() 347 yield CollectionEndEvent(token.start_mark er, token.end_marker)344 raise ParserError("while scanning a block mapping", start_mark, 345 "expected <block end>, but found %r" % token.id, token.start_mark) 346 token = self.scanner.get() 347 yield CollectionEndEvent(token.start_mark, token.end_mark) 348 348 349 349 def parse_flow_sequence(self): … … 359 359 # generate an inline mapping (set syntax). 360 360 token = self.scanner.get() 361 start_mark er = token.start_marker361 start_mark = token.start_mark 362 362 while not self.scanner.check(FlowSequenceEndToken): 363 363 if self.scanner.check(KeyToken): 364 364 token = self.scanner.get() 365 365 yield MappingEvent(None, u'!', 366 token.start_mark er, token.end_marker)366 token.start_mark, token.end_mark) 367 367 if not self.scanner.check(ValueToken, 368 368 FlowEntryToken, FlowSequenceEndToken): … … 370 370 yield event 371 371 else: 372 yield self.process_empty_scalar(token.end_mark er)372 yield self.process_empty_scalar(token.end_mark) 373 373 if self.scanner.check(ValueToken): 374 374 token = self.scanner.get() … … 377 377 yield event 378 378 else: 379 yield self.process_empty_scalar(token.end_mark er)379 yield self.process_empty_scalar(token.end_mark) 380 380 else: 381 381 token = self.scanner.peek() 382 yield self.process_empty_scalar(token.start_mark er)382 yield self.process_empty_scalar(token.start_mark) 383 383 token = self.scanner.peek() 384 yield CollectionEndEvent(token.start_mark er, token.start_marker)384 yield CollectionEndEvent(token.start_mark, token.start_mark) 385 385 else: 386 386 for event in self.parse_flow_node(): … … 388 388 if not self.scanner.check(FlowEntryToken, FlowSequenceEndToken): 389 389 token = self.scanner.peek() 390 raise ParserError("while scanning a flow sequence", start_mark er,391 "expected ',' or ']', but got %r" % token.id, token.start_mark er)390 raise ParserError("while scanning a flow sequence", start_mark, 391 "expected ',' or ']', but got %r" % token.id, token.start_mark) 392 392 if self.scanner.check(FlowEntryToken): 393 393 self.scanner.get() 394 394 token = self.scanner.get() 395 yield CollectionEndEvent(token.start_mark er, token.end_marker)395 yield CollectionEndEvent(token.start_mark, token.end_mark) 396 396 397 397 def parse_flow_mapping(self): … … 402 402 # flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? 403 403 token = self.scanner.get() 404 start_mark er = token.start_marker404 start_mark = token.start_mark 405 405 while not self.scanner.check(FlowMappingEndToken): 406 406 if self.scanner.check(KeyToken): … … 411 411 yield event 412 412 else: 413 yield self.process_empty_scalar(token.end_mark er)413 yield self.process_empty_scalar(token.end_mark) 414 414 if self.scanner.check(ValueToken): 415 415 token = self.scanner.get() … … 418 418 yield event 419 419 else: 420 yield self.process_empty_scalar(token.end_mark er)420 yield self.process_empty_scalar(token.end_mark) 421 421 else: 422 422 token = self.scanner.peek() 423 yield self.process_empty_scalar(token.start_mark er)423 yield self.process_empty_scalar(token.start_mark) 424 424 else: 425 425 for event in self.parse_flow_node(): 426 426 yield event 427 yield self.process_empty_scalar(self.scanner.peek().start_mark er)427 yield self.process_empty_scalar(self.scanner.peek().start_mark) 428 428 if not self.scanner.check(FlowEntryToken, FlowMappingEndToken): 429 429 token = self.scanner.peek() 430 raise ParserError("while scanning a flow mapping", start_mark er,431 "expected ',' or '}', but got %r" % token.id, token.start_mark er)430 raise ParserError("while scanning a flow mapping", start_mark, 431 "expected ',' or '}', but got %r" % token.id, token.start_mark) 432 432 if self.scanner.check(FlowEntryToken): 433 433 self.scanner.get() 434 434 if not self.scanner.check(FlowMappingEndToken): 435 435 token = self.scanner.peek() 436 raise ParserError("while scanning a flow mapping", start_mark er,437 "expected '}', but found %r" % token.id, token.start_mark er)438 token = self.scanner.get() 439 yield CollectionEndEvent(token.start_mark er, token.end_marker)440 441 def process_empty_scalar(self, mark er):442 return ScalarEvent(None, None, u'', mark er, marker)443 436 raise ParserError("while scanning a flow mapping", start_mark, 437 "expected '}', but found %r" % token.id, token.start_mark) 438 token = self.scanner.get() 439 yield CollectionEndEvent(token.start_mark, token.end_mark) 440 441 def process_empty_scalar(self, mark): 442 return ScalarEvent(None, None, u'', mark, mark) 443 -
pyyaml/trunk/lib/yaml/reader.py
r52 r116 4 4 # We define two classes here. 5 5 # 6 # Mark er(source, line, column)6 # Mark(source, line, column) 7 7 # It's just a record and its only use is producing nice error messages. 8 8 # Parser does not use it for any other purposes. … … 18 18 __all__ = ['Reader', 'ReaderError'] 19 19 20 from error import YAMLError, Mark er20 from error import YAMLError, Mark 21 21 22 22 import codecs, re … … 143 143 self.column += 1 144 144 145 def get_mark er(self):145 def get_mark(self): 146 146 if self.stream is None: 147 return Mark er(self.name, self.line, self.column,147 return Mark(self.name, self.line, self.column, 148 148 self.buffer, self.pointer) 149 149 else: 150 return Mark er(self.name, self.line, self.column, None, None)150 return Mark(self.name, self.line, self.column, None, None) 151 151 152 152 def determine_encoding(self): -
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 -
pyyaml/trunk/lib/yaml/tokens.py
r52 r116 1 1 2 2 class Token: 3 def __init__(self, start_mark er, end_marker):4 self.start_mark er = start_marker5 self.end_mark er = end_marker3 def __init__(self, start_mark, end_mark): 4 self.start_mark = start_mark 5 self.end_mark = end_mark 6 6 def __repr__(self): 7 7 attributes = [key for key in self.__dict__ 8 if not key.endswith('_mark er')]8 if not key.endswith('_mark')] 9 9 attributes.sort() 10 10 arguments = ', '.join(['%s=%r' % (key, getattr(self, key)) … … 17 17 class DirectiveToken(Token): 18 18 id = '<directive>' 19 def __init__(self, name, value, start_mark er, end_marker):19 def __init__(self, name, value, start_mark, end_mark): 20 20 self.name = name 21 21 self.value = value 22 self.start_mark er = start_marker23 self.end_mark er = end_marker22 self.start_mark = start_mark 23 self.end_mark = end_mark 24 24 25 25 class DocumentStartToken(Token): … … 67 67 class AliasToken(Token): 68 68 id = '<alias>' 69 def __init__(self, value, start_mark er, end_marker):69 def __init__(self, value, start_mark, end_mark): 70 70 self.value = value 71 self.start_mark er = start_marker72 self.end_mark er = end_marker71 self.start_mark = start_mark 72 self.end_mark = end_mark 73 73 74 74 class AnchorToken(Token): 75 75 id = '<anchor>' 76 def __init__(self, value, start_mark er, end_marker):76 def __init__(self, value, start_mark, end_mark): 77 77 self.value = value 78 self.start_mark er = start_marker79 self.end_mark er = end_marker78 self.start_mark = start_mark 79 self.end_mark = end_mark 80 80 81 81 class TagToken(Token): 82 82 id = '<tag>' 83 def __init__(self, value, start_mark er, end_marker):83 def __init__(self, value, start_mark, end_mark): 84 84 self.value = value 85 self.start_mark er = start_marker86 self.end_mark er = end_marker85 self.start_mark = start_mark 86 self.end_mark = end_mark 87 87 88 88 class ScalarToken(Token): 89 89 id = '<scalar>' 90 def __init__(self, value, plain, start_mark er, end_marker):90 def __init__(self, value, plain, start_mark, end_mark): 91 91 self.value = value 92 92 self.plain = plain 93 self.start_mark er = start_marker94 self.end_mark er = end_marker93 self.start_mark = start_mark 94 self.end_mark = end_mark 95 95 -
pyyaml/trunk/tests/test_mark.py
r47 r116 2 2 import test_appliance 3 3 4 from yaml.reader import Mark er4 from yaml.reader import Mark 5 5 6 class TestMark er(test_appliance.TestAppliance):6 class TestMark(test_appliance.TestAppliance): 7 7 8 def _testMark ers(self, test_name, markers_filename):9 inputs = file(mark ers_filename, 'rb').read().split('---\n')[1:]8 def _testMarks(self, test_name, marks_filename): 9 inputs = file(marks_filename, 'rb').read().split('---\n')[1:] 10 10 for input in inputs: 11 11 index = 0 … … 19 19 column += 1 20 20 index += 1 21 mark er = Marker(test_name, line, column, unicode(input), index)22 snippet = mark er.get_snippet(indent=2, max_length=79)21 mark = Mark(test_name, line, column, unicode(input), index) 22 snippet = mark.get_snippet(indent=2, max_length=79) 23 23 #print "INPUT:" 24 24 #print input … … 31 31 self.failUnlessEqual(data[len(pointer)-1], '*') 32 32 33 TestMark er.add_tests('testMarkers', '.markers')33 TestMark.add_tests('testMarks', '.marks') 34 34 -
pyyaml/trunk/tests/test_yaml.py
r58 r116 2 2 import unittest 3 3 4 from test_mark erimport *4 from test_mark import * 5 5 from test_reader import * 6 6 from test_canonical import *
Note: See TracChangeset
for help on using the changeset viewer.
