]> mj.ucw.cz Git - misc.git/blob - ucw/draw-digit-multi
songsack: update for new libucw
[misc.git] / ucw / draw-digit-multi
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Cairo;
7
8 my $u = 72/2.5;
9 my $mi = 72/25.4;
10 my $pw = 210*$mi;
11 my $ph = 297*$mi;
12 my $s = Cairo::PdfSurface->create('digit.pdf', $pw, $ph);
13 my $c = Cairo::Context->create($s);
14 my $n = 0;
15
16 $c->set_line_width(2);
17 $c->set_line_cap('round');
18 $c->set_source_rgb(0, 0, 0);
19
20 sub cross($$) {
21         my ($x,$y) = @_;
22         $c->save;
23         $c->set_line_width(0.5);
24         $c->move_to($x-.5*$u, $y);
25         $c->line_to($x+.5*$u, $y);
26         $c->stroke;
27         $c->move_to($x, $y-.5*$u);
28         $c->line_to($x, $y+.5*$u);
29         $c->stroke;
30         $c->restore;
31 }
32
33 my $xp = $u;
34 my $yp = $u;
35 while (<>) {
36         s/^@@ // or next;
37         chomp;
38         my @r = split /\s+/;
39         @r == 5 or next;
40
41         cross($xp, $yp);
42         cross($xp+6*$u, $yp);
43         cross($xp, $yp+6*$u);
44         cross($xp+6*$u, $yp+6*$u);
45         for my $r (@r) {
46                 my ($x1,$y1,$x2,$y2) = $r =~ /^\((\d+),(\d+)\)-\((\d+),(\d+)\)$/ or die;
47                 $c->move_to($xp + (.9*$x1+.1*$x2)*$u, $yp + (.9*$y1+.1*$y2)*$u);
48                 $c->line_to($xp + (.9*$x2+.1*$x1)*$u, $yp + (.9*$y2+.1*$y1)*$u);
49                 $c->stroke;
50         }
51
52         $xp += 6*$u;
53         if ($xp + 5*$u > $pw) {
54                 $xp = $u;
55                 $yp += 6*$u;
56                 if ($yp + 5*$u > $ph) {
57                         $c->show_page;
58                         $yp = $u;
59                 }
60         }
61         $n++;
62 }
63
64 print "Output $n matchograms.\n";