常見問題

常見問題,加上一些我想要人們經常詢問的問題。

這個網頁在 Opera 中不起作用!

Prism 在 Opera 中運作良好。然而,這個網頁有時會在 Opera 中顯示為無法運作,這是因為主題切換器觸發了一個 Opera 中的錯誤。這會在不久之後修復。

利用正規表示式來進行語法高亮度標示不是一件壞事嗎?

要正確處理在野外中發現的各種語法情況,確實需要撰寫一個充分的剖析器。然而,在許多網路應用程式和網站中,通常可以接受一些小的錯誤值,一個罕見的高亮度失敗並不會毀了一切。一個依正規表示式為基礎的語法高亮度標示器或許只有 99% 的時間能精確無誤(實際的百分比只是一個猜測),但作為代價是只能接受一些小小的錯誤值,它反而提供了一些非常重要的益處。

基於這個原因,大多數網路與桌面的語法高亮度標示器都是由正規表示式驅動的。這包括在撰寫時,廣受歡迎的原生應用程式所使用的內建語法高亮度標示器,如 Espresso 和 Sublime Text。當然,並非每個由正規表示式驅動的語法高亮度標示器都是一模一樣的。失敗的次數與類型可能會差異極大,這取決於所使用的精確演算法。Prism 已知的失敗記錄在這個網頁上。

為什麼預設會將非同步的高亮度標示停用?

Web Workers 很適合用來防止語法高亮度標示中相當大的程式區塊,會阻擋到主要的 UI 執行序。大多數情況下,你會想要高亮度標示大小適中的程式碼區塊,這時就用不著 Web Workers。此外,使用 Web Workers 實際上比同步地進行高亮度標示要,這是因為要花費額外的時間來建立和終結這些 Worker。它在這些情況下看起來會比較快,只是因為它不會阻擋到主要的執行序而已。此外,由於 Web Workers 是針對檔案操作,而非針對物件,因此那些掛鉤在 Prism 核心部分的擴充套件(例如修改語言定義)將無法運作,除非包含在同一個檔案中(可在 下載 頁面中透過產生器來避免這個問題)。最後,Web Workers 無法與 DOM 和大多數 API 進行互動(例如主控台),因此出了錯時會很難偵錯。

為何會把現有的 HTML 程式碼移除?

因為這會讓程式碼變得更複雜,儘管這對大多數人來說並不是一個關鍵性的功能。如果你認為這非常的重要,你可以使用 Keep Markup 擴充套件

如果現有的 HTML 程式碼會被移除,我該如何高亮度標示程式碼中的特定部分?

有許多方法可以解決這個問題。你總是可以在多個部分中斷開程式碼區塊,並在其周圍加上 HTML 標籤(或只使用一個 .highlight 類別)。你可以在首頁的「基本用法」區段中看到一個實際範例。

要繞過這個限制的另一種方法,是使用 Line Highlight 擴充套件,來高亮度標示特定行和/或行範圍並建立連結。

我如何知道我可以為每種語言設定哪些代碼標記的樣式?

每個突出的代碼都會至少收到兩個類別:代碼以及一個包含代碼類型(例如 註解)的類別,以及任意數量的別名。別名可以視為額外的代碼類型,用於為特殊代碼提供更通用的類別,以便於造型。你可以透過查看定義程式語言的物件的鍵或使用以下介面,找出不同類型的代碼。

語言

此外,你也可以在 此頁面 上找出標準代碼清單。

我如何為不同語言中具有相同名稱的代碼使用不同的突顯方式?

只要使用包含語言類別的子選擇器即可。預設的 prism.css 會執行此動作,以替 JavaScript 字串(非常普遍)和 CSS 字串(相對罕見)套用不同的顏色。以下是此程式碼,已簡化以說明技術

.token.string {
	color: #690;
}

.language-css .token.string,
.style .token.string {
	color: #a67f59;
}

縮寫的語言類別(例如 lang-css)將會被轉換為其延伸形式,因此你不需要考量它們。

相同的技巧可以用於區分 XML 標籤命名空間和屬性命名空間

.tag > .token.namespace {
	color: #b37298;
}
.attr-name > .token.namespace {
	color: #ab6;
}