Example #1
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);
        }
        private XenonASTLiturgyVerse CompileSubContent(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTLiturgyVerse liturgy = new XenonASTLiturgyVerse();

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

            return(liturgy);
        }