[英]How to add a DocumentColorizingTransformer to 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 = "Hello, World!";" />
<Color name="ParamName" foreground="#057500" exampleText="var text = "Hello, World!";" />
<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>
(?<=:)\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.