我正在致力于突出显示一种小型脚本语言(它不是任何内置语言的派生语言),并且我有一个针对不同语法关键字等的自定义 XML 文件设置。
我真的很想使用 AvalonEdit 中存在的 XSHD 系统来加载自定义关键字,但我需要在其中包含自定义属性。
所以基本上,在对源代码进行了大量搜索之后,我无法真正确定读取和指定关键字和规则集的文件。
这里有人知道我可以在哪里编辑所需的类来读取一些自定义属性并存储它们吗?
我在 AvalonEdit 中拥有所有 XSHD 和高亮显示内容并正常工作,所以问题不是使用它,也就是说,更多的是在 XSHD 文件的关键字集合中使用自定义属性的问题。
例如:
<Keywords>
<Word defaultValue="hello" requiresShader="shadertype1, shadertype2" someCustomAttr="value">wordname</word>
</Keyword>
因此,我需要为 XSHD 文件的解析器设置一些自定义属性,以加载这些自定义属性并将它们存储在我创建的自定义类中,该类处理一些对我尝试的内容至关重要的逻辑组件做。
我已经有一个可以解析我所有关键字及其属性的 XML 文件的工作解析器(但我将其写入 ScintillaNET,但后来发现 AvalonEdit,它与 WPF 等一起工作得更好)。
我将使用此信息编辑原始帖子,对于可能的错误信息,我们深表歉意。
谢谢
最佳答案
要加载 XSHD 文件,您需要导入以下库:
using ICSharpCode.AvalonEdit;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Highlighting.Xshd;
然后在您创建文本编辑器的任何位置(省略第一行,如果您在 XAML 中创建它,只需引用 TextEditor),使用以下代码加载 def.xshd。
// TextEditor is an AvalonEdit.TextEditor
TextEditor edit = new TextEditor();
XmlReader reader = XmlReader.Create("def.xshd");
edit.SyntaxHighlighting = HighlightingLoader.Load(reader, HighlightingManager.Instance);
我在作品中使用的一个很好的示例 xshd 文件是这样的:
<SyntaxDefinition name="XAPL"
xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
<Color name="Comment" foreground="Green" />
<Color name="String" foreground="Pink" />
<Color name="Xml" foreground="Orange" />
<!-- This is the main ruleset. -->
<RuleSet>
<Span color="Comment" begin="//" />
<Span color="Comment" multiline="true"
begin="/\*" end="\*/" />
<Span color="String">
<Begin>"</Begin>
<End>"</End>
<RuleSet>
<!-- nested span for escape sequences -->
<Span begin="\\" end="." />
</RuleSet>
</Span>
<Span color="Xml" multiline="false">
<Begin>spaz</Begin>
<End>spaz</End>
</Span>
<Keywords fontWeight="bold" foreground="Blue">
<Word>dealwith</Word>
<Word>import</Word>
<Word>end</Word>
<Word>var</Word>
<Word>default</Word>
<Word>template</Word>
<Word>sub</Word>
<Word>category</Word>
<Word>if</Word>
<Word>otherwise</Word>
<Word>and</Word>
<Word>xor</Word>
<Word>string</Word>
<Word>int</Word>
<Word>convert</Word>
<Word>to</Word>
<Word>escape</Word>
<Word>native</Word>
<Word>loop</Word>
<Word>is</Word>
<Word>to</Word>
<Word>from</Word>
<Word>by</Word>
</Keywords>
<!-- Digits -->
<Rule foreground="DarkGray">
\b0[xX][0-9a-fA-F]+ # hex number
| \b
( \d+(\.[0-9]+)? #number with optional floating point
| \.[0-9]+ #or just starting with floating point
)
([eE][+-]?[0-9]+)? # optional exponent
</Rule>
</RuleSet>
</SyntaxDefinition>
关于c# - AvalonEdit (C#) XSHD 文件中的自定义属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11252359/