diff --git a/riscos/save_complete.c b/riscos/save_complete.c index 9507cafa9..ac2df75a4 100644 --- a/riscos/save_complete.c +++ b/riscos/save_complete.c @@ -3,20 +3,24 @@ * Licensed under the GNU General Public License, * http://www.opensource.org/licenses/gpl-license * Copyright 2004 John M Bell + * Copyright 2004 James Bursa + */ + +/** \file + * Save HTML document with dependencies (implementation). */ #include +#include #include -#include /* for __riscosify */ - +#include +#include #include "libxml/HTMLtree.h" - #include "oslib/osfile.h" #include "netsurf/utils/config.h" #include "netsurf/content/content.h" #include "netsurf/css/css.h" -#include "netsurf/render/form.h" -#include "netsurf/render/layout.h" +#include "netsurf/render/box.h" #include "netsurf/riscos/gui.h" #include "netsurf/riscos/save_complete.h" #include "netsurf/utils/log.h" @@ -30,84 +34,68 @@ * GUI */ -struct url_entry { +regex_t save_complete_import_re; + +/** An entry in save_complete_list. */ +struct save_complete_entry { char *url; /**< Fully qualified URL, as per url_join output */ - char *par; /**< Base URL of parent object */ - int ptr; /**< Pointer to object's location in memory */ - struct url_entry *next; /**< Next entry in list */ + int ptr; /**< Pointer to object's location in memory */ + struct save_complete_entry *next; /**< Next entry in list */ }; +/** List of urls seen and saved so far. */ +static struct save_complete_entry *save_complete_list; -static void save_imported_sheets(struct content *c, char *p, char* fn, - struct url_entry *imports); -/*static char *leafname(const char *url); -static int rewrite_stylesheet_urls(const char* sheet, int isize, char* buffer, - int osize, struct url_entry *head);*/ -static int rewrite_document_urls(xmlDoc *doc, struct url_entry *head, char *fname); -static int rewrite_urls(xmlNode *n, struct url_entry *head, char *fname); -static void rewrite_url(xmlNode *n, struct url_entry *head, char *fname, - const char *attr); -/* this is temporary. */ -const char * const SAVE_PATH = ".savetest."; -const char * const OBJ_DIR = "_files"; +static void save_imported_sheets(struct content *c, const char *path); +static char * rewrite_stylesheet_urls(const char *source, unsigned int size, + int *osize, const char *base); +static int rewrite_document_urls(xmlDoc *doc, const char *base); +static int rewrite_urls(xmlNode *n, const char *base); +static void rewrite_url(xmlNode *n, const char *attr, const char *base); +static void save_complete_add_url(const char *url, int id); +static int save_complete_find_url(const char *url); -/** \todo this will probably want to take a filename */ -void save_complete(struct content *c) { - char *fname = 0, *spath; +/** + * Save an HTML page with all dependencies. + * + * \param c CONTENT_HTML to save + * \param path directory to save to (must exist) + */ + +void save_complete(struct content *c, const char *path) +{ + char spath[256]; unsigned int i; - struct url_entry urls = {0, 0, 0, 0}; /* sentinel at head */ - struct url_entry *object; htmlParserCtxtPtr toSave; if (c->type != CONTENT_HTML) return; - fname = "test"; /*get_filename(c->data.html.base_url);*/ - - spath = xcalloc(strlen(SAVE_PATH)+strlen(OBJ_DIR)+strlen(fname)+50, - sizeof(char)); - - sprintf(spath, "%s%s%s", SAVE_PATH, fname, OBJ_DIR); - xosfile_create_dir(spath, 77); + save_complete_list = 0; /* save stylesheets, ignoring the base sheet and