From ce0d5294d5898b6100269bd39d38c0884d5fd4b4 Mon Sep 17 00:00:00 2001 From: James Bursa Date: Sat, 27 Dec 2003 20:15:23 +0000 Subject: [project @ 2003-12-27 20:15:22 by bursa] Use charset from Content-Type header. svn path=/import/netsurf/; revision=460 --- render/html.c | 19 ++++++++++++++++--- render/html.h | 2 +- render/textplain.c | 4 ++-- render/textplain.h | 2 +- 4 files changed, 20 insertions(+), 7 deletions(-) (limited to 'render') diff --git a/render/html.c b/render/html.c index 7345214d5..769610798 100644 --- a/render/html.c +++ b/render/html.c @@ -29,9 +29,21 @@ static void html_object_callback(content_msg msg, struct content *object, void *p1, void *p2, const char *error); -void html_create(struct content *c) +void html_create(struct content *c, const char *params[]) { - c->data.html.parser = htmlCreatePushParserCtxt(0, 0, "", 0, 0, XML_CHAR_ENCODING_8859_1); + unsigned int i; + xmlCharEncoding encoding = XML_CHAR_ENCODING_8859_1; + + 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_8859_1; + break; + } + } + + c->data.html.parser = htmlCreatePushParserCtxt(0, 0, "", 0, 0, encoding); c->data.html.layout = NULL; c->data.html.style = NULL; c->data.html.fonts = NULL; @@ -341,9 +353,10 @@ void html_find_stylesheets(struct content *c, xmlNode *head) /* create stylesheet */ LOG(("style element")); if (c->data.html.stylesheet_content[1] == 0) { + const char *params[] = { 0 }; c->data.html.stylesheet_content[1] = content_create(c->data.html.base_url); - content_set_type(c->data.html.stylesheet_content[1], CONTENT_CSS, "text/css"); + content_set_type(c->data.html.stylesheet_content[1], CONTENT_CSS, "text/css", params); } /* can't just use xmlNodeGetContent(node), because that won't give diff --git a/render/html.h b/render/html.h index 8a5047cc2..b48c35929 100644 --- a/render/html.h +++ b/render/html.h @@ -51,7 +51,7 @@ struct content_html_data { } *object; }; -void html_create(struct content *c); +void html_create(struct content *c, const char *params[]); void html_process_data(struct content *c, char *data, unsigned long size); int html_convert(struct content *c, unsigned int width, unsigned int height); void html_revive(struct content *c, unsigned int width, unsigned int height); diff --git a/render/textplain.c b/render/textplain.c index d0b0a981b..524865846 100644 --- a/render/textplain.c +++ b/render/textplain.c @@ -18,9 +18,9 @@ static const char header[] = "
";
 static const char footer[] = "
"; -void textplain_create(struct content *c) +void textplain_create(struct content *c, const char *params[]) { - html_create(c); + html_create(c, params); htmlParseChunk(c->data.html.parser, header, sizeof(header) - 1, 0); } diff --git a/render/textplain.h b/render/textplain.h index 80f428e86..75b52dd23 100644 --- a/render/textplain.h +++ b/render/textplain.h @@ -10,7 +10,7 @@ #include "netsurf/content/content.h" -void textplain_create(struct content *c); +void textplain_create(struct content *c, const char *params[]); void textplain_process_data(struct content *c, char *data, unsigned long size); int textplain_convert(struct content *c, unsigned int width, unsigned int height); void textplain_revive(struct content *c, unsigned int width, unsigned int height); -- cgit v1.2.3