Replacing blanks in language codes with underlines

This commit is contained in:
Klaus Schmidinger 2006-10-08 11:28:15 +02:00
parent 29c0f9e1e0
commit a9d6bb256d
2 changed files with 30 additions and 9 deletions

View File

@ -4931,13 +4931,15 @@ Video Disk Recorder Revision History
- Official release.
2006-10-07: Version 1.4.3-1
2006-10-08: Version 1.4.3-1
- The function cThread::Cancel() now only sets 'running' to false and does not
actually kill the thread if the special value -1 is given (suggested by Udo Richter).
- Changed the I18nNormalizeLanguageCode() check to also allow blanks (and all other
printable characters) in the language codes (thanks to Boguslaw Juza for reporting
that there are stations that use blanks in these codes).
that there are stations that use blanks in these codes). Blanks are replaced with
underlines, so that all parts of VDR that rely on language codes to be one word
(without blanks) work as expected.
- Now clearing an event's Title, ShortText and Description if there is no
ShortEventDescriptor or ExtendedEventDescriptor, respectively (thanks to Boguslaw
Juza for reporting that events without an ExtendedEventDescriptor may get

33
i18n.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: i18n.c 1.283 2006/10/07 12:18:10 kls Exp $
* $Id: i18n.c 1.284 2006/10/08 08:50:30 kls Exp $
*
* Translations provided by:
*
@ -6243,12 +6243,31 @@ int I18nLanguageIndex(const char *Code)
const char *I18nNormalizeLanguageCode(const char *Code)
{
if (Code[0] && !isprint(Code[0]) || Code[1] && !isprint(Code[1]) || Code[2] && !isprint(Code[2])) {
// ISO 639 language codes are defined as alphabetical characters, but digits are apparently
// also used, for instance for "2ch". There are even channels that use blank characters.
//dsyslog("invalid language code: '%s'", Code);
return "???";
}
for (int i = 0; i < 3; i++) {
if (Code[i]) {
// ETSI EN 300 468 defines language codes as consisting of three letters
// according to ISO 639-2. This means that they are supposed to always consist
// of exactly three letters in the range a-z - no digits, UTF-8 or other
// funny characters. However, some broadcasters apparently don't have a
// copy of the DVB standard (or they do, but are perhaps unable to read it),
// so they put all sorts of non-standard stuff into the language codes,
// like nonsense as "2ch" or "A 1" (yes, they even go as far as using
// blanks!). Such things should go into the description of the EPG event's
// ComponentDescriptor.
// So, as a workaround for this broadcaster stupidity, let's ignore
// language codes with unprintable characters...
if (!isprint(Code[i])) {
//dsyslog("invalid language code: '%s'", Code);
return "???";
}
// ...and replace blanks with underlines (ok, this breaks the 'const'
// of the Code parameter - but hey, it's them who started this):
if (Code[i] == ' ')
*((char *)&Code[i]) = '_';
}
else
break;
}
int n = I18nLanguageIndex(Code);
return n >= 0 ? I18nLanguageCode(n) : Code;
}