예제 #1
0
 private string GetDebuggerDisplayString()
 {
     return(Kind switch
     {
         WildcardStepKind.AnyAny => "*",
         WildcardStepKind.AnyOne => "?",
         WildcardStepKind.AnyOf => string.Format("AO: {0}", Args.ToString()),
         WildcardStepKind.PartialAnyOf => string.Format("PAO: {0}", Args.ToString()),
         WildcardStepKind.Exact => string.Format("E: {0}", Args.ToString()),
         _ => string.Empty,
     });
        private void ProcessAnyOf()
        {
            MaybeAddPendingExact();
            int  start     = _index;
            int  length    = 0;
            bool found     = false;
            bool isPartial = false;

            while (MoveNext())
            {
                length++;
                char current = *_chars;
                if (current == '`')
                {
                    isPartial = true;
                    if (length > 1)
                    {
                        Steps.Add(
                            WildcardInstruction.PartialAnyOf(
                                _pattern.Slice(
                                    start + 1,
                                    length - 1)));
                    }

                    // Skip trying to process the next character.
                    start  = _index;
                    length = 1;
                    MoveNext();
                    continue;
                }

                if (current != ']')
                {
                    continue;
                }

                found = true;
                Steps.Add(
                    WildcardInstruction.AnyOf(
                        _pattern.Slice(
                            start + 1,
                            length - 1),
                        isPartial));

                break;
            }

            if (!found)
            {
                throw Error.InvalidWildcardPattern(_pattern.ToString());
            }
        }