mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-12-22 12:12:35 +03:00
[project @ 2004-11-22 00:33:04 by jmb]
Improve plain text rendering (converts occurrences of '<' with '<') svn path=/import/netsurf/; revision=1369
This commit is contained in:
parent
dfad215d1b
commit
1105d9c397
@ -165,7 +165,7 @@ static const struct handler_entry handler_map[] = {
|
||||
html_reformat, html_destroy, html_stop, html_redraw,
|
||||
html_open, html_close,
|
||||
true},
|
||||
{textplain_create, html_process_data, textplain_convert,
|
||||
{textplain_create, textplain_process_data, textplain_convert,
|
||||
0, 0, 0, 0, 0, 0, true},
|
||||
{0, 0, css_convert, 0, css_destroy, 0, 0, 0, 0, false},
|
||||
#ifdef WITH_JPEG
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include "netsurf/content/content.h"
|
||||
#include "netsurf/render/html.h"
|
||||
#include "netsurf/render/textplain.h"
|
||||
#include "netsurf/utils/messages.h"
|
||||
|
||||
|
||||
static const char header[] = "<html><body><pre>";
|
||||
@ -25,6 +26,52 @@ bool textplain_create(struct content *c, const char *params[])
|
||||
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 '<'
|
||||
* 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)
|
||||
{
|
||||
|
@ -11,6 +11,8 @@
|
||||
struct content;
|
||||
|
||||
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);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user