chiark / gitweb /
actually make pages be different pages
[pandemic-rising-tide.git] / generate-board
index 8ac9ca0ba01097c5622f985e47465713bc2ac6d4..8faca3dc16ef38066796ccb64bf129ecfb391dbe 100755 (executable)
@@ -31,9 +31,14 @@ our $mid;
 our $a4_w = 595;
 our $a4_h = 842;
 our $a3_h = 1190;
+our $a1_w = 1684;
+our $a1_h = 2384;
 
 our $max_printeredge = 5.50 * MM2PT;
-
+our $a1m_pasteedge = 3.5 * MM2PT; # along each edge
+our $preamble_from_boundings = '';
+our $top_adjuncts_dy_from_boundings = 0;
+our $bottom_adjuncts_dy_from_boundings = 0;
 
 # ----- region names from plag, incl. reverse mapping -----
 
@@ -304,22 +309,25 @@ sub face_path ($) {
 
 sub computeboundings() {
   $bb{Entire} = [ 0,0, $a4_h, $a4_w + $a3_h ];
-  $bb{PageB} = [ 0,0, $a4_h, $a4_w ];
-  my $page2minprintable = sub {
-    my (@p) = @{ $_[0] };
-    [ $p[0] + $max_printeredge,
-      $p[1] + $max_printeredge,
-      $p[2] - $max_printeredge,
-      $p[3] - $max_printeredge ];
+  my $submargins = sub {
+    my ($margin, $pr) = @_;
+    my @p = @$pr;
+    [ $p[0] + $margin,
+      $p[1] + $margin,
+      $p[2] - $margin,
+      $p[3] - $margin ];
   };
-  $bb{PrintableB} = $page2minprintable->($bb{PageB});
   my $somepage = sub {
     my $id = shift @_;
     print STDERR "defining page Page$id\n";
     $bb{"Page$id"} = [ @_ ];
-    $bb{"Printable$id"} = $page2minprintable->($bb{"Page$id"});
+    $bb{"Printable$id"} = $submargins->($max_printeredge, $bb{"Page$id"});
+  };
+  my $pageb_a4 = sub {
+    $somepage->('B', 0,0, $a4_h, $a4_w );
   };
   if ($maxpaper eq 'a3') {
+    $pageb_a4->();
     my $mt_offset = $bb{PrintableB}[3] - $max_printeredge;
     $somepage->('MT', 0, $mt_offset, $a4_h, $mt_offset + $a3_h );
     $bb{PrintableAll} = [
@@ -327,6 +335,7 @@ sub computeboundings() {
                         @{ $bb{PrintableMT} }[2..3],
                        ];
   } elsif ($maxpaper eq 'a4') {
+    $pageb_a4->();
     my $m_offset = $bb{PrintableB}[3] - $max_printeredge;
     $somepage->('M', 0, $m_offset, $a4_h, $m_offset + $a4_w );
     my $t_offset = $bb{PrintableM}[3] - $max_printeredge;
@@ -335,6 +344,50 @@ sub computeboundings() {
                         @{ $bb{PrintableB} }[0..1],
                         @{ $bb{PrintableT} }[2..3],
                        ];
+  } elsif ($maxpaper =~ m/^a1/) {
+    my $hairs = 30 * MM2PT;
+    my $hairsw = $bb{Entire}[2];
+    my $hairsh = $bb{Entire}[3];
+    my $surround = 5 * MM2PT;
+    my $surroundw = $bb{Entire}[2] + $surround*2;
+    my $surroundh = $bb{Entire}[3] + $surround*2;
+    $somepage->('P', 0,0, $a1_w, $a1_h);
+    my $offx = 0.5*($bb{PageP}[2] - $bb{Entire}[2]);
+    my $offy = 0.5*($bb{PageP}[3] - $bb{Entire}[3]);
+    my @hrect = @{ $bb{Entire} };
+    $bb{Entire}[0] += $offx;  $bb{Entire}[1] += $offy;
+    $bb{Entire}[2] += $offx;  $bb{Entire}[3] += $offy;
+    if ($maxpaper eq 'a1m') {
+      @hrect = @{ $submargins->($a1m_pasteedge, \@hrect) };
+      $bb{Cutout} = $submargins->($a1m_pasteedge, $bb{Entire});
+    }
+    my $w_stroke = $xopts =~ m/W/ ?
+       ' gsave 3 setlinewidth stroke grestore '
+       : '';
+    $preamble_from_boundings = <<END;
+        $offx $offy translate
+         1 setlinewidth
+         0 setgray
+         /a1hairs {
+             newpath moveto
+             $hairs 0        rmoveto
+             $hairs -2 mul 0 rlineto
+             $hairs $hairs   rmoveto
+             0 $hairs -2 mul rlineto
+             stroke
+         } def
+         $hrect[0] $hrect[1] a1hairs
+         $hrect[0] $hrect[3] a1hairs
+         $hrect[2] $hrect[3] a1hairs
+         $hrect[2] $hrect[1] a1hairs
+         -$surround -$surround moveto
+          $surroundw 0         rlineto
+          0 $surroundh         rlineto
+          -$surroundw 0        rlineto
+                 closepath $w_stroke clip
+END
+    $top_adjuncts_dy_from_boundings = 35;
+    $bottom_adjuncts_dy_from_boundings = -7;
   } else {
     confess;
   }
@@ -386,6 +439,8 @@ sub preamble() {
 << /PageSize [ @$sz ] >> setpagedevice
 /board {
   gsave
+  $bb->[0] neg  $bb->[1] neg  translate
+$preamble_from_boundings
   34 -15 translate
 END
   if ($maxpaper eq 'a4') {
@@ -678,9 +733,11 @@ sub decks(){
   o("    200 0 translate deck1path\n");
   o("  } bind def");
   o("  $lw setlinewidth ",miscpscolour('playerdeck'),"\n");
-  o("  gsave 401 44 translate deckpairpathx stroke grestore");
+  o("  gsave 401 44 $bottom_adjuncts_dy_from_boundings add translate");
+  o("     deckpairpathx stroke grestore");
   o("  $lw setlinewidth ",miscpscolour('dykefail'),"\n");
-  o("  gsave 242 1363 translate 90 rotate deckpairpathx stroke grestore");
+  o("  gsave 242 1363 $top_adjuncts_dy_from_boundings add translate ");
+  o("     90 rotate deckpairpathx stroke grestore");
 }
 
 sub sea_track(){
@@ -832,7 +889,7 @@ sub hs_initial_1 ($$$;$$$) {
   my $demo_w = $demo_x0 + $dyke_l * 0.60;
   o("  % HS I $colour\n");
   o("  gsave\n");
-  o("    550 1705 translate\n");
+  o("    550 1705 $top_adjuncts_dy_from_boundings add translate\n");
   o("    ", ($xi*$interval), " ", (($yi-1)*$interval), " translate\n");
   if ($fn) {
     o("  gsave\n");
@@ -869,7 +926,8 @@ sub hs_initial () {
 
 sub play_hint () {
   my $sz = 20;
-  o("  gsave ",miscpscolour('hinttext')," 260 1715 translate\n");
+  o("  gsave ",miscpscolour('hinttext'),
+    " 260 1715 $top_adjuncts_dy_from_boundings add translate\n");
   o("  /Helvetica-Bold findfont $sz scalefont setfont\n");
   my @t = split /\n/, $c{PlayHint};
   foreach my $i (0..$#t) {
@@ -885,7 +943,7 @@ sub play_hint () {
 $xopts = shift @ARGV if $ARGV[0] =~ s/^-X//;
 $bounding = $1 if $xopts =~ s/b(\w+)//;
 $maxpaper = $1 if $xopts =~ s/p(\w+)//;
-$maxpaper =~ m/^a[134]$/ or confess;
+$maxpaper =~ m/^a[134]$|^a1m$/ or confess;
 
 ($facesf, @ARGV) = @ARGV or die;
 parse_input_graph();