【发布时间】:2012-02-18 00:18:27
【问题描述】:
我想级联 AvalonEdit 的 SyntaxHighlighting Engine。我有 2 个HighlightingDefinitions。第一个是主要语法。第二种是复杂的多行预处理器标记语言。由于这个原因,将第二个语法嵌入第一个语法太复杂了。更简单的方法是渲染第一种语法,然后更改受影响的行部分(基于第二种语法)。
所以我用第二种语言实例化了一个新的HighlightingColorizer,并将它添加到LineTransformers。但是第二种语言使整个文档着色,而不仅仅是带有预处理器指令的线条部分:非预处理器代码是黑色的。
当我调试第二行转换器的ColorizeLine-方法时,未突出显示的代码(= 无预处理器代码)的行没有像预期的那样着色。但是线条的颜色是黑色的。
那么HighlightingColorizer 是否会在整个文档开始着色之前重置所有之前的突出显示?
或者还有什么问题?如何正确级联 2 HighlightingColorizers?
【问题讨论】:
-
我在 AvalonEdit 和 IIRC 上做了一些工作,当您应用另一个着色器时,它确实会重置所有突出显示。解决这个问题的最好方法是重新尝试在第一个语法中嵌入第二个语法 - 否则您将不得不弄乱 AvalonEdit 的代码库以更改它解释和重新应用配色方案的方式。后者可能不是微不足道的,因为我认为它不会像“评论重置”或类似的东西那么容易。
-
@Xeno 就在这里。如果您不想使用 XML 定义文件,您肯定必须编辑代码库。但是,我不确定您为什么不想这样做 - 它们可以根据您的需要进行,并且可以用于为缩小的细节着色。我刚刚编写了一个文件来使用嵌入式 SQL 做类似的事情;它速度快,效果很好......
标签: c# .net avalonedit