60 inline explicit DtUnicodeChar(
const unsigned short s,
const unsigned short c )
65 throw std::invalid_argument(
"UTF-16 characters are not a surrogate pair." );
74 template <
int sizeof_
wchar_t>
97 && codePoint != 0xfffe && codePoint != 0xffff );
105 if (
TrailSurrogateMin == ((*substringStart)&0xfffffc00) && start != substringStart
132 throw std::invalid_argument(
"Not a valid UTF 32 code point" );
158 template <
int sizeofWChar_t>
176 CodePoint X = (hi & 0x3F) << 10 | (lo & 0x3FF);
180 return (U << 16) | X;
188 | (
unsigned short)((cp >> 10) & 0x3F);
239 static inline unsigned int utf8Length(
const unsigned char c )
258 throw std::invalid_argument(
"Not a valid UTF8 string.");
261 inline unsigned int readUtf8(
const unsigned char* memory )
263 unsigned char c = *memory;
271 myCodePoint = ((c & 0x1F) << 6) | (*(memory + 1) & 0x3F);
276 myCodePoint = ((c & 0xF) << 12) | ((*(memory + 1) & 0x3F) << 6)
277 | (*(memory + 2) & 0x3F);
283 | ((*(memory + 1) & 0x3F) << 12)
284 | ((*(memory + 2) & 0x3F) << 6)
285 | (*(memory + 3) & 0x3F);
289 throw std::invalid_argument(
"Not a valid UTF8 string.");
300 *memory = (
unsigned char)((
myCodePoint >> 6) & 0x1F) | 0xC0;
301 *(memory+1) = (
unsigned char)((
myCodePoint) & 0x3F) | 0x80;
306 *memory = (
unsigned char)((
myCodePoint >> 12) & 0xF ) | 0xE0;
307 *(memory+1) = (
unsigned char)((
myCodePoint >> 6) & 0x3F) | 0x80;
308 *(memory+2) = (
unsigned char)((
myCodePoint ) & 0x3F) | 0x80;
312 *memory = (
unsigned char)((
myCodePoint >> 18) & 0x7 ) | 0xF0;
313 *(memory+1) = (
unsigned char)((
myCodePoint >> 12) & 0x3F) | 0x80;
314 *(memory+2) = (
unsigned char)((
myCodePoint >> 6 ) & 0x3F) | 0x80;
315 *(memory+3) = (
unsigned char)((
myCodePoint ) & 0x3F) | 0x80;
319 template <
int sizeofW
chart>
322 inline void writeWChar(
wchar_t* memory )
const;
344 inline unsigned int DtUnicodeChar::wchartLength<2>()
const
346 return utf16CodeUnits() << 1;
350 inline unsigned int DtUnicodeChar::wchartLength<4>()
const
352 return utf32Length();
357 return wchartLength<sizeof(wchar_t)>();
361 template <
int sizeof_
wchar_t>
370 if ( isSurrogate(c) )
372 throw std::invalid_argument(
"Invalid UTF-16 character" );
379 inline void DtUnicodeChar::writeWCharT<2>(
wchar_t* memory )
const
381 writeUtf16( reinterpret_cast<Surrogate*>(memory) );
385 inline void DtUnicodeChar::writeWCharT<4>(
wchar_t* memory )
const
387 writeUtf32( reinterpret_cast<unsigned int*>(memory) );
392 writeWCharT<sizeof(wchar_t)>( memory );
static DtUnicodeChar fromUtf32(unsigned int character)
Definition: vlUnicodeChar.h:128
static const Surrogate LeadSurrogateMax
Definition: vlUnicodeChar.h:32
bool operator==(const DtUnicodeChar &other) const
Definition: vlUnicodeChar.h:84
unsigned char Octet
A Unicode Octet is 8bit byte used in UTF-8 encoding.
Definition: vlUnicodeChar.h:27
static const Surrogate TrailSurrogateMin
Definition: vlUnicodeChar.h:33
static void encodeSurrogatePair(CodePoint cp, Surrogate &hi, Surrogate &lo)
Definition: vlUnicodeChar.h:183
static const Surrogate LeadSurrogateMin
Definition: vlUnicodeChar.h:31
static CodePoint widechar(const wchar_t c)
Definition: vlUnicodeChar.h:362
static const CodePoint CodePointMax
Definition: vlUnicodeChar.h:30
unsigned int utf16CodeUnits() const
Definition: vlUnicodeChar.h:193
void readUtf32(const unsigned int *memory)
Definition: vlUnicodeChar.h:228
DtUnicodeChar(const char c)
Construct a unicode character for a character c.
Definition: vlUnicodeChar.h:45
DtUnicodeChar(const DtUnicodeChar &other)
Definition: vlUnicodeChar.h:69
DtUnicodeChar(const unsigned short s, const unsigned short c)
Construct a pair of UTF-16 code units, where the first character must be a surrogate pair...
Definition: vlUnicodeChar.h:60
void writeWChar(wchar_t *memory) const
Definition: vlUnicodeChar.h:390
DtUnicodeChar()
Definition: vlUnicodeChar.h:38
void writeUtf16(Surrogate *memory) const
Definition: vlUnicodeChar.h:216
A single unicode character.
Definition: vlUnicodeChar.h:16
DtUnicodeChar & operator=(const DtUnicodeChar &other)
Definition: vlUnicodeChar.h:77
static unsigned int utf8Length(const unsigned char c)
Get the length based upon the first character.
Definition: vlUnicodeChar.h:239
unsigned int wideStringLength() const
Definition: vlUnicodeChar.h:355
static bool isSurrogate(Surrogate cp)
Definition: vlUnicodeChar.h:122
static CodePoint decodeSurrogatePair(Surrogate hi, Surrogate lo)
Definition: vlUnicodeChar.h:173
unsigned int utf32Length() const
Definition: vlUnicodeChar.h:168
unsigned int readUtf16(const Surrogate *memory)
Read from UTF-16 encoded memory, Returns number of code units read, NOT number of bytes...
Definition: vlUnicodeChar.h:200
static const Surrogate TrailSurrogateMax
Definition: vlUnicodeChar.h:34
void writeUtf32(unsigned int *memory) const
Definition: vlUnicodeChar.h:233
unsigned int utf16Length() const
Definition: vlUnicodeChar.h:163
DtUnicodeChar(const wchar_t c)
Construct a unicode character for a character c.
Definition: vlUnicodeChar.h:53
unsigned short Surrogate
Definition: vlUnicodeChar.h:24
static bool isSurrogateSubstringValid(const Surrogate *start, const Surrogate *end, const Surrogate *substringStart, const Surrogate *substringEnd)
Definition: vlUnicodeChar.h:100
unsigned int utf8Length() const
Calculate the utf-8 length of a code point.
Definition: vlUnicodeChar.h:138
bool operator!=(const DtUnicodeChar &other) const
Definition: vlUnicodeChar.h:89
unsigned int readUtf8(const unsigned char *memory)
Definition: vlUnicodeChar.h:261
CodePoint codePoint() const
Definition: vlUnicodeChar.h:324
static bool isCodePointValid(CodePoint codePoint)
Definition: vlUnicodeChar.h:94
unsigned int CodePoint
Definition: vlUnicodeChar.h:21
void writeWCharT(wchar_t *memory) const
unsigned int wchartLength() const
DtUnicodeChar(unsigned int utf32c)
Definition: vlUnicodeChar.h:331
void writeUtf8(char *memory) const
Definition: vlUnicodeChar.h:292
CodePoint myCodePoint
Definition: vlUnicodeChar.h:338