Generated: Wed 2012-04-11 05:19 CDT
Source file: /home/buechler/Sites/django-markupmirror/markupmirror/markup/base.py
Stats: 37 executed, 0 missed, 2 excluded, 59 ignored
from django.utils.encoding import force_unicodefrom markupmirror.exceptions import *class BaseMarkup(object): """Basic interface for markup converter classes. """ codemirror_mode = '' title = "" @classmethod def get_name(cls): """Returns lowercase markup name, without the "Markup" part.""" return cls.__name__.replace("Markup", "", 1).lower() def before_convert(self, markup): """Called before ``convert``.""" return markup def after_convert(self, markup): """``Called after ``convert``.""" return markup def convert(self, markup): """Main conversion method. Use third-pary libraries here.""" return markup def __call__(self, markup): """Main entry point. Calls ``before_convert``, ``convert`` and ``after_convert`` in that order. """ return force_unicode( self.after_convert(self.convert(self.before_convert(markup))))class MarkupPool(object): """Pool for markup converters. Each markup class, subclassing ``markupmirror.markup.base.BaseMarkup``, must register to this pool using ``register_markup`` defined below. """ def __init__(self): self.markups = {} def register_markup(self, markup): """Registers a markup converter class. ``markup`` must be a subclass of ``BaseMarkup`` and may not be registered already. """ # check for correct subclassing if not issubclass(markup, BaseMarkup): raise InvalidMarkup( "Markups must be subclasses of " "markupmirror.markup.base.BaseMarkup. %r is not." % markup) markup_name = markup.get_name() self.markups[markup_name] = markup() def unregister_markup(self, markup_name): """Unregisters a markup converter with the name ``markup_name``. Fails silently if no converter was registered by that name. """ if markup_name in self.markups: del self.markups[markup_name] def has_markup(self, name): return name in self.markups def get_markup(self, name): """Returns one markup converter by name. Raises ``KeyError`` if no converter was registered by ``name``. """ return self.markups[name] def __contains__(self, key): return self.has_markup(key) def __getitem__(self, key): return self.get_markup(key) def __delitem__(self, key): self.unregister_markup(key)markup_pool = MarkupPool()register_markup = markup_pool.register_markup__all__ = ('markup_pool', 'register_markup', 'BaseMarkup')