diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2005-11-26 19:01:11 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2005-11-26 19:01:11 +0000 |
| commit | f94e2c9821eb8784ca03b7122485d4720ec6d6e6 (patch) | |
| tree | 6da2323d2220093ea1c3756dbddb8e02fded2969 /lib/base/encoding.cpp | |
| parent | 68271eeaf83872270f13cc01e98960367d7d553f (diff) | |
| download | enigma2-f94e2c9821eb8784ca03b7122485d4720ec6d6e6.tar.gz enigma2-f94e2c9821eb8784ca03b7122485d4720ec6d6e6.zip | |
add ability to select default encoding for dvb texts in many ways.. ( take a look in data/encodings.conf )
Diffstat (limited to 'lib/base/encoding.cpp')
| -rw-r--r-- | lib/base/encoding.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/lib/base/encoding.cpp b/lib/base/encoding.cpp new file mode 100644 index 00000000..e8651699 --- /dev/null +++ b/lib/base/encoding.cpp @@ -0,0 +1,59 @@ +#include <lib/base/encoding.h> +#include <lib/base/eerror.h> +#include <config.h> + +eDVBTextEncodingHandler encodingHandler; // the one and only instance + +eDVBTextEncodingHandler::eDVBTextEncodingHandler() +{ + const char * file=DATADIR "/enigma2/encoding.conf"; + FILE *f = fopen(file, "rt"); + if (f) + { + char *line = (char*) malloc(256); + size_t bufsize=256; + char countrycode[256]; + while( getline(&line, &bufsize, f) != -1 ) + { + if ( line[0] == '#' ) + continue; + int tsid, onid, encoding; + if ( sscanf( line, "%s ISO8859-%d", countrycode, &encoding ) == 2 ) + m_CountryCodeDefaultMapping[countrycode]=encoding; + else if ( (sscanf( line, "0x%x 0x%x ISO8859-%d", &tsid, &onid, &encoding ) == 3 ) + ||(sscanf( line, "%d %d ISO8859-%d", &tsid, &onid, &encoding ) == 3 ) ) + m_TransponderDefaultMapping[(tsid<<16)|onid]=encoding; + else if ( (sscanf( line, "0x%x 0x%x", &tsid, &onid ) == 2 ) + ||(sscanf( line, "%d %d", &tsid, &onid ) == 2 ) ) + m_TransponderUseTwoCharMapping.insert((tsid<<16)|onid); + else + eDebug("couldn't parse %s", line); + } + fclose(f); + free(line); + } + else + eDebug("[eDVBTextEncodingHandler] couldn't open %s !", file); +} + +void eDVBTextEncodingHandler::getTransponderDefaultMapping(int tsidonid, int &table) +{ + std::map<int, int>::iterator it = + m_TransponderDefaultMapping.find(tsidonid); + if ( it != m_TransponderDefaultMapping.end() ) + table = it->second; +} + +bool eDVBTextEncodingHandler::getTransponderUseTwoCharMapping(int tsidonid) +{ + return m_TransponderUseTwoCharMapping.find(tsidonid) != m_TransponderUseTwoCharMapping.end(); +} + +int eDVBTextEncodingHandler::getCountryCodeDefaultMapping( const std::string &country_code ) +{ + std::map<std::string, int>::iterator it = + m_CountryCodeDefaultMapping.find(country_code); + if ( it != m_CountryCodeDefaultMapping.end() ) + return it->second; + return 0; // ISO8859-1 / Latin1 +} |
