Tag: 语言服务

向IElisonBuffer添加语法突出显示

我正在开发一个项目,我们将C#代码分解为函数并将这些函数存储在IElisonBuffers中 。 我已经将Intellisense连接起来了,缓冲区与其他扩展交互得很好,如下所示: 但是,我无法在这些编辑器中使用语法突出显示。 我通过以下步骤嵌入这些编辑器: 为该文件创建一个IVsInvisibleEditor 。 获取此IVsInvisibleEditor 创建一个IVsCodeWindow并将此IVsCodeWindow的缓冲区设置为IVsCodeWindow中的IVsInvisibleEditor 从此代码窗口获取IWpfTextViewHost 。 这让我回到了“WPF Land”,在那里我能够与传统的跨度互动。 创建IWpfTextViewHost文本视图的SnapshotSpan。 此SnapshotSpan包含单个函数。 创建一个包含SnapshotSpan的IElisionBuffer 。 通过IVsEditorAdaptersFactoryService.CreateVsTextBufferAdapterForSecondaryBuffer()创建一个IElisionBuffer 。 现在我将IVsTextBuffer为IVsTextLines并调用SetLanguageServiceID()传入C#GUID:694DD9B6-B865-4C5B-AD85-86356E9C88DC。 我仔细检查它是否通过GetLanguageServiceID()设置正确,一切看起来都没问题。 我创建了一个IVsTextView并使用新的IVsTextBuffer对其进行初始化。 然后我得到了这个IVsTextView 。 在为IElisionBuffer设置语言服务ID时,是否需要注意哪些特殊步骤? 为了完整起见,这是我正在使用的代码: public CustomEditorViewModel CreateEditor(string filePath, int start, int end) { IVsInvisibleEditor invisibleEditor; ErrorHandler.ThrowOnFailure(this._InvisibleEditorManager.RegisterInvisibleEditor( filePath , pProject: null , dwFlags: (uint)_EDITORREGFLAGS.RIEF_ENABLECACHING , pFactory: null , ppEditor: out invisibleEditor)); var docDataPointer = […]