Beispiel #1
0
            private IExpression ParseOptions()
            {
                var enabled = GroupRegexOptions.None;

                while (index != regex.Length && TryGetOption(out var option))
                {
                    enabled |= option;
                    ++index;
                }
                if (index == regex.Length || (regex[index] != '-' && regex[index] != ':' && regex[index] != ')'))
                {
                    // The Regex constructor should prevent this
                    throw new InvalidOperationException();
                }
                var disabled = GroupRegexOptions.None;

                if (regex[index] == '-')
                {
                    ++index;
                    while (index != regex.Length && TryGetOption(out var option))
                    {
                        disabled |= option;
                        ++index;
                    }
                    if (index == regex.Length || (regex[index] != ':' && regex[index] != ')'))
                    {
                        // The Regex constructor should prevent this
                        throw new InvalidOperationException();
                    }
                }
                var currentOptions = options.Pop();

                currentOptions |= enabled;
                currentOptions &= ~disabled;
                options.Push(currentOptions);
                if (regex[index] == ':')
                {
                    ++index; // swallow ':'
                    var item = Parse();
                    return(OptionsGroup.Of(enabled, disabled, item));
                }
                else
                {
                    return(InlineOptions.For(enabled, disabled));
                }
            }
Beispiel #2
0
        /// <summary>
        /// Creates a group that can enable or disable options for its subexpressions.
        /// </summary>
        /// <param name="enabled">The options to enable.</param>
        /// <param name="disabled">The options to disable.</param>
        /// <returns>The options group.</returns>
        public static IOptionsGroup From(GroupRegexOptions enabled, GroupRegexOptions disabled, IEnumerable <IExpression> members)
        {
            if (members == null)
            {
                throw new ArgumentNullException(nameof(members));
            }
            ValidateRegexOptions(nameof(enabled), enabled);
            ValidateRegexOptions(nameof(disabled), disabled);
            var group = new OptionsGroup()
            {
                EnabledOptions = enabled, DisabledOptions = disabled
            };

            foreach (var member in members)
            {
                group.Add(member);
            }
            return(group);
        }