样式

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* 指定的颜色在与除终端-256 格式化程序之外的格式化程序一起使用时,将转换为默认的 RGB 颜色集。

根据 ANSI 的定义,以下颜色被视为“亮”颜色,大多数终端将以粗体形式呈现

  • “亮黑色”(深灰色)、“亮红色”、“亮绿色”、“亮黄色”、“亮蓝色”、“亮洋红色”、“亮青色”、“白色”

以下颜色被视为“暗”颜色,将以非粗体形式呈现

  • “黑色”、“红色”、“绿色”、“黄色”、“蓝色”、“洋红色”、“青色”、“灰色”

确切的行为可能取决于您使用的终端模拟器及其设置。

在版本 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 颜色名称已弃用,但仍然可以使用。