aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/sdtui.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/sdtui.c b/src/sdtui.c
index d823f43..04d7ddb 100644
--- a/src/sdtui.c
+++ b/src/sdtui.c
@@ -344,6 +344,25 @@ view_entry_split_add_pango (ViewEntry *ve, const gchar *markup)
g_free (text);
}
+static void
+view_entry_split_add_xdxf (ViewEntry *ve, const gchar *xml)
+{
+ // Trivially filter out all tags we can't quite handle,
+ // then parse the reduced XML as Pango markup--this seems to work well.
+ GString *filtered = g_string_new ("");
+ while (*xml)
+ {
+ const gchar *p = NULL;
+ if (*xml != '<' || !*(p = xml + 1 + (xml[1] == '/'))
+ || (strchr ("biu", *p) && p[1] == '>') || !(p = strchr (p, '>')))
+ g_string_append_c (filtered, *xml++);
+ else
+ xml = ++p;
+ }
+ view_entry_split_add_pango (ve, filtered->str);
+ g_string_free (filtered, TRUE);
+}
+
/// Decomposes a dictionary entry into the format we want.
static ViewEntry *
view_entry_new (StardictIterator *iterator)
@@ -372,6 +391,10 @@ view_entry_new (StardictIterator *iterator)
view_entry_split_add_pango (ve, field->data);
found_anything_displayable = TRUE;
break;
+ case STARDICT_FIELD_XDXF:
+ view_entry_split_add_xdxf (ve, field->data);
+ found_anything_displayable = TRUE;
+ break;
case STARDICT_FIELD_PHONETIC:
g_string_append_printf (word, " /%s/", (const gchar *) field->data);
break;