3

私は小さなスクリプト言語 (組み込みの派生物ではない) の強調に取り組んでおり、さまざまな構文キーワードなどにカスタム XML ファイルをセットアップしました。

AvalonEdit に存在する XSHD システムをカスタム キーワードのロードに使用したいのですが、カスタム属性が必要です。

基本的に、ソース コードを何度も検索した後でも、キーワードとルールセットを読み取って指定するファイルを特定することはできませんでした。

必要なクラスを編集してカスタム属性を読み取って保存できる場所を知っている人はいますか?

私は AvalonEdit ですべての XSHD と強調表示を停止して動作させているので、問題はそれを使用していません。つまり、XSHD ファイルのキーワード コレクションでカスタム属性を使用することの問題です。

例:

<Keywords>
   <Word defaultValue="hello" requiresShader="shadertype1, shadertype2" someCustomAttr="value">wordname</word>
</Keyword>

そのため、XSHD ファイルのパーサーにいくつかのカスタム プロパティを設定して、これらのカスタム属性を読み込み、作成したカスタム クラスに格納する必要があります。このクラスは、私がやろうとしていることにとって重要ないくつかの論理コンポーネントを処理します。

すべてのキーワードとそのプロパティの XML ファイルを解析するパーサーが既に動作しています (ただし、ScintillaNET に書きましたが、後で AvalonEdit を見つけました。これは、WPF などでより適切に動作します)。

この情報で元の投稿を編集します。誤った情報の可能性があり、申し訳ありません。

ありがとうございました

4

1 に答える 1

5

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>
于 2012-06-28T20:38:55.490 に答える