#!/usr/bin/perl use strict; use warnings; open my $footerfile, "<", shift @ARGV or die "footer: open: $!\n"; my $footer = ""; $footer .= $_ while <$footerfile>; close $footerfile; for my $arg (@ARGV) { $arg =~ /(.*\/)?([^\/]+)\.html$/ or die; my $filename = $2; open my $gamefile, "<", $arg or die "$arg: open: $!\n"; my $unfinished = 0; my $docname = $filename; chomp(my $puzzlename = <$gamefile>); while ($puzzlename =~ s/^([^:=]+)(=([^:]+))?://) { if ($1 eq "unfinished") { $unfinished = 1; } elsif ($1 eq "docname") { $docname = $3; } else { die "$arg: unknown keyword '$1'\n"; } } my $instructions = ""; $instructions .= $_ while <$gamefile>; close $gamefile; open my $outpage, ">", "${filename}.html"; my $unfinishedtitlefragment = $unfinished ? "an unfinished puzzle " : ""; my $unfinishedheading = $unfinished ? "

an unfinished puzzle

\n" : ""; my $unfinishedpara; my $links; if ($unfinished) { $unfinishedpara = < You have found your way to a page containing an unfinished puzzle in my collection, not linked from the main puzzles page. Don't be surprised if things are hard to understand or don't work as you expect. EOF $links = < Back to main puzzles page (which does not link to this) EOF } else { $unfinishedpara = ""; $links = < Full instructions | Back to main puzzles page EOF } print $outpage < ${puzzlename}, ${unfinishedtitlefragment}from Simon Tatham's Portable Puzzle Collection

${puzzlename}

${unfinishedheading}

from Simon Tatham's Portable Puzzle Collection

${unfinishedpara}
Sorry, this Javascript puzzle doesn't seem to work in your web browser. Perhaps you have Javascript disabled, or perhaps your browser doesn't provide a feature that the puzzle code requires (such as typed arrays). These puzzles have been successfully run in Firefox 19, Chrome 26, Internet Explorer 10 and Safari 6.

${instructions} ${links} ${footer} EOF close $outpage; }