# -*- coding: iso-8859-1 -*-
"""
    MoinMoin - Parser for CSV data

    This parsers works like CSV parser, but with the possibility 
    to define colors for a zebra striped tables.
    
    It it a simple modification from CSV parser 
    written by Oliver Graf and Alexander Schremmer


    @copyright: 2010 Ulysses Almeida <ulysses.almeida@gmail.com>
    @license: GNU GPL, see COPYING for details.
"""

Dependencies = []


class Parser:
    """ Format CSV data as table
    """

    parsername = "CSVStripes"
    extensions = ['.csv']
    Dependencies = []

    def __init__(self, raw, request, **kw):
        """ Store the source text.
        """
        self.raw = raw
        self.request = request
        self.form = request.form
        self._ = request.getText
        self.color_odd=None
        self.color_even=None

        # parse extra arguments for excludes
        self.exclude = []
        self.separator = ';'
        for arg in kw.get('format_args', '').split():
            if arg[0] == '-':
                try:
                    idx = int(arg[1:])
                except ValueError:
                    pass
                else:
                    self.exclude.append(idx-1)
            elif arg[0] == "#":
                if not self.color_odd:
                    self.color_odd = arg
                elif not self.color_even:
                    self.color_even = arg
            else:
                self.separator = arg
        
        if not self.color_odd:
            self.color_odd="#FFFFFF"
        if not self.color_even:
            self.color_even="#DDDDDD"

    def format(self, formatter):
        """ Parse and send the table.
        """
        lines = self.raw.split('\n')
        if lines[0]:
            # expect column headers in first line
            first = 1
        else:
            # empty first line, no bold headers
            first = 0
            del lines[0]

        self.request.write(formatter.table(1))
        i=0
        for line in lines:
            if first:
                self.request.write(formatter.table_row(1))
            elif i%2:
                self.request.write(formatter.table_row(1,style='background-color: %s' % (self.color_odd)))
            else:
                self.request.write(formatter.table_row(1,style='background-color: %s' % (self.color_even)))
            cells = line.split(self.separator)
            for idx in range(len(cells)):
                if idx in self.exclude:
                    continue
                self.request.write(formatter.table_cell(1))
                if first:
                    self.request.write(formatter.strong(1))
                self.request.write(formatter.text(cells[idx]))
                if first:
                    self.request.write(formatter.strong(0))
                self.request.write(formatter.table_cell(0))
            self.request.write(formatter.table_row(0))
            first = 0
            i+=1
        self.request.write(formatter.table(0))



