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)