aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/prompt-toolkit/py2/prompt_toolkit/styles/base.py
blob: d1009ba3b2a672c50ed6610313f7224f580cbb47 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
""" 
The base classes for the styling. 
""" 
from __future__ import unicode_literals 
from abc import ABCMeta, abstractmethod 
from collections import namedtuple 
from six import with_metaclass 
 
__all__ = ( 
    'Attrs', 
    'DEFAULT_ATTRS', 
    'ANSI_COLOR_NAMES', 
    'Style', 
    'DynamicStyle', 
) 
 
 
#: Style attributes. 
Attrs = namedtuple('Attrs', 'color bgcolor bold underline italic blink reverse') 
""" 
:param color: Hexadecimal string. E.g. '000000' or Ansi color name: e.g. 'ansiblue' 
:param bgcolor: Hexadecimal string. E.g. 'ffffff' or Ansi color name: e.g. 'ansired' 
:param bold: Boolean 
:param underline: Boolean 
:param italic: Boolean 
:param blink: Boolean 
:param reverse: Boolean 
""" 
 
#: The default `Attrs`. 
DEFAULT_ATTRS = Attrs(color=None, bgcolor=None, bold=False, underline=False, 
                      italic=False, blink=False, reverse=False) 
 
 
#: ``Attrs.bgcolor/fgcolor`` can be in either 'ffffff' format, or can be any of 
#: the following in case we want to take colors from the 8/16 color palette. 
#: Usually, in that case, the terminal application allows to configure the RGB 
#: values for these names. 
ANSI_COLOR_NAMES = [ 
    'ansiblack', 'ansiwhite', 'ansidefault', 
 
    # Low intensity. 
    'ansired', 'ansigreen', 'ansiyellow', 'ansiblue', 'ansifuchsia', 'ansiturquoise', 'ansilightgray', 
 
    # High intensity. (Not supported everywhere.) 
    'ansidarkgray', 'ansidarkred', 'ansidarkgreen', 'ansibrown', 'ansidarkblue', 
    'ansipurple', 'ansiteal', 
] 
 
 
class Style(with_metaclass(ABCMeta, object)): 
    """ 
    Abstract base class for prompt_toolkit styles. 
    """ 
    @abstractmethod 
    def get_attrs_for_token(self, token): 
        """ 
        Return :class:`.Attrs` for the given token. 
        """ 
 
    @abstractmethod 
    def invalidation_hash(self): 
        """ 
        Invalidation hash for the style. When this changes over time, the 
        renderer knows that something in the style changed, and that everything 
        has to be redrawn. 
        """ 
 
 
class DynamicStyle(Style): 
    """ 
    Style class that can dynamically returns an other Style. 
 
    :param get_style: Callable that returns a :class:`.Style` instance. 
    """ 
    def __init__(self, get_style): 
        self.get_style = get_style 
 
    def get_attrs_for_token(self, token): 
        style = self.get_style() 
        assert isinstance(style, Style) 
 
        return style.get_attrs_for_token(token) 
 
    def invalidation_hash(self): 
        return self.get_style().invalidation_hash()