#!/usr/bin/perl -w
#
# Author:       David Griffith <[email protected]>
# Date:         January 1, 2019
# Version:      1.0
# License:      Public Domain
#
# Convert a mime.conf file to a mime.types file.
# Usage: mimeconf2mimetypes.pl <mime.conf> [-o <mime.types>]
#
# Some servers don't accept MIME type descriptions as a mime.conf file.
# For those situtations where you have a mime.conf file and you need
# mime.types, this script will quickly and easily do the conversion for
# you.

# The original motivation for creating this script was to make things
# easier when serving up a mirror of the Interactive Fiction Archive
# (http://ifarchive.org) with a Gopher server.  The specific gopher server
# being used, pygopherd(8), accepts a list of mime types as a mime.types
# file, not the Apache-style mime.conf.

use strict;
use Pod::Usage;
use File::Basename;
use Getopt::Long qw(:config no_ignore_case);

my $progname = basename($0);
my %options;
my $infile = $ARGV[0];
my $outfile;
my $line;
my $command;
my $type;
my $version = "1.0";
my @extension;

GetOptions(
       'usage|?' => \$options{usage},
       'h|help' => \$options{help},
       'o|output=s' => \$options{output},
       'v|version' => \$options{version}
       );

pod2usage(1) if $options{usage};
pod2usage(-verbose => 2) if $options{help};

if ($options{version}) {
       print "$progname version $version\n";
       exit;
}

if (!$infile) { pod2usage(1); }

if ($options{output}) {
       $outfile = $options{output};
       open (OUTFILE, ">", $outfile) or die "Unable to write to $outfile\n";
} else {
       *OUTFILE = *STDOUT;
}

open (INFILE, "<", $infile) or die "Unable to read $infile\n";

while ($line = <INFILE>) {
       if ($line =~ /.*\S.*/) {
               ($command, $type, @extension) = split(/\s+/, $line);
       }

       if ($command =~ "^AddType") {
               foreach $_ (@extension) {
                       print OUTFILE "$type $_\n";
               }
       }
}

__END__


=head1 NAME

mimeconf2mimetypes.pl - Convert a mime.conf file to a mime.types file

=head1 SYNOPSIS

mimeconf2mimetypes.pl <mime.conf> [-o <output file>]

=head1 DESCRIPTION

Some servers don't accept MIME type descriptions as a mime.conf file.
For those situtations where you have a mime.conf file and you need
mime.types, this script will quickly and easily do the conversion for
you.

=head2 Option flags

 -?                    Print simple usage message.
 -h                    Verbose help message.
 -o outfile            Write mime.types format to this file.

=head2 Examples

Basic invocation
   mimeconf2mimetypes.pl mime.conf > mime.types

Slightly trickier
   mimeconf2mimetypes.pl < mime.conf > mime.types
   cat /home/joe/mime.conf | genmimetypes > /etc/pygopherd/mime.types

Without redirection
   mimeconf2mimetypes.pl mime.conf -o /etc/pygopherd/mime.types

=head1 REVISION HISTORY

 Version 1.0           Initial public release

=head1 NOTES

The original motivation for creating this script was to make things
easier when serving up a mirror of the Interactive Fiction Archive
(http://ifarchive.org) with a Gopher server.  The specific gopher server
being used, pygopherd(8), accepts a list of mime types as a mime.types
file, not the Apache-style mime.conf.

=head1 LICENSE

Public Domain

=head1 AUTHOR

David Griffith <[email protected]>

=cut