Ejemplo n.º 1
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("*");
         }
     }
 }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 3
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));
        }
Ejemplo n.º 5
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);
        }
Ejemplo n.º 6
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;
            }
        }