内置标记¶
在 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 |
运算符 ( |
标点符号 |
Token.Punctuation |
标点符号 ( |
注释 |
Token.Comment |
任何类型的注释。 |
通用 |
Token.Generic |
通用标记(请查看下面的解释)。 |
通常,只需使用已经定义的别名来创建标记类型。对于这些标记别名中的每一个,都存在许多子类型(不包括特殊标记 Token.Text,Token.Error 和 Token.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 中的
int
、char
等)。
名称标记¶
- 名称
用于任何名称(变量名称、函数名称、类)。
- 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
用于进一步指定其附加到的字符串类型的后缀的标记类型(例如,
r
和u8
在r"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 中添加。
通用标记¶
通用标记用于像 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
将标记值标记为错误回溯的一部分。
注释¶
用于任何注释的标记类型。
#!
).用于多行注释的标记类型。
用于预处理器注释的标记类型(也包括
<?php
/<%
结构)。用于预处理器注释中的文件名的标记类型,例如 C/C++ 中的包含文件。
用于在一行结束时结束的注释的标记类型(例如,
# foo
)。注释中的特殊数据。例如,代码标签、作者和许可信息等。