App-MakeEPUB
view release on metacpan or search on metacpan
lib/App/MakeEPUB.pm view on Meta::CPAN
sub write_epub {
my ($self,$outname) = @_;
my $paths = $self->{path_ids};
my $epub = Archive::Zip->new();
my $m;
$m = $epub->addString('application/epub+zip', 'mimetype');
$m = $epub->addString($embed{'container.xml'}, 'META-INF/container.xml');
$m = $epub->addString($self->_substitute_template($embed{'content.opf'}),
'content.opf');
$m = $epub->addString($self->_substitute_template($embed{'toc.ncx'}),
'toc.ncx');
foreach my $path (keys %$paths) {
next if 'toc.ncx' eq $path;
$m = $epub->addFile($self->{epubdir} . '/' . $path, $path);
}
unless ($outname) {
$outname = $self->{epubdir} . '.epub';
}
unless (AZ_OK == $epub->writeToFileNamed($outname)) {
die "could not write to $self->{epubdir}.epub: $!";
}
} # write_epub()
sub _generate_guide {
my ($self) = @_;
my $data = $self->{data};
my @guide = ();
if (my $g = $data->{guide}) {
push @guide, q( <guide>);
foreach my $type (keys %$g) {
push @guide,
qq( <reference type="$type" title="$guidetitle{$type}")
. qq( href="$g->{$type}" />);
}
push @guide ,q( </guide>);
}
return join "\n", @guide;
} # _generate_guide()
sub _generate_manifest {
my ($self) = @_;
my $c_opf = $self->{path}->{'content.opf'};
my $paths = $self->{path_ids};
my @manifest = ();
my $type;
foreach my $path (keys %$paths) {
my $id = $paths->{$path};
next if $path eq 'mimetype';
next if $path eq 'META-INF/container.xml';
next if $path eq $c_opf;
if ($path =~ /\.html$/i) {
$type = 'application/xhtml+xml';
}
elsif ($path =~ /\.png$/i) {
$type = 'image/png';
}
elsif ($path =~ /\.jpe?g$/i) {
$type = 'image/jpeg';
}
elsif ($path =~ /toc\.ncx$/i) {
$type = 'application/x-dtbncx+xml';
$id = 'ncx';
}
elsif ($path =~ /\.css$/i) {
$type = 'text/css';
}
else {
die "Don't know type media-type for '$path'!";
}
push @manifest, qq( <item id="$id" href="$path" media-type="$type" />);
}
return join "\n", @manifest;
} # _generate_manifest()
sub _generate_metadata {
my ($self) = @_;
my @metadata = ();
my $md = $self->{data}->{metadata};
push(@metadata
,qq( <dc:identifier id="uid">$md->{identifier}</dc:identifier>)
, " <dc:language>$md->{language}</dc:language>"
, " <dc:title>$md->{title}</dc:title>");
push(@metadata
, " <dc:creator>$md->{creator}</dc:creator>") if ($md->{creator});
push(@metadata
, " <dc:publisher>$md->{publisher}</dc:publisher>"
) if ($md->{publisher});
push(@metadata
, " <dc:rights>$md->{rights}</dc:rights>"
) if ($md->{rights});
return join "\n", @metadata;
} # _generate_metadata()
sub _generate_spine {
my ($self) = @_;
my $sp = $self->{spine_order};
my $paths = $self->{path_ids};
my @spine = ();
foreach my $path (@$sp) {
my $id = $paths->{$path};
push @spine, qq( <itemref idref="$id" />);
}
return join "\n", @spine;
} # _generate_spine()
sub _generate_tocncx_head {
my ($self) = @_;
my $data = $self->{data}->{tocncx};
my @head = ();
foreach my $key (keys %$data) {
push @head, qq( <meta name="dtb:$key" content="$data->{$key}"/>);
}
return join "\n", @head;
} # _generate_tocncx_head()
( run in 2.366 seconds using v1.01-cache-2.11-cpan-df04353d9ac )