| 1106 | } |
| 1107 | |
| 1108 | static std::string sam3_codepoint_to_utf8(int cp) { |
| 1109 | std::string s; |
| 1110 | if (cp < 0x80) { |
| 1111 | s += (char)cp; |
| 1112 | } else if (cp < 0x800) { |
| 1113 | s += (char)(0xC0 | (cp >> 6)); |
| 1114 | s += (char)(0x80 | (cp & 0x3F)); |
| 1115 | } else if (cp < 0x10000) { |
| 1116 | s += (char)(0xE0 | (cp >> 12)); |
| 1117 | s += (char)(0x80 | ((cp >> 6) & 0x3F)); |
| 1118 | s += (char)(0x80 | (cp & 0x3F)); |
| 1119 | } else { |
| 1120 | s += (char)(0xF0 | (cp >> 18)); |
| 1121 | s += (char)(0x80 | ((cp >> 12) & 0x3F)); |
| 1122 | s += (char)(0x80 | ((cp >> 6) & 0x3F)); |
| 1123 | s += (char)(0x80 | (cp & 0x3F)); |
| 1124 | } |
| 1125 | return s; |
| 1126 | } |
| 1127 | |
| 1128 | // Check if position i in s starts a Unicode letter. |
| 1129 | // Handles ASCII letters + treats any multibyte UTF-8 start byte as a letter. |
no outgoing calls
no test coverage detected