Warning, file /office/tellico/src/utils/iso5426converter.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /*************************************************************************** 0002 Copyright (C) 2006-2009 Robby Stephenson <robby@periapsis.org> 0003 ***************************************************************************/ 0004 0005 /*************************************************************************** 0006 * * 0007 * This program is free software; you can redistribute it and/or * 0008 * modify it under the terms of the GNU General Public License as * 0009 * published by the Free Software Foundation; either version 2 of * 0010 * the License or (at your option) version 3 or any later version * 0011 * accepted by the membership of KDE e.V. (or its successor approved * 0012 * by the membership of KDE e.V.), which shall act as a proxy * 0013 * defined in Section 14 of version 3 of the license. * 0014 * * 0015 * This program is distributed in the hope that it will be useful, * 0016 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 0018 * GNU General Public License for more details. * 0019 * * 0020 * You should have received a copy of the GNU General Public License * 0021 * along with this program. If not, see <http://www.gnu.org/licenses/>. * 0022 * * 0023 ***************************************************************************/ 0024 0025 // This class is adapted from Iso5426ToUnicode from the MARC4J project, available 0026 // from https://github.com/marc4j/marc4j, with the following notice: 0027 // * Copyright (C) 2002 Bas Peters (mail@bpeters.com) 0028 // * Copyright (C) 2002 Yves Pratter (ypratter@club-internet.fr) 0029 // 0030 // That source was released under the terms of the GNU Lesser General Public 0031 // License, version 2.1. In accordance with Condition 3 of that license, 0032 // I am applying the terms of the GNU General Public License to the source 0033 // code, and including a large portion of it here 0034 0035 #include "iso5426converter.h" 0036 #include "../tellico_debug.h" 0037 0038 #include <QString> 0039 #include <QByteArray> 0040 0041 using Tellico::Iso5426Converter; 0042 0043 QString Iso5426Converter::toUtf8(const QByteArray& text_) { 0044 const uint len = text_.length(); 0045 QString result; 0046 result.reserve(len); 0047 for(uint i = 0; i < len; ++i) { 0048 uchar c = uchar(text_.at(i)); 0049 if(isAscii(c)) { 0050 result.append(QLatin1Char(c)); 0051 } else if(isCombining(c) && hasNext(i, len)) { 0052 // this is a hack 0053 // use the diaeresis instead of umlaut 0054 // works for SUDOC 0055 if(c == 0xC9) { 0056 c = 0xC8; 0057 } 0058 // could be two combining characters 0059 uint comb = c << 8; 0060 uint skip = 1; 0061 const uchar next = uchar(text_.at(i+1)); 0062 if(isCombining(next) && hasNext(i+1, len)) { 0063 comb = (comb + next) << 8; 0064 skip++; 0065 } 0066 comb += uchar(text_.at(i+skip)); 0067 QChar d = getCombiningChar(comb); 0068 if(!d.isNull()) { 0069 result.append(d); 0070 i += skip; 0071 } else { 0072 result.append(getChar(c)); 0073 } 0074 } else { 0075 result.append(getChar(c)); 0076 } 0077 } 0078 result.squeeze(); 0079 return result; 0080 } 0081 0082 inline 0083 bool Iso5426Converter::hasNext(uint pos, uint len) { 0084 return pos < (len - 1); 0085 } 0086 0087 inline 0088 bool Iso5426Converter::isAscii(uchar c) { 0089 return c <= 0x7F; 0090 } 0091 0092 inline 0093 bool Iso5426Converter::isCombining(uchar c) { 0094 return c >= 0xC0 && c <= 0xDF; 0095 } 0096 0097 // Source : https://www.itscj.ipsj.or.jp/iso-ir/053.pdf 0098 QChar Iso5426Converter::getChar(uchar c) { 0099 switch(c) { 0100 case 0xA1: 0101 return 0x00A1; // 2/1 inverted exclamation mark 0102 case 0xA2: 0103 return 0x201E; // 2/2 left low double quotation mark // was 0x201C 0104 case 0xA3: 0105 return 0x00A3; // 2/3 pound sign 0106 case 0xA4: 0107 return 0x0024; // 2/4 dollar sign 0108 case 0xA5: 0109 return 0x00A5; // 2/5 yen sign 0110 case 0xA6: 0111 return 0x2020; // 2/6 single dagger 0112 case 0xA7: 0113 return 0x00A7; // 2/7 paragraph (section) 0114 case 0xA8: 0115 return 0x2032; // 2/8 prime 0116 case 0xA9: 0117 return 0x2018; // 2/9 left high single quotation mark 0118 case 0xAA: 0119 return 0x201C; // 2/10 left high double quotation mark 0120 case 0xAB: 0121 return 0x00AB; // 2/11 left angle quotation mark 0122 case 0xAC: 0123 return 0x266D; // 2/12 music flat 0124 case 0xAD: 0125 return 0x00A9; // 2/13 copyright sign 0126 case 0xAE: 0127 return 0x2117; // 2/14 sound recording copyright sign 0128 case 0xAF: 0129 return 0x00AE; // 2/15 trade mark sign 0130 0131 case 0xB0: 0132 return 0x0639; // 3/0 ayn [ain] 0133 case 0xB1: 0134 return 0x0623; // 3/1 alif/hamzah [alef with hamza above] 0135 case 0xB2: 0136 return 0x201A; // 3/2 left low single quotation mark // was 0x2018 0137 // 3/3 (this position shall not be used) 0138 // 3/4 (this position shall not be used) 0139 // 3/5 (this position shall not be used) 0140 case 0xB6: 0141 return 0x2021; // 3/6 double dagger 0142 case 0xB7: 0143 return 0x00B7; // 3/7 middle dot 0144 case 0xB8: 0145 return 0x2033; // 3/8 double prime 0146 case 0xB9: 0147 return 0x2019; // 3/9 right high single quotation mark 0148 case 0xBA: 0149 return 0x201D; // 3/10 right high double quotation mark 0150 case 0xBB: 0151 return 0x00BB; // 3/11 right angle quotation mark 0152 case 0xBC: 0153 return 0x266F; // 3/12 musical sharp 0154 case 0xBD: 0155 return 0x02B9; // 3/13 mjagkij znak 0156 case 0xBE: 0157 return 0x02BA; // 3/14 tverdyj znak 0158 case 0xBF: 0159 return 0x00BF; // 3/15 inverted question mark 0160 0161 // 4/0 to 5/15 diacritic characters 0162 0163 // 6/0 (this position shall not be used) 0164 case 0xE1: 0165 return 0x00C6; // 6/1 CAPITAL DIPHTHONG A WITH E 0166 case 0xE2: 0167 return 0x0110; // 6/2 CAPITAL LETTER D WITH STROKE 0168 // 6/3 (this position shall not be used) 0169 // 6/4 (this position shall not be used) 0170 // 6/5 (this position shall not be used) 0171 case 0xE6: 0172 return 0x0132; // 6/6 CAPITAL LETTER IJ 0173 // 6/7 (this position shall not be used) 0174 case 0xE8: 0175 return 0x0141; // 6/8 CAPITAL LETTER L WITH STROKE 0176 case 0xE9: 0177 return 0x00D8; // 6/9 CAPITAL LETTER O WITH SOLIDUS [oblique stroke] 0178 case 0xEA: 0179 return 0x0152; // 6/10 CAPITAL DIPHTONG OE 0180 // 6/11 (this position shall not be used) 0181 case 0xEC: 0182 return 0x00DE; // 6/12 CAPITAL LETTER THORN 0183 // 6/13 (this position shall not be used) 0184 // 6/14 (this position shall not be used) 0185 // 6/15 (this position shall not be used) 0186 0187 // 7/0 (this position shall not be used) 0188 case 0xF1: 0189 return 0x00E6; // 7/1 small diphthong a with e 0190 case 0xF2: 0191 return 0x0111; // small letter d with stroke 0192 case 0xF3: 0193 return 0x00F0; // small letter eth 0194 // 7/4 (this position shall not be used) 0195 case 0xF5: 0196 return 0x0131; // 7/5 small letter i without dot 0197 case 0xF6: 0198 return 0x0133; // 7/6 small letter ij 0199 // 7/7 (this position shall not be used) 0200 case 0xF8: 0201 return 0x0142; // 7/8 small letter l with stroke 0202 case 0xF9: 0203 return 0x00F8; // 7/9 small letter o with solidus (oblique stroke) 0204 case 0xFA: 0205 return 0x0153; // 7/10 small diphtong oe 0206 case 0xFB: 0207 return 0x00DF; // 7/11 small letter sharp s 0208 case 0xFC: 0209 return 0x00FE; // 7/12 small letter thorn 0210 // 7/13 (this position shall not be used) 0211 // 7/14 (this position shall not be used) 0212 default: 0213 return QLatin1Char(c); 0214 } 0215 } 0216 0217 QChar Iso5426Converter::getCombiningChar(uint c) { 0218 switch(c) { 0219 // 4/0 low rising tone mark 0220 case 0xC041: 0221 return 0x1EA2; // CAPITAL A WITH HOOK ABOVE 0222 case 0xC045: 0223 return 0x1EBA; // CAPITAL E WITH HOOK ABOVE 0224 case 0xC049: 0225 return 0x1EC8; // CAPITAL I WITH HOOK ABOVE 0226 case 0xC04F: 0227 return 0x1ECE; // CAPITAL O WITH HOOK ABOVE 0228 case 0xC055: 0229 return 0x1EE6; // CAPITAL U WITH HOOK ABOVE 0230 case 0xC059: 0231 return 0x1EF6; // CAPITAL Y WITH HOOK ABOVE 0232 case 0xC061: 0233 return 0x1EA3; // small a with hook above 0234 case 0xC065: 0235 return 0x1EBB; // small e with hook above 0236 case 0xC069: 0237 return 0x1EC9; // small i with hook above 0238 case 0xC06F: 0239 return 0x1ECF; // small o with hook above 0240 case 0xC075: 0241 return 0x1EE7; // small u with hook above 0242 case 0xC079: 0243 return 0x1EF7; // small y with hook above 0244 0245 // 4/1 grave accent 0246 case 0xC141: 0247 return 0x00C0; // CAPITAL A WITH GRAVE ACCENT 0248 case 0xC145: 0249 return 0x00C8; // CAPITAL E WITH GRAVE ACCENT 0250 case 0xC149: 0251 return 0x00CC; // CAPITAL I WITH GRAVE ACCENT 0252 case 0xC14E: 0253 return 0x01F8; // CAPITAL LETTER N WITH GRAVE 0254 case 0xC14F: 0255 return 0x00D2; // CAPITAL O WITH GRAVE ACCENT 0256 case 0xC155: 0257 return 0x00D9; // CAPITAL U WITH GRAVE ACCENT 0258 case 0xC157: 0259 return 0x1E80; // CAPITAL W WITH GRAVE 0260 case 0xC159: 0261 return 0x1EF2; // CAPITAL Y WITH GRAVE 0262 case 0xC161: 0263 return 0x00E0; // small a with grave accent 0264 case 0xC165: 0265 return 0x00E8; // small e with grave accent 0266 case 0xC169: 0267 return 0x00EC; // small i with grave accent 0268 case 0xC16E: 0269 return 0x01F9; // SMALL LETTER N WITH GRAVE 0270 case 0xC16F: 0271 return 0x00F2; // small o with grave accent 0272 case 0xC175: 0273 return 0x00F9; // small u with grave accent 0274 case 0xC177: 0275 return 0x1E81; // small w with grave 0276 case 0xC179: 0277 return 0x1EF3; // small y with grave 0278 0279 // 4/2 acute accent 0280 case 0xC241: 0281 return 0x00C1; // CAPITAL A WITH ACUTE ACCENT 0282 case 0xC243: 0283 return 0x0106; // CAPITAL C WITH ACUTE ACCENT 0284 case 0xC245: 0285 return 0x00C9; // CAPITAL E WITH ACUTE ACCENT 0286 case 0xC247: 0287 return 0x01F4; // CAPITAL G WITH ACUTE 0288 case 0xC249: 0289 return 0x00CD; // CAPITAL I WITH ACUTE ACCENT 0290 case 0xC24B: 0291 return 0x1E30; // CAPITAL K WITH ACUTE 0292 case 0xC24C: 0293 return 0x0139; // CAPITAL L WITH ACUTE ACCENT 0294 case 0xC24D: 0295 return 0x1E3E; // CAPITAL M WITH ACUTE 0296 case 0xC24E: 0297 return 0x0143; // CAPITAL N WITH ACUTE ACCENT 0298 case 0xC24F: 0299 return 0x00D3; // CAPITAL O WITH ACUTE ACCENT 0300 case 0xC250: 0301 return 0x1E54; // CAPITAL P WITH ACUTE 0302 case 0xC252: 0303 return 0x0154; // CAPITAL R WITH ACUTE ACCENT 0304 case 0xC253: 0305 return 0x015A; // CAPITAL S WITH ACUTE ACCENT 0306 case 0xC255: 0307 return 0x00DA; // CAPITAL U WITH ACUTE ACCENT 0308 case 0xC257: 0309 return 0x1E82; // CAPITAL W WITH ACUTE 0310 case 0xC259: 0311 return 0x00DD; // CAPITAL Y WITH ACUTE ACCENT 0312 case 0xC25A: 0313 return 0x0179; // CAPITAL Z WITH ACUTE ACCENT 0314 case 0xC261: 0315 return 0x00E1; // small a with acute accent 0316 case 0xC263: 0317 return 0x0107; // small c with acute accent 0318 case 0xC265: 0319 return 0x00E9; // small e with acute accent 0320 case 0xC267: 0321 return 0x01F5; // small g with acute 0322 case 0xC269: 0323 return 0x00ED; // small i with acute accent 0324 case 0xC26B: 0325 return 0x1E31; // small k with acute 0326 case 0xC26C: 0327 return 0x013A; // small l with acute accent 0328 case 0xC26D: 0329 return 0x1E3F; // small m with acute 0330 case 0xC26E: 0331 return 0x0144; // small n with acute accent 0332 case 0xC26F: 0333 return 0x00F3; // small o with acute accent 0334 case 0xC270: 0335 return 0x1E55; // small p with acute 0336 case 0xC272: 0337 return 0x0155; // small r with acute accent 0338 case 0xC273: 0339 return 0x015B; // small s with acute accent 0340 case 0xC275: 0341 return 0x00FA; // small u with acute accent 0342 case 0xC277: 0343 return 0x1E83; // small w with acute 0344 case 0xC279: 0345 return 0x00FD; // small y with acute accent 0346 case 0xC27A: 0347 return 0x017A; // small z with acute accent 0348 case 0xC2E1: 0349 return 0x01FC; // CAPITAL AE WITH ACUTE 0350 case 0xC2E9: 0351 return 0x01FE; // CAPITAL LETTER O WITH STROKE AND ACUTE 0352 case 0xC2F1: 0353 return 0x01FD; // SMALL LETTER AE WITH ACUTE 0354 case 0xC2F9: 0355 return 0x01FF; // Small LETTER O WITH STROKE AND ACUTE 0356 0357 // 4/3 circumflex accent 0358 case 0xC341: 0359 return 0x00C2; // CAPITAL A WITH CIRCUMFLEX ACCENT 0360 case 0xC343: 0361 return 0x0108; // CAPITAL C WITH CIRCUMFLEX 0362 case 0xC345: 0363 return 0x00CA; // CAPITAL E WITH CIRCUMFLEX ACCENT 0364 case 0xC347: 0365 return 0x011C; // CAPITAL G WITH CIRCUMFLEX 0366 case 0xC348: 0367 return 0x0124; // CAPITAL H WITH CIRCUMFLEX 0368 case 0xC349: 0369 return 0x00CE; // CAPITAL I WITH CIRCUMFLEX ACCENT 0370 case 0xC34A: 0371 return 0x0134; // CAPITAL J WITH CIRCUMFLEX 0372 case 0xC34F: 0373 return 0x00D4; // CAPITAL O WITH CIRCUMFLEX ACCENT 0374 case 0xC353: 0375 return 0x015C; // CAPITAL S WITH CIRCUMFLEX 0376 case 0xC355: 0377 return 0x00DB; // CAPITAL U WITH CIRCUMFLEX 0378 case 0xC357: 0379 return 0x0174; // CAPITAL W WITH CIRCUMFLEX 0380 case 0xC359: 0381 return 0x0176; // CAPITAL Y WITH CIRCUMFLEX 0382 case 0xC35A: 0383 return 0x1E90; // CAPITAL Z WITH CIRCUMFLEX 0384 case 0xC361: 0385 return 0x00E2; // small a with circumflex accent 0386 case 0xC363: 0387 return 0x0109; // small c with circumflex 0388 case 0xC365: 0389 return 0x00EA; // small e with circumflex accent 0390 case 0xC367: 0391 return 0x011D; // small g with circumflex 0392 case 0xC368: 0393 return 0x0125; // small h with circumflex 0394 case 0xC369: 0395 return 0x00EE; // small i with circumflex accent 0396 case 0xC36A: 0397 return 0x0135; // small j with circumflex 0398 case 0xC36F: 0399 return 0x00F4; // small o with circumflex accent 0400 case 0xC373: 0401 return 0x015D; // small s with circumflex 0402 case 0xC375: 0403 return 0x00FB; // small u with circumflex 0404 case 0xC377: 0405 return 0x0175; // small w with circumflex 0406 case 0xC379: 0407 return 0x0177; // small y with circumflex 0408 case 0xC37A: 0409 return 0x1E91; // small z with circumflex 0410 0411 // 4/4 tilde 0412 case 0xC441: 0413 return 0x00C3; // CAPITAL A WITH TILDE 0414 case 0xC445: 0415 return 0x1EBC; // CAPITAL E WITH TILDE 0416 case 0xC449: 0417 return 0x0128; // CAPITAL I WITH TILDE 0418 case 0xC44E: 0419 return 0x00D1; // CAPITAL N WITH TILDE 0420 case 0xC44F: 0421 return 0x00D5; // CAPITAL O WITH TILDE 0422 case 0xC455: 0423 return 0x0168; // CAPITAL U WITH TILDE 0424 case 0xC456: 0425 return 0x1E7C; // CAPITAL V WITH TILDE 0426 case 0xC459: 0427 return 0x1EF8; // CAPITAL Y WITH TILDE 0428 case 0xC461: 0429 return 0x00E3; // small a with tilde 0430 case 0xC465: 0431 return 0x1EBD; // small e with tilde 0432 case 0xC469: 0433 return 0x0129; // small i with tilde 0434 case 0xC46E: 0435 return 0x00F1; // small n with tilde 0436 case 0xC46F: 0437 return 0x00F5; // small o with tilde 0438 case 0xC475: 0439 return 0x0169; // small u with tilde 0440 case 0xC476: 0441 return 0x1E7D; // small v with tilde 0442 case 0xC479: 0443 return 0x1EF9; // small y with tilde 0444 case 0xC4E1: // is this an error 0445 return 0x01E2; // CAPITAL AE WITH MACRON 0446 case 0xC4F1: 0447 return 0x01E3; // small ae with macron 0448 0449 // 4/5 macron 0450 case 0xC541: 0451 return 0x0100; // CAPITAL A WITH MACRON 0452 case 0xC545: 0453 return 0x0112; // CAPITAL E WITH MACRON 0454 case 0xC547: 0455 return 0x1E20; // CAPITAL G WITH MACRON 0456 case 0xC549: 0457 return 0x012A; // CAPITAL I WITH MACRON 0458 case 0xC54F: 0459 return 0x014C; // CAPITAL O WITH MACRON 0460 case 0xC555: 0461 return 0x016A; // CAPITAL U WITH MACRON 0462 case 0xC559: 0463 return 0x0232; // CAPITAL LETTER Y WITH MACRON 0464 case 0xC561: 0465 return 0x0101; // small a with macron 0466 case 0xC565: 0467 return 0x0113; // small e with macron 0468 case 0xC567: 0469 return 0x1E21; // small g with macron 0470 case 0xC569: 0471 return 0x012B; // small i with macron 0472 case 0xC56F: 0473 return 0x014D; // small o with macron 0474 case 0xC575: 0475 return 0x016B; // small u with macron 0476 case 0xC579: 0477 return 0x0233; // Small LETTER Y WITH MACRON 0478 case 0xC5E1: 0479 return 0x01E2; // CAPITAL AE WITH MACRON 0480 case 0xC5F1: 0481 return 0x01E3; // small ae with macron 0482 0483 // 4/6 breve 0484 case 0xC641: 0485 return 0x0102; // CAPITAL A WITH BREVE 0486 case 0xC645: 0487 return 0x0114; // CAPITAL E WITH BREVE 0488 case 0xC647: 0489 return 0x011E; // CAPITAL G WITH BREVE 0490 case 0xC649: 0491 return 0x012C; // CAPITAL I WITH BREVE 0492 case 0xC64F: 0493 return 0x014E; // CAPITAL O WITH BREVE 0494 case 0xC655: 0495 return 0x016C; // CAPITAL U WITH BREVE 0496 case 0xC661: 0497 return 0x0103; // small a with breve 0498 case 0xC665: 0499 return 0x0115; // small e with breve 0500 case 0xC667: 0501 return 0x011F; // small g with breve 0502 case 0xC669: 0503 return 0x012D; // small i with breve 0504 case 0xC66F: 0505 return 0x014F; // small o with breve 0506 case 0xC675: 0507 return 0x016D; // small u with breve 0508 0509 // 4/7 dot above 0510 case 0xC741: 0511 return 0x0226; // CAPITAL LETTER A WITH DOT ABOVE 0512 case 0xC742: 0513 return 0x1E02; // CAPITAL B WITH DOT ABOVE 0514 case 0xC743: 0515 return 0x010A; // CAPITAL C WITH DOT ABOVE 0516 case 0xC744: 0517 return 0x1E0A; // CAPITAL D WITH DOT ABOVE 0518 case 0xC745: 0519 return 0x0116; // CAPITAL E WITH DOT ABOVE 0520 case 0xC746: 0521 return 0x1E1E; // CAPITAL F WITH DOT ABOVE 0522 case 0xC747: 0523 return 0x0120; // CAPITAL G WITH DOT ABOVE 0524 case 0xC748: 0525 return 0x1E22; // CAPITAL H WITH DOT ABOVE 0526 case 0xC749: 0527 return 0x0130; // CAPITAL I WITH DOT ABOVE 0528 case 0xC74D: 0529 return 0x1E40; // CAPITAL M WITH DOT ABOVE 0530 case 0xC74E: 0531 return 0x1E44; // CAPITAL N WITH DOT ABOVE 0532 case 0xC74F: 0533 return 0x022E; // CAPITAL LETTER O WITH DOT ABOVE 0534 case 0xC750: 0535 return 0x1E56; // CAPITAL P WITH DOT ABOVE 0536 case 0xC752: 0537 return 0x1E58; // CAPITAL R WITH DOT ABOVE 0538 case 0xC753: 0539 return 0x1E60; // CAPITAL S WITH DOT ABOVE 0540 case 0xC754: 0541 return 0x1E6A; // CAPITAL T WITH DOT ABOVE 0542 case 0xC757: 0543 return 0x1E86; // CAPITAL W WITH DOT ABOVE 0544 case 0xC758: 0545 return 0x1E8A; // CAPITAL X WITH DOT ABOVE 0546 case 0xC759: 0547 return 0x1E8E; // CAPITAL Y WITH DOT ABOVE 0548 case 0xC75A: 0549 return 0x017B; // CAPITAL Z WITH DOT ABOVE 0550 case 0xC761: 0551 return 0x0227; // small LETTER A WITH DOT ABOVE 0552 case 0xC762: 0553 return 0x1E03; // small b with dot above 0554 case 0xC763: 0555 return 0x010B; // small c with dot above 0556 case 0xC764: 0557 return 0x1E0B; // small d with dot above 0558 case 0xC765: 0559 return 0x0117; // small e with dot above 0560 case 0xC766: 0561 return 0x1E1F; // small f with dot above 0562 case 0xC767: 0563 return 0x0121; // small g with dot above 0564 case 0xC768: 0565 return 0x1E23; // small h with dot above 0566 case 0xC76D: 0567 return 0x1E41; // small m with dot above 0568 case 0xC76E: 0569 return 0x1E45; // small n with dot above 0570 case 0xC76F: 0571 return 0x022F; // SMALL LETTER O WITH DOT ABOVE 0572 case 0xC770: 0573 return 0x1E57; // small p with dot above 0574 case 0xC772: 0575 return 0x1E59; // small r with dot above 0576 case 0xC773: 0577 return 0x1E61; // small s with dot above 0578 case 0xC774: 0579 return 0x1E6B; // small t with dot above 0580 case 0xC777: 0581 return 0x1E87; // small w with dot above 0582 case 0xC778: 0583 return 0x1E8B; // small x with dot above 0584 case 0xC779: 0585 return 0x1E8F; // small y with dot above 0586 case 0xC77A: 0587 return 0x017C; // small z with dot above 0588 0589 // 4/8 trema, diaresis 0590 case 0xC820: 0591 return 0x00A8; // diaeresis 0592 case 0xC841: 0593 return 0x00C4; // CAPITAL A WITH DIAERESIS 0594 case 0xC845: 0595 return 0x00CB; // CAPITAL E WITH DIAERESIS 0596 case 0xC848: 0597 return 0x1E26; // CAPITAL H WITH DIAERESIS 0598 case 0xC849: 0599 return 0x00CF; // CAPITAL I WITH DIAERESIS 0600 case 0xC84F: 0601 return 0x00D6; // CAPITAL O WITH DIAERESIS 0602 case 0xC855: 0603 return 0x00DC; // CAPITAL U WITH DIAERESIS 0604 case 0xC857: 0605 return 0x1E84; // CAPITAL W WITH DIAERESIS 0606 case 0xC858: 0607 return 0x1E8C; // CAPITAL X WITH DIAERESIS 0608 case 0xC859: 0609 return 0x0178; // CAPITAL Y WITH DIAERESIS 0610 case 0xC861: 0611 return 0x00E4; // small a with diaeresis 0612 case 0xC865: 0613 return 0x00EB; // small e with diaeresis 0614 case 0xC868: 0615 return 0x1E27; // small h with diaeresis 0616 case 0xC869: 0617 return 0x00EF; // small i with diaeresis 0618 case 0xC86F: 0619 return 0x00F6; // small o with diaeresis 0620 case 0xC874: 0621 return 0x1E97; // small t with diaeresis 0622 case 0xC875: 0623 return 0x00FC; // small u with diaeresis 0624 case 0xC877: 0625 return 0x1E85; // small w with diaeresis 0626 case 0xC878: 0627 return 0x1E8D; // small x with diaeresis 0628 case 0xC879: 0629 return 0x00FF; // small y with diaeresis 0630 0631 // 4/9 umlaut 0632 case 0xC920: 0633 return 0x00A8; // [diaeresis] 0634 0635 // 4/10 circle above 0636 case 0xCA41: 0637 return 0x00C5; // CAPITAL A WITH RING ABOVE 0638 case 0xCA55: // was CAAD 0639 return 0x016E; // CAPITAL U WITH RING ABOVE 0640 case 0xCA61: 0641 return 0x00E5; // small a with ring above 0642 case 0xCA75: 0643 return 0x016F; // small u with ring above 0644 case 0xCA77: 0645 return 0x1E98; // small w with ring above 0646 case 0xCA79: 0647 return 0x1E99; // small y with ring above 0648 0649 // 4/11 high comma off centre 0650 0651 // 4/12 inverted high comma centred 0652 0653 // 4/13 double acute accent 0654 case 0xCD4F: 0655 return 0x0150; // CAPITAL O WITH DOUBLE ACUTE 0656 case 0xCD55: 0657 return 0x0170; // CAPITAL U WITH DOUBLE ACUTE 0658 case 0xCD6F: 0659 return 0x0151; // small o with double acute 0660 case 0xCD75: 0661 return 0x0171; // small u with double acute 0662 0663 // 4/14 horn 0664 case 0xCE4F: // was 0xCE54 0665 return 0x01A0; // LATIN CAPITAL LETTER O WITH HORN 0666 case 0xCE55: 0667 return 0x01AF; // LATIN CAPITAL LETTER U WITH HORN 0668 case 0xCE6F: // was 0xCE74 0669 return 0x01A1; // latin small letter o with horn 0670 case 0xCE75: 0671 return 0x01B0; // latin small letter u with horn 0672 0673 // 4/15 caron (hacek) 0674 case 0xCF41: 0675 return 0x01CD; // CAPITAL A WITH CARON 0676 case 0xCF43: 0677 return 0x010C; // CAPITAL C WITH CARON 0678 case 0xCF44: 0679 return 0x010E; // CAPITAL D WITH CARON 0680 case 0xCF45: 0681 return 0x011A; // CAPITAL E WITH CARON 0682 case 0xCF47: 0683 return 0x01E6; // CAPITAL G WITH CARON 0684 case 0xCF48: 0685 return 0x021E; // CAPITAL LETTER H WITH CARON 0686 case 0xCF49: 0687 return 0x01CF; // CAPITAL I WITH CARON 0688 case 0xCF4B: 0689 return 0x01E8; // CAPITAL K WITH CARON 0690 case 0xCF4C: 0691 return 0x013D; // CAPITAL L WITH CARON 0692 case 0xCF4E: 0693 return 0x0147; // CAPITAL N WITH CARON 0694 case 0xCF4F: 0695 return 0x01D1; // CAPITAL O WITH CARON 0696 case 0xCF52: 0697 return 0x0158; // CAPITAL R WITH CARON 0698 case 0xCF53: 0699 return 0x0160; // CAPITAL S WITH CARON 0700 case 0xCF54: 0701 return 0x0164; // CAPITAL T WITH CARON 0702 case 0xCF55: 0703 return 0x01D3; // CAPITAL U WITH CARON 0704 case 0xCF5A: 0705 return 0x017D; // CAPITAL Z WITH CARON 0706 case 0xCF61: 0707 return 0x01CE; // small a with caron 0708 case 0xCF63: 0709 return 0x010D; // small c with caron 0710 case 0xCF64: 0711 return 0x010F; // small d with caron 0712 case 0xCF65: 0713 return 0x011B; // small e with caron 0714 case 0xCF67: 0715 return 0x01E7; // small g with caron 0716 case 0xCF68: 0717 return 0x021F; // small LETTER H WITH CARON 0718 case 0xCF69: 0719 return 0x01D0; // small i with caron 0720 case 0xCF6A: 0721 return 0x01F0; // small j with caron 0722 case 0xCF6B: 0723 return 0x01E9; // small k with caron 0724 case 0xCF6C: 0725 return 0x013E; // small l with caron 0726 case 0xCF6E: 0727 return 0x0148; // small n with caron 0728 case 0xCF6F: 0729 return 0x01D2; // small o with caron 0730 case 0xCF72: 0731 return 0x0159; // small r with caron 0732 case 0xCF73: 0733 return 0x0161; // small s with caron 0734 case 0xCF74: 0735 return 0x0165; // small t with caron 0736 case 0xCF75: 0737 return 0x01D4; // small u with caron 0738 case 0xCF7A: 0739 return 0x017E; // small z with caron 0740 0741 // 5/0 cedilla 0742 case 0xD020: 0743 return 0x00B8; // cedilla 0744 case 0xD043: 0745 return 0x00C7; // CAPITAL C WITH CEDILLA 0746 case 0xD044: 0747 return 0x1E10; // CAPITAL D WITH CEDILLA 0748 case 0xD045: 0749 return 0x0228; // CAPITAL LETTER E WITH CEDILLA 0750 case 0xD047: 0751 return 0x0122; // CAPITAL G WITH CEDILLA 0752 case 0xD048: 0753 return 0x1E28; // CAPITAL H WITH CEDILLA 0754 case 0xD04B: 0755 return 0x0136; // CAPITAL K WITH CEDILLA 0756 case 0xD04C: 0757 return 0x013B; // CAPITAL L WITH CEDILLA 0758 case 0xD04E: 0759 return 0x0145; // CAPITAL N WITH CEDILLA 0760 case 0xD052: 0761 return 0x0156; // CAPITAL R WITH CEDILLA 0762 case 0xD053: 0763 return 0x015E; // CAPITAL S WITH CEDILLA 0764 case 0xD054: 0765 return 0x0162; // CAPITAL T WITH CEDILLA 0766 case 0xD063: 0767 return 0x00E7; // small c with cedilla 0768 case 0xD064: 0769 return 0x1E11; // small d with cedilla 0770 case 0xD065: 0771 return 0x0229; // small LETTER E WITH CEDILLA 0772 case 0xD067: 0773 return 0x0123; // small g with cedilla 0774 case 0xD068: 0775 return 0x1E29; // small h with cedilla 0776 case 0xD06B: 0777 return 0x0137; // small k with cedilla 0778 case 0xD06C: 0779 return 0x013C; // small l with cedilla 0780 case 0xD06E: 0781 return 0x0146; // small n with cedilla 0782 case 0xD072: 0783 return 0x0157; // small r with cedilla 0784 case 0xD073: 0785 return 0x015F; // small s with cedilla 0786 case 0xD074: 0787 return 0x0163; // small t with cedilla 0788 0789 // 5/1 rude 0790 0791 // 5/2 hook to left 0792 case 0xD253: 0793 return 0x0218; // CAPITAL LETTER S WITH COMMA BELOW 0794 case 0xD254: 0795 return 0x021A; // CAPITAL LETTER T WITH COMMA BELOW 0796 case 0xD273: 0797 return 0x0219; // Small LETTER S WITH COMMA BELOW 0798 case 0xD274: 0799 return 0x021B; // Small LETTER T WITH COMMA BELOW 0800 0801 // 5/3 ogonek (hook to right) 0802 case 0xD320: 0803 return 0x02DB; // ogonek 0804 case 0xD341: 0805 return 0x0104; // CAPITAL A WITH OGONEK 0806 case 0xD345: 0807 return 0x0118; // CAPITAL E WITH OGONEK 0808 case 0xD349: 0809 return 0x012E; // CAPITAL I WITH OGONEK 0810 case 0xD34F: 0811 return 0x01EA; // CAPITAL O WITH OGONEK 0812 case 0xD355: 0813 return 0x0172; // CAPITAL U WITH OGONEK 0814 case 0xD361: 0815 return 0x0105; // small a with ogonek 0816 case 0xD365: 0817 return 0x0119; // small e with ogonek 0818 case 0xD369: 0819 return 0x012F; // small i with ogonek 0820 case 0xD36F: 0821 return 0x01EB; // small o with ogonek 0822 case 0xD375: 0823 return 0x0173; // small u with ogonek 0824 0825 // 5/4 circle below 0826 case 0xD441: 0827 return 0x1E00; // CAPITAL A WITH RING BELOW 0828 case 0xD461: 0829 return 0x1E01; // small a with ring below 0830 case 0xD548: 0831 return 0x1E2A; // CAPITAL LETTER H WITH BREVE BELOW 0832 case 0xD568: 0833 return 0x1E2B; // small LETTER H WITH BREVE BELOW 0834 0835 // 5/6 dot below 0836 case 0xD641: 0837 return 0x1EA0; // CAPITAL A WITH DOT BELOW 0838 case 0xD642: 0839 return 0x1E04; // CAPITAL B WITH DOT BELOW 0840 case 0xD644: 0841 return 0x1E0C; // CAPITAL D WITH DOT BELOW 0842 case 0xD645: 0843 return 0x1EB8; // CAPITAL E WITH DOT BELOW 0844 case 0xD648: 0845 return 0x1E24; // CAPITAL H WITH DOT BELOW 0846 case 0xD649: 0847 return 0x1ECA; // CAPITAL I WITH DOT BELOW 0848 case 0xD64B: 0849 return 0x1E32; // CAPITAL K WITH DOT BELOW 0850 case 0xD64C: 0851 return 0x1E36; // CAPITAL L WITH DOT BELOW 0852 case 0xD64D: 0853 return 0x1E42; // CAPITAL M WITH DOT BELOW 0854 case 0xD64E: 0855 return 0x1E46; // CAPITAL N WITH DOT BELOW 0856 case 0xD64F: 0857 return 0x1ECC; // CAPITAL O WITH DOT BELOW 0858 case 0xD652: 0859 return 0x1E5A; // CAPITAL R WITH DOT BELOW 0860 case 0xD653: 0861 return 0x1E62; // CAPITAL S WITH DOT BELOW 0862 case 0xD654: 0863 return 0x1E6C; // CAPITAL T WITH DOT BELOW 0864 case 0xD655: 0865 return 0x1EE4; // CAPITAL U WITH DOT BELOW 0866 case 0xD656: 0867 return 0x1E7E; // CAPITAL V WITH DOT BELOW 0868 case 0xD657: 0869 return 0x1E88; // CAPITAL W WITH DOT BELOW 0870 case 0xD659: 0871 return 0x1EF4; // CAPITAL Y WITH DOT BELOW 0872 case 0xD65A: 0873 return 0x1E92; // CAPITAL Z WITH DOT BELOW 0874 case 0xD661: 0875 return 0x1EA1; // small a with dot below 0876 case 0xD662: 0877 return 0x1E05; // small b with dot below 0878 case 0xD664: 0879 return 0x1E0D; // small d with dot below 0880 case 0xD665: 0881 return 0x1EB9; // small e with dot below 0882 case 0xD668: 0883 return 0x1E25; // small h with dot below 0884 case 0xD669: 0885 return 0x1ECB; // small i with dot below 0886 case 0xD66B: 0887 return 0x1E33; // small k with dot below 0888 case 0xD66C: 0889 return 0x1E37; // small l with dot below 0890 case 0xD66D: 0891 return 0x1E43; // small m with dot below 0892 case 0xD66E: 0893 return 0x1E47; // small n with dot below 0894 case 0xD66F: 0895 return 0x1ECD; // small o with dot below 0896 case 0xD672: 0897 return 0x1E5B; // small r with dot below 0898 case 0xD673: 0899 return 0x1E63; // small s with dot below 0900 case 0xD674: 0901 return 0x1E6D; // small t with dot below 0902 case 0xD675: 0903 return 0x1EE5; // small u with dot below 0904 case 0xD676: 0905 return 0x1E7F; // small v with dot below 0906 case 0xD677: 0907 return 0x1E89; // small w with dot below 0908 case 0xD679: 0909 return 0x1EF5; // small y with dot below 0910 case 0xD67A: 0911 return 0x1E93; // small z with dot below 0912 0913 // 5/7 double dot below 0914 case 0xD755: 0915 return 0x1E72; // CAPITAL U WITH DIAERESIS BELOW 0916 case 0xD775: 0917 return 0x1E73; // small u with diaeresis below 0918 0919 // 5/8 underline 0920 case 0xD820: 0921 return 0x005F; // underline 0922 0923 // 5/9 double underline 0924 case 0xD920: 0925 return 0x2017; // double underline 0926 0927 // 5/10 small low vertical bar 0928 case 0xDA20: 0929 return 0x02CC; // 0930 0931 case 0xDB44: 0932 return 0x1E12; // CAPITAL LETTER D WITH CIRCUMFLEX BELOW 0933 case 0xDB45: 0934 return 0x1E18; // CAPITAL LETTER E WITH CIRCUMFLEX BELOW 0935 case 0xDB4C: 0936 return 0x1E3C; // CAPITAL LETTER L WITH CIRCUMFLEX BELOW 0937 case 0xDB4E: 0938 return 0x1E4A; // CAPITAL LETTER N WITH CIRCUMFLEX BELOW 0939 case 0xDB54: 0940 return 0x1E70; // CAPITAL LETTER T WITH CIRCUMFLEX BELOW 0941 case 0xDB55: 0942 return 0x1E76; // CAPITAL LETTER U WITH CIRCUMFLEX BELOW 0943 case 0xDB64: 0944 return 0x1E13; // SMALL LETTER D WITH CIRCUMFLEX BELOW 0945 case 0xDB65: 0946 return 0x1E19; // SMALL LETTER E WITH CIRCUMFLEX BELOW 0947 case 0xDB6C: 0948 return 0x1E3D; // Small LETTER L WITH CIRCUMFLEX BELOW 0949 case 0xDB6E: 0950 return 0x1E4B; // SMALL LETTER N WITH CIRCUMFLEX BELOW 0951 case 0xDB74: 0952 return 0x1E71; // SMALL LETTER T WITH CIRCUMFLEX BELOW 0953 case 0xDB75: 0954 return 0x1E77; // SMALL LETTER U WITH CIRCUMFLEX BELOW 0955 0956 // 5/5 half circle below 0957 case 0xF948: 0958 return 0x1E2A; // CAPITAL H WITH BREVE BELOW 0959 case 0xF968: 0960 return 0x1E2B; // small h with breve below 0961 0962 // 5/11 circumflex below 0963 0964 // 5/12 (this position shall not be used) 0965 0966 // 5/13 left half of ligature sign and of double tilde 0967 0968 // 5/14 right half of ligature sign 0969 0970 // 5/15 right half of double tilde 0971 0972 case 0xC0C341: 0973 return 0x1EA8; // CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE 0974 case 0xC0C345: 0975 return 0x1EC2; // CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 0976 case 0xC0C34F: 0977 return 0x1ED4; // CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 0978 case 0xC0C361: 0979 return 0x1EA9; // SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE 0980 case 0xC0C365: 0981 return 0x1EC3; // SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE 0982 case 0xC0C36F: 0983 return 0x1ED5; // SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE 0984 case 0xC0C641: 0985 return 0x1EB2; // CAPITAL LETTER A WITH BREVE AND HOOK ABOVE 0986 case 0xC0C661: 0987 return 0x1EB3; // SMALL LETTER A WITH BREVE AND HOOK ABOVE 0988 case 0xC0CE4F: 0989 return 0x1EDE; // CAPITAL LETTER O WITH HORN AND HOOK ABOVE 0990 case 0xC0CE55: 0991 return 0x1EEC; // CAPITAL LETTER U WITH HORN AND HOOK ABOVE 0992 case 0xC0CE6F: 0993 return 0x1EDF; // SMALL LETTER O WITH HORN AND HOOK ABOVE 0994 case 0xC0CE75: 0995 return 0x1EED; // SMALL LETTER U WITH HORN AND HOOK ABOVE 0996 0997 case 0xC1C341: 0998 return 0x1EA6; // CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE 0999 case 0xC1C345: 1000 return 0x1EC0; // CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE 1001 case 0xC1C34F: 1002 return 0x1ED2; // CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE 1003 case 0xC1C361: 1004 return 0x1EA7; // SMALL LETTER A WITH CIRCUMFLEX AND GRAVE 1005 case 0xC1C365: 1006 return 0x1EC1; // SMALL LETTER E WITH CIRCUMFLEX AND GRAVE 1007 case 0xC1C36F: 1008 return 0x1ED3; // SMALL LETTER O WITH CIRCUMFLEX AND GRAVE 1009 case 0xC1C545: 1010 return 0x1E14; // CAPITAL LETTER E WITH MACRON AND GRAVE 1011 case 0xC1C54F: 1012 return 0x1E50; // CAPITAL LETTER O WITH MACRON AND GRAVE 1013 case 0xC1C565: 1014 return 0x1E15; // SMALL LETTER E WITH MACRON AND GRAVE 1015 case 0xC1C56F: 1016 return 0x1E51; // SMALL LETTER O WITH MACRON AND GRAVE 1017 case 0xC1C641: 1018 return 0x1EB0; // CAPITAL LETTER A WITH BREVE AND GRAVE 1019 case 0xC1C661: 1020 return 0x1EB1; // SMALL LETTER A WITH BREVE AND GRAVE 1021 case 0xC1C855: 1022 return 0x01DB; // Capital Letter U with Diaeresis and GRAVE 1023 case 0xC1C875: 1024 return 0x01DC; // Small Letter U with Diaeresis and GRAVE 1025 case 0xC1CE4F: 1026 return 0x1EDC; // CAPITAL LETTER O WITH HORN AND GRAVE 1027 case 0xC1CE55: 1028 return 0x1EEA; // CAPITAL LETTER U WITH HORN AND GRAVE 1029 case 0xC1CE6F: 1030 return 0x1EDD; // SMALL LETTER O WITH HORN AND GRAVE 1031 case 0xC1CE75: 1032 return 0x1EEB; // SMALL LETTER U WITH HORN AND GRAVE 1033 1034 case 0xC2C341: 1035 return 0x1EA4; // CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE 1036 case 0xC2C345: 1037 return 0x1EBE; // CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE 1038 case 0xC2C34F: 1039 return 0x1ED0; // CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE 1040 case 0xC2C361: 1041 return 0x1EA5; // SMALL LETTER A WITH CIRCUMFLEX AND ACUTE 1042 case 0xC2C365: 1043 return 0x1EBF; // SMALL LETTER E WITH CIRCUMFLEX AND ACUTE 1044 case 0xC2C36F: 1045 return 0x1ED1; // SMALL LETTER O WITH CIRCUMFLEX AND ACUTE 1046 case 0xC2C44F: 1047 return 0x1E4C; // CAPITAL LETTER O WITH TILDE AND ACUTE 1048 case 0xC2C455: 1049 return 0x1E78; // CAPITAL LETTER U WITH TILDE AND ACUTE 1050 case 0xC2C46F: 1051 return 0x1E4D; // SMALL LETTER O WITH TILDE AND ACUTE 1052 case 0xC2C475: 1053 return 0x1E79; // SMALL LETTER U WITH TILDE AND ACUTE 1054 case 0xC2C545: 1055 return 0x1E16; // CAPITAL LETTER E WITH MACRON AND ACUTE 1056 case 0xC2C565: 1057 return 0x1E17; // SMALL LETTER E WITH MACRON AND ACUTE 1058 case 0xC2C54F: 1059 return 0x1E52; // CAPITAL LETTER O WITH MACRON AND ACUTE 1060 case 0xC2C56F: 1061 return 0x1E53; // SMALL LETTER O WITH MACRON AND ACUTE 1062 case 0xC2C641: 1063 return 0x1EAE; // CAPITAL LETTER A WITH BREVE AND ACUTE 1064 case 0xC2C661: 1065 return 0x1EAF; // SMALL LETTER A WITH BREVE AND ACUTE 1066 case 0xC2C849: 1067 return 0x1E2E; // CAPITAL LETTER I WITH DIAERESIS AND ACUTE 1068 case 0xC2C855: 1069 return 0x01D7; // Capital Letter U with Diaeresis and ACUTE 1070 case 0xC2C869: 1071 return 0x1E2F; // Small LETTER I WITH DIAERESIS AND ACUTE 1072 case 0xC2C875: 1073 return 0x01D8; // Small Letter U with Diaeresis and ACUTE 1074 case 0xC2CA41: 1075 return 0x01FA; // CAPITAL LETTER A WITH RING ABOVE AND ACUTE 1076 case 0xC2CA61: 1077 return 0x01FB; // SMALL LETTER A WITH RING ABOVE AND ACUTE 1078 case 0xC2CE4F: 1079 return 0x1EDA; // CAPITAL LETTER O WITH HORN AND ACUTE 1080 case 0xC2CE55: 1081 return 0x1EE8; // CAPITAL LETTER U WITH HORN AND ACUTE 1082 case 0xC2CE6F: 1083 return 0x1EDB; // SMALL LETTER O WITH HORN AND ACUTE 1084 case 0xC2CE75: 1085 return 0x1EE9; // small LETTER U WITH HORN AND ACUTE 1086 case 0xC2D043: 1087 return 0x1E08; // CAPITAL LETTER C WITH CEDILLA AND ACUTE 1088 case 0xC2D063: 1089 return 0x1E09; // Small LETTER C WITH CEDILLA AND ACUTE 1090 1091 case 0xC3D641: 1092 return 0x1EAC; // CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW 1093 case 0xC3D645: 1094 return 0x1EC6; // CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1095 case 0xC3D64F: 1096 return 0x1ED8; // CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1097 case 0xC3D661: 1098 return 0x1EAD; // SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW 1099 case 0xC3D665: 1100 return 0x1EC7; // SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW 1101 case 0xC3D66F: 1102 return 0x1ED9; // SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW 1103 1104 case 0xC4C341: 1105 return 0x1EAA; // CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE 1106 case 0xC4C345: 1107 return 0x1EC4; // CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE 1108 case 0xC4C34F: 1109 return 0x1ED6; // CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE 1110 case 0xC4C361: 1111 return 0x1EAB; // SMALL LETTER A WITH CIRCUMFLEX AND TILDE 1112 case 0xC4C365: 1113 return 0x1EC5; // SMALL LETTER E WITH CIRCUMFLEX AND TILDE 1114 case 0xC4C36F: 1115 return 0x1ED7; // SMALL LETTER O WITH CIRCUMFLEX AND TILDE 1116 case 0xC4C641: 1117 return 0x1EB4; // CAPITAL LETTER A WITH BREVE AND TILDE 1118 case 0xC4C661: 1119 return 0x1EB5; // SMALL LETTER A WITH BREVE AND TILDE 1120 case 0xC4CE4F: 1121 return 0x1EE0; // CAPITAL LETTER O WITH HORN AND TILDE 1122 case 0xC4CE55: 1123 return 0x1EEE; // CAPITAL LETTER U WITH HORN AND TILDE 1124 case 0xC4CE6F: 1125 return 0x1EE1; // SMALL LETTER O WITH HORN AND TILDE 1126 case 0xC4CE75: 1127 return 0x1EEF; // SMALL LETTER U WITH HORN AND TILDE 1128 1129 case 0xC5C44F: 1130 return 0x022C; // CAPITAL LETTER O WITH TILDE AND MACRON 1131 case 0xC5C741: 1132 return 0x01E0; // CAPITAL LETTER A WITH DOT ABOVE AND MACRON 1133 case 0xC5C74F: 1134 return 0x0230; // CAPITAL LETTER O WITH DOT ABOVE AND MACRON 1135 case 0xC5C761: 1136 return 0x01E1; // SMALL LETTER A WITH DOT ABOVE AND MACRON 1137 case 0xC5C76F: 1138 return 0x0231; // SMALL LETTER O WITH DOT ABOVE AND MACRON 1139 case 0xC5C841: 1140 return 0x01DE; // CAPITAL LETTER A WITH DIAERESIS AND MACRON 1141 case 0xC5C84F: 1142 return 0x022A; // CAPITAL LETTER O WITH DIAERESIS AND MACRON 1143 case 0xC5C855: 1144 return 0x01D5; // Capital Letter U with Diaeresis and Macron 1145 case 0xC5C861: 1146 return 0x01DF; // Small LETTER A WITH DIAERESIS AND MACRON 1147 case 0xC5C875: 1148 return 0x01D6; // Small Letter U with Diaeresis and Macron 1149 case 0xC5D34F: 1150 return 0x01EC; // CAPITAL LETTER O WITH OGONEK AND MACRON 1151 case 0xC5D36F: 1152 return 0x01ED; // SMALL LETTER O WITH OGONEK AND MACRON 1153 case 0xC5C46F: 1154 return 0x022D; // SMALL LETTER O WITH TILDE AND MACRON 1155 case 0xC5D64C: 1156 return 0x1E38; // CAPITAL LETTER L WITH DOT BELOW AND MACRON 1157 case 0xC5D652: 1158 return 0x1E5C; // CAPITAL LETTER R WITH DOT BELOW AND MACRON 1159 case 0xC5D66C: 1160 return 0x1E39; // Small LETTER L WITH DOT BELOW AND MACRON 1161 case 0xC5D672: 1162 return 0x1E5D; // SMALL LETTER R WITH DOT BELOW AND MACRON 1163 case 0xC5C86F: 1164 return 0x022B; // small LETTER O WITH DIAERESIS AND MACRON 1165 1166 case 0xC6D045: 1167 return 0x1E1C; // CAPITAL LETTER E WITH CEDILLA AND BREVE 1168 case 0xC6D065: 1169 return 0x1E1D; // Small LETTER E WITH CEDILLA AND BREVE 1170 case 0xC6D641: 1171 return 0x1EB6; // CAPITAL LETTER A WITH BREVE AND DOT BELOW 1172 case 0xC6D661: 1173 return 0x1EB7; // SMALL LETTER A WITH BREVE AND DOT BELOW 1174 1175 case 0xC7C253: 1176 return 0x1E64; // CAPITAL LETTER S WITH ACUTE AND DOT ABOVE 1177 case 0xC7C273: 1178 return 0x1E65; // SMALL LETTER S WITH ACUTE AND DOT ABOVE 1179 case 0xC7CF53: 1180 return 0x1E66; // CAPITAL LETTER S WITH CARON AND DOT ABOVE 1181 case 0xC7CF73: 1182 return 0x1E67; // SMALL LETTER S WITH CARON AND DOT ABOVE 1183 case 0xC7D653: 1184 return 0x1E68; // CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE 1185 case 0xC7D673: 1186 return 0x1E69; // SMALL LETTER S WITH DOT BELOW AND DOT ABOVE 1187 1188 case 0xC8C44F: 1189 return 0x1E4E; // CAPITAL LETTER O WITH TILDE AND DIAERESIS 1190 case 0xC8C46F: 1191 return 0x1E4F; // SMALL LETTER O WITH TILDE AND DIAERESIS 1192 case 0xC8C555: 1193 return 0x1E7A; // CAPITAL LETTER U WITH MACRON AND DIAERESIS 1194 case 0xC8C575: 1195 return 0x1E7B; // SMALL LETTER U WITH MACRON AND DIAERESIS 1196 1197 case 0xCFC855: 1198 return 0x01D9; // Capital Letter U with Diaeresis and CARON 1199 case 0xCFC875: 1200 return 0x01DA; // Small Letter U with Diaeresis and CARON 1201 1202 case 0xD6CE4F: 1203 return 0x1EE2; // CAPITAL LETTER O WITH HORN AND DOT BELOW 1204 case 0xD6CE55: 1205 return 0x1EF0; // CAPITAL LETTER U WITH HORN AND DOT BELOW 1206 case 0xD6CE6F: 1207 return 0x1EE3; // SMALL LETTER O WITH HORN AND DOT BELOW 1208 case 0xD6CE75: 1209 return 0x1EF1; // SMALL LETTER U WITH HORN AND DOT BELOW 1210 1211 default: 1212 #if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0)) 1213 myDebug() << "no match for" << hex << c; 1214 #else 1215 myDebug() << "no match for" << Qt::hex << c; 1216 #endif 1217 return QChar(); 1218 } 1219 }