From a0d511734ae464d6e7b4d2f5e019611c0cdafea9 Mon Sep 17 00:00:00 2001 From: John Tytgat Date: Mon, 5 Jul 2004 20:19:52 +0000 Subject: [project @ 2004-07-05 20:19:51 by joty] Using UTF-8 instead of Latin1 encoding. svn path=/import/netsurf/; revision=1049 --- render/html.c | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) (limited to 'render/html.c') diff --git a/render/html.c b/render/html.c index dfbc3c106..422528ad0 100644 --- a/render/html.c +++ b/render/html.c @@ -10,6 +10,7 @@ */ #include +#include #include #include #include @@ -56,25 +57,44 @@ bool html_create(struct content *c, const char *params[]) unsigned int i; struct content_html_data *html = &c->data.html; union content_msg_data msg_data; - xmlCharEncoding encoding = XML_CHAR_ENCODING_NONE; + xmlCharEncoding encXML = XML_CHAR_ENCODING_NONE; + const char *encStr = NULL; html->encoding = NULL; html->getenc = true; for (i = 0; params[i]; i += 2) { if (strcasecmp(params[i], "charset") == 0) { - encoding = xmlParseCharEncoding(params[i + 1]); - if (encoding != XML_CHAR_ENCODING_ERROR - && encoding != XML_CHAR_ENCODING_NONE) { + encXML = xmlParseCharEncoding(params[i + 1]); + if (encXML != XML_CHAR_ENCODING_ERROR + && encXML != XML_CHAR_ENCODING_NONE) { /* encoding specified - trust the server... */ - html->encoding = xstrdup(xmlGetCharEncodingName(encoding)); + html->encoding = xstrdup(xmlGetCharEncodingName(encXML)); html->getenc = false; + } else { + encStr = xstrdup(params[i + 1]); } break; } } - html->parser = htmlCreatePushParserCtxt(0, 0, "", 0, 0, encoding); + html->parser = htmlCreatePushParserCtxt(0, 0, "", 0, 0, encXML); + if (encStr != NULL) { + xmlCharEncodingHandlerPtr handler; + if ((handler = xmlFindCharEncodingHandler(encStr)) != NULL) { + if (xmlSwitchToEncoding(html->parser, handler) == 0) { + html->encoding = encStr; + html->getenc = false; + } else { + LOG(("xmlSwitchToEncoding failed for <%s>\n", encStr)); + free(encStr); + } + } else { + LOG(("xmlFindCharEncodingHandler() failed for <%s>\n", encStr)); + free(encStr); + } + } + html->base_url = xstrdup(c->url); html->base_url = strdup(c->url); html->layout = 0; html->background_colour = TRANSPARENT; @@ -267,7 +287,7 @@ void html_head(struct content *c, xmlNode *head) if (!c->title && strcmp(node->name, "title") == 0) { xmlChar *title = xmlNodeGetContent(node); - c->title = squash_tolat1(title); + c->title = squash_whitespace(title); xmlFree(title); } else if (strcmp(node->name, "base") == 0) { @@ -852,7 +872,7 @@ void html_destroy(struct content *c) free(c->data.html.style); if (c->data.html.fonts) - font_free_set(c->data.html.fonts); + nsfont_free_set(c->data.html.fonts); /* Free objects */ for (i = 0; i != c->data.html.object_count; i++) { -- cgit v1.2.3