public void Parse() { bool ignoreNext = false; while (MoveNext()) { if (ignoreNext) { _exactStart ??= _index; ignoreNext = false; continue; } switch (*_chars) { case '`': MaybeAddPendingExact(); ignoreNext = true; break; case '*': MaybeAddPendingExact(); Steps.Add(WildcardInstruction.AnyAny); break; case '?': MaybeAddPendingExact(); Steps.Add(WildcardInstruction.AnyOne); break; case '[': ProcessAnyOf(); break; default: _exactStart ??= _index; break; } } if (_exactStart == null) { return; } Steps.Add(WildcardInstruction.Exact(_pattern.Slice(_exactStart.Value))); _exactStart = null; }
private void MaybeAddPendingExact() { if (_exactStart == null) { return; } Steps.Add( WildcardInstruction.Exact( _pattern.Slice( _exactStart.Value, _index - _exactStart.Value))); _exactStart = null; }