MCPcopy Create free account
hub / github.com/PyMesh/PyMesh / CodePointToUtf8

Function CodePointToUtf8

tests/external/gmock-1.7.0/gtest/src/gtest.cc:1436–1462  ·  view source on GitHub ↗

Converts a Unicode code point to a narrow string in UTF-8 encoding. code_point parameter is of type UInt32 because wchar_t may not be wide enough to contain a code point. If the code_point is not a valid Unicode code point (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted to "(Invalid Unicode 0xXXXXXXXX)".

Source from the content-addressed store, hash-verified

1434// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted
1435// to "(Invalid Unicode 0xXXXXXXXX)".
1436std::string CodePointToUtf8(UInt32 code_point) {
1437 if (code_point > kMaxCodePoint4) {
1438 return "(Invalid Unicode 0x" + String::FormatHexInt(code_point) + ")";
1439 }
1440
1441 char str[5]; // Big enough for the largest valid code point.
1442 if (code_point <= kMaxCodePoint1) {
1443 str[1] = '\0';
1444 str[0] = static_cast<char>(code_point); // 0xxxxxxx
1445 } else if (code_point <= kMaxCodePoint2) {
1446 str[2] = '\0';
1447 str[1] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx
1448 str[0] = static_cast<char>(0xC0 | code_point); // 110xxxxx
1449 } else if (code_point <= kMaxCodePoint3) {
1450 str[3] = '\0';
1451 str[2] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx
1452 str[1] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx
1453 str[0] = static_cast<char>(0xE0 | code_point); // 1110xxxx
1454 } else { // code_point <= kMaxCodePoint4
1455 str[4] = '\0';
1456 str[3] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx
1457 str[2] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx
1458 str[1] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx
1459 str[0] = static_cast<char>(0xF0 | code_point); // 11110xxx
1460 }
1461 return str;
1462}
1463
1464// The following two functions only make sense if the the system
1465// uses UTF-16 for wide string encoding. All supported systems

Callers 2

WideStringToUtf8Function · 0.70
TESTFunction · 0.50

Calls 1

ChopLowBitsFunction · 0.70

Tested by

no test coverage detected