| 190 | } |
| 191 | |
| 192 | void NormalizeInplace(UniString & s) |
| 193 | { |
| 194 | size_t const size = s.size(); |
| 195 | |
| 196 | UniString r; |
| 197 | r.reserve(size); |
| 198 | for (size_t i = 0; i < size; ++i) |
| 199 | { |
| 200 | UniChar const c = s[i]; |
| 201 | // ASCII optimization |
| 202 | if (c < 0xa0) |
| 203 | r.push_back(c); |
| 204 | else |
| 205 | { |
| 206 | switch (c & 0xffff0000) |
| 207 | { |
| 208 | case 0x0000: |
| 209 | { |
| 210 | switch (static_cast<uint16_t>(c & 0x0000ff00)) |
| 211 | { |
| 212 | case 0x0: |
| 213 | { |
| 214 | switch (static_cast<uint8_t>(c & 0xff)) |
| 215 | { |
| 216 | case 0xa0: w(r, 3, 1); break; |
| 217 | case 0xa8: w(r, 3, 1); break; |
| 218 | case 0xaa: w(r, 40, 1); break; |
| 219 | case 0xaf: w(r, 3, 1); break; |
| 220 | case 0xb2: w(r, 44, 1); break; |
| 221 | case 0xb3: w(r, 184, 1); break; |
| 222 | case 0xb4: w(r, 3, 1); break; |
| 223 | case 0xb5: w(r, 1244, 1); break; |
| 224 | case 0xb8: w(r, 3, 1); break; |
| 225 | case 0xb9: w(r, 158, 1); break; |
| 226 | case 0xba: w(r, 480, 1); break; |
| 227 | case 0xbc: w(r, 1085, 3); break; |
| 228 | case 0xbd: w(r, 1082, 3); break; |
| 229 | case 0xbe: w(r, 1079, 3); break; |
| 230 | case 0xc0: w(r, 491, 1); break; |
| 231 | case 0xc1: w(r, 491, 1); break; |
| 232 | case 0xc2: w(r, 491, 1); break; |
| 233 | case 0xc3: w(r, 491, 1); break; |
| 234 | case 0xc7: w(r, 358, 1); break; |
| 235 | case 0xc8: w(r, 921, 1); break; |
| 236 | case 0xc9: w(r, 921, 1); break; |
| 237 | case 0xca: w(r, 921, 1); break; |
| 238 | case 0xcb: w(r, 921, 1); break; |
| 239 | case 0xcc: w(r, 163, 1); break; |
| 240 | case 0xcd: w(r, 163, 1); break; |
| 241 | case 0xce: w(r, 163, 1); break; |
| 242 | case 0xcf: w(r, 163, 1); break; |
| 243 | case 0xd1: w(r, 1122, 1); break; |
| 244 | case 0xd2: w(r, 1125, 1); break; |
| 245 | case 0xd3: w(r, 1125, 1); break; |
| 246 | case 0xd4: w(r, 1125, 1); break; |
| 247 | case 0xd5: w(r, 1125, 1); break; |
| 248 | case 0xd9: w(r, 1143, 1); break; |
| 249 | case 0xda: w(r, 1143, 1); break; |