Spaces:
Sleeping
Sleeping
""" | |
Adaptor for building prompt_toolkit styles, starting from a Pygments style. | |
Usage:: | |
from pygments.styles.tango import TangoStyle | |
style = style_from_pygments_cls(pygments_style_cls=TangoStyle) | |
""" | |
from __future__ import annotations | |
from typing import TYPE_CHECKING | |
from .style import Style | |
if TYPE_CHECKING: | |
from pygments.style import Style as PygmentsStyle | |
from pygments.token import Token | |
__all__ = [ | |
"style_from_pygments_cls", | |
"style_from_pygments_dict", | |
"pygments_token_to_classname", | |
] | |
def style_from_pygments_cls(pygments_style_cls: type[PygmentsStyle]) -> Style: | |
""" | |
Shortcut to create a :class:`.Style` instance from a Pygments style class | |
and a style dictionary. | |
Example:: | |
from prompt_toolkit.styles.from_pygments import style_from_pygments_cls | |
from pygments.styles import get_style_by_name | |
style = style_from_pygments_cls(get_style_by_name('monokai')) | |
:param pygments_style_cls: Pygments style class to start from. | |
""" | |
# Import inline. | |
from pygments.style import Style as PygmentsStyle | |
assert issubclass(pygments_style_cls, PygmentsStyle) | |
return style_from_pygments_dict(pygments_style_cls.styles) | |
def style_from_pygments_dict(pygments_dict: dict[Token, str]) -> Style: | |
""" | |
Create a :class:`.Style` instance from a Pygments style dictionary. | |
(One that maps Token objects to style strings.) | |
""" | |
pygments_style = [] | |
for token, style in pygments_dict.items(): | |
pygments_style.append((pygments_token_to_classname(token), style)) | |
return Style(pygments_style) | |
def pygments_token_to_classname(token: Token) -> str: | |
""" | |
Turn e.g. `Token.Name.Exception` into `'pygments.name.exception'`. | |
(Our Pygments lexer will also turn the tokens that pygments produces in a | |
prompt_toolkit list of fragments that match these styling rules.) | |
""" | |
parts = ("pygments",) + token | |
return ".".join(parts).lower() | |