最簡單的方法是從existing example開始工作。
如果你看一下這個文件,你可以看到它有一些樣板圍繞元組的兩個列表:
PR['registerLangHandler'](
PR['createSimpleLexer'](
[
// Some tuples
],
[
// Some more tuples
],
[/* Some file extensions without dot */]));
如果文件擴展名列表中包含"ext"
和美化的要求美化代碼塊用那麼這個處理程序將被使用。這兩組元組的結構相似。 下面是一些與第一組
['opn', /^\(+/, null, '('],
['clo', /^\)+/, null, ')'],
,這裏是一個從第二組。
[PR['PR_KEYWORD'], /^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|...)\b/, null],
的PR['PR_KEYWORD']
是predefined token type與風格在predefined stylesheet相匹配:
.kwd { color: #008 } /* a keyword */
什麼
['opn', /^\(+/, null, '('],
的意思是,美化時,如果代碼的開頭開始與/^\(+/
,然後輸入被包裹在<span class="opn">...</span>
。 opn
(LISP左括號)是一個字符串文字,因爲它沒有預定義的常量。如果你定義了你自己的標記類型類,你可能需要爲它們定義樣式規則,以適應任何頁面加載的需求。
右側的字符串'('
被視爲一個字符列表,這樣該規則是唯一一個在輸入文本以其中一個字符開頭時適用的規則。這是過去幾年對IE 6的一個重要優化。
兩組元組唯一的區別在於第一個列表中的元素有這個額外的獨佔字符元素。
IIRC,null
支持的功能很少發現,如果有必要,不再支持。您放入該位置的任何值都將被忽略。
CSS處理程序有一些這方面的文檔,並演示了另一個功能。
['lang-css-kw', /^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],
如果令牌類型與lang-
開始,而不是產生<span class="lang-css-kw">...</span>
,美化將查找的文件擴展名css-kw
語言處理程序,並遞歸地應用,爲內容組1.此功能可能是矯枉過正這裏因爲現代JS引擎始終支持lookahead,但這是必要的,以便HTML模式可遞歸地將JS和CSS模式應用於<script>
和<style>
塊的內容。
美化可以處理任何只依賴從左到右傳遞令牌的轉換。它沒有辦法收集在邊桌上消除歧義的符號,所以沒有辦法區分這兩個C段:從
int t = 1; // t is declared as a variable, not a type
t* x; // multiplication. "t" should not have class="typ"
typedef int t // t is declared as a type
t* x; // declare x as a pointer to a t. "t" should have class="typ"
這有限的方法似乎更穩健面對經常出現在像stackoverflow這樣的網站上的代碼片斷和惡意代碼。
這是合理的編碼共同語言的約定如
規則中的
。
有一個內置的shell模式。 –