Ignore:
Timestamp:
04/03/06 14:20:25 (8 years ago)
Author:
xi
Message:

Add style information to events generated by Parser.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pyyaml/trunk/lib/yaml/parser.py

    r118 r130  
    131131        # Parse start of stream. 
    132132        token = self.scanner.get() 
    133         yield StreamStartEvent(token.start_mark, token.end_mark) 
     133        yield StreamStartEvent(token.start_mark, token.end_mark, 
     134                encoding=token.encoding) 
    134135 
    135136        # Parse implicit document. 
     
    139140            token = self.scanner.peek() 
    140141            start_mark = end_mark = token.start_mark 
    141             yield DocumentStartEvent(start_mark, end_mark) 
     142            yield DocumentStartEvent(start_mark, end_mark, 
     143                    implicit=True) 
    142144            for event in self.parse_block_node(): 
    143145                yield event 
    144146            token = self.scanner.peek() 
    145147            start_mark = end_mark = token.start_mark 
     148            implicit = True 
    146149            while self.scanner.check(DocumentEndToken): 
    147150                token = self.scanner.get() 
    148151                end_mark = token.end_mark 
    149             yield DocumentEndEvent(start_mark, end_mark) 
     152                implicit = True 
     153            yield DocumentEndEvent(start_mark, end_mark, 
     154                    implicit=implicit) 
    150155 
    151156        # Parse explicit documents. 
     
    153158            token = self.scanner.peek() 
    154159            start_mark = token.start_mark 
    155             self.process_directives() 
     160            version, tags = self.process_directives() 
    156161            if not self.scanner.check(DocumentStartToken): 
    157162                raise ParserError(None, None, 
     
    161166            token = self.scanner.get() 
    162167            end_mark = token.end_mark 
    163             yield DocumentStartEvent(start_mark, end_mark) 
     168            yield DocumentStartEvent(start_mark, end_mark, 
     169                    implicit=False, version=version, tags=tags) 
    164170            if self.scanner.check(DirectiveToken, 
    165171                    DocumentStartToken, DocumentEndToken, StreamEndToken): 
     
    170176            token = self.scanner.peek() 
    171177            start_mark = end_mark = token.start_mark 
     178            implicit=True 
    172179            while self.scanner.check(DocumentEndToken): 
    173180                token = self.scanner.get() 
    174181                end_mark = token.end_mark 
    175             yield DocumentEndEvent(start_mark, end_mark) 
     182                implicit=False 
     183            yield DocumentEndEvent(start_mark, end_mark, 
     184                    implicit=implicit) 
    176185 
    177186        # Parse end of stream. 
     
    202211                            token.start_mark) 
    203212                self.tag_handles[handle] = prefix 
     213        if self.tag_handles: 
     214            value = self.yaml_version, self.tag_handles.copy() 
     215        else: 
     216            value = self.yaml_version, None 
    204217        for key in self.DEFAULT_TAGS: 
    205218            if key not in self.tag_handles: 
    206219                self.tag_handles[key] = self.DEFAULT_TAGS[key] 
     220        return value 
    207221 
    208222    def parse_block_node(self): 
     
    233247            if self.scanner.check(AnchorToken): 
    234248                token = self.scanner.get() 
    235                 start_mark = end_mark = token.start_mark 
     249                start_mark = token.start_mark 
     250                end_mark = token.end_mark 
    236251                anchor = token.value 
    237252                if self.scanner.check(TagToken): 
    238253                    token = self.scanner.get() 
    239                     end_mark = tag_mark = token.start_mark 
     254                    tag_mark = token.start_mark 
     255                    end_mark = token.end_mark 
    240256                    tag = token.value 
    241257            elif self.scanner.check(TagToken): 
    242258                token = self.scanner.get() 
    243                 start_mark = end_mark = tag_mark = token.start_mark 
     259                start_mark = tag_mark = token.start_mark 
     260                end_mark = token.end_mark 
    244261                tag = token.value 
    245262                if self.scanner.check(AnchorToken): 
    246263                    token = self.scanner.get() 
    247                     end_mark = token.start_mark 
     264                    end_mark = token.end_mark 
    248265                    anchor = token.value 
    249266            if tag is not None: 
     
    259276            if tag is None: 
    260277                if not (self.scanner.check(ScalarToken) and 
    261                         self.scanner.peek().plain): 
     278                        self.scanner.peek().implicit): 
    262279                    tag = u'!' 
    263280            if start_mark is None: 
    264                 start_mark = self.scanner.peek().start_mark 
     281                start_mark = end_mark = self.scanner.peek().start_mark 
    265282            event = None 
    266283            collection_events = None 
    267284            if indentless_sequence and self.scanner.check(BlockEntryToken): 
    268285                end_mark = self.scanner.peek().end_mark 
    269                 event = SequenceEvent(anchor, tag, start_mark, end_mark) 
     286                event = SequenceStartEvent(anchor, tag, start_mark, end_mark) 
    270287                collection_events = self.parse_indentless_sequence() 
    271288            else: 
     
    274291                    end_mark = token.end_mark 
    275292                    event = ScalarEvent(anchor, tag, token.value, 
    276                             start_mark, end_mark) 
     293                            start_mark, end_mark, 
     294                            implicit=token.implicit, style=token.style) 
    277295                elif self.scanner.check(FlowSequenceStartToken): 
    278296                    end_mark = self.scanner.peek().end_mark 
    279                     event = SequenceEvent(anchor, tag, start_mark, end_mark) 
     297                    event = SequenceStartEvent(anchor, tag, start_mark, end_mark, 
     298                            flow_style=True) 
    280299                    collection_events = self.parse_flow_sequence() 
    281300                elif self.scanner.check(FlowMappingStartToken): 
    282301                    end_mark = self.scanner.peek().end_mark 
    283                     event = MappingEvent(anchor, tag, start_mark, end_mark) 
     302                    event = MappingStartEvent(anchor, tag, start_mark, end_mark, 
     303                            flow_style=True) 
    284304                    collection_events = self.parse_flow_mapping() 
    285305                elif block and self.scanner.check(BlockSequenceStartToken): 
    286306                    end_mark = self.scanner.peek().start_mark 
    287                     event = SequenceEvent(anchor, tag, start_mark, end_mark) 
     307                    event = SequenceStartEvent(anchor, tag, start_mark, end_mark, 
     308                            flow_style=False) 
    288309                    collection_events = self.parse_block_sequence() 
    289310                elif block and self.scanner.check(BlockMappingStartToken): 
    290311                    end_mark = self.scanner.peek().start_mark 
    291                     event = MappingEvent(anchor, tag, start_mark, end_mark) 
     312                    event = MappingStartEvent(anchor, tag, start_mark, end_mark, 
     313                            flow_style=False) 
    292314                    collection_events = self.parse_block_mapping() 
     315                elif anchor is not None or tag is not None: 
     316                    # Empty scalars are allowed even if a tag or an anchor is 
     317                    # specified. 
     318                    event = ScalarEvent(anchor, tag, u'', start_mark, end_mark, 
     319                            implicit=True) 
    293320                else: 
    294321                    if block: 
     
    321348                    "expected <block end>, but found %r" % token.id, token.start_mark) 
    322349        token = self.scanner.get() 
    323         yield CollectionEndEvent(token.start_mark, token.end_mark) 
     350        yield SequenceEndEvent(token.start_mark, token.end_mark) 
    324351 
    325352    def parse_indentless_sequence(self): 
     
    334361                yield self.process_empty_scalar(token.end_mark) 
    335362        token = self.scanner.peek() 
    336         yield CollectionEndEvent(token.start_mark, token.start_mark) 
     363        yield SequenceEndEvent(token.start_mark, token.start_mark) 
    337364 
    338365    def parse_block_mapping(self): 
     
    366393                    "expected <block end>, but found %r" % token.id, token.start_mark) 
    367394        token = self.scanner.get() 
    368         yield CollectionEndEvent(token.start_mark, token.end_mark) 
     395        yield MappingEndEvent(token.start_mark, token.end_mark) 
    369396 
    370397    def parse_flow_sequence(self): 
     
    384411            if self.scanner.check(KeyToken): 
    385412                token = self.scanner.get() 
    386                 yield MappingEvent(None, u'!', 
    387                         token.start_mark, token.end_mark) 
     413                yield MappingStartEvent(None, u'!', 
     414                        token.start_mark, token.end_mark, 
     415                        flow_style=True) 
    388416                if not self.scanner.check(ValueToken, 
    389417                        FlowEntryToken, FlowSequenceEndToken): 
     
    403431                    yield self.process_empty_scalar(token.start_mark) 
    404432                token = self.scanner.peek() 
    405                 yield CollectionEndEvent(token.start_mark, token.start_mark) 
     433                yield MappingEndEvent(token.start_mark, token.start_mark) 
    406434            else: 
    407435                for event in self.parse_flow_node(): 
     
    414442                self.scanner.get() 
    415443        token = self.scanner.get() 
    416         yield CollectionEndEvent(token.start_mark, token.end_mark) 
     444        yield SequenceEndEvent(token.start_mark, token.end_mark) 
    417445 
    418446    def parse_flow_mapping(self): 
     
    458486                    "expected '}', but found %r" % token.id, token.start_mark) 
    459487        token = self.scanner.get() 
    460         yield CollectionEndEvent(token.start_mark, token.end_mark) 
     488        yield MappingEndEvent(token.start_mark, token.end_mark) 
    461489 
    462490    def process_empty_scalar(self, mark): 
    463         return ScalarEvent(None, None, u'', mark, mark) 
    464  
     491        return ScalarEvent(None, None, u'', mark, mark, 
     492                implicit=True) 
     493 
Note: See TracChangeset for help on using the changeset viewer.