Alvis-Convert
view release on metacpan or search on metacpan
lib/Alvis/Document/Type.pm view on Meta::CPAN
$ERR_FILE_TYPE
)=(0..2);
my %ErrMsgs=($ERR_OK=>"",
$ERR_DOC=>"No document.",
$ERR_FILE_TYPE=>"Unable to instantiate File::Type"
);
sub _set_err_state
{
my $self=shift;
my $errcode=shift;
my $errmsg=shift;
if (!defined($errcode))
{
confess("set_err_state() called with an undefined argument.");
}
if (exists($ErrMsgs{$errcode}))
{
if ($errcode==$ERR_OK)
{
$self->{errstr}="";
}
else
{
$self->{errstr}.=" " . $ErrMsgs{$errcode};
if (defined($errmsg))
{
$self->{errstr}.=" " . $errmsg;
}
}
}
else
{
confess("Internal error: set_err_state() called with an " .
"unrecognized argument ($errcode).")
}
}
sub errmsg
{
my $self=shift;
return $self->{errstr};
}
#############################################################################
#
# Methods
#
##############################################################################
sub new
{
my $proto=shift;
my $class=ref($proto)||$proto;
my $parent=ref($proto)&&$proto;
my $self={};
bless($self,$class);
$self->_init(@_);
$self->_set_err_state($ERR_OK);
$self->{fileType}=File::Type->new();
if (!defined($self->{fileType}))
{
$self->_set_err_state($ERR_FILE_TYPE);
return undef;
}
return $self;
}
sub _init
{
my $self=shift;
$self->{defaultType}='text';
$self->{defaultSubType}='plain';
if (defined(@_))
{
my %args=@_;
@$self{ keys %args }=values(%args);
}
}
#
# Returns similarly to MIME ($type,$sub_type), but is broader
#
sub guess
{
my $self=shift;
my $text=shift;
$self->_set_err_state($ERR_OK); # clean the slate
if (!defined($text))
{
$self->_set_err_state($ERR_DOC);
return undef;
}
my ($type,$sub_type);
# Try File::Type first
my $mime_type=$self->{fileType}->mime_type($text);
if (!defined($mime_type))
{
$type=$self->{defaultType};
$sub_type=$self->{defaultSubType};
}
else
{
($type,$sub_type)=split(/\//,$mime_type,-1);
}
# If the result is a generic one, check for our types of interest
( run in 1.141 second using v1.01-cache-2.11-cpan-39bf76dae61 )