예제 #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);
        }
예제 #2
0
        // 音色を読み出す
        private int[] ReadToneParameter(MmlFileReader m)
        {
            List <int> Parameter     = new List <int>();
            bool       SkipSeparator = false;

            while (true)
            {
                m.SkipSkipable();
                var ct = m.FetchType();
                // EOF
                if (ct == MmlCharactorType.Eof)
                {
                    Error.Add(ErrorData.Type.BlockEndNotFound);
                    return(null);
                }

                // Separator
                if (ct == MmlCharactorType.Separator)
                {
                    VerboseWriteLine($"{m.GetPosition()} {ct}");
                    if (!SkipSeparator)
                    {
                        SkipSeparator = false; Parameter.Add(0);
                    }
                    m.SkipType();
                    continue;
                }

                if (m.IsLineEnd(ct) || m.IsComment(ct))
                {
                    m.SkipType(); continue;
                }

                if (ct == MmlCharactorType.GeneralChanacter)
                {
                    SkipSeparator = true;
                    VerboseWriteLine($"{m.GetPosition()} {ct}");
                    Parameter.Add(ReadParameter(m));
                    continue;
                }


                if (ct == MmlCharactorType.BlockEnd)
                {
                    m.SkipType();
                    m.StepNextLine();
                    return(Parameter.ToArray());
                }

                Error.Add(ErrorData.Type.UnknownCharacterUsed);
                return(null);
            }
        }