0

我正在尝试为基于文本的自定义内容类型添加语法突出显示,例如

static class RTextContentType
{
    public const string ContentTypeName = Constants.CONTENT_TYPE;
    [Export, Name(ContentTypeName), BaseDefinition("text")]
    internal static ContentTypeDefinition ContentTypeDefinition = null; // set via MEF
}

然后分类器提供者是这样声明的,

[Export(typeof(IClassifierProvider)), ContentType(Constants.CONTENT_TYPE)]
class RTextClassifierProvider : IClassifierProvider
{
   ...
}

问题是,提供者的构造函数永远不会被我指定的扩展调用。请注意,我提供了编辑器工厂,并且文件扩展名与工厂相关联。我可以看到通过调试所有相关文件来初始化工厂。

如果我将内容类型更改"text"为构造函数,则会被调用。

所以问题是,如何将自定义内容类型映射到文件扩展名?

第二个注意事项,使用FileExtensionToContentTypeDefintion

不是一个选项,因为这不允许很多功能..

谢谢您的帮助 :)

4

1 回答 1

2

您的实现IVsEditorFactory负责设置编辑器中显示的文本的内容类型。FileExtensionToContentTypeDefinitionAttribute此接口的默认实现包括对不需要某些更高级功能(例如,多种内容类型的投影缓冲区)的用户的简单扩展机制的特殊支持。

该类DjangoEditorFactory包括一个名为 的嵌套类TextBufferEventListener,它显示了一个示例,说明编辑器工厂如何将内容类型分配给显示在编辑器窗口中的缓冲区。

于 2013-08-23T12:16:21.860 回答