常見問題,加上一些我想要人們經常詢問的問題。
Prism 在 Opera 中運作良好。然而,這個網頁有時會在 Opera 中顯示為無法運作,這是因為主題切換器觸發了一個 Opera 中的錯誤。這會在不久之後修復。
要正確處理在野外中發現的各種語法情況,確實需要撰寫一個充分的剖析器。然而,在許多網路應用程式和網站中,通常可以接受一些小的錯誤值,一個罕見的高亮度失敗並不會毀了一切。一個依正規表示式為基礎的語法高亮度標示器或許只有 99% 的時間能精確無誤(實際的百分比只是一個猜測),但作為代價是只能接受一些小小的錯誤值,它反而提供了一些非常重要的益處。
基於這個原因,大多數網路與桌面的語法高亮度標示器都是由正規表示式驅動的。這包括在撰寫時,廣受歡迎的原生應用程式所使用的內建語法高亮度標示器,如 Espresso 和 Sublime Text。當然,並非每個由正規表示式驅動的語法高亮度標示器都是一模一樣的。失敗的次數與類型可能會差異極大,這取決於所使用的精確演算法。Prism 已知的失敗記錄在這個網頁上。。
Web Workers 很適合用來防止語法高亮度標示中相當大的程式區塊,會阻擋到主要的 UI 執行序。大多數情況下,你會想要高亮度標示大小適中的程式碼區塊,這時就用不著 Web Workers。此外,使用 Web Workers 實際上比同步地進行高亮度標示要慢,這是因為要花費額外的時間來建立和終結這些 Worker。它在這些情況下看起來會比較快,只是因為它不會阻擋到主要的執行序而已。此外,由於 Web Workers 是針對檔案操作,而非針對物件,因此那些掛鉤在 Prism 核心部分的擴充套件(例如修改語言定義)將無法運作,除非包含在同一個檔案中(可在 下載 頁面中透過產生器來避免這個問題)。最後,Web Workers 無法與 DOM 和大多數 API 進行互動(例如主控台),因此出了錯時會很難偵錯。
因為這會讓程式碼變得更複雜,儘管這對大多數人來說並不是一個關鍵性的功能。如果你認為這非常的重要,你可以使用 Keep Markup 擴充套件。
有許多方法可以解決這個問題。你總是可以在多個部分中斷開程式碼區塊,並在其周圍加上 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;
}