2013-08-23 94 views
0

我想爲基於文本的自定義內容類型添加語法高亮顯示,例如:獲取IClassifier與自定義內容類型一起工作

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

是不是一種選擇,因爲它不會讓很多功能..

感謝您的幫助:)

回答

2

你實現IVsEditorFactory負責設置編輯器中顯示的文本的內容類型。此接口的默認實現包括對FileExtensionToContentTypeDefinitionAttribute的特殊支持,作爲不需要某些更高級功能(例如,用於多種內容類型的投影緩衝區)的用戶的簡單擴展機制。

DjangoEditorFactory類包括一個名爲TextBufferEventListener的嵌套類,它顯示了編輯器工廠如何將內容類型分配給顯示在編輯器窗口中的緩衝區的一個示例。

+0

是的,我正在看這個實施。看起來相當複雜。所以我想我也必須實現這個的一個實例,但可能沒有elision緩衝區。什麼意思默認實現btw?來自Visual Studio的模板?我沒有計劃擁有多種內容類型,所以這種默認實現可能會有所幫助。 – FailedDev

+1

如果您沒有將您的文件擴展名與自定義編輯器工廠關聯,那麼Visual Studio將使用其自己的編輯器工廠的內部實現。該實現通過許多不同的方式分配內容類型,其中之一就是您提到的屬性。 –

+0

但當然,使用默認實現不允許man創建導航欄等,或向編輯器添加新的文件擴展名。 – FailedDev

相關問題