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

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