【发布时间】:2011-06-30 17:49:39
【问题描述】:
我正在尝试为 AvalonEdit 定义一些自定义突出显示规则。似乎没有任何文档 - 有 some documentation on the file format,但没有关于如何在创建定义后实际加载和使用定义。
“Syntax highlighting”wiki 页面(用于旧的 WinForms TextEditor)记录了如何从磁盘上的 .xshd 文件加载突出显示定义,但我宁愿将其作为资源嵌入,就像 AvalonEdit 对其所做的那样内置定义。
我查看了 ICSharpCode.AvalonEdit 项目中加载其内置荧光笔的代码,但实际的“从资源加载”代码是在 DefaultHighlightingManager.LoadHighlighting 中完成的,它是私有的 - 并且要制作更奇怪的事情,显然只在发布版本中调用。
我可以继续摸索,从私有方法中复制/粘贴一些代码,并尝试拼凑一些可能有效也可能无效的东西,但似乎值得问一下:标准的方法是什么?这样做? 是否有推荐的第三方代码从资源中加载突出显示定义的方法?
Daniel's answer 给了我一个好的开始,但是您需要在传递给 GetManifestResourceStream 的字符串中包含命名空间名称——如果您不这样做,您将得到一个 NullReferenceException(因为它返回一个空流)。
我最终将一个名为 ResourceLoader 的静态类添加到与 .xshd 文件相同的项目文件夹中,使用以下方法:
public static IHighlightingDefinition LoadHighlightingDefinition(
string resourceName)
{
var type = typeof(ResourceLoader);
var fullName = type.Namespace + "." + resourceName;
using (var stream = type.Assembly.GetManifestResourceStream(fullName))
using (var reader = new XmlTextReader(stream))
return HighlightingLoader.Load(reader, HighlightingManager.Instance);
}
那我就打ResourceLoader.LoadHighlightingDefinition("Name.xshd")吧。
对于在家跟随的任何人,.xshd 文件需要将其构建操作设置为嵌入式资源。
【问题讨论】:
标签: syntax-highlighting avalonedit