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 )