Author: rpmcruz
Date: Tue Feb 23 16:58:15 2010
New Revision: 60982
URL: http://svn.opensuse.org/viewcvs/yast?rev=60982&view=rev
Log:
* src/ygtkrichtext.c: bug fix 581800: <li> element
and headers ending with colon were not being given
right-to-left treatment for languages like Arabic.
Modified:
trunk/gtk/ChangeLog
trunk/gtk/src/ygtkrichtext.c
Modified: trunk/gtk/ChangeLog
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/ChangeLog?rev=60982&r1=60981&r2=60982&view=diff
==============================================================================
--- trunk/gtk/ChangeLog (original)
+++ trunk/gtk/ChangeLog Tue Feb 23 16:58:15 2010
@@ -1,3 +1,9 @@
+2010-02-23 Ricardo Cruz
+
+ * src/ygtkrichtext.c: bug fix 581800: <li> element
+ and headers ending with colon were not being given
+ right-to-left treatment for languages like Arabic.
+
2010-02-22 Ricardo Cruz
* src/pkg/yzyppwrapper.h/cc: extend previous commit to
Modified: trunk/gtk/src/ygtkrichtext.c
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/ygtkrichtext.c?rev=60982&r1=60981&r2=60982&view=diff
==============================================================================
--- trunk/gtk/src/ygtkrichtext.c (original)
+++ trunk/gtk/src/ygtkrichtext.c Tue Feb 23 16:58:15 2010
@@ -280,6 +280,25 @@
free_list (state->htags);
}
+static void insert_li_enumeration (GRTParseState *state, GtkTextIter *iter, gboolean start)
+{
+ gboolean _start = gtk_widget_get_default_direction() != GTK_TEXT_DIR_RTL;
+ if (_start != start) return;
+
+ HTMLList *front_list;
+ if (state->html_list && (front_list = g_list_first (state->html_list)->data) &&
+ (front_list->ordered)) {
+ const gchar *form = start ? "%d. " : " .%d";
+ gchar *str = g_strdup_printf (form, front_list->enumeration++);
+ gtk_text_buffer_insert (state->buffer, iter, str, -1);
+ g_free (str);
+ }
+ else { // \\u25cf for bigger bullets
+ const char *str = start ? "\u2022 " : " \u2022";
+ gtk_text_buffer_insert (state->buffer, iter, str, -1);
+ }
+}
+
// Tags to support: <p> and not </p>:
// either 'elide' \ns (turn off with <pre> I guess
static void
@@ -347,20 +366,8 @@
else
g_warning ("Unknown a attribute: '%s'", attribute_names[0]);
}
- else if (!g_ascii_strcasecmp (element_name, "li")) {
- HTMLList *front_list;
-
- if (state->html_list &&
- (front_list = g_list_first (state->html_list)->data) &&
- (front_list->ordered)) {;
- gchar *str = g_strdup_printf ("%d. ", front_list->enumeration++);
- gtk_text_buffer_insert (state->buffer, &iter, str, -1);
- g_free (str);
- }
- else { // \\u25cf for bigger bullets
- gtk_text_buffer_insert (state->buffer, &iter, "\u2022 ", -1);
- }
- }
+ else if (!g_ascii_strcasecmp (element_name, "li"))
+ insert_li_enumeration (state, &iter, TRUE);
// Tags that affect the margin
else if (!g_ascii_strcasecmp (element_name, "ul") ||
!g_ascii_strcasecmp (element_name, "ol")) {
@@ -475,6 +482,8 @@
gtk_text_buffer_apply_tag_by_name (state->buffer, "center", &start, &end);
appendLines = 1;
}
+ else if (!g_ascii_strcasecmp (element_name, "li"))
+ insert_li_enumeration (state, &end, FALSE);
if (isBlockTag (element_name) || !g_ascii_strcasecmp (element_name, "br")) {
appendLines = 1;
@@ -513,12 +522,21 @@
gtk_text_buffer_insert_with_tags (state->buffer, &start,
text, text_len, NULL, NULL);
else {
+ gboolean rtl = gtk_widget_get_default_direction() == GTK_TEXT_DIR_RTL;
+
int i = 0;
if (state->closed_block_tag) {
for (; i < text_len; i++)
if (!g_ascii_isspace (text[i]))
break;
}
+
+ // hack: for right-to-left languages, change "Device:" to ":Device" (bug 581800)
+ if (rtl && text[text_len-1] == ':') {
+ gtk_text_buffer_insert (state->buffer, &start, ":", 1);
+ text_len--;
+ }
+
gtk_text_buffer_insert (state->buffer, &start, text+i, text_len-i);
}
gtk_text_buffer_get_end_iter (state->buffer, &end);
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org