內建符號¶
在 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 中的 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"
中的前置詞r
和u8
)。- 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 版中新增。
通用符號¶
通用符號適用於特殊詞法分析器,例如 DiffLexer,它並非真正強調程式設計語言,而是強調修補程式檔案。
- 通用
通用、無樣式的符號。通常您不會使用此符號類型。
- Generic.Deleted
將符號值標記為已刪除。
- Generic.Emph
將符號值標記為已強調顯示。
- Generic.Error
將符號值標記為錯誤訊息。
- Generic.Heading
將標記值設為標題。
- 通用.插入
將標記值標記為已插入。
- 通用.輸出
將標記值標記為程式輸出 (例如,用於 Python CLI 詞法分析器)。
- 通用.提示符
將標記值標記為命令提示符 (例如,bash 詞法分析器)。
- 通用.強烈
將標記值標記為粗體 (例如,用於 rst 詞法分析器)。
- 通用.強調強烈
將標記值標記為粗體和強調。
- 通用.副標題
將標記值標記為副標題。
- 通用.追溯
將標記值標記為錯誤追溯的一部分。
註解¶
適用於任何註解的符號類型。
#!
).適用於多行註解的符號類型。
適用於前置處理器註解的符號類型(也適用於
<?php
/<%
結構)。適用於前置處理器註解中檔案名稱的符號類型,例如 C/C++ 中的 include 檔案。
適用於在行尾結束的註解的符號類型(例如,
# foo
)。註解中的特殊資料。例如,程式碼標記、作者和授權資訊等。