our $lineratio = 1;
our $blankratio = 1;
our @borders = (4,4);
+our @tiles = (1,2);
our @lp_options = ( [ 'blank-below', 'blank-to-right', ],
[ 'landscape', 'portrait' ],
-f<bothfont> set both to same font name
-f[<numfont>[*<scale>]],[<addrfont>] default is $fontname_num*$fontscale_num,$fontname
-b<border>|-b<bx>x<by> all in mm
+ -T[<xtiles>x]<ytiles> default is $tiles[0]x$tiles[1]
-g<gapratio> number-to-addr gap adjustment
-l<lineratio> inter-line space ("leading") adjustment factor
-b<blankratio> (blank space size) / (text size)
$gapratio = $1;
} elsif (s/^-b($dbl_re)$//o) {
$blankratio = $1;
+ } elsif (s/^-T(?:(\d+)x)(\d+)?$//o) {
+ $tiles[0] = $1 || 1;
+ $tiles[1] = $2;
} elsif (s/^-D/-/) {
open DEBUG, ">&STDERR" or die $!;
} else {
our @strings;
our $domain_suffix;
+our $pertile;
sub readstrings () {
my $nlen = 0;
$_->[1] =~ s/$dom_re//o foreach @strings;
}
}
+
+ $pertile = ceil(@strings / ($tiles[0] * $tiles[1]));
}
our @lp_values;
my $laycountshow = "$lp_y{0} $lp_y{1}";
- $lp_y{0} * $lp_y{1} >= @strings
+ $lp_y{0} * $lp_y{1} >= $pertile
or return wontfit "layout fits too few $laycountshow";
print DEBUG " OK $laycountshow\n";
sub prf { printf @_ or die $!; }
-sub write_output () {
- prf "%%!\n";
+sub write_output_tile ($) {
+ my ($tile_string_off) = @_;
my @cnr;
my $c;
prf "gsave\n";
prf "90 rotate\n";
prf "0 %s translate\n", -$eff_paper_size[1];
}
- my $rows = ceil(@strings / $lp_y->{0});
+ my $rows = ceil($pertile / $lp_y->{0});
my @cell_size;
$cell_size[0] = ($eff_paper_size[0] + $colgap_width) / $lp_y->{0};
prf "stroke\n";
}
foreach my $row (0..$rows-1) {
- my $se = $strings[$col*$rows + $row];
+ my $se = $strings[$col*$rows + $row + $tile_string_off];
next unless $se;
prf "newpath ";
prf "%s ", $col_lhs
prf "grestore\n";
}
+sub write_output () {
+ prf "%%!\n";
+ my @tile;
+ for ($tile[0]=0; $tile[0]<$tiles[0]; $tile[0]++) {
+ for ($tile[1]=0; $tile[1]<$tiles[1]; $tile[1]++) {
+ prf "%% tile @tile\n";
+ prf "gsave\n";
+ prf "%s ", $tile[$_] * $paperpts[$_] foreach qw(0 1);
+ prf "translate\n";
+ write_output_tile($tile[0] * $pertile +
+ $tile[1] * $pertile * $tiles[0]);
+ prf "grestore\n";
+ }
+ }
+}
+
readstrings();
prepare_metrics();
determine_size_layout();