Ignore:
Timestamp:
12/27/08 14:10:31 (5 years ago)
Author:
xi
Message:

Emit an explicit document end indicator when there is a possibility of ambiguous parsing.

File:
1 edited

Legend:

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

    r308 r313  
    7777        self.indention = True 
    7878 
     79        # Whether the document requires an explicit document indicator 
     80        self.open_ended = False 
     81 
    7982        # Formatting details. 
    8083        self.canonical = canonical 
     
    170173    def expect_document_start(self, first=False): 
    171174        if isinstance(self.event, DocumentStartEvent): 
     175            if (self.event.version or self.event.tags) and self.open_ended: 
     176                self.write_indicator(u'...', True) 
     177                self.write_indent() 
    172178            if self.event.version: 
    173179                version_text = self.prepare_version(self.event.version) 
     
    193199            self.state = self.expect_document_root 
    194200        elif isinstance(self.event, StreamEndEvent): 
     201            if self.open_ended: 
     202                self.write_indicator(u'...', True) 
     203                self.write_indent() 
    195204            self.write_stream_end() 
    196205            self.state = self.expect_nothing 
     
    793802        self.indention = self.indention and indention 
    794803        self.column += len(data) 
     804        self.open_ended = False 
    795805        if self.encoding: 
    796806            data = data.encode(self.encoding) 
     
    977987        hints = self.determine_block_hints(text) 
    978988        self.write_indicator(u'>'+hints, True) 
     989        if hints[-1:] == u'+': 
     990            self.open_ended = True 
    979991        self.write_line_break() 
    980992        leading_space = True 
     
    10261038 
    10271039    def write_literal(self, text): 
    1028         chomp = self.determine_block_hints(text) 
    1029         self.write_indicator(u'|'+chomp, True) 
     1040        hints = self.determine_block_hints(text) 
     1041        self.write_indicator(u'|'+hints, True) 
     1042        if hints[-1:] == u'+': 
     1043            self.open_ended = True 
    10301044        self.write_line_break() 
    10311045        breaks = True 
     
    10591073 
    10601074    def write_plain(self, text, split=True): 
     1075        if self.root_context: 
     1076            self.open_ended = True 
    10611077        if not text: 
    10621078            return 
Note: See TracChangeset for help on using the changeset viewer.