| 69 | } |
| 70 | |
| 71 | void demonstrateUTF8() |
| 72 | { |
| 73 | std::cout << "\n=== UTF-8 Demo ===\n"; |
| 74 | |
| 75 | std::string utf8Text = "Hello 世界! 🌍 Café naïve résumé"; |
| 76 | std::cout << "UTF-8 text: " << utf8Text << "\n"; |
| 77 | std::cout << "Byte length: " << utf8Text.length() << "\n"; |
| 78 | std::cout << "Character count: " << choc::text::UTF8Pointer (utf8Text.c_str()).length() << "\n"; |
| 79 | |
| 80 | // Iterate through UTF-8 characters |
| 81 | std::cout << "Characters:\n"; |
| 82 | auto utf8Ptr = choc::text::UTF8Pointer (utf8Text.c_str()); |
| 83 | int index = 0; |
| 84 | while (! utf8Ptr.empty()) |
| 85 | { |
| 86 | auto codepoint = *utf8Ptr; |
| 87 | std::cout << " " << index++ << ": U+" << std::hex << std::uppercase |
| 88 | << codepoint << std::dec << "\n"; |
| 89 | ++utf8Ptr; |
| 90 | } |
| 91 | |
| 92 | // UTF-8 validation |
| 93 | std::string validUTF8 = "Valid UTF-8: Hello"; |
| 94 | std::string invalidUTF8 = "Invalid UTF-8: \xFF\xFE"; |
| 95 | std::cout << "\nValidation:\n"; |
| 96 | std::cout << "'" << validUTF8 << "' is valid: " |
| 97 | << (choc::text::findInvalidUTF8Data (validUTF8.data(), validUTF8.size()) == nullptr) << "\n"; |
| 98 | std::cout << "Invalid sequence is valid: " |
| 99 | << (choc::text::findInvalidUTF8Data (invalidUTF8.data(), invalidUTF8.size()) == nullptr) << "\n"; |
| 100 | } |
| 101 | |
| 102 | void demonstrateWildcardMatching() |
| 103 | { |
no test coverage detected