科技频道

当前位置:科技 > 要闻 > >正文

怎样创建AvalonEdit语法文件(.xshd)?

2020-12-08 16:48:58 来源:IT屋 编辑:

我正在尝试为AvalonEdit定义一些自定义突出显示规则。似乎没有任何文档,有有关文件格式的一些文档< / a>,但是在创建定义后如何实际加载和使用该定义就什么也没有。

"语法突出显示"维基页面(用于旧的WinForms TextEditor)记录了如何从磁盘上的.xshd文件加载突出显示定义,但是我想而是将其作为资源嵌入,就像AvalonEdit使用其内置定义一样。

我查看了ICSharpCode.AvalonEdit项目中的代码,该代码加载了它内置荧光笔,但是实际的"从资源加载"代码是在DefaultHighlightingManager.LoadHighlighting中完成的,它是私有的-而且,使事情变得奇怪的是,它显然仅在发行版本中被调用。

我可以继续摸索,复制/粘贴一些c从私有方法中找到答案,并尝试将可能有用或不可行的东西拼凑在一起,但是似乎值得问:什么是标准方法?方代码从资源中加载突出显示的定义?

Daniel的答案为我提供了一个良好的开端,但是您需要在传递给GetManifestResourceStream的字符串中包含名称空间名称-否则,您将得到NullReferenceException(因为它返回空流)。

我最终使用以下方法将名为ResourceLoader的静态类添加到与.xshd文件相同的项目文件夹中:

公共静态IHighlightingDefinition LoadHighlightingDefinition(

字符串resourceName)

{

var type = typeof(ResourceLoader);

var fullName = type.Namespace +"。" + resourceName;

使用(var stream = type.Assembly.GetManifestResourceStream(fullName))

使用(var reader = new XmlTextReader(stream))

return HighlightingLoader.Load(reader,HighlightingManager.Instance);

}

然后我可以调用 ResourceLoader.LoadHighlightingDefinition(" Name.xshd")。

对于在家中跟随的任何人,.xshd文件都需要将其"构建操作"设置为"嵌入式资源"。

解决方案

undefined

Ad byValueimpression

您可以在 ICSharpCode.AvalonEdit.Highlighting.Xshd.HighlightingLoader < / code>来加载.xshd文件。

例如:

使用(Stream s = myAssembly.GetManifestResourceStream(" MyHighlighting。 xshd")){

使用(XmlTextReader reader = new XmlTextReader(s)){

textEditor.SyntaxHighlighting = HighlightingLoader.Load(reader,HighlightingManager.Instance);

}

}

AvalonEdit本身的加载代码很奇怪,因为它非常渴望在调试版本中加载xshds(以便立即注意到它们中的错误),但在发布版本中延迟加载它们。

标签: AvalonEdit 语法文件 程序集

新闻排行

推荐新闻

iPhone15将被强制使用USB-C 苹果或将损失上百亿元收入

据中关村在线消息,Macrumors报道称,昨日,欧盟最终批准了一项立法,...

曝iPhone15 Ultra将采用钛金属外壳 被认为具有极高耐用性

明年的苹果 iPhone 15 系列将改用 USB-C 端口。另外,苹果还将在...

高德地图适配苹果灵动岛 可以快速获取到更简洁的关键指引

近日,据手机中国了解,高德地图官方宣布,率先适配苹果iPhone 14 P...

图说湖湘

前三季度国内生产总值870269亿元 同比增长3.0%比上半年加快0.5个百分点
10家鞋企中有2家企业今年上半年净利润处于增长状态 鞋企表现有喜有忧
291家科创板公司实现营业总收入合计同比增长28.93% 科创板中报业绩有望继续领跑
沪深A股震荡走低 保险、农业板块逆市走强