summaryrefslogtreecommitdiff
path: root/chromium/third_party/cygwin/lib/perl5/vendor_perl/5.10/LWP/MediaTypes.pm
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/cygwin/lib/perl5/vendor_perl/5.10/LWP/MediaTypes.pm')
-rw-r--r--chromium/third_party/cygwin/lib/perl5/vendor_perl/5.10/LWP/MediaTypes.pm299
1 files changed, 299 insertions, 0 deletions
diff --git a/chromium/third_party/cygwin/lib/perl5/vendor_perl/5.10/LWP/MediaTypes.pm b/chromium/third_party/cygwin/lib/perl5/vendor_perl/5.10/LWP/MediaTypes.pm
new file mode 100644
index 00000000000..8bdfe709eb3
--- /dev/null
+++ b/chromium/third_party/cygwin/lib/perl5/vendor_perl/5.10/LWP/MediaTypes.pm
@@ -0,0 +1,299 @@
+package LWP::MediaTypes;
+
+require Exporter;
+@ISA = qw(Exporter);
+@EXPORT = qw(guess_media_type media_suffix);
+@EXPORT_OK = qw(add_type add_encoding read_media_types);
+$VERSION = "5.810";
+
+require LWP::Debug;
+use strict;
+
+# note: These hashes will also be filled with the entries found in
+# the 'media.types' file.
+
+my %suffixType = (
+ 'txt' => 'text/plain',
+ 'html' => 'text/html',
+ 'gif' => 'image/gif',
+ 'jpg' => 'image/jpeg',
+ 'xml' => 'text/xml',
+);
+
+my %suffixExt = (
+ 'text/plain' => 'txt',
+ 'text/html' => 'html',
+ 'image/gif' => 'gif',
+ 'image/jpeg' => 'jpg',
+ 'text/xml' => 'xml',
+);
+
+#XXX: there should be some way to define this in the media.types files.
+my %suffixEncoding = (
+ 'Z' => 'compress',
+ 'gz' => 'gzip',
+ 'hqx' => 'x-hqx',
+ 'uu' => 'x-uuencode',
+ 'z' => 'x-pack',
+ 'bz2' => 'x-bzip2',
+);
+
+read_media_types();
+
+
+
+sub _dump {
+ require Data::Dumper;
+ Data::Dumper->new([\%suffixType, \%suffixExt, \%suffixEncoding],
+ [qw(*suffixType *suffixExt *suffixEncoding)])->Dump;
+}
+
+
+sub guess_media_type
+{
+ my($file, $header) = @_;
+ return undef unless defined $file;
+
+ my $fullname;
+ if (ref($file)) {
+ # assume URI object
+ $file = $file->path;
+ #XXX should handle non http:, file: or ftp: URIs differently
+ }
+ else {
+ $fullname = $file; # enable peek at actual file
+ }
+
+ my @encoding = ();
+ my $ct = undef;
+ for (file_exts($file)) {
+ # first check this dot part as encoding spec
+ if (exists $suffixEncoding{$_}) {
+ unshift(@encoding, $suffixEncoding{$_});
+ next;
+ }
+ if (exists $suffixEncoding{lc $_}) {
+ unshift(@encoding, $suffixEncoding{lc $_});
+ next;
+ }
+
+ # check content-type
+ if (exists $suffixType{$_}) {
+ $ct = $suffixType{$_};
+ last;
+ }
+ if (exists $suffixType{lc $_}) {
+ $ct = $suffixType{lc $_};
+ last;
+ }
+
+ # don't know nothing about this dot part, bail out
+ last;
+ }
+ unless (defined $ct) {
+ # Take a look at the file
+ if (defined $fullname) {
+ $ct = (-T $fullname) ? "text/plain" : "application/octet-stream";
+ }
+ else {
+ $ct = "application/octet-stream";
+ }
+ }
+
+ if ($header) {
+ $header->header('Content-Type' => $ct);
+ $header->header('Content-Encoding' => \@encoding) if @encoding;
+ }
+
+ wantarray ? ($ct, @encoding) : $ct;
+}
+
+
+sub media_suffix {
+ if (!wantarray && @_ == 1 && $_[0] !~ /\*/) {
+ return $suffixExt{$_[0]};
+ }
+ my(@type) = @_;
+ my(@suffix, $ext, $type);
+ foreach (@type) {
+ if (s/\*/.*/) {
+ while(($ext,$type) = each(%suffixType)) {
+ push(@suffix, $ext) if $type =~ /^$_$/;
+ }
+ }
+ else {
+ while(($ext,$type) = each(%suffixType)) {
+ push(@suffix, $ext) if $type eq $_;
+ }
+ }
+ }
+ wantarray ? @suffix : $suffix[0];
+}
+
+
+sub file_exts
+{
+ require File::Basename;
+ my @parts = reverse split(/\./, File::Basename::basename($_[0]));
+ pop(@parts); # never consider first part
+ @parts;
+}
+
+
+sub add_type
+{
+ my($type, @exts) = @_;
+ for my $ext (@exts) {
+ $ext =~ s/^\.//;
+ $suffixType{$ext} = $type;
+ }
+ $suffixExt{$type} = $exts[0] if @exts;
+}
+
+
+sub add_encoding
+{
+ my($type, @exts) = @_;
+ for my $ext (@exts) {
+ $ext =~ s/^\.//;
+ $suffixEncoding{$ext} = $type;
+ }
+}
+
+
+sub read_media_types
+{
+ my(@files) = @_;
+
+ local($/, $_) = ("\n", undef); # ensure correct $INPUT_RECORD_SEPARATOR
+
+ my @priv_files = ();
+ if($^O eq "MacOS") {
+ push(@priv_files, "$ENV{HOME}:media.types", "$ENV{HOME}:mime.types")
+ if defined $ENV{HOME}; # Some does not have a home (for instance Win32)
+ }
+ else {
+ push(@priv_files, "$ENV{HOME}/.media.types", "$ENV{HOME}/.mime.types")
+ if defined $ENV{HOME}; # Some doesn't have a home (for instance Win32)
+ }
+
+ # Try to locate "media.types" file, and initialize %suffixType from it
+ my $typefile;
+ unless (@files) {
+ if($^O eq "MacOS") {
+ @files = map {$_."LWP:media.types"} @INC;
+ }
+ else {
+ @files = map {"$_/LWP/media.types"} @INC;
+ }
+ push @files, @priv_files;
+ }
+ for $typefile (@files) {
+ local(*TYPE);
+ open(TYPE, $typefile) || next;
+ LWP::Debug::debug("Reading media types from $typefile");
+ while (<TYPE>) {
+ next if /^\s*#/; # comment line
+ next if /^\s*$/; # blank line
+ s/#.*//; # remove end-of-line comments
+ my($type, @exts) = split(' ', $_);
+ add_type($type, @exts);
+ }
+ close(TYPE);
+ }
+}
+
+1;
+
+
+__END__
+
+=head1 NAME
+
+LWP::MediaTypes - guess media type for a file or a URL
+
+=head1 SYNOPSIS
+
+ use LWP::MediaTypes qw(guess_media_type);
+ $type = guess_media_type("/tmp/foo.gif");
+
+=head1 DESCRIPTION
+
+This module provides functions for handling media (also known as
+MIME) types and encodings. The mapping from file extensions to media
+types is defined by the F<media.types> file. If the F<~/.media.types>
+file exists it is used instead.
+For backwards compatibility we will also look for F<~/.mime.types>.
+
+The following functions are exported by default:
+
+=over 4
+
+=item guess_media_type( $filename )
+
+=item guess_media_type( $uri )
+
+=item guess_media_type( $filename_or_uri, $header_to_modify )
+
+This function tries to guess media type and encoding for a file or a URI.
+It returns the content type, which is a string like C<"text/html">.
+In array context it also returns any content encodings applied (in the
+order used to encode the file). You can pass a URI object
+reference, instead of the file name.
+
+If the type can not be deduced from looking at the file name,
+then guess_media_type() will let the C<-T> Perl operator take a look.
+If this works (and C<-T> returns a TRUE value) then we return
+I<text/plain> as the type, otherwise we return
+I<application/octet-stream> as the type.
+
+The optional second argument should be a reference to a HTTP::Headers
+object or any object that implements the $obj->header method in a
+similar way. When it is present the values of the
+'Content-Type' and 'Content-Encoding' will be set for this header.
+
+=item media_suffix( $type, ... )
+
+This function will return all suffixes that can be used to denote the
+specified media type(s). Wildcard types can be used. In a scalar
+context it will return the first suffix found. Examples:
+
+ @suffixes = media_suffix('image/*', 'audio/basic');
+ $suffix = media_suffix('text/html');
+
+=back
+
+The following functions are only exported by explicit request:
+
+=over 4
+
+=item add_type( $type, @exts )
+
+Associate a list of file extensions with the given media type.
+Example:
+
+ add_type("x-world/x-vrml" => qw(wrl vrml));
+
+=item add_encoding( $type, @ext )
+
+Associate a list of file extensions with an encoding type.
+Example:
+
+ add_encoding("x-gzip" => "gz");
+
+=item read_media_types( @files )
+
+Parse media types files and add the type mappings found there.
+Example:
+
+ read_media_types("conf/mime.types");
+
+=back
+
+=head1 COPYRIGHT
+
+Copyright 1995-1999 Gisle Aas.
+
+This library is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+