コード例 #1
0
        // トラック
        private void ReadTrack(MmlFileReader m)
        {
            List <string> TrackName = new List <string>();

            while (true)
            {
                var Name = m.ReadName();

                TrackName.Add(Name);

                m.SkipIfSpace();
                var ct = m.FetchType();
                if (ct == MmlCharactorType.Separator)
                {
                    m.SkipType();
                    continue;
                }
                break;
            }

            var TrackPos = m.GetPosition();

            for (var i = 0; i < TrackName.Count; i++)
            {
                if (i > 0)
                {
                    m.SetPosition(TrackPos);
                }
                var Name = TrackName[i];
                VerboseWriteLine($"--- Track: {Name} ---");
                ReadTrackText(Name, m);
            }
        }
コード例 #2
0
        private CommandData ReadName(TrackData Track, MmlFileReader m, CommandType Type)
        {
            var cmd = Track.AddCommand(Type);
            var t   = m.ReadName();

            cmd.Text = t;
            return(cmd);
        }
コード例 #3
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);
        }
コード例 #4
0
        // マクロ
        private void ReadMacro(MmlFileReader m)
        {
            // 位置を固定
            var Pos = m.GetPosition();

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

            VerboseWriteLine($"--- Macro: {Name} {Pos} ---");
            ReadTrackText(Name, m);
        }
コード例 #5
0
        // エフェクト
        private void ReadEffect(MmlFileReader m)
        {
            // 位置を固定
            var Pos = m.GetPosition();

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

            VerboseWriteLine($"--- Effect: {Name} {Pos} ---");
            if (!SkipUntilBlockStart(m))
            {
                return;
            }
            SkipUntilBlockEnd(m);
        }
コード例 #6
0
        // 音色
        private void ReadTone(MmlFileReader m)
        {
            // 位置を固定
            var Pos = m.GetPosition();

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

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

            if (!SkipUntilBlockStart(m))
            {
                return;
            }
            var Parameter = ReadToneParameter(m);

            Song.SetToneParameter(Name, Parameter);
        }