App-MakeEPUB
view release on metacpan or search on metacpan
lib/App/MakeEPUB.pm view on Meta::CPAN
my @spo = ();
foreach my $path (keys %$paths) {
next unless $path =~ /^(.+)\.html/i;
my $si = $1;
$si =~ s|^.+/([^/]+)$|$1|;
$o2p{$si} = $path;
}
if ($order) {
@spo = map { $o2p{$_} } split /,/, $order;
}
else {
@spo = map { $o2p{$_} } sort keys %o2p;
}
$self->{spine_order} = \@spo;
return @spo;
} # _spine_order()
sub _substitute_template {
my ($self,$tmpl,$data) = @_;
my $out = "";
unless (exists $self->{substitutes}) {
my $s = {};
$s->{'%%GUIDE%%'} = $self->_generate_guide(),
$s->{'%%MANIFEST%%'} = $self->_generate_manifest(),
$s->{'%%METADATA%%'} = $self->_generate_metadata(),
$s->{'%%SPINE%%'} = $self->_generate_spine(),
$s->{'%%TOCNCXDOCTITLE%%'} = '<text>'
. $self->{data}->{metadata}->{title}
. '</text>',
$s->{'%%TOCNCXHEAD%%'} = $self->_generate_tocncx_head(),
$s->{'%%TOCNCXNAVMAP%%'} = $self->_generate_tocncx_navMap(),
$self->{substitutes} = $s;
}
my $substitutes = $self->{substitutes};
my $replace = sub {
my ($pattern) = @_;
return $substitutes->{$pattern} ? $substitutes->{$pattern} : '';
};
my @lines = split /\n/, $tmpl;
foreach (@lines) {
s/(%%[^%]+%%)/$replace->($1)/e;
$out .= $_ . "\n";
}
return $out;
} # _substitute_template()
# Functions not bound to an object.
# ---------------------------------
# _tocncf_navPoints_from_array( {
# counter => $cnt,
# array => $array,
# indent => " ",
# } )
#
# Returns a string containing <navPoint> entries for the <navMap> in toc.ncf
# from the given array. The first id is named "navPoint-$cnt" and the first
# playOrder "$cnt". $cnt is updated to the next number after the last
# playOrder.
#
# The array should be of the form [ [ $fname, $anchor, $text, $extra ], ... ],
# where $fname is the name of the file, $anchor the id of an html anchor
# (<a id="$anchor" ...>) and $text the text belonging to the anchor. The
# fourth field ($extra) is optional and can be used for next level navPoints.
#
sub _tocncf_navPoints_from_array {
my ($args) = @_;
my @anchors = @{$args->{array}};
my $indent = $args->{indent} || "";
my $np = sub {
my $count = $args->{counter}++;
my $href = ($_[0]->[1]) ? $_[0]->[0] . "#" . $_[0]->[1] : $_[0]->[0];
my $label = $_[0]->[2];
my $extra = $_[0]->[3] || '';
return << "EONAVPOINT";
$indent<navPoint id="navpoint-$count" playOrder="$count">
$indent <navLabel><text>$label</text></navLabel>
$indent <content src="$href" />
$extra$indent</navPoint>
EONAVPOINT
};
my $navPoints = join("", map { $np->($_) } @anchors);
} # _tocncf_navPoints_from_array()
1; # Magic true value required at end of module
__END__
=head1 NAME
App::MakeEPUB - Create an EPUB ebook
=head1 VERSION
This document describes App::MakeEPUB version v0.3.2
=head1 SYNOPSIS
use App::MakeEPUB;
my $epub = App::MakeEPUB->new( { epubdir => $epubdir } );
$epub->add_metadata( { identifier => $identifier,
language => $language,
title => $title,
creator => $creator,
publisher => $publisher,
rights => $rights,
cover => $cover, } );
$epub->write_epub();
=for author to fill in:
Brief code example(s) here showing commonest usage(s).
This section will be as far as many users bother reading
so make it as educational and exeplary as possible.
( run in 1.532 second using v1.01-cache-2.11-cpan-39bf76dae61 )