# -*- coding: utf-8 mode: python -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8

__all__ = ('Format',)

import re

class Format(object):
    RE_SPACES = re.compile(r'\s+')
    RE_NUMBERS = re.compile(r'\d+')
    RE_ONLY_NUMBERS = re.compile(r'\d+$')

    def parse(self, s):
        u"""Parser la chaine s et retourner un objet particulier.

        @return: un objet
        @raise ValueError: si l'objet est de format incorrect
        """
        raise NotImplementedError

    def matches(self, s):
        u"""Vérifier que s est dans le bon format

        @rtype: bool
        """
        try:
            self.parse(s)
            return True
        except ValueError:
            return False

    def format(self, o):
        u"""Formater un objet pour affichage.

        Il est requis que o soit un objet dans le bon format, tel qu'il est
        retourné par la méthode parse().

        @return: la chaine pour affichage
        @rtype: basestring
        """
        raise NotImplementedError
