#!/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}