public ProjectHost(MarkdownCodeProject hierarchy)
 {
     this.hierarchy = hierarchy;
 }
 public ProjectHost(MarkdownCodeProject hierarchy)
 {
     this.hierarchy = hierarchy;
 }
        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 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);
        }