0xD*_*EEF 67 .net c# avalonedit
我想级联AvalonEdit的SyntaxHighlighting引擎.我有2个HighlightingDefinitions
.第一个是主要语法.第二个是复杂的多行预处理器 - 标记语言.由于这个原因,在第一个语法中嵌入第二个语法太复杂了.更简单的方法是渲染第一种语法,然后更改受影响的线部分(基于第二种语法).
所以我HighlightingColorizer
用第二语言实例化了一个新的并添加到了LineTransformers
.但是第二种语言使整个文档着色,而不仅仅是具有预处理器指令的行部分:非预处理器代码是黑色的.
当我调试ColorizeLine
第二行变换器的方法时,未突出显示的代码(=没有预处理器代码)的行未按预期进行着色.但线条的颜色是黑色.
那么HighlightingColorizer
在开始着色之前重置所有先前突出显示的整个文档是什么?
或者还有什么问题呢?我怎样才能正确级联2 HighlightingColorizers
?
问题是,HighlightingColorizer
它并不直接存储DocumentHighlighter
对它的引用,而是通过它存储它TextView.Services
.这样做是为了允许将相同的着色器附加到多个编辑器,以便每个编辑器都有自己的编辑器DocumentHighlighter
.
附加第二个着色器时,它会覆盖IHighlighter
存储在服务容器中的内容; 两种着色剂最终都使用了新的荧光笔.
另外,请注意"复制到剪贴板"逻辑HtmlClipboard
直接访问IHighlighter
服务,它不使用任何颜色调色剂.(将文本复制到Word仅保留语法突出显示,没有其他转换,如折叠标记)
解决此问题基本上有两种方法:
请勿将其他荧光笔存储为服务.您可以通过创建自己的HighlightingColorizer
类副本来完成此操作,并使用该类中的字段而不是访问textView.Services
.这是一个简单的更改,但在将文本复制到剪贴板时不会使用其他荧光笔.
创建一个IHighlighter
结合HighlightedLine
多个DocumentHighlighter
s的实现.这是我们在SharpDevelop 5中用于C#语义突出显示的方法,它可以作为额外的荧光笔,扩展现有的基于.xshd的C#突出显示.但是,这种方法很复杂(HighlightedLine
鉴于部分的排序和嵌套约束,合并s非常重要),并且需要对IHighlighter
接口进行API更改才能处理OnHighlightStateChanged
通知(AvalonEdit 4.x使用嵌套的派生类)HighlightingColorizer
访问此回调; AvalonEdit 5.0将使用一个事件).
归档时间: |
|
查看次数: |
2552 次 |
最近记录: |