#pragma once #include #include #define REPLACEMENT_GLYPH 0xFFFD uint32_t utf8NextCodepoint(const unsigned char** string); // Remove the last UTF-8 codepoint from a std::string and return the new size. size_t utf8RemoveLastChar(std::string& str); // Truncate string by removing N UTF-8 codepoints from the end. void utf8TruncateChars(std::string& str, size_t numChars); // Returns true for Unicode combining diacritical marks that should not advance the cursor. inline bool utf8IsCombiningMark(const uint32_t cp) { return (cp >= 0x0300 && cp <= 0x036F) // Combining Diacritical Marks || (cp >= 0x1DC0 && cp <= 0x1DFF) // Combining Diacritical Marks Supplement || (cp >= 0x20D0 && cp <= 0x20FF) // Combining Diacritical Marks for Symbols || (cp >= 0xFE20 && cp <= 0xFE2F); // Combining Half Marks }