C# 基于闪烁.NET正则表达式的语法高亮显示
是否可以使用正则表达式在闪烁体中定义语法高亮显示?如果是的话,怎么做 我有一个自定义语言要处理,不能用简单的关键字和分隔符来描述。这种语言中特定结构的意义仅取决于它们相对于关键字的位置。对于这种格式,我有一个基于正则表达式的解析器,我只需要将正则表达式定义的规则应用为文本样式 我的意思是,如果某个东西与regex1匹配,它应该具有style1。可能吗?怎么做 如果没有-我可以为手动选择的范围设置样式吗?我的意思是在编辑器中将样式编号指定给指定的字符范围。怎么做 是否可以在代码中而不是在xml文件中定义闪烁样式 编辑: 好的,我找到了一个方法C# 基于闪烁.NET正则表达式的语法高亮显示,c#,.net,scintilla,C#,.net,Scintilla,是否可以使用正则表达式在闪烁体中定义语法高亮显示?如果是的话,怎么做 我有一个自定义语言要处理,不能用简单的关键字和分隔符来描述。这种语言中特定结构的意义仅取决于它们相对于关键字的位置。对于这种格式,我有一个基于正则表达式的解析器,我只需要将正则表达式定义的规则应用为文本样式 我的意思是,如果某个东西与regex1匹配,它应该具有style1。可能吗?怎么做 如果没有-我可以为手动选择的范围设置样式吗?我的意思是在编辑器中将样式编号指定给指定的字符范围。怎么做 是否可以在代码中而不是在xml文件
foreach (Match m in Patterns.Keyword0.Matches(Encoding.ASCII.GetString(e.RawText)))
e.GetRange(m.Index, m.Index + m.Length).SetStyle(1);
问题在于RawText属性。它是UTF-8编码文本的字节缓冲区。text属性包含漂亮的UTF-16文本,但GetRage方法接受字节偏移量而不是字符偏移量。如果我在每个TextChanged事件上使用转换,我几乎失去了使用闪烁的所有速度优势
当然,最简单的方法是将内部编码更改为UTF-16,但当我这样做时,我得到一个异常,说不支持这种编码。唯一受支持的似乎是UTF-8,它的处理速度慢得离谱
我在这里遇到了麻烦。关键是将lexer设置为,然后处理通知。这意味着您只需处理实际需要设置样式的文本 顶部链接了几个指南,详细介绍了实现customs lexers的各个方面,所以我不想在这里重复这些
至于性能:我已经编写了定制的斯金特拉lexers,它是python,在设计样式时解码为utf-8,并且从来没有注意到任何重大问题,所以如果你至少不能使用C#匹配它,我会感到惊讶。看起来我必须再次尝试斯金特拉。在我的第一次尝试中,我在编辑突出显示的文本时遇到了不可接受的延迟。目前我使用的是FTCB,当解析器被编译成外部dll时,它的速度非常快。他们两人的工作方式非常相似。几乎相同的功能。