Ignore:
Timestamp:
03/26/06 17:57:23 (8 years ago)
Author:
xi
Message:

Parser now provides style information. Allow empty plain scalars if a tag or anchor is given.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pyyaml/branches/working-on-emitter/lib/yaml/scanner.py

    r121 r127  
    3636    # See below simple keys treatment. 
    3737 
    38     def __init__(self, token_number, required, index, line, column, mark): 
     38    def __init__(self, token_number, required, index, line, column, mark=None, 
     39            inline=None): 
    3940        self.token_number = token_number 
    4041        self.required = required 
     
    4344        self.column = column 
    4445        self.mark = mark 
     46        self.inline = inline 
    4547 
    4648class Scanner: 
     
    8183        # Past indentation levels. 
    8284        self.indents = [] 
     85 
     86        # Used for providing style information to the parser. 
     87        self.current_line = self.previous_line = self.reader.line 
     88        self.current_column = self.previus_column = self.reader.column 
    8389 
    8490        # Variables related to simple keys treatment. 
     
    322328            column = self.reader.column 
    323329            mark = self.reader.get_mark() 
     330            inline = (self.current_line == self.previous_line) 
    324331            key = SimpleKey(token_number, required, 
    325                     index, line, column, mark) 
     332                    index, line, column, mark, inline) 
    326333            self.possible_simple_keys[self.flow_level] = key 
    327334 
     
    381388         
    382389        # Add STREAM-END. 
    383         self.tokens.append(StreamStartToken(mark, mark)) 
    384          
     390        self.tokens.append(StreamStartToken(mark, mark, 
     391            encoding=self.reader.encoding)) 
    385392 
    386393    def fetch_stream_end(self): 
     
    510517            if self.add_indent(self.reader.column): 
    511518                mark = self.reader.get_mark() 
    512                 self.tokens.append(BlockSequenceStartToken(mark, mark)) 
     519                inline = (self.current_line == self.previous_line) 
     520                self.tokens.append(BlockSequenceStartToken(mark, mark, inline)) 
    513521 
    514522        # It's an error for the block entry to occur in the flow context, 
     
    543551            if self.add_indent(self.reader.column): 
    544552                mark = self.reader.get_mark() 
    545                 self.tokens.append(BlockMappingStartToken(mark, mark)) 
     553                inline = (self.current_line == self.previous_line) 
     554                self.tokens.append(BlockMappingStartToken(mark, mark, inline)) 
    546555 
    547556        # Simple keys are allowed after '?' in the block context. 
     
    573582                if self.add_indent(key.column): 
    574583                    self.tokens.insert(key.token_number-self.tokens_taken, 
    575                             BlockMappingStartToken(key.mark, key.mark)) 
     584                            BlockMappingStartToken(key.mark, key.mark, 
     585                                key.inline)) 
    576586 
    577587            # There cannot be two simple keys one after another. 
     
    791801            else: 
    792802                found = True 
     803 
     804        self.previous_line = self.current_line 
     805        self.previous_column = self.current_column 
     806        self.current_line = self.reader.line 
     807        self.current_column = self.reader.column 
    793808 
    794809    def scan_directive(self): 
     
    10541069 
    10551070        # We are done. 
    1056         return ScalarToken(u''.join(chunks), False, start_mark, end_mark) 
     1071        if folded: 
     1072            style = '>' 
     1073        else: 
     1074            style = '|' 
     1075        return ScalarToken(u''.join(chunks), False, start_mark, end_mark, 
     1076                style) 
    10571077 
    10581078    def scan_block_scalar_indicators(self, start_mark): 
     
    11551175        self.reader.forward() 
    11561176        end_mark = self.reader.get_mark() 
    1157         return ScalarToken(u''.join(chunks), False, start_mark, end_mark) 
     1177        if double: 
     1178            style = '"' 
     1179        else: 
     1180            style = '\'' 
     1181        return ScalarToken(u''.join(chunks), False, start_mark, end_mark, 
     1182                style) 
    11581183 
    11591184    ESCAPE_REPLACEMENTS = { 
     
    13061331                    or (not self.flow_level and self.reader.column < indent): 
    13071332                break 
    1308         return ScalarToken(u''.join(chunks), True, start_mark, end_mark) 
     1333        return ScalarToken(u''.join(chunks), True, start_mark, end_mark, '') 
    13091334 
    13101335    def scan_plain_spaces(self, indent, start_mark): 
Note: See TracChangeset for help on using the changeset viewer.