# -*- coding: iso-8859-1 -*-
"""
    MoinMoin - Parser for TODO lists

    @version: 0.2
    @copyright: 2005 by Julián Romero <julian.romero@gmail.com>
    @license: GNU GPL

    Usage:

    {{{#!todo
    < > pending task
    </> task in progress
    <x> task done
    <~> task can be considered done
    <!> task cancelled
    }}}

    Optional: add some styling

    [[CSS(TodoStyle)]]

"""

import re

Dependencies = []

class Parser:
    """ Format TODO lists
    """

    Dependencies = []
    img_base = "/chrome/todo"
    img_ext  = "png"

    def __init__(self, raw, request, **kw):
        """ Store the source text.
        """
        self.raw = raw
        self.request = request
        self.form = request.form
        self._ = request.getText
        self.items = { 'x': 'done', 'X':'done','~':'pass','!':'cancel', '/':'progress', ' ':'pending' }

    def format(self, formatter):
        """ Parse and send the list
        """


        status_re = re.compile( r'^\s*<([ xX!\/~])>([ \d\-\/\.\:]*) (.+)$' )
        date_re   = re.compile( r'.*(\d{4}[\-\/]\d{2}[\-\/]\d{2})' )
        time_re   = re.compile( r'.*(\d{2}[\.\:]\d{2})' )

        lines = self.raw.split('\n')

        self.request.write(formatter.span(True,attr={'class':'todo-item'}))
        for line in lines:

            todo_status = None
            todo_date = None
            todo_time = None
            todo_line = None
            todo_date_out = ''
            todo_time_out = ''

            ms = status_re.match(line)
            if ms:
                todo_status = ms.group(1)
                todo_line = ms.group(3)
                md = date_re.match(line)
                if md:
                    todo_date = md.group(1)
                mt = time_re.match(line)
                if mt:
                    todo_time = mt.group(1)
                if todo_date:
                    todo_date_out = '<span class="todo-date">%s</span>' % todo_date
                if todo_time:
                    todo_time_out = '<span class="todo-hour">%s</span>' % todo_time
		self.request.write( '<div class="todo"><div class="todo-%s"><img class="todo" src="%s/todo-%s.%s" border="0">%s %s <span class="todo-%s">%s</span></div></div>\n' % (self.items[todo_status],self.img_base,self.items[todo_status],self.img_ext,todo_date_out,todo_time_out,self.items[todo_status],todo_line) )
            else:
                self.request.write(formatter.span(True, attr={'class':'todo-comment'}) )
                self.request.write(line)
                self.request.write(formatter.span(False))
        self.request.write(formatter.span(False))

