our @item_size;
our $rotate_paper;
our @eff_paper_size;
-our @laycount;
sub wontfit ($) {
print DEBUG " NO @_\n";
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;
}
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'};
$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 ($) {
}
our $usesz;
+our $lp_y;
sub determine_size_layout () {
my $minsz;
}
}
- 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();