Ticket #1466: dvbdescriptors.diff

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

patch against SVN (untested - sorry can't compile & test at the moment)

  • dvbdescriptors.cpp

     
    6060    // Decode using the correct text codec
    6161    if (buf[0] >= 0x20)
    6262    {
    63         return QString::fromLatin1(buf, length);
     63            // iso/iec 6937 to unicode (UCS2) convertor...
     64            // composed encoding - accent first then plain character
     65            int i;
     66            i = 0;
     67            QString result = QString("");
     68            while ((i < length) && (buf[i]!= 0))
     69                {
     70                    switch (buf[i])
     71                    {
     72                        // at first single byte characters
     73                        case 0xA8: result +=QChar(0x00A4); break;
     74                        case 0xA9: result +=QChar(0x2018); break;
     75                        case 0xAA: result +=QChar(0x201C); break;
     76                        case 0xAC: result +=QChar(0x2190); break;
     77                        case 0xAD: result +=QChar(0x2191); break;
     78                        case 0xAE: result +=QChar(0x2192); break;
     79                        case 0xAF: result +=QChar(0x2193); break;
     80                        case 0xB4: result +=QChar(0x00D7); break;
     81                        case 0xB8: result +=QChar(0x00F7); break;
     82                        case 0xB9: result +=QChar(0x2019); break;
     83                        case 0xBA: result +=QChar(0x201D); break;
     84                        case 0xD0: result +=QChar(0x2014); break;
     85                        case 0xD1: result +=QChar(0xB9); break;
     86                        case 0xD2: result +=QChar(0xAE); break;
     87                        case 0xD3: result +=QChar(0xA9); break;
     88                        case 0xD4: result +=QChar(0x2122); break;
     89                        case 0xD5: result +=QChar(0x266A); break;
     90                        case 0xD6: result +=QChar(0xAC); break;
     91                        case 0xD7: result +=QChar(0xA6); break;
     92                        case 0xDC: result +=QChar(0x215B); break;
     93                        case 0xDD: result +=QChar(0x215C); break;
     94                        case 0xDE: result +=QChar(0x215D); break;
     95                        case 0xDF: result +=QChar(0x215E); break;
     96                        case 0xE0: result +=QChar(0x2126); break;
     97                        case 0xE1: result +=QChar(0xC6); break;
     98                        case 0xE2: result +=QChar(0xD0); break;
     99                        case 0xE3: result +=QChar(0xAA); break;
     100                        case 0xE4: result +=QChar(0x126); break;
     101                        case 0xE6: result +=QChar(0x132); break;
     102                        case 0xE7: result +=QChar(0x013F); break;
     103                        case 0xE8: result +=QChar(0x141); break;
     104                        case 0xE9: result +=QChar(0xD8); break;
     105                        case 0xEA: result +=QChar(0x152); break;
     106                        case 0xEB: result +=QChar(0xBA); break;
     107                        case 0xEC: result +=QChar(0xDE); break;
     108                        case 0xED: result +=QChar(0x166); break;
     109                        case 0xEE: result +=QChar(0x014A); break;
     110                        case 0xEF: result +=QChar(0x149); break;
     111                        case 0xF0: result +=QChar(0x138); break;
     112                        case 0xF1: result +=QChar(0xE6); break;
     113                        case 0xF2: result +=QChar(0x111); break;
     114                        case 0xF3: result +=QChar(0xF0); break;
     115                        case 0xF4: result +=QChar(0x127); break;
     116                        case 0xF5: result +=QChar(0x131); break;
     117                        case 0xF6: result +=QChar(0x133); break;
     118                        case 0xF7: result +=QChar(0x140); break;
     119                        case 0xF8: result +=QChar(0x142); break;
     120                        case 0xF9: result +=QChar(0xF8); break;
     121                        case 0xFA: result +=QChar(0x153); break;
     122                        case 0xFB: result +=QChar(0xDF); break;
     123                        case 0xFC: result +=QChar(0xFE); break;
     124                        case 0xFD: result +=QChar(0x167); break;
     125                        case 0xFE: result +=QChar(0x014B); break;
     126                        case 0xFF: result +=QChar(0xAD); break;
     127                        // multibyte
     128                        case 0xC1:
     129                            i++;
     130                            switch (buf[i])
     131                            {
     132                                case 0x41: result +=QChar(0xC0); break;
     133                                case 0x45: result +=QChar(0xC8); break;
     134                                case 0x49: result +=QChar(0xCC); break;
     135                                case 0x4F: result +=QChar(0xD2); break;
     136                                case 0x55: result +=QChar(0xD9); break;
     137                                case 0x61: result +=QChar(0xE0); break;
     138                                case 0x65: result +=QChar(0xE8); break;
     139                                case 0x69: result +=QChar(0xEC); break;
     140                                case 0x6F: result +=QChar(0xF2); break;
     141                                case 0x75: result +=QChar(0xF9); break;
     142                                // unknown character --> fallback
     143                                default: result +=buf[i]; break;
     144                            }
     145                            break;
     146                        case 0xC2:
     147                            i++;
     148                            switch (buf[i])
     149                            {
     150                                case 0x20: result +=QChar(0xB4); break;
     151                                case 0x41: result +=QChar(0xC1); break;
     152                                case 0x43: result +=QChar(0x106); break;
     153                                case 0x45: result +=QChar(0xC9); break;
     154                                case 0x49: result +=QChar(0xCD); break;
     155                                case 0x4C: result +=QChar(0x139); break;
     156                                case 0x4E: result +=QChar(0x143); break;
     157                                case 0x4F: result +=QChar(0xD3); break;
     158                                case 0x52: result +=QChar(0x154); break;
     159                                case 0x53: result +=QChar(0x015A); break;
     160                                case 0x55: result +=QChar(0xDA); break;
     161                                case 0x59: result +=QChar(0xDD); break;
     162                                case 0x5A: result +=QChar(0x179); break;
     163                                case 0x61: result +=QChar(0xE1); break;
     164                                case 0x63: result +=QChar(0x107); break;
     165                                case 0x65: result +=QChar(0xE9); break;
     166                                case 0x69: result +=QChar(0xED); break;
     167                                case 0x6C: result +=QChar(0x013A); break;
     168                                case 0x6E: result +=QChar(0x144); break;
     169                                case 0x6F: result +=QChar(0xF3); break;
     170                                case 0x72: result +=QChar(0x155); break;
     171                                case 0x73: result +=QChar(0x015B); break;
     172                                case 0x75: result +=QChar(0xFA); break;
     173                                case 0x79: result +=QChar(0xFD); break;
     174                                case 0x7A: result +=QChar(0x017A); break;
     175                                // unknown character --> fallback
     176                                default: result +=buf[i]; break;
     177                            }
     178                            break;
     179                        case 0xC3:
     180                            i++;
     181                            switch (buf[i])
     182                            {
     183                                case 0x41: result +=QChar(0xC2); break;
     184                                case 0x43: result +=QChar(0x108); break;
     185                                case 0x45: result +=QChar(0xCA); break;
     186                                case 0x47: result +=QChar(0x011C); break;
     187                                case 0x48: result +=QChar(0x124); break;
     188                                case 0x49: result +=QChar(0xCE); break;
     189                                case 0x4A: result +=QChar(0x134); break;
     190                                case 0x4F: result +=QChar(0xD4); break;
     191                                case 0x53: result +=QChar(0x015C); break;
     192                                case 0x55: result +=QChar(0xDB); break;
     193                                case 0x57: result +=QChar(0x174); break;
     194                                case 0x59: result +=QChar(0x176); break;
     195                                case 0x61: result +=QChar(0xE2); break;
     196                                case 0x63: result +=QChar(0x109); break;
     197                                case 0x65: result +=QChar(0xEA); break;
     198                                case 0x67: result +=QChar(0x011D); break;
     199                                case 0x68: result +=QChar(0x125); break;
     200                                case 0x69: result +=QChar(0xEE); break;
     201                                case 0x6A: result +=QChar(0x135); break;
     202                                case 0x6F: result +=QChar(0xF4); break;
     203                                case 0x73: result +=QChar(0x015D); break;
     204                                case 0x75: result +=QChar(0xFB); break;
     205                                case 0x77: result +=QChar(0x175); break;
     206                                case 0x79: result +=QChar(0x177); break;
     207                                // unknown character --> fallback
     208                                default: result +=buf[i]; break;
     209                            }
     210                            break;
     211                        case 0xC4:
     212                            i++;
     213                            switch (buf[i])
     214                            {
     215                                case 0x41: result +=QChar(0xC3); break;
     216                                case 0x49: result +=QChar(0x128); break;
     217                                case 0x4E: result +=QChar(0xD1); break;
     218                                case 0x4F: result +=QChar(0xD5); break;
     219                                case 0x55: result +=QChar(0x168); break;
     220                                case 0x61: result +=QChar(0xE3); break;
     221                                case 0x69: result +=QChar(0x129); break;
     222                                case 0x6E: result +=QChar(0xF1); break;
     223                                case 0x6F: result +=QChar(0xF5); break;
     224                                case 0x75: result +=QChar(0x169); break;
     225                                // unknown character --> fallback
     226                                default: result +=buf[i]; break;
     227                            }
     228                            break;
     229                        case 0xC5:
     230                            i++;
     231                            switch (buf[i])
     232                            {
     233                                case 0x20: result +=QChar(0xAF); break;
     234                                case 0x41: result +=QChar(0x100); break;
     235                                case 0x45: result +=QChar(0x112); break;
     236                                case 0x49: result +=QChar(0x012A); break;
     237                                case 0x4F: result +=QChar(0x014C); break;
     238                                case 0x55: result +=QChar(0x016A); break;
     239                                case 0x61: result +=QChar(0x101); break;
     240                                case 0x65: result +=QChar(0x113); break;
     241                                case 0x69: result +=QChar(0x012B); break;
     242                                case 0x6F: result +=QChar(0x014D); break;
     243                                case 0x75: result +=QChar(0x016B); break;
     244                                // unknown character --> fallback
     245                                default: result +=buf[i]; break;
     246                            }
     247                            break;
     248                        case 0xC6:
     249                            i++;
     250                            switch (buf[i])
     251                            {
     252                                case 0x20: result +=QChar(0x02D8); break;
     253                                case 0x41: result +=QChar(0x102); break;
     254                                case 0x47: result +=QChar(0x011E); break;
     255                                case 0x55: result +=QChar(0x016C); break;
     256                                case 0x61: result +=QChar(0x103); break;
     257                                case 0x67: result +=QChar(0x011F); break;
     258                                case 0x75: result +=QChar(0x016D); break;
     259                                // unknown character --> fallback
     260                                default: result +=buf[i]; break;
     261                            }
     262                            break;
     263                        case 0xC7:
     264                            i++;
     265                            switch (buf[i])
     266                            {
     267                                case 0x20: result +=QChar(0x02D9); break;
     268                                case 0x43: result +=QChar(0x010A); break;
     269                                case 0x45: result +=QChar(0x116); break;
     270                                case 0x47: result +=QChar(0x120); break;
     271                                case 0x49: result +=QChar(0x130); break;
     272                                case 0x5A: result +=QChar(0x017B); break;
     273                                case 0x63: result +=QChar(0x010B); break;
     274                                case 0x65: result +=QChar(0x117); break;
     275                                case 0x67: result +=QChar(0x121); break;
     276                                case 0x7A: result +=QChar(0x017C); break;
     277                                // unknown character --> fallback
     278                                default: result +=buf[i]; break;
     279                            }
     280                            break;
     281                        case 0xC8:
     282                            i++;
     283                            switch (buf[i])
     284                            {
     285                                case 0x20: result +=QChar(0xA8); break;
     286                                case 0x41: result +=QChar(0xC4); break;
     287                                case 0x45: result +=QChar(0xCB); break;
     288                                case 0x49: result +=QChar(0xCF); break;
     289                                case 0x4F: result +=QChar(0xD6); break;
     290                                case 0x55: result +=QChar(0xDC); break;
     291                                case 0x59: result +=QChar(0x178); break;
     292                                case 0x61: result +=QChar(0xE4); break;
     293                                case 0x65: result +=QChar(0xEB); break;
     294                                case 0x69: result +=QChar(0xEF); break;
     295                                case 0x6F: result +=QChar(0xF6); break;
     296                                case 0x75: result +=QChar(0xFC); break;
     297                                case 0x79: result +=QChar(0xFF); break;
     298                                // unknown character --> fallback
     299                                default: result +=buf[i]; break;
     300                            }
     301                            break;
     302                        case 0xCA:
     303                            i++;
     304                            switch (buf[i])
     305                            {
     306                                case 0x20: result +=QChar(0x02DA); break;
     307                                case 0x41: result +=QChar(0xC5); break;
     308                                case 0x55: result +=QChar(0x016E); break;
     309                                case 0x61: result +=QChar(0xE5); break;
     310                                case 0x75: result +=QChar(0x016F); break;
     311                                // unknown character --> fallback
     312                                default: result +=buf[i]; break;
     313                            }
     314                            break;
     315                        case 0xCB:
     316                            i++;
     317                            switch (buf[i])
     318                            {
     319                                case 0x20: result +=QChar(0xB8); break;
     320                                case 0x43: result +=QChar(0xC7); break;
     321                                case 0x47: result +=QChar(0x122); break;
     322                                case 0x4B: result +=QChar(0x136); break;
     323                                case 0x4C: result +=QChar(0x013B); break;
     324                                case 0x4E: result +=QChar(0x145); break;
     325                                case 0x52: result +=QChar(0x156); break;
     326                                case 0x53: result +=QChar(0x015E); break;
     327                                case 0x54: result +=QChar(0x162); break;
     328                                case 0x63: result +=QChar(0xE7); break;
     329                                case 0x67: result +=QChar(0x123); break;
     330                                case 0x6B: result +=QChar(0x137); break;
     331                                case 0x6C: result +=QChar(0x013C); break;
     332                                case 0x6E: result +=QChar(0x146); break;
     333                                case 0x72: result +=QChar(0x157); break;
     334                                case 0x73: result +=QChar(0x015F); break;
     335                                case 0x74: result +=QChar(0x163); break;
     336                                // unknown character --> fallback
     337                                default: result +=buf[i]; break;
     338                            }
     339                            break;
     340                        case 0xCD:
     341                            i++;
     342                            switch (buf[i])
     343                            {
     344                                case 0x20: result +=QChar(0x02DD); break;
     345                                case 0x4F: result +=QChar(0x150); break;
     346                                case 0x55: result +=QChar(0x170); break;
     347                                case 0x6F: result +=QChar(0x151); break;
     348                                case 0x75: result +=QChar(0x171); break;
     349                                // unknown character --> fallback
     350                                default: result +=buf[i]; break;
     351                            }
     352                            break;
     353                        case 0xCE:
     354                            i++;
     355                            switch (buf[i])
     356                            {
     357                                case 0x20: result +=QChar(0x02DB); break;
     358                                case 0x41: result +=QChar(0x104); break;
     359                                case 0x45: result +=QChar(0x118); break;
     360                                case 0x49: result +=QChar(0x012E); break;
     361                                case 0x55: result +=QChar(0x172); break;
     362                                case 0x61: result +=QChar(0x105); break;
     363                                case 0x65: result +=QChar(0x119); break;
     364                                case 0x69: result +=QChar(0x012F); break;
     365                                case 0x75: result +=QChar(0x173); break;
     366                                // unknown character --> fallback
     367                                default: result +=buf[i]; break;
     368                            }
     369                            break;
     370                        case 0xCF:
     371                            i++;
     372                            switch (buf[i])
     373                            {
     374                                case 0x20: result +=QChar(0x02C7); break;
     375                                case 0x43: result +=QChar(0x010C); break;
     376                                case 0x44: result +=QChar(0x010E); break;
     377                                case 0x45: result +=QChar(0x011A); break;
     378                                case 0x4C: result +=QChar(0x013D); break;
     379                                case 0x4E: result +=QChar(0x147); break;
     380                                case 0x52: result +=QChar(0x158); break;
     381                                case 0x53: result +=QChar(0x160); break;
     382                                case 0x54: result +=QChar(0x164); break;
     383                                case 0x5A: result +=QChar(0x017D); break;
     384                                case 0x63: result +=QChar(0x010D); break;
     385                                case 0x64: result +=QChar(0x010F); break;
     386                                case 0x65: result +=QChar(0x011B); break;
     387                                case 0x6C: result +=QChar(0x013E); break;
     388                                case 0x6E: result +=QChar(0x148); break;
     389                                case 0x72: result +=QChar(0x159); break;
     390                                case 0x73: result +=QChar(0x161); break;
     391                                case 0x74: result +=QChar(0x165); break;
     392                                case 0x7A: result +=QChar(0x017E); break;
     393                                // unknown character --> fallback
     394                                default: result +=buf[i]; break;
     395                            }
     396                            break;
     397                        // rest is the same
     398                        default: result +=buf[i]; break;
     399                    }
     400                    if (buf[i] != 0)
     401                    {
     402                        i++;
     403                    }
     404                }
     405        return result;
     406//        return QString::fromLatin1(buf, length);
    64407    }
    65408    else if ((buf[0] >= 0x01) && (buf[0] <= 0x0B))
    66409    {