/* * 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 2004 John M Bell * Copyright 2004 James Bursa */ /** \file * Save HTML document with dependencies (implementation). */ #include #include #include #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/box.h" #include "netsurf/riscos/gui.h" #include "netsurf/riscos/save_complete.h" #include "netsurf/utils/log.h" #include "netsurf/utils/url.h" #include "netsurf/utils/utils.h" #ifdef WITH_SAVE_COMPLETE /** \todo URL rewriting for @import rules * Objects used by embedded html pages * GUI */ 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 */ 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, 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); /** * 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; htmlParserCtxtPtr toSave; if (c->type != CONTENT_HTML) return; save_complete_list = 0; /* save stylesheets, ignoring the base sheet and