mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	BIDI support now checks at runtime whether the system runs with UTF-8
This commit is contained in:
		| @@ -2812,3 +2812,5 @@ Dominic Evans <oldmanuk@gmail.com> | ||||
| Torsten Lang <info@torstenlang.de> | ||||
|  for reporting a problem with newline characters in stream component descriptions | ||||
|  of EPG data from BSkyB's "MTV MUSIC" | ||||
|  for suggesting to make BIDI support check at runtime whether the system runs with | ||||
|  UTF-8 | ||||
|   | ||||
							
								
								
									
										4
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								HISTORY
									
									
									
									
									
								
							| @@ -6781,7 +6781,7 @@ Video Disk Recorder Revision History | ||||
| - Replaced all calls to sleep() with cCondWait::SleepMs() (thanks to Rolf Ahrenberg). | ||||
| - Fixed a crash with malformed SI data (patch from vdr-portal). | ||||
|  | ||||
| 2012-01-11: Version 1.7.23 | ||||
| 2012-01-12: Version 1.7.23 | ||||
|  | ||||
| - Removed the '.pl' suffix from svdrpsend.pl (sorry, I missed that one). | ||||
| - Fixed bonding more than two devices. | ||||
| @@ -6818,3 +6818,5 @@ Video Disk Recorder Revision History | ||||
|   TS packets, e.g. when switching channels. | ||||
| - Fixed the SVDRP command CLRE for a single channel in case there are events | ||||
|   that have a timer (thanks to Timo Eskola). | ||||
| - BIDI support now checks at runtime whether the system runs with UTF-8 (suggested | ||||
|   by Torsten Lang). | ||||
|   | ||||
							
								
								
									
										40
									
								
								font.c
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								font.c
									
									
									
									
									
								
							| @@ -6,7 +6,7 @@ | ||||
|  * | ||||
|  * BiDi support by Osama Alrawab <alrawab@hotmail.com> @2008 Tripoli-Libya. | ||||
|  * | ||||
|  * $Id: font.c 2.8 2011/03/28 16:29:51 kls Exp $ | ||||
|  * $Id: font.c 2.9 2012/01/13 09:43:22 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #include "font.h" | ||||
| @@ -508,25 +508,27 @@ cString cFont::GetFontFileName(const char *FontName) | ||||
| #ifdef BIDI | ||||
| cString cFont::Bidi(const char *Ltr) | ||||
| { | ||||
|   fribidi_set_mirroring(true); | ||||
|   fribidi_set_reorder_nsm(false); | ||||
|   FriBidiCharSet fribidiCharset = FRIBIDI_CHAR_SET_UTF8; | ||||
|   int LtrLen = strlen(Ltr); | ||||
|   FriBidiCharType Base = FRIBIDI_TYPE_L; | ||||
|   FriBidiChar *Logical = MALLOC(FriBidiChar, LtrLen + 1) ; | ||||
|   int RtlLen = fribidi_charset_to_unicode(fribidiCharset, const_cast<char *>(Ltr), LtrLen, Logical); | ||||
|   FriBidiChar *Visual = MALLOC(FriBidiChar, LtrLen + 1) ; | ||||
|   char *Rtl = NULL; | ||||
|   bool ok = fribidi_log2vis(Logical, RtlLen, &Base, Visual, NULL, NULL, NULL); | ||||
|   if (ok) { | ||||
|      fribidi_remove_bidi_marks(Visual, RtlLen, NULL, NULL, NULL); | ||||
|      Rtl = MALLOC(char, RtlLen * 4 + 1); | ||||
|      fribidi_unicode_to_charset(fribidiCharset, Visual, RtlLen, Rtl); | ||||
|   if (cCharSetConv::SystemCharacterTable()) { // bidi requires UTF-8 | ||||
|      fribidi_set_mirroring(true); | ||||
|      fribidi_set_reorder_nsm(false); | ||||
|      FriBidiCharSet fribidiCharset = FRIBIDI_CHAR_SET_UTF8; | ||||
|      int LtrLen = strlen(Ltr); | ||||
|      FriBidiCharType Base = FRIBIDI_TYPE_L; | ||||
|      FriBidiChar *Logical = MALLOC(FriBidiChar, LtrLen + 1) ; | ||||
|      int RtlLen = fribidi_charset_to_unicode(fribidiCharset, const_cast<char *>(Ltr), LtrLen, Logical); | ||||
|      FriBidiChar *Visual = MALLOC(FriBidiChar, LtrLen + 1) ; | ||||
|      char *Rtl = NULL; | ||||
|      bool ok = fribidi_log2vis(Logical, RtlLen, &Base, Visual, NULL, NULL, NULL); | ||||
|      if (ok) { | ||||
|         fribidi_remove_bidi_marks(Visual, RtlLen, NULL, NULL, NULL); | ||||
|         Rtl = MALLOC(char, RtlLen * 4 + 1); | ||||
|         fribidi_unicode_to_charset(fribidiCharset, Visual, RtlLen, Rtl); | ||||
|         } | ||||
|      free(Logical); | ||||
|      free(Visual); | ||||
|      if (ok) | ||||
|         return cString(Rtl, true); | ||||
|      } | ||||
|   free(Logical); | ||||
|   free(Visual); | ||||
|   if (ok) | ||||
|      return cString(Rtl, true); | ||||
|   return cString(Ltr); | ||||
| } | ||||
| #endif | ||||
|   | ||||
		Reference in New Issue
	
	Block a user