- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想级联 AvalonEdit 的 SyntaxHighlighting Engine。我有 2 个 HighlightingDefinitions
。第一个是主要语法。第二个是复杂的多行预处理器标记语言。由于这个原因,将第二个语法嵌入到第一个语法中太复杂了。更简单的方法是呈现第一种语法,然后更改受影响的行部分(基于第二种语法)。
所以我用第二种语言实例化了一个新的 HighlightingColorizer
并将其添加到 LineTransformers
中。但是第二种语言将整个文档着色,而不仅仅是带有预处理器指令的行部分:非预处理器代码为黑色。
当我调试第二行转换器的 ColorizeLine
方法时,未突出显示的代码行(= 没有预处理器代码)没有像预期的那样被着色。但是线条的颜色是黑色。
HighlightingColorizer
是否会在开始着色之前重置整个文档之前的所有突出显示?
或者还有什么问题?如何正确级联 2 个 HighlightingColorizers
?
最佳答案
问题是 HighlightingColorizer
不直接存储对 DocumentHighlighter
的引用,而是通过 TextView.Services
存储它。这样做是为了允许将相同的着色器附加到多个编辑器,以便每个编辑器都有自己的 DocumentHighlighter
。
当您附加第二个着色器时,它会覆盖存储在服务容器中的 IHighlighter
;并且两个着色器最终都使用了新的荧光笔。
另请注意,HtmlClipboard
中的“复制到剪贴板”逻辑直接访问IHighlighter
服务,它不使用任何着色器。 (将文本复制到 Word 仅保留语法突出显示,没有折叠标记等其他转换)
基本上有两种方法可以解决这个问题:
不要将附加荧光笔存储为服务。为此,您可以创建自己的 HighlightingColorizer
副本,并使用该类中的字段而不是访问 textView.Services
。这是一个简单的更改,但在将文本复制到剪贴板时不会使用额外的荧光笔。
创建一个 IHighlighter
实现,它结合了来自多个 DocumentHighlighter
的 HighlightedLine
。这是我们在 SharpDevelop 5 中用于 C# 语义突出显示的方法,它作为扩展现有的基于 .xshd 的 C# 突出显示的附加突出显示。但是,这种方法很复杂(考虑到部分的顺序和嵌套约束,合并 HighlightedLine
并非易事),并且需要对 IHighlighter
接口(interface)进行 API 更改才能按顺序进行处理 OnHighlightStateChanged
通知(AvalonEdit 4.x 使用嵌套在 HighlightingColorizer
中的派生类来访问此回调;AvalonEdit 5.0 将使用事件)。
关于c# - AvalonEdit:级联高亮着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8992137/
在这个 fiddle 上,函数完美地完成了工作,但我需要稍微调整连接。 该点击甚至需要是父 div 的 addClass(深色/浅色)(true 或 false)。 如果是深色,则添加 Bright
我正在使用 Windows.UI.ViewManagement.UISettings 来获取系统强调色,但该类似乎没有任何亮/暗模式的方法或属性。我找不到此功能的文档,我该如何检测? PS:我正在制作
在使用 iOS 13 在明暗模式之间切换时,我遇到了显示键盘的异常行为。 该 View 有一个 inputAccessoryView 供用户输入消息。当然后在键盘显示的情况下切换亮/暗模式时,亮/暗模
我正在开发一个支持多个主题的 iOS 应用程序。有些主题使用深色背景,有些使用浅色。一些默认图标在深色/浅色背景中不可见。我在 xcassets 中看到一个选项,可以为不同的颜色模式添加图像。我的目标
一些上下文:Sciter (纯 win32 应用程序)已经能够呈现类似 UWP 的 UI: 在深色模式下: 在灯光模式下: Windows 10.1803 在设置小程序中引入深色/浅色开关 as se
我是一名优秀的程序员,十分优秀!