CharExtensions
Useful methods for chars.
using System.Diagnostics;
using System.Runtime.CompilerServices;
namespace AngleSharp.Extensions
{
[DebuggerStepThrough]
internal static class CharExtensions
{
public static int FromHex(this char c)
{
if (!c.IsDigit())
return c - (c.IsLowercaseAscii() ? 87 : 55);
return c - 48;
}
public static string ToHex(this byte num)
{
char[] obj = new char[2];
int num2 = num >> 4;
obj[0] = (char)(num2 + ((num2 < 10) ? 48 : 55));
num2 = num - 16 * num2;
obj[1] = (char)(num2 + ((num2 < 10) ? 48 : 55));
return new string(obj);
}
public static string ToHex(this char character)
{
int num = character;
return num.ToString("x");
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsInRange(this char c, int lower, int upper)
{
if (c >= lower)
return c <= upper;
return false;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsNormalQueryCharacter(this char c)
{
if (c.IsInRange(33, 126) && c != '"' && c != '`' && c != '#' && c != '<')
return c != '>';
return false;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsNormalPathCharacter(this char c)
{
if (c.IsInRange(32, 126) && c != '"' && c != '`' && c != '#' && c != '<' && c != '>' && c != ' ')
return c != '?';
return false;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsUppercaseAscii(this char c)
{
if (c >= 'A')
return c <= 'Z';
return false;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsLowercaseAscii(this char c)
{
if (c >= 'a')
return c <= 'z';
return false;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsAlphanumericAscii(this char c)
{
if (!c.IsDigit() && !c.IsUppercaseAscii())
return c.IsLowercaseAscii();
return true;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsHex(this char c)
{
if (!c.IsDigit() && (c < 'A' || c > 'F')) {
if (c >= 'a')
return c <= 'f';
return false;
}
return true;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsNonAscii(this char c)
{
if (c != '')
return c >= '';
return false;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsNonPrintable(this char c)
{
if ((c < ' ' || c > '\b') && (c < '' || c > '')) {
if (c >= '')
return c <= '';
return false;
}
return true;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsLetter(this char c)
{
if (!c.IsUppercaseAscii())
return c.IsLowercaseAscii();
return true;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsName(this char c)
{
if (!c.IsNonAscii() && !c.IsLetter() && c != '_' && c != '-')
return c.IsDigit();
return true;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsNameStart(this char c)
{
if (!c.IsNonAscii() && !c.IsUppercaseAscii() && !c.IsLowercaseAscii())
return c == '_';
return true;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsLineBreak(this char c)
{
if (c != '\n')
return c == '\r';
return true;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsSpaceCharacter(this char c)
{
if (c != ' ' && c != '\t' && c != '\n' && c != '\r')
return c == '';
return true;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsWhiteSpaceCharacter(this char c)
{
if (!c.IsInRange(9, 13) && c != ' ' && c != '
' && c != ' ' && c != ' ' && c != '' && !c.IsInRange(8192, 8202) && c != '
' && c != '
' && c != ' ' && c != ' ')
return c == ' ';
return true;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsDigit(this char c)
{
if (c >= '0')
return c <= '9';
return false;
}
public static bool IsUrlCodePoint(this char c)
{
if (!c.IsAlphanumericAscii() && c != '!' && c != '$' && c != '&' && c != '\'' && c != '(' && c != ')' && c != '*' && c != '+' && c != '-' && c != ',' && c != '.' && c != '/' && c != ':' && c != ';' && c != '=' && c != '?' && c != '@' && c != '_' && c != '~' && !c.IsInRange(160, 55295) && !c.IsInRange(57344, 64975) && !c.IsInRange(65008, 65533) && !c.IsInRange(65536, 131069) && !c.IsInRange(131072, 196605) && !c.IsInRange(196608, 262141) && !c.IsInRange(262144, 327677) && !c.IsInRange(327680, 393213) && !c.IsInRange(393216, 458749) && !c.IsInRange(458752, 524285) && !c.IsInRange(524288, 589821) && !c.IsInRange(589824, 655357) && !c.IsInRange(655360, 720893) && !c.IsInRange(720896, 786429) && !c.IsInRange(786432, 851965) && !c.IsInRange(851968, 917501) && !c.IsInRange(917504, 983037) && !c.IsInRange(983040, 1048573))
return c.IsInRange(1048576, 1114109);
return true;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsInvalid(this int c)
{
if (c != 0 && c <= 1114111) {
if (c > 55296)
return c < 57343;
return false;
}
return true;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsOneOf(this char c, char a, char b)
{
if (a != c)
return b == c;
return true;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsOneOf(this char c, char o1, char o2, char o3)
{
if (c != o1 && c != o2)
return c == o3;
return true;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsOneOf(this char c, char o1, char o2, char o3, char o4)
{
if (c != o1 && c != o2 && c != o3)
return c == o4;
return true;
}
}
}