內建符號

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 中的 import 路徑),其他語言中 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"foo"u8"foo" 中的前置詞 ru8)。

String.Backtick

以反引號括住的字串的符號類型。

String.Char

適用於單一字元的符號類型(例如,Java、C)。

String.Delimiter

用於分隔「here 文件」、原始字串和其他類似字串中的識別碼的符號類型(例如,Perl 程式碼 print <<'END'; 中的單字 END)。

String.Doc

適用於文件字串的符號類型(例如,Python)。

String.Double

以雙引號括住的字串。

String.Escape

字串中跳脫序列的符號類型。

String.Heredoc

適用於「here 文件」字串的符號類型(例如,在 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
適用於 Hashbang 註解的符號類型(即,以

#!).

Comment.Multiline

適用於多行註解的符號類型。

Comment.Preproc

適用於前置處理器註解的符號類型(也適用於 <?php/<% 結構)。

Comment.PreprocFile

適用於前置處理器註解中檔案名稱的符號類型,例如 C/C++ 中的 include 檔案。

Comment.Single

適用於在行尾結束的註解的符號類型(例如,# foo)。

Comment.Special

註解中的特殊資料。例如,程式碼標記、作者和授權資訊等。

通用符號

通用符號適用於特殊詞法分析器,例如 DiffLexer,它並非真正強調程式設計語言,而是強調修補程式檔案。

通用

通用、無樣式的符號。通常您不會使用此符號類型。

Generic.Deleted

將符號值標記為已刪除。

Generic.Emph

將符號值標記為已強調顯示。

Generic.Error

將符號值標記為錯誤訊息。

Generic.Heading

將標記值設為標題。

通用.插入

將標記值標記為已插入。

通用.輸出

將標記值標記為程式輸出 (例如,用於 Python CLI 詞法分析器)。

通用.提示符

將標記值標記為命令提示符 (例如,bash 詞法分析器)。

通用.強烈

將標記值標記為粗體 (例如,用於 rst 詞法分析器)。

通用.強調強烈

將標記值標記為粗體和強調。

通用.副標題

將標記值標記為副標題。

通用.追溯

將標記值標記為錯誤追溯的一部分。