# -*- coding: utf-8 -*-
"""
    jinja exceptions
"""

class SilentVariableFailure(Exception):
    pass


class VariableDoesNotExist(Exception):
    pass


class TemplateCharsetError(Exception):
    def __init__(self, msg, exc):
        Exception.__init__(self, msg)
        self._msg = msg
        self._exc = exc

    def __str__(self):
        return '%s:\n%s' % (self._msg, self._exc)

    def __repr__(self):
        return '%s:\n%r' % (self._msg, self._exc)


class TemplateSyntaxError(Exception):
    pass


class TemplateRuntimeError(Exception):
    pass


class TemplateDoesNotExist(Exception):
    pass


class ContextPopException(Exception):
    pass


class TagLexerError(ValueError):

    def __init__(self, msg, pos, databuf):
        from jinja.tagparser import ERROR_KEEP
        ValueError.__init__(self, msg)
        self._msg = msg
        self._data = ''.join(databuf)[max(0, pos - ERROR_KEEP):pos + ERROR_KEEP]
        self._datapos = min(pos, max(0, pos - ERROR_KEEP) + ERROR_KEEP)
        self._pos = pos + 1

    def __str__(self):
        return '%s at %s.' % (self._msg, self._pos)

    def __repr__(self):
        return '<%s: %s at %s>' % (self.__class__.__name__,
                                   self._msg, self._pos)



syntax highlighted by Code2HTML, v. 0.9.1