Exemple #1
0
        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);
            });
        }