Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        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);
            }
        }