summaryrefslogtreecommitdiff
path: root/doc/docs/styles.rst
blob: 90d9116eb2836820c43958398d4686b5c64e45b0 (plain)
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
.. -*- mode: rst -*-

======
Styles
======

Pygments comes with :doc:`some builtin styles </styles/>` that work for both the
HTML and LaTeX formatter.

The builtin styles can be looked up with the `get_style_by_name` function:

.. sourcecode:: pycon

    >>> from pygments.styles import get_style_by_name
    >>> get_style_by_name('colorful')
    <class 'pygments.styles.colorful.ColorfulStyle'>

You can pass a instance of a `Style` class to a formatter as the `style`
option in form of a string:

.. sourcecode:: pycon

    >>> from pygments.styles import get_style_by_name
    >>> from pygments.formatters import HtmlFormatter
    >>> HtmlFormatter(style='colorful').style
    <class 'pygments.styles.colorful.ColorfulStyle'>

Or you can also import your own style (which must be a subclass of
`pygments.style.Style`) and pass it to the formatter:

.. sourcecode:: pycon

    >>> from yourapp.yourmodule import YourStyle
    >>> from pygments.formatters import HtmlFormatter
    >>> HtmlFormatter(style=YourStyle).style
    <class 'yourapp.yourmodule.YourStyle'>


Creating Own Styles
===================

See :doc:`styledevelopment`.


Builtin Styles
==============

Pygments ships some builtin styles which are maintained by the Pygments team.

To get a list of known styles you can use this snippet:

.. sourcecode:: pycon

    >>> from pygments.styles import STYLE_MAP
    >>> STYLE_MAP.keys()
    ['default', 'emacs', 'friendly', 'colorful']


Getting a list of available styles
==================================

.. versionadded:: 0.6

Because it could be that a plugin registered a style, there is
a way to iterate over all styles:

.. sourcecode:: pycon

    >>> from pygments.styles import get_all_styles
    >>> styles = list(get_all_styles())


.. _AnsiTerminalStyle:

Terminal Styles
===============

.. versionadded:: 2.2

Custom styles used with the 256-color terminal formatter can also map colors to
use the 8 default ANSI colors.  To do so, use ``ansigreen``, ``ansibrightred`` or
any other colors defined in :data:`pygments.style.ansicolors`.  Foreground ANSI
colors will be mapped to the corresponding `escape codes 30 to 37
<https://en.wikipedia.org/wiki/ANSI_escape_code#Colors>`_ thus respecting any
custom color mapping and themes provided by many terminal emulators.  Light
variants are treated as foreground color with and an added bold flag.
``bg:ansi<color>`` will also be respected, except the light variant will be the
same shade as their dark variant.

See the following example where the color of the string ``"hello world"`` is
governed by the escape sequence ``\x1b[34;01m`` (Ansi bright blue, Bold, 41 being red
background) instead of an extended foreground & background color.

.. sourcecode:: pycon

    >>> from pygments import highlight
    >>> from pygments.style import Style
    >>> from pygments.token import Token
    >>> from pygments.lexers import Python3Lexer
    >>> from pygments.formatters import Terminal256Formatter

    >>> class MyStyle(Style):
            styles = {
                Token.String:     'ansibrightblue bg:ansibrightred',
            }

    >>> code = 'print("Hello World")'
    >>> result = highlight(code, Python3Lexer(), Terminal256Formatter(style=MyStyle))
    >>> print(result.encode())
    b'\x1b[34;41;01m"\x1b[39;49;00m\x1b[34;41;01mHello World\x1b[39;49;00m\x1b[34;41;01m"\x1b[39;49;00m'

Colors specified using ``ansi*`` are converted to a default set of RGB colors
when used with formatters other than the terminal-256 formatter.

By definition of ANSI, the following colors are considered "light" colors, and
will be rendered by most terminals as bold:

- "brightblack" (darkgrey), "brightred", "brightgreen", "brightyellow", "brightblue",
  "brightmagenta", "brightcyan", "white"

The following are considered "dark" colors and will be rendered as non-bold:

- "black", "red", "green", "yellow", "blue", "magenta", "cyan",
  "gray"

Exact behavior might depends on the terminal emulator you are using, and its
settings.

.. _new-ansi-color-names:

.. versionchanged:: 2.4

The definition of the ANSI color names has changed.
New names are easier to understand and align to the colors used in other projects.

===================== ====================
New names             Pygments up to 2.3
===================== ====================
``ansiblack``         ``#ansiblack``
``ansired``           ``#ansidarkred``
``ansigreen``         ``#ansidarkgreen``
``ansiyellow``        ``#ansibrown``
``ansiblue``          ``#ansidarkblue``
``ansimagenta``       ``#ansipurple``
``ansicyan``          ``#ansiteal``
``ansigray``          ``#ansilightgray``
``ansibrightblack``   ``#ansidarkgray``
``ansibrightred``     ``#ansired``
``ansibrightgreen``   ``#ansigreen``
``ansibrightyellow``  ``#ansiyellow``
``ansibrightblue``    ``#ansiblue``
``ansibrightmagenta`` ``#ansifuchsia``
``ansibrightcyan``    ``#ansiturquoise``
``ansiwhite``         ``#ansiwhite``
===================== ====================

Old ANSI color names are deprecated but will still work.