Ticket #94: flowed.diff

File flowed.diff, 2.0 KB (added by ben@…, 13 years ago)
  • /

    old new  
    218218                else:
    219219                        self.VERBATIM_FORMAT = 1
    220220
     221                if parameters.has_key('reflow'):
     222                        self.REFLOW = int(parameter['reflow'])
     223                else:
     224                        self.REFLOW = 1
     225
    221226                if parameters.has_key('strip_signature'):
    222227                        self.STRIP_SIGNATURE = int(parameters['strip_signature'])
    223228                else:
     
    859864
    860865                return ('\n'.join(body))
    861866
     867        def reflow(self, text, delsp = 0):
     868                """
     869                Reflow the message based on the format="flowed" specification (RFC 3676)
     870                """
     871                flowedlines = []
     872                quotelevel = 0
     873                prevflowed = 0
     874
     875                for line in text.splitlines():
     876                        from re import match
     877                       
     878                        # Figure out the quote level and the content of the current line
     879                        m = match('(>*)( ?)(.*)', line)
     880                        linequotelevel = len(m.group(1))
     881                        line = m.group(3)
     882
     883                        # Determine whether this line is flowed
     884                        if line and line != '-- ' and line[-1] == ' ':
     885                                flowed = 1
     886                        else:
     887                                flowed = 0
     888
     889                        if flowed and delsp and line and line[-1] == ' ':
     890                                line = line[:-1]
     891
     892                        # If the previous line is flowed, append this line to it
     893                        if prevflowed and line != '-- ' and linequotelevel == quotelevel:
     894                                flowedlines[-1] += line
     895                        # Otherwise, start a new line
     896                        else:
     897                                flowedlines.append('>' * linequotelevel + line)
     898
     899                        prevflowed = flowed
     900                       
     901
     902                return '\n'.join(flowedlines)
     903
    862904        def strip_quotes(self, text):
    863905                """
    864906                Strip quotes from message by Nicolas Mendoza
     
    917959                                body_text = part.get_payload(decode=1)
    918960                                if not body_text:                       
    919961                                        body_text = part.get_payload(decode=0)
     962
     963                                format = email.Utils.collapse_rfc2231_value(part.get_param('Format')).lower()
     964                                delsp = email.Utils.collapse_rfc2231_value(part.get_param('DelSp')).lower()
     965
     966                                if self.REFLOW and not self.VERBATIM_FORMAT and format == 'flowed':
     967                                        body_text = self.reflow(body_text, delsp == 'yes')
    920968       
    921969                                if self.STRIP_SIGNATURE:
    922970                                        body_text = self.strip_signature(body_text)