在ide中语法高亮是如何工作的?



我正在用React在Electron中编写我自己的文本编辑器,我试图做一些基本的语法高亮显示。用户在文本区域内编写代码,但是没有办法在文本区域内插入标记,所以我不能那样给文本上色。

我发现了这个jquery插件,它在文本区后面添加了一个背景,这样我们就可以在某些地方添加背景颜色,但是我想让文本本身着色(这不能做,因为文本区在背景前)。

关于其他ide如Visual Studio Code(也是用电子编写的)是如何做到这一点的,有什么想法吗?

这里有多种方法可以工作。

一种方法是使用带有contenteditable="true"属性的div而不是textarea。这样,您既可以在元素中编写文本,也可以为其内容设置样式。当然,这也产生了需要处理的问题——何时解析代码,如何重新定位插入符号等等。根据不同的方法,MutationObserver可以派上用场。

另一种方法是完全不使用任何内置的书写功能,而是实现自己的功能。监听键盘事件并以编程方式插入字符。在这种情况下,你还需要实现你自己的插入符号,选择等,这是不容易的。

VS Code是开源的,所以你可以看看这个编辑器是如何制作的。他们使用一个完全定制的编辑器,叫做Monaco,但它的源代码在VS code的repo中。这个文件是一个好的开始。

最新更新