我正致力于突出显示一种小型脚本语言(它不是任何内置脚本语言的派生语言),并且我为不同的语法、关键字等设置了自定义的XML文件。
我真的很想使用AvalonEdit中存在的XSHD系统来加载自定义关键字,但我需要在它们中有自定义属性。
因此,基本上,在大量搜索源代码之后,我无法真正确定读取并指定关键字和规则集的文件。
这里有谁知道我可以在哪里编辑所需的类,以读取一些自定义属性并存储它们?
我有所有的XSHD和高亮的东西在AvalonEdit中运行,所以它没有使用它,这就是问题所在,更多的是在XSHD文件的关键字集合中使用自定义属性的问题。
在示例中:
<Keywords>
<Word defaultValue="hello" requiresShader="shadertype1, shadertype2" someCustomAttr="value">wordname</word>
</Keyword>
因此,我需要为XSHD文件的解析器设置一些自定义属性,以加载这些自定义属性,并将它们存储在我创建的自定义类中,该类处理一些对我要做的事情至关重要的逻辑组件。
我已经有了一个可以解析所有关键字及其属性的XML文件的解析器(但是我把它写成了ScintillaNET,但后来发现了AvalonEdit,它与WPF等一起工作得更好)。
我将使用此信息编辑原始帖子,对可能的错误信息表示歉意。
谢谢
发布于 2012-06-29 04:38:55
要加载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>
https://stackoverflow.com/questions/11252359
复制相似问题