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); }