protected virtual TemplateGroup LoadTemplates() { TemplateGroup result = new TemplateGroupFile( Path.Combine( Path.GetDirectoryName(typeof(AntlrTool).GetTypeInfo().Assembly.Location), Path.Combine(CodeGenerator.TEMPLATE_ROOT, GetLanguage(), GetLanguage() + TemplateGroup.GroupFileExtension)), Encoding.UTF8); result.RegisterRenderer(typeof(int), new NumberRenderer()); result.RegisterRenderer(typeof(string), new StringRenderer()); result.Listener = new ErrorListener(this); return(result); }
protected override TemplateGroup LoadTemplates() { // override the superclass behavior to put all C# templates in the same folder TemplateGroup result = new TemplateGroupFile( Path.Combine( Path.GetDirectoryName(typeof(AntlrTool).GetTypeInfo().Assembly.Location), Path.Combine(CodeGenerator.TEMPLATE_ROOT, "CSharp", GetLanguage() + TemplateGroup.GroupFileExtension)), Encoding.UTF8); result.RegisterRenderer(typeof(int), new NumberRenderer()); result.RegisterRenderer(typeof(string), new StringRenderer()); result.Listener = new ErrorListener(this); return(result); }
public void TestRendererWithPredefinedFormat() { string templates = "dateThing(created) ::= << datetime: <created; format=\"short\"> >>\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.RegisterRenderer(typeof(DateTime), new DateRenderer()); group.RegisterRenderer(typeof(DateTimeOffset), new DateRenderer()); Template st = group.GetInstanceOf("dateThing"); st.Add("created", new DateTime(2005, 07, 05)); string expecting = " datetime: 7/5/2005 12:00 AM "; string result = st.Render(); Assert.AreEqual(expecting, result); }
public void TestRendererWithFormat() { string templates = "dateThing(created) ::= << date: <created; format=\"yyyy.MM.dd\"> >>\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.RegisterRenderer(typeof(DateTime), new DateRenderer()); group.RegisterRenderer(typeof(DateTimeOffset), new DateRenderer()); Template st = group.GetInstanceOf("dateThing"); st.Add("created", new DateTime(2005, 7, 5)); string expecting = " date: 2005.07.05 "; string result = st.Render(); Assert.AreEqual(expecting, result); }
public void TestRendererForGroup() { string templates = "dateThing(created) ::= \"datetime: <created>\"\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.RegisterRenderer(typeof(DateTime), new DateRenderer()); group.RegisterRenderer(typeof(DateTimeOffset), new DateRenderer()); Template st = group.GetInstanceOf("dateThing"); st.Add("created", new DateTime(2005, 7, 5)); string expecting = "datetime: 07/05/2005 00:00"; string result = st.Render(); Assert.AreEqual(expecting, result); }
public void TestNumberRendererWithPrintfFormat() { //string templates = "foo(x,y) ::= << <x; format=\"%d\"> <y; format=\"%2.3f\"> >>\n"; string templates = "foo(x,y) ::= << <x; format=\"{0}\"> <y; format=\"{0:0.000}\"> >>\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.RegisterRenderer(typeof(int), new NumberRenderer()); group.RegisterRenderer(typeof(double), new NumberRenderer()); Template st = group.GetInstanceOf("foo"); st.Add("x", -2100); st.Add("y", 3.14159); string expecting = " -2100 3.142 "; string result = st.Render(); Assert.AreEqual(expecting, result); }
public void TestLocaleWithNumberRenderer() { //string templates = "foo(x,y) ::= << <x; format=\"%,d\"> <y; format=\"%,2.3f\"> >>\n"; string templates = "foo(x,y) ::= << <x; format=\"{0:#,#}\"> <y; format=\"{0:0.000}\"> >>\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.RegisterRenderer(typeof(int), new NumberRenderer()); group.RegisterRenderer(typeof(double), new NumberRenderer()); Template st = group.GetInstanceOf("foo"); st.Add("x", -2100); st.Add("y", 3.14159); // Polish uses ' ' (ASCII 160) for ',' and ',' for '.' string expecting = " -2 100 3,142 "; // Ê string result = st.Render(new CultureInfo("pl")); Assert.AreEqual(expecting, result); }
public void TestInstanceofRenderer() { string templates = "numberThing(x,y,z) ::= \"numbers: <x>, <y>; <z>\"\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.RegisterRenderer(typeof(int), new NumberRenderer()); group.RegisterRenderer(typeof(double), new NumberRenderer()); Template st = group.GetInstanceOf("numberThing"); st.Add("x", -2100); st.Add("y", 3.14159); st.Add("z", "hi"); string expecting = "numbers: -2100, 3.14159; hi"; string result = st.Render(); Assert.AreEqual(expecting, result); }
public void TestStringRendererWithFormat_xml_encode_null() { string templates = "foo(x) ::= << <x; format=\"xml-encode\"> >>\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.RegisterRenderer(typeof(string), new StringRenderer()); Template st = group.GetInstanceOf("foo"); st.Add("x", null); string expecting = " "; string result = st.Render(); Assert.AreEqual(expecting, result); }
public void TestStringRendererWithFormat_cap_emptyValue() { string templates = "foo(x) ::= << <x; format=\"cap\"> >>\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.RegisterRenderer(typeof(string), new StringRenderer()); Template st = group.GetInstanceOf("foo"); st.Add("x", ""); string expecting = " ";//FIXME: why not two spaces? string result = st.Render(); Assert.AreEqual(expecting, result); }
public void TestStringRendererWithSubtemplateInclude_cap() { // must toString the t() ref before applying format string templates = "foo(x) ::= << <({ack}); format=\"cap\"> >>\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); //Interpreter.trace = true; group.RegisterRenderer(typeof(string), new StringRenderer()); Template st = group.GetInstanceOf("foo"); st.Add("x", "hi"); string expecting = " Ack "; string result = st.Render(); Assert.AreEqual(expecting, result); }
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); } }