
=head1 NAME

MIME::Type - Definition of one MIME type



=head1 SYNOPSIS

 use MIME::Types;
 my $mimetypes = MIME::Types->new;
 my MIME::Type $plaintext = $mimetypes->type('text/plain');
 print $plaintext->mediaType;   # text
 print $plaintext->subType;     # plain

 my @ext = $plaintext->extensions;
 print "@ext"                   # txt asc c cc h hh cpp

 print $plaintext->encoding     # 8bit
 if($plaintext->isBinary)       # false
 if($plaintext->isAscii)        # true
 if($plaintext->equals('text/plain') {...}
 if($plaintext eq 'text/plain') # same

 print MIME::Type->simplified('x-appl/x-zip') #  'appl/zip'


=head1 DESCRIPTION

MIME types are used in MIME entities, for instance as part of e-mail
and HTTP traffic.  Sometimes real knowledge about a mime-type is need.
Objects of C<MIME::Type> store the information on one such type.

This module is built to conform to the MIME types of RFC's 2045 and 2231.
It follows the official IANA registry at
F<http://www.iana.org/assignments/media-types/>
and the collection kept at F<http://www.ltsw.se/knbase/internet/mime.htp>


=head1 OVERLOADED


overload: B<string comparison>

=over 4

When a MIME::Type object is compared to either a string or an other
MIME::TYpe, the L<equals()|MIME::Type/"Knowledge"> method is called.  Comparison is smart,
which means that it extends common string comparison with some
features which are defined in the related RFCs.

=back

overload: B<stringification>

=over 4

The stringification (use of the object in a place where a string
is required) will result in the type name, the same as L<type()|MIME::Type/"Attributes">
returns.

I<Example:> use of stringification


 my $mime = MIME::Type->new('text/html');
 print "$mime\n";   # explicit stringification
 print $mime;       # implicit stringification

=back


=head1 METHODS


=head2 Initiation


MIME::Type-E<gt>B<new>(OPTIONS)

=over 4

Create (I<instantiate>) a new MIME::Type object which manages one
mime type.

 Option    --Defined in     --Default
 encoding                     <depends on type>
 extensions                   []
 simplified                   <derived from type>
 system                       undef
 type                         <required>

. encoding '7bit'|'8bit'|'base64'|'quoted-printable'

=over 4

How must this data be encoded to be transported safely.  The default
depends on the type: mimes with as main type C<text/> will default
to C<quoted-printable> and all other to C<base64>.

=back

. extensions REF-ARRAY

=over 4

An array of extensions which are using this mime.

=back

. simplified STRING

=over 4

The mime types main- and sub-label can both start with C<x->, to indicate
that is a non-registered name.  Of course, after registration this flag
can disappear which adds to the confusion.  The simplified string has the
C<x-> thingies removed and are translated to lower-case.

=back

. system REGEX

=over 4

Regular expression which defines for which systems this rule is valid.  The
REGEX is matched on C<$^O>.

=back

. type STRING

=over 4

The type which is defined here.  It consists of a I<type> and a I<sub-type>,
both case-insensitive.  This module will return lower-case, but accept
upper-case.

=back

=back

=head2 Attributes


$obj-E<gt>B<encoding>

=over 4

Returns the type of encoding which is required to transport data of this
type safely.

=back

$obj-E<gt>B<extensions>

=over 4

Returns a list of extensions which are known to be used for this
mime type.

=back

$obj-E<gt>B<simplified>([STRING])

MIME::Type-E<gt>B<simplified>([STRING])

=over 4

Returns the simplified mime type for this object or the specified STRING.
Mime type names can get officially registered.  Until then, they have to
carry an C<x-> preamble to indicate that.  Of course, after recognition,
the C<x-> can disappear.  In many cases, we prefer the simplified version
of the type.

I<Example:> results of simplified()


 my $mime = MIME::Type->new(type => 'x-appl/x-zip');
 print $mime->simplified;                     # 'appl/zip'
 print $mime->simplified('text/plain');       # 'text/plain'
 print MIME::Type->simplified('x-xyz/x-abc'); # 'xyz/abc'

=back

$obj-E<gt>B<system>

=over 4

Returns the regular expression which can be used to determine whether this
type is active on the system where you are working on.

=back

$obj-E<gt>B<type>

=over 4

Returns the long type of this object, for instance C<'text/plain'>

=back

=head2 Knowledge


$obj-E<gt>B<equals>(STRING|MIME)

=over 4

Compare this mime-type object with a STRING or other object.  In case of
a STRING, simplification will take place.

=back

$obj-E<gt>B<isAscii>

=over 4

Returns false when the encoding is base64, and true otherwise.  All encodings
except base64 are text encodings.

=back

$obj-E<gt>B<isBinary>

=over 4

Returns true when the encoding is base64.

=back

$obj-E<gt>B<isRegistered>

=over 4

Mime-types which are not registered by IANA nor defined in RFCs shall
start with an C<x->.  This counts for as well the media-type as the
sub-type.  In case either one of the types starts with C<x-> this
method will return false.

=back

$obj-E<gt>B<isSignature>

=over 4

Returns true when the type is in the list of known signatures.

=back

$obj-E<gt>B<mediaType>

=over 4

The media type of the simplified mime.
For C<'text/plain'> it will return C<'text'>.

For historical reasons, the C<'mainType'> method still can be used
to retreive the same value.  However, that method is deprecated.

=back

$obj-E<gt>B<subType>

=over 4

The sub type of the simplified mime.
For C<'text/plain'> it will return C<'plain'>.

=back




=head1 DIAGNOSTICS

I<Error:> Type parameter is obligatory.

When a L<MIME::Type|MIME::Type> object is created, the type itself must be
specified with the C<type> option flag.






=head1 REFERENCES

See the Mime::Types website at L<http://perl.overmeer.net/mimetypes/> for more details.

=head1 COPYRIGHTS

Module version 1.18.
Written by Mark Overmeer (mimetypes@overmeer.net).  See the ChangeLog for
other contributors.

Copyright (c) 2001-2003 by the author(s). All rights reserved.  This program
is free software; you can redistribute it and/or modify it under the
same terms as Perl itself.


