#!/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 on your web browser. Perhaps you have Javascript disabled, or perhaps your browser doesn't provide a feature they depend on. These puzzles have been successfully run in Firefox 19 and Chrome 25.

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