首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AvalonEdit (C#) XSHD文件中的自定义属性

AvalonEdit (C#) XSHD文件中的自定义属性
EN

Stack Overflow用户
提问于 2012-06-29 04:27:22
回答 1查看 2.8K关注 0票数 3

我正致力于突出显示一种小型脚本语言(它不是任何内置脚本语言的派生语言),并且我为不同的语法、关键字等设置了自定义的XML文件。

我真的很想使用AvalonEdit中存在的XSHD系统来加载自定义关键字,但我需要在它们中有自定义属性。

因此,基本上,在大量搜索源代码之后,我无法真正确定读取并指定关键字和规则集的文件。

这里有谁知道我可以在哪里编辑所需的类,以读取一些自定义属性并存储它们?

我有所有的XSHD和高亮的东西在AvalonEdit中运行,所以它没有使用它,这就是问题所在,更多的是在XSHD文件的关键字集合中使用自定义属性的问题。

在示例中:

代码语言:javascript
运行
复制
<Keywords>
   <Word defaultValue="hello" requiresShader="shadertype1, shadertype2" someCustomAttr="value">wordname</word>
</Keyword>

因此,我需要为XSHD文件的解析器设置一些自定义属性,以加载这些自定义属性,并将它们存储在我创建的自定义类中,该类处理一些对我要做的事情至关重要的逻辑组件。

我已经有了一个可以解析所有关键字及其属性的XML文件的解析器(但是我把它写成了ScintillaNET,但后来发现了AvalonEdit,它与WPF等一起工作得更好)。

我将使用此信息编辑原始帖子,对可能的错误信息表示歉意。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-29 04:38:55

要加载XSHD文件,需要导入以下库:

代码语言:javascript
运行
复制
using ICSharpCode.AvalonEdit;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Highlighting.Xshd;    

然后,在创建文本编辑器的任何地方(省略第一行,如果在XAML中创建,则只引用TextEditor ),使用以下代码加载def.xshd。

代码语言:javascript
运行
复制
// TextEditor is an AvalonEdit.TextEditor
TextEditor edit = new TextEditor();
XmlReader reader = XmlReader.Create("def.xshd");
edit.SyntaxHighlighting = HighlightingLoader.Load(reader, HighlightingManager.Instance);

我正在使用的一种语言的一个很好的xshd文件示例如下:

代码语言:javascript
运行
复制
<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>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11252359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档