usage: $us [<options>] <foo-mail-pregen> <foo-mail-pregen-opts>...
options:
-p<papersize> for libpaper, or "creditcard" default is $papersize
- -F[<numberfont>,]<font> font name default is $fontname
+ -f[<numberfont>,]<font> font name default is $fontname
-b<border>|-b<bx>x<by> all in mm
-g<gapratio> number-to-addr gap adjustment
-l<lineratio> inter-line space ("leading") adjustment factor
} 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);
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) {
our @numbers_metr;
our @texts_metr;
our $gap_width;
+our $colgap_width;
our @core_size;
our @item_size;
our $rotate_paper;
$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";
@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];
return do_layout_recursive_search 0;
}
-our $usesz;
our $lp_y;
sub determine_size_layout () {
my $minsz;
my $maxsz;
+ my $usesz;
for (;;) {
my $trysz =
}
$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);
}
}
}
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";
}