使IClassifier使用自定义内容类型

时间:2013-08-23 10:07:24

标签: c# visual-studio-2010 visual-studio-2012 mef

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

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

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

感谢您的帮助:)

1 个答案:

答案 0 :(得分:2)

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

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

相关问题