Exemplo n.º 1
0
        static LanguageBindingService()
        {
            AddinManager.AddExtensionNodeHandler("/MonoDevelop/ProjectModel/LanguageBindings", delegate(object sender, ExtensionNodeEventArgs args)
            {
                LanguageBindingCodon languageBindingCodon = (LanguageBindingCodon)args.ExtensionNode;
                switch (args.Change)
                {
                case ExtensionChange.Add:
                    languageBindingCodons.Add(languageBindingCodon);
                    IDotNetLanguageBinding dotNetBinding = languageBindingCodon as IDotNetLanguageBinding;
                    if (dotNetBinding != null)
                    {
                        object par = dotNetBinding.CreateCompilationParameters(null);
                        if (par != null)
                        {
                            Services.ProjectService.DataContext.IncludeType(par.GetType());
                        }
                        par = dotNetBinding.CreateProjectParameters(null);
                        if (par != null)
                        {
                            Services.ProjectService.DataContext.IncludeType(par.GetType());
                        }
                    }
                    break;

                case ExtensionChange.Remove:
                    languageBindingCodons.Remove(languageBindingCodon);
                    break;
                }
                languageBindings = null;
            });
        }
Exemplo n.º 2
0
		public DotNetProject (string languageName) : this()
		{
			// Language name must be set before the item handler is assigned
			this.languageName = languageName;
			this.languageBinding = FindLanguage (languageName);

			if (this.languageBinding != null)
				this.StockIcon = this.languageBinding.ProjectStockIcon;

			this.usePartialTypes = SupportsPartialTypes;
		}
Exemplo n.º 3
0
        public DotNetProject(string languageName) : this()
        {
            // Language name must be set before the item handler is assigned
            this.languageName    = languageName;
            this.languageBinding = FindLanguage(languageName);

            if (this.languageBinding != null)
            {
                this.StockIcon = this.languageBinding.ProjectStockIcon;
            }

            this.usePartialTypes = SupportsPartialTypes;
        }
Exemplo n.º 4
0
 void ExpandLanguageWildcards(List <string> list)
 {
     //Template can match all CodeDom .NET languages with a "*"
     if (list.Contains("*"))
     {
         foreach (var lb in LanguageBindingService.LanguageBindings)
         {
             IDotNetLanguageBinding dnlang = lb as IDotNetLanguageBinding;
             if (dnlang != null && dnlang.GetCodeDomProvider() != null)
             {
                 list.Add(dnlang.Language);
             }
             list.Remove("*");
         }
     }
 }
Exemplo n.º 5
0
        public Project CreateSingleFileProject(string file)
        {
            IDotNetLanguageBinding binding = LanguageBindingService.GetBindingPerFileName(file) as IDotNetLanguageBinding;

            if (binding != null)
            {
                ProjectCreateInformation info = new ProjectCreateInformation();
                info.ProjectName     = Path.GetFileNameWithoutExtension(file);
                info.SolutionPath    = Path.GetDirectoryName(file);
                info.ProjectBasePath = Path.GetDirectoryName(file);
                Project project = CreateProject(binding.Language, info, null);
                project.Files.Add(new ProjectFile(file));
                return(project);
            }
            return(null);
        }
Exemplo n.º 6
0
        private System.CodeDom.Compiler.CodeDomProvider GetCodeDomProvider(string language)
        {
            System.CodeDom.Compiler.CodeDomProvider provider = null;
            IDotNetLanguageBinding binding = GetLanguageBinding(language) as IDotNetLanguageBinding;

            if (binding == null)
            {
                throw new InvalidOperationException("No LanguageBinding was found for the language '" + language + "'.");
            }

            provider = binding.GetCodeDomProvider();
            if (provider == null)
            {
                throw new InvalidOperationException("No CodeDomProvider was found for the language '" + language + "'.");
            }
            return(provider);
        }
Exemplo n.º 7
0
        public StringCollection GenerateFiles(string guiFolder)
        {
            StringCollection files = new StringCollection();

            if (hasError)
            {
                return(files);
            }

            IDotNetLanguageBinding binding  = LanguageBindingService.GetBindingPerLanguageName(project.LanguageName) as IDotNetLanguageBinding;
            CodeDomProvider        provider = binding.GetCodeDomProvider();

            if (provider == null)
            {
                throw new UserException("Code generation not supported for language: " + project.LanguageName);
            }
//			string path = Path.Combine (guiFolder, binding.GetFileName ("generated"));
//			if (!System.IO.File.Exists (path)) {
//				GuiBuilderService.SteticApp.GenerateProjectCode (path, "Stetic", provider, null);
//			}
//			files.Add (path);
//
//			if (Windows != null) {
//				foreach (GuiBuilderWindow win in Windows)
//					files.Add (GuiBuilderService.GenerateSteticCodeStructure (project, win.RootWidget, true, false));
//			}
//
//			foreach (Stetic.ActionGroupInfo ag in SteticProject.ActionGroups)
//				files.Add (GuiBuilderService.GenerateSteticCodeStructure (project, ag, true, false));
            GtkDesignInfo info      = GtkDesignInfo.FromProject(project);
            string        extension = string.Format("{0}.{1}", info.BuildFileExtension, provider.FileExtension);

            foreach (string file in Directory.GetFiles(guiFolder))
            {
                if (file.Contains(extension))
                {
                    files.Add(file);
                }
            }

            return(files);
        }
        public override string CreateContent(Project project, Dictionary <string, string> tags, string language)
        {
            if (language == null || language == "")
            {
                throw new InvalidOperationException("Language not defined in CodeDom based template.");
            }

            IDotNetLanguageBinding binding = GetLanguageBinding(language) as IDotNetLanguageBinding;

            CodeDomProvider provider = null;

            if (binding != null)
            {
                provider = binding.GetCodeDomProvider();
            }

            if (provider == null)
            {
                throw new InvalidOperationException("The language '" + language + "' does not have support for CodeDom.");
            }

            var xcd = new XmlCodeDomReader();
            var cu  = xcd.ReadCompileUnit(domContent);

            foreach (CodeNamespace cns in cu.Namespaces)
            {
                cns.Name = StripImplicitNamespace(project, tags, cns.Name);
            }

            CodeGeneratorOptions options = new CodeGeneratorOptions();

            options.IndentString = "\t";
            options.BracingStyle = "C";

            StringWriter sw = new StringWriter();

            provider.GenerateCodeFromCompileUnit(cu, sw, options);
            sw.Close();

            return(StripHeaderAndBlankLines(sw.ToString(), provider));
        }
Exemplo n.º 9
0
        public StringCollection GenerateFiles(string guiFolder)
        {
            StringCollection files = new StringCollection();

            if (hasError)
            {
                return(files);
            }

            IDotNetLanguageBinding binding = LanguageBindingService.GetBindingPerLanguageName(project.LanguageName) as IDotNetLanguageBinding;
            string path = Path.Combine(guiFolder, binding.GetFileName("generated"));

            if (!System.IO.File.Exists(path))
            {
                // Generate an empty build class
                CodeDomProvider provider = binding.GetCodeDomProvider();
                if (provider == null)
                {
                    throw new UserException("Code generation not supported for language: " + project.LanguageName);
                }
                GuiBuilderService.SteticApp.GenerateProjectCode(path, "Stetic", provider, null);
            }
            files.Add(path);

            if (Windows != null)
            {
                foreach (GuiBuilderWindow win in Windows)
                {
                    files.Add(GuiBuilderService.GenerateSteticCodeStructure(project, win.RootWidget, true, false));
                }
            }

            foreach (Stetic.ActionGroupInfo ag in SteticProject.ActionGroups)
            {
                files.Add(GuiBuilderService.GenerateSteticCodeStructure(project, ag, true, false));
            }

            return(files);
        }
Exemplo n.º 10
0
        // Can add tags for substitution based on project, language or filename.
        // If overriding but still want base implementation's tags, should invoke base method.
        // We supply defaults whenever it is possible, to avoid having unsubstituted tags. However,
        // do not substitute blanks when a sensible default cannot be guessed, because they result
        //in less obvious errors.
        public virtual void ModifyTags(SolutionItem policyParent, Project project, string language,
                                       string identifier, string fileName, ref Dictionary <string, string> tags)
        {
            DotNetProject    netProject        = project as DotNetProject;
            string           languageExtension = "";
            ILanguageBinding binding           = null;

            if (!string.IsNullOrEmpty(language))
            {
                binding = GetLanguageBinding(language);
                if (binding != null)
                {
                    languageExtension = Path.GetExtension(binding.GetFileName("Default")).Remove(0, 1);
                }
            }

            //need a default namespace or if there is no project, substitutions can get very messed up
            string ns;

            if (project is IDotNetFileContainer)
            {
                ns = ((IDotNetFileContainer)project).GetDefaultNamespace(fileName);
            }
            else
            {
                ns = "Application";
            }

            //need an 'identifier' for tag substitution, e.g. class name or page name
            //if not given an identifier, use fileName
            if ((identifier == null) && (fileName != null))
            {
                identifier = Path.GetFileName(fileName);
            }

            if (identifier != null)
            {
                //remove all extensions
                while (Path.GetExtension(identifier).Length > 0)
                {
                    identifier = Path.GetFileNameWithoutExtension(identifier);
                }
                identifier        = CreateIdentifierName(identifier);
                tags ["Name"]     = identifier;
                tags ["FullName"] = ns.Length > 0 ? ns + "." + identifier : identifier;

                //some .NET languages may be able to use keywords as identifiers if they're escaped
                IDotNetLanguageBinding dnb = binding as IDotNetLanguageBinding;
                if (dnb != null)
                {
                    System.CodeDom.Compiler.CodeDomProvider provider = dnb.GetCodeDomProvider();
                    if (provider != null)
                    {
                        tags ["EscapedIdentifier"] = provider.CreateEscapedIdentifier(identifier);
                    }
                }
            }

            tags ["Namespace"] = ns;
            if (policyParent != null)
            {
                tags ["SolutionName"] = policyParent.Name;
            }
            if (project != null)
            {
                tags ["ProjectName"]     = project.Name;
                tags ["SafeProjectName"] = CreateIdentifierName(project.Name);
                var info = project.AuthorInformation ?? AuthorInformation.Default;
                tags ["AuthorCopyright"] = info.Copyright;
                tags ["AuthorCompany"]   = info.Company;
                tags ["AuthorTrademark"] = info.Trademark;
                tags ["AuthorEmail"]     = info.Email;
                tags ["AuthorName"]      = info.Name;
            }
            if ((language != null) && (language.Length > 0))
            {
                tags ["Language"] = language;
            }
            if (languageExtension.Length > 0)
            {
                tags ["LanguageExtension"] = languageExtension;
            }

            if (fileName != FilePath.Null)
            {
                FilePath fileDirectory = Path.GetDirectoryName(fileName);
                if (project != null && project.BaseDirectory != FilePath.Null && fileDirectory.IsChildPathOf(project.BaseDirectory))
                {
                    tags ["ProjectRelativeDirectory"] = fileDirectory.ToRelative(project.BaseDirectory);
                }
                else
                {
                    tags ["ProjectRelativeDirectory"] = fileDirectory;
                }

                tags ["FileNameWithoutExtension"] = Path.GetFileNameWithoutExtension(fileName);
                tags ["Directory"] = fileDirectory;
                tags ["FileName"]  = fileName;
            }
        }
        public override void ModifyTags(SolutionItem policyParent, Project project, string language, string identifier, string fileName, ref Dictionary <string, string> tags)
        {
            tags ["Doctype"] = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">";

            //get a language binding
            IDotNetLanguageBinding langbinding = null;

            if (project == null)
            {
                langbinding = (IDotNetLanguageBinding)LanguageBindingService.GetBindingPerLanguageName(language);
            }
            else
            {
                DotNetProject dnp = (DotNetProject)project;
                langbinding = dnp.LanguageBinding;
            }

            // work out the ASP.NET language code. Although it's  originally a hack around MD's VBNet language name
            // not corresponding to any of the valid ASP.NET codes, we also provide an interface that
            // non-core language bindings can implement to advertise that they support ASP.NET
            string languageCode = language;

            if (langbinding is IAspNetLanguageBinding)
            {
                languageCode = ((IAspNetLanguageBinding)langbinding).AspNetLanguageCode;
            }
            else if (language == "VBNet")
            {
                languageCode = "VB";
            }
            else if (language != "C#")
            {
                LoggingService.LogWarning("The language binding '{0}' does not have explicit support for ASP.NET", language);
            }
            tags ["AspNetLanguage"] = languageCode;

            base.ModifyTags(policyParent, project, language, identifier, fileName, ref tags);

            //nothing after this point is relevant to tag substitution for filenames,
            //and some will even crash, so drop out now
            if (fileName == null)
            {
                return;
            }

            // Build tags for ${CodeRegion:#} substitutions
            foreach (string regionName in codeAreas.Keys)
            {
                var templ = (CodeTranslationFileDescriptionTemplate)codeAreas [regionName];

                //makes CodeTranslationFile's internal name substitition easier
                var name = (string)tags ["Name"];
                templ.GetFileName(policyParent, project, language, project == null? null :project.BaseDirectory, name);

                Stream       stream = templ.CreateFileContent(policyParent, project, language, fileName, identifier);
                StreamReader reader = new StreamReader(stream);
                tags ["CodeRegion:" + regionName] = reader.ReadToEnd();
                reader.Close();
                stream.Close();
            }
        }
Exemplo n.º 12
0
        public bool CanCreateSingleFileProject(string file)
        {
            IDotNetLanguageBinding binding = LanguageBindingService.GetBindingPerFileName(file) as IDotNetLanguageBinding;

            return(binding != null);
        }
Exemplo n.º 13
0
        IDotNetLanguageBinding FindLanguage(string name)
        {
            IDotNetLanguageBinding binding = LanguageBindingService.GetBindingPerLanguageName(languageName) as IDotNetLanguageBinding;

            return(binding);
        }