风格¶
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 颜色。要做到这一点,请使用 ansigreen
、ansibrightred
或在 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 及其以上 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
旧的 ANSI 颜色名称已被废弃,但仍可使用。