Exemplo n.º 1
0
        // ヘッダ
        private void ReadHeader(MmlFileReader m)
        {
            var Pos = m.GetPosition();

            m.StepNextCharacter();
            var Name = m.ReadName();

            VerboseWriteLine($"--- Header: {Name} {Pos} ---");

            List <string> Parameter = new List <string>();

            bool SkipSeparator = false;

            while (!m.IsEof())
            {
                var ct = SkipSpaceAndFetch(m);
                if (m.IsLineEnd(ct))
                {
                    break;                  // 改行は終了
                }
                if (SkipSeparator && m.IsSeparator(ct))
                {
                    ct = m.ReadNextType();
                }
                if (m.IsSpace(ct))
                {
                    ct = m.ReadNextType();
                }
                if (m.IsLineEnd(ct))
                {
                    break;                  // 改行は終了
                }
                if (ct != MmlCharactorType.GeneralChanacter)
                {
                    Error.Add(ErrorData.Type.UnknownCharacterUsed);
                    return;
                }

                string t;
                if (m.IsQuote())
                {
                    t = m.ReadQuote();
                    if (t == null)
                    {
                        Error.Add(ErrorData.Type.QuoteEndNotFound);
                        return;
                    }
                }
                else
                {
                    t = m.ReadUntilNext();
                }
                SkipSeparator = true;
                Parameter.Add(t);
            }

            Header.Set(Song, Name, Parameter);
        }
Exemplo n.º 2
0
        /// <summary>
        /// トラック処理
        /// </summary>

        private void ReadCommandUntilNextTrack(TrackData Track, MmlFileReader m, bool Block = false)
        {
            while (!Error.HasError)
            {
                var ct = m.FetchType();
                // EOF
                if (ct == MmlCharactorType.Eof)
                {
                    if (Block)
                    {
                        Error.Add(ErrorData.Type.BlockEndNotFound);
                    }
                    return;
                }

                // 改行
                if (ct == MmlCharactorType.NextLine)
                {
                    m.SkipType();
                    if (Block)
                    {
                        continue;
                    }
                    return;
                }

                // 改行
                if (m.IsSpace(ct) || m.IsComment(ct))
                {
                    m.SkipType();
                    continue;
                }

                // ブロック終了
                if (ct == MmlCharactorType.BlockEnd)
                {
                    if (!Block)
                    {
                        Error.Add(ErrorData.Type.UnknownCharacterUsed); return;
                    }
                    m.SkipType();
                    m.StepNextLine();
                    return;
                }

                // トラックコマンド
                if (ct == MmlCharactorType.GeneralChanacter)
                {
                    Command.Make(Song, Track, m);
                    var lc = Track.GetLastCommand();
                    if (lc != null)
                    {
                        VerboseWriteLine(lc.ToString());
                    }
                }
                else
                {
                    Error.Add(ErrorData.Type.UnknownCharacterUsed); return;
                }
            }
        }