in Agents/Xamarin.Interactive/ProcessControl/Glob.cs [204:258]
static string TranslatePattern (string pattern)
{
var builder = new StringBuilder (pattern.Length * 2);
var i = 0;
var n = pattern.Length;
var braceDepth = 0;
while (i < n) {
var c = pattern [i];
i++;
if (c == '*')
builder.Append (".*");
else if (c == '?')
builder.Append ('.');
else if (c == '[') {
var j = i;
if (j < n && pattern [j] == '!')
j++;
if (j < n && pattern [j] == ']')
j++;
while (j < n && pattern [j] != ']')
j++;
if (j >= n)
builder.Append ("\\[");
else {
var subpattern = pattern.Substring (i, j - i).Replace ("\\", "\\\\");
i = j + 1;
if (subpattern [0] == '!')
subpattern = '^' + subpattern.Substring (1);
else if (subpattern [0] == '^')
subpattern = "\\" + subpattern;
builder.Append ('[');
builder.Append (subpattern);
builder.Append (']');
}
} else if (c == '{') {
braceDepth++;
builder.Append ('(');
} else if (c == '}') {
braceDepth--;
builder.Append (')');
} else if (c == ',' && braceDepth > 0)
builder.Append ('|');
else
builder.Append (Regex.Escape (c.ToString ()));
}
builder.Append ('$');
return builder.ToString ();
}