示例#1
0
 public ScriptProjectGenerator(string[] _files, HashSet <string> assemblyReferences, ScriptSequence _sequence)
 {
     isCSharp = _sequence.Language.GetType().Name.Contains("CSharp");
     sequence = _sequence;
     files.AddRange(_files);
     references.AddRange(assemblyReferences.ToArray());
 }
示例#2
0
 public ScriptProjectGenerator(string[] _files, HashSet<string> assemblyReferences, ScriptSequence _sequence)
 {
     isCSharp = _sequence.Language.GetType().Name.Contains("CSharp");
     sequence = _sequence;
     files.AddRange(_files);
     references.AddRange(assemblyReferences.ToArray());
 }
 private void _ReadExternalAssemblies(XElement element, ScriptSequence scriptSequence)
 {
     scriptSequence.ExternalAssemblies = new HashSet <string>(
         element
         .Element("ExternalAssemblies")
         .Elements("Assembly")
         .Select(x => x.Attribute("name").Value));
 }
示例#4
0
        public IUserScriptHost GenerateScript(ScriptSequence sequence)
        {
            List <string> files = new List <string>();

            Assembly assembly;
            string   nameSpace = UserScriptNamespace;

            try {
                // Emit the T4 template to be compiled into the assembly.
                string fileName = Path.GetTempFileName();

                string fileContents = sequence.Language.FrameworkGenerator.Generate(nameSpace, sequence.ClassName);
                File.WriteAllText(fileName, fileContents);
                files.Add(fileName);

                // Add the user's source files.
                foreach (SourceFile sourceFile in sequence.SourceFiles)
                {
                    fileName = Path.Combine(Path.GetTempPath(), sourceFile.Name);
                    File.WriteAllText(fileName, sourceFile.Contents);
                    files.Add(fileName);
                }

                var assemblyReferences = _GetReferencedAssemblies(sequence);
                HashSet <string> uniqueAssemblyReferences = new HashSet <string>(assemblyReferences);
                // Remove .NET framework and GAC assemblies.
                uniqueAssemblyReferences.RemoveWhere(
                    x => x.StartsWith(Environment.GetFolderPath(Environment.SpecialFolder.Windows), StringComparison.OrdinalIgnoreCase));

                //if (createProject)

                CreateWorkingProject(files.ToArray(), uniqueAssemblyReferences, sequence);

                // Compile the sources.
                assembly = _Compile(files.ToArray(), uniqueAssemblyReferences, sequence);
            } finally {
                // Delete the temp files.
                foreach (string tempFile in files)
                {
                    File.Delete(tempFile);
                }
            }

            if (assembly != null)
            {
                // Get the generated type.
                Type type = assembly.GetType(string.Format("{0}.{1}", nameSpace, sequence.ClassName));
                if (type != null)
                {
                    // Create and return an instance.
                    return((IUserScriptHost)Activator.CreateInstance(type));
                }
            }

            return(null);
        }
        protected override void _ReadContent(XElement element, Sequence sequence)
        {
            ScriptSequence scriptSequence = (ScriptSequence)sequence;

            element = element.Element("Script");
            _ReadLanguage(element, scriptSequence);
            _ReadClassName(element, scriptSequence);
            _ReadSourceFiles(element, scriptSequence);
            _ReadFrameworkAssemblies(element, scriptSequence);
            _ReadExternalAssemblies(element, scriptSequence);
        }
示例#6
0
        private IEnumerable <string> _GetReferencedAssemblies(ScriptSequence sequence)
        {
            List <string> assemblyReferences = new List <string>();

            assemblyReferences.AddRange(sequence.FrameworkAssemblies);
            assemblyReferences.AddRange(sequence.ExternalAssemblies);
            assemblyReferences.AddRange(_GetEffectParameterAssemblies());
            assemblyReferences.AddRange(_standardReferences);
            assemblyReferences.Add(VixenSystem.AssemblyFileName);

            return(assemblyReferences);
        }
示例#7
0
        private XElement _WriteSourceFiles(ScriptSequence sequence)
        {
            // Make sure source directory exists.
            string sourcePath = Path.Combine(sequence.SourceDirectory, sequence.Name);

            Helper.EnsureDirectory(sourcePath);

            // Write the source files and their references.
            return(new XElement("SourceFiles", sequence.SourceFiles.Select(x => {
                x.Save(sourcePath);
                return new XElement("SourceFile",
                                    new XAttribute("name", x.Name));
            })));
        }
示例#8
0
        protected override XElement _WriteContent(Sequence sequence)
        {
            if (!(sequence is ScriptSequence))
            {
                throw new InvalidOperationException("Attempt to serialize a " + sequence.GetType().ToString() + " as a ScriptSequence.");
            }
            ScriptSequence scriptSequence = (ScriptSequence)sequence;

            return(new XElement("Script",
                                _WriteLanguage(scriptSequence),
                                _WriteClassName(scriptSequence),
                                _WriteSourceFiles(scriptSequence),
                                _WriteFrameworkAssemblies(scriptSequence),
                                _WriteExternalAssemblies(scriptSequence)));
        }
        private void _ReadSourceFiles(XElement element, ScriptSequence scriptSequence)
        {
            string sourcePath = Path.Combine(scriptSequence.SourceDirectory, scriptSequence.Name);

            scriptSequence.SourceFiles.Clear();
            IEnumerable <string> fileNames = element
                                             .Element("SourceFiles")
                                             .Elements("SourceFile")
                                             .Select(x => x.Attribute("name").Value);

            foreach (string fileName in fileNames)
            {
                string filePath = Path.Combine(sourcePath, fileName);
                scriptSequence.SourceFiles.Add(SourceFile.Load(filePath));
            }
        }
示例#10
0
        public IUserScriptHost GenerateScript(ScriptSequence sequence)
        {
            List <string> files = new List <string>();

            Assembly assembly;
            string   nameSpace = UserScriptNamespace;

            try {
                // Emit the T4 template to be compiled into the assembly.
                string fileName = Path.GetTempFileName();

                string fileContents = sequence.Language.FrameworkGenerator.Generate(nameSpace, sequence.ClassName);
                File.WriteAllText(fileName, fileContents);
                files.Add(fileName);

                // Add the user's source files.
                foreach (SourceFile sourceFile in sequence.SourceFiles)
                {
                    fileName = Path.Combine(Path.GetTempPath(), sourceFile.Name);
                    File.WriteAllText(fileName, sourceFile.Contents);
                    files.Add(fileName);
                }

                // Compile the sources.
                assembly = _Compile(files.ToArray(), _GetReferencedAssemblies(sequence), sequence.Language);
            } finally {
                // Delete the temp files.
                foreach (string tempFile in files)
                {
                    File.Delete(tempFile);
                }
            }

            if (assembly != null)
            {
                // Get the generated type.
                Type type = assembly.GetType(string.Format("{0}.{1}", nameSpace, sequence.ClassName));
                if (type != null)
                {
                    // Create and return an instance.
                    return((IUserScriptHost)Activator.CreateInstance(type));
                }
            }

            return(null);
        }
示例#11
0
        private void STEPS()
        {
            TabHelper      tab      = new TabHelper(tabs);
            ScriptSequence sequence = new ScriptSequence(i);

            ScriptParser scriptParser = new ScriptParser(tab, sequence);

            //agrupa as transicoes de acordo com o nome...
            IEnumerable <IGrouping <string, UmlTransition> > groups =
                curActDiag.UmlObjects.OfType <UmlTransition>()
                .GroupBy(t => getFriendlyName(t.Source.Name), t => t);


            //organiza em GroupNodes
            GroupNode root = new GroupNode();

            root.GroupName   = groups.First().Key;
            root.Transitions = groups.First().ToList();
            List <GroupNode> lista = new List <GroupNode>();

            lista.Add(root);
            groups = groups.Where(x => !x.Key.Equals(root.GroupName));

            foreach (IGrouping <string, UmlTransition> group in groups)
            {
                GroupNode gn = new GroupNode();
                gn.GroupName = group.Key;
                group.ToList().ForEach(
                    x => fixName(x)
                    );

                gn.Transitions = group.ToList();
                lista.Add(gn);
                // root.SubGroups.Add(gn);
            }


            GroupNode father = null;
            GroupNode next   = null;
            GroupNode prev   = null;

            for (int j = 0; j < root.SubGroups.Count; j++)
            {
                if (root.SubGroups[j] != null)
                {
                    //ajusta os passos que estao desalinhados ate este ponto
                    // if ((j + 1 < root.SubGroups.Count) && root.SubGroups[j].Transitions.Last().Target.Name.Contains(root.SubGroups[j + 1].GroupName))
                    // {
                    //      root.SubGroups[j + 1].Transitions.Insert(0, root.SubGroups[j].Transitions.Last());
                    //      root.SubGroups[j].Transitions.RemoveAt(root.SubGroups[j].Transitions.Count - 1);
                    //  }

                    //seleciona o pai, este pai, pois caso o proximo seja filho, este ja é o pai dos proximos
                    if (root.SubGroups[j].Transitions.Count > 0 &&
                        !root.SubGroups[j].Transitions.Last().TaggedValues.ContainsKey("paramcycle"))
                    {
                        //ajusta a ref. dos irmaos pois quando trocar o pai, os irmaos nao terao a a mesma descendencia...
                        prev   = next = null;
                        father = root.SubGroups[j];
                    }


                    //identifica os filhos no subdiagrama...
                    if (root.SubGroups[j].Transitions.Count > 0 &&
                        root.SubGroups[j].Transitions.Last().TaggedValues.ContainsKey("paramcycle"))
                    {
                        root.SubGroups[j].Father      = father;
                        root.SubGroups[j].NextSibling = next;
                        root.SubGroups[j].PrevSibling = prev;

                        //ajusta a ref. do diagrama principal
                        father.SubGroups.Add(root.SubGroups[j]);
                        root.SubGroups[j] = null;
                    }
                }
            }

            //remove os realocados
            root.SubGroups.RemoveAll(g => g == null);

            foreach (GroupNode g in lista)
            {
                sw.WriteLine(scriptParser.parse(g));
            }
            //sw.WriteLine(scriptParser.parse(root));
        }
示例#12
0
        /// <returns>The file name of the compiled assembly.</returns>
        private Assembly _Compile(string[] files, HashSet <string> uniqueAssemblyReferences, ScriptSequence sequence)
        {
            IScriptModuleInstance language = sequence.Language;

            // Assembly references come in two flavors:
            // 1. Framework assemblies -- need only the file name.
            // 2. Other assemblies -- need the qualified file name.
            _errors.Clear();

            ICompilerParameters compilerParameters = new ScriptCompilerParameters {
                GenerateInMemory = true,
                //IncludeDebugInformation = true
            };

            compilerParameters.ReferencedAssemblies.AddRange(uniqueAssemblyReferences.ToArray());

            ICompilerResults results = language.CodeProvider.CompileAssemblyFromFile(compilerParameters, files);

            // Get any errors.
            foreach (ICompilerError error in results.Errors)
            {
                _errors.Add(string.Format("{0} [{1}]: {2}", Path.GetFileName(error.FileName), error.Line, error.ErrorText));
            }

            return(results.HasErrors ? null : results.CompiledAssembly);
        }
示例#13
0
 private XElement _WriteExternalAssemblies(ScriptSequence sequence)
 {
     return(new XElement("ExternalAssemblies", sequence.ExternalAssemblies.Select(x =>
                                                                                  new XElement("Assembly",
                                                                                               new XAttribute("name", x)))));
 }
示例#14
0
 private XElement _WriteFrameworkAssemblies(ScriptSequence sequence)
 {
     return(new XElement("FrameworkAssemblies", sequence.FrameworkAssemblies.Select(x =>
                                                                                    new XElement("Assembly",
                                                                                                 new XAttribute("name", x)))));
 }
示例#15
0
 private XElement _WriteClassName(ScriptSequence sequence)
 {
     return(new XElement("ClassName", sequence.ClassName));
 }
示例#16
0
 private XElement _WriteLanguage(ScriptSequence sequence)
 {
     return(new XElement("Language", sequence.Language));
 }
示例#17
0
 private void CreateWorkingProject(string[] files, HashSet <string> assemblyReferences, ScriptSequence sequence)
 {
     new ScriptProjectGenerator(files, assemblyReferences, sequence).Generate();
 }
 private void _ReadLanguage(XElement element, ScriptSequence scriptSequence)
 {
     scriptSequence.Language = element.Element("Language").Value;
 }
 private void _ReadClassName(XElement element, ScriptSequence scriptSequence)
 {
     scriptSequence.ClassName = element.Element("ClassName").Value;
 }