首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写语法高亮工具

编写语法高亮工具
EN

Stack Overflow用户
提问于 2009-04-30 22:27:09
回答 7查看 17.8K关注 0票数 29

我希望为我正在考虑的一个暑期项目编写自己的语法高亮笔,但我不确定如何编写自己的语法高亮笔。

我知道有很多实现,但我想了解正则表达式和语法突出显示是如何工作的。

语法突出显示是如何工作的,开发语法突出显示有哪些好的参考资料?语法荧光笔是在键入时扫描每个字符,还是在键入每个字符后作为一个整体扫描文档/文本区域?

任何见解都将不胜感激。

谢谢。

PS:我本来打算用ActionScript写的

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-04-30 22:44:21

语法高亮显示可以以两种非常普遍的方式工作。第一个实现了针对被突出显示的语言的完整的词法分析器和解析器,准确地识别每个标记的类型(关键字、类名、实例名、变量类型、预处理器指令...)。这提供了根据某些规范(红色的关键字、蓝色的类名等)准确突出显示代码所需的所有信息。

第二种方式类似于Google Code Prettify采用的方式,其中不是每种语言实现一个词法分析器/解析器,而是使用几个非常通用的解析器,可以很好地处理大多数语法。例如,这种高亮笔将能够很好地解析和突出显示任何类似C的语言,因为它的词法分析器/解析器可以识别这些语言的一般组件。

这也有一个好处,那就是,你不需要明确地指定语言,因为引擎将自己确定它的通用解析器中哪一个可以做得最好。当然,缺点是突出显示不如使用特定于语言的解析器时那么完美。

票数 26
EN

Stack Overflow用户

发布于 2017-05-09 16:23:04

构建语法高亮笔就是在代码中找到特定的关键字,并为它们提供特定的样式(字体、字体样式、颜色等)。为了实现这一点,您需要定义一个特定于编写代码的编程语言的关键字列表,然后解析文本(例如,使用正则表达式),找到特定的标记并将其替换为样式正确的HTML标记。

用JavaScript编写的一个非常基本的高亮工具应该是这样的:

代码语言: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");
}
票数 13
EN

Stack Overflow用户

发布于 2009-04-30 22:40:18

StackOverflow podcast number 50中,Steve Yegge谈到了他创建一些通用高亮机制的项目。这不是一个成品,而且可能比你想要的更复杂,但可能会有一些有趣的东西。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/809423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档