EBook-Ishmael
view release on metacpan or search on metacpan
lib/EBook/Ishmael/EBook.pm view on Meta::CPAN
package EBook::Ishmael::EBook;
use 5.016;
our $VERSION = '2.04';
use strict;
use warnings;
use Exporter 'import';
our @EXPORT = qw(&ebook_id %EBOOK_FORMATS);
use EBook::Ishmael::EBook::CB7;
use EBook::Ishmael::EBook::CBR;
use EBook::Ishmael::EBook::CBZ;
use EBook::Ishmael::EBook::CHM;
use EBook::Ishmael::EBook::Epub;
use EBook::Ishmael::EBook::FictionBook2;
use EBook::Ishmael::EBook::HTML;
use EBook::Ishmael::EBook::KF8;
use EBook::Ishmael::EBook::Mobi;
use EBook::Ishmael::EBook::PalmDoc;
use EBook::Ishmael::EBook::PDF;
use EBook::Ishmael::EBook::Text;
use EBook::Ishmael::EBook::XHTML;
use EBook::Ishmael::EBook::Zip;
use EBook::Ishmael::EBook::zTXT;
our %EBOOK_FORMATS = map { lc $_ => "EBook::Ishmael::EBook::$_" } qw(
CB7 CBR CBZ CHM Epub FictionBook2 HTML KF8 Mobi PalmDoc PDF Text XHTML Zip
zTXT
);
sub ebook_id {
my $file = shift;
open my $fh, '<', $file
or die "Failed to open $file for reading: $!\n";
binmode $fh;
for my $f (
# Make sure text is last
sort {
return 1 if $a eq 'text';
return -1 if $b eq 'text';
return $a cmp $b;
} keys %EBOOK_FORMATS
) {
seek $fh, 0, 0;
if ($EBOOK_FORMATS{ $f }->heuristic($file, $fh)) {
close $fh;
return $f;
}
}
close $fh;
return undef;
}
sub new {
my $class = shift;
my $file = shift;
my $type = shift // ebook_id($file);
my $enc = shift;
my $net = shift;
if (not defined $type) {
die "Could not identify $file format\n";
}
my $obj = $EBOOK_FORMATS{ $type }->new($file, $enc, $net);
return $obj;
}
1;
=head1 NAME
EBook::Ishmael::EBook - Interface for processing ebook documents
=head1 SYNOPSIS
( run in 0.520 second using v1.01-cache-2.11-cpan-39bf76dae61 )