X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d9be54633b8e187a1aa3f2f8f9242af73b9316a4..4f48015e6f008575d6a6c59b9e6f78cb3c7c244b:/lib/base/estring.cpp diff --git a/lib/base/estring.cpp b/lib/base/estring.cpp index 4259c58f..429c261f 100644 --- a/lib/base/estring.cpp +++ b/lib/base/estring.cpp @@ -1,11 +1,24 @@ #include #include #include -#include #include +#include #include -static pthread_mutex_t lock=PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP; +std::string buildShortName( const std::string &str ) +{ + std::string tmp; + static char stropen[3] = { 0xc2, 0x86, 0x00 }; + static char strclose[3] = { 0xc2, 0x87, 0x00 }; + unsigned int open=std::string::npos-1; + while ( (open = str.find(stropen, open+2)) != std::string::npos ) + { + unsigned int close = str.find(strclose, open); + if ( close != std::string::npos ) + tmp+=str.substr( open+2, close-(open+2) ); + } + return tmp.length() ? tmp : str; +} std::string getNum(int val, int sys) { @@ -331,31 +344,26 @@ std::string convertDVBUTF8(const unsigned char *data, int len, int table, int ts int i=0, t=0; -#if 0 // FIXME if ( tsidonid ) - { - std::map::iterator it = - std::string::TransponderDefaultMapping.find(tsidonid); - if ( it != std::string::TransponderDefaultMapping.end() ) - table = it->second; - } -#endif + encodingHandler.getTransponderDefaultMapping(tsidonid, table); switch(data[0]) { - case 1 ... 12: + case 1 ... 11: table=data[i++]+4; -// eDebug("(1..12)text encoded in ISO-8859-%d",table); +// eDebug("(1..11)text encoded in ISO-8859-%d",table); break; case 0x10: { // eDebug("(0x10)text encoded in ISO-8859-%d",n); - int n=(data[++i]<<8)|(data[++i]); + int n=(data[++i]<<8); + n |= (data[++i]); ++i; switch(n) { case 12: eDebug("unsup. ISO8859-12 enc.", n); + break; default: table=n; break; @@ -378,25 +386,28 @@ std::string convertDVBUTF8(const unsigned char *data, int len, int table, int ts ++i; eDebug("unsup. Big5 subset of ISO/IEC 10646-1 enc."); break; + case 0x15: // UTF-8 encoding of ISO/IEC 10646-1 + return std::string((char*)data+1, len-1); case 0x0: - case 0xD ... 0xF: - case 0x15 ... 0x1F: + case 0xC ... 0xF: + case 0x16 ... 0x1F: eDebug("reserved %d", data[0]); ++i; break; } + bool useTwoCharMapping = + tsidonid && encodingHandler.getTransponderUseTwoCharMapping(tsidonid); + unsigned char res[2048]; while (i < len) { unsigned long code=0; -#if 0 // FIXME - if ( i+1 < len && tsidonid && - std::string::TransponderUseTwoCharMapping.find(tsidonid) != std::string::TransponderUseTwoCharMapping.end() && + if ( useTwoCharMapping && i+1 < len && (code=doVideoTexSuppl(data[i], data[i+1])) ) i+=2; -#endif + if (!code) code=recode(data[i++], table); if (!code) @@ -529,7 +540,7 @@ std::string convertLatin1UTF8(const std::string &string) while (i < len) { - unsigned long code=string[i++]; + unsigned long code=(unsigned char)string[i++]; // Unicode->UTF8 encoding if (code < 0x80) // identity latin <-> utf8 mapping res[t++]=char(code);