From 625cfe71f80c0cc453514747e671d9497cb6e5b0 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 3 Nov 2013 23:27:07 +0000 Subject: [PATCH] numbered-alias-sheet: tiles --- numbered-alias-sheet | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/numbered-alias-sheet b/numbered-alias-sheet index 2305a13..16db545 100755 --- a/numbered-alias-sheet +++ b/numbered-alias-sheet @@ -13,6 +13,7 @@ our $gapratio = 1.5; our $lineratio = 1; our $blankratio = 1; our @borders = (4,4); +our @tiles = (1,2); our @lp_options = ( [ 'blank-below', 'blank-to-right', ], [ 'landscape', 'portrait' ], @@ -26,6 +27,7 @@ options: -f set both to same font name -f[[*]],[] default is $fontname_num*$fontscale_num,$fontname -b|-bx all in mm + -T[x] default is $tiles[0]x$tiles[1] -g number-to-addr gap adjustment -l inter-line space ("leading") adjustment factor -b (blank space size) / (text size) @@ -96,6 +98,9 @@ for (;;) { $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 { @@ -132,6 +137,7 @@ if (!@paperpts) { our @strings; our $domain_suffix; +our $pertile; sub readstrings () { my $nlen = 0; @@ -154,6 +160,8 @@ sub readstrings () { $_->[1] =~ s/$dom_re//o foreach @strings; } } + + $pertile = ceil(@strings / ($tiles[0] * $tiles[1])); } our @lp_values; @@ -300,7 +308,7 @@ sub do_layout_recursive_search ($) { 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"; @@ -363,8 +371,8 @@ sub determine_size_layout () { 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"; @@ -387,7 +395,7 @@ sub write_output () { 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}; @@ -412,7 +420,7 @@ sub write_output () { 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 @@ -439,6 +447,22 @@ sub write_output () { 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(); -- 2.30.2