# -*- coding: iso-8859-1 -*-
"""
    MoinMoin - Parser for vCard
    
    Python >= 2.4 is needed.

    @copyright: 2007 Rafael Weber
    @license: GNU GPL, see COPYING for details.
"""
from MoinMoin.support import vobject
from MoinMoin.parser.text_x_hcard import Parser as ParserBase

Dependencies = []

class Parser(ParserBase):
    extensions = ['.vcf', '.vcard']
    Dependencies = []

    def format(self, formatter):
        card = vobject.readOne(self.raw)

        # we must generate a dict like ``{key: (type, value)}`` to use the
        # vcard data with the `write_table` function
        data = {}
        for line in card.lines():
            if line.name == 'ADR':
                # the address must splitted into street, postal code etc.
                parts = line.value.split(';')
                sorted = {'post-office-box': parts[-7],
                        'extended-address': parts[-6],
                        'street-address': parts[-5],
                        'locality': parts[-4],
                        'region': parts[-3],
                        'postal-code': parts[-2],
                        'country-name': parts[-1]
                        }
                for k, v in sorted.items():
                    if v:
                        if line.singletonparams:
                            data[k.lower] = (line.singletonparams, v)
                        else:
                            data[k.lower()] = (v,)
            else:
                if line.singletonparams:
                    data[line.name.lower()] = (line.singletonparams, line.value)
                else:
                    data[line.name.lower()] = (line.value,)
        self.write_table(data, formatter)
