10    internal static readonly 
char[] 
s_WSchars = 
new char[4] { 
' ', 
'\n', 
'\r', 
'\t' };
 
   14        false, 
false, 
false, 
false, 
false, 
false, 
false, 
false, 
false, 
false,
 
   15        false, 
false, 
false, 
false, 
false, 
false, 
false, 
false, 
false, 
false,
 
   16        false, 
false, 
false, 
false, 
false, 
false, 
false, 
false, 
false, 
false,
 
   17        false, 
false, 
false, 
true, 
false, 
true, 
true, 
false, 
true, 
true,
 
   18        true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true,
 
   19        true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true,
 
   20        false, 
true, 
false, 
true, 
true, 
true, 
true, 
true, 
true, 
true,
 
   21        true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true,
 
   22        true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true,
 
   23        true, 
true, 
false, 
true, 
false, 
true, 
false, 
true, 
true, 
true,
 
   24        true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true,
 
   25        true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true,
 
   26        true, 
true, 
true, 
false, 
false, 
false, 
true, 
false 
 
   31        false, 
false, 
false, 
false, 
false, 
false, 
false, 
false, 
false, 
false,
 
   32        false, 
false, 
false, 
false, 
false, 
false, 
false, 
false, 
false, 
false,
 
   33        false, 
false, 
false, 
false, 
false, 
false, 
false, 
false, 
false, 
false,
 
   34        false, 
false, 
false, 
false, 
false, 
false, 
false, 
false, 
false, 
false,
 
   35        false, 
false, 
false, 
false, 
false, 
true, 
true, 
false, 
true, 
true,
 
   36        true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
false, 
false,
 
   37        false, 
false, 
false, 
false, 
false, 
true, 
true, 
true, 
true, 
true,
 
   38        true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true,
 
   39        true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true,
 
   40        true, 
false, 
false, 
false, 
false, 
true, 
false, 
true, 
true, 
true,
 
   41        true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true,
 
   42        true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true, 
true,
 
   43        true, 
true, 
true, 
false, 
false, 
false, 
true, 
false 
 
   46    internal unsafe 
static bool TestForSubPath(
char* selfPtr, 
int selfLength, 
char* otherPtr, 
int otherLength, 
bool ignoreCase)
 
   50        for (; i < selfLength && i < otherLength; i++)
 
   53            char c2 = otherPtr[i];
 
   71                if (c2 == 
'?' || c2 == 
'#')
 
   82                else if (
char.ToLowerInvariant(c) != 
char.ToLowerInvariant(c2))
 
   90        for (; i < selfLength; i++)
 
   93            if ((c = selfPtr[i]) != 
'?')
 
 
  110    internal static string EscapeString(
string stringToEscape, 
bool checkExistingEscaped, 
ReadOnlySpan<bool> unreserved, 
char forceEscape1 = 
'\0', 
char forceEscape2 = 
'\0')
 
  112        if (stringToEscape == 
null)
 
  116        if (stringToEscape.Length == 0)
 
  121        if ((forceEscape1 | forceEscape2) == 0)
 
  123            readOnlySpan = unreserved;
 
  129            span[forceEscape1] = 
false;
 
  130            span[forceEscape2] = 
false;
 
  134        for (i = 0; i < stringToEscape.Length; i++)
 
  137            if ((
index = stringToEscape[i]) > 
'\u007f')
 
  141            if (!readOnlySpan[
index])
 
  146        if (i == stringToEscape.Length)
 
  148            return stringToEscape;
 
  150        Span<char> initialBuffer = stackalloc 
char[512];
 
  152        vsb.
Append(stringToEscape.AsSpan(0, i));
 
 
  160        if ((forceEscape1 | forceEscape2) == 0)
 
  168            span[forceEscape1] = 
false;
 
  169            span[forceEscape2] = 
false;
 
  173        for (i = 0; i < stringToEscape.
Length; i++)
 
  176            if ((
index = stringToEscape[i]) > 
'\u007f')
 
  180            if (!readOnlySpan[
index])
 
  185        if (i == stringToEscape.
Length)
 
  187            dest.Append(stringToEscape);
 
  190        dest.Append(stringToEscape.
Slice(0, i));
 
 
  199        while (spanRuneEnumerator.
MoveNext())
 
  206                for (
int i = 0; i < span.
Length; i++)
 
  208                    byte value = span[i];
 
  214            byte b = (byte)current.
Value;
 
  220            if (checkExistingEscaped && b == 37)
 
  232                            vsb.Append((
char)current2.
Value);
 
  233                            vsb.Append((
char)current3.
Value);
 
  234                            spanRuneEnumerator = spanRuneEnumerator2;
 
 
  245    internal unsafe 
static char[] 
UnescapeString(
string input, 
int start, 
int end, 
char[] dest, ref 
int destPosition, 
char rsvd1, 
char rsvd2, 
char rsvd3, 
UnescapeMode unescapeMode, 
UriParser syntax, 
bool isQuery)
 
  247        fixed (
char* pStr = 
input)
 
  249            return UnescapeString(pStr, 
start, end, dest, ref destPosition, rsvd1, rsvd2, rsvd3, unescapeMode, syntax, isQuery);
 
 
  253    internal unsafe 
static char[] 
UnescapeString(
char* pStr, 
int start, 
int end, 
char[] dest, ref 
int destPosition, 
char rsvd1, 
char rsvd2, 
char rsvd3, 
UnescapeMode unescapeMode, 
UriParser syntax, 
bool isQuery)
 
  256        dest2.
Append(dest.AsSpan(0, destPosition));
 
  257        UnescapeString(pStr, 
start, end, ref dest2, rsvd1, rsvd2, rsvd3, unescapeMode, syntax, isQuery);
 
  258        if (dest2.
Length > dest.Length)
 
  266        destPosition = dest2.
Length;
 
 
  273        fixed (
char* pStr = 
input)
 
  275            UnescapeString(pStr, 
start, end, ref dest, rsvd1, rsvd2, rsvd3, unescapeMode, syntax, isQuery);
 
 
  283            UnescapeString(pStr, 0, 
input.Length, ref dest, rsvd1, rsvd2, rsvd3, unescapeMode, syntax, isQuery);
 
 
  302                if ((c = pStr[i]) == 
'%')
 
  327                                if (c == rsvd1 || c == rsvd2 || c == rsvd3)
 
  370                    if (c == rsvd1 || c == rsvd2 || c == rsvd3)
 
  375                    if ((unescapeMode & 
UnescapeMode.V1ToStringFlag) == 0 && (c <= 
'\u001f' || (c >= 
'\u007f' && c <= 
'\u009f')))
 
  384                dest.Append(pStr[
start++]);
 
  394                else if (c <= 
'\u007f')
 
 
  419        if ((num | num2) == 255)
 
  423        return (
char)((num << 4) | num2);
 
 
  428        if (
ch <= 
'\u001f' || (
ch >= 
'\u007f' && 
ch <= 
'\u009f'))
 
  432        return ";/?:@&=+$,#[]!'()*%\\#".Contains(
ch);
 
 
  437        if (
ch != 
':' && 
ch != 
'/' && 
ch != 
'?' && 
ch != 
'#' && 
ch != 
'[' && 
ch != 
']')
 
 
  448            if (
ch != 
' ' && 
ch != 
'\n' && 
ch != 
'\r')
 
 
  459        return ((uint)(character - 65) & -33) < 26;
 
 
  464        if (((uint)(character - 65) & -33) >= 26)
 
  466            return (uint)(character - 48) < 10u;
 
 
  478        if (
ch != 
'\u200e' && 
ch != 
'\u200f' && 
ch != 
'\u202a' && 
ch != 
'\u202b' && 
ch != 
'\u202c' && 
ch != 
'\u202d')
 
  480            return ch == 
'\u202e';
 
 
  489        for (
int i = 0; i < readOnlySpan.
Length; i++)
 
  491            char c = readOnlySpan[i];
 
  499            return backingString ?? 
new string(strToClean);
 
  501        if (num == strToClean.
Length)
 
  512                for (
int j = 0; j < readOnlySpan3.
Length; j++)
 
  514                    char c2 = readOnlySpan3[j];
 
 
 
static void ToCharsBuffer(byte value, Span< char > buffer, int startingIndex=0, Casing casing=Casing.Upper)
static bool IsHexChar(int c)
static int FromChar(int c)
static bool CheckIriUnicodeRange(char unicode, bool isQuery)
static unsafe int UnescapePercentEncodedUTF8Sequence(char *input, int length, ref System.Text.ValueStringBuilder dest, bool isQuery, bool iriParsing)
static string net_uri_BadString
static Encoding GetEncoding(int codepage)
static unsafe char[] UnescapeString(char *pStr, int start, int end, char[] dest, ref int destPosition, char rsvd1, char rsvd2, char rsvd3, UnescapeMode unescapeMode, UriParser syntax, bool isQuery)
static bool IsLWS(char ch)
static ReadOnlySpan< bool > UnreservedReservedTable
static bool IsNotSafeForUnescape(char ch)
static ReadOnlySpan< bool > UnreservedTable
static unsafe char[] UnescapeString(string input, int start, int end, char[] dest, ref int destPosition, char rsvd1, char rsvd2, char rsvd3, UnescapeMode unescapeMode, UriParser syntax, bool isQuery)
static readonly Encoding s_noFallbackCharUTF8
static void EscapeAsciiChar(byte b, ref System.Text.ValueStringBuilder to)
static unsafe void UnescapeString(ReadOnlySpan< char > input, ref System.Text.ValueStringBuilder dest, char rsvd1, char rsvd2, char rsvd3, UnescapeMode unescapeMode, UriParser syntax, bool isQuery)
static unsafe void UnescapeString(char *pStr, int start, int end, ref System.Text.ValueStringBuilder dest, char rsvd1, char rsvd2, char rsvd3, UnescapeMode unescapeMode, UriParser syntax, bool isQuery)
static bool IsAsciiLetterOrDigit(char character)
static bool IsGenDelim(char ch)
static void EscapeString(ReadOnlySpan< char > stringToEscape, ref System.Text.ValueStringBuilder dest, bool checkExistingEscaped, char forceEscape1='\0', char forceEscape2='\0')
static bool IsBidiControlCharacter(char ch)
static void EscapeStringToBuilder(ReadOnlySpan< char > stringToEscape, ref System.Text.ValueStringBuilder vsb, ReadOnlySpan< bool > noEscape, bool checkExistingEscaped)
static string EscapeString(string stringToEscape, bool checkExistingEscaped, ReadOnlySpan< bool > unreserved, char forceEscape1='\0', char forceEscape2='\0')
static unsafe bool TestForSubPath(char *selfPtr, int selfLength, char *otherPtr, int otherLength, bool ignoreCase)
static bool IsAsciiLetter(char character)
static readonly char[] s_WSchars
static bool IsHexDigit(char character)
static char DecodeHexChars(int first, int second)
static unsafe void UnescapeString(string input, int start, int end, ref System.Text.ValueStringBuilder dest, char rsvd1, char rsvd2, char rsvd3, UnescapeMode unescapeMode, UriParser syntax, bool isQuery)
static unsafe string StripBidiControlCharacters(ReadOnlySpan< char > strToClean, string backingString=null)
static bool IriParsingStatic(UriParser syntax)
bool TryCopyTo(Span< T > destination)
void CopyTo(Span< T > destination)
ReadOnlySpan< T > Slice(int start)
Span< T > Slice(int start)
bool TryEncodeToUtf8(Span< byte > destination, out int bytesWritten)
override string ToString()
ReadOnlySpan< char > AsSpan(bool terminate)