Exemple #1
0
        internal static ParsingResult TryParse(string input, out Interval interval)
        {
            interval = null;

            if (string.IsNullOrWhiteSpace(input))
            {
                return(ParsingResult.EmptyInputString);
            }

            var match = ParsingUtilities.Match(input, Patterns);

            if (match == null)
            {
                return(ParsingResult.NotMatched);
            }

            int halfSteps;

            if (!ParsingUtilities.ParseInt(match, HalfStepsGroupName, 0, out halfSteps) ||
                !IntervalUtilities.IsIntervalValid(halfSteps))
            {
                return(ParsingResult.Error(HalfStepsNumberIsOutOfRange));
            }

            interval = Interval.FromHalfSteps(halfSteps);
            return(ParsingResult.Parsed);
        }
Exemple #2
0
        internal static ParsingResult TryParse(string input, out Interval interval)
        {
            interval = null;

            if (string.IsNullOrWhiteSpace(input))
            {
                return(ParsingResult.EmptyInputString);
            }

            var match = ParsingUtilities.Match(input, Patterns, ignoreCase: false);

            if (match == null)
            {
                return(ParsingResult.NotMatched);
            }

            var intervalQualityGroup = match.Groups[IntervalQualityGroupName];

            if (!intervalQualityGroup.Success)
            {
                int halfSteps;
                if (!ParsingUtilities.ParseInt(match, HalfStepsGroupName, 0, out halfSteps) ||
                    !IntervalUtilities.IsIntervalValid(halfSteps))
                {
                    return(ParsingResult.Error(HalfStepsNumberIsOutOfRange));
                }

                interval = Interval.FromHalfSteps(halfSteps);
                return(ParsingResult.Parsed);
            }

            var intervalQuality = IntervalQualitiesByLetters[intervalQualityGroup.Value];

            int intervalNumber;

            if (!ParsingUtilities.ParseInt(match, IntervalNumberGroupName, 0, out intervalNumber) || intervalNumber < 1)
            {
                return(ParsingResult.Error(IntervalNumberIsOutOfRange));
            }

            interval = Interval.Get(intervalQuality, intervalNumber);
            return(ParsingResult.Parsed);
        }