[project @ 2004-11-22 00:33:04 by jmb]

Improve plain text rendering (converts occurrences of '<' with '&lt;')

svn path=/import/netsurf/; revision=1369
This commit is contained in:
John Mark Bell 2004-11-22 00:33:04 +00:00
parent dfad215d1b
commit 1105d9c397
3 changed files with 50 additions and 1 deletions

View File

@ -165,7 +165,7 @@ static const struct handler_entry handler_map[] = {
html_reformat, html_destroy, html_stop, html_redraw, html_reformat, html_destroy, html_stop, html_redraw,
html_open, html_close, html_open, html_close,
true}, true},
{textplain_create, html_process_data, textplain_convert, {textplain_create, textplain_process_data, textplain_convert,
0, 0, 0, 0, 0, 0, true}, 0, 0, 0, 0, 0, 0, true},
{0, 0, css_convert, 0, css_destroy, 0, 0, 0, 0, false}, {0, 0, css_convert, 0, css_destroy, 0, 0, 0, 0, false},
#ifdef WITH_JPEG #ifdef WITH_JPEG

View File

@ -9,6 +9,7 @@
#include "netsurf/content/content.h" #include "netsurf/content/content.h"
#include "netsurf/render/html.h" #include "netsurf/render/html.h"
#include "netsurf/render/textplain.h" #include "netsurf/render/textplain.h"
#include "netsurf/utils/messages.h"
static const char header[] = "<html><body><pre>"; static const char header[] = "<html><body><pre>";
@ -25,6 +26,52 @@ bool textplain_create(struct content *c, const char *params[])
return true; return true;
} }
bool textplain_process_data(struct content *c, char *data,
unsigned int size)
{
unsigned int i, s;
char *d, *p;
union content_msg_data msg_data;
bool ret;
/* count number of '<' in data buffer */
for (d = data, i = 0, s = 0; i != size; i++, d++) {
if (*d == '<')
s++;
}
/* create buffer for modified input */
d = calloc(size + 3*s, sizeof(char));
if (!d) {
msg_data.error = messages_get("NoMemory");
content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
return false;
}
/* copy data across to modified buffer,
* replacing occurrences of '<' with '&lt;'
* This prevents the parser stripping sequences of '<...>'
*/
for (p = d, i = 0, s = 0; i != size; i++, data++) {
if (*data == '<') {
*p++ = '&';
*p++ = 'l';
*p++ = 't';
*p++ = ';';
s += 4;
}
else {
*p++ = *data;
s++;
}
}
ret = html_process_data(c, d, s);
free(d);
return ret;
}
bool textplain_convert(struct content *c, int width, int height) bool textplain_convert(struct content *c, int width, int height)
{ {

View File

@ -11,6 +11,8 @@
struct content; struct content;
bool textplain_create(struct content *c, const char *params[]); bool textplain_create(struct content *c, const char *params[]);
bool textplain_process_data(struct content *c, char *data,
unsigned int size);
bool textplain_convert(struct content *c, int width, int height); bool textplain_convert(struct content *c, int width, int height);
#endif #endif