| 211 | } |
| 212 | |
| 213 | std::string hexStringFromUtf32(Utf32Type character) { |
| 214 | if (character > MAX_CODEPOINT) |
| 215 | throw UnicodeException("Codepoint too big in hexStringFromUtf32"); |
| 216 | Utf32Type lead; |
| 217 | Maybe<Utf32Type> trail; |
| 218 | tie(lead, trail) = utf32ToUtf16SurrogatePair(character); |
| 219 | |
| 220 | char16_t leadOut = toBigEndian((char16_t)lead); |
| 221 | auto leadHex = hexEncode(reinterpret_cast<char*>(&leadOut), sizeof(leadOut)).takeUtf8(); |
| 222 | |
| 223 | starAssert(leadHex.size() == 4); |
| 224 | |
| 225 | if (!trail) |
| 226 | return leadHex; |
| 227 | |
| 228 | char16_t trailOut = toBigEndian((char16_t)*trail); |
| 229 | auto trailHex = hexEncode(reinterpret_cast<char*>(&trailOut), sizeof(trailOut)); |
| 230 | |
| 231 | starAssert(trailHex.size() == 4); |
| 232 | |
| 233 | return (leadHex + trailHex).takeUtf8(); |
| 234 | } |
| 235 | |
| 236 | bool isUtf16LeadSurrogate(Utf32Type codepoint) { |
| 237 | return codepoint >= MIN_LEAD && codepoint <= MAX_LEAD; |
no test coverage detected