in src/PSDocs/Pipeline/PathBuilder.cs [593:628]
private bool Match(string path)
{
_Expression.Reset();
var stream = new PathStream(path);
while (stream.Next() && _Expression.Next())
{
// Match characters
if (stream.TryMatch(_Expression, 0))
continue;
// Skip ? when zero characters are being matched
else if (stream.IsUnmatchedSingle(_Expression, 0))
_Expression.Next();
// Match ending wildcards e.g. src/** or src/**/
else if (_Expression.IsAnyMatchEnding())
break;
// Match ending with depth e.g. src/**/bin/
else if (_Expression.SkipMatchAA())
{
if (!stream.TryMatchAA(_Expression, 0))
return false;
}
// Match wildcard *
else if (_Expression.SkipMatchA())
{
if (!stream.TryMatchA(_Expression, 0))
return false;
}
else return false;
}
return true;
}