summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--about/awards.html (renamed from about/awards.en)0
-rw-r--r--about/index.html (renamed from about/index.en)2
-rw-r--r--about/licence.html (renamed from about/licence.en)0
-rw-r--r--about/news.html (renamed from about/news.en)4
-rw-r--r--about/screenshots/index.html (renamed from about/screenshots/index.en)0
-rw-r--r--about/team.html (renamed from about/team.en)0
-rw-r--r--about/thanks.html (renamed from about/thanks.en)0
-rwxr-xr-xcgissi.fcgi638
-rw-r--r--contact/index.html (renamed from contact/index.en)0
-rw-r--r--developers/contribute.html (renamed from developers/contribute.en)0
-rw-r--r--developers/gsoc/2008ideas.html (renamed from developers/gsoc/2008ideas.en)0
-rw-r--r--developers/gsoc/2009ideas.html (renamed from developers/gsoc/2009ideas.en)0
-rw-r--r--developers/gsoc/2014ideas.html (renamed from developers/gsoc/2014ideas.en)0
-rw-r--r--developers/gsoc/index.html (renamed from developers/gsoc/index.en)0
-rw-r--r--developers/index.html (renamed from developers/index.en)0
-rw-r--r--developers/publicity.html (renamed from developers/publicity.en)0
-rw-r--r--documentation/develop.html (renamed from documentation/develop.en)0
-rw-r--r--documentation/guide.html (renamed from documentation/guide.en)0
-rw-r--r--documentation/index.html (renamed from documentation/index.en)0
-rw-r--r--documentation/info.html (renamed from documentation/info.en)0
-rw-r--r--documentation/nstheme.html (renamed from documentation/nstheme.en)0
-rw-r--r--documentation/progress.html (renamed from documentation/progress.en)0
-rw-r--r--documentation/resinstall.html (renamed from documentation/resinstall.en)0
-rw-r--r--documentation/roinfo.html (renamed from documentation/roinfo.en)0
-rw-r--r--documentation/translations.html (renamed from documentation/translations.en)0
-rw-r--r--downloads/amiga/index.html (renamed from downloads/amiga/index.en)11
-rw-r--r--downloads/atari/index.html (renamed from downloads/atari/index.en)0
-rw-r--r--downloads/beos/index.html (renamed from downloads/beos/index.en)0
-rw-r--r--downloads/extras.html (renamed from downloads/extras.en)3
-rw-r--r--downloads/gtk/index.html (renamed from downloads/gtk/index.en)0
-rw-r--r--downloads/index.html (renamed from downloads/index.en)0
-rw-r--r--downloads/macosx/index.html (renamed from downloads/macosx/index.en)0
-rw-r--r--downloads/riscos/index.html (renamed from downloads/riscos/index.en)11
-rw-r--r--downloads/source/index.html (renamed from downloads/source/index.en)1
-rw-r--r--downloads/themes/index.html (renamed from downloads/themes/index.en)0
-rw-r--r--errors/404.html (renamed from errors/404.en)0
-rw-r--r--index.html (renamed from index.en)14
-rw-r--r--projects/hubbub/index.html (renamed from projects/hubbub/index.en)0
-rw-r--r--projects/iconv/index.html (renamed from projects/iconv/index.en)0
-rw-r--r--projects/index.html (renamed from projects/index.en)0
-rw-r--r--projects/libcss/index.html (renamed from projects/libcss/index.en)9
-rw-r--r--projects/libdom/index.html (renamed from projects/libdom/index.en)0
-rw-r--r--projects/libnsbmp/index.html (renamed from projects/libnsbmp/index.en)0
-rw-r--r--projects/libnsfb/index.html (renamed from projects/libnsfb/index.en)0
-rw-r--r--projects/libnsgif/index.html (renamed from projects/libnsgif/index.en)0
-rw-r--r--projects/libparserutils/index.html (renamed from projects/libparserutils/index.en)0
-rw-r--r--projects/libpencil/index.html (renamed from projects/libpencil/index.en)0
-rw-r--r--projects/librosprite/index.html (renamed from projects/librosprite/index.en)0
-rw-r--r--projects/libsvgtiny/index.html (renamed from projects/libsvgtiny/index.en)0
-rw-r--r--projects/libwapcaplet/index.html (renamed from projects/libwapcaplet/index.en)0
-rw-r--r--projects/rufl/index.html (renamed from projects/rufl/index.en)0
-rw-r--r--projects/tinct/index.html (renamed from projects/tinct/index.en)0
-rw-r--r--projects/ttf2f/index.html (renamed from projects/ttf2f/index.en)0
-rw-r--r--webmasters/index.html (renamed from webmasters/index.en)0
-rw-r--r--welcome/index.html (renamed from welcome/index.en)0
55 files changed, 42 insertions, 651 deletions
diff --git a/about/awards.en b/about/awards.html
index 8b8c9be..8b8c9be 100644
--- a/about/awards.en
+++ b/about/awards.html
diff --git a/about/index.en b/about/index.html
index 6c772fe..071d216 100644
--- a/about/index.en
+++ b/about/index.html
@@ -133,6 +133,8 @@
<tr><th>Sep 2013</th><td>Redesigned treeviews</td></tr>
<tr><th>Dec 2013</th><td>Big LibCSS selection speedup</td></tr>
<tr><th>Apr 2014</th><td>NetSurf 3.1 released</td></tr>
+<tr><th>May 2014</th><td>Added disc cache feature</td></tr>
+<tr><th>Aug 2014</th><td>NetSurf 3.2 released</td></tr>
</table>
<div class="frontscreen"><p class="frontscreen"><a href="screenshots/images/riscos-wikipedia.png"><img src="screenshots/images/riscosthumb-wikipedia.png" alt="GTK NetSurf screenshot."></a> <span>A more recent NetSurf showing <em>Wikipedia</em>.</span></p></div>
diff --git a/about/licence.en b/about/licence.html
index 1150c4a..1150c4a 100644
--- a/about/licence.en
+++ b/about/licence.html
diff --git a/about/news.en b/about/news.html
index 1cd7e07..6e5c526 100644
--- a/about/news.en
+++ b/about/news.html
@@ -58,6 +58,10 @@
<h1>News</h1>
<dl class="news">
+<dt><a href="/downloads/">NetSurf 3.2 released</a> <span>30 Aug 2014</span></dt>
+<dd>NetSurf 3.2 is primarily a bug-fix release. In addition to fixes, a disc cache feature has been added, and a little work has been done to improve CSS3 support. Several of the front ends have received quite a bit of attention, with new features and improvements; notably the GTK, AmigaOS and Framebuffer front ends. We recommend all users upgrade.</dd>
+<dt><a href="https://developers.google.com/open-source/soc/?csw=1">NetSurf in Google Summer of Code</a> <span>01 May 2014</span></dt>
+<dd>NetSurf is participating as a mentoring organisation in Google Summer of code again this year. We have a student called Rupinder Singh Khokhar who will be working on updating our core web technology libraries, LibDOM and LibHubbub, to bring them into line with the current versions of the specifications.</dd>
<dt><a href="/downloads/">NetSurf 3.1 released</a> <span>26 Apr 2014</span></dt>
<dd>NetSurf 3.1 contains many improvements over the previous release. The highlights include much faster CSS selection performance, faster start up time, new look and feel to the treeviews (hotlist/bookmarks, global history and cookie manager), improved options handling, undo/redo support in textareas, and general improvement of forms. Also included are many other additions, optimisations and bug fixes. We recommend that all users upgrade.</dd>
<dt><a href="/about/awards">NetSurf wins Award</a> <span>23 Jan 2014</span></dt>
diff --git a/about/screenshots/index.en b/about/screenshots/index.html
index ade1b47..ade1b47 100644
--- a/about/screenshots/index.en
+++ b/about/screenshots/index.html
diff --git a/about/team.en b/about/team.html
index 7685fdb..7685fdb 100644
--- a/about/team.en
+++ b/about/team.html
diff --git a/about/thanks.en b/about/thanks.html
index d01f7c7..d01f7c7 100644
--- a/about/thanks.en
+++ b/about/thanks.html
diff --git a/cgissi.fcgi b/cgissi.fcgi
deleted file mode 100755
index 09e3c5e..0000000
--- a/cgissi.fcgi
+++ /dev/null
@@ -1,638 +0,0 @@
-#!/usr/bin/perl
-
-# \file
-# cgissi.fcgi -- A FastCGI script to emulate Server-Side Includes
-#
-# At the time of writing, it supports #include, #fsize and #flastmod
-#
-
-use warnings;
-use strict;
-
-use Digest::MD5 qw(md5_base64);
-use File::Spec;
-use FCGI;
-use POSIX qw(strftime);
-
-# Content cache to avoid regenerating pages unless it's absolutely necessary
-#
-# This hash maps between the full local path to the URL data
-# and a hash containing cache data. For example:
-#
-# { "/foo/bar/baz" =>
-# { last_modified => 0123456789,
-# data_digest => "base64(MD5($data))"
-# data_last_modified => 0123456789,
-# data => "generated page content",
-# dependencies =>
-# { "/foo/bar/bat" =>
-# { last_modified => 0123456789,
-# commands =>
-# [
-# { command => "include" | "fsize" | "flastmod",
-# start_offset = 123,
-# end_offset = 456
-# },
-# { command => "include" | "fsize" | "flastmod",
-# start_offset = 678,
-# end_offset = 901
-# }
-# ]
-# }
-# }
-# }
-# }
-#
-my %cache;
-
-# Request object
-my $request = FCGI::Request();
-
-# Loop until the server tells us to quit
-while ($request->Accept() >= 0) {
- # Get document root for this request
- my $docroot = $ENV{DOCUMENT_ROOT};
-
- # Get path of item for this request
- # Yes, this is hacky. It appears that REDIRECT_PATH contains
- # the destination document resulting from content negotiation.
- # As this is an absolute path, we strip the document root from it.
- my ($path) = ($ENV{REDIRECT_PATH} =~ m/$docroot(.*)/);
-
- # Find item in cache
- my $cachedata = $cache{$docroot . $path};
-
- # Determine if we need to (re)generate page
- validate_cache_entry($docroot, $path, $cachedata);
-
- # Refetch cache entry
- # (as it may have been created by validate_cache_entry)
- $cachedata = $cache{$docroot . $path};
-
- # TODO It would be nice to send 304 responses where appropriate
- # and also to pay attention to conditional requests namely
- # If-(None-)Match and If-(Un)Modified-Since
-
- # Cache-related headers
- print "ETag: " . $$cachedata{data_digest} . "\r\n";
- # Don't use %Z here, as perl's strftime appears to assume that the
- # time is always in the local timezone
- print "Last-Modified: " . strftime("%a, %d %b %Y %H:%M:%S GMT",
- gmtime($$cachedata{data_last_modified})) . "\r\n";
-
- # Send Content-Type header
- print "Content-Type: text/html; charset=ISO-8859-1\r\n";
- print "\r\n";
-
- # And the page data
- print $$cachedata{data};
-}
-
-################################################################################
-
-# Run an include command
-#
-# \param filepath The full path of the file to include
-# \param data Data buffer to append file data to (reference)
-#
-sub do_include
-{
- my ($filepath, $data) = @_;
-
- if (-e $filepath) {
- # Unlike Zeus, we don't recursively apply SSI.
- open FILE, $filepath;
- {
- local $/ = undef;
- $$data .= <FILE>;
- }
- close FILE;
- }
-}
-
-# Run a fsize command
-#
-# \param filepath The full path of the file to measure the size of
-# \param data Data buffer to append size to (reference)
-#
-sub do_fsize
-{
- my ($filepath, $data) = @_;
- my @units = ( "B", "kB", "MB", "GB", "TB" ); # should be sufficient ;)
-
- if (-e $filepath) {
- my $size = -s $filepath;
- my $index = 0;
-
- while ($size > 1000) {
- $size /= 1024;
- $index++;
- }
-
- $$data .= sprintf("%.1f %s", $size, $units[$index]);
- }
-}
-
-# Run a flastmod command
-#
-# \param filepath The full path of the file to get the modification time of
-# \param data Data buffer to append modification time to (reference)
-#
-sub do_flastmod
-{
- my ($filepath, $data) = @_;
-
- if (-e $filepath) {
- my $mod_string =
- strftime("%d %b %Y %R", gmtime((stat($filepath))[9]));
-
- $$data .= $mod_string . " UTC";
- }
-}
-
-# Process an include command
-#
-# \param command The command string to process
-# \param data Data buffer to append output to (reference)
-# \param docroot The document root
-# \param path Path of the current document, relative to ::docroot
-# \return The full path of the included file
-#
-sub process_include_command
-{
- my ($command, $data, $docroot, $path) = @_;
- my $filepath;
-
- if ($command =~ /file=/) {
- my ($relpath) = ($command =~ m/file="(.*)"/);
- my ($vol, $dirs, $file) =
- File::Spec->splitpath($docroot . $path);
- $filepath = File::Spec->rel2abs($relpath,
- File::Spec->catpath($vol, $dirs, ""));
- } elsif ($command =~ /virtual=/) {
- my ($vpath) = ($command =~ m/virtual="(.*)"/);
- if ($vpath =~ m#^/.*#) {
- $filepath = $docroot . $vpath;
- } else {
- my ($vol, $dirs, $file) =
- File::Spec->splitpath($docroot . $path);
- $filepath = File::Spec->rel2abs($vpath,
- File::Spec->catpath($vol, $dirs, ""));
- }
- }
-
- do_include($filepath, $data);
-
- return $filepath;
-}
-
-# Process an fsize command
-#
-# \param command The command string to process
-# \param data Data buffer to append output to (reference)
-# \param docroot The document root
-# \param path Path of the current document, relative to ::docroot
-# \return The full path of the included file
-#
-sub process_fsize_command
-{
- my ($command, $data, $docroot, $path) = @_;
- my $filepath;
-
- if ($command =~ /file=/) {
- my ($relpath) = ($command =~ m/file="(.*)"/);
- my ($vol, $dirs, $file) =
- File::Spec->splitpath($docroot . $path);
- $filepath = File::Spec->rel2abs($relpath,
- File::Spec->catpath($vol, $dirs, ""));
- } elsif ($command =~ /virtual=/) {
- my ($vpath) = ($command =~ m/virtual="(.*)"/);
- if ($vpath =~ m#^/.*#) {
- $filepath = $docroot . $vpath;
- } else {
- my ($vol, $dirs, $file) =
- File::Spec->splitpath($docroot . $path);
- $filepath = File::Spec->rel2abs($vpath,
- File::Spec->catpath($vol, $dirs, ""));
- }
- }
-
- do_fsize($filepath, $data);
-
- return $filepath;
-}
-
-# Process an flastmod command
-#
-# \param command The command string to process
-# \param data Data buffer to append output to (reference)
-# \param docroot The document root
-# \param path Path of the current document, relative to ::docroot
-# \return The full path of the included file
-#
-sub process_flastmod_command
-{
- my ($command, $data, $docroot, $path) = @_;
- my $filepath;
-
- if ($command =~ /file=/) {
- my ($relpath) = ($command =~ m/file="(.*)"/);
- my ($vol, $dirs, $file) =
- File::Spec->splitpath($docroot . $path);
- $filepath = File::Spec->rel2abs($relpath,
- File::Spec->catpath($vol, $dirs, ""));
- } elsif ($command =~ /virtual=/) {
- my ($vpath) = ($command =~ m/virtual="(.*)"/);
- if ($vpath =~ m#^/.*#) {
- $filepath = $docroot . $vpath;
- } else {
- my ($vol, $dirs, $file) =
- File::Spec->splitpath($docroot . $path);
- $filepath = File::Spec->rel2abs($vpath,
- File::Spec->catpath($vol, $dirs, ""));
- }
- }
-
- do_flastmod($filepath, $data);
-
- return $filepath;
-}
-
-# Complete parsing of and process a command string
-#
-# \param template Open file handle of template input
-# \param char Current input character
-# \param command The command string read so far
-# \param data Buffer to append data into (reference)
-# \param docroot The document root
-# \param path Path of the current document relative to ::docroot
-# \param start_offset Offset into template input of start of SSI command
-# \param cacheentry The cache entry for the current document
-#
-sub process_command
-{
- my ($template, $char, $command, $data,
- $docroot, $path, $start_offset, $cacheentry) = @_;
- my $keyword = lc($command);
- my $dash_count = 0;
- my $filepath;
-
- # See state machine documentation in generate_page_full for details of
- # how this function works.
-
- # Reject command if it's one we know nothing about
- if ($keyword ne "include" && $keyword ne "fsize" &&
- $keyword ne "flastmod") {
- # ProcessCmd -> Initial transition occurs in generate_page_full
- $$data .= "<!--#" . $command . $char;
- return;
- }
-
- # Process the current input character
- if ($char eq '-') {
- # ProcessCmd -> ProcCmdDash
- $dash_count++;
- } else {
- # ProcessCmd -> ProcessCmd
- $command .= $char;
- }
-
- # Read rest of command string, then process command
- while ($char = getc($template)) {
- if ($char eq '-') {
- # ProcessCmd -> ProcCmdDash / ProcCmdDash -> ProcCmdCT
- $dash_count++;
- } elsif ($dash_count == 2 && $char eq '>') {
- # Run command (ProcCmdCT -> Initial transition occurs
- # in generate_page_full)
- if ($keyword eq "include") {
- $filepath = process_include_command($command,
- $data, $docroot, $path);
- } elsif ($keyword eq "fsize") {
- $filepath = process_fsize_command($command,
- $data, $docroot, $path);
- } elsif ($keyword eq "flastmod") {
- $filepath = process_flastmod_command($command,
- $data, $docroot, $path);
- }
-
- $$cacheentry{dependencies}{$filepath}{last_modified} =
- (stat($filepath))[9];
- push(@{$$cacheentry{dependencies}{$filepath}{commands}},
- { command => $keyword,
- start_offset => $start_offset,
- end_offset => tell($template)
- });
- return;
- } else {
- # ProcessCmd / ProcCmdDash / ProcCmdCT -> ProcessCmd
- while ($dash_count > 0) {
- $command .= "-";
- $dash_count--;
- }
- $command .= $char;
- }
- }
-}
-
-# Fully generate a page.
-# This involves parsing the page source looking for SSI commands.
-#
-# \param docroot The document root
-# \param path Path of the current document relative to ::docroot
-#
-sub generate_page_full
-{
- my ($docroot, $path) = @_;
- my $data = "";
- my $in_tag = 0;
- my $had_pling = 0;
- my $dash_count = 0;
- my $in_comment = 0;
- my $had_hash = 0;
- my $command = "";
- my $start_offset = 0;
-
- if (! -e $docroot . $path) {
- # File doesn't exist
- $cache{$docroot . $path}{data} = $data;
- $cache{$docroot . $path}{data_digest} =
- '"' . md5_base64($data) . '"';
- $cache{$docroot . $path}{data_last_modified} = time;
- return;
- }
-
- open my $template, $docroot . $path;
-
- # Save document modification time into cache
- my $lastmod = (stat($docroot . $path))[9];
- $cache{$docroot . $path} = { last_modified => $lastmod };
- my $cacheentry = $cache{$docroot . $path};
-
- # Parse document template, looking for SSI comments
- #
- # This is basically a state machine, thus:
- #
- # State: Input: Next state: Output:
- #
- # Initial [^<] Initial Input character
- # Initial '<' InTag None
- #
- # InTag [^!] Initial '<' followed by input
- # InTag ! InTagPling None
- #
- # InTagPling [^-] Initial '<!' followed by input
- # InTagPling '-' InTagPling1 None
- #
- # InTagPling1 [^-] Initial '<!-' followed by input
- # InTagPling1 '-' InComment None
- #
- # InComment [^#] Initial '<!--' followed by input
- # InComment '#' InCommentHash None
- #
- # InCommentHash [^a-zA-Z] ProcessCmd None
- # InCommentHash [a-zA-Z] InCommentHash None [1]
- #
- # ProcessCmd n/a Initial '<!--#' followed by the
- # command read in
- # InCommentHash followed
- # by input [2]
- # ProcessCmd [^-] ProcessCmd None
- # ProcessCmd '-' ProcCmdDash None
- #
- # ProcCmdDash [^-] ProcessCmd None [3]
- # ProcCmdDash '-' ProcCmdCT None
- #
- # ProcCmdCT [^>] ProcessCmd None [4]
- # ProcCmdCT '>' Initial Command specific [5]
- #
- # Notes:
- #
- # 1. This transition causes the input to be buffered as a command string
- # 2. This transition only happens if the command read so far is not
- # recognised
- # 3. A dash is appended to the command string, however
- # 4. A '>' is appended to the command string, however
- # 5. The output is determined by running the command.
- #
- while (defined(my $char = getc($template))) {
- if (!$in_comment && !$in_tag && $char eq '<') {
- # Initial -> InTag
- $start_offset = tell($template);
- $in_tag = 1;
- } elsif ($in_tag) {
- if (!$had_pling) {
- if ($char ne '!') {
- # InTag -> Initial
- $data .= "<" . $char;
- $in_tag = 0;
- } elsif ($char eq '!') {
- # InTag -> InTagPling
- $had_pling = 1;
- }
- } else {
- if ($char ne '-') {
- # InTagPling(1) -> Initial
- $data .= "<!";
- while ($dash_count > 0) {
- $data .= "-";
- $dash_count--;
- }
- $data .= $char;
-
- $had_pling = 0;
- $in_tag = 0;
- } else {
- # InTagPling -> InTagPling1
- $dash_count++;
-
- if ($dash_count == 2) {
- # InTagPling1 -> InComment
- $dash_count = 0;
- $in_comment = 1;
- $had_pling = 0;
- $in_tag = 0;
- }
- }
- }
- } elsif ($in_comment) {
- if (!$had_hash) {
- if ($char ne '#') {
- # InComment -> Initial
- $data .= "<!--" . $char;
- $in_comment = 0;
- } else {
- # InComment -> InCommentHash
- $command = "";
- $had_hash = 1;
- }
- } else {
- my $c = lc($char);
-
- if ('a' le $c && $c le 'z') {
- # InCommentHash -> InCommentHash
- $command .= $char;
- } else {
- # InCommentHash -> ProcessCmd
- process_command($template, $char,
- $command, \$data, $docroot,
- $path, $start_offset,
- $cacheentry);
-
- # ProcessCmd/ProcCmdCT -> Initial
- $had_hash = 0;
- $in_comment = 0;
- }
- }
- } else {
- # Initial -> Initial
- $data .= $char;
- }
- }
-
- close $template;
-
- # Save generated page data in cache
- $$cacheentry{data} = $data;
- $$cacheentry{data_digest} = '"' . md5_base64($data) . '"';
- $$cacheentry{data_last_modified} = time;
-}
-
-# Partially generate a page.
-# This involves using cached information to inject SSI data into a page
-#
-# \param docroot The document root
-# \param path The path of the current document, relative to ::docroot
-sub generate_page_partial
-{
- my ($docroot, $path) = @_;
-
- if (! -e $docroot . $path) {
- # File doesn't exist
- $cache{$docroot . $path}{data} = "";
- $cache{$docroot . $path}{data_digest} =
- '"' . md5_base64("") . '"';
- $cache{$docroot . $path}{data_last_modified} = time;
- return;
- }
-
- # Get dependency hash
- my $deps = $cache{$docroot . $path}{dependencies};
-
- # Build command map for this page
- my %cmds;
- foreach my $dep (keys %{$deps}) {
- my $index = 0;
- foreach my $cmd (@{$$deps{$dep}{commands}}) {
- # The key here is the index into the commands array
- # prepended to the dependency URL. This ensures that
- # we have unique map entries for each command.
- $cmds{$index . $dep} = $cmd;
- $index++;
- }
- }
-
- # Sort command map by start_offset
- my @sorted =
- sort { # Unpack dependency URLs and command array indices
- my ($a_index, $a_dep) = ($a =~ m/([0-9]+)(.*)/);
- my ($b_index, $b_dep) = ($b =~ m/([0-9]+)(.*)/);
- # Now compare the start offsets
- $$deps{$a_dep}{commands}[$a_index]{start_offset} <=>
- $$deps{$b_dep}{commands}[$b_index]{start_offset}
- }
- keys %cmds;
-
- my $data = "";
- my $temp;
- my $curpos = 0;
- my $template_length = 0;
-
- # Open requested document
- open TEMPLATE, $docroot . $path;
-
- # Find its length
- seek(TEMPLATE, 0, 2);
- $template_length = tell(TEMPLATE);
- seek(TEMPLATE, 0, 0);
-
- # Iterate through commands, loading intervening chunks of template
- foreach my $cmd (@sorted) {
- # Unpack dependency URL and command array index
- my ($index, $dep) = ($cmd =~ m/([0-9]+)(.*)/);
- my $vars = $$deps{$dep};
- my $length =
- $$vars{commands}[$index]{start_offset} - $curpos - 1;
-
- # Update last_modified time of this dependency (at least one
- # must have changed for a partial regeneration to occur)
- $$vars{last_modified} = (stat($dep))[9];
-
- # Read template input from end of previous dependency
- # to the start of this one
- read(TEMPLATE, $temp, $length);
-
- # Append it to our data buffer
- $data .= $temp;
-
- # Run this SSI command
- if ($$vars{commands}[$index]{command} eq "include") {
- do_include($dep, \$data);
- } elsif ($$vars{commands}[$index]{command} eq "fsize") {
- do_fsize($dep, \$data);
- } elsif ($$vars{commands}[$index]{command} eq "flastmod") {
- do_flastmod($dep, \$data);
- }
-
- # Skip over SSI command in template input
- $curpos = $$vars{commands}[$index]{end_offset};
-
- seek(TEMPLATE, $curpos, 0);
- }
-
- # Read any remaining template input
- read(TEMPLATE, $temp, $template_length - $curpos);
-
- $data .= $temp;
-
- close TEMPLATE;
-
- # Update document cache
- $cache{$docroot . $path}{data} = $data;
- $cache{$docroot . $path}{data_digest} = '"' . md5_base64($data) . '"';
- $cache{$docroot . $path}{data_last_modified} = time;
-}
-
-# Validate a cache entry
-#
-# \param docroot The document root
-# \param path The path of the current document, relative to ::docroot
-# \param entry Current cache entry or undef if none
-#
-sub validate_cache_entry
-{
- my ($docroot, $path, $entry) = @_;
-
- if (!$entry) {
- # No entry -- generate one
- generate_page_full($docroot, $path);
- return;
- }
-
- if ((stat($docroot . $path))[9] > $$entry{last_modified}) {
- # Page modified -- fully regenerate page
- generate_page_full($docroot, $path);
- return;
- }
-
- while (my ($dep, $data) = each(%{$entry->{dependencies}})) {
- if ((stat($dep))[9] > $$data{last_modified}) {
- # Dependency changed -- partially regenerate page
- generate_page_partial($docroot, $path);
- return;
- }
- }
-
- # Otherwise, the cached data is valid
-}
-
diff --git a/contact/index.en b/contact/index.html
index 660c239..660c239 100644
--- a/contact/index.en
+++ b/contact/index.html
diff --git a/developers/contribute.en b/developers/contribute.html
index 7d7811e..7d7811e 100644
--- a/developers/contribute.en
+++ b/developers/contribute.html
diff --git a/developers/gsoc/2008ideas.en b/developers/gsoc/2008ideas.html
index b376da6..b376da6 100644
--- a/developers/gsoc/2008ideas.en
+++ b/developers/gsoc/2008ideas.html
diff --git a/developers/gsoc/2009ideas.en b/developers/gsoc/2009ideas.html
index af111a9..af111a9 100644
--- a/developers/gsoc/2009ideas.en
+++ b/developers/gsoc/2009ideas.html
diff --git a/developers/gsoc/2014ideas.en b/developers/gsoc/2014ideas.html
index 6c00640..6c00640 100644
--- a/developers/gsoc/2014ideas.en
+++ b/developers/gsoc/2014ideas.html
diff --git a/developers/gsoc/index.en b/developers/gsoc/index.html
index 76725aa..76725aa 100644
--- a/developers/gsoc/index.en
+++ b/developers/gsoc/index.html
diff --git a/developers/index.en b/developers/index.html
index 6b6f0f5..6b6f0f5 100644
--- a/developers/index.en
+++ b/developers/index.html
diff --git a/developers/publicity.en b/developers/publicity.html
index 3065824..3065824 100644
--- a/developers/publicity.en
+++ b/developers/publicity.html
diff --git a/documentation/develop.en b/documentation/develop.html
index c888de5..c888de5 100644
--- a/documentation/develop.en
+++ b/documentation/develop.html
diff --git a/documentation/guide.en b/documentation/guide.html
index 59dc3b1..59dc3b1 100644
--- a/documentation/guide.en
+++ b/documentation/guide.html
diff --git a/documentation/index.en b/documentation/index.html
index 36cdb9d..36cdb9d 100644
--- a/documentation/index.en
+++ b/documentation/index.html
diff --git a/documentation/info.en b/documentation/info.html
index f433061..f433061 100644
--- a/documentation/info.en
+++ b/documentation/info.html
diff --git a/documentation/nstheme.en b/documentation/nstheme.html
index 3c4e508..3c4e508 100644
--- a/documentation/nstheme.en
+++ b/documentation/nstheme.html
diff --git a/documentation/progress.en b/documentation/progress.html
index ffc57d0..ffc57d0 100644
--- a/documentation/progress.en
+++ b/documentation/progress.html
diff --git a/documentation/resinstall.en b/documentation/resinstall.html
index d272126..d272126 100644
--- a/documentation/resinstall.en
+++ b/documentation/resinstall.html
diff --git a/documentation/roinfo.en b/documentation/roinfo.html
index 756110e..756110e 100644
--- a/documentation/roinfo.en
+++ b/documentation/roinfo.html
diff --git a/documentation/translations.en b/documentation/translations.html
index 2d26f33..2d26f33 100644
--- a/documentation/translations.en
+++ b/documentation/translations.html
diff --git a/downloads/amiga/index.en b/downloads/amiga/index.html
index 9b2aa72..7320423 100644
--- a/downloads/amiga/index.en
+++ b/downloads/amiga/index.html
@@ -63,7 +63,7 @@
<div class="downloadlatestouter">
<div class="downloadlatest">
<div class="downloadlatestbox">
-<p class="downloadmain downloadfirst"><a href="http://download.netsurf-browser.org/netsurf/releases/pre-built/amiga/netsurf-3.1.lha"><span>NetSurf 3.1 for AmigaOS</span> <span>(5.9MB)</span> <span class="downloaddate">26 Apr 2014</span></a></p>
+<p class="downloadmain downloadfirst"><a href="http://download.netsurf-browser.org/netsurf/releases/pre-built/amiga/netsurf-3.2.lha"><span>NetSurf 3.2 for AmigaOS</span> <span>(5.9MB)</span> <span class="downloaddate">30 Aug 2014</span></a></p>
<!--<p class="downloadinstructions"><a href="/documentation/roinfo#GettingStartedInstallation">Installation instructions</a></p>-->
<p class="preul">Requires:</p>
<ul>
@@ -72,7 +72,7 @@
</div>
<div class="downloadlatestbox downloadlast">
-<p class="downloadmain"><a href="http://download.netsurf-browser.org/netsurf/releases/source/netsurf-3.1-src.tar.gz"><span>NetSurf 3.1 source code</span> <span>(2.9MB)</span> <span class="downloaddate">26 Apr 2014</span></a></p>
+<p class="downloadmain"><a href="http://download.netsurf-browser.org/netsurf/releases/source/netsurf-3.2-src.tar.gz"><span>NetSurf 3.2 source code</span> <span>(2.9MB)</span> <span class="downloaddate">30 Aug 2014</span></a></p>
<p class="downloadinstructions"><a href="/downloads/source/#BuildInstructions">Build instructions</a></p>
<p class="preul">Build NetSurf for:</p>
<ul>
@@ -90,6 +90,13 @@
<h2>Previous releases</h2>
<dl>
+<dt>NetSurf 3.1</dt>
+<dd>
+<ul>
+<li><a href="http://download.netsurf-browser.org/netsurf/releases/pre-built/amiga/netsurf-3.1.lha">NetSurf 3.1 browser for AmigaOS 4</a> (26 Apr 2014)</li>
+<li><a href="http://download.netsurf-browser.org/netsurf/releases/source/netsurf-3.1-src.tar.gz">NetSurf 3.1 source code</a> (26 Apr 2014)</li>
+</ul>
+</dd>
<dt>NetSurf 2.9</dt>
<dd>
<ul>
diff --git a/downloads/atari/index.en b/downloads/atari/index.html
index 24834e8..24834e8 100644
--- a/downloads/atari/index.en
+++ b/downloads/atari/index.html
diff --git a/downloads/beos/index.en b/downloads/beos/index.html
index a52d419..a52d419 100644
--- a/downloads/beos/index.en
+++ b/downloads/beos/index.html
diff --git a/downloads/extras.en b/downloads/extras.html
index d5af4df..dc72ad6 100644
--- a/downloads/extras.en
+++ b/downloads/extras.html
@@ -55,9 +55,8 @@
<p>This page contains additional downloads available for NetSurf users.</p>
-<!--#config timefmt="%d %b %Y %R %Z" sizefmt="abbrev"-->
<ul class="developmentbuilds">
-<li><a href="http://download.netsurf-browser.org/other/nstheme/nstheme.zip">NSTheme 0.02 for RISC&nbsp;OS</a> <span><!--#fsize file="releases/nstheme.zip"--></span> <span><!--#flastmod file="http://download.netsurf-browser.org/other/nstheme/nstheme.zip"--></span></li>
+<li><a href="http://download.netsurf-browser.org/other/nstheme/nstheme.zip">NSTheme 0.02 for RISC&nbsp;OS</a> <span>5.7M</span> <span>2012</span></li>
</ul>
<p>NSTheme is a theme packager for the RISC OS version of NetSurf. Themes can be installed from the <a href="themes/">themes page</a>.</p>
diff --git a/downloads/gtk/index.en b/downloads/gtk/index.html
index d864f92..d864f92 100644
--- a/downloads/gtk/index.en
+++ b/downloads/gtk/index.html
diff --git a/downloads/index.en b/downloads/index.html
index 369e8cc..369e8cc 100644
--- a/downloads/index.en
+++ b/downloads/index.html
diff --git a/downloads/macosx/index.en b/downloads/macosx/index.html
index 7b714bc..7b714bc 100644
--- a/downloads/macosx/index.en
+++ b/downloads/macosx/index.html
diff --git a/downloads/riscos/index.en b/downloads/riscos/index.html
index 3dd548b..d4e528a 100644
--- a/downloads/riscos/index.en
+++ b/downloads/riscos/index.html
@@ -63,7 +63,7 @@
<div class="downloadlatestouter">
<div class="downloadlatest">
<div class="downloadlatestbox">
-<p class="downloadmain downloadfirst"><a href="http://download.netsurf-browser.org/netsurf/releases/pre-built/riscos/netsurf-3.1.zip"><span>NetSurf 3.1 for RISC&nbsp;OS</span> <span>(3.3MB)</span> <span class="downloaddate">26 Apr 2014</span></a></p>
+<p class="downloadmain downloadfirst"><a href="http://download.netsurf-browser.org/netsurf/releases/pre-built/riscos/netsurf-3.2.zip"><span>NetSurf 3.2 for RISC&nbsp;OS</span> <span>(3.3MB)</span> <span class="downloaddate">30 Aug 2014</span></a></p>
<p class="downloadinstructions"><a href="/documentation/roinfo#GettingStartedInstallation">Installation instructions</a></p>
<p class="preul">Binary download includes:</p>
<ul>
@@ -81,7 +81,7 @@
</div>
<div class="downloadlatestbox downloadlast">
-<p class="downloadmain"><a href="http://download.netsurf-browser.org/netsurf/releases/source/netsurf-3.1-src.tar.gz"><span>NetSurf 3.1 source code</span> <span>(2.9MB)</span> <span class="downloaddate">26 Apr 2014</span></a></p>
+<p class="downloadmain"><a href="http://download.netsurf-browser.org/netsurf/releases/source/netsurf-3.2-src.tar.gz"><span>NetSurf 3.2 source code</span> <span>(2.9MB)</span> <span class="downloaddate">30 Aug 2014</span></a></p>
<p class="downloadinstructions"><a href="/downloads/source/#BuildInstructions">Build instructions</a></p>
<p class="preul">Build NetSurf for:</p>
<ul>
@@ -100,6 +100,13 @@
<h2>Previous releases</h2>
<dl>
+<dt>NetSurf 3.1</dt>
+<dd>
+<ul>
+<li><a href="http://download.netsurf-browser.org/netsurf/releases/pre-built/riscos/netsurf-3.1.zip">NetSurf 3.1 browser for RISC OS</a> (26 Apr 2014)</li>
+<li><a href="http://download.netsurf-browser.org/netsurf/releases/source/netsurf-3.1-src.tar.gz">NetSurf 3.1 source code</a> (26 Apr 2014)</li>
+</ul>
+</dd>
<dt>NetSurf 3.0</dt>
<dd>
<ul>
diff --git a/downloads/source/index.en b/downloads/source/index.html
index cc798ba..8519f1f 100644
--- a/downloads/source/index.en
+++ b/downloads/source/index.html
@@ -56,6 +56,7 @@
<p>The source code for each release version of NetSurf is available.</p>
<ul>
+<li><a href="http://download.netsurf-browser.org/netsurf/releases/source-full/netsurf-all-3.2.tar.gz">NetSurf 3.2 source code</a> (30 Aug 2014)</li>
<li><a href="http://download.netsurf-browser.org/netsurf/releases/source-full/netsurf-all-3.1.tar.gz">NetSurf 3.1 source code</a> (26 Apr 2014)</li>
<li><a href="http://download.netsurf-browser.org/netsurf/releases/source-full/netsurf-3.0-full-src.tar.gz">NetSurf 3.0 source code</a> (20 Apr 2013)</li>
<li><a href="http://download.netsurf-browser.org/netsurf/releases/source-full/netsurf-2.9-full-src.tar.gz">NetSurf 2.9 source code</a> (27 Mar 2012)</li>
diff --git a/downloads/themes/index.en b/downloads/themes/index.html
index a61e9c0..a61e9c0 100644
--- a/downloads/themes/index.en
+++ b/downloads/themes/index.html
diff --git a/errors/404.en b/errors/404.html
index b0b5409..b0b5409 100644
--- a/errors/404.en
+++ b/errors/404.html
diff --git a/index.en b/index.html
index e792ba0..42fc6fb 100644
--- a/index.en
+++ b/index.html
@@ -128,7 +128,7 @@
<div class="downloadbox">
<div class="downloadcontainer">
<div class="downloadcontent">
-<h2 id="downloadrelease"><a href="/downloads/">Download NetSurf&nbsp;3.1</a></h2>
+<h2 id="downloadrelease"><a href="/downloads/">Download NetSurf&nbsp;3.2</a></h2>
<ul>
<li><a href="/downloads/riscos/">For RISC&nbsp;OS</a></li>
<li><a href="/downloads/gtk/">For Linux</a></li>
@@ -147,18 +147,18 @@
<h2 id="news">Latest news</h2>
<dl class="frontnews">
+<dt><a href="/downloads/">NetSurf 3.2 released</a> <span>30 Aug 2014</span></dt>
+<dd>NetSurf 3.2 is primarily a bug-fix release. In addition to fixes, a disc cache feature has been added, and a little work has been done to improve CSS3 support. Several of the front ends have received quite a bit of attention, with new features and improvements; notably the GTK, AmigaOS and Framebuffer front ends. We recommend all users upgrade.</dd>
+<dt><a href="https://developers.google.com/open-source/soc/?csw=1">NetSurf in Google Summer of Code</a> <span>01 May 2014</span></dt>
+<dd>NetSurf is participating as a mentoring organisation in Google Summer of code again this year. We have a student called Rupinder Singh Khokhar who will be working on updating our core web technology libraries, LibDOM and LibHubbub, to bring them into line with the current versions of the specifications.</dd>
<dt><a href="/downloads/">NetSurf 3.1 released</a> <span>26 Apr 2014</span></dt>
<dd>NetSurf 3.1 contains many improvements over the previous release. The highlights include much faster CSS selection performance, faster start up time, new look and feel to the treeviews (hotlist/bookmarks, global history and cookie manager), improved options handling, undo/redo support in textareas, and general improvement of forms. Also included are many other additions, optimisations and bug fixes. We recommend that all users upgrade.</dd>
-<dt><a href="/about/awards">NetSurf wins Award</a> <span>23 Jan 2014</span></dt>
-<dd>NetSurf won the award for &quot;best non-commercial product&quot; at the 2012/2013 RISC OS Awards. Thanks to everyone that voted for us!</dd>
-<dt><a href="http://vincentsanders.blogspot.co.uk/2014/01/netsurf-developer-workshop-redux.html">NetSurf developer workshop report</a> <span>06 Jan 2014</span></dt>
-<dd>The NetSurf core developers gathered in Cambridge at the start of the year, and managed to do a considerable amount of work across various areas of the project. See the <a href="http://vincentsanders.blogspot.co.uk/2014/01/netsurf-developer-workshop-redux.html">developer workshop report</a> for more details. Thanks to <a href="http://www.collabora.com/">Collabora</a> for hosting the event.</dd>
</dl>
<p class="more"><a href="/about/news" class="seemore">See more news</a></p>
-<h2 id="features">NetSurf 3.1 features</h2>
+<h2 id="features">NetSurf 3.2 features</h2>
-<p>NetSurf 3.1 is available for: RISC OS; Linux and other UNIX-like systems; Mac OS X; and AmigaOS 4.</p>
+<p>NetSurf 3.2 is available for: RISC OS; Linux and other UNIX-like systems; Mac OS X; and AmigaOS 4.</p>
<dl>
<dt>General</dt>
diff --git a/projects/hubbub/index.en b/projects/hubbub/index.html
index bfa45e6..bfa45e6 100644
--- a/projects/hubbub/index.en
+++ b/projects/hubbub/index.html
diff --git a/projects/iconv/index.en b/projects/iconv/index.html
index cd5b6b6..cd5b6b6 100644
--- a/projects/iconv/index.en
+++ b/projects/iconv/index.html
diff --git a/projects/index.en b/projects/index.html
index 524319f..524319f 100644
--- a/projects/index.en
+++ b/projects/index.html
diff --git a/projects/libcss/index.en b/projects/libcss/index.html
index 366c065..bb5122a 100644
--- a/projects/libcss/index.en
+++ b/projects/libcss/index.html
@@ -65,6 +65,8 @@
<p>Most recent first:</p>
<dl class="releases">
+<dt>LibCSS 0.4.0</dt>
+<dd><a href="http://download.netsurf-browser.org/libs/releases/libcss-0.4.0-src.tar.gz">Tarball</a> &ndash; <a href="#changes-0.4.0">Changes</a></dd>
<dt>LibCSS 0.3.0</dt>
<dd><a href="http://download.netsurf-browser.org/libs/releases/libcss-0.3.0-src.tar.gz">Tarball</a> &ndash; <a href="#changes-0.3.0">Changes</a></dd>
<dt>LibCSS 0.2.0</dt>
@@ -84,6 +86,13 @@
<h2>Changes</h2>
<dl class="changes">
+<dt id="changes-0.4.0">LibCSS 0.4.0</dt>
+<dd><ul>
+<li>Added support for CSS3 overflow-x and overflow-y properties.</li>
+<li>Fix to !important handling with play-during property.</li>
+<li>Improved test coverage.</li>
+<li>API <a href="http://git.netsurf-browser.org/libcss.git/plain/docs/API-ABI-Changes">changes made</a>.</li>
+</ul></dd>
<dt id="changes-0.3.0">LibCSS 0.3.0</dt>
<dd><ul>
<li>Added support for the writing-mode property.</li>
diff --git a/projects/libdom/index.en b/projects/libdom/index.html
index 1518d85..1518d85 100644
--- a/projects/libdom/index.en
+++ b/projects/libdom/index.html
diff --git a/projects/libnsbmp/index.en b/projects/libnsbmp/index.html
index dd6dd2f..dd6dd2f 100644
--- a/projects/libnsbmp/index.en
+++ b/projects/libnsbmp/index.html
diff --git a/projects/libnsfb/index.en b/projects/libnsfb/index.html
index 6fb87f6..6fb87f6 100644
--- a/projects/libnsfb/index.en
+++ b/projects/libnsfb/index.html
diff --git a/projects/libnsgif/index.en b/projects/libnsgif/index.html
index 456de65..456de65 100644
--- a/projects/libnsgif/index.en
+++ b/projects/libnsgif/index.html
diff --git a/projects/libparserutils/index.en b/projects/libparserutils/index.html
index f16e028..f16e028 100644
--- a/projects/libparserutils/index.en
+++ b/projects/libparserutils/index.html
diff --git a/projects/libpencil/index.en b/projects/libpencil/index.html
index 2d899a2..2d899a2 100644
--- a/projects/libpencil/index.en
+++ b/projects/libpencil/index.html
diff --git a/projects/librosprite/index.en b/projects/librosprite/index.html
index 2d8d0a0..2d8d0a0 100644
--- a/projects/librosprite/index.en
+++ b/projects/librosprite/index.html
diff --git a/projects/libsvgtiny/index.en b/projects/libsvgtiny/index.html
index af8b6ff..af8b6ff 100644
--- a/projects/libsvgtiny/index.en
+++ b/projects/libsvgtiny/index.html
diff --git a/projects/libwapcaplet/index.en b/projects/libwapcaplet/index.html
index 7e07a2f..7e07a2f 100644
--- a/projects/libwapcaplet/index.en
+++ b/projects/libwapcaplet/index.html
diff --git a/projects/rufl/index.en b/projects/rufl/index.html
index e5dd733..e5dd733 100644
--- a/projects/rufl/index.en
+++ b/projects/rufl/index.html
diff --git a/projects/tinct/index.en b/projects/tinct/index.html
index a535d8f..a535d8f 100644
--- a/projects/tinct/index.en
+++ b/projects/tinct/index.html
diff --git a/projects/ttf2f/index.en b/projects/ttf2f/index.html
index b90c9ff..b90c9ff 100644
--- a/projects/ttf2f/index.en
+++ b/projects/ttf2f/index.html
diff --git a/webmasters/index.en b/webmasters/index.html
index 8bcb2c7..8bcb2c7 100644
--- a/webmasters/index.en
+++ b/webmasters/index.html
diff --git a/welcome/index.en b/welcome/index.html
index 3ede809..3ede809 100644
--- a/welcome/index.en
+++ b/welcome/index.html