PDF-Collage
view release on metacpan or search on metacpan
lib/PDF/Collage/Template.pm view on Meta::CPAN
sub __pageno ($input) { return $input eq 'last' ? 0 : $input }
sub __fc_list ($key) {
my @command = ('fc-list', $key, qw< file style >);
open my $fh, '-|', @command or croak "fc-list: $OS_ERROR";
my @candidates = map {
s{\s+\z}{}mxs;
my ($filename, $style) = m{\A (.*?): \s* :style=(.*)}mxs
or croak "fc-list: unexpected line '$_'";
my %style = map { $_ => 1 } split m{,}mxs, $style;
{filename => $filename, style => \%style};
} <$fh>;
return unless @candidates;
return $candidates[0]{filename} if @candidates == 1;
# get Regular/Normal if exists
for my $candidate (@candidates) {
return $candidate->{filename}
if $candidate->{style}{Regular} || $candidate->{style}{Normal};
}
lib/PDF/Collage/Template.pm view on Meta::CPAN
my $opts = $self->_expand($command, qw< page path x y width height >);
my $page = $self->_pdf->open_page(__pageno($opts->{page} // 'last'));
my $image = $self->_pdf->image($opts->{path});
$page->object($image, $opts->@{qw< x y width height >});
return;
} ## end sub _op_add_image
sub __parse_pages ($input) {
return $input if ref($input); # already represented as an array
my @pages = map {
my ($from, $to) = split m{-}mxs, $_, 2;
defined($to) ? ($from .. $to) : $from;
} split m{[\s,]+}mxs, $input;
return \@pages;
}
sub _op_add_page ($self, $command) {
my $opts =
$self->_expand($command, qw< page from from_path from_page >);
my $target_n = __pageno($opts->{page} // 'last');
defined(my $source_path = $opts->{from} // $opts->{from_path})
or return $self->_pdf->page($target_n);
my $source = $self->_src_cache->{$source_path}
script/pdf-collage view on Meta::CPAN
for my $additional (($args // [])->@*) {
my ($first) = $additional =~ m{(\S)}mxs;
$first //= '';
if ($first eq '{') { # JSON hash
merge_hash_in_place($common, decode_json($additional));
}
elsif ($first eq '[') {
push @records, decode_json($additional)->@*;
}
else {
my ($key, $sep, $val) = split m{(\#?= | ::?)}mxs, $additional, 2;
length($sep // '') > 0
or die "invalid input value definition: no separator\n";
s{\A\s+|\s+\z}{}gmxs for ($key, $val);
$val = decode_base64($val) if length($sep) == 2;
${traverse(\$common, $key)} = $val;
} ## end else [ if ($first eq '{') (})]
} ## end for my $additional (($args...))
@records = ({}) unless @records;
$_ = merge_hash_in_place(dclone($common), $_) for @records;
( run in 0.697 second using v1.01-cache-2.11-cpan-71847e10f99 )