# -*- coding: iso-8859-1 -*-
"""
    MoinMoin - Lotus Notes Parser

    @copyright: 2006 by Bryan Tsai
    @license: GNU GPL, see COPYING for details.
"""

import re
from MoinMoin.parser import wiki

STYLE  = 'margin-top: 2px; color:black; background-color:%s; '\
         'border: solid black 1px'
COLOR  = 'white'

class Parser:
    """
        Parse notes mail and enclose all headers into boxes.
    """
    def __init__(self, raw, request, **kw):
        self.raw = raw
        self.request = request
        self.form = request.form
        self._ = request.getText
        self.out = kw.get('out', request)

    def format(self, formatter):
        self.parse(self.raw, formatter)

    def wikify(self, txt, formatter):
        wikiizer = wiki.Parser(txt, self.request) 
        wikiizer.format(formatter)
    
    def parse(self, txt, formatter):
        if (0 == len(txt)):
            return
        
        html = ""
        match = re.search(r"^(from:?\s+?)?(.*)$\s+?^(sent:?\s*)?(.*)$\s+?^to:?\s+?(.*)$\s+?^(cc:?\s+?(.*)$\s+?)?^subject:?\s+?(.*)$", txt, re.IGNORECASE | re.MULTILINE)
        if match:
            if (-1 == match.start(1)):
                pre_content = match.string[0:match.start(2)]
            else:
                pre_content = match.string[0:match.start(1)]
            from1 = match.group(2)
            date = match.group(4)
            to = match.group(5)
            if (-1 != match.start(6)) and (-1 != match.start(7)):
                cc = match.group(7)
            else:
                cc = ''
            subject = match.group(8)
            content = match.string[match.end(8):]
        else:
            return self.wikify(txt, formatter)
        
        self.wikify(pre_content, formatter)
        
        html = '<br />'\
               '<fieldset style="%s">'\
               '<legend style="%s">%s</legend>'\
               'From: %s<br />'\
               'To: %s<br />' % (STYLE, 
                                 STYLE, 
                                 date, 
                                 from1.replace("<", "&lt;"), 
                                 to.replace("<", "&lt;"))
        
        if (0 < len(cc)):
            html += 'Cc: %s<br />' % cc.replace("<", "&lt;")
        
        html += 'Subject: %s<br />'\
                '</fieldset><br />' % (subject)
        
        self.out.write(html)
        
        self.parse(content, formatter)
