/*
* This static call constructs a RegexTree from a regular expression
* pattern string and an option string.
*
* The method creates, drives, and drops a parser instance.
*/
internal static RegexTree Parse(string re, RegexOptions op)
{
int end;
var pcreOptions = TrimPcreRegexOption(re, out end);
var pattern = TrimDelimiters(re, end);
RegexParser p;
RegexNode root;
string[] capnamelist;
p = new RegexParser((op & RegexOptions.CultureInvariant) != 0 ? CultureInfo.InvariantCulture : CultureInfo.CurrentCulture);
p._options = op;
p.SetPattern(pattern);
p.CountCaptures();
p.Reset(op);
root = p.ScanRegex();
if (p._capnamelist == null)
capnamelist = null;
else
capnamelist = p._capnamelist.ToArray();
return new RegexTree(root, p._caps, p._capnumlist, p._captop, p._capnames, capnamelist, op);
}