示例#1
0
        public override int Parse(PlaineAndEasieParser parser, string s)
        {
            var matchingKey = octaves.Keys.OrderByDescending(k => k.Length).First(k => s.StartsWith(k));

            parser.CurrentOctave = octaves[matchingKey];
            return(matchingKey.Length);
        }
示例#2
0
        public override int Parse(PlaineAndEasieParser parser, string s)
        {
            parser.IsGroupingEnabled = false;
            parser.GroupSize         = 0;
            //TODO: Implement

            return(s.IndexOf(")") + 1);
        }
示例#3
0
        public override int Parse(PlaineAndEasieParser parser, string s)
        {
            var matchingKey = barlineTypes.Keys.OrderByDescending(k => k.Length).First(k => s.StartsWith(k));

            parser.AddBarline(barlineTypes[matchingKey]);
            parser.PendingAlter   = 0;
            parser.PendingNatural = false;
            parser.LastAddedStep  = default(char);

            return(matchingKey.Length);
        }
示例#4
0
        public override int Parse(PlaineAndEasieParser parser, string s)
        {
            if (s[0] == 'x')
            {
                parser.PendingAlter++;
            }
            else if (s[0] == 'b')
            {
                parser.PendingAlter--;
            }
            else if (s[0] == 'n')
            {
                parser.PendingNatural = true;
            }

            return(1);
        }
示例#5
0
        public override int Parse(PlaineAndEasieParser parser, string s)
        {
            var hasTrill = false;
            var hasSlur  = false;

            var i    = 0;
            var step = s[i++];

            for (; i < s.Length; i++)
            {
                if (s[i] == 't')
                {
                    hasTrill = true;
                }
                else if (s[i] == '+')
                {
                    hasSlur = true;
                }
                else
                {
                    break;
                }
            }

            if (parser.LastAddedStep != default(char) && parser.LastAddedStep != step)
            {
                parser.PendingAlter   = 0;
                parser.PendingNatural = false;
            }

            parser.AddNote(step, parser.PendingAlter, parser.PendingNatural, hasTrill, hasSlur);
            parser.LastAddedStep = step;
            if (parser.IsGroupingEnabled)
            {
                parser.GroupSize++;
            }

            return(i);
        }
示例#6
0
        public override int Parse(PlaineAndEasieParser parser, string s)
        {
            var matchingSignature = specialSignatures.OrderByDescending(ss => s.Length).FirstOrDefault(ss => s.StartsWith(ss));

            if (matchingSignature != null)
            {
                parser.AddTimeSignature(matchingSignature, 0, 0);
                return(matchingSignature.Length);
            }

            var length    = DetermineLength(s);
            var substring = s.Substring(0, length);
            var parts     = substring.Split('/') ?? new string[0];

            if (parts.Length != 2)
            {
                if (substring.Trim() == "3")
                {
                    parser.AddTimeSignature(substring, 3, 4);                           //Case when 3/4 is written as '3'
                }
                else
                {
                    parser.AddTimeSignature(substring, 0, 0);
                }
            }
            else
            {
                if (!int.TryParse(parts[0], out int numerator) || !int.TryParse(parts[1], out int denominator))
                {
                    parser.AddTimeSignature(substring, 0, 0);
                }
                else
                {
                    parser.AddTimeSignature(null, numerator, denominator);
                }
            }

            return(length);
        }