private static bool ParsePath (ParserState state)
{
string part = state.remaining;
StringBuilder sb = new StringBuilder ();
int index;
for (index = 0; index < part.Length; index++) {
char ch = part [index];
var supportsQuery = UriHelper.SupportsQuery (state.elements.scheme);
if (ch == '#' || (supportsQuery && ch == '?'))
break;
sb.Append (ch);
}
if (index <= part.Length)
state.remaining = part.Substring (index);
state.elements.path = sb.ToString ();
return state.remaining.Length > 0;
}