• R/O
  • SSH
  • HTTPS

kazehakase: Commit


Commit MetaInfo

Revision3352 (tree)
Time2008-01-09 21:42:30
Authorfuryo

Log Message

* src/kz-xml.c: Fix a bug a xml data written with "CDATA" was
not parsed. (ex. kernel.org RSS http://kernel.org/kdist/rss.xml )

Change Summary

Incremental Difference

--- kazehakase/trunk/ChangeLog (revision 3351)
+++ kazehakase/trunk/ChangeLog (revision 3352)
@@ -1,3 +1,8 @@
1+2008-01-09 Ryo SHIMIZU <furyo@on-air.ne.jp>
2+
3+ * src/kz-xml.c: Fix a bug a xml data written with "CDATA" was
4+ not parsed. (ex. kernel.org RSS http://kernel.org/kdist/rss.xml )
5+
16 2008-01-07 Kouhei Sutou <kou@cozmixng.org>
27
38 * configure.ac: added module/embed/gecko/gtkmozembed/Makefile.
--- kazehakase/trunk/src/kz-xml.c (revision 3351)
+++ kazehakase/trunk/src/kz-xml.c (revision 3352)
@@ -36,6 +36,7 @@
3636 static void dispose (GObject *object);
3737
3838 static void kz_xml_attr_free (KzXMLAttr *attr);
39+gchar *get_cdata_as_plaintext(gpointer content);
3940
4041
4142 G_DEFINE_TYPE(KzXML, kz_xml, G_TYPE_OBJECT)
@@ -497,6 +498,12 @@
497498 g_free(escaped);
498499 }
499500 }
501+ else if (node->type == KZ_XML_NODE_CDATA)
502+ {
503+ gchar *cdata_text = get_cdata_as_plaintext(node->content);
504+ g_string_append(gstr, cdata_text);
505+ g_free(cdata_text);
506+ }
500507 else
501508 {
502509 g_string_append(gstr, node->content);
@@ -529,7 +536,14 @@
529536
530537 if (node->type == KZ_XML_NODE_TEXT)
531538 g_string_append(gstr, node->content);
539+ if (node->type == KZ_XML_NODE_CDATA)
540+ {
541+ gchar *cdata_text = get_cdata_as_plaintext(node->content);
542+ g_string_append(gstr, cdata_text);
543+ g_free(cdata_text);
544+ }
532545
546+
533547 for (list = node->children; list; list = g_list_next(list))
534548 kz_xml_node_append_string(list->data, gstr);
535549 }
@@ -1035,3 +1049,32 @@
10351049 kz_xml_node_arrange_indent(node, indent_level + 1);
10361050 }
10371051 }
1052+
1053+gchar *
1054+get_cdata_as_plaintext(gpointer content)
1055+{
1056+ gchar *cdata_text;
1057+ gchar *plain_text;
1058+ gchar *str;
1059+ gint i, j;
1060+
1061+ str = (char*)content;
1062+
1063+ i = j = strlen("<![CDATA[");
1064+ while(str[i] != '\0')
1065+ {
1066+ if(str[i] == ']' && str[i+3] == '\0')
1067+ {
1068+ break;
1069+ }
1070+ i++;
1071+ }
1072+
1073+ cdata_text = g_strndup(str+j, i-j);
1074+ plain_text = remove_tag((const gchar*)cdata_text, (gsize)strlen(cdata_text));
1075+
1076+ if(cdata_text)
1077+ g_free(cdata_text);
1078+
1079+ return plain_text;
1080+}
Show on old repository browser