内置标记

pygments.token 模块中,有一个名为 Token 的特殊对象,用于创建标记类型。

可以通过访问 Token 的以大写字母开头的属性来创建新的标记类型。

>>> from pygments.token import Token
>>> Token.String
Token.String
>>> Token.String is Token.String
True

请注意,标记是单例,因此可以使用 is 运算符比较标记类型。

也可以使用 in 运算符执行集合测试。

>>> from pygments.token import Comment
>>> Comment.Single in Comment
True
>>> Comment in Comment.Multi
False

这在 过滤器 中以及在编写不使用基本词法分析器的自定义词法分析器时非常有用。

还可以将标记类型拆分为层次结构,并获取其父级。

>>> String.split()
[Token, Token.Literal, Token.Literal.String]
>>> String.parent
Token.Literal

原则上,可以创建无限数量的标记类型,但没人能保证样式会为标记类型定义样式规则。因此,Pygments 在 pygments.token.STANDARD_TYPES 字典中定义了一些全局标记类型。

对于某些标记,已经定义了别名。

>>> from pygments.token import String
>>> String
Token.Literal.String

pygments.token 模块中,定义了以下别名。

文本

Token.Text

用于任何类型的文本数据。

空白

Token.Text.Whitespace

用于空白。

错误

Token.Error

表示词法分析器错误。

其他

Token.Other

用于解析器未匹配的数据的特殊标记(例如 PHP 代码中的 HTML 标记)。

关键字

Token.Keyword

任何类型的关键字。

名称

Token.Name

变量/函数名称。

字面量

Token.Literal

任何字面量。

字符串

Token.Literal.String

字符串字面量。

数字

Token.Literal.Number

数字字面量。

运算符

Token.Operator

运算符 (+, not…)

标点符号

Token.Punctuation

标点符号 ([, (…)

注释

Token.Comment

任何类型的注释。

通用

Token.Generic

通用标记(请查看下面的解释)。

通常,只需使用已经定义的别名来创建标记类型。对于这些标记别名中的每一个,都存在许多子类型(不包括特殊标记 Token.TextToken.ErrorToken.Other)。

也可以将字符串转换为标记类型(例如,如果要从命令行提供标记)。

>>> from pygments.token import String, string_to_tokentype
>>> string_to_tokentype("String")
Token.Literal.String
>>> string_to_tokentype("Token.Literal.String")
Token.Literal.String
>>> string_to_tokentype(String)
Token.Literal.String

关键字标记

关键字

用于任何类型的关键字(当然,如果它不匹配任何子类型)。

Keyword.Constant

用于常量关键字(例如,将来版本的 Python 中的 None)。

Keyword.Declaration

用于变量声明的关键字(例如,某些编程语言(如 JavaScript)中的 var)。

Keyword.Namespace

用于命名空间声明的关键字(例如,Python 和 Java 中的 import 以及 Java 中的 package)。

Keyword.Pseudo

用于不是真正关键字的关键字(例如,旧版本的 Python 中的 None)。

Keyword.Reserved

用于保留关键字。

Keyword.Type

用于不能用作标识符的内置类型(例如,C 中的 intchar 等)。

名称标记

名称

用于任何名称(变量名称、函数名称、类)。

Name.Attribute

用于所有属性(例如,在 HTML 标记中)。

Name.Builtin

内置名称;在全局命名空间中可用的名称。

Name.Builtin.Pseudo

隐式内置名称(例如,Ruby 中的 self,Java 中的 this)。

Name.Class

类名称。由于没有词法分析器能够知道名称是类、函数还是其他内容,因此此标记用于类声明。

Name.Constant

用于常量的标记类型。在某些语言中,可以通过其定义方式识别标记(例如,const 关键字后面的值)。在其他语言中,常量是按定义是大写的(Ruby)。

Name.Decorator

用于装饰器的标记类型。装饰器是 Python 语言中的语法元素。C# 和 Java 中也存在类似的语法元素。

Name.Entity

用于特殊实体的标记类型。(例如,HTML 中的  )。

Name.Exception

用于异常名称的标记类型(例如,Python 中的 RuntimeError)。某些语言在函数签名中定义异常(Java)。然后,可以使用此标记突出显示该异常的名称。

Name.Function

用于函数名称的标记类型。

Name.Function.Magic

Name.Function 相同,但用于在语言中具有隐式用途的特殊函数名称(例如,Python 中的 __init__ 方法)。

Name.Label

用于标签名称的标记类型(例如,在支持 goto 的语言中)。

Name.Namespace

用于命名空间的标记类型。(例如,Java/Python 中的导入路径),在其他语言中跟随 module/namespace 关键字的名称。

Name.Other

其他名称。通常不使用。

Name.Property

偶尔用于类属性的附加标记类型。

Name.Tag

标记名称(在 HTML/XML 标记或配置文件中)。

Name.Variable

用于变量的标记类型。某些语言为变量名称使用前缀(PHP、Ruby、Perl)。可以使用此标记突出显示它们。

Name.Variable.Class

Name.Variable 相同,但用于类变量(也称为静态变量)。

Name.Variable.Global

Name.Variable 相同,但用于全局变量(例如,在 Ruby 中使用)。

Name.Variable.Instance

Name.Variable 相同,但用于实例变量。

Name.Variable.Magic

Name.Variable 相同,但用于在语言中具有隐式用途的特殊变量名称(例如,Python 中的 __doc__)。

字面量

字面量

用于任何字面量(如果未进一步定义)。

Literal.Date

用于日期字面量(例如,Boo 中的 42d)。

字符串

用于任何字符串字面量。

String.Affix

用于进一步指定其附加到的字符串类型的后缀的标记类型(例如,ru8r"foo"u8"foo" 中的前缀)。

String.Backtick

用于用反引号括起来的字符串的标记类型。

String.Char

用于单个字符的标记类型(例如,Java、C)。

String.Delimiter

用于在“heredoc”、原始字符串和其他类似字符串中分隔标识符的标记类型(例如,Perl 代码 print <<'END'; 中的单词 END)。

String.Doc

用于文档字符串的标记类型(例如,Python)。

String.Double

双引号字符串。

String.Escape

用于字符串中转义序列的标记类型。

String.Heredoc

用于“heredoc”字符串的标记类型(例如,在 Ruby 或 Perl 中)。

String.Interpol

用于字符串中插值的标记类型(例如,Ruby 中的 #{foo})。

String.Other

用于任何其他字符串的标记类型(例如,Ruby 中的 %q{foo} 字符串构造)。

String.Regex

用于正则表达式字面量的标记类型(例如,JavaScript 中的 /foo/)。

String.Single

用于单引号字符串的标记类型。

String.Symbol

用于符号的标记类型(例如,LISP 或 Ruby 中的 :foo)。

数字

用于任何数字字面量的标记类型。

Number.Bin

用于二进制字面量的标记类型(例如,0b101010)。

Number.Float

用于浮点字面量的标记类型(例如,42.0)。

Number.Hex

用于十六进制数字字面量的标记类型(例如,0xdeadbeef)。

Number.Integer

用于整数字面量的标记类型(例如,42)。

Number.Integer.Long

用于长整数字面量的标记类型(例如,Python 中的 42L)。

Number.Oct

用于八进制字面量的标记类型。

运算符

运算符

用于任何标点符号运算符(例如,+-)。

Operator.Word

用于任何作为单词的运算符(例如,not)。

标点符号

在版本 0.7 中添加。

标点符号

用于任何不是运算符的标点符号(例如,[(…)

Punctuation.Marker

用于指向位置的标记(例如,Python 追溯中用于语法错误的插入符号)。

在版本 2.10 中添加。

注释

注释

用于任何注释的标记类型。

Comment.Hashbang
用于哈希邦注释的标记类型(即以以下内容开头的文件的首行)

#!).

Comment.Multiline

用于多行注释的标记类型。

Comment.Preproc

用于预处理器注释的标记类型(也包括 <?php/<% 结构)。

Comment.PreprocFile

用于预处理器注释中的文件名的标记类型,例如 C/C++ 中的包含文件。

Comment.Single

用于在一行结束时结束的注释的标记类型(例如,# foo)。

Comment.Special

注释中的特殊数据。例如,代码标签、作者和许可信息等。

通用标记

通用标记用于像 DiffLexer 这样的特殊词法分析器,它实际上并不突出显示编程语言,而是突出显示补丁文件。

通用

一个通用的、无样式的标记。通常您不会使用这种标记类型。

Generic.Deleted

将标记值标记为已删除。

Generic.Emph

将标记值标记为强调。

Generic.Error

将标记值标记为错误消息。

Generic.Heading

将标记值标记为标题。

Generic.Inserted

将标记值标记为插入。

Generic.Output

将标记值标记为程序输出(例如,用于 python cli 词法分析器)。

Generic.Prompt

将标记值标记为命令提示符(例如,bash 词法分析器)。

Generic.Strong

将标记值标记为粗体(例如,用于 rst 词法分析器)。

Generic.EmphStrong

将标记值标记为粗体和强调。

Generic.Subheading

将标记值标记为副标题。

Generic.Traceback

将标记值标记为错误回溯的一部分。