簡體   English   中英

AvalonEdit 如何在轉換器中添加新語法

[英]AvalonEdit how to add new syntax in converter

我想在轉換器和新語法(JSON)中添加自定義突出顯示,但是,繼續使用 MVVM 等...

這意味着,我不能走這條路:

editor.HighLight = HightLightLoader.Load()

我試圖在轉換器中設置我的邏輯,但它不起作用。

我怎樣才能完成這個任務?

public class HighlightingDefinitionConverter: IValueConverter
    {
        private static readonly HighlightingDefinitionTypeConverter Converter = new HighlightingDefinitionTypeConverter();

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var json = value as string;
            if (json.Equals("JSON"))
            {
                var xmlTextReader = new XmlTextReader("JSONHighLight.xshd");
                return Converter.ConvertFrom(xmlTextReader);
            }

            return Converter.ConvertFrom(value);
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return Converter.ConvertToString(value);
        }
    }

我的 xshd 文件:

<?xml version="1.0" encoding="utf-8" ?>
<SyntaxDefinition name="JSON" extensions=".js" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
    <Color name="Digits" foreground="#8700FF" exampleText="3.14" />
    <Color name="Value" foreground="#000CFF" exampleText="var text = &quot;Hello, World!&quot;;" />
    <Color name="ParamName" foreground="#057500"  exampleText="var text = &quot;Hello, World!&quot;;" />
    <RuleSet ignoreCase="false">
        <Keywords color="Digits" >
            <Word>true</Word>
            <Word>false</Word>
        </Keywords>
        <Span color="ParamName">
            <Begin>"</Begin>
            <End>(?=:)</End>
        </Span>
        <Span color="Value" multiline="true">
            <Begin>
                (?&lt;=:)\040"[^"]*
            </Begin>
            <End>"</End>
        </Span>
        <Rule color="Digits">\b0[xX][0-9a-fA-F]+|(\b\d+(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)?</Rule>
    </RuleSet>
</SyntaxDefinition>

SyntaxHighlighting屬性需要一個實現IHighlightingDefinition接口的對象。 您正在嘗試從內置的HighlightingDefinitionTypeConverter ,但它嘗試按 name 查找一個,因此傳遞它 XmlTextReader 將不起作用。

可以在此處找到從流加載語法的代碼示例:

using (var s = Resources.OpenStream(resourceName))
using (var reader = XmlReader.Create(s))
{    
    var xshd = HighlightingLoader.LoadXshd(reader, true);
    return HighlightingLoader.Load(xshd, this);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM