public void TestImportGroupPreservesDelimiters() { string groupFile = "group GenerateHtml;" + newline + "import \"HtmlTemplates.stg\"" + newline + "entry() ::= <<" + newline + "$html()$" + newline + ">>" + newline; string htmlFile = "html() ::= <<" + newline + "<table style=\"stuff\">" + newline + ">>" + newline; string dir = tmpdir; writeFile(dir, "GenerateHtml.stg", groupFile); writeFile(dir, "HtmlTemplates.stg", htmlFile); TemplateGroup group = new TemplateGroupFile(dir + "/GenerateHtml.stg", '$', '$'); // test html template directly Template st = group.GetInstanceOf("html"); Assert.IsNotNull(st); string expected = "<table style=\"stuff\">"; string result = st.Render(); Assert.AreEqual(expected, result); // test from entry template st = group.GetInstanceOf("entry"); Assert.IsNotNull(st); expected = "<table style=\"stuff\">"; result = st.Render(); Assert.AreEqual(expected, result); }
public void TestNestedWithIndentAndTrackStartOfExpr() { string templates = "top(d) ::= << <d>!>>" + newline + "duh(chars) ::= <<" + newline + "x: <chars; anchor, wrap=\"\\n\">" + newline + ">>" + newline; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); Template top = group.GetInstanceOf("top"); Template duh = group.GetInstanceOf("duh"); duh.Add("chars", new string[] { "a", "b", "c", "d", "e" }); top.Add("d", duh); // string expecting = " x: ab" + Environment.NewLine + " cd" + Environment.NewLine + " e!"; Assert.AreEqual(expecting, top.Render(7)); }
public void TestNestedIndentedExpr() { string templates = "top(d) ::= << <d>!>>" + newline + "duh(chars) ::= <<" + newline + " <chars; wrap=\"\\n\">" + newline + ">>" + newline; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); Template top = group.GetInstanceOf("top"); Template duh = group.GetInstanceOf("duh"); duh.Add("chars", new string[] { "a", "b", "c", "d", "e" }); top.Add("d", duh); string expecting = " ab" + Environment.NewLine + " cd" + Environment.NewLine + " e!"; // width=4 spaces + 2 char. Assert.AreEqual(expecting, top.Render(6)); }
public void TestImportTemplateInGroupFileFromGroupFile() { string dir = tmpdir; string groupFile = "a() ::= \"g1 a\"\n" + "b() ::= \"<c()>\"\n"; writeFile(dir, Path.Combine("x", "group.stg"), groupFile); groupFile = "b() ::= \"g2 b\"\n" + "c() ::= \"g2 c\"\n"; writeFile(dir, Path.Combine("y", "group.stg"), groupFile); TemplateGroup group1 = new TemplateGroupFile(Path.Combine(dir, "x", "group.stg")); TemplateGroup group2 = new TemplateGroupFile(Path.Combine(dir, "y", "group.stg")); group1.ImportTemplates(group2); Template st = group1.GetInstanceOf("b"); string expected = "g2 c"; string result = st?.Render(); Assert.AreEqual(expected, result); }
public void TestEmptyGroupImportGroupFileSameDir() { /* * dir * group1.stg that imports group2.stg in same dir with just filename * group2.stg has c() */ string dir = tmpdir; string groupFile = "import \"group2.stg\"\n"; writeFile(dir, "group1.stg", groupFile); groupFile = "c() ::= \"g2 c\"\n"; writeFile(dir, "group2.stg", groupFile); TemplateGroup group1 = new TemplateGroupFile(Path.Combine(dir, "group1.stg")); Template st = group1.GetInstanceOf("c"); // should see c() string expected = "g2 c"; string result = st?.Render(); Assert.AreEqual(expected, result); }
static void Main(string[] args) { List <string> names = new List <string>(); int _errorCount = 0; string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location); var options = new Options(); ICommandLineParser clp = new CommandLineParser(new CommandLineParserSettings(true, Console.Error)); if (!clp.ParseArguments(args, options)) { Environment.Exit(1); } #if !ANTLR #if REV4 Parser4 p = new Parser4(); #else Parser3 p = new Parser3(); #endif p.OutputPath = options.OutputDir; #endif Console.WriteLine("Initializing..."); TemplateGroupFile loader = new TemplateGroupFile(path, null); loader.Load(); // TemplateGroupString templates = loader.Compile() ;//"cpp2");//, typeof(TemplateLexer), null); // templates.Listener = new ErrorListener(); if (options.Recurse) { string rootpath = options.InputFile; if (!rootpath.EndsWith("\\")) { rootpath += @"\"; } Console.WriteLine("Processing..."); AS3TParser parser; string[] files = Directory.GetFiles(options.InputFile, "*.as", SearchOption.AllDirectories); foreach (string f in files) { #if ANTLR AS3TLexer lex = new AS3TLexer(new ANTLRFileStream(f)); //CommonTokenStream tokens = new CommonTokenStream(lex); TokenRewriteStream tokens = new TokenRewriteStream(lex); //CommonTokenStream tokens = new CommonTokenStream(lex); parser = new AS3TParser(tokens); parser.TemplateGroup = templates; parser.OutputPath = options.OutputDir; try { parser.program(); if (options.VerboseLevel > 2) { Console.WriteLine("calling generateSource {0}", parser.Classname); } generateSource(options, tokens, parser.Classname); if (options.VerboseLevel > 2) { Console.WriteLine("calling generateHeader {0}", parser.Classname); } generateHeader(options, tokens, parser.Classname, parser.Basetype, parser.SymTable); parser.Reset(); } catch (NoViableAltException e) { Console.WriteLine("{0} {1}", e.Line, e.Message); _errorCount += 1; } catch (RewriteEmptyStreamException e) { if (options.VerboseLevel > 2) { Console.WriteLine(e.Message); } _errorCount += 1; } catch (ArgumentException e) { Console.WriteLine("{0} {1}", e.Source, e.Message); _errorCount += 1; } catch (NullReferenceException e) { Console.WriteLine("{0} {1}", e.Source, e.Message); _errorCount += 1; } #else Console.WriteLine("{0}", f); p.Parse(f); #endif } Console.WriteLine("xas done. {0} file(s) processed, {1} Error(s)", files.Length, _errorCount); #if DEBUG Console.ReadKey(); #endif } else { #if ANTLR AS3TLexer lex = new AS3TLexer(new ANTLRFileStream(options.InputFile)); TokenRewriteStream tokens = new TokenRewriteStream(lex); AS3TParser parser = new AS3TParser(tokens); parser.TemplateGroup = templates; parser.OutputPath = options.OutputDir; //parser.TemplateGroup = templates. try { parser.program(); generateSource(options, tokens, parser.Classname); generateHeader(options, tokens, parser.Classname, parser.Basetype, parser.SymTable); parser.Reset(); } catch (NoViableAltException e) { if (options.VerboseLevel > 2) { Console.WriteLine(e.Message); } } catch (RewriteEmptyStreamException e) { if (options.VerboseLevel > 2) { Console.WriteLine(e.Message); } } catch (ArgumentException e) { if (options.VerboseLevel > 2) { Console.WriteLine(e.Message); } } catch (NullReferenceException e) { if (options.VerboseLevel > 2) { Console.WriteLine(e.Message); } } Console.WriteLine("xas done. {0} file(s) processed, {1} Error(s)", 1, _errorCount); #if DEBUG Console.ReadKey(); #endif #else p.Parse(options.InputFile); #endif } }
internal void Generate(Repository repository, DirectoryInfo outputDirectory) { TemplateGroup templateGroup = new TemplateGroupFile(this.fileInfo.FullName, '$', '$'); templateGroup.ErrorManager = new ErrorManager(new LogAdapter()); var configurationTemplate = templateGroup.GetInstanceOf(TemplateConfiguration); configurationTemplate.Add(RepositoryKey, repository); var configurationXml = new XmlDocument(); configurationXml.LoadXml(configurationTemplate.Render()); var location = new Location(outputDirectory); foreach (XmlElement generation in configurationXml.DocumentElement.SelectNodes(GenerationKey)) { var templateName = generation.GetAttribute(TemplateKey); var template = templateGroup.GetInstanceOf(templateName); var output = generation.GetAttribute(OutputKey); template.Add(RepositoryKey, repository); if (generation.HasAttribute(InputKey)) { //var input = new Guid(generation.GetAttribute(InputKey)); //var objectType = repository.Find(input) as IObjectType; //if (objectType != null) //{ // template.Add(ObjectTypeKey, objectType); //} //else //{ // var relationType = repository.Find(input) as RelationType; // if (relationType != null) // { // template.Add(RelationTypeKey, relationType); // } // else // { // var inheritance = repository.Find(input) as Inheritance; // if (inheritance != null) // { // template.Add(InheritanceKey, inheritance); // } // else // { // var methodType = repository.Find(input) as MethodType; // if (methodType != null) // { // template.Add(MethodTypeKey, methodType); // } // else // { // throw new ArgumentException(input + " was not found"); // } // } // } //} } var result = template.Render(); location.Save(output, result); } }
internal void Generate(MetaPopulation metaPopulation, DirectoryInfo outputDirectory, Log log) { var validation = metaPopulation.Validate(); if (validation.ContainsErrors) { log.Error(this, "Meta population has validation errors."); foreach (var error in validation.Errors) { log.Error(this, error.Message); } return; } try { TemplateGroup templateGroup = new TemplateGroupFile(this.fileInfo.FullName, '$', '$'); templateGroup.ErrorManager = new ErrorManager(new LogAdapter(log)); var configurationTemplate = templateGroup.GetInstanceOf(TemplateConfiguration); configurationTemplate.Add(MetaKey, metaPopulation); var configurationXml = new XmlDocument(); configurationXml.LoadXml(configurationTemplate.Render()); var location = new Location(outputDirectory); foreach (XmlElement generation in configurationXml.DocumentElement.SelectNodes(GenerationKey)) { var templateName = generation.GetAttribute(TemplateKey); var template = templateGroup.GetInstanceOf(templateName); var output = generation.GetAttribute(OutputKey); template.Add(MetaKey, metaPopulation); if (generation.HasAttribute(InputKey)) { var input = new Guid(generation.GetAttribute(InputKey)); var objectType = metaPopulation.Find(input) as IObjectType; if (objectType != null) { template.Add(ObjectTypeKey, objectType); } else { var relationType = metaPopulation.Find(input) as RelationType; if (relationType != null) { template.Add(RelationTypeKey, relationType); } else { var inheritance = metaPopulation.Find(input) as Inheritance; if (inheritance != null) { template.Add(InheritanceKey, inheritance); } else { var methodType = metaPopulation.Find(input) as MethodType; if (methodType != null) { template.Add(MethodTypeKey, methodType); } else { throw new ArgumentException(input + " was not found"); } } } } //TODO: Super Domains } var result = template.Render(); location.Save(output, result); } } catch (Exception e) { log.Error(this, "Generation error : " + e.Message + "\n" + e.StackTrace); } }
internal void Generate(Domain domain, Settings settings, DirectoryInfo outputDirectory, Log log) { //if (!domain.IsValid) //{ // log.Error(this, "Domain " + domain + " has validation errors."); // return; //} try { Repository.CheckAllorsVersion(this.Allors, this.fileInfo.Name); } catch (Exception e) { log.Error(this, e.Message); } try { TemplateGroup group = new TemplateGroupFile(this.fileInfo.FullName, '$', '$'); group.ErrorManager = new ErrorManager(new LogAdapter(log)); var configurationTemplate = group.GetInstanceOf(TemplateConfiguration); configurationTemplate.Add(DomainKey, domain); configurationTemplate.Add(SettingsKey, settings.CreateIndexedObject()); var configurationXml = new XmlDocument(); configurationXml.LoadXml(configurationTemplate.Render()); var location = new Location(outputDirectory); foreach (XmlElement generation in configurationXml.DocumentElement.SelectNodes(GenerationKey)) { var template = group.GetInstanceOf(generation.GetAttribute(TemplateKey)); var output = generation.GetAttribute(OutputKey); template.Add(DomainKey, domain); template.Add(SettingsKey, settings.CreateIndexedObject()); if (generation.HasAttribute(InputKey)) { var input = new Guid(generation.GetAttribute(InputKey)); var objectType = domain.Domain.Find(input) as ObjectType; if (objectType != null) { template.Add(ObjectTypeKey, objectType); } else { var relationType = domain.Domain.Find(input) as RelationType; if (relationType != null) { template.Add(RelationTypeKey, relationType); } else { var inheritance = domain.Domain.Find(input) as Inheritance; if (inheritance != null) { template.Add(InheritanceKey, inheritance); } else { throw new ArgumentException(input + " was not found"); } } } //TODO: Super Domains } var result = template.Render(); location.Save(output, result); } } catch (Exception e) { log.Error(this, "Generation error : " + e.Message + "\n" + e.StackTrace); } }
internal void Generate(Model model, DirectoryInfo outputDirectory, Log log) { var validation = model.Validate(); if (validation.HasErrors) { log.Error(this, "Model has validation errors."); foreach (var error in validation.Errors) { log.Error(this, error); } return; } try { TemplateGroup templateGroup = new TemplateGroupFile(this.fileInfo.FullName, '$', '$') { ErrorManager = new ErrorManager(new LogAdapter(log)), }; templateGroup.RegisterRenderer(typeof(string), new StringRenderer()); var configurationTemplate = templateGroup.GetInstanceOf(TemplateConfiguration); configurationTemplate.Add(ModelKey, model); var configurationXml = new XmlDocument(); configurationXml.LoadXml(configurationTemplate.Render()); var outputs = new HashSet <string>(); var location = new Location(outputDirectory); foreach (XmlElement generation in configurationXml.DocumentElement.SelectNodes(GenerationKey)) { var templateName = generation.GetAttribute(TemplateKey); var template = templateGroup.GetInstanceOf(templateName); var output = generation.GetAttribute(OutputKey); var initialOutput = output; for (var i = 2; outputs.Contains(output); i++) { const char separator = '.'; var split = initialOutput.Split(separator); split[0] = split[0] + "_" + i; output = string.Join(separator, split); } outputs.Add(output); template.Add(ModelKey, model); if (generation.HasAttribute(InputKey)) { var input = generation.GetAttribute(InputKey); switch (input) { case MenuKey: template.Add(MenuKey, model.Menu); break; default: var project = model.Project; if (project.DirectiveById.TryGetValue(input, out var directive)) { template.Add(DirectiveKey, directive); } break; } } var result = template.Render(); location.Save(output, result); } } catch (Exception e) { log.Error(this, "Generation error : " + e.Message + "\n" + e.StackTrace); } }