diff options
author | James Bursa <james@netsurf-browser.org> | 2003-12-27 20:15:23 +0000 |
---|---|---|
committer | James Bursa <james@netsurf-browser.org> | 2003-12-27 20:15:23 +0000 |
commit | ce0d5294d5898b6100269bd39d38c0884d5fd4b4 (patch) | |
tree | 3a073e5a6d069113c6272f108fcedd668cd186a8 /render | |
parent | 01c0332607e1e9646b74add201a6488ce5265844 (diff) | |
download | netsurf-ce0d5294d5898b6100269bd39d38c0884d5fd4b4.tar.gz netsurf-ce0d5294d5898b6100269bd39d38c0884d5fd4b4.tar.bz2 |
[project @ 2003-12-27 20:15:22 by bursa]
Use charset from Content-Type header.
svn path=/import/netsurf/; revision=460
Diffstat (limited to 'render')
-rw-r--r-- | render/html.c | 19 | ||||
-rw-r--r-- | render/html.h | 2 | ||||
-rw-r--r-- | render/textplain.c | 4 | ||||
-rw-r--r-- | render/textplain.h | 2 |
4 files changed, 20 insertions, 7 deletions
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[] = "<html><body><pre>"; static const char footer[] = "</pre></body></html>"; -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); |