public void OnBlockCreated(ITextBuffer editorBuffer, LanguageProjectionBuffer projectionBuffer) { WindowHelpers.WaitFor(delegate { // Make sure we don't set up ContainedLanguages until the buffer is ready // When loading lots of Markdown files on solution load, we might need to // wait for multiple idle cycles. var doc = ServiceManager.GetService <HtmlEditorDocument>(editorBuffer); if (doc == null) { return(false); } if (doc.PrimaryView == null) { return(false); } Guid guid = FindGuid(); if (guid != Guid.Empty) { ContainedLanguageAdapter.ForBuffer(editorBuffer).AddIntellisenseProjectLanguage(projectionBuffer, guid); } return(true); }); }
public void OnBlockCreated(ITextBuffer editorBuffer, LanguageProjectionBuffer projectionBuffer) { EventHandler <EventArgs> h = null; h = delegate { // Make sure we don't set up ContainedLanguages until the buffer is ready // When loading lots of Markdown files on solution load, we might need to // wait for multiple idle cycles. var doc = ServiceManager.GetService <HtmlEditorDocument>(editorBuffer); if (doc == null) { return; } if (doc.PrimaryView == null) { return; } WebEditor.OnIdle -= h; Guid guid = FindGuid(); if (guid != Guid.Empty) { ContainedLanguageAdapter.ForBuffer(editorBuffer).AddIntellisenseProjectLanguage(projectionBuffer, guid); } }; WebEditor.OnIdle += h; }
public void OnBlockCreated(ITextBuffer editorBuffer, LanguageProjectionBuffer projectionBuffer) { WindowHelpers.WaitFor(delegate { var textView = TextViewConnectionListener.GetFirstViewForBuffer(editorBuffer); if (textView == null) { return(false); } // Add the inner buffer's EditorDocument to the outer buffer before // broken editor code tries to create a new EditorDocument from the // outer buffer. var editorDocument = JSONEditorDocument.FromTextBuffer(projectionBuffer.IProjectionBuffer); ServiceManager.AddService(editorDocument, textView.TextBuffer); editorDocument.Closing += delegate { ServiceManager.RemoveService <JSONEditorDocument>(textView.TextBuffer); }; // JSONIndenter uses TextView.TextBuffer, and therefore operates on the // entire Markdown buffer, breaking everything. I manually force it to // use the inner projection buffer instead. Beware that this breaks its // ViewCaret property, and I can't fix that unless I mock its TextView. var indenter = ServiceManager.GetService <ISmartIndent>(textView); indenter.GetType().GetField("_textBuffer", BindingFlags.Instance | BindingFlags.NonPublic) .SetValue(indenter, projectionBuffer.IProjectionBuffer); return(true); }); }
private void EnsureLanguageProjectionBuffer() { if (_languageProjectionBuffer == null) { ProjectionBufferManager service = ServiceManager.GetService <ProjectionBufferManager>(_viewBuffer); if (service != null) { if (Path.GetExtension(_fullPath) == ".vbhtml") { _languageProjectionBuffer = (service.GetProjectionBuffer(".vb") as LanguageProjectionBuffer); } else { _languageProjectionBuffer = (service.GetProjectionBuffer(".cs") as LanguageProjectionBuffer); } } } if (_linePragmaReader == null) { if (Path.GetExtension(_fullPath) == ".vbhtml") { _linePragmaReader = EmbeddedLanguageLinePragmaReaderFactory.Create("vb"); return; } _linePragmaReader = EmbeddedLanguageLinePragmaReaderFactory.Create("c#"); } }
public void OnBlockCreated(ITextBuffer editorBuffer, LanguageProjectionBuffer projectionBuffer) { var componentModel = (IComponentModel)ServiceProvider.GetService(typeof(SComponentModel)); var workspace = editorBuffer.Properties.GetOrCreateSingletonProperty(() => new MarkdownWorkspace(MefV1HostServices.Create(componentModel.DefaultExportProvider)) ); var contentType = projectionBuffer.IProjectionBuffer.ContentType.DisplayName; var projectId = editorBuffer.Properties.GetOrCreateSingletonProperty(contentType, () => { var newProject = workspace.CurrentSolution .AddProject(contentType + " Markdown Project", "Markdown", contentTypeLanguages[contentType]) .AddMetadataReferences( DefaultReferences.Select(name => VSWorkspace.CreatePortableExecutableReference( Path.Combine(referenceAssemblyPath, name + ".dll"), MetadataReferenceProperties.Assembly )) ); workspace.TryApplyChanges(newProject.Solution); return(newProject.Id); }); workspace.CreateDocument(projectId, projectionBuffer.IProjectionBuffer); WindowHelpers.WaitFor(delegate { var textView = TextViewConnectionListener.GetFirstViewForBuffer(editorBuffer); if (textView == null) { return(false); } InstallCommandTarget(textView, projectionBuffer.IProjectionBuffer); return(true); }); }
public LanguageBridge(ContainedLanguageAdapter owner, LanguageProjectionBuffer projectionBuffer, IVsContainedLanguageFactory languageFactory, IVsHierarchy hierarchy) { this.owner = owner; this.languageFactory = languageFactory; ProjectionBuffer = projectionBuffer; this.hierarchy = hierarchy; InitContainedLanguage(); }
internal void Create(HtmlEditorDocument document, IVsContainedLanguage containedLanguage, IVsTextBufferCoordinator bufferCoordinator, LanguageProjectionBuffer languageBuffer, out IVsTextViewFilter containedLanguageViewfilter) { containedLanguageViewfilter = null; TextViewData textViewDataForBuffer = TextViewConnectionListener.GetTextViewDataForBuffer(document.TextBuffer); if (textViewDataForBuffer == null || textViewDataForBuffer.LastActiveView == null) { return; } TextView = textViewDataForBuffer.LastActiveView; IVsTextViewIntellisenseHostProvider vsTextViewIntellisenseHostProvider = TextView.QueryInterface <IVsTextViewIntellisenseHostProvider>(); if (vsTextViewIntellisenseHostProvider == null) { return; } Guid gUID = typeof(IVsTextViewIntellisenseHost).GUID; IntPtr intPtr; vsTextViewIntellisenseHostProvider.CreateIntellisenseHost(bufferCoordinator, ref gUID, out intPtr); if (intPtr == IntPtr.Zero) { return; } IVsTextViewIntellisenseHost vsTextViewIntellisenseHost = Marshal.GetObjectForIUnknown(intPtr) as IVsTextViewIntellisenseHost; Marshal.Release(intPtr); if (vsTextViewIntellisenseHost == null) { return; } HtmlMainController htmlMainController = HtmlMainController.FromTextView(TextView); ICommandTarget chainedController = htmlMainController.ChainedController; if (chainedController == null) { return; } OleToCommandTargetShim oleToCommandTargetShim = chainedController as OleToCommandTargetShim; if (containedLanguage.GetTextViewFilter(vsTextViewIntellisenseHost, oleToCommandTargetShim.OleTarget, out containedLanguageViewfilter) != 0) { return; } IOleCommandTarget oleTarget = containedLanguageViewfilter as IOleCommandTarget; OleToCommandTargetShim containedLanguageTarget = new OleToCommandTargetShim(TextView, oleTarget); ContainedLanguageTarget = containedLanguageTarget; _languageBuffer = languageBuffer; _languageBuffer.MappingsChanged += OnMappingsChanged; }
public VsLegacyContainedLanguageHost(HtmlEditorDocument vsDocument, LanguageProjectionBuffer secondaryBuffer, IVsHierarchy hierarchy) { _modernContainedLanguageHost = (ContainedLanguageHost.GetHost(vsDocument.PrimaryView, secondaryBuffer.IProjectionBuffer) as IWebContainedLanguageHost); _secondaryBuffer = secondaryBuffer; this.hierarchy = hierarchy; _vsDocument = vsDocument; _vsDocument.OnDocumentClosing += OnDocumentClosing; secondaryBuffer.MappingsChanging += OnMappingsChanging; secondaryBuffer.MappingsChanged += OnMappingsChanged; }
private void OnMappingsChanged(object sender, MappingsChangedEventArgs e) { if (e.Mappings.Count > 0) { _languageBuffer.MappingsChanged -= OnMappingsChanged; IContainedLanguageHost host = ContainedLanguageHost.GetHost(TextView, _languageBuffer.IProjectionBuffer); host.SetContainedCommandTarget(TextView, ContainedLanguageTarget); ContainedLanguageTarget = null; TextView = null; _languageBuffer = null; } }
public void OnBlockCreated(ITextBuffer editorBuffer, LanguageProjectionBuffer projectionBuffer) { WindowHelpers.WaitFor(delegate { var textView = TextViewConnectionListener.GetFirstViewForBuffer(editorBuffer); if (textView == null) { return(false); } // Attach the inner buffer's Document to the outer // buffer so that it can be found from the TextView var editorDocument = JSONEditorDocument.FromTextBuffer(projectionBuffer.IProjectionBuffer) ?? JSONEditorDocument.Attach(projectionBuffer.IProjectionBuffer); ServiceManager.AddService(editorDocument, editorBuffer); editorDocument.Closing += delegate { ServiceManager.RemoveService <JSONEditorDocument>(textView.TextBuffer); }; return(true); }); }
internal void Create(HtmlEditorDocument document, IVsContainedLanguage containedLanguage, IVsTextBufferCoordinator bufferCoordinator, LanguageProjectionBuffer languageBuffer, out IVsTextViewFilter containedLanguageViewfilter) { containedLanguageViewfilter = null; TextViewData textViewDataForBuffer = TextViewConnectionListener.GetTextViewDataForBuffer(document.TextBuffer); if (textViewDataForBuffer == null || textViewDataForBuffer.LastActiveView == null) return; TextView = textViewDataForBuffer.LastActiveView; IVsTextViewIntellisenseHostProvider vsTextViewIntellisenseHostProvider = TextView.QueryInterface<IVsTextViewIntellisenseHostProvider>(); if (vsTextViewIntellisenseHostProvider == null) return; Guid gUID = typeof(IVsTextViewIntellisenseHost).GUID; IntPtr intPtr; vsTextViewIntellisenseHostProvider.CreateIntellisenseHost(bufferCoordinator, ref gUID, out intPtr); if (intPtr == IntPtr.Zero) return; IVsTextViewIntellisenseHost vsTextViewIntellisenseHost = Marshal.GetObjectForIUnknown(intPtr) as IVsTextViewIntellisenseHost; Marshal.Release(intPtr); if (vsTextViewIntellisenseHost == null) return; HtmlMainController htmlMainController = HtmlMainController.FromTextView(TextView); ICommandTarget chainedController = htmlMainController.ChainedController; if (chainedController == null) return; OleToCommandTargetShim oleToCommandTargetShim = chainedController as OleToCommandTargetShim; if (containedLanguage.GetTextViewFilter(vsTextViewIntellisenseHost, oleToCommandTargetShim.OleTarget, out containedLanguageViewfilter) != 0) return; IOleCommandTarget oleTarget = containedLanguageViewfilter as IOleCommandTarget; OleToCommandTargetShim containedLanguageTarget = new OleToCommandTargetShim(TextView, oleTarget); ContainedLanguageTarget = containedLanguageTarget; _languageBuffer = languageBuffer; _languageBuffer.MappingsChanged += OnMappingsChanged; }
public void OnBlockCreated(ITextBuffer editorBuffer, LanguageProjectionBuffer projectionBuffer) { var componentModel = (IComponentModel)ServiceProvider.GetService(typeof(SComponentModel)); var workspace = editorBuffer.Properties.GetOrCreateSingletonProperty(() => new MarkdownWorkspace(MefV1HostServices.Create(componentModel.DefaultExportProvider)) ); var contentType = projectionBuffer.IProjectionBuffer.ContentType.DisplayName; var project = editorBuffer.Properties.GetOrCreateSingletonProperty(contentType, () => { var newProject = workspace.AddProject( "Sample " + contentType + " Project", contentTypeLanguages[contentType] ); workspace.TryApplyChanges(workspace.CurrentSolution.AddMetadataReferences( newProject.Id, DefaultReferences.Select(name => VSWorkspace.CreatePortableExecutableReference( Path.Combine(referenceAssemblyPath, name + ".dll"), MetadataReferenceProperties.Assembly )) )); return newProject; }); workspace.CreateDocument(project.Id, projectionBuffer.IProjectionBuffer); WindowHelpers.WaitFor(delegate { var textView = TextViewConnectionListener.GetFirstViewForBuffer(editorBuffer); if (textView == null) return false; InstallCommandTarget(textView, projectionBuffer.IProjectionBuffer); return true; }); }
public void AddIntellisenseProjectLanguage(LanguageProjectionBuffer projectionBuffer, Guid intellisenseGuid) { var contentType = projectionBuffer.IProjectionBuffer.ContentType; if (languageBridges.ContainsKey(contentType)) { return; } Guid iid_vsip = typeof(IVsIntellisenseProject).GUID; // Needed so that webprj.dll can load var shell = (IVsShell)ServiceProvider.GlobalProvider.GetService(typeof(SVsShell)); Guid otherPackage = new Guid("{39c9c826-8ef8-4079-8c95-428f5b1c323f}"); IVsPackage package; shell.LoadPackage(ref otherPackage, out package); var project = (IVsIntellisenseProject)EditorExtensionsPackage.Instance.CreateInstance(ref intellisenseGuid, ref iid_vsip, typeof(IVsIntellisenseProject)); string fileName = projectionBuffer.IProjectionBuffer.GetFileName(); var displayName = contentType.DisplayName; if (displayName == "CSharp") { displayName = "C#"; } if (displayName == "Basic") { displayName = "VB"; } var hierarchy = new MarkdownCodeProject(fileName, displayName + " code in " + Path.GetFileName(fileName), WorkspaceItem.Hierarchy); project.Init(new ProjectHost(hierarchy)); project.StartIntellisenseEngine(); project.AddAssemblyReference(typeof(object).Assembly.Location); project.AddAssemblyReference(typeof(Uri).Assembly.Location); project.AddAssemblyReference(typeof(Enumerable).Assembly.Location); project.AddAssemblyReference(typeof(System.Net.Http.HttpClient).Assembly.Location); project.AddAssemblyReference(typeof(System.Net.Http.Formatting.JsonMediaTypeFormatter).Assembly.Location); project.AddAssemblyReference(typeof(System.Xml.Linq.XElement).Assembly.Location); project.AddAssemblyReference(typeof(System.Web.HttpContextBase).Assembly.Location); project.AddAssemblyReference(typeof(System.Windows.Forms.Form).Assembly.Location); project.AddAssemblyReference(typeof(System.Windows.Window).Assembly.Location); project.AddAssemblyReference(typeof(System.Data.DataSet).Assembly.Location); int needsFile; if (ErrorHandler.Succeeded(project.IsWebFileRequiredByProject(out needsFile)) && needsFile != 0) { project.AddFile(fileName, MarkdownCodeProject.FileItemId); } IVsContainedLanguageFactory factory; project.WaitForIntellisenseReady(); project.GetContainedLanguageFactory(out factory); if (factory == null) { Logger.Log("Markdown: Couldn't create IVsContainedLanguageFactory for " + contentType); project.Close(); return; } LanguageBridge bridge = new LanguageBridge(this, projectionBuffer, factory, hierarchy); bridge.Disposing += delegate { project.Close(); }; languageBridges.Add(contentType, bridge); }
public void OnBlockCreated(ITextBuffer editorBuffer, LanguageProjectionBuffer projectionBuffer) { }
private void EnsureLanguageProjectionBuffer() { if (_languageProjectionBuffer == null) { ProjectionBufferManager service = ServiceManager.GetService<ProjectionBufferManager>(_viewBuffer); if (service != null) { if (Path.GetExtension(_fullPath) == ".vbhtml") { _languageProjectionBuffer = (service.GetProjectionBuffer(".vb") as LanguageProjectionBuffer); } else { _languageProjectionBuffer = (service.GetProjectionBuffer(".cs") as LanguageProjectionBuffer); } } } if (_linePragmaReader == null) { if (Path.GetExtension(_fullPath) == ".vbhtml") { _linePragmaReader = EmbeddedLanguageLinePragmaReaderFactory.Create("vb"); return; } _linePragmaReader = EmbeddedLanguageLinePragmaReaderFactory.Create("c#"); } }
public void Dispose() { _languageBuffer = null; ContainedLanguageTarget = null; TextView = null; }
public void OnBlockCreated(ITextBuffer editorBuffer, LanguageProjectionBuffer projectionBuffer) { WindowHelpers.WaitFor(delegate { var textView = TextViewConnectionListener.GetFirstViewForBuffer(editorBuffer); if (textView == null) return false; // Add the inner buffer's EditorDocument to the outer buffer before // broken editor code tries to create a new EditorDocument from the // outer buffer. var editorDocument = JSONEditorDocument.FromTextBuffer(projectionBuffer.IProjectionBuffer); ServiceManager.AddService(editorDocument, textView.TextBuffer); editorDocument.Closing += delegate { ServiceManager.RemoveService<JSONEditorDocument>(textView.TextBuffer); }; // JSONIndenter uses TextView.TextBuffer, and therefore operates on the // entire Markdown buffer, breaking everything. I manually force it to // use the inner projection buffer instead. Beware that this breaks its // ViewCaret property, and I can't fix that unless I mock its TextView. var indenter = ServiceManager.GetService<ISmartIndent>(textView); indenter.GetType().GetField("_textBuffer", BindingFlags.Instance | BindingFlags.NonPublic) .SetValue(indenter, projectionBuffer.IProjectionBuffer); return true; }); }
public void OnBlockCreated(ITextBuffer editorBuffer, LanguageProjectionBuffer projectionBuffer) { EventHandler<EventArgs> h = null; h = delegate { // Make sure we don't set up ContainedLanguages until the buffer is ready // When loading lots of Markdown files on solution load, we might need to // wait for multiple idle cycles. var doc = ServiceManager.GetService<HtmlEditorDocument>(editorBuffer); if (doc == null) return; if (doc.PrimaryView == null) return; WebEditor.OnIdle -= h; Guid guid = FindGuid(); if (guid != Guid.Empty) ContainedLanguageAdapter.ForBuffer(editorBuffer).AddIntellisenseProjectLanguage(projectionBuffer, guid); }; WebEditor.OnIdle += h; }
public void AddIntellisenseProjectLanguage(LanguageProjectionBuffer projectionBuffer, Guid intellisenseGuid) { var contentType = projectionBuffer.IProjectionBuffer.ContentType; if (languageBridges.ContainsKey(contentType)) return; Guid iid_vsip = typeof(IVsIntellisenseProject).GUID; // Needed so that webprj.dll can load var shell = (IVsShell)ServiceProvider.GlobalProvider.GetService(typeof(SVsShell)); Guid otherPackage = new Guid("{39c9c826-8ef8-4079-8c95-428f5b1c323f}"); IVsPackage package; shell.LoadPackage(ref otherPackage, out package); var project = (IVsIntellisenseProject)WebEssentialsPackage.Instance.CreateInstance(ref intellisenseGuid, ref iid_vsip, typeof(IVsIntellisenseProject)); string fileName = projectionBuffer.IProjectionBuffer.GetFileName(); var displayName = contentType.DisplayName; if (displayName == "CSharp") displayName = "C#"; if (displayName == "Basic") displayName = "VB"; var hierarchy = new MarkdownCodeProject(fileName, displayName + " code in " + Path.GetFileName(fileName), WorkspaceItem.Hierarchy); project.Init(new ProjectHost(hierarchy)); project.StartIntellisenseEngine(); project.AddAssemblyReference(typeof(object).Assembly.Location); project.AddAssemblyReference(typeof(Uri).Assembly.Location); project.AddAssemblyReference(typeof(Enumerable).Assembly.Location); project.AddAssemblyReference(typeof(System.Net.Http.HttpClient).Assembly.Location); project.AddAssemblyReference(typeof(System.Net.Http.Formatting.JsonMediaTypeFormatter).Assembly.Location); project.AddAssemblyReference(typeof(System.Xml.Linq.XElement).Assembly.Location); project.AddAssemblyReference(typeof(System.Web.HttpContextBase).Assembly.Location); project.AddAssemblyReference(typeof(System.Windows.Forms.Form).Assembly.Location); project.AddAssemblyReference(typeof(System.Windows.Window).Assembly.Location); project.AddAssemblyReference(typeof(System.Data.DataSet).Assembly.Location); int needsFile; if (ErrorHandler.Succeeded(project.IsWebFileRequiredByProject(out needsFile)) && needsFile != 0) project.AddFile(fileName, MarkdownCodeProject.FileItemId); IVsContainedLanguageFactory factory; project.WaitForIntellisenseReady(); project.GetContainedLanguageFactory(out factory); if (factory == null) { Logger.Log("Markdown: Couldn't create IVsContainedLanguageFactory for " + contentType); project.Close(); return; } LanguageBridge bridge = new LanguageBridge(this, projectionBuffer, factory, hierarchy); bridge.Disposing += delegate { project.Close(); }; languageBridges.Add(contentType, bridge); }
public void OnBlockCreated(ITextBuffer editorBuffer, LanguageProjectionBuffer projectionBuffer) { EventHandler<EventArgs> h = null; h = delegate { // Make sure we don't set up ContainedLanguages until the buffer is ready WebEditor.OnIdle -= h; ContainedLanguageAdapter.ForBuffer(editorBuffer).AddIntellisenseProjectLanguage(projectionBuffer, FindGuid()); }; WebEditor.OnIdle += h; }