private static bool ParseWindowsFilePath (ParserState state)
{
var scheme = state.elements.scheme;
if (!string.IsNullOrEmpty (scheme) &&
scheme != Uri.UriSchemeFile && UriHelper.IsKnownScheme (scheme))
return state.remaining.Length > 0;
string part = state.remaining;
if (part.Length > 0 && (part [0] == '/' || part [0] == '\\'))
part = part.Substring (1);
if (part.Length < 2 || part [1] != ':')
return state.remaining.Length > 0;
if (!IsAlpha (part [0])) {
if (state.kind == UriKind.Absolute) {
state.error = "Invalid URI: The URI scheme is not valid.";
return false;
}
state.elements.isAbsoluteUri = false;
state.elements.path = part;
return false;
}
if (part.Length > 2 && part [2] != '\\' && part [2] != '/') {
state.error = "Relative file path is not allowed.";
return false;
}
if (string.IsNullOrEmpty (scheme)) {
state.elements.scheme = Uri.UriSchemeFile;
state.elements.delimiter = "://";
}
state.elements.path = part.Replace ("\\", "/");
return false;
}