Пример #1
0
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTProgram p = new XenonASTProgram();

            // gaurd against empty file
            if (Lexer.InspectEOF())
            {
                Logger.Log(new XenonCompilerMessage()
                {
                    Level = XenonCompilerMessageType.Message, ErrorName = "Empty Project", ErrorMessage = "Program contains no symbols.", Token = Lexer.EOFText
                });
                return(p);
            }
            do
            {
                XenonASTExpression expr = new XenonASTExpression();
                Lexer.GobbleWhitespace();
                expr = (XenonASTExpression)expr.Compile(Lexer, Logger);
                if (expr != null)
                {
                    p.Expressions.Add(expr);
                }
                Lexer.GobbleWhitespace();
            } while (!Lexer.InspectEOF());

            return(p);
        }
Пример #2
0
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTHymnVerse verse = new XenonASTHymnVerse();

            Lexer.GobbleWhitespace();

            // optionally allow params for verse title. used for e.g. 'chorus'/'refrain'/'verse 1' etc.
            if (Lexer.Inspect("("))
            {
                Lexer.Consume();
                verse.SubName = Lexer.ConsumeUntil(")").Trim();
                Lexer.Consume();
                Lexer.GobbleWhitespace();
            }

            Lexer.GobbleandLog("{", "Expect opening brace at start of verse.");

            while (!Lexer.Inspect("}"))
            {
                XenonASTContent content = new XenonASTContent()
                {
                    TextContent = Lexer.Consume()
                };
                verse.Content.Add(content);
            }

            Lexer.GobbleandLog("}", "Missing closing brace for verse.");

            return(verse);
        }
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTAutoFitImage fullimage = new XenonASTAutoFitImage();

            Lexer.GobbleWhitespace();
            var args = Lexer.ConsumeArgList(false, "asset");

            fullimage.AssetName = args["asset"];

            Lexer.GobbleWhitespace();

            InvertColor = false;
            if (!Lexer.InspectEOF())
            {
                if (Lexer.Inspect("("))
                {
                    Lexer.Consume();
                    string val = Lexer.ConsumeUntil(")");
                    if (val == "true")
                    {
                        fullimage.InvertColor = true;
                    }
                    Lexer.Consume();
                    Lexer.GobbleWhitespace();
                }
            }
            if (!Lexer.InspectEOF())
            {
                if (Lexer.Inspect("["))
                {
                    Lexer.Consume();
                    if (Lexer.Inspect("("))
                    {
                        Lexer.Consume();
                        fullimage.Options = Lexer.ConsumeUntil(")");
                        Lexer.Consume();
                        Lexer.Consume();
                        Lexer.GobbleWhitespace();
                    }
                    else
                    {
                        fullimage.KeyType = Lexer.ConsumeUntil("]");
                        Lexer.Consume();
                        Lexer.GobbleWhitespace();
                    }
                }
            }

            return(fullimage);
        }
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTElementCollection liturgys = new XenonASTElementCollection();

            // assume all tokens inside braces are litrugy commands
            // only excpetions are we will gobble all leading whitespace in braces, and will remove the last
            // character of whitespace before last brace


            Lexer.GobbleWhitespace();

            // optional params
            if (Lexer.Inspect("("))
            {
                var args = Lexer.ConsumeArgList(false, "startnewline");
                if (args["startnewline"] == "true")
                {
                    ForceSpeakerStartOnNewline = true;
                }
                Lexer.GobbleWhitespace();
            }

            Lexer.GobbleandLog("{", "Expected opening brace at start of liturgy.");
            Lexer.GobbleWhitespace();
            XenonASTLiturgy liturgy = CompileSubContent(Lexer, Logger);

            liturgys.Elements.Add(liturgy);
            while (!Lexer.Inspect("}"))
            {
                Lexer.GobbleandLog("#", "Only '#break' command recognized in '#liturgy' block");
                if (Lexer.Inspect("break"))
                {
                    Lexer.GobbleandLog("break");
                    Lexer.GobbleWhitespace();
                }
                else
                {
                    Logger.Log(new XenonCompilerMessage()
                    {
                        ErrorMessage = "Expected Command 'break'", ErrorName = "Unrecognized Command", Generator = "Compiler - XenonASTLiturgy", Inner = "", Level = XenonCompilerMessageType.Error, Token = Lexer.CurrentToken
                    });
                }
                liturgy = CompileSubContent(Lexer, Logger);
                liturgys.Elements.Add(liturgy);
            }
            Lexer.GobbleandLog("}", "Missing closing brace for liturgy.");
            return(liturgys);
        }
Пример #5
0
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTSlideBreak slidebreak = new XenonASTSlideBreak();

            Lexer.GobbleWhitespace();
            return(slidebreak);
        }
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTTextHymn textHymn = new XenonASTTextHymn();

            Lexer.GobbleWhitespace();

            var args = Lexer.ConsumeArgList(true, "title", "name", "tune", "number", "copyright");

            textHymn.HymnTitle     = args["title"];
            textHymn.HymnName      = args["name"];
            textHymn.Tune          = args["tune"];
            textHymn.Number        = args["number"];
            textHymn.CopyrightInfo = args["copyright"];

            if (Lexer.Inspect("("))
            {
                Lexer.Consume();
                string sisoverlay = Lexer.ConsumeUntil(")");
                bool   isoverlay;
                bool.TryParse(sisoverlay, out isoverlay);
                textHymn.IsOverlay = isoverlay;
                Lexer.Consume();
            }

            Lexer.GobbleWhitespace();
            Lexer.GobbleandLog("{", "Expect opening brace for body of hymn. Verses go here");
            Lexer.GobbleWhitespace();

            while (Lexer.Inspect("#"))
            {
                Lexer.GobbleandLog("#", "Expecting '#verse' command");
                // only valid command at this point (so far) is a verse
                if (Lexer.Inspect(LanguageKeywords.Commands[LanguageKeywordCommand.Verse]))
                {
                    Lexer.GobbleandLog(LanguageKeywords.Commands[LanguageKeywordCommand.Verse], "Only verse command is valid here");
                    XenonASTHymnVerse verse = new XenonASTHymnVerse();
                    textHymn.Verses.Add((XenonASTHymnVerse)verse.Compile(Lexer, Logger));
                }
                Lexer.GobbleWhitespace();
            }

            Lexer.GobbleWhitespace();
            Lexer.GobbleandLog("}", "Missing closing brace on hymn command.");


            return(textHymn);
        }
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTLiturgyImage litimage = new XenonASTLiturgyImage();

            Lexer.GobbleWhitespace();
            var args = Lexer.ConsumeArgList(false, "asset");

            litimage.AssetName = args["asset"];
            return(litimage);
        }
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTReading reading = new XenonASTReading();

            Lexer.GobbleWhitespace();
            var args = Lexer.ConsumeArgList(true, "name", "reference");

            reading.Name      = args["name"];
            reading.Reference = args["reference"];
            return(reading);
        }
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTElementCollection litverses = new XenonASTElementCollection();

            // assume all tokens inside braces are litrugy commands
            // only excpetions are we will gobble all leading whitespace in braces, and will remove the last
            // character of whitespace before last brace


            Lexer.GobbleWhitespace();
            var args = Lexer.ConsumeArgList(true, "title", "reference");

            Title     = args["title"];
            Reference = args["reference"];
            Lexer.GobbleWhitespace();
            Lexer.GobbleandLog("{", "Expected opening brace at start of litverse.");
            Lexer.GobbleWhitespace();
            XenonASTLiturgyVerse litverse = CompileSubContent(Lexer, Logger);

            litverses.Elements.Add(litverse);
            while (!Lexer.Inspect("}"))
            {
                Lexer.GobbleandLog("#", "Only '#break' command recognized in '#litverse' block");
                if (Lexer.Inspect("break"))
                {
                    Lexer.GobbleandLog("break");
                    Lexer.GobbleWhitespace();
                }
                else
                {
                    Logger.Log(new XenonCompilerMessage()
                    {
                        ErrorMessage = "Expected Command 'break'", ErrorName = "Unrecognized Command", Generator = "Compiler - XenonASTLitVerse", Inner = "", Level = XenonCompilerMessageType.Error, Token = Lexer.CurrentToken
                    });
                }
                litverse = CompileSubContent(Lexer, Logger);
                litverses.Elements.Add(litverse);
            }
            Lexer.GobbleandLog("}", "Missing closing brace for litverse.");
            return(litverses);
        }
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTFitImage fullimage = new XenonASTFitImage();

            Lexer.GobbleWhitespace();
            var args = Lexer.ConsumeArgList(false, "asset");

            fullimage.AssetName = args["asset"];
            if (!Lexer.InspectEOF())
            {
                if (Lexer.Inspect("["))
                {
                    Lexer.Consume();
                    fullimage.KeyType = Lexer.ConsumeUntil("]");
                    Lexer.Consume();
                    Lexer.GobbleWhitespace();
                }
            }

            return(fullimage);
        }
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTVideo video = new XenonASTVideo();

            Lexer.GobbleWhitespace();
            StringBuilder sb   = new StringBuilder();
            var           args = Lexer.ConsumeArgList(false, "assetname");

            video.AssetName = args["assetname"];
            if (!Lexer.InspectEOF())
            {
                if (Lexer.Inspect("["))
                {
                    Lexer.Consume();
                    video.KeyType = Lexer.ConsumeUntil("]");
                    Lexer.Consume();
                    Lexer.GobbleWhitespace();
                }
            }
            return(video);
        }
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTScript script = new XenonASTScript();

            Lexer.GobbleWhitespace();
            StringBuilder sb = new StringBuilder();

            Lexer.GobbleandLog("{");
            Lexer.GobbleWhitespace();
            while (!Lexer.InspectEOF())
            {
                sb.Append(Lexer.Consume());
                if (Lexer.Inspect("}"))
                {
                    script.Source = sb.ToString();
                    Lexer.Consume();
                    break;
                }
            }
            return(script);
        }
Пример #13
0
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTSermon sermon = new XenonASTSermon();

            Lexer.GobbleWhitespace();

            var args = Lexer.ConsumeArgList(true, "title", "reference", "preacher");

            sermon.Title     = args["title"];
            sermon.Reference = args["reference"];
            sermon.Preacher  = args["preacher"];
            return(sermon);
        }