mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-11-22 06:21:45 +03:00
[project @ 2004-03-11 02:19:13 by bursa]
Add source_data to content structure and remove equivalents from individual contents. svn path=/import/netsurf/; revision=606
This commit is contained in:
parent
24da56f25d
commit
fba46de9cb
@ -109,30 +109,30 @@ static const struct handler_entry handler_map[] = {
|
||||
{html_create, html_process_data, html_convert, html_revive,
|
||||
html_reformat, html_destroy, html_redraw,
|
||||
html_add_instance, html_remove_instance, html_reshape_instance},
|
||||
{textplain_create, textplain_process_data, textplain_convert,
|
||||
textplain_revive, textplain_reformat, textplain_destroy, 0, 0, 0, 0},
|
||||
{css_create, css_process_data, css_convert, css_revive,
|
||||
css_reformat, css_destroy, 0, 0, 0, 0},
|
||||
{textplain_create, html_process_data, textplain_convert,
|
||||
0, 0, 0, 0, 0, 0, 0},
|
||||
{css_create, 0, css_convert, css_revive,
|
||||
0, css_destroy, 0, 0, 0, 0},
|
||||
#ifdef riscos
|
||||
#ifdef WITH_JPEG
|
||||
{nsjpeg_create, nsjpeg_process_data, nsjpeg_convert, nsjpeg_revive,
|
||||
nsjpeg_reformat, nsjpeg_destroy, nsjpeg_redraw, 0, 0, 0},
|
||||
{nsjpeg_create, 0, nsjpeg_convert, 0,
|
||||
0, nsjpeg_destroy, nsjpeg_redraw, 0, 0, 0},
|
||||
#endif
|
||||
#ifdef WITH_PNG
|
||||
{nspng_create, nspng_process_data, nspng_convert, nspng_revive,
|
||||
nspng_reformat, nspng_destroy, nspng_redraw, 0, 0, 0},
|
||||
{nspng_create, nspng_process_data, nspng_convert, 0,
|
||||
0, nspng_destroy, nspng_redraw, 0, 0, 0},
|
||||
#endif
|
||||
#ifdef WITH_GIF
|
||||
{nsgif_create, nsgif_process_data, nsgif_convert, nsgif_revive,
|
||||
nsgif_reformat, nsgif_destroy, nsgif_redraw, 0, 0, 0},
|
||||
{nsgif_create, 0, nsgif_convert, 0,
|
||||
0, nsgif_destroy, nsgif_redraw, 0, 0, 0},
|
||||
#endif
|
||||
#ifdef WITH_SPRITE
|
||||
{sprite_create, sprite_process_data, sprite_convert, sprite_revive,
|
||||
sprite_reformat, sprite_destroy, sprite_redraw, 0, 0, 0},
|
||||
#endif
|
||||
#ifdef WITH_DRAW
|
||||
{draw_create, draw_process_data, draw_convert, draw_revive,
|
||||
draw_reformat, draw_destroy, draw_redraw, 0, 0, 0},
|
||||
{0, 0, draw_convert, 0,
|
||||
0, draw_destroy, draw_redraw, 0, 0, 0},
|
||||
#endif
|
||||
#ifdef WITH_PLUGIN
|
||||
{plugin_create, plugin_process_data, plugin_convert, plugin_revive,
|
||||
@ -141,8 +141,7 @@ static const struct handler_entry handler_map[] = {
|
||||
plugin_reshape_instance},
|
||||
#endif
|
||||
#endif
|
||||
{other_create, other_process_data, other_convert, other_revive,
|
||||
other_reformat, other_destroy, 0, 0, 0, 0}
|
||||
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||
};
|
||||
#define HANDLER_MAP_COUNT (sizeof(handler_map) / sizeof(handler_map[0]))
|
||||
|
||||
@ -190,6 +189,8 @@ struct content * content_create(char *url)
|
||||
c->cache = 0;
|
||||
c->size = sizeof(struct content);
|
||||
c->fetch = 0;
|
||||
c->source_data = 0;
|
||||
c->source_size = 0;
|
||||
c->mime_type = 0;
|
||||
strcpy(c->status_message, messages_get("Loading"));
|
||||
user_sentinel = xcalloc(1, sizeof(*user_sentinel));
|
||||
@ -227,7 +228,9 @@ void content_set_type(struct content *c, content_type type, char* mime_type,
|
||||
c->type = type;
|
||||
c->mime_type = xstrdup(mime_type);
|
||||
c->status = CONTENT_STATUS_LOADING;
|
||||
handler_map[type].create(c, params);
|
||||
c->source_data = xcalloc(0, 1);
|
||||
if (handler_map[type].create)
|
||||
handler_map[type].create(c, params);
|
||||
content_broadcast(c, CONTENT_MSG_LOADING, 0);
|
||||
/* c may be destroyed at this point as a result of
|
||||
* CONTENT_MSG_LOADING, so must not be accessed */
|
||||
@ -245,7 +248,12 @@ void content_process_data(struct content *c, char *data, unsigned long size)
|
||||
assert(c != 0);
|
||||
assert(c->status == CONTENT_STATUS_LOADING);
|
||||
LOG(("content %s, size %lu", c->url, size));
|
||||
handler_map[c->type].process_data(c, data, size);
|
||||
c->source_data = xrealloc(c->source_data, c->source_size + size);
|
||||
memcpy(c->source_data + c->source_size, data, size);
|
||||
c->source_size += size;
|
||||
c->size += size;
|
||||
if (handler_map[c->type].process_data)
|
||||
handler_map[c->type].process_data(c, data, size);
|
||||
}
|
||||
|
||||
|
||||
@ -270,13 +278,18 @@ void content_convert(struct content *c, unsigned long width, unsigned long heigh
|
||||
assert(c->status == CONTENT_STATUS_LOADING);
|
||||
LOG(("content %s", c->url));
|
||||
c->available_width = width;
|
||||
if (handler_map[c->type].convert(c, width, height)) {
|
||||
/* convert failed, destroy content */
|
||||
content_broadcast(c, CONTENT_MSG_ERROR, "Conversion failed");
|
||||
if (c->cache)
|
||||
cache_destroy(c);
|
||||
content_destroy(c);
|
||||
return;
|
||||
if (handler_map[c->type].convert) {
|
||||
if (handler_map[c->type].convert(c, width, height)) {
|
||||
/* convert failed, destroy content */
|
||||
content_broadcast(c, CONTENT_MSG_ERROR,
|
||||
"Conversion failed");
|
||||
if (c->cache)
|
||||
cache_destroy(c);
|
||||
content_destroy(c);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
c->status = CONTENT_STATUS_DONE;
|
||||
}
|
||||
assert(c->status == CONTENT_STATUS_READY ||
|
||||
c->status == CONTENT_STATUS_DONE);
|
||||
@ -295,6 +308,7 @@ void content_convert(struct content *c, unsigned long width, unsigned long heigh
|
||||
|
||||
void content_revive(struct content *c, unsigned long width, unsigned long height)
|
||||
{
|
||||
assert(0); /* unmaintained */
|
||||
assert(c != 0);
|
||||
if (c->status != CONTENT_STATUS_DONE)
|
||||
return;
|
||||
@ -315,8 +329,10 @@ void content_reformat(struct content *c, unsigned long width, unsigned long heig
|
||||
assert(c->status == CONTENT_STATUS_READY ||
|
||||
c->status == CONTENT_STATUS_DONE);
|
||||
c->available_width = width;
|
||||
handler_map[c->type].reformat(c, width, height);
|
||||
content_broadcast(c, CONTENT_MSG_REFORMAT, 0);
|
||||
if (handler_map[c->type].reformat) {
|
||||
handler_map[c->type].reformat(c, width, height);
|
||||
content_broadcast(c, CONTENT_MSG_REFORMAT, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -339,7 +355,7 @@ void content_destroy(struct content *c)
|
||||
return;
|
||||
}
|
||||
|
||||
if (c->type < HANDLER_MAP_COUNT)
|
||||
if (c->type < HANDLER_MAP_COUNT && handler_map[c->type].destroy)
|
||||
handler_map[c->type].destroy(c);
|
||||
for (user = c->user_list; user != 0; user = next) {
|
||||
next = user->next;
|
||||
@ -347,6 +363,7 @@ void content_destroy(struct content *c)
|
||||
}
|
||||
free(c->mime_type);
|
||||
xfree(c->url);
|
||||
free(c->source_data);
|
||||
xfree(c);
|
||||
}
|
||||
|
||||
@ -362,7 +379,7 @@ void content_reset(struct content *c)
|
||||
{
|
||||
assert(c != 0);
|
||||
LOG(("content %p %s", c, c->url));
|
||||
if (c->type < HANDLER_MAP_COUNT)
|
||||
if (c->type < HANDLER_MAP_COUNT && handler_map[c->type].destroy)
|
||||
handler_map[c->type].destroy(c);
|
||||
c->type = CONTENT_UNKNOWN;
|
||||
c->status = CONTENT_STATUS_TYPE_UNKNOWN;
|
||||
@ -384,7 +401,7 @@ void content_redraw(struct content *c, long x, long y,
|
||||
float scale)
|
||||
{
|
||||
assert(c != 0);
|
||||
if (handler_map[c->type].redraw != 0)
|
||||
if (handler_map[c->type].redraw)
|
||||
handler_map[c->type].redraw(c, x, y, width, height,
|
||||
clip_x0, clip_y0, clip_x1, clip_y1, scale);
|
||||
}
|
||||
@ -497,7 +514,7 @@ void content_add_instance(struct content *c, struct browser_window *bw,
|
||||
assert(c != 0);
|
||||
assert(c->type < CONTENT_UNKNOWN);
|
||||
LOG(("content %s", c->url));
|
||||
if (handler_map[c->type].add_instance != 0)
|
||||
if (handler_map[c->type].add_instance)
|
||||
handler_map[c->type].add_instance(c, bw, page, box, params, state);
|
||||
}
|
||||
|
||||
@ -515,7 +532,7 @@ void content_remove_instance(struct content *c, struct browser_window *bw,
|
||||
assert(c != 0);
|
||||
assert(c->type < CONTENT_UNKNOWN);
|
||||
LOG(("content %s", c->url));
|
||||
if (handler_map[c->type].remove_instance != 0)
|
||||
if (handler_map[c->type].remove_instance)
|
||||
handler_map[c->type].remove_instance(c, bw, page, box, params, state);
|
||||
}
|
||||
|
||||
@ -533,7 +550,7 @@ void content_reshape_instance(struct content *c, struct browser_window *bw,
|
||||
assert(c != 0);
|
||||
assert(c->type < CONTENT_UNKNOWN);
|
||||
LOG(("content %s", c->url));
|
||||
if (handler_map[c->type].reshape_instance != 0)
|
||||
if (handler_map[c->type].reshape_instance)
|
||||
handler_map[c->type].reshape_instance(c, bw, page, box, params, state);
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,6 @@
|
||||
#include "netsurf/content/cache.h"
|
||||
#include "netsurf/content/content_type.h"
|
||||
#include "netsurf/content/fetch.h"
|
||||
#include "netsurf/content/other.h"
|
||||
#include "netsurf/css/css.h"
|
||||
#include "netsurf/render/box.h"
|
||||
#include "netsurf/render/font.h"
|
||||
@ -123,7 +122,6 @@ struct content {
|
||||
struct content_plugin_data plugin;
|
||||
#endif
|
||||
#endif
|
||||
struct content_other_data other;
|
||||
} data;
|
||||
|
||||
struct cache_entry *cache; /**< Used by cache, 0 if not cached. */
|
||||
@ -137,7 +135,8 @@ struct content {
|
||||
char status_message[80]; /**< Text for status bar. */
|
||||
|
||||
struct fetch *fetch; /**< Associated fetch, or 0. */
|
||||
unsigned long fetch_size; /**< Amount of data fetched so far. */
|
||||
char *source_data; /**< Source data, as received. */
|
||||
unsigned long source_size; /**< Amount of data fetched so far. */
|
||||
unsigned long total_size; /**< Total data size, 0 if unknown. */
|
||||
|
||||
int lock; /**< Content in use, do not destroy. */
|
||||
|
@ -2,7 +2,7 @@
|
||||
* This file is part of NetSurf, http://netsurf.sourceforge.net/
|
||||
* Licensed under the GNU General Public License,
|
||||
* http://www.opensource.org/licenses/gpl-license
|
||||
* Copyright 2003 James Bursa <bursa@users.sourceforge.net>
|
||||
* Copyright 2004 James Bursa <bursa@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
/** \file
|
||||
@ -108,7 +108,6 @@ struct content * fetchcache(const char *url, char *referer,
|
||||
#endif
|
||||
cache_put(c);
|
||||
|
||||
c->fetch_size = 0;
|
||||
c->width = width;
|
||||
c->height = height;
|
||||
c->no_error_pages = no_error_pages;
|
||||
@ -169,17 +168,16 @@ void fetchcache_callback(fetch_msg msg, void *p, char *data, unsigned long size)
|
||||
|
||||
case FETCH_DATA:
|
||||
LOG(("FETCH_DATA"));
|
||||
c->fetch_size += size;
|
||||
if (c->total_size)
|
||||
sprintf(c->status_message,
|
||||
messages_get("RecPercent"),
|
||||
c->fetch_size, c->total_size,
|
||||
(unsigned int) (c->fetch_size *
|
||||
c->source_size + size, c->total_size,
|
||||
(unsigned int) ((c->source_size + size) *
|
||||
100.0 / c->total_size));
|
||||
else
|
||||
sprintf(c->status_message,
|
||||
messages_get("Received"),
|
||||
c->fetch_size);
|
||||
c->source_size + size);
|
||||
content_broadcast(c, CONTENT_MSG_STATUS, 0);
|
||||
content_process_data(c, data, size);
|
||||
break;
|
||||
@ -187,7 +185,7 @@ void fetchcache_callback(fetch_msg msg, void *p, char *data, unsigned long size)
|
||||
case FETCH_FINISHED:
|
||||
LOG(("FETCH_FINISHED"));
|
||||
sprintf(c->status_message, messages_get("Converting"),
|
||||
c->fetch_size);
|
||||
c->source_size);
|
||||
c->fetch = 0;
|
||||
content_broadcast(c, CONTENT_MSG_STATUS, 0);
|
||||
content_convert(c, c->width, c->height);
|
||||
|
24
css/css.c
24
css/css.c
@ -167,16 +167,6 @@ void css_create(struct content *c, const char *params[])
|
||||
c->data.css.import_url = xcalloc(0, sizeof(*c->data.css.import_url));
|
||||
c->data.css.import_content = xcalloc(0, sizeof(*c->data.css.import_content));
|
||||
c->active = 0;
|
||||
c->data.css.data = xcalloc(0, 1);
|
||||
c->data.css.length = 0;
|
||||
}
|
||||
|
||||
|
||||
void css_process_data(struct content *c, char *data, unsigned long size)
|
||||
{
|
||||
c->data.css.data = xrealloc(c->data.css.data, c->data.css.length + size + 2);
|
||||
memcpy(c->data.css.data + c->data.css.length, data, size);
|
||||
c->data.css.length += size;
|
||||
}
|
||||
|
||||
|
||||
@ -186,9 +176,10 @@ int css_convert(struct content *c, unsigned int width, unsigned int height)
|
||||
YY_BUFFER_STATE buffer;
|
||||
struct parse_params param = {0, c, 0, false};
|
||||
|
||||
c->data.css.data[c->data.css.length] =
|
||||
c->data.css.data[c->data.css.length + 1] = 0;
|
||||
buffer = css__scan_buffer(c->data.css.data, c->data.css.length + 2,
|
||||
c->source_data = xrealloc(c->source_data, c->source_size + 2);
|
||||
c->source_data[c->source_size] = 0;
|
||||
c->source_data[c->source_size + 1] = 0;
|
||||
buffer = css__scan_buffer(c->source_data, c->source_size + 2,
|
||||
c->data.css.css->lexer);
|
||||
assert(buffer);
|
||||
while ((token = css_lex(c->data.css.css->lexer))) {
|
||||
@ -250,18 +241,11 @@ void css_revive(struct content *c, unsigned int width, unsigned int height)
|
||||
}
|
||||
|
||||
|
||||
void css_reformat(struct content *c, unsigned int width, unsigned int height)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void css_destroy(struct content *c)
|
||||
{
|
||||
unsigned int i;
|
||||
struct css_node *r;
|
||||
|
||||
xfree(c->data.css.data);
|
||||
|
||||
for (i = 0; i != HASH_SIZE; i++) {
|
||||
for (r = c->data.css.css->rule[i]; r != 0; r = r->next)
|
||||
xfree(r->style);
|
||||
|
@ -169,8 +169,6 @@ struct content_css_data {
|
||||
unsigned int import_count; /**< Number of entries in import_url. */
|
||||
char **import_url; /**< Imported stylesheet urls. */
|
||||
struct content **import_content; /**< Imported stylesheet contents. */
|
||||
char *data; /**< Source data. */
|
||||
unsigned int length; /**< Current length of data. */
|
||||
};
|
||||
|
||||
|
||||
@ -258,10 +256,8 @@ struct parse_params {
|
||||
struct content;
|
||||
|
||||
void css_create(struct content *c, const char *params[]);
|
||||
void css_process_data(struct content *c, char *data, unsigned long size);
|
||||
int css_convert(struct content *c, unsigned int width, unsigned int height);
|
||||
void css_revive(struct content *c, unsigned int width, unsigned int height);
|
||||
void css_reformat(struct content *c, unsigned int width, unsigned int height);
|
||||
void css_destroy(struct content *c);
|
||||
|
||||
#ifdef CSS_INTERNALS
|
||||
|
4
makefile
4
makefile
@ -6,7 +6,7 @@
|
||||
|
||||
CC = /riscos/bin/gcc
|
||||
CC_DEBUG = gcc
|
||||
OBJECTS_COMMON = cache.o content.o fetch.o fetchcache.o other.o \
|
||||
OBJECTS_COMMON = cache.o content.o fetch.o fetchcache.o \
|
||||
css.o css_enum.o parser.o ruleset.o scanner.o \
|
||||
box.o form.o html.o layout.o textplain.o \
|
||||
messages.o utils.o translit.o pool.o url.o
|
||||
@ -19,7 +19,7 @@ OBJECTS = $(OBJECTS_COMMON) \
|
||||
draw.o gif.o jpeg.o plugin.o png.o sprite.o \
|
||||
about.o filetype.o font.o uri.o url_protocol.o history.o \
|
||||
version.o thumbnail.o \
|
||||
save.o save_complete.o save_draw.o save_html.o
|
||||
save.o save_complete.o save_draw.o
|
||||
OBJECTS_DEBUG = $(OBJECTS_COMMON) \
|
||||
netsurfd.o \
|
||||
options.o filetyped.o fontd.o
|
||||
|
@ -69,8 +69,6 @@ void html_create(struct content *c, const char *params[])
|
||||
}
|
||||
|
||||
html->parser = htmlCreatePushParserCtxt(0, 0, "", 0, 0, html->encoding);
|
||||
html->source = xcalloc(0, 1);
|
||||
html->length = 0;
|
||||
html->base_url = xstrdup(c->url);
|
||||
html->layout = 0;
|
||||
html->background_colour = TRANSPARENT;
|
||||
@ -98,21 +96,16 @@ void html_process_data(struct content *c, char *data, unsigned long size)
|
||||
unsigned long x;
|
||||
LOG(("content %s, size %lu", c->url, size));
|
||||
/*cache_dump();*/
|
||||
c->data.html.source = xrealloc(c->data.html.source, c->data.html.length + size);
|
||||
memcpy(c->data.html.source + c->data.html.length, data, size);
|
||||
c->data.html.length += size;
|
||||
c->size += size;
|
||||
/* First time through, check if we need to get the encoding
|
||||
/* First time through, check if we need to get the encoding
|
||||
* if so, get it and reset the parser instance with it.
|
||||
* if it fails, assume Latin1
|
||||
*/
|
||||
if (c->data.html.getenc) {
|
||||
c->data.html.encoding = xmlDetectCharEncoding(c->data.html.source, c->data.html.length);
|
||||
if (c->data.html.encoding == XML_CHAR_ENCODING_ERROR ||
|
||||
c->data.html.encoding == XML_CHAR_ENCODING_NONE) {
|
||||
c->data.html.encoding = XML_CHAR_ENCODING_8859_1;
|
||||
}
|
||||
xmlSwitchEncoding((xmlParserCtxtPtr)c->data.html.parser, c->data.html.encoding);
|
||||
c->data.html.encoding = xmlDetectCharEncoding(data, size);
|
||||
if (c->data.html.encoding == XML_CHAR_ENCODING_ERROR ||
|
||||
c->data.html.encoding == XML_CHAR_ENCODING_NONE)
|
||||
c->data.html.encoding = XML_CHAR_ENCODING_8859_1;
|
||||
xmlSwitchEncoding(c->data.html.parser, c->data.html.encoding);
|
||||
c->data.html.getenc = false;
|
||||
LOG(("Encoding: %s", xmlGetCharEncodingName(c->data.html.encoding)));
|
||||
}
|
||||
@ -758,7 +751,6 @@ void html_destroy(struct content *c)
|
||||
if (c->data.html.parser)
|
||||
htmlFreeParserCtxt(c->data.html.parser);
|
||||
|
||||
free(c->data.html.source);
|
||||
free(c->data.html.base_url);
|
||||
|
||||
if (c->data.html.layout)
|
||||
|
@ -37,8 +37,6 @@ struct box_position {
|
||||
struct content_html_data {
|
||||
htmlParserCtxt *parser; /**< HTML parser context. */
|
||||
|
||||
char *source; /**< Source data. */
|
||||
int length; /**< Length of source. */
|
||||
xmlCharEncoding encoding; /**< Encoding of source. */
|
||||
bool getenc; /**< Need to get the encoding from the document, as server is broken. */
|
||||
|
||||
|
@ -2,16 +2,13 @@
|
||||
* This file is part of NetSurf, http://netsurf.sourceforge.net/
|
||||
* Licensed under the GNU General Public License,
|
||||
* http://www.opensource.org/licenses/gpl-license
|
||||
* Copyright 2003 James Bursa <bursa@users.sourceforge.net>
|
||||
* Copyright 2004 James Bursa <bursa@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "libxml/HTMLparser.h"
|
||||
#include "netsurf/content/content.h"
|
||||
#include "netsurf/render/html.h"
|
||||
#include "netsurf/render/textplain.h"
|
||||
#include "netsurf/utils/log.h"
|
||||
|
||||
|
||||
static const char header[] = "<html><body><pre>";
|
||||
@ -25,33 +22,9 @@ void textplain_create(struct content *c, const char *params[])
|
||||
}
|
||||
|
||||
|
||||
void textplain_process_data(struct content *c, char *data, unsigned long size)
|
||||
{
|
||||
html_process_data(c, data, size);
|
||||
}
|
||||
|
||||
|
||||
int textplain_convert(struct content *c, unsigned int width, unsigned int height)
|
||||
{
|
||||
htmlParseChunk(c->data.html.parser, footer, sizeof(footer) - 1, 0);
|
||||
c->type = CONTENT_HTML;
|
||||
return html_convert(c, width, height);
|
||||
}
|
||||
|
||||
|
||||
void textplain_revive(struct content *c, unsigned int width, unsigned int height)
|
||||
{
|
||||
assert(0);
|
||||
}
|
||||
|
||||
|
||||
void textplain_reformat(struct content *c, unsigned int width, unsigned int height)
|
||||
{
|
||||
assert(0);
|
||||
}
|
||||
|
||||
|
||||
void textplain_destroy(struct content *c)
|
||||
{
|
||||
html_destroy(c);
|
||||
}
|
||||
|
@ -2,19 +2,15 @@
|
||||
* This file is part of NetSurf, http://netsurf.sourceforge.net/
|
||||
* Licensed under the GNU General Public License,
|
||||
* http://www.opensource.org/licenses/gpl-license
|
||||
* Copyright 2003 James Bursa <bursa@users.sourceforge.net>
|
||||
* Copyright 2004 James Bursa <bursa@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
#ifndef _NETSURF_RENDER_TEXTPLAIN_H_
|
||||
#define _NETSURF_RENDER_TEXTPLAIN_H_
|
||||
|
||||
#include "netsurf/content/content.h"
|
||||
struct content;
|
||||
|
||||
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);
|
||||
void textplain_reformat(struct content *c, unsigned int width, unsigned int height);
|
||||
void textplain_destroy(struct content *c);
|
||||
|
||||
#endif
|
||||
|
@ -180,7 +180,7 @@ void gui_download_window_error(gui_window *g, const char *error)
|
||||
void gui_download_window_done(gui_window *g)
|
||||
{
|
||||
snprintf(g->status, 256, messages_get("Downloaded"),
|
||||
g->data.download.content->data.other.length);
|
||||
g->data.download.content->source_size);
|
||||
wimp_set_icon_state(g->window,
|
||||
ICON_DOWNLOAD_STATUS, 0, 0);
|
||||
|
||||
@ -239,7 +239,7 @@ void ro_download_drag_end(wimp_dragged *drag)
|
||||
message.data.data_xfer.pos.x = pointer.pos.x;
|
||||
message.data.data_xfer.pos.y = pointer.pos.y;
|
||||
message.data.data_xfer.est_size = (int)
|
||||
current_gui->data.download.content->data.other.length;
|
||||
current_gui->data.download.content->source_size;
|
||||
message.data.data_xfer.file_type = current_gui->data.download.file_type;
|
||||
strncpy(message.data.data_xfer.file_name,
|
||||
current_gui->data.download.path, 212);
|
||||
@ -263,8 +263,8 @@ void ro_download_datasave_ack(wimp_message *message)
|
||||
|
||||
assert(current_gui->data.download.download_status == download_COMPLETE);
|
||||
|
||||
data = current_gui->data.download.content->data.other.data;
|
||||
data_end = data + current_gui->data.download.content->data.other.length;
|
||||
data = current_gui->data.download.content->source_data;
|
||||
data_end = data + current_gui->data.download.content->source_size;
|
||||
|
||||
error = xosfile_save_stamped(message->data.data_xfer.file_name,
|
||||
current_gui->data.download.file_type,
|
||||
|
@ -17,21 +17,6 @@
|
||||
#include "oslib/drawfile.h"
|
||||
|
||||
#ifdef WITH_DRAW
|
||||
void draw_create(struct content *c, const char *params[])
|
||||
{
|
||||
c->data.draw.data = xcalloc(0, 1);
|
||||
c->data.draw.length = 0;
|
||||
}
|
||||
|
||||
|
||||
void draw_process_data(struct content *c, char *data, unsigned long size)
|
||||
{
|
||||
c->data.draw.data = xrealloc(c->data.draw.data, c->data.draw.length + size);
|
||||
memcpy((char*)c->data.draw.data + c->data.draw.length, data, size);
|
||||
c->data.draw.length += size;
|
||||
c->size += size;
|
||||
}
|
||||
|
||||
|
||||
int draw_convert(struct content *c, unsigned int width, unsigned int height)
|
||||
{
|
||||
@ -48,8 +33,8 @@ int draw_convert(struct content *c, unsigned int width, unsigned int height)
|
||||
matrix->entries[2][1] = 0;
|
||||
|
||||
/* BBox contents in Draw units (256*OS unit) */
|
||||
error = xdrawfile_bbox(0, (drawfile_diagram*)(c->data.draw.data),
|
||||
(int)c->data.draw.length, matrix, bbox);
|
||||
error = xdrawfile_bbox(0, (drawfile_diagram*)(c->source_data),
|
||||
(int)c->source_size, matrix, bbox);
|
||||
|
||||
if (error) {
|
||||
LOG(("error: %s", error->errmess));
|
||||
@ -66,7 +51,7 @@ int draw_convert(struct content *c, unsigned int width, unsigned int height)
|
||||
c->data.draw.y0 = bbox->y0 / 2;
|
||||
c->title = xcalloc(100, 1);
|
||||
sprintf(c->title, messages_get("DrawTitle"), c->width,
|
||||
c->height, c->data.draw.length);
|
||||
c->height, c->source_size);
|
||||
c->status = CONTENT_STATUS_DONE;
|
||||
xfree(matrix);
|
||||
xfree(bbox);
|
||||
@ -74,19 +59,8 @@ int draw_convert(struct content *c, unsigned int width, unsigned int height)
|
||||
}
|
||||
|
||||
|
||||
void draw_revive(struct content *c, unsigned int width, unsigned int height)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void draw_reformat(struct content *c, unsigned int width, unsigned int height)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void draw_destroy(struct content *c)
|
||||
{
|
||||
xfree(c->data.draw.data);
|
||||
xfree(c->title);
|
||||
}
|
||||
|
||||
@ -96,21 +70,19 @@ void draw_redraw(struct content *c, long x, long y,
|
||||
long clip_x0, long clip_y0, long clip_x1, long clip_y1,
|
||||
float scale)
|
||||
{
|
||||
os_trfm *matrix = xcalloc(1, sizeof(os_trfm));
|
||||
os_trfm matrix;
|
||||
|
||||
/* Scaled image. Transform units (65536*OS units) */
|
||||
matrix->entries[0][0] = ((width*65536) / (c->width*2));
|
||||
matrix->entries[0][1] = 0;
|
||||
matrix->entries[1][0] = 0;
|
||||
matrix->entries[1][1] = ((height*65536) / (c->height*2));
|
||||
matrix.entries[0][0] = ((width*65536) / (c->width*2));
|
||||
matrix.entries[0][1] = 0;
|
||||
matrix.entries[1][0] = 0;
|
||||
matrix.entries[1][1] = ((height*65536) / (c->height*2));
|
||||
/* Draw units. (x,y) = bottom left */
|
||||
matrix->entries[2][0] = x * 256 - c->data.draw.x0 * width / c->width;
|
||||
matrix->entries[2][1] = (y - height) * 256 -
|
||||
matrix.entries[2][0] = x * 256 - c->data.draw.x0 * width / c->width;
|
||||
matrix.entries[2][1] = (y - height) * 256 -
|
||||
c->data.draw.y0 * height / c->height;
|
||||
|
||||
xdrawfile_render(0, (drawfile_diagram*)(c->data.draw.data),
|
||||
(int)c->data.draw.length, matrix, 0, 0);
|
||||
|
||||
xfree(matrix);
|
||||
xdrawfile_render(0, (drawfile_diagram*)(c->source_data),
|
||||
(int)c->source_size, &matrix, 0, 0);
|
||||
}
|
||||
#endif
|
||||
|
@ -11,17 +11,10 @@
|
||||
struct content;
|
||||
|
||||
struct content_draw_data {
|
||||
void *data;
|
||||
unsigned long length;
|
||||
int x0, y0;
|
||||
};
|
||||
|
||||
void draw_init(void);
|
||||
void draw_create(struct content *c, const char *params[]);
|
||||
void draw_process_data(struct content *c, char *data, unsigned long size);
|
||||
int draw_convert(struct content *c, unsigned int width, unsigned int height);
|
||||
void draw_revive(struct content *c, unsigned int width, unsigned int height);
|
||||
void draw_reformat(struct content *c, unsigned int width, unsigned int height);
|
||||
void draw_destroy(struct content *c);
|
||||
void draw_redraw(struct content *c, long x, long y,
|
||||
unsigned long width, unsigned long height,
|
||||
|
@ -2,15 +2,17 @@
|
||||
* This file is part of NetSurf, http://netsurf.sourceforge.net/
|
||||
* Licensed under the GNU General Public License,
|
||||
* http://www.opensource.org/licenses/gpl-license
|
||||
* Copyright 2003 James Bursa <bursa@users.sourceforge.net>
|
||||
* Copyright 2004 James Bursa <bursa@users.sourceforge.net>
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unixlib/local.h>
|
||||
#include "oslib/mimemap.h"
|
||||
#include "oslib/osfile.h"
|
||||
#include "netsurf/utils/config.h"
|
||||
#include "netsurf/content/content.h"
|
||||
#include "netsurf/content/fetch.h"
|
||||
#include "netsurf/riscos/gui.h"
|
||||
#include "netsurf/utils/log.h"
|
||||
#include "netsurf/utils/utils.h"
|
||||
|
||||
@ -20,26 +22,14 @@ struct type_entry {
|
||||
char mime_type[40];
|
||||
};
|
||||
static const struct type_entry type_map[] = {
|
||||
#ifdef WITH_PLUGIN
|
||||
{0x188, "application/x-shockwave-flash"},
|
||||
#endif
|
||||
#ifdef WITH_GIF
|
||||
{0x695, "image/gif"},
|
||||
#endif
|
||||
#ifdef WITH_DRAW
|
||||
{0xaff, "image/x-drawfile"},
|
||||
#endif
|
||||
#ifdef WITH_PNG
|
||||
{0xb60, "image/png"},
|
||||
#endif
|
||||
#ifdef WITH_JPEG
|
||||
{0xc85, "image/jpeg"},
|
||||
#endif
|
||||
{0xf79, "text/css"},
|
||||
{0xfaf, "text/html"},
|
||||
#ifdef WITH_SPRITE
|
||||
{0xff9, "image/x-riscos-sprite"},
|
||||
#endif
|
||||
{0xfff, "text/plain"},
|
||||
};
|
||||
#define TYPE_MAP_COUNT (sizeof(type_map) / sizeof(type_map[0]))
|
||||
@ -49,7 +39,7 @@ static int cmp_type(const void *x, const void *y);
|
||||
|
||||
|
||||
/**
|
||||
* filetype -- determine the MIME type of a local file
|
||||
* Determine the MIME type of a local file.
|
||||
*/
|
||||
|
||||
const char *fetch_filetype(const char *unix_path)
|
||||
@ -93,3 +83,31 @@ int cmp_type(const void *x, const void *y)
|
||||
return *p < q->file_type ? -1 : (*p == q->file_type ? 0 : +1);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Determine the RISC OS filetype for a content.
|
||||
*/
|
||||
|
||||
int ro_content_filetype(struct content *content)
|
||||
{
|
||||
int file_type;
|
||||
os_error *error;
|
||||
|
||||
switch (content->type) {
|
||||
case CONTENT_HTML: return 0xfaf;
|
||||
case CONTENT_TEXTPLAIN: return 0xfff;
|
||||
case CONTENT_CSS: return 0xf79;
|
||||
case CONTENT_JPEG: return 0xc85;
|
||||
case CONTENT_PNG: return 0xb60;
|
||||
case CONTENT_GIF: return 0x695;
|
||||
case CONTENT_SPRITE: return 0xff9;
|
||||
case CONTENT_DRAW: return 0xaff;
|
||||
default: break;
|
||||
}
|
||||
|
||||
error = xmimemaptranslate_mime_type_to_filetype(content->mime_type,
|
||||
&file_type);
|
||||
if (error)
|
||||
return 0xffd;
|
||||
return file_type;
|
||||
}
|
||||
|
20
riscos/gif.c
20
riscos/gif.c
@ -34,18 +34,9 @@ void nsgif_init(void)
|
||||
void nsgif_create(struct content *c, const char *params[])
|
||||
{
|
||||
c->data.gif.sprite_area = 0;
|
||||
c->data.gif.data = xcalloc(0, 1);
|
||||
c->data.gif.length = 0;
|
||||
c->data.gif.buffer_pos = 0;
|
||||
}
|
||||
|
||||
void nsgif_process_data(struct content *c, char *data, unsigned long size)
|
||||
{
|
||||
c->data.gif.data = xrealloc(c->data.gif.data, c->data.gif.length + size);
|
||||
memcpy(c->data.gif.data + c->data.gif.length, data, size);
|
||||
c->data.gif.length += size;
|
||||
c->size += size;
|
||||
}
|
||||
|
||||
int nsgif_convert(struct content *c, unsigned int iwidth, unsigned int iheight)
|
||||
{
|
||||
@ -55,7 +46,7 @@ int nsgif_convert(struct content *c, unsigned int iwidth, unsigned int iheight)
|
||||
struct osspriteop_header *header;
|
||||
struct osspriteop_area *area;
|
||||
|
||||
a = Anim_FromData(c->data.gif.data, c->data.gif.length, NULL, false, false, false);
|
||||
a = Anim_FromData(c->source_data, c->source_size, NULL, false, false, false);
|
||||
if (!a) {
|
||||
|
||||
LOG(("Error creating anim object"));
|
||||
@ -124,14 +115,6 @@ int nsgif_convert(struct content *c, unsigned int iwidth, unsigned int iheight)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void nsgif_revive(struct content *c, unsigned int width, unsigned int height)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void nsgif_reformat(struct content *c, unsigned int width, unsigned int height)
|
||||
{
|
||||
}
|
||||
|
||||
void nsgif_redraw(struct content *c, long x, long y,
|
||||
unsigned long width, unsigned long height,
|
||||
@ -192,7 +175,6 @@ void nsgif_destroy(struct content *c)
|
||||
{
|
||||
xfree(c->title);
|
||||
xfree(c->data.gif.sprite_area);
|
||||
xfree(c->data.gif.data);
|
||||
}
|
||||
|
||||
|
||||
|
@ -13,8 +13,6 @@
|
||||
struct content;
|
||||
|
||||
struct content_gif_data {
|
||||
char *data;
|
||||
unsigned long length;
|
||||
unsigned long buffer_pos;
|
||||
osspriteop_area *sprite_area;
|
||||
char *sprite_image;
|
||||
@ -22,10 +20,7 @@ struct content_gif_data {
|
||||
|
||||
void nsgif_init(void);
|
||||
void nsgif_create(struct content *c, const char *params[]);
|
||||
void nsgif_process_data(struct content *c, char *data, unsigned long size);
|
||||
int nsgif_convert(struct content *c, unsigned int width, unsigned int height);
|
||||
void nsgif_revive(struct content *c, unsigned int width, unsigned int height);
|
||||
void nsgif_reformat(struct content *c, unsigned int width, unsigned int height);
|
||||
void nsgif_destroy(struct content *c);
|
||||
void nsgif_redraw(struct content *c, long x, long y,
|
||||
unsigned long width, unsigned long height,
|
||||
|
22
riscos/gui.c
22
riscos/gui.c
@ -1120,23 +1120,11 @@ void ro_gui_open_help_page(void)
|
||||
|
||||
void ro_gui_view_source(struct content *content)
|
||||
{
|
||||
|
||||
if (content->type == CONTENT_HTML) {
|
||||
xosfile_save_stamped("<Wimp$Scrap>", 0xfff,
|
||||
content->data.html.source,
|
||||
(content->data.html.source +
|
||||
content->data.html.length));
|
||||
xos_cli("Filer_Run <Wimp$Scrap>");
|
||||
xosfile_set_type("<Wimp$Scrap>", 0xfaf);
|
||||
}
|
||||
else if (content->type == CONTENT_CSS) {
|
||||
xosfile_save_stamped("<Wimp$Scrap>", 0xfff,
|
||||
content->data.css.data,
|
||||
(content->data.css.data +
|
||||
content->data.css.length));
|
||||
xos_cli("Filer_Run <Wimp$Scrap>");
|
||||
xosfile_set_type("<Wimp$Scrap>", 0xf79);
|
||||
}
|
||||
xosfile_save_stamped("<Wimp$Scrap>", 0xfff,
|
||||
content->source_data,
|
||||
content->source_data + content->source_size);
|
||||
xos_cli("Filer_Run <Wimp$Scrap>");
|
||||
xosfile_set_type("<Wimp$Scrap>", ro_content_filetype(content));
|
||||
}
|
||||
|
||||
|
||||
|
@ -159,6 +159,9 @@ void ro_gui_drag_icon(wimp_pointer *pointer);
|
||||
void ro_gui_save_drag_end(wimp_dragged *drag);
|
||||
void ro_gui_save_datasave_ack(wimp_message *message);
|
||||
|
||||
/* in filetype.c */
|
||||
int ro_content_filetype(struct content *content);
|
||||
|
||||
/* icon numbers */
|
||||
#define ICON_TOOLBAR_THROBBER 1
|
||||
#define ICON_TOOLBAR_URL 2
|
||||
|
@ -127,22 +127,10 @@ void nsjpeg_init(void) {
|
||||
void nsjpeg_create(struct content *c, const char *params[])
|
||||
{
|
||||
c->data.jpeg.sprite_area = 0;
|
||||
c->data.jpeg.data = xcalloc(0, 1);
|
||||
c->data.jpeg.length = 0;
|
||||
c->data.jpeg.use_module = true; /* assume the OS can cope */
|
||||
}
|
||||
|
||||
|
||||
void nsjpeg_process_data(struct content *c, char *data, unsigned long size)
|
||||
{
|
||||
c->data.jpeg.data = xrealloc(c->data.jpeg.data, c->data.jpeg.length + size);
|
||||
memcpy((char*)(c->data.jpeg.data) + c->data.jpeg.length, data, size);
|
||||
c->data.jpeg.length += size;
|
||||
c->size += size;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int nsjpeg_convert(struct content *c, unsigned int width, unsigned int height)
|
||||
{
|
||||
struct jpeg_decompress_struct cinfo;
|
||||
@ -158,8 +146,8 @@ int nsjpeg_convert(struct content *c, unsigned int width, unsigned int height)
|
||||
{
|
||||
os_error *e;
|
||||
int w,h;
|
||||
e = xjpeginfo_dimensions((jpeg_image const*)c->data.jpeg.data,
|
||||
(int) c->data.jpeg.length,
|
||||
e = xjpeginfo_dimensions((jpeg_image const*)c->source_data,
|
||||
(int) c->source_size,
|
||||
0, &w, &h, 0, 0, 0);
|
||||
|
||||
if (!e) {
|
||||
@ -167,7 +155,7 @@ int nsjpeg_convert(struct content *c, unsigned int width, unsigned int height)
|
||||
c->width = w;
|
||||
c->height = h;
|
||||
c->title = xcalloc(100, 1);
|
||||
sprintf(c->title, messages_get("JPEGTitle"), w, h, c->data.jpeg.length);
|
||||
sprintf(c->title, messages_get("JPEGTitle"), w, h, c->source_size);
|
||||
c->status = CONTENT_STATUS_DONE;
|
||||
return 0;
|
||||
}
|
||||
@ -183,7 +171,7 @@ int nsjpeg_convert(struct content *c, unsigned int width, unsigned int height)
|
||||
return 1;
|
||||
}
|
||||
jpeg_create_decompress(&cinfo);
|
||||
jpeg_memory_src(&cinfo, c->data.jpeg.data, c->data.jpeg.length);
|
||||
jpeg_memory_src(&cinfo, c->source_data, c->source_size);
|
||||
jpeg_read_header(&cinfo, TRUE);
|
||||
jpeg_start_decompress(&cinfo);
|
||||
|
||||
@ -311,20 +299,9 @@ int nsjpeg_convert(struct content *c, unsigned int width, unsigned int height)
|
||||
}
|
||||
|
||||
|
||||
void nsjpeg_revive(struct content *c, unsigned int width, unsigned int height)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void nsjpeg_reformat(struct content *c, unsigned int width, unsigned int height)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void nsjpeg_destroy(struct content *c)
|
||||
{
|
||||
xfree(c->data.jpeg.sprite_area);
|
||||
xfree(c->data.jpeg.data);
|
||||
xfree(c->title);
|
||||
}
|
||||
|
||||
@ -343,9 +320,9 @@ void nsjpeg_redraw(struct content *c, long x, long y,
|
||||
factors.ydiv = c->height * 2;
|
||||
|
||||
if (c->data.jpeg.use_module) { /* we can use the OS for this one */
|
||||
xjpeg_plot_scaled((jpeg_image *) c->data.jpeg.data,
|
||||
xjpeg_plot_scaled((jpeg_image *) c->source_data,
|
||||
x, (int)(y - height),
|
||||
&factors, (int) c->data.jpeg.length,
|
||||
&factors, (int) c->source_size,
|
||||
jpeg_SCALE_DITHERED);
|
||||
return;
|
||||
}
|
||||
|
@ -14,8 +14,6 @@
|
||||
struct content;
|
||||
|
||||
struct content_jpeg_data {
|
||||
void *data;
|
||||
unsigned long length;
|
||||
osspriteop_area *sprite_area;
|
||||
char *sprite_image;
|
||||
bool use_module;
|
||||
@ -23,10 +21,7 @@ struct content_jpeg_data {
|
||||
|
||||
void nsjpeg_init(void);
|
||||
void nsjpeg_create(struct content *c, const char *params[]);
|
||||
void nsjpeg_process_data(struct content *c, char *data, unsigned long size);
|
||||
int nsjpeg_convert(struct content *c, unsigned int width, unsigned int height);
|
||||
void nsjpeg_revive(struct content *c, unsigned int width, unsigned int height);
|
||||
void nsjpeg_reformat(struct content *c, unsigned int width, unsigned int height);
|
||||
void nsjpeg_destroy(struct content *c);
|
||||
void nsjpeg_redraw(struct content *c, long x, long y,
|
||||
unsigned long width, unsigned long height,
|
||||
|
@ -286,6 +286,8 @@ void ro_gui_menu_selection(wimp_selection *selection)
|
||||
|
||||
void ro_gui_menu_warning(wimp_message_menu_warning *warning)
|
||||
{
|
||||
char icon[20] = "file_xxx";
|
||||
struct content *c = current_gui->data.browser.bw->current_content;
|
||||
os_error *error;
|
||||
|
||||
if (warning->selection.items[0] != 0)
|
||||
@ -304,8 +306,11 @@ void ro_gui_menu_warning(wimp_message_menu_warning *warning)
|
||||
case -1:
|
||||
default: /* Save */
|
||||
gui_current_save_type = GUI_SAVE_SOURCE;
|
||||
if (c)
|
||||
sprintf(icon, "file_%x",
|
||||
ro_content_filetype(c));
|
||||
ro_gui_set_icon_string(dialog_saveas,
|
||||
ICON_SAVE_ICON, "file_faf");
|
||||
ICON_SAVE_ICON, icon);
|
||||
ro_gui_set_icon_string(dialog_saveas,
|
||||
ICON_SAVE_PATH,
|
||||
messages_get("SaveSource"));
|
||||
|
21
riscos/png.c
21
riscos/png.c
@ -2,7 +2,7 @@
|
||||
* This file is part of NetSurf, http://netsurf.sourceforge.net/
|
||||
* Licensed under the GNU General Public License,
|
||||
* http://www.opensource.org/licenses/gpl-license
|
||||
* Copyright 2003 James Bursa <bursa@users.sourceforge.net>
|
||||
* Copyright 2004 James Bursa <bursa@users.sourceforge.net>
|
||||
* Copyright 2004 Richard Wilson <not_ginger_matt@hotmail.com>
|
||||
*/
|
||||
|
||||
@ -11,10 +11,7 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <swis.h>
|
||||
#include "ifc.h"
|
||||
#include "libpng/png.h"
|
||||
#include "oslib/colourtrans.h"
|
||||
#include "oslib/os.h"
|
||||
#include "oslib/osspriteop.h"
|
||||
#include "netsurf/utils/config.h"
|
||||
#include "netsurf/content/content.h"
|
||||
@ -82,14 +79,12 @@ void nspng_process_data(struct content *c, char *data, unsigned long size)
|
||||
|
||||
void info_callback(png_structp png, png_infop info)
|
||||
{
|
||||
int i, bit_depth, color_type, interlace;
|
||||
int bit_depth, color_type, interlace;
|
||||
unsigned int rowbytes, sprite_size;
|
||||
unsigned long width, height;
|
||||
struct content *c = png_get_progressive_ptr(png);
|
||||
osspriteop_area *sprite_area;
|
||||
osspriteop_header *sprite;
|
||||
png_color_16 *png_background;
|
||||
png_color_16 default_background = {0, 0xffff, 0xffff, 0xffff, 0xffff};
|
||||
|
||||
/* Read the PNG details
|
||||
*/
|
||||
@ -118,7 +113,7 @@ void info_callback(png_structp png, png_infop info)
|
||||
sprite->left_bit = 0;
|
||||
sprite->right_bit = 31;
|
||||
sprite->mask = sprite->image = sizeof(*sprite);
|
||||
sprite->mode = 0x301680b5;
|
||||
sprite->mode = (os_mode) 0x301680b5;
|
||||
|
||||
/* Store the sprite area
|
||||
*/
|
||||
@ -219,16 +214,6 @@ int nspng_convert(struct content *c, unsigned int width, unsigned int height)
|
||||
}
|
||||
|
||||
|
||||
void nspng_revive(struct content *c, unsigned int width, unsigned int height)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void nspng_reformat(struct content *c, unsigned int width, unsigned int height)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void nspng_destroy(struct content *c)
|
||||
{
|
||||
xfree(c->title);
|
||||
|
@ -20,18 +20,12 @@ struct content_png_data {
|
||||
int interlace;
|
||||
osspriteop_area *sprite_area;
|
||||
char *sprite_image;
|
||||
enum { PNG_PALETTE, PNG_DITHER, PNG_DEEP } type;
|
||||
/** for ImageFileConvert */
|
||||
char *data;
|
||||
unsigned long length;
|
||||
};
|
||||
|
||||
void nspng_init(void);
|
||||
void nspng_create(struct content *c, const char *params[]);
|
||||
void nspng_process_data(struct content *c, char *data, unsigned long size);
|
||||
int nspng_convert(struct content *c, unsigned int width, unsigned int height);
|
||||
void nspng_revive(struct content *c, unsigned int width, unsigned int height);
|
||||
void nspng_reformat(struct content *c, unsigned int width, unsigned int height);
|
||||
void nspng_destroy(struct content *c);
|
||||
void nspng_redraw(struct content *c, long x, long y,
|
||||
unsigned long width, unsigned long height,
|
||||
|
@ -15,7 +15,6 @@
|
||||
#include "oslib/wimp.h"
|
||||
#include "netsurf/riscos/gui.h"
|
||||
#include "netsurf/riscos/save_draw.h"
|
||||
#include "netsurf/riscos/save_html.h"
|
||||
#include "netsurf/utils/log.h"
|
||||
#include "netsurf/utils/messages.h"
|
||||
#include "netsurf/utils/utils.h"
|
||||
@ -107,22 +106,23 @@ void ro_gui_save_drag_end(wimp_dragged *drag)
|
||||
void ro_gui_save_datasave_ack(wimp_message *message)
|
||||
{
|
||||
char *path = message->data.data_xfer.file_name;
|
||||
struct content *c = current_gui->data.browser.bw->current_content;
|
||||
|
||||
ro_gui_set_icon_string(dialog_saveas, ICON_SAVE_PATH, path);
|
||||
|
||||
switch (gui_current_save_type) {
|
||||
case GUI_SAVE_SOURCE:
|
||||
if (!current_gui->data.browser.bw->current_content)
|
||||
if (!c)
|
||||
return;
|
||||
save_as_html(current_gui->data.browser.bw->
|
||||
current_content, path);
|
||||
xosfile_save_stamped(path, ro_content_filetype(c),
|
||||
c->source_data,
|
||||
c->source_data + c->source_size);
|
||||
break;
|
||||
|
||||
case GUI_SAVE_DRAW:
|
||||
if (!current_gui->data.browser.bw->current_content)
|
||||
if (!c)
|
||||
return;
|
||||
save_as_draw(current_gui->data.browser.bw->
|
||||
current_content, path);
|
||||
save_as_draw(c, path);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "netsurf/css/css.h"
|
||||
#include "netsurf/render/form.h"
|
||||
#include "netsurf/render/layout.h"
|
||||
#include "netsurf/riscos/gui.h"
|
||||
#include "netsurf/riscos/save_complete.h"
|
||||
#include "netsurf/utils/log.h"
|
||||
#include "netsurf/utils/utils.h"
|
||||
@ -36,16 +37,11 @@ void save_complete(struct content *c) {
|
||||
char *fname = 0, *spath;
|
||||
unsigned int i;
|
||||
|
||||
if (c->type != CONTENT_HTML) {
|
||||
if (c->type != CONTENT_HTML)
|
||||
return;
|
||||
}
|
||||
|
||||
fname = "test"; /*get_filename(c->data.html.base_url);*/
|
||||
|
||||
if (!fname) { /* no path -> exit */
|
||||
return;
|
||||
}
|
||||
|
||||
spath = xcalloc(strlen(SAVE_PATH)+strlen(OBJ_DIR)+strlen(fname)+50,
|
||||
sizeof(char));
|
||||
|
||||
@ -53,55 +49,35 @@ void save_complete(struct content *c) {
|
||||
xosfile_create_dir(spath, 77);
|
||||
|
||||
/* save stylesheets, ignoring the base sheet and <style> elements */
|
||||
for (i=2; i!=c->data.html.stylesheet_count; i++) {
|
||||
if (c->data.html.stylesheet_content[i] == 0) {
|
||||
continue;
|
||||
}
|
||||
for (i = 2; i != c->data.html.stylesheet_count; i++) {
|
||||
struct content *css = c->data.html.object[i].content;
|
||||
|
||||
save_imported_sheets(c->data.html.stylesheet_content[i], (int)i, 0, spath, fname);
|
||||
if (!css)
|
||||
continue;
|
||||
|
||||
save_imported_sheets(css, (int)i, 0, spath, fname);
|
||||
|
||||
sprintf(spath, "%s%s%s.%d/css", SAVE_PATH, fname, OBJ_DIR, i);
|
||||
xosfile_save_stamped(spath, 0xf79, c->data.html.stylesheet_content[i]->data.css.data, c->data.html.stylesheet_content[i]->data.css.data + c->data.html.stylesheet_content[i]->data.css.length);
|
||||
xosfile_save_stamped(spath, 0xf79,
|
||||
css->source_data,
|
||||
css->source_data + css->source_size);
|
||||
}
|
||||
|
||||
/* save objects */
|
||||
for (i=0; i!=c->data.html.object_count; i++) {
|
||||
for (i = 0; i != c->data.html.object_count; i++) {
|
||||
struct content *obj = c->data.html.object[i].content;
|
||||
|
||||
/* skip difficult content types */
|
||||
if (c->data.html.object[i].content->type >= CONTENT_PLUGIN) {
|
||||
if (!obj || obj->type >= CONTENT_PLUGIN) {
|
||||
continue;
|
||||
}
|
||||
|
||||
sprintf(spath, "%s%s%s.%d", SAVE_PATH, fname, OBJ_DIR, i);
|
||||
|
||||
switch(c->data.html.object[i].content->type) {
|
||||
case CONTENT_HTML:
|
||||
strcat(spath, "/htm");
|
||||
xosfile_save_stamped(spath, 0xfaf, c->data.html.object[i].content->data.html.source, c->data.html.object[i].content->data.html.source + c->data.html.object[i].content->data.html.length);
|
||||
break;
|
||||
case CONTENT_JPEG:
|
||||
strcat(spath, "/jpg");
|
||||
xosfile_save_stamped(spath, 0xc85, c->data.html.object[i].content->data.jpeg.data, (char*)c->data.html.object[i].content->data.jpeg.data + c->data.html.object[i].content->data.jpeg.length);
|
||||
break;
|
||||
case CONTENT_PNG:
|
||||
strcat(spath, "/png");
|
||||
xosfile_save_stamped(spath, 0xb60, c->data.html.object[i].content->data.png.data, c->data.html.object[i].content->data.png.data + c->data.html.object[i].content->data.png.length);
|
||||
break;
|
||||
case CONTENT_GIF:
|
||||
strcat(spath, "/gif");
|
||||
xosfile_save_stamped(spath, 0x695, c->data.html.object[i].content->data.gif.data, c->data.html.object[i].content->data.gif.data + c->data.html.object[i].content->data.gif.length);
|
||||
break;
|
||||
case CONTENT_SPRITE:
|
||||
strcat(spath, "/spr");
|
||||
xosfile_save_stamped(spath, 0xff9, c->data.html.object[i].content->data.sprite.data, (char*)c->data.html.object[i].content->data.sprite.data + c->data.html.object[i].content->data.sprite.length);
|
||||
break;
|
||||
case CONTENT_DRAW:
|
||||
strcat(spath, "/drw");
|
||||
xosfile_save_stamped(spath, 0xaff, c->data.html.object[i].content->data.draw.data, (char*)c->data.html.object[i].content->data.draw.data + c->data.html.object[i].content->data.draw.length);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
xosfile_save_stamped(spath,
|
||||
ro_content_filetype(obj),
|
||||
obj->source_data,
|
||||
obj->source_data + obj->source_size);
|
||||
}
|
||||
|
||||
/** \todo URL rewriting */
|
||||
@ -109,23 +85,28 @@ void save_complete(struct content *c) {
|
||||
/* save the html file out last of all (allows url rewriting first) */
|
||||
sprintf(spath, "%s%s", SAVE_PATH, fname);
|
||||
xosfile_save_stamped(spath, 0xfaf,
|
||||
c->data.html.source,
|
||||
c->data.html.source + c->data.html.length);
|
||||
c->source_data,
|
||||
c->source_data + c->source_size);
|
||||
|
||||
xfree(spath);
|
||||
xfree(fname);
|
||||
}
|
||||
|
||||
void save_imported_sheets(struct content *c, int parent, int level, char *p, char *fn) {
|
||||
void save_imported_sheets(struct content *c, int parent, int level, char *p, char *fn)
|
||||
{
|
||||
unsigned int j;
|
||||
|
||||
for (j=0; j!=c->data.css.import_count; j++) {
|
||||
if (c->data.css.import_content[j] == 0) {
|
||||
for (j = 0; j != c->data.css.import_count; j++) {
|
||||
struct content *css = c->data.css.import_content[j];
|
||||
|
||||
if (!css)
|
||||
continue;
|
||||
}
|
||||
save_imported_sheets(c->data.css.import_content[j], parent, level+1, p, fn);
|
||||
|
||||
save_imported_sheets(css, parent, level+1, p, fn);
|
||||
sprintf(p, "%s%s%s.%d%c%d/css", SAVE_PATH, fn, OBJ_DIR, parent, 'a'+level, j);
|
||||
xosfile_save_stamped(p, 0xf79, c->data.css.import_content[j]->data.css.data, c->data.css.import_content[j]->data.css.data + c->data.css.import_content[j]->data.css.length);
|
||||
xosfile_save_stamped(p, 0xf79,
|
||||
css->source_data,
|
||||
css->source_data + css->source_size);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -395,8 +395,8 @@ void add_graphic(struct content *content, struct box *box,
|
||||
void add_jpeg(struct content *content, struct box *box,
|
||||
unsigned long cbc, long x, long y) {
|
||||
|
||||
drawfile_object *dro = xcalloc(8+60+((content->data.jpeg.length+3)/4*4), sizeof(char));
|
||||
drawfile_jpeg *dj = xcalloc(60+((content->data.jpeg.length+3)/4*4), sizeof(char));
|
||||
drawfile_object *dro = xcalloc(8+60+((content->source_size+3)/4*4), sizeof(char));
|
||||
drawfile_jpeg *dj = xcalloc(60+((content->source_size+3)/4*4), sizeof(char));
|
||||
int flags;
|
||||
|
||||
dj->bbox.x0 = x+(box->padding[LEFT]*512);
|
||||
@ -404,8 +404,8 @@ void add_jpeg(struct content *content, struct box *box,
|
||||
dj->bbox.x1 = x+((box->padding[LEFT] + box->width)*512);
|
||||
dj->bbox.y1 = y-(box->padding[TOP]*512);
|
||||
|
||||
xjpeginfo_dimensions((jpeg_image const*)content->data.jpeg.data,
|
||||
(int)content->data.jpeg.length,
|
||||
xjpeginfo_dimensions((jpeg_image const*)content->source_data,
|
||||
(int)content->source_size,
|
||||
&flags, &dj->width, &dj->height,
|
||||
&dj->xdpi, &dj->ydpi, 0);
|
||||
dj->width *= 512;
|
||||
@ -420,8 +420,8 @@ void add_jpeg(struct content *content, struct box *box,
|
||||
dj->trfm.entries[1][1] = (dj->height*256) / ((dj->bbox.y1-dj->bbox.y0)/256);
|
||||
dj->trfm.entries[2][0] = dj->bbox.x0;
|
||||
dj->trfm.entries[2][1] = dj->bbox.y0;
|
||||
dj->len = content->data.jpeg.length;
|
||||
memcpy((char*)&dj->image, content->data.jpeg.data, (unsigned)dj->len);
|
||||
dj->len = content->source_size;
|
||||
memcpy((char*)&dj->image, content->source_data, (unsigned)dj->len);
|
||||
|
||||
dro->type = drawfile_TYPE_JPEG;
|
||||
dro->size = 8 + 60 + ((dj->len+3)/4*4);
|
||||
|
Loading…
Reference in New Issue
Block a user