4370: Reports in ODT format are corrupted
svn: r16210
This commit is contained in:
		@@ -344,17 +344,37 @@ class DocBackend(object):
 | 
			
		||||
                for opentag in opentags:
 | 
			
		||||
                    otext += opentag[0]
 | 
			
		||||
            start = pos
 | 
			
		||||
        #add remainder of text, no markup present there
 | 
			
		||||
        otext += self.ESCAPE_FUNC()(text[start:end])
 | 
			
		||||
 | 
			
		||||
        #opentags should be empty. If not, user gave tags on positions that 
 | 
			
		||||
        # are over the end of the text. Just close the tags still open
 | 
			
		||||
        #add remainder of text, no markup present there if all is correct
 | 
			
		||||
        if opentags:
 | 
			
		||||
            # a problem, we don't have a closing tag left but there are open
 | 
			
		||||
            # tags. Just keep them up to end of text
 | 
			
		||||
            pos = len(text)
 | 
			
		||||
            print 'WARNING: DocBackend : More style tags in text than length '\
 | 
			
		||||
                    'of text allows.\n', opentags
 | 
			
		||||
            if pos > start:
 | 
			
		||||
                if split:
 | 
			
		||||
                    #make sure text can split
 | 
			
		||||
                    splitpos = text[start:pos].find(split)
 | 
			
		||||
                    while splitpos != -1:
 | 
			
		||||
                        otext += self.ESCAPE_FUNC()(text[start:start+splitpos])
 | 
			
		||||
                        #close open tags
 | 
			
		||||
                        for opentag in reversed(opentags):
 | 
			
		||||
                            otext += opentag[1]
 | 
			
		||||
                        #add split text
 | 
			
		||||
                        otext += self.ESCAPE_FUNC()(split)
 | 
			
		||||
                        #open the tags again
 | 
			
		||||
                        for opentag in opentags:
 | 
			
		||||
                            otext += opentag[0]
 | 
			
		||||
                        #obtain new values
 | 
			
		||||
                        start = start + splitpos + lensplit
 | 
			
		||||
                        splitpos = text[start:pos].find(split)
 | 
			
		||||
                    
 | 
			
		||||
                otext += self.ESCAPE_FUNC()(text[start:pos])
 | 
			
		||||
            for opentag in reversed(opentags):
 | 
			
		||||
                otext += opentag[1]
 | 
			
		||||
        
 | 
			
		||||
        else:
 | 
			
		||||
            otext += self.ESCAPE_FUNC()(text[start:end])
 | 
			
		||||
 | 
			
		||||
        return otext
 | 
			
		||||
 | 
			
		||||
    def format_link(self, value):
 | 
			
		||||
 
 | 
			
		||||
@@ -1390,9 +1390,6 @@ class ODFDoc(BaseDoc, TextDoc, DrawDoc):
 | 
			
		||||
        """
 | 
			
		||||
        text = str(styledtext)
 | 
			
		||||
        s_tags = styledtext.get_tags()
 | 
			
		||||
        text = text.replace('&', '\1') # must be the first
 | 
			
		||||
        text = text.replace('<', '\2')
 | 
			
		||||
        text = text.replace('>', '\3')
 | 
			
		||||
        markuptext = self._backend.add_markup_from_styled(text, s_tags, '\n')
 | 
			
		||||
        # we need to know if we have new styles to add.
 | 
			
		||||
        # if markuptext contains : FontColor, FontFace, FontSize ...
 | 
			
		||||
@@ -1411,9 +1408,6 @@ class ODFDoc(BaseDoc, TextDoc, DrawDoc):
 | 
			
		||||
            start = m.end()
 | 
			
		||||
        linenb = 1
 | 
			
		||||
        self.start_paragraph(style_name)
 | 
			
		||||
        markuptext = markuptext.replace('\1', '&') # must be the first
 | 
			
		||||
        markuptext = markuptext.replace('\2', '<')
 | 
			
		||||
        markuptext = markuptext.replace('\3', '>')
 | 
			
		||||
        for line in markuptext.split('\n'):
 | 
			
		||||
            [line, sigcount] = process_spaces(line, format)
 | 
			
		||||
            if sigcount == 0:
 | 
			
		||||
 
 | 
			
		||||
@@ -61,7 +61,13 @@ LOG = logging.getLogger(".odfbackend.py")
 | 
			
		||||
 | 
			
		||||
def _escape(string):
 | 
			
		||||
    """ a write to the file
 | 
			
		||||
    """"""
 | 
			
		||||
    change text in text that latex shows correctly
 | 
			
		||||
    special characters: & < and >
 | 
			
		||||
    """
 | 
			
		||||
    string = string.replace('&', '&') # must be the first
 | 
			
		||||
    string = string.replace('<', '<')
 | 
			
		||||
    string = string.replace('>', '>')
 | 
			
		||||
    return string
 | 
			
		||||
 | 
			
		||||
class OdfBackend(DocBackend):
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user