mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	Replacing blanks in language codes with underlines
This commit is contained in:
		
							
								
								
									
										6
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								HISTORY
									
									
									
									
									
								
							| @@ -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
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								i18n.c
									
									
									
									
									
								
							| @@ -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; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user