1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- """
- The Token class, interchangeable with ``pygments.token``.
- A `Token` has some semantics for a piece of text that is given a style through
- a :class:`~prompt_toolkit.styles.Style` class. A pygments lexer for instance,
- returns a list of (Token, text) tuples. Each fragment of text has a token
- assigned, which when combined with a style sheet, will determine the fine
- style.
- """
- # If we don't need any lexers or style classes from Pygments, we don't want
- # Pygments to be installed for only the following 10 lines of code. So, there
- # is some duplication, but this should stay compatible with Pygments.
- __all__ = (
- 'Token',
- 'ZeroWidthEscape',
- )
- class _TokenType(tuple):
- def __getattr__(self, val):
- if not val or not val[0].isupper():
- return tuple.__getattribute__(self, val)
- new = _TokenType(self + (val,))
- setattr(self, val, new)
- return new
- def __repr__(self):
- return 'Token' + (self and '.' or '') + '.'.join(self)
- # Prefer the Token class from Pygments. If Pygments is not installed, use our
- # minimalistic Token class.
- try:
- from pygments.token import Token
- except ImportError:
- Token = _TokenType()
- # Built-in tokens:
- #: `ZeroWidthEscape` can be used for raw VT escape sequences that don't
- #: cause the cursor position to move. (E.g. FinalTerm's escape sequences
- #: for shell integration.)
- ZeroWidthEscape = Token.ZeroWidthEscape
|