2010-11-29 38 views
4

我試圖在VS2010中爲自定義文件格式創建一些語法高亮。從msdn上的Ook! Language示例廣泛竊取後,我可以突出顯示文件中的關鍵字。我對此感到高興。但是,該示例按行分割了SnapshotSpans。我還想處理多行突出顯示(例如註釋)。Visual Studio傳遞給它的ITagger.GetTags調用了什麼?

通過調用我定義的GetTags方法進行調試後,似乎每個文件都會調用多次該方法,但會傳遞相同的SnapshotSpan集合。而且,由於每個鍵入的字符都會導致另一系列調用,因爲處理傳遞給它的確切信息非常困難。那麼我應該在這個系列中期待什麼?

回答

5

由於任何東西都可能會消耗您的標記器,因此沒有定義的規範可以傳遞給GetTags。如果你想處理多行信息,這是你的組件必須解析出來的東西,通常是爲了響應文本的變化,如果它很昂貴,在後臺線程上。

在大多數情況下,如果消費者是IWpfTextView,那麼您可以期望該集合一次只有一行。如果單行文本更改(如鍵入)會影響多行,那麼您的標記器應在需要更新的區域上提升TagsChanged

一般模型在blog article I wrote about VS editor fundamentals中有點描述。要點是標籤信息的消費者會詢問他們關心的是什麼,並訂閱改變標籤中的事件以確保他們收集的任何信息都是最新的。

+0

感謝您的回覆。這很有用。不過,我仍然有些困惑。首先,Ook!中的Tagger類例如帶一個永不被使用的TextBuffer。這是什麼緩衝區?其次,您的博客文章使我看起來好像可以定義跨度。我到底該怎麼做?如果我不這樣做,SpanCollection是否包含整個文件的1個跨度?再次感謝你的幫助。 – ThePurpleMonk 2010-12-02 10:43:50

相關問題