コード例 #1
0
        private ASTLiturgyLine ParseLiturgyLine(Lexer lexer)
        {
            lexer.GobbleWhitespace();

            LiturgySpeakers speaker     = LiturgySpeakers.None;
            string          speakertext = "";

            // look for speaker
            if (lexer.Inspect("P"))
            {
                speaker = LiturgySpeakers.Pastor;
            }
            else if (lexer.Inspect("A"))
            {
                speaker = LiturgySpeakers.Assistant;
            }
            else if (lexer.Inspect("L"))
            {
                speaker = LiturgySpeakers.Leader;
            }
            else if (lexer.Inspect("C"))
            {
                speaker = LiturgySpeakers.Congregation;
            }
            speakertext = lexer.Consume().Value;

            lexer.GobbleWhitespace();


            List <Word> linewords = new List <Word>();

            // until we find next speaker or EOF add to line
            while (!lexer.InspectEOF() && !lexer.Inspect("^[PALC]$", isRegex: true))
            {
                var t = lexer.Consume();

                Word w;

                // for now only special thing is a token 'T' should be a special char (escape it to get a normal 'T')
                if (t.Value == "T")
                {
                    if (t.IsEscaped)
                    {
                        w = new Word()
                        {
                            Value = t.Value, Format = TextFormat.None
                        };
                    }
                    else
                    {
                        w = new Word()
                        {
                            Value = t.Value, Format = TextFormat.None, Attributes = new Dictionary <string, string>()
                            {
                                ["LSBSymbol"] = "T"
                            }
                        };
                    }
                }
                else
                {
                    w = new Word()
                    {
                        Value = t.AsText, Format = TextFormat.None
                    };
                }

                linewords.Add(w);
            }

            return(new ASTLiturgyLine(speakertext, speaker, linewords));
        }
コード例 #2
0
ファイル: ASTLiturgyLine.cs プロジェクト: kjgriffin/BlueShark
 public ASTLiturgyLine(string speakertext, LiturgySpeakers speaker, List <Word> word)
 {
     SpeakerText = speakertext;
     Speaker     = speaker;
     Words       = word;
 }