blob: e326529b2ecb57b7847948f780fd4fe57b330fc4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
//
// Unicode library - predicates for Unicode characters
//
#pragma once
namespace unicode {
// bits_to_compare: limit bits to consider even further than defined by T
// T: usually, char32_t, uint32_t etc.
template<size_t bits_to_compare = 32, typename T>
static inline bool is_valid_unicode(const T& value) noexcept
{
if constexpr(sizeof(T) == 1 || bits_to_compare <= 15)
return true;
else if constexpr(sizeof(T) == 2 || bits_to_compare <= 20)
//return value <= 0xD7FF || value >= 0xE000;
return (value & 0xF800) != 0xD800;
else
//return (value & 0xFFFFF800) != 0x0000D800 && (value >> 16) <= 0x10;
return value <= 0xD7FF || (value >= 0xE000 && value <= 0x10FFFF);
}
} // namespace unicode
|