From 4f1c47b77209e35a4e1b0bf21757a6f7bdad746f Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 3 Nov 2013 21:43:35 +0000 Subject: [PATCH] numbered-alias-sheet: wip for output --- numbered-alias-sheet | 60 +++++++++++++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 15 deletions(-) diff --git a/numbered-alias-sheet b/numbered-alias-sheet index 027f8bc..b7398f2 100755 --- a/numbered-alias-sheet +++ b/numbered-alias-sheet @@ -144,7 +144,6 @@ our @core_size; our @item_size; our $rotate_paper; our @eff_paper_size; -our @laycount; sub wontfit ($) { print DEBUG " NO @_\n"; @@ -229,7 +228,8 @@ sub do_layout_recursive_search ($) { if ($lpi < @lp_options) { foreach my $v ($lp_fixed[$lpi] or @{ $lp_options[$lpi] }) { $lp_values[$lpi] = $v; - return 1 if do_layout_recursive_search $lpi+1; + my $r = do_layout_recursive_search $lpi+1; + return $r if $r; } return 0; } @@ -239,10 +239,10 @@ sub do_layout_recursive_search ($) { my %lp_y; $lp_y{$_} = 1 foreach @lp_values; - $rotate_paper = + $lp_y{rotate_paper} = ($paperpts[0] > $paperpts[1] # paper looks like landscape xor $lp_y{'landscape'}); - @eff_paper_size = !$rotate_paper ? @paperpts : reverse @paperpts; + @eff_paper_size = !$lp_y{rotate_paper} ? @paperpts : reverse @paperpts; @item_size = @core_size; my $blank_coord = !!$lp_y{'blank-below'}; @@ -255,22 +255,24 @@ sub do_layout_recursive_search ($) { $each += $gap_width; $avail += $gap_width; } - $laycount[$coord] = floor($avail / $each); - $laycount[$coord] >= 1 or return wontfit "cannot fit even one $coord"; + $lp_y{$coord} = floor($avail / $each); + $lp_y{$coord} >= 1 or return wontfit "cannot fit even one $coord"; } if ($lp_y{'single-column'}) { - $laycount[0] = 1; + $lp_y{0} = 1; } else { - $laycount[0] >= 2 + $lp_y{0} >= 2 or return wontfit "requested multi-column but only one"; } - $laycount[0] * $laycount[1] >= @strings - or return wontfit "layout fits too few @laycount"; + my $laycountshow = "$lp_y{0} $lp_y{1}"; - print DEBUG " OK @laycount\n"; - return 1; + $lp_y{0} * $lp_y{1} >= @strings + or return wontfit "layout fits too few $laycountshow"; + + print DEBUG " OK $laycountshow\n"; + return \%lp_y; } sub do_layout ($) { @@ -290,6 +292,7 @@ sub do_layout ($) { } our $usesz; +our $lp_y; sub determine_size_layout () { my $minsz; @@ -313,14 +316,41 @@ sub determine_size_layout () { } } - do_layout $usesz or die; + $lp_y = do_layout $usesz or die; print DEBUG Dumper($usesz, \@lp_values, \@numbers_metr, \@texts_metr, $gap_width, \@core_size, - \@item_size, $rotate_paper, \@eff_paper_size, - \@laycount); + \@item_size, \@eff_paper_size, + $lp_y); +} + +sub prf { printf @_ or die $!; } + +sub write_output () { + prf "%%!\n"; + my @cnr; + my $c; + prf "gsave\n"; + for ($cnr[0]=0; $cnr[0]<2; $cnr[0]++) { + for ($cnr[1]=0; $cnr[1]<2; $cnr[1]++) { + foreach my $cnrc (qw(0 1)) { + prf "newpath "; + prf "%s ", $cnr[$_] ? $paperpts[$_] : 0 foreach qw(0 1); + prf "moveto "; + prf "%s ", ($cnrc!=$_ ? 0 : $cnr[$_] ? -1 : +1) * $borders[$_] + foreach qw(0 1); + prf "rlineto stroke\n"; + } + } + } + prf "grestore gsave\n"; + prf "%s ", -$borders[$_] foreach qw(0 1); + prf "translate\n"; + prf "90 rotate\n" if $lp_y->{rotate_paper}; + prf "grestore\n"; } readstrings(); prepare_metrics(); determine_size_layout(); +write_output(); -- 2.30.2