chiark / gitweb /
trim-ps script to make files print faster
[trains.git] / layout / trim-ps
1 #!/usr/bin/perl
2 foreach $e (qw(M=moveto
3                L=lineto
4                N=newpath
5                C=closepath_clip
6                W=setlinewidth_stroke
7                R=grestore
8                S=gsave
9                I=setgray)) {
10     $_= $e;
11     s/^([A-Z])\=// or die;
12     $letter= $1;
13     y/_/ /;
14     $defs.= "/$letter { $_ } bind def\n";
15     $func.= "s/\\s$_\\s/\\n$letter\\n/g;\n";
16 }
17 eval "sub s { $func }; 1;" or die $@;
18
19 while (<>) {
20     if (m/^\%\!/) {
21         print or die $!;
22         print $defs or die $!;
23     } elsif (m/^\%/) {
24     } else {
25         s/^\s+/\n/; s/$/\n/;
26         s/\s(\d{3,}\.\d{0,3})\d*\s+(\d{3,}\.\d{0,3})\d*\s+(moveto|lineto)\s/
27             "\n$1 $2 ".uc(substr($3,0,1))."\n"
28                 /ge;
29         &s;
30         s/\n+/\n/g;
31         s/^\n//;
32         print or die $!
33             if m/\S/;
34     }
35 }