风格

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

创建自己的风格

参阅 Creating Own Styles

内建风格

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 颜色。要做到这一点,请使用 ansigreenansibrightred 或在 pygments.style.ansicolors 中定义的任何其他颜色。前景 ANSI 颜色将被映射到相应的 escape codes 30 to 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* 指定的颜色在与终端 256 格式以外的格式化器一起使用时,会被转换为一组默认的 RGB 颜色。

根据 ANSI 的定义,以下颜色被认为是 “light” 色,并将被大多数终端呈现为粗体:

  • “brightblack” (darkgrey), “brightred”, “brightgreen”, “brightyellow”, “brightblue”, “brightmagenta”, “brightcyan”, “white”

以下是被认为是 “dark” 的颜色,将被呈现为非粗体:

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

确切的行为可能取决于你所使用的终端仿真器及其设置。

在 2.4 版更改.

ANSI 颜色名称的定义已经改变。新的名称更容易理解,并与其他项目中使用的颜色一致”

新名称

Pygments 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 颜色名称已被废弃,但仍可使用。