最简单的方法是从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模式。 –