From 67e81c085526b5570669c8ec52d358e8b300f750 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 3 Nov 2013 22:20:21 +0000 Subject: [PATCH] numbered-alias-sheet: wip for output, debugging --- numbered-alias-sheet | 49 +++++++++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/numbered-alias-sheet b/numbered-alias-sheet index b7398f2..0cdc738 100755 --- a/numbered-alias-sheet +++ b/numbered-alias-sheet @@ -22,7 +22,7 @@ our $usage = <] ... options: -p for libpaper, or "creditcard" default is $papersize - -F[,] font name default is $fontname + -f[,] font name default is $fontname -b|-bx all in mm -g number-to-addr gap adjustment -l inter-line space ("leading") adjustment factor @@ -73,9 +73,9 @@ for (;;) { } elsif (s/^-p($dbl_re)x($dbl_re)$//o) { $papersize = undef; @paperpts = mm2pt($1,$2); - } elsif (s/^-F($fontname_re)$//o) { + } elsif (s/^-f($fontname_re)$//o) { $fontname = $fontname_num = $1; - } elsif (s/^-F($fontname_re),($fontname_re)$//o) { + } elsif (s/^-f($fontname_re),($fontname_re)$//o) { ($fontname_num, $fontname) = ($1, $2); } elsif (s/^-b($dbl_re)$//o) { @borders = ($1,$1); @@ -91,7 +91,7 @@ for (;;) { open DEBUG, ">&STDERR" or die $!; } else { if (m/^--([-a-z]+)$/) { - my $lpi = grep { + my ($lpi) = grep { grep { $1 eq $_ } @{ $lp_options[$_] } } 0..$#lp_options; if (defined $lpi) { @@ -140,6 +140,7 @@ our @lp_values; our @numbers_metr; our @texts_metr; our $gap_width; +our $colgap_width; our @core_size; our @item_size; our $rotate_paper; @@ -242,18 +243,19 @@ sub do_layout_recursive_search ($) { $lp_y{rotate_paper} = ($paperpts[0] > $paperpts[1] # paper looks like landscape xor $lp_y{'landscape'}); - @eff_paper_size = !$lp_y{rotate_paper} ? @paperpts : reverse @paperpts; + $eff_paper_size[$_] = $paperpts[$_] - 2.0*$borders[$_] foreach qw(0 1); + @eff_paper_size = reverse @eff_paper_size if $lp_y{rotate_paper}; @item_size = @core_size; my $blank_coord = !!$lp_y{'blank-below'}; $item_size[$blank_coord] *= (1.0 + $blankratio); foreach my $coord (qw(0 1)) { - my $avail = $eff_paper_size[$coord] - $borders[$coord] * 2; + my $avail = $eff_paper_size[$coord]; my $each = $item_size[$coord]; if (!$coord) { - $each += $gap_width; - $avail += $gap_width; + $each += $colgap_width; + $avail += $colgap_width; } $lp_y{$coord} = floor($avail / $each); $lp_y{$coord} >= 1 or return wontfit "cannot fit even one $coord"; @@ -282,6 +284,7 @@ sub do_layout ($) { @numbers_metr = map { $_ * $fontsize } @numbers_1_metr; $gap_width = $gapratio * $fontsize * $nom_gap_1_metr[4]; + $colgap_width = $gap_width * 2; @texts_metr = map { $_ * $fontsize } @texts_1_metr; $core_size[0] = $numbers_metr[4] + $gap_width + $texts_metr[4]; @@ -291,12 +294,12 @@ sub do_layout ($) { return do_layout_recursive_search 0; } -our $usesz; our $lp_y; sub determine_size_layout () { my $minsz; my $maxsz; + my $usesz; for (;;) { my $trysz = @@ -317,9 +320,10 @@ sub determine_size_layout () { } $lp_y = do_layout $usesz or die; + $lp_y->{f} = $usesz; print DEBUG Dumper($usesz, \@lp_values, \@numbers_metr, - \@texts_metr, $gap_width, \@core_size, + \@texts_metr, $gap_width, \$colgap_width, \@core_size, \@item_size, \@eff_paper_size, $lp_y); } @@ -344,9 +348,30 @@ sub write_output () { } } prf "grestore gsave\n"; - prf "%s ", -$borders[$_] foreach qw(0 1); + prf "%s ", $borders[$_] foreach qw(0 1); prf "translate\n"; - prf "90 rotate\n" if $lp_y->{rotate_paper}; + if ($lp_y->{rotate_paper}) { + prf "90 rotate\n"; + prf "0 %s translate\n", -$eff_paper_size[1]; + } + my $rows = ceil(@strings / $lp_y->{0}); + + foreach my $nums (qw(1 0)) { + prf("%s findfont %s scalefont setfont\n", + psstring($nums ? $fontname_num : $fontname), + $lp_y->{f}); + print DEBUG "nums? $nums rows=$rows\n"; + foreach my $col (0..$lp_y->{0}-1) { + foreach my $row (0..$rows-1) { + my $se = $strings[$col*$rows + $row]; + next unless $se; + prf "%s ", ($item_size[0] + $colgap_width) * $col + + ($nums ? 0 : $numbers_metr[4] + $gap_width); + prf "%s ", $eff_paper_size[1] - $item_size[1] * ($row + 1); + prf "moveto %s show\n", psstring($se->[!$nums]); + } + } + } prf "grestore\n"; } -- 2.30.2