mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Modified setting system and override character tables
This commit is contained in:
parent
ab308bea31
commit
aae02a43da
@ -3591,6 +3591,8 @@ Helmut Binder <cco@aon.at>
|
|||||||
for adding the language code for Bulgarian
|
for adding the language code for Bulgarian
|
||||||
for a patch that was used as a base for fixing handling multi part ExtendedEventDescriptors
|
for a patch that was used as a base for fixing handling multi part ExtendedEventDescriptors
|
||||||
where only the first part contains information about the character table
|
where only the first part contains information about the character table
|
||||||
|
for suggesting to check and report whether the given value is valid when setting the
|
||||||
|
override character table
|
||||||
|
|
||||||
Ulrich Eckhardt <uli@uli-eckhardt.de>
|
Ulrich Eckhardt <uli@uli-eckhardt.de>
|
||||||
for reporting a problem with shutdown after user inactivity in case a plugin is
|
for reporting a problem with shutdown after user inactivity in case a plugin is
|
||||||
|
9
HISTORY
9
HISTORY
@ -9420,7 +9420,7 @@ Video Disk Recorder Revision History
|
|||||||
- Fixed handling the S2SatelliteDeliverySystemDescriptor for transponders broadcasting
|
- Fixed handling the S2SatelliteDeliverySystemDescriptor for transponders broadcasting
|
||||||
in "backwards compatibility mode" according to ETSI EN 300 468 (thanks to Onur Sentürk).
|
in "backwards compatibility mode" according to ETSI EN 300 468 (thanks to Onur Sentürk).
|
||||||
|
|
||||||
2020-05-14:
|
2020-05-15:
|
||||||
|
|
||||||
- Fixed moving channels between number groups in SVDRP's MOVC command and the Channels
|
- Fixed moving channels between number groups in SVDRP's MOVC command and the Channels
|
||||||
menu, in case a channel is moved to a higher number and into a numbered group
|
menu, in case a channel is moved to a higher number and into a numbered group
|
||||||
@ -9434,3 +9434,10 @@ Video Disk Recorder Revision History
|
|||||||
- Added the language code for Bulgarian (thanks to Helmut Binder).
|
- Added the language code for Bulgarian (thanks to Helmut Binder).
|
||||||
- Fixed handling multi part ExtendedEventDescriptors where only the first part
|
- Fixed handling multi part ExtendedEventDescriptors where only the first part
|
||||||
contains information about the character table (based on a patch from Helmut Binder).
|
contains information about the character table (based on a patch from Helmut Binder).
|
||||||
|
- When setting the system character table, it is no longer checked against the known
|
||||||
|
entries that are hard coded in libsi/si.c, but rather given to iconv_open() and the
|
||||||
|
result of that call is used to check whether the given name is valid.
|
||||||
|
- Checking whether the system character table is "single byte" is now done by checking
|
||||||
|
the result of a sample call to iconv().
|
||||||
|
- Setting the override character table now checks and reports whether the given value
|
||||||
|
is valid (suggested by Helmut Binder).
|
||||||
|
48
libsi/si.c
48
libsi/si.c
@ -6,7 +6,7 @@
|
|||||||
* the Free Software Foundation; either version 2 of the License, or *
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
* (at your option) any later version. *
|
* (at your option) any later version. *
|
||||||
* *
|
* *
|
||||||
* $Id: si.c 4.1 2020/05/14 21:21:03 kls Exp $
|
* $Id: si.c 4.2 2020/05/15 11:31:40 kls Exp $
|
||||||
* *
|
* *
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
@ -311,7 +311,7 @@ static const char *CharacterTables2[] = {
|
|||||||
|
|
||||||
#define NumEntries(Table) (sizeof(Table) / sizeof(char *))
|
#define NumEntries(Table) (sizeof(Table) / sizeof(char *))
|
||||||
|
|
||||||
static const char *SystemCharacterTable = NULL;
|
static char *SystemCharacterTable = NULL;
|
||||||
bool SystemCharacterTableIsSingleByte = true;
|
bool SystemCharacterTableIsSingleByte = true;
|
||||||
|
|
||||||
bool systemCharacterTableIsSingleByte(void)
|
bool systemCharacterTableIsSingleByte(void)
|
||||||
@ -321,33 +321,43 @@ bool systemCharacterTableIsSingleByte(void)
|
|||||||
|
|
||||||
static char *OverrideCharacterTable = NULL;
|
static char *OverrideCharacterTable = NULL;
|
||||||
|
|
||||||
void SetOverrideCharacterTable(const char *CharacterTable)
|
bool SetOverrideCharacterTable(const char *CharacterTable)
|
||||||
{
|
{
|
||||||
free(OverrideCharacterTable);
|
free(OverrideCharacterTable);
|
||||||
OverrideCharacterTable = CharacterTable ? strdup(CharacterTable) : NULL;
|
OverrideCharacterTable = CharacterTable ? strdup(CharacterTable) : NULL;
|
||||||
|
if (OverrideCharacterTable) {
|
||||||
|
// Check whether the character table is known:
|
||||||
|
iconv_t cd = iconv_open(SystemCharacterTable, OverrideCharacterTable);
|
||||||
|
if (cd != (iconv_t)-1) {
|
||||||
|
iconv_close(cd);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SetSystemCharacterTable(const char *CharacterTable) {
|
bool SetSystemCharacterTable(const char *CharacterTable) {
|
||||||
if (CharacterTable) {
|
free(SystemCharacterTable);
|
||||||
for (unsigned int i = 0; i < NumEntries(CharacterTables1); i++) {
|
SystemCharacterTable = CharacterTable ? strdup(CharacterTable) : NULL;
|
||||||
if (CharacterTables1[i] && strcasecmp(CharacterTable, CharacterTables1[i]) == 0) {
|
|
||||||
SystemCharacterTable = CharacterTables1[i];
|
|
||||||
SystemCharacterTableIsSingleByte = i <= SingleByteLimit;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (unsigned int i = 0; i < NumEntries(CharacterTables2); i++) {
|
|
||||||
if (CharacterTables2[i] && strcasecmp(CharacterTable, CharacterTables2[i]) == 0) {
|
|
||||||
SystemCharacterTable = CharacterTables2[i];
|
|
||||||
SystemCharacterTableIsSingleByte = true;
|
SystemCharacterTableIsSingleByte = true;
|
||||||
|
if (SystemCharacterTable) {
|
||||||
|
// Check whether the character table is known and "single byte":
|
||||||
|
char a[] = "ä";
|
||||||
|
char *pa = a;
|
||||||
|
char b[10];
|
||||||
|
char *pb = b;
|
||||||
|
size_t la = strlen(a);
|
||||||
|
size_t lb = sizeof(b);
|
||||||
|
iconv_t cd = iconv_open(SystemCharacterTable, "ISO-8859-1");
|
||||||
|
if (cd != (iconv_t)-1) {
|
||||||
|
if (iconv(cd, &pa, &la, &pb, &lb) != size_t(-1)) {
|
||||||
|
*pb = 0;
|
||||||
|
SystemCharacterTableIsSingleByte = strlen(b) == 1;
|
||||||
|
}
|
||||||
|
iconv_close(cd);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
SystemCharacterTable = NULL;
|
|
||||||
SystemCharacterTableIsSingleByte = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* the Free Software Foundation; either version 2 of the License, or *
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
* (at your option) any later version. *
|
* (at your option) any later version. *
|
||||||
* *
|
* *
|
||||||
* $Id: si.h 4.1 2020/05/14 21:21:03 kls Exp $
|
* $Id: si.h 4.2 2020/05/15 11:31:40 kls Exp $
|
||||||
* *
|
* *
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
@ -527,7 +527,9 @@ protected:
|
|||||||
|
|
||||||
// Set the character table to use for strings that do not begin with a character
|
// Set the character table to use for strings that do not begin with a character
|
||||||
// table indicator. Call with NULL to turn this off.
|
// table indicator. Call with NULL to turn this off.
|
||||||
void SetOverrideCharacterTable(const char *CharacterTable);
|
// Must be called *after* SetSystemCharacterTable()!
|
||||||
|
// Returns true if the character table was recognized.
|
||||||
|
bool SetOverrideCharacterTable(const char *CharacterTable);
|
||||||
// Call this function to set the system character table. CharacterTable is a string
|
// Call this function to set the system character table. CharacterTable is a string
|
||||||
// like "iso8859-15" or "utf-8" (case insensitive).
|
// like "iso8859-15" or "utf-8" (case insensitive).
|
||||||
// Returns true if the character table was recognized.
|
// Returns true if the character table was recognized.
|
||||||
|
6
vdr.c
6
vdr.c
@ -22,7 +22,7 @@
|
|||||||
*
|
*
|
||||||
* The project's page is at http://www.tvdr.de
|
* The project's page is at http://www.tvdr.de
|
||||||
*
|
*
|
||||||
* $Id: vdr.c 4.31 2020/05/07 10:45:41 kls Exp $
|
* $Id: vdr.c 4.32 2020/05/15 11:31:40 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
@ -726,8 +726,8 @@ int main(int argc, char *argv[])
|
|||||||
isyslog("use of environment variable VDR_CHARSET_OVERRIDE (%s) is deprecated!", DeprecatedVdrCharsetOverride);
|
isyslog("use of environment variable VDR_CHARSET_OVERRIDE (%s) is deprecated!", DeprecatedVdrCharsetOverride);
|
||||||
#endif
|
#endif
|
||||||
if (OverrideCharacterTable) {
|
if (OverrideCharacterTable) {
|
||||||
isyslog("override character table is '%s'", OverrideCharacterTable);
|
bool known = SI::SetOverrideCharacterTable(OverrideCharacterTable);
|
||||||
SI::SetOverrideCharacterTable(OverrideCharacterTable);
|
isyslog("override character table is '%s' - %s", OverrideCharacterTable, known ? "known" : "unknown");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize internationalization:
|
// Initialize internationalization:
|
||||||
|
Loading…
Reference in New Issue
Block a user