| 316 | } |
| 317 | |
| 318 | static void append_utf8(char32_t ch, std::string & out) { |
| 319 | if (ch <= 0x7F) { |
| 320 | out.push_back(static_cast<unsigned char>(ch)); |
| 321 | } else if (ch <= 0x7FF) { |
| 322 | out.push_back(static_cast<unsigned char>(0xC0 | ((ch >> 6) & 0x1F))); |
| 323 | out.push_back(static_cast<unsigned char>(0x80 | (ch & 0x3F))); |
| 324 | } else if (ch <= 0xFFFF) { |
| 325 | out.push_back(static_cast<unsigned char>(0xE0 | ((ch >> 12) & 0x0F))); |
| 326 | out.push_back(static_cast<unsigned char>(0x80 | ((ch >> 6) & 0x3F))); |
| 327 | out.push_back(static_cast<unsigned char>(0x80 | (ch & 0x3F))); |
| 328 | } else if (ch <= 0x10FFFF) { |
| 329 | out.push_back(static_cast<unsigned char>(0xF0 | ((ch >> 18) & 0x07))); |
| 330 | out.push_back(static_cast<unsigned char>(0x80 | ((ch >> 12) & 0x3F))); |
| 331 | out.push_back(static_cast<unsigned char>(0x80 | ((ch >> 6) & 0x3F))); |
| 332 | out.push_back(static_cast<unsigned char>(0x80 | (ch & 0x3F))); |
| 333 | } else { |
| 334 | // Invalid Unicode code point |
| 335 | } |
| 336 | } |
| 337 | |
| 338 | // Helper function to remove the last UTF-8 character from a string |
| 339 | static void pop_back_utf8_char(std::string & line) { |
no test coverage detected