1from typing import Optional
2
3
4class Style(object):
5    """
6    A formatter style.
7    """
8
9    def __init__(self, tag=None):  # type: (Optional[str]) -> None
10        self._tag = tag
11        self._fg_color = None
12        self._bg_color = None
13        self._bold = False
14        self._underlined = False
15        self._italic = False
16        self._dark = False
17        self._blinking = False
18        self._inverse = False
19        self._hidden = False
20
21    @property
22    def tag(self):  # type: () -> Optional[str]
23        return self._tag
24
25    @property
26    def foreground_color(self):  # type: () -> str
27        return self._fg_color
28
29    @property
30    def background_color(self):  # type: () -> str
31        return self._bg_color
32
33    def fg(self, color):  # type: (str) -> Style
34        """
35        Sets the foreground color.
36        """
37        self._fg_color = color
38
39        return self
40
41    def bg(self, color):  # type: (str) -> Style
42        """
43        Sets the background color.
44        """
45        self._bg_color = color
46
47        return self
48
49    def bold(self, bold=True):  # type: (bool) -> Style
50        """
51        Sets or unsets the font weight to bold.
52        """
53        self._bold = bold
54
55        return self
56
57    def underlined(self, underlined=True):  # type: (bool) -> Style
58        """
59        Enables or disables underlining.
60        """
61        self._underlined = underlined
62
63        return self
64
65    def italic(self, italic=True):  # type: (bool) -> Style
66        """
67        Enables or disables italic
68        """
69        self._italic = italic
70
71        return self
72
73    def dark(self, dark=True):  # type: (bool) -> Style
74        """
75        Enables or disables dark
76        """
77        self._dark = dark
78
79        return self
80
81    def blinking(self, blinking=True):  # type: (bool) -> Style
82        """
83        Enables or disables blinking.
84        """
85        self._blinking = blinking
86
87        return self
88
89    def inverse(self, inverse=True):  # type: (bool) -> Style
90        """
91        Enables or disables inverse colors.
92        """
93        self._inverse = inverse
94
95        return self
96
97    def hidden(self, hidden=True):  # type: (bool) -> Style
98        """
99        Hides or shows the text.
100        """
101        self._hidden = hidden
102
103        return self
104
105    def is_bold(self):  # type: () -> bool
106        return self._bold
107
108    def is_underlined(self):  # type: () -> bool
109        return self._underlined
110
111    def is_italic(self):  # type: () -> bool
112        return self._italic
113
114    def is_dark(self):  # type: () -> bool
115        return self._dark
116
117    def is_blinking(self):  # type: () -> bool
118        return self._blinking
119
120    def is_inverse(self):  # type: () -> bool
121        return self._inverse
122
123    def is_hidden(self):  # type: () -> bool
124        return self._hidden
125