1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-20 08:58:00 +02:00
Beef/BeefLibs/corlib/src/Char16.bf

99 lines
2 KiB
Beef
Raw Normal View History

2019-08-23 11:56:54 -07:00
namespace System
{
struct Char16 : char16, IHashable
{
internal const int UNICODE_PLANE00_END = 0x00ffff;
// The starting codepoint for Unicode plane 1. Plane 1 contains 0x010000 ~ 0x01ffff.
internal const int UNICODE_PLANE01_START = 0x10000;
// The end codepoint for Unicode plane 16. This is the maximum code point value allowed for Unicode.
// Plane 16 contains 0x100000 ~ 0x10ffff.
internal const int UNICODE_PLANE16_END = 0x10ffff;
internal const char16 HIGH_SURROGATE_START = (char16)0xd800;
internal const char16 LOW_SURROGATE_END = (char16)0xdfff;
internal const char16 HIGH_SURROGATE_END = (char16)0xdbff;
internal const char16 LOW_SURROGATE_START = (char16)0xdc00;
int IHashable.GetHashCode()
{
return (int)this;
}
public extern char16 ToLower
{
get;
}
public extern char16 ToUpper
{
get;
}
public extern bool IsLower
{
get;
}
public extern bool IsUpper
{
get;
}
public extern bool IsWhiteSpace
{
get;
}
public extern bool IsLetterOrDigit
{
get;
}
public extern bool IsLetter
{
get;
}
public extern bool IsNumber
{
get;
}
public bool IsControl
{
get
{
return (((char16)this >= (char16)0) && ((char16)this <= (char16)0x1F)) || (((char16)this >= (char16)0x7F) && ((char16)this <= (char16)0x9F));
}
}
public bool IsCombiningMark
{
get
{
let c = (char16)this;
return ((c >= '\u{0300}') && (c <= '\u{036F}')) || ((c >= '\u{1DC0}') && (c <= '\u{1DFF}'));
}
}
public override void ToString(String strBuffer)
{
strBuffer.Append((char16)this);
}
public bool IsSurrogate
{
get
{
return (this >= HIGH_SURROGATE_START && this <= LOW_SURROGATE_END);
}
}
public static bool IsSurrogatePair(char16 highSurrogate, char16 lowSurrogate)
{
return ((highSurrogate >= HIGH_SURROGATE_START && highSurrogate <= HIGH_SURROGATE_END) &&
(lowSurrogate >= LOW_SURROGATE_START && lowSurrogate <= LOW_SURROGATE_END));
}
}
}