Mojo-PDF
view release on metacpan or search on metacpan
lib/Mojo/PDF/Primitive/Table.pm view on Meta::CPAN
package Mojo::PDF::Primitive::Table;
our $VERSION = '1.005003'; # VERSION
use List::AllUtils qw/sum uniq/;
use Types::Standard qw/
HashRef ArrayRef Tuple InstanceOf StrictNum Str CodeRef Optional
/;
use Types::Common::Numeric qw/PositiveInt PositiveOrZeroNum PositiveNum/;
use Moo 2.000002;
use Tie::RangeHash 1.05;
use namespace::clean;
$Carp::Internal{ (__PACKAGE__) }++;
##### Required
has at => (
is => 'ro',
required => 1,
isa => Tuple[ StrictNum, StrictNum ],
);
has data => ( is => 'ro', required => 1, isa => ArrayRef, );
has pdf => (
is => 'ro',
required => 1,
isa => InstanceOf['Mojo::PDF'],
);
##### Defaults/Optional
has header => (
is => 'ro',
isa => Str,
);
has border => (
is => 'ro',
default => sub { [.5, '#ccc'] },
isa => Tuple[PositiveOrZeroNum, Str],
);
has max_height => (
is => 'ro',
default => '+Inf',
coerce => sub { ref $_[0] ? $_[0]->[0] : $_[0] },
isa => PositiveOrZeroNum,
);
has min_width => ( is => 'ro', default => 0, isa =>PositiveOrZeroNum);
has padding => (
is => 'ro',
default => sub { [3, 6] },
isa => Tuple[PositiveOrZeroNum,Optional[PositiveOrZeroNum],Optional[PositiveOrZeroNum],Optional[PositiveOrZeroNum]],
coerce => sub {
my $v = shift;
return @$v == 4 ? [@$v]
: @$v == 3 ? [ $v->[0], $v->[1], $v->[2], $v->[1] ]
: @$v == 2 ? [ $v->[0], $v->[1], $v->[0], $v->[1] ]
: [ (@$v) x 4 ];
},
);
has row_height => ( is => 'ro', default => 12, isa => PositiveNum, );
has str_width_mult => (
is => 'ro',
default => 1,
isa => HashRef,
coerce => sub {
my ( $v ) = @_;
tie my %widths, 'Tie::RangeHash';
unless ( ref $v ) { $widths{'0,'} = $v; return \%widths; }
my $prev = -1;
for ( uniq map sprintf('%.f', $_), sort { $a <=> $b } keys %$v ) {
$widths{"$prev.1,$_"} = $v->{$_};
$prev = $_;
}
return \%widths;
},
);
##### Internal
has _extra_row_h => ( is => 'rw', default => 0, );
has _row_lines => ( is => 'rw', default => 0, );
has _border_color => ( is => 'lazy', builder => sub { shift->border->[1] });
has _border_width => ( is => 'lazy', builder => sub { shift->border->[0] });
( run in 2.471 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )