21 std::istringstream stream(content);
23 while (std::getline(stream, line)) {
24 const size_t spacePos = line.find(
' ');
25 if (spacePos == std::string::npos) {
31 const char *first = line.data() + spacePos + 1;
32 const char *last = line.data() + line.size();
33 while (first != last && (*first ==
' ' || *first ==
'\t')) {
36 if (last - first > 2 && first[0] ==
'0'
37 && (first[1] ==
'x' || first[1] ==
'X')) {
41 if (std::from_chars(first, last, code, 16).ec != std::errc()) {
44 _codes[line.substr(0, spacePos)] = code;
60 if (codePoint <= 0x7F) {
61 result.push_back(
static_cast<char>(codePoint));
62 }
else if (codePoint <= 0x7FF) {
64 static_cast<char>(0xC0 | ((codePoint >> 6) & 0x1F)));
65 result.push_back(
static_cast<char>(0x80 | (codePoint & 0x3F)));
66 }
else if (codePoint <= 0xFFFF) {
68 static_cast<char>(0xE0 | ((codePoint >> 12) & 0x0F)));
70 static_cast<char>(0x80 | ((codePoint >> 6) & 0x3F)));
71 result.push_back(
static_cast<char>(0x80 | (codePoint & 0x3F)));
74 static_cast<char>(0xF0 | ((codePoint >> 18) & 0x07)));
76 static_cast<char>(0x80 | ((codePoint >> 12) & 0x3F)));
78 static_cast<char>(0x80 | ((codePoint >> 6) & 0x3F)));
79 result.push_back(
static_cast<char>(0x80 | (codePoint & 0x3F)));