MDL-19270 - Quiz graph - Fix reverse display of Hebrew legend text in RTL mode

This commit is contained in:
Nadav Kavalerchik
2014-07-09 14:57:31 +03:00
parent 7a4832ecb9
commit 94e2dc1daf
2 changed files with 29 additions and 1 deletions
+12
View File
@@ -378,6 +378,18 @@ class core_text {
}
}
/**
* Reverse UTF-8 multibytes character sets (used for RTL languages)
* (We only do this because there is no mb_strrev or iconv_strrev)
*
* @param string $str the multibyte string to reverse
* @return string the reversed multi byte string
*/
public static function strrev($str) {
preg_match_all('/./us', $str, $ar);
return join('', array_reverse($ar[0]));
}
/**
* Try to convert upper unicode characters to plain ascii,
* the returned string may contain unconverted unicode characters.
+17 -1
View File
@@ -1190,10 +1190,26 @@ class graph {
//ImageColorTransparent($this->image, $this->colour['white']); // colour for transparency
}
/**
* Prepare label's text for GD output.
*
* @param string $label string to be prepared.
* @return string Reversed input string, if we are in RTL mode and has no numbers.
* Otherwise, returns the string as is.
*/
private function prepare_label_text($label) {
if (right_to_left() and !preg_match('/[0-9]/i', $label)) {
return core_text::strrev($label);
} else {
return $label;
}
}
function print_TTF($message) {
$points = $message['points'];
$angle = $message['angle'];
$text = $message['text'];
// We have to manually reverse the label, since php GD cannot handle RTL characters properly in UTF8 strings.
$text = $this->prepare_label_text($message['text']);
$colour = $this->colour[$message['colour']];
$font = $this->parameter['path_to_fonts'].$message['font'];