| """ |
| pygments.filter |
| ~~~~~~~~~~~~~~~ |
| |
| Module that implements the default filter. |
| |
| :copyright: Copyright 2006-2022 by the Pygments team, see AUTHORS. |
| :license: BSD, see LICENSE for details. |
| """ |
| |
| |
| def apply_filters(stream, filters, lexer=None): |
| """ |
| Use this method to apply an iterable of filters to |
| a stream. If lexer is given it's forwarded to the |
| filter, otherwise the filter receives `None`. |
| """ |
| def _apply(filter_, stream): |
| yield from filter_.filter(lexer, stream) |
| for filter_ in filters: |
| stream = _apply(filter_, stream) |
| return stream |
| |
| |
| def simplefilter(f): |
| """ |
| Decorator that converts a function into a filter:: |
| |
| @simplefilter |
| def lowercase(self, lexer, stream, options): |
| for ttype, value in stream: |
| yield ttype, value.lower() |
| """ |
| return type(f.__name__, (FunctionFilter,), { |
| '__module__': getattr(f, '__module__'), |
| '__doc__': f.__doc__, |
| 'function': f, |
| }) |
| |
| |
| class Filter: |
| """ |
| Default filter. Subclass this class or use the `simplefilter` |
| decorator to create own filters. |
| """ |
| |
| def __init__(self, **options): |
| self.options = options |
| |
| def filter(self, lexer, stream): |
| raise NotImplementedError() |
| |
| |
| class FunctionFilter(Filter): |
| """ |
| Abstract class used by `simplefilter` to create simple |
| function filters on the fly. The `simplefilter` decorator |
| automatically creates subclasses of this class for |
| functions passed to it. |
| """ |
| function = None |
| |
| def __init__(self, **options): |
| if not hasattr(self, 'function'): |
| raise TypeError('%r used without bound function' % |
| self.__class__.__name__) |
| Filter.__init__(self, **options) |
| |
| def filter(self, lexer, stream): |
| # pylint: disable=not-callable |
| yield from self.function(lexer, stream, self.options) |