chiark / gitweb /
tiling
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 3 Dec 2020 16:38:49 +0000 (16:38 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 3 Dec 2020 16:38:49 +0000 (16:38 +0000)
pumpkin-books.ps.pl

index dcfbfd9f3fafec78d45b5d75ec2034963b250eb9..7cb4cbb0717ac0e167473884899f8ea6a3b8f097 100755 (executable)
@@ -174,6 +174,44 @@ END
   $o;
 }
 
+sub tile {
+  my $pos = 0;
+  my $o = '';
+  my $showpage = sub {
+    $o .= <<END;
+showpage
+END
+  };
+  while (my $d = shift @_) {
+    if ($pos >= 5) {
+      $pos -= 5;
+      $showpage->();
+    }
+    $o .= <<END;
+gsave
+END
+    if ($pos < 3) {
+      $o .= <<END
+        0   th 10 add  $pos mul  translate
+END
+    } else {
+      $o .= <<END
+tw 2 mul 7 add
+   dup    th add  0 translate
+   90 rotate
+   $pos 3 sub mul  0 translate
+END
+    }
+    $o .= "\n".$d."\n";
+    $o .= <<END;
+grestore
+END
+    $pos++;
+  }
+  $showpage->();
+  $o;
+}
+
 print <<END or die $!;
 %!
 
@@ -196,25 +234,12 @@ print <<END or die $!;
 /costfont /Heletica-BoldOblique findfont costtextsz scalefont def
 
 /rubysz 4 def
-
-gsave
-END
-
-print green_book() or die $!;
-
-print <<END,green_book() or die $!;
-grestore
-gsave
-tw 2 mul th add 7 add 0 translate
-90 rotate
 END
 
-print <<END,green_book() or die $!;
-grestore
-gsave
-0   th 10 add  2 mul  translate
-END
-
-print <<END or die $!;
-grestore
-END
+print tile(
+          green_book(),
+          green_book(),
+          green_book(),
+          green_book(),
+          green_book(),
+         ) or die $! if 1;