summaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorJames Bursa <james@netsurf-browser.org>2003-12-27 20:15:23 +0000
committerJames Bursa <james@netsurf-browser.org>2003-12-27 20:15:23 +0000
commitce0d5294d5898b6100269bd39d38c0884d5fd4b4 (patch)
tree3a073e5a6d069113c6272f108fcedd668cd186a8 /render
parent01c0332607e1e9646b74add201a6488ce5265844 (diff)
downloadnetsurf-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.c19
-rw-r--r--render/html.h2
-rw-r--r--render/textplain.c4
-rw-r--r--render/textplain.h2
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);