我希望在暑假的项目中编写自己的语法高亮器,但我不确定如何编写自己的语法高亮器。
我知道有很多实现方式,但我想学习正则表达式以及语法高亮的工作原理。
语法高亮是如何工作的?开发一个好的语法高亮器需要哪些参考资料?语法高亮器是逐个字符扫描还是在每个字符输入后扫描整个文档/文本区域?
非常感谢您提供的任何见解。
谢谢。
PS:我打算用ActionScript编写它。
我希望在暑假的项目中编写自己的语法高亮器,但我不确定如何编写自己的语法高亮器。
我知道有很多实现方式,但我想学习正则表达式以及语法高亮的工作原理。
语法高亮是如何工作的?开发一个好的语法高亮器需要哪些参考资料?语法高亮器是逐个字符扫描还是在每个字符输入后扫描整个文档/文本区域?
非常感谢您提供的任何见解。
谢谢。
PS:我打算用ActionScript编写它。
构建语法高亮器的关键在于在代码中查找特定的关键词并给它们指定一个特定的样式(字体、字体风格、颜色等)。为了实现这一点,您需要定义一个特定于编程语言的关键词列表,并解析文本(例如使用正则表达式),找到特定的标记,并用正确样式的HTML标记替换它们。
一个非常基本的JavaScript高亮器将如下所示:
var keywords = [ "public", "class", "private", "static", "return", "void" ];
for (var i = 0; i < keywords.length; i++)
{
var regex = new RegExp("([^A-z0-9])(" + keywords[i] + ")([^A-z0-9])(?![^<]*>|[^<>]*</)", "g");
code = code.replace(regex, "$1<span class='rm-code-keyword'>$2</span>$3");
}
很遗憾,我从未使用过Actionscript,所以无法帮助您解决此问题。
但是除此之外,编写语法高亮器的好方法是查看现有的高亮器。例如,vim具有普通文本文件形式的语法文件,因此您可以从中开始查看。那里有一堆正则表达式(正则表达式有几种不同的风格,但它们并没有太大的区别...),因此对于这部分,您可以参考一些书籍。
就个人而言,我发现Beginning regular expressions是一本不错的书。对于更高级的主题,Mastering regular expressions也很不错。另一方面,Regular expressions pocket reference适合确定上述风格的差异,因为它还包括关于vim的正则表达式的章节。
<span class="reserved">function</span>, <span class="reserved"></span>
.reserved{
color: #ff0000;
}
这是基本概念,您可能希望从geshi获取灵感,因为您可以查看源代码。
我之前在我的博客上发布了一个SQL代码着色工具:http://gruchalski.com/2009/04/26/flex-textrange-performance-issue-on-linux/
你可以找到一个指向sqlcodecoloring.zip源码的链接。它使用分词器和TextRange类实现。
另一个链接,SQL代码着色作为原型应用程序的一部分:http://github.com/radekg/mysqlinterface/tree/master