樣式

Pygments 內建一些樣式,可用於 HTML 和 LaTeX 格式化器。

可以使用 get_style_by_name 函式查詢內建樣式

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

您可以將 Style 類別的實例以字串形式,作為 style 選項傳遞給格式化器

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

或者您也可以匯入自己的樣式(必須是 pygments.style.Style 的子類別)並將其傳遞給格式化器

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

建立自己的樣式

請參閱 撰寫您自己的樣式

內建樣式

Pygments 提供一些由 Pygments 團隊維護的內建樣式。

要取得已知樣式的列表,您可以使用此程式碼片段

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

取得可用樣式列表

在 0.6 版本中新增。

因為可能有一個外掛程式註冊了一個樣式,所以有一種方法可以遍歷所有樣式

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

終端機樣式

在 2.2 版本中新增。

用於 256 色終端格式化器的自訂樣式也可以將顏色映射到 8 種預設的 ANSI 顏色。若要這樣做,請使用 ansigreenansibrightredpygments.style.ansicolors 中定義的任何其他顏色。前景 ANSI 顏色將會被映射到對應的跳脫碼 30 到 37,因此會遵守許多終端模擬器提供的任何自訂顏色映射和主題。淺色變體會被視為前景顏色,並添加粗體標記。bg:ansi<color> 也會被遵守,但淺色變體會與其深色變體相同。

請參閱以下範例,其中字串 "hello world" 的顏色由跳脫序列 \x1b[34;01m 控制(Ansi 亮藍色、粗體,41 為紅色背景),而不是擴展的前景和背景顏色。

>>> 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'

使用 ansi* 指定的顏色,在使用非 terminal-256 格式化器的情況下,會轉換為一組預設的 RGB 顏色。

根據 ANSI 的定義,以下顏色被視為「淺色」,並且會被大多數終端機以粗體呈現

  • “brightblack”(深灰色)、“brightred”、“brightgreen”、“brightyellow”、“brightblue”、“brightmagenta”、“brightcyan”、“white”

以下顏色被視為「深色」,並且會以非粗體呈現

  • “black”、“red”、“green”、“yellow”、“blue”、“magenta”、“cyan”、“gray”

確切的行為可能取決於您使用的終端模擬器及其設定。

在 2.4 版本中變更。

ANSI 顏色名稱的定義已變更。新的名稱更容易理解,並且與其他專案中使用的顏色一致。

新的名稱

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

舊的 ANSI 顏色名稱已棄用,但仍然可以使用。