Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于闪烁.NET正则表达式的语法高亮显示_C#_.net_Scintilla - Fatal编程技术网

C# 基于闪烁.NET正则表达式的语法高亮显示

C# 基于闪烁.NET正则表达式的语法高亮显示,c#,.net,scintilla,C#,.net,Scintilla,是否可以使用正则表达式在闪烁体中定义语法高亮显示?如果是的话,怎么做 我有一个自定义语言要处理,不能用简单的关键字和分隔符来描述。这种语言中特定结构的意义仅取决于它们相对于关键字的位置。对于这种格式,我有一个基于正则表达式的解析器,我只需要将正则表达式定义的规则应用为文本样式 我的意思是,如果某个东西与regex1匹配,它应该具有style1。可能吗?怎么做 如果没有-我可以为手动选择的范围设置样式吗?我的意思是在编辑器中将样式编号指定给指定的字符范围。怎么做 是否可以在代码中而不是在xml文件

是否可以使用正则表达式在闪烁体中定义语法高亮显示?如果是的话,怎么做

我有一个自定义语言要处理,不能用简单的关键字和分隔符来描述。这种语言中特定结构的意义仅取决于它们相对于关键字的位置。对于这种格式,我有一个基于正则表达式的解析器,我只需要将正则表达式定义的规则应用为文本样式

我的意思是,如果某个东西与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时,它的速度非常快。他们两人的工作方式非常相似。几乎相同的功能。