| 109 | } |
| 110 | |
| 111 | static bool is_mark(uint32_t cp) { |
| 112 | // Unicode Mark category (Mn, Mc, Me) — combining marks. |
| 113 | // Common ranges for diacritics used in many languages. |
| 114 | if (cp >= 0x0300 && cp <= 0x036F) return true; // Combining Diacritical Marks |
| 115 | if (cp >= 0x0591 && cp <= 0x05BD) return true; // Hebrew accents |
| 116 | if (cp >= 0x0610 && cp <= 0x061A) return true; // Arabic |
| 117 | if (cp >= 0x064B && cp <= 0x065F) return true; // Arabic |
| 118 | if (cp >= 0x0900 && cp <= 0x0903) return true; // Devanagari |
| 119 | if (cp >= 0x093A && cp <= 0x094F) return true; // Devanagari |
| 120 | if (cp == 0x0E31) return true; // Thai |
| 121 | if (cp >= 0x0E34 && cp <= 0x0E3A) return true; // Thai |
| 122 | if (cp >= 0xFE20 && cp <= 0xFE2F) return true; // Combining Half Marks |
| 123 | if (cp >= 0x20D0 && cp <= 0x20FF) return true; // Combining for Symbols |
| 124 | return false; |
| 125 | } |
| 126 | |
| 127 | static bool is_whitespace(uint32_t cp) { |
| 128 | return cp == ' ' || cp == '\t' || cp == '\n' || cp == '\r' || |