【发布时间】:2014-11-25 11:08:07
【问题描述】:
是否可以使用正则表达式来定义 Scintilla 中的语法高亮?如果是,该怎么做?
我有一种自定义语言要处理,不能用简单的关键字和分隔符来描述。这种语言中特定结构的含义仅取决于它们相对于关键字的位置。我有这种格式的基于正则表达式的解析器,我只需要将正则表达式定义的规则应用为文本样式。
我的意思是如果某些东西匹配 regex1,它应该有 style1。是否可以?怎么样?
如果没有 - 我可以为手动选择的范围设置样式吗?我的意思是在编辑器中将样式编号分配给指定的字符范围。怎么做?
是否可以在代码中而不是在 xml 文件中定义 Scintilla 样式?
编辑: 好的,我找到了办法。
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 事件上使用转换,我几乎失去了使用 Scintilla 的所有速度优势。
当然,最简单的方法是将内部编码更改为 UTF-16,但是当我这样做时,我收到异常说不支持这种编码。唯一受支持的似乎是 UTF-8,它处理起来非常困难(而且速度很慢)。
我在这里碰壁了。
【问题讨论】: