Ticket #1466: siparser.diff

File siparser.diff, 20.9 KB (added by jiri.svoboda@…, 20 years ago)

Patch to siparser.cpp file for iso/iec 6937 dvb epg encoding

  • .cpp

    old new  
    966966                memmove(buf + p, buf + p + 1, --length - p);
    967967        }
    968968
     969
    969970        if (buf[0] >= 0x20)
    970971        {
    971             result = QString::fromLatin1((const char*)buf, length);
     972            // iso/iec 6937 to unicode (UCS2) convertor...
     973            // composed encoding - accent first then plain character
     974            int i;
     975            i = 0;
     976            result = QString("");
     977            while ((i < length) && (buf[i]!= 0))
     978                {
     979                    switch (buf[i])
     980                    {
     981                        // at first single byte characters
     982                        case 0xA8: result +=QChar(0x00A4); break;
     983                        case 0xA9: result +=QChar(0x2018); break;
     984                        case 0xAA: result +=QChar(0x201C); break;
     985                        case 0xAC: result +=QChar(0x2190); break;
     986                        case 0xAD: result +=QChar(0x2191); break;
     987                        case 0xAE: result +=QChar(0x2192); break;
     988                        case 0xAF: result +=QChar(0x2193); break;
     989                        case 0xB4: result +=QChar(0x00D7); break;
     990                        case 0xB8: result +=QChar(0x00F7); break;
     991                        case 0xB9: result +=QChar(0x2019); break;
     992                        case 0xBA: result +=QChar(0x201D); break;
     993                        case 0xD0: result +=QChar(0x2014); break;
     994                        case 0xD1: result +=QChar(0xB9); break;
     995                        case 0xD2: result +=QChar(0xAE); break;
     996                        case 0xD3: result +=QChar(0xA9); break;
     997                        case 0xD4: result +=QChar(0x2122); break;
     998                        case 0xD5: result +=QChar(0x266A); break;
     999                        case 0xD6: result +=QChar(0xAC); break;
     1000                        case 0xD7: result +=QChar(0xA6); break;
     1001                        case 0xDC: result +=QChar(0x215B); break;
     1002                        case 0xDD: result +=QChar(0x215C); break;
     1003                        case 0xDE: result +=QChar(0x215D); break;
     1004                        case 0xDF: result +=QChar(0x215E); break;
     1005                        case 0xE0: result +=QChar(0x2126); break;
     1006                        case 0xE1: result +=QChar(0xC6); break;
     1007                        case 0xE2: result +=QChar(0xD0); break;
     1008                        case 0xE3: result +=QChar(0xAA); break;
     1009                        case 0xE4: result +=QChar(0x126); break;
     1010                        case 0xE6: result +=QChar(0x132); break;
     1011                        case 0xE7: result +=QChar(0x013F); break;
     1012                        case 0xE8: result +=QChar(0x141); break;
     1013                        case 0xE9: result +=QChar(0xD8); break;
     1014                        case 0xEA: result +=QChar(0x152); break;
     1015                        case 0xEB: result +=QChar(0xBA); break;
     1016                        case 0xEC: result +=QChar(0xDE); break;
     1017                        case 0xED: result +=QChar(0x166); break;
     1018                        case 0xEE: result +=QChar(0x014A); break;
     1019                        case 0xEF: result +=QChar(0x149); break;
     1020                        case 0xF0: result +=QChar(0x138); break;
     1021                        case 0xF1: result +=QChar(0xE6); break;
     1022                        case 0xF2: result +=QChar(0x111); break;
     1023                        case 0xF3: result +=QChar(0xF0); break;
     1024                        case 0xF4: result +=QChar(0x127); break;
     1025                        case 0xF5: result +=QChar(0x131); break;
     1026                        case 0xF6: result +=QChar(0x133); break;
     1027                        case 0xF7: result +=QChar(0x140); break;
     1028                        case 0xF8: result +=QChar(0x142); break;
     1029                        case 0xF9: result +=QChar(0xF8); break;
     1030                        case 0xFA: result +=QChar(0x153); break;
     1031                        case 0xFB: result +=QChar(0xDF); break;
     1032                        case 0xFC: result +=QChar(0xFE); break;
     1033                        case 0xFD: result +=QChar(0x167); break;
     1034                        case 0xFE: result +=QChar(0x014B); break;
     1035                        case 0xFF: result +=QChar(0xAD); break;
     1036                        // multibyte
     1037                        case 0xC1:
     1038                            i++;
     1039                            switch (buf[i])
     1040                            {
     1041                                case 0x41: result +=QChar(0xC0); break;
     1042                                case 0x45: result +=QChar(0xC8); break;
     1043                                case 0x49: result +=QChar(0xCC); break;
     1044                                case 0x4F: result +=QChar(0xD2); break;
     1045                                case 0x55: result +=QChar(0xD9); break;
     1046                                case 0x61: result +=QChar(0xE0); break;
     1047                                case 0x65: result +=QChar(0xE8); break;
     1048                                case 0x69: result +=QChar(0xEC); break;
     1049                                case 0x6F: result +=QChar(0xF2); break;
     1050                                case 0x75: result +=QChar(0xF9); break;
     1051                                // unknown character --> fallback
     1052                                default: result +=buf[i]; break;
     1053                            }
     1054                            break;
     1055                        case 0xC2:
     1056                            i++;
     1057                            switch (buf[i])
     1058                            {
     1059                                case 0x20: result +=QChar(0xB4); break;
     1060                                case 0x41: result +=QChar(0xC1); break;
     1061                                case 0x43: result +=QChar(0x106); break;
     1062                                case 0x45: result +=QChar(0xC9); break;
     1063                                case 0x49: result +=QChar(0xCD); break;
     1064                                case 0x4C: result +=QChar(0x139); break;
     1065                                case 0x4E: result +=QChar(0x143); break;
     1066                                case 0x4F: result +=QChar(0xD3); break;
     1067                                case 0x52: result +=QChar(0x154); break;
     1068                                case 0x53: result +=QChar(0x015A); break;
     1069                                case 0x55: result +=QChar(0xDA); break;
     1070                                case 0x59: result +=QChar(0xDD); break;
     1071                                case 0x5A: result +=QChar(0x179); break;
     1072                                case 0x61: result +=QChar(0xE1); break;
     1073                                case 0x63: result +=QChar(0x107); break;
     1074                                case 0x65: result +=QChar(0xE9); break;
     1075                                case 0x69: result +=QChar(0xED); break;
     1076                                case 0x6C: result +=QChar(0x013A); break;
     1077                                case 0x6E: result +=QChar(0x144); break;
     1078                                case 0x6F: result +=QChar(0xF3); break;
     1079                                case 0x72: result +=QChar(0x155); break;
     1080                                case 0x73: result +=QChar(0x015B); break;
     1081                                case 0x75: result +=QChar(0xFA); break;
     1082                                case 0x79: result +=QChar(0xFD); break;
     1083                                case 0x7A: result +=QChar(0x017A); break;
     1084                                // unknown character --> fallback
     1085                                default: result +=buf[i]; break;
     1086                            }
     1087                            break;
     1088
     1089                        case 0xC3:
     1090                            i++;
     1091                            switch (buf[i])
     1092                            {
     1093                                case 0x41: result +=QChar(0xC2); break;
     1094                                case 0x43: result +=QChar(0x108); break;
     1095                                case 0x45: result +=QChar(0xCA); break;
     1096                                case 0x47: result +=QChar(0x011C); break;
     1097                                case 0x48: result +=QChar(0x124); break;
     1098                                case 0x49: result +=QChar(0xCE); break;
     1099                                case 0x4A: result +=QChar(0x134); break;
     1100                                case 0x4F: result +=QChar(0xD4); break;
     1101                                case 0x53: result +=QChar(0x015C); break;
     1102                                case 0x55: result +=QChar(0xDB); break;
     1103                                case 0x57: result +=QChar(0x174); break;
     1104                                case 0x59: result +=QChar(0x176); break;
     1105                                case 0x61: result +=QChar(0xE2); break;
     1106                                case 0x63: result +=QChar(0x109); break;
     1107                                case 0x65: result +=QChar(0xEA); break;
     1108                                case 0x67: result +=QChar(0x011D); break;
     1109                                case 0x68: result +=QChar(0x125); break;
     1110                                case 0x69: result +=QChar(0xEE); break;
     1111                                case 0x6A: result +=QChar(0x135); break;
     1112                                case 0x6F: result +=QChar(0xF4); break;
     1113                                case 0x73: result +=QChar(0x015D); break;
     1114                                case 0x75: result +=QChar(0xFB); break;
     1115                                case 0x77: result +=QChar(0x175); break;
     1116                                case 0x79: result +=QChar(0x177); break;
     1117                                // unknown character --> fallback
     1118                                default: result +=buf[i]; break;
     1119                            }
     1120                            break;
     1121                        case 0xC4:
     1122                            i++;
     1123                            switch (buf[i])
     1124                            {
     1125                                case 0x41: result +=QChar(0xC3); break;
     1126                                case 0x49: result +=QChar(0x128); break;
     1127                                case 0x4E: result +=QChar(0xD1); break;
     1128                                case 0x4F: result +=QChar(0xD5); break;
     1129                                case 0x55: result +=QChar(0x168); break;
     1130                                case 0x61: result +=QChar(0xE3); break;
     1131                                case 0x69: result +=QChar(0x129); break;
     1132                                case 0x6E: result +=QChar(0xF1); break;
     1133                                case 0x6F: result +=QChar(0xF5); break;
     1134                                case 0x75: result +=QChar(0x169); break;
     1135                                // unknown character --> fallback
     1136                                default: result +=buf[i]; break;
     1137                            }
     1138                            break;
     1139                        case 0xC5:
     1140                            i++;
     1141                            switch (buf[i])
     1142                            {
     1143                                case 0x20: result +=QChar(0xAF); break;
     1144                                case 0x41: result +=QChar(0x100); break;
     1145                                case 0x45: result +=QChar(0x112); break;
     1146                                case 0x49: result +=QChar(0x012A); break;
     1147                                case 0x4F: result +=QChar(0x014C); break;
     1148                                case 0x55: result +=QChar(0x016A); break;
     1149                                case 0x61: result +=QChar(0x101); break;
     1150                                case 0x65: result +=QChar(0x113); break;
     1151                                case 0x69: result +=QChar(0x012B); break;
     1152                                case 0x6F: result +=QChar(0x014D); break;
     1153                                case 0x75: result +=QChar(0x016B); break;
     1154                                // unknown character --> fallback
     1155                                default: result +=buf[i]; break;
     1156                            }
     1157                            break;
     1158                        case 0xC6:
     1159                            i++;
     1160                            switch (buf[i])
     1161                            {
     1162                                case 0x20: result +=QChar(0x02D8); break;
     1163                                case 0x41: result +=QChar(0x102); break;
     1164                                case 0x47: result +=QChar(0x011E); break;
     1165                                case 0x55: result +=QChar(0x016C); break;
     1166                                case 0x61: result +=QChar(0x103); break;
     1167                                case 0x67: result +=QChar(0x011F); break;
     1168                                case 0x75: result +=QChar(0x016D); break;
     1169                                // unknown character --> fallback
     1170                                default: result +=buf[i]; break;
     1171                            }
     1172                            break;
     1173                        case 0xC7:
     1174                            i++;
     1175                            switch (buf[i])
     1176                            {
     1177                                case 0x20: result +=QChar(0x02D9); break;
     1178                                case 0x43: result +=QChar(0x010A); break;
     1179                                case 0x45: result +=QChar(0x116); break;
     1180                                case 0x47: result +=QChar(0x120); break;
     1181                                case 0x49: result +=QChar(0x130); break;
     1182                                case 0x5A: result +=QChar(0x017B); break;
     1183                                case 0x63: result +=QChar(0x010B); break;
     1184                                case 0x65: result +=QChar(0x117); break;
     1185                                case 0x67: result +=QChar(0x121); break;
     1186                                case 0x7A: result +=QChar(0x017C); break;
     1187                                // unknown character --> fallback
     1188                                default: result +=buf[i]; break;
     1189                            }
     1190                            break;
     1191                        case 0xC8:
     1192                            i++;
     1193                            switch (buf[i])
     1194                            {
     1195                                case 0x20: result +=QChar(0xA8); break;
     1196                                case 0x41: result +=QChar(0xC4); break;
     1197                                case 0x45: result +=QChar(0xCB); break;
     1198                                case 0x49: result +=QChar(0xCF); break;
     1199                                case 0x4F: result +=QChar(0xD6); break;
     1200                                case 0x55: result +=QChar(0xDC); break;
     1201                                case 0x59: result +=QChar(0x178); break;
     1202                                case 0x61: result +=QChar(0xE4); break;
     1203                                case 0x65: result +=QChar(0xEB); break;
     1204                                case 0x69: result +=QChar(0xEF); break;
     1205                                case 0x6F: result +=QChar(0xF6); break;
     1206                                case 0x75: result +=QChar(0xFC); break;
     1207                                case 0x79: result +=QChar(0xFF); break;
     1208                                // unknown character --> fallback
     1209                                default: result +=buf[i]; break;
     1210                            }
     1211                            break;
     1212                        case 0xCA:
     1213                            i++;
     1214                            switch (buf[i])
     1215                            {
     1216                                case 0x20: result +=QChar(0x02DA); break;
     1217                                case 0x41: result +=QChar(0xC5); break;
     1218                                case 0x55: result +=QChar(0x016E); break;
     1219                                case 0x61: result +=QChar(0xE5); break;
     1220                                case 0x75: result +=QChar(0x016F); break;
     1221                                // unknown character --> fallback
     1222                                default: result +=buf[i]; break;
     1223                            }
     1224                            break;
     1225                        case 0xCB:
     1226                            i++;
     1227                            switch (buf[i])
     1228                            {
     1229                                case 0x20: result +=QChar(0xB8); break;
     1230                                case 0x43: result +=QChar(0xC7); break;
     1231                                case 0x47: result +=QChar(0x122); break;
     1232                                case 0x4B: result +=QChar(0x136); break;
     1233                                case 0x4C: result +=QChar(0x013B); break;
     1234                                case 0x4E: result +=QChar(0x145); break;
     1235                                case 0x52: result +=QChar(0x156); break;
     1236                                case 0x53: result +=QChar(0x015E); break;
     1237                                case 0x54: result +=QChar(0x162); break;
     1238                                case 0x63: result +=QChar(0xE7); break;
     1239                                case 0x67: result +=QChar(0x123); break;
     1240                                case 0x6B: result +=QChar(0x137); break;
     1241                                case 0x6C: result +=QChar(0x013C); break;
     1242                                case 0x6E: result +=QChar(0x146); break;
     1243                                case 0x72: result +=QChar(0x157); break;
     1244                                case 0x73: result +=QChar(0x015F); break;
     1245                                case 0x74: result +=QChar(0x163); break;
     1246                                // unknown character --> fallback
     1247                                default: result +=buf[i]; break;
     1248                            }
     1249                            break;
     1250                        case 0xCD:
     1251                            i++;
     1252                            switch (buf[i])
     1253                            {
     1254                                case 0x20: result +=QChar(0x02DD); break;
     1255                                case 0x4F: result +=QChar(0x150); break;
     1256                                case 0x55: result +=QChar(0x170); break;
     1257                                case 0x6F: result +=QChar(0x151); break;
     1258                                case 0x75: result +=QChar(0x171); break;
     1259                                // unknown character --> fallback
     1260                                default: result +=buf[i]; break;
     1261                            }
     1262                            break;
     1263                        case 0xCE:
     1264                            i++;
     1265                            switch (buf[i])
     1266                            {
     1267                                case 0x20: result +=QChar(0x02DB); break;
     1268                                case 0x41: result +=QChar(0x104); break;
     1269                                case 0x45: result +=QChar(0x118); break;
     1270                                case 0x49: result +=QChar(0x012E); break;
     1271                                case 0x55: result +=QChar(0x172); break;
     1272                                case 0x61: result +=QChar(0x105); break;
     1273                                case 0x65: result +=QChar(0x119); break;
     1274                                case 0x69: result +=QChar(0x012F); break;
     1275                                case 0x75: result +=QChar(0x173); break;
     1276                                // unknown character --> fallback
     1277                                default: result +=buf[i]; break;
     1278                            }
     1279                            break;
     1280                        case 0xCF:
     1281                            i++;
     1282                            switch (buf[i])
     1283                            {
     1284                                case 0x20: result +=QChar(0x02C7); break;
     1285                                case 0x43: result +=QChar(0x010C); break;
     1286                                case 0x44: result +=QChar(0x010E); break;
     1287                                case 0x45: result +=QChar(0x011A); break;
     1288                                case 0x4C: result +=QChar(0x013D); break;
     1289                                case 0x4E: result +=QChar(0x147); break;
     1290                                case 0x52: result +=QChar(0x158); break;
     1291                                case 0x53: result +=QChar(0x160); break;
     1292                                case 0x54: result +=QChar(0x164); break;
     1293                                case 0x5A: result +=QChar(0x017D); break;
     1294                                case 0x63: result +=QChar(0x010D); break;
     1295                                case 0x64: result +=QChar(0x010F); break;
     1296                                case 0x65: result +=QChar(0x011B); break;
     1297                                case 0x6C: result +=QChar(0x013E); break;
     1298                                case 0x6E: result +=QChar(0x148); break;
     1299                                case 0x72: result +=QChar(0x159); break;
     1300                                case 0x73: result +=QChar(0x161); break;
     1301                                case 0x74: result +=QChar(0x165); break;
     1302                                case 0x7A: result +=QChar(0x017E); break;
     1303                                // unknown character --> fallback
     1304                                default: result +=buf[i]; break;
     1305                            }
     1306                            break;
     1307                        // rest is the same
     1308                        default: result +=buf[i]; break;
     1309                    }
     1310                    if (buf[i] != 0)
     1311                    {
     1312                        i++;
     1313                    }
     1314                }
     1315//            result = QString::fromLatin1((const char*)buf, length);
    9721316        }
    9731317        else if ((buf[0] >= 0x01) && (buf[0] <= 0x0B))
    9741318        {