Commit 09cb30d1 by minad

support mime type comments

parent e51cc73f
......@@ -16,15 +16,22 @@ class MimeMagic
# Add custom mime type. Arguments:
# * <i>type</i>: Mime type
# * <i>extensions</i>: String list of file extensions
# * <i>parents</i>: String list of parent mime types
# * <i>magics</i>: Mime magic specification array
def self.add(type, extensions, parents, *magics)
TYPES[type] = [extensions, parents, magics]
# * <i>options</i>: Options hash
#
# Option keys:
# * <i>:extensions</i>: String list or single string of file extensions
# * <i>:parents</i>: String list or single string of parent mime types
# * <i>:magic</i>: Mime magic specification
# * <i>:comment</i>: Comment string
def self.add(type, options = {})
extensions = [options[:extensions]].flatten.compact
TYPES[type] = [extensions,
[options[:parents]].flatten.compact,
options[:comment]]
extensions.each do |ext|
EXTENSIONS[ext] = type
end
MAGIC.unshift [type, magics] if magics
MAGIC.unshift [type, [options[:magic]].flatten.compact] if options[:magic]
end
# Returns true if type is a text format
......@@ -52,9 +59,14 @@ class MimeMagic
TYPES.key?(type) ? TYPES[type][0] : []
end
# Get mime comment
def comment
(TYPES.key?(type) ? TYPES[type][2] : nil).to_s
end
# Lookup mime type by file extension
def self.by_extension(ext)
ext = ext.downcase
ext = ext.to_s.downcase
mime = EXTENSIONS[ext] || (ext[0..0] == '.' && EXTENSIONS[ext[1..-1]])
mime ? new(mime) : nil
end
......
......@@ -696,514 +696,514 @@ class MimeMagic
'zoo' => 'application/x-zoo',
}
TYPES = {
'application/andrew-inset' => [%w(ez), %w()],
'application/annodex' => [%w(anx), %w()],
'application/atom+xml' => [%w(atom), %w(application/xml)],
'application/dicom' => [%w(dcm), %w()],
'application/docbook+xml' => [%w(docbook), %w(application/xml)],
'application/ecmascript' => [%w(es), %w(text/plain)],
'application/epub+zip' => [%w(epub), %w()],
'application/gnunet-directory' => [%w(gnd), %w()],
'application/illustrator' => [%w(ai), %w()],
'application/javascript' => [%w(js), %w(text/x-csrc)],
'application/mathematica' => [%w(nb), %w(text/plain)],
'application/mathml+xml' => [%w(mml), %w(application/xml)],
'application/mbox' => [%w(mbox), %w(text/plain)],
'application/metalink+xml' => [%w(metalink), %w(application/xml)],
'application/msword' => [%w(doc), %w(application/x-ole-storage)],
'application/msword-template' => [%w(dot), %w(application/msword)],
'application/mxf' => [%w(mxf), %w()],
'application/octet-stream' => [%w(bin), %w()],
'application/oda' => [%w(oda), %w()],
'application/ogg' => [%w(ogx), %w()],
'application/pdf' => [%w(pdf), %w()],
'application/pgp-encrypted' => [%w(asc gpg pgp), %w()],
'application/pgp-keys' => [%w(asc pkr skr), %w(text/plain)],
'application/pkcs10' => [%w(p10), %w()],
'application/pkcs7-signature' => [%w(p7s), %w(text/plain)],
'application/pkix-cert' => [%w(cer), %w()],
'application/pkix-crl' => [%w(crl), %w()],
'application/pkix-pkipath' => [%w(pkipath), %w()],
'application/postscript' => [%w(ps), %w(text/plain)],
'application/ram' => [%w(ram), %w(text/plain)],
'application/rdf+xml' => [%w(owl rdf rdfs), %w(application/xml)],
'application/rss+xml' => [%w(rss), %w(application/xml)],
'application/rtf' => [%w(rtf), %w(text/plain)],
'application/sdp' => [%w(sdp), %w()],
'application/sieve' => [%w(siv), %w(application/xml)],
'application/smil' => [%w(kino smi smil sml), %w(application/xml)],
'application/vnd.apple.mpegurl' => [%w(m3u m3u8), %w()],
'application/vnd.corel-draw' => [%w(cdr), %w()],
'application/vnd.emusic-emusic_package' => [%w(emp), %w()],
'application/vnd.google-earth.kml+xml' => [%w(kml), %w(application/xml)],
'application/vnd.google-earth.kmz' => [%w(kmz), %w(application/zip)],
'application/vnd.hp-hpgl' => [%w(hpgl), %w()],
'application/vnd.hp-pcl' => [%w(pcl), %w()],
'application/vnd.iccprofile' => [%w(icc icm), %w()],
'application/vnd.lotus-1-2-3' => [%w(123 wk1 wk3 wk4 wks), %w()],
'application/vnd.mozilla.xul+xml' => [%w(xul), %w(application/xml)],
'application/vnd.ms-access' => [%w(mdb), %w()],
'application/vnd.ms-cab-compressed' => [%w(cab), %w()],
'application/vnd.ms-excel' => [%w(xla xlc xld xll xlm xls xlt xlw), %w()],
'application/vnd.ms-powerpoint' => [%w(pot pps ppt ppz), %w()],
'application/vnd.ms-tnef' => [%w(tnef tnf), %w()],
'application/vnd.ms-works' => [%w(wcm wdb wks wps), %w(application/x-ole-storage)],
'application/vnd.ms-wpl' => [%w(wpl), %w()],
'application/vnd.ms-xpsdocument' => [%w(xps), %w(application/zip)],
'application/vnd.oasis.opendocument.chart' => [%w(odc), %w(application/zip)],
'application/vnd.oasis.opendocument.chart-template' => [%w(otc), %w(application/zip)],
'application/vnd.oasis.opendocument.database' => [%w(odb), %w(application/zip)],
'application/vnd.oasis.opendocument.formula' => [%w(odf), %w(application/zip)],
'application/vnd.oasis.opendocument.formula-template' => [%w(otf), %w(application/zip)],
'application/vnd.oasis.opendocument.graphics' => [%w(odg), %w(application/zip)],
'application/vnd.oasis.opendocument.graphics-flat-xml' => [%w(fodg), %w(application/xml)],
'application/vnd.oasis.opendocument.graphics-template' => [%w(otg), %w(application/zip)],
'application/vnd.oasis.opendocument.image' => [%w(odi), %w(application/zip)],
'application/vnd.oasis.opendocument.presentation' => [%w(odp), %w(application/zip)],
'application/vnd.oasis.opendocument.presentation-flat-xml' => [%w(fodp), %w(application/xml)],
'application/vnd.oasis.opendocument.presentation-template' => [%w(otp), %w(application/zip)],
'application/vnd.oasis.opendocument.spreadsheet' => [%w(ods), %w(application/zip)],
'application/vnd.oasis.opendocument.spreadsheet-flat-xml' => [%w(fods), %w(application/xml)],
'application/vnd.oasis.opendocument.spreadsheet-template' => [%w(ots), %w(application/zip)],
'application/vnd.oasis.opendocument.text' => [%w(odt), %w(application/zip)],
'application/vnd.oasis.opendocument.text-flat-xml' => [%w(fodt), %w(application/xml)],
'application/vnd.oasis.opendocument.text-master' => [%w(odm), %w(application/zip)],
'application/vnd.oasis.opendocument.text-template' => [%w(ott), %w(application/zip)],
'application/vnd.oasis.opendocument.text-web' => [%w(oth), %w(application/zip)],
'application/vnd.openofficeorg.extension' => [%w(oxt), %w(application/zip)],
'application/vnd.openxmlformats-officedocument.presentationml.presentation' => [%w(pptm pptx), %w(application/zip)],
'application/vnd.openxmlformats-officedocument.presentationml.slideshow' => [%w(ppsx), %w(application/zip)],
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => [%w(xlsm xlsx), %w(application/zip)],
'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => [%w(docm docx), %w(application/zip)],
'application/vnd.rn-realmedia' => [%w(rm rmj rmm rms rmvb rmx), %w()],
'application/vnd.stardivision.calc' => [%w(sdc), %w()],
'application/vnd.stardivision.chart' => [%w(sds), %w()],
'application/vnd.stardivision.draw' => [%w(sda), %w()],
'application/vnd.stardivision.impress' => [%w(sdd sdp), %w()],
'application/vnd.stardivision.mail' => [%w(smd), %w()],
'application/vnd.stardivision.math' => [%w(smf), %w()],
'application/vnd.stardivision.writer' => [%w(sdw sgl vor), %w()],
'application/vnd.sun.xml.calc' => [%w(sxc), %w(application/zip)],
'application/vnd.sun.xml.calc.template' => [%w(stc), %w(application/zip)],
'application/vnd.sun.xml.draw' => [%w(sxd), %w(application/zip)],
'application/vnd.sun.xml.draw.template' => [%w(std), %w(application/zip)],
'application/vnd.sun.xml.impress' => [%w(sxi), %w(application/zip)],
'application/vnd.sun.xml.impress.template' => [%w(sti), %w(application/zip)],
'application/vnd.sun.xml.math' => [%w(sxm), %w(application/zip)],
'application/vnd.sun.xml.writer' => [%w(sxw), %w(application/zip)],
'application/vnd.sun.xml.writer.global' => [%w(sxg), %w(application/zip)],
'application/vnd.sun.xml.writer.template' => [%w(stw), %w(application/zip)],
'application/vnd.symbian.install' => [%w(sis), %w()],
'application/vnd.wordperfect' => [%w(wp wp4 wp5 wp6 wpd wpp), %w()],
'application/x-7z-compressed' => [%w(7z), %w()],
'application/x-abiword' => [%w(abw abw.crashed abw.gz zabw), %w(application/xml)],
'application/x-ace' => [%w(ace), %w()],
'application/x-alz' => [%w(alz), %w()],
'application/x-amipro' => [%w(sam), %w()],
'application/x-aportisdoc' => [%w(pdb pdc), %w(application/x-palm-database)],
'application/x-applix-spreadsheet' => [%w(as), %w()],
'application/x-applix-word' => [%w(aw), %w()],
'application/x-archive' => [%w(a), %w()],
'application/x-arj' => [%w(arj), %w()],
'application/x-asp' => [%w(asp), %w(text/plain)],
'application/x-awk' => [%w(awk), %w(application/x-executable text/plain)],
'application/x-bcpio' => [%w(bcpio), %w()],
'application/x-bittorrent' => [%w(torrent), %w()],
'application/x-blender' => [%w(blend blend blender), %w()],
'application/x-bzdvi' => [%w(dvi.bz2), %w()],
'application/x-bzip' => [%w(bz bz2), %w()],
'application/x-bzip-compressed-tar' => [%w(tar.bz tar.bz2 tbz tbz2), %w(application/x-bzip)],
'application/x-bzpdf' => [%w(pdf.bz2), %w()],
'application/x-bzpostscript' => [%w(ps.bz2), %w()],
'application/x-cb7' => [%w(cb7), %w(application/x-7z-compressed)],
'application/x-cbr' => [%w(cbr), %w(application/x-rar)],
'application/x-cbt' => [%w(cbt), %w(application/x-tar)],
'application/x-cbz' => [%w(cbz), %w(application/zip)],
'application/x-cd-image' => [%w(iso iso9660), %w()],
'application/x-cdrdao-toc' => [%w(toc), %w(text/plain)],
'application/x-chess-pgn' => [%w(pgn), %w(text/plain)],
'application/x-chm' => [%w(chm), %w()],
'application/x-cisco-vpn-settings' => [%w(pcf), %w()],
'application/x-compress' => [%w(z), %w()],
'application/x-compressed-tar' => [%w(tar.gz tgz), %w()],
'application/x-cpio' => [%w(cpio), %w()],
'application/x-cpio-compressed' => [%w(cpio.gz), %w()],
'application/x-csh' => [%w(csh), %w(application/x-shellscript text/plain)],
'application/x-cue' => [%w(cue), %w(text/plain)],
'application/x-dar' => [%w(dar), %w()],
'application/x-dbf' => [%w(dbf), %w()],
'application/x-dc-rom' => [%w(dc), %w()],
'application/x-deb' => [%w(deb), %w()],
'application/x-designer' => [%w(ui), %w()],
'application/x-desktop' => [%w(desktop kdelnk), %w(text/plain)],
'application/x-dia-diagram' => [%w(dia), %w(application/xml)],
'application/x-dvi' => [%w(dvi), %w()],
'application/x-e-theme' => [%w(etheme), %w()],
'application/x-egon' => [%w(egon), %w()],
'application/x-fictionbook+xml' => [%w(fb2), %w(application/xml)],
'application/x-fluid' => [%w(fl), %w(text/plain)],
'application/x-font-afm' => [%w(afm), %w()],
'application/x-font-bdf' => [%w(bdf), %w()],
'application/x-font-linux-psf' => [%w(psf), %w()],
'application/x-font-otf' => [%w(otf), %w()],
'application/x-font-pcf' => [%w(pcf pcf.gz pcf.z), %w()],
'application/x-font-speedo' => [%w(spd), %w()],
'application/x-font-ttf' => [%w(ttc ttf), %w()],
'application/x-font-ttx' => [%w(ttx), %w(text/xml)],
'application/x-font-type1' => [%w(gsf pfa pfb), %w(application/postscript)],
'application/x-gameboy-rom' => [%w(gb), %w()],
'application/x-gba-rom' => [%w(gba), %w()],
'application/x-gedcom' => [%w(ged gedcom), %w()],
'application/x-genesis-rom' => [%w(gen md), %w()],
'application/x-gettext-translation' => [%w(gmo mo), %w()],
'application/x-glade' => [%w(glade), %w(application/xml)],
'application/x-gnucash' => [%w(gnc gnucash xac), %w()],
'application/x-gnumeric' => [%w(gnumeric), %w()],
'application/x-gnuplot' => [%w(gnuplot gp gplt), %w(text/plain)],
'application/x-go-sgf' => [%w(sgf), %w(text/plain)],
'application/x-graphite' => [%w(gra), %w()],
'application/x-gz-font-linux-psf' => [%w(psf.gz), %w(application/x-gzip)],
'application/x-gzdvi' => [%w(dvi.gz), %w(application/x-gzip)],
'application/x-gzip' => [%w(gz), %w()],
'application/x-gzpdf' => [%w(pdf.gz), %w(application/x-gzip)],
'application/x-gzpostscript' => [%w(ps.gz), %w(application/x-gzip)],
'application/x-hdf' => [%w(hdf), %w()],
'application/x-hwp' => [%w(hwp), %w()],
'application/x-hwt' => [%w(hwt), %w()],
'application/x-ica' => [%w(ica), %w(text/plain)],
'application/x-it87' => [%w(it87), %w(text/plain)],
'application/x-java' => [%w(class), %w()],
'application/x-java-archive' => [%w(jar), %w()],
'application/x-java-jce-keystore' => [%w(jceks), %w()],
'application/x-java-jnlp-file' => [%w(jnlp), %w(application/xml)],
'application/x-java-keystore' => [%w(jks ks), %w()],
'application/x-java-pack200' => [%w(pack), %w()],
'application/x-jbuilder-project' => [%w(jpr jpx), %w()],
'application/x-karbon' => [%w(karbon), %w()],
'application/x-kchart' => [%w(chrt), %w()],
'application/x-kexi-connectiondata' => [%w(kexic), %w()],
'application/x-kexiproject-shortcut' => [%w(kexis), %w()],
'application/x-kexiproject-sqlite2' => [%w(kexi), %w(application/x-sqlite2)],
'application/x-kexiproject-sqlite3' => [%w(kexi), %w(application/x-sqlite3)],
'application/x-kformula' => [%w(kfo), %w()],
'application/x-killustrator' => [%w(kil), %w()],
'application/x-kivio' => [%w(flw), %w()],
'application/x-kontour' => [%w(kon), %w()],
'application/x-kpovmodeler' => [%w(kpm), %w()],
'application/x-kpresenter' => [%w(kpr kpt), %w()],
'application/x-krita' => [%w(kra), %w()],
'application/x-kspread' => [%w(ksp), %w()],
'application/x-kugar' => [%w(kud), %w()],
'application/x-kword' => [%w(kwd kwt), %w()],
'application/x-lha' => [%w(lha lzh), %w()],
'application/x-lhz' => [%w(lhz), %w()],
'application/x-linguist' => [%w(ts), %w()],
'application/x-lyx' => [%w(lyx), %w(text/plain)],
'application/x-lzip' => [%w(lz), %w()],
'application/x-lzma' => [%w(lzma), %w()],
'application/x-lzma-compressed-tar' => [%w(tar.lzma tlz), %w()],
'application/x-lzop' => [%w(lzo), %w()],
'application/x-m4' => [%w(m4), %w(text/plain)],
'application/x-magicpoint' => [%w(mgp), %w(text/plain)],
'application/x-markaby' => [%w(mab), %w(application/x-ruby)],
'application/x-mif' => [%w(mif), %w()],
'application/x-ms-dos-executable' => [%w(exe), %w()],
'application/x-msi' => [%w(msi), %w(application/x-ole-storage)],
'application/x-mswrite' => [%w(wri), %w()],
'application/x-msx-rom' => [%w(msx), %w()],
'application/x-n64-rom' => [%w(n64), %w()],
'application/x-navi-animation' => [%w(ani), %w()],
'application/x-nes-rom' => [%w(nes), %w()],
'application/x-netcdf' => [%w(cdf nc), %w()],
'application/x-netshow-channel' => [%w(nsc), %w(video/x-ms-asf)],
'application/x-nintendo-ds-rom' => [%w(nds), %w()],
'application/x-object' => [%w(o), %w()],
'application/x-oleo' => [%w(oleo), %w()],
'application/x-pak' => [%w(pak), %w()],
'application/x-palm-database' => [%w(pdb prc), %w()],
'application/x-par2' => [%w(par2 par2), %w()],
'application/x-perl' => [%w(al perl pl pm), %w(application/x-executable text/plain)],
'application/x-php' => [%w(php php3 php4), %w(text/plain)],
'application/x-pkcs12' => [%w(p12 pfx), %w()],
'application/x-pkcs7-certificates' => [%w(p7b spc), %w()],
'application/x-planperfect' => [%w(pln), %w()],
'application/x-pocket-word' => [%w(psw), %w()],
'application/x-pw' => [%w(pw), %w()],
'application/x-python-bytecode' => [%w(pyc pyo), %w()],
'application/x-quattropro' => [%w(wb1 wb2 wb3), %w()],
'application/x-quicktime-media-link' => [%w(qtl), %w(video/quicktime)],
'application/x-qw' => [%w(qif), %w()],
'application/x-rar' => [%w(rar), %w()],
'application/x-reject' => [%w(rej), %w(text/plain)],
'application/x-rpm' => [%w(rpm), %w()],
'application/x-ruby' => [%w(rb), %w(application/x-executable text/plain)],
'application/x-sami' => [%w(sami smi), %w(text/plain)],
'application/x-shar' => [%w(shar), %w()],
'application/x-shared-library-la' => [%w(la), %w(text/plain)],
'application/x-sharedlib' => [%w(so), %w()],
'application/x-shellscript' => [%w(sh), %w(application/x-executable text/plain)],
'application/x-shockwave-flash' => [%w(spl swf), %w()],
'application/x-shorten' => [%w(shn), %w()],
'application/x-siag' => [%w(siag), %w()],
'application/x-smaf' => [%w(mmf smaf), %w()],
'application/x-sms-rom' => [%w(gg sms), %w()],
'application/x-snes-rom' => [%w(smc), %w()],
'application/x-spss-por' => [%w(por), %w()],
'application/x-spss-sav' => [%w(sav), %w()],
'application/x-stuffit' => [%w(sit), %w()],
'application/x-subrip' => [%w(srt), %w(text/plain)],
'application/x-sv4cpio' => [%w(sv4cpio), %w()],
'application/x-sv4crc' => [%w(sv4crc), %w()],
'application/x-t602' => [%w(602), %w()],
'application/x-tar' => [%w(gtar tar), %w()],
'application/x-tarz' => [%w(tar.z), %w()],
'application/x-tex-gf' => [%w(gf), %w()],
'application/x-tex-pk' => [%w(pk), %w()],
'application/x-tgif' => [%w(obj), %w()],
'application/x-theme' => [%w(theme), %w(application/x-desktop)],
'application/x-trash' => [%w(bak old sik), %w()],
'application/x-troff-man' => [%w(man), %w(text/plain)],
'application/x-tzo' => [%w(tar.lzo tzo), %w()],
'application/x-ufraw' => [%w(ufraw), %w(text/xml)],
'application/x-ustar' => [%w(ustar), %w()],
'application/x-wais-source' => [%w(src), %w()],
'application/x-windows-themepack' => [%w(themepack), %w(application/vnd.ms-cab-compressed)],
'application/x-wpg' => [%w(wpg), %w()],
'application/x-x509-ca-cert' => [%w(cert crt der pem), %w()],
'application/x-xbel' => [%w(xbel), %w(application/xml)],
'application/x-xliff' => [%w(xlf xliff), %w(application/xml)],
'application/x-xz' => [%w(xz), %w()],
'application/x-xz-compressed-tar' => [%w(tar.xz txz), %w()],
'application/x-zoo' => [%w(zoo), %w()],
'application/xhtml+xml' => [%w(xhtml), %w(application/xml)],
'application/xml' => [%w(xbl xml), %w(text/plain)],
'application/xml-dtd' => [%w(dtd), %w(text/plain)],
'application/xml-external-parsed-entity' => [%w(ent), %w(application/xml)],
'application/xslt+xml' => [%w(xsl xslt), %w(application/xml)],
'application/xspf+xml' => [%w(xspf), %w(application/xml)],
'application/zip' => [%w(zip), %w()],
'audio/AMR' => [%w(amr), %w()],
'audio/AMR-WB' => [%w(awb), %w()],
'audio/ac3' => [%w(ac3), %w()],
'audio/annodex' => [%w(axa), %w(application/annodex)],
'audio/basic' => [%w(au snd), %w()],
'audio/midi' => [%w(kar mid midi), %w()],
'audio/mp2' => [%w(mp2), %w()],
'audio/mp4' => [%w(aac m4a), %w()],
'audio/mpeg' => [%w(mp3 mpga), %w()],
'audio/ogg' => [%w(oga ogg spx), %w(application/ogg)],
'audio/prs.sid' => [%w(psid sid), %w()],
'audio/vnd.rn-realaudio' => [%w(ra rax), %w()],
'audio/x-aiff' => [%w(aif aifc aiff), %w()],
'audio/x-ape' => [%w(ape), %w()],
'audio/x-flac' => [%w(flac), %w()],
'audio/x-flac+ogg' => [%w(ogg), %w(audio/ogg)],
'audio/x-gsm' => [%w(gsm), %w()],
'audio/x-iriver-pla' => [%w(pla), %w()],
'audio/x-it' => [%w(it), %w()],
'audio/x-m4b' => [%w(m4b), %w(audio/mp4)],
'audio/x-matroska' => [%w(mka), %w(application/x-matroska)],
'audio/x-minipsf' => [%w(minipsf), %w(audio/x-psf)],
'audio/x-mo3' => [%w(mo3), %w()],
'audio/x-mod' => [%w(669 m15 med mod mtm ult uni), %w()],
'audio/x-mpegurl' => [%w(m3u m3u8 vlc), %w(text/plain)],
'audio/x-ms-asx' => [%w(asx wax wmx wvx), %w()],
'audio/x-ms-wma' => [%w(wma), %w(video/x-ms-asf)],
'audio/x-musepack' => [%w(mp+ mpc mpp), %w()],
'audio/x-psf' => [%w(psf), %w()],
'audio/x-psflib' => [%w(psflib), %w(audio/x-psf)],
'audio/x-s3m' => [%w(s3m), %w()],
'audio/x-scpls' => [%w(pls), %w()],
'audio/x-speex' => [%w(spx), %w()],
'audio/x-speex+ogg' => [%w(ogg), %w(audio/ogg)],
'audio/x-stm' => [%w(stm), %w()],
'audio/x-tta' => [%w(tta), %w()],
'audio/x-voc' => [%w(voc), %w()],
'audio/x-vorbis+ogg' => [%w(ogg), %w(audio/ogg)],
'audio/x-wav' => [%w(wav), %w()],
'audio/x-wavpack' => [%w(wv wvp), %w()],
'audio/x-wavpack-correction' => [%w(wvc), %w()],
'audio/x-xi' => [%w(xi), %w()],
'audio/x-xm' => [%w(xm), %w()],
'audio/x-xmf' => [%w(xmf), %w()],
'image/bmp' => [%w(bmp), %w()],
'image/cgm' => [%w(cgm), %w()],
'image/fax-g3' => [%w(g3), %w()],
'image/fits' => [%w(fits), %w()],
'image/gif' => [%w(gif), %w()],
'image/ief' => [%w(ief), %w()],
'image/jp2' => [%w(j2k jp2 jpc jpf jpx), %w()],
'image/jpeg' => [%w(jpe jpeg jpg), %w()],
'image/openraster' => [%w(ora), %w()],
'image/png' => [%w(png), %w()],
'image/rle' => [%w(rle), %w()],
'image/svg+xml' => [%w(svg), %w(application/xml)],
'image/svg+xml-compressed' => [%w(svgz), %w(application/x-gzip)],
'image/tiff' => [%w(tif tiff), %w()],
'image/vnd.adobe.photoshop' => [%w(psd), %w()],
'image/vnd.djvu' => [%w(djv djvu), %w()],
'image/vnd.dwg' => [%w(dwg), %w()],
'image/vnd.dxf' => [%w(dxf), %w()],
'image/vnd.microsoft.icon' => [%w(ico), %w()],
'image/vnd.ms-modi' => [%w(mdi), %w()],
'image/vnd.rn-realpix' => [%w(rp), %w()],
'image/vnd.wap.wbmp' => [%w(wbmp), %w()],
'image/x-3ds' => [%w(3ds), %w()],
'image/x-adobe-dng' => [%w(dng), %w(image/tiff image/x-dcraw)],
'image/x-applix-graphics' => [%w(ag), %w()],
'image/x-bzeps' => [%w(eps.bz2 epsf.bz2 epsi.bz2), %w()],
'image/x-canon-cr2' => [%w(cr2), %w(image/tiff image/x-dcraw)],
'image/x-canon-crw' => [%w(crw), %w(image/x-dcraw)],
'image/x-cmu-raster' => [%w(ras), %w()],
'image/x-compressed-xcf' => [%w(xcf.bz2 xcf.gz), %w()],
'image/x-dds' => [%w(dds), %w()],
'image/x-emf' => [%w(emf), %w()],
'image/x-eps' => [%w(eps epsf epsi), %w(application/postscript)],
'image/x-exr' => [%w(exr), %w()],
'image/x-fuji-raf' => [%w(raf), %w(image/x-dcraw)],
'image/x-gzeps' => [%w(eps.gz epsf.gz epsi.gz), %w()],
'image/x-icns' => [%w(icns), %w()],
'image/x-iff' => [%w(iff), %w()],
'image/x-ilbm' => [%w(ilbm), %w()],
'image/x-jng' => [%w(jng), %w()],
'image/x-kodak-dcr' => [%w(dcr), %w(image/tiff image/x-dcraw)],
'image/x-kodak-k25' => [%w(k25), %w(image/tiff image/x-dcraw)],
'image/x-kodak-kdc' => [%w(kdc), %w(image/tiff image/x-dcraw)],
'image/x-lwo' => [%w(lwo lwob), %w()],
'image/x-lws' => [%w(lws), %w()],
'image/x-macpaint' => [%w(pntg), %w()],
'image/x-minolta-mrw' => [%w(mrw), %w(image/x-dcraw)],
'image/x-msod' => [%w(msod), %w()],
'image/x-nikon-nef' => [%w(nef), %w(image/tiff image/x-dcraw)],
'image/x-olympus-orf' => [%w(orf), %w(image/x-dcraw)],
'image/x-panasonic-raw' => [%w(raw), %w(image/x-dcraw)],
'image/x-pcx' => [%w(pcx), %w()],
'image/x-pentax-pef' => [%w(pef), %w(image/tiff image/x-dcraw)],
'image/x-photo-cd' => [%w(pcd), %w()],
'image/x-pict' => [%w(pict pict1 pict2), %w()],
'image/x-portable-anymap' => [%w(pnm), %w()],
'image/x-portable-bitmap' => [%w(pbm), %w(image/x-portable-anymap)],
'image/x-portable-graymap' => [%w(pgm), %w(image/x-portable-anymap)],
'image/x-portable-pixmap' => [%w(ppm), %w(image/x-portable-anymap)],
'image/x-quicktime' => [%w(qif qtif), %w()],
'image/x-rgb' => [%w(rgb), %w()],
'image/x-sgi' => [%w(sgi), %w()],
'image/x-sigma-x3f' => [%w(x3f), %w(image/x-dcraw)],
'image/x-skencil' => [%w(sk sk1), %w()],
'image/x-sony-arw' => [%w(arw), %w(image/tiff image/x-dcraw)],
'image/x-sony-sr2' => [%w(sr2), %w(image/tiff image/x-dcraw)],
'image/x-sony-srf' => [%w(srf), %w(image/tiff image/x-dcraw)],
'image/x-sun-raster' => [%w(sun), %w()],
'image/x-tga' => [%w(icb tga tpic vda vst), %w()],
'image/x-win-bitmap' => [%w(cur), %w()],
'image/x-wmf' => [%w(wmf), %w()],
'image/x-xbitmap' => [%w(xbm), %w()],
'image/x-xcf' => [%w(xcf), %w()],
'image/x-xfig' => [%w(fig), %w()],
'image/x-xpixmap' => [%w(xpm), %w()],
'image/x-xwindowdump' => [%w(xwd), %w()],
'message/rfc822' => [%w(eml), %w(text/plain)],
'model/vrml' => [%w(wrl), %w(text/plain)],
'text/calendar' => [%w(ics vcs), %w(text/plain)],
'text/css' => [%w(css cssl), %w(text/x-csrc)],
'text/csv' => [%w(csv), %w(text/plain)],
'text/directory' => [%w(gcrd vcf vct), %w(text/plain)],
'text/html' => [%w(htm html), %w(text/plain)],
'text/plain' => [%w(asc txt), %w()],
'text/richtext' => [%w(rtx), %w(text/plain)],
'text/sgml' => [%w(sgm sgml), %w(text/plain)],
'text/spreadsheet' => [%w(slk sylk), %w(text/plain)],
'text/tab-separated-values' => [%w(tsv), %w(text/plain)],
'text/troff' => [%w(roff t tr), %w(text/plain)],
'text/vnd.graphviz' => [%w(dot gv), %w()],
'text/vnd.rn-realtext' => [%w(rt), %w()],
'text/vnd.sun.j2me.app-descriptor' => [%w(jad), %w()],
'text/vnd.wap.wml' => [%w(wml), %w(application/xml)],
'text/vnd.wap.wmlscript' => [%w(wmls), %w()],
'text/x-adasrc' => [%w(adb ads), %w(text/plain)],
'text/x-bibtex' => [%w(bib), %w(text/plain)],
'text/x-c++hdr' => [%w(h++ hh hp hpp hxx), %w(text/x-chdr)],
'text/x-c++src' => [%w(c c++ cc cpp cxx), %w(text/x-csrc)],
'text/x-chdr' => [%w(h), %w(text/x-csrc)],
'text/x-cmake' => [%w(cmake), %w()],
'text/x-csharp' => [%w(cs), %w(text/x-csrc)],
'text/x-csrc' => [%w(c), %w(text/plain)],
'text/x-dcl' => [%w(dcl), %w(text/plain)],
'text/x-dsl' => [%w(dsl), %w(text/plain)],
'text/x-dsrc' => [%w(d), %w(text/x-csrc)],
'text/x-eiffel' => [%w(e eif), %w(text/plain)],
'text/x-emacs-lisp' => [%w(el), %w(text/plain)],
'text/x-erlang' => [%w(erl), %w(text/plain)],
'text/x-fortran' => [%w(f f90 f95 for), %w(text/plain)],
'text/x-gettext-translation' => [%w(po), %w(text/plain)],
'text/x-gettext-translation-template' => [%w(pot), %w(text/plain)],
'text/x-google-video-pointer' => [%w(gvp), %w()],
'text/x-haskell' => [%w(hs), %w(text/plain)],
'text/x-iMelody' => [%w(ime imy), %w()],
'text/x-idl' => [%w(idl), %w(text/plain)],
'text/x-iptables' => [%w(iptables), %w(text/plain)],
'text/x-java' => [%w(java), %w(text/x-csrc)],
'text/x-ldif' => [%w(ldif), %w(text/plain)],
'text/x-lilypond' => [%w(ly), %w(text/plain)],
'text/x-literate-haskell' => [%w(lhs), %w(text/plain)],
'text/x-log' => [%w(log), %w(text/plain)],
'text/x-lua' => [%w(lua), %w(application/x-executable text/plain)],
'text/x-matlab' => [%w(m), %w(text/plain)],
'text/x-microdvd' => [%w(sub), %w(text/plain)],
'text/x-moc' => [%w(moc), %w(text/plain)],
'text/x-mof' => [%w(mof), %w(text/x-csrc)],
'text/x-mpsub' => [%w(sub), %w(text/plain)],
'text/x-mrml' => [%w(mrl mrml), %w()],
'text/x-ms-regedit' => [%w(reg), %w(text/plain)],
'text/x-mup' => [%w(mup not), %w(text/plain)],
'text/x-nfo' => [%w(nfo), %w(text/x-readme)],
'text/x-objcsrc' => [%w(m), %w(text/x-csrc)],
'text/x-ocaml' => [%w(ml mli), %w()],
'text/x-ocl' => [%w(ocl), %w(text/plain)],
'text/x-opml+xml' => [%w(opml), %w(application/xml)],
'text/x-pascal' => [%w(p pas), %w(text/plain)],
'text/x-patch' => [%w(diff patch), %w(text/plain)],
'text/x-python' => [%w(py), %w(application/x-executable text/plain)],
'text/x-rpm-spec' => [%w(spec), %w(text/plain)],
'text/x-scheme' => [%w(scm), %w(text/plain)],
'text/x-setext' => [%w(etx), %w(text/plain)],
'text/x-sql' => [%w(sql), %w(text/plain)],
'text/x-ssa' => [%w(ass ssa), %w(text/plain)],
'text/x-subviewer' => [%w(sub), %w(text/plain)],
'text/x-tcl' => [%w(tcl tk), %w(text/plain)],
'text/x-tex' => [%w(cls dtx ins latex ltx sty tex), %w(text/plain)],
'text/x-texinfo' => [%w(texi texinfo), %w(text/plain)],
'text/x-troff-me' => [%w(me), %w(text/plain)],
'text/x-troff-mm' => [%w(mm), %w(text/plain)],
'text/x-troff-ms' => [%w(ms), %w(text/plain)],
'text/x-txt2tags' => [%w(t2t), %w(text/plain)],
'text/x-uil' => [%w(uil), %w(text/plain)],
'text/x-uri' => [%w(uri url), %w(text/plain)],
'text/x-vala' => [%w(vala vapi), %w(text/x-csrc)],
'text/x-vhdl' => [%w(vhd vhdl), %w(text/plain)],
'text/x-xmi' => [%w(xmi), %w(application/xml)],
'text/x-xslfo' => [%w(fo xslfo), %w(application/xml)],
'video/3gpp' => [%w(3g2 3ga 3gp 3gpp), %w(video/mp4)],
'video/annodex' => [%w(axv), %w(application/annodex)],
'video/dv' => [%w(dv), %w()],
'video/mp4' => [%w(m4v mp4), %w()],
'video/mpeg' => [%w(m2t mp2 mpe mpeg mpg vob), %w()],
'video/ogg' => [%w(ogv), %w(application/ogg)],
'video/quicktime' => [%w(moov mov qt qtvr), %w()],
'video/vivo' => [%w(viv vivo), %w()],
'video/vnd.rn-realvideo' => [%w(rv rvx), %w()],
'video/x-flic' => [%w(flc fli), %w()],
'video/x-flv' => [%w(flv), %w()],
'video/x-matroska' => [%w(mkv), %w(application/x-matroska)],
'video/x-mng' => [%w(mng), %w()],
'video/x-ms-asf' => [%w(asf), %w()],
'video/x-ms-wmv' => [%w(wmv), %w(video/x-ms-asf)],
'video/x-msvideo' => [%w(avi divx), %w()],
'video/x-nsv' => [%w(nsv), %w()],
'video/x-ogm+ogg' => [%w(ogm), %w(video/ogg)],
'video/x-sgi-movie' => [%w(movie), %w()],
'video/x-theora+ogg' => [%w(ogg), %w(video/ogg)],
'x-epoc/x-sisx-app' => [%w(sisx), %w()],
'application/andrew-inset' => [%w(ez), %w(), "ATK inset"],
'application/annodex' => [%w(anx), %w(), "Annodex exchange format"],
'application/atom+xml' => [%w(atom), %w(application/xml), "Atom syndication feed"],
'application/dicom' => [%w(dcm), %w(), "DICOM image"],
'application/docbook+xml' => [%w(docbook), %w(application/xml), "DocBook document"],
'application/ecmascript' => [%w(es), %w(text/plain), "ECMAScript program"],
'application/epub+zip' => [%w(epub), %w(), "electronic book document"],
'application/gnunet-directory' => [%w(gnd), %w(), "GNUnet search file"],
'application/illustrator' => [%w(ai), %w(), "Adobe Illustrator document"],
'application/javascript' => [%w(js), %w(text/x-csrc), "JavaScript program"],
'application/mathematica' => [%w(nb), %w(text/plain), "Mathematica Notebook"],
'application/mathml+xml' => [%w(mml), %w(application/xml), "MathML document"],
'application/mbox' => [%w(mbox), %w(text/plain), "mailbox file"],
'application/metalink+xml' => [%w(metalink), %w(application/xml), "Metalink file"],
'application/msword' => [%w(doc), %w(application/x-ole-storage), "Word document"],
'application/msword-template' => [%w(dot), %w(application/msword), "Word template"],
'application/mxf' => [%w(mxf), %w(), "MXF video"],
'application/octet-stream' => [%w(bin), %w(), "unknown"],
'application/oda' => [%w(oda), %w(), "ODA document"],
'application/ogg' => [%w(ogx), %w(), "Ogg multimedia file"],
'application/pdf' => [%w(pdf), %w(), "PDF document"],
'application/pgp-encrypted' => [%w(asc gpg pgp), %w(), "PGP/MIME-encrypted message header"],
'application/pgp-keys' => [%w(asc pkr skr), %w(text/plain), "PGP keys"],
'application/pkcs10' => [%w(p10), %w(), "PKCS#10 certification request"],
'application/pkcs7-signature' => [%w(p7s), %w(text/plain), "detached S/MIME signature"],
'application/pkix-cert' => [%w(cer), %w(), "X.509 certificate"],
'application/pkix-crl' => [%w(crl), %w(), "Certificate revocation list"],
'application/pkix-pkipath' => [%w(pkipath), %w(), "PkiPath certification path"],
'application/postscript' => [%w(ps), %w(text/plain), "PS document"],
'application/ram' => [%w(ram), %w(text/plain), "RealMedia Metafile"],
'application/rdf+xml' => [%w(owl rdf rdfs), %w(application/xml), "RDF file"],
'application/rss+xml' => [%w(rss), %w(application/xml), "RSS summary"],
'application/rtf' => [%w(rtf), %w(text/plain), "RTF document"],
'application/sdp' => [%w(sdp), %w(), "SDP multicast stream file"],
'application/sieve' => [%w(siv), %w(application/xml), "Sieve mail filter script"],
'application/smil' => [%w(kino smi smil sml), %w(application/xml), "SMIL document"],
'application/vnd.apple.mpegurl' => [%w(m3u m3u8), %w(), "HTTP Live Streaming playlist"],
'application/vnd.corel-draw' => [%w(cdr), %w(), "Corel Draw drawing"],
'application/vnd.emusic-emusic_package' => [%w(emp), %w(), "eMusic download package"],
'application/vnd.google-earth.kml+xml' => [%w(kml), %w(application/xml), "KML geographic data"],
'application/vnd.google-earth.kmz' => [%w(kmz), %w(application/zip), "KML geographic compressed data"],
'application/vnd.hp-hpgl' => [%w(hpgl), %w(), "HPGL file"],
'application/vnd.hp-pcl' => [%w(pcl), %w(), "PCL file"],
'application/vnd.iccprofile' => [%w(icc icm), %w(), "ICC profile"],
'application/vnd.lotus-1-2-3' => [%w(123 wk1 wk3 wk4 wks), %w(), "Lotus 1-2-3 spreadsheet"],
'application/vnd.mozilla.xul+xml' => [%w(xul), %w(application/xml), "XUL interface document"],
'application/vnd.ms-access' => [%w(mdb), %w(), "JET database"],
'application/vnd.ms-cab-compressed' => [%w(cab), %w(), "Microsoft Cabinet archive"],
'application/vnd.ms-excel' => [%w(xla xlc xld xll xlm xls xlt xlw), %w(), "Excel spreadsheet"],
'application/vnd.ms-powerpoint' => [%w(pot pps ppt ppz), %w(), "PowerPoint presentation"],
'application/vnd.ms-tnef' => [%w(tnef tnf), %w(), "TNEF message"],
'application/vnd.ms-works' => [%w(wcm wdb wks wps), %w(application/x-ole-storage), "Microsoft Works document"],
'application/vnd.ms-wpl' => [%w(wpl), %w(), "WPL playlist"],
'application/vnd.ms-xpsdocument' => [%w(xps), %w(application/zip), "XPS document"],
'application/vnd.oasis.opendocument.chart' => [%w(odc), %w(application/zip), "ODC chart"],
'application/vnd.oasis.opendocument.chart-template' => [%w(otc), %w(application/zip), "ODC template"],
'application/vnd.oasis.opendocument.database' => [%w(odb), %w(application/zip), "ODB database"],
'application/vnd.oasis.opendocument.formula' => [%w(odf), %w(application/zip), "ODF formula"],
'application/vnd.oasis.opendocument.formula-template' => [%w(otf), %w(application/zip), "ODF template"],
'application/vnd.oasis.opendocument.graphics' => [%w(odg), %w(application/zip), "ODG drawing"],
'application/vnd.oasis.opendocument.graphics-flat-xml' => [%w(fodg), %w(application/xml), "ODG drawing (Flat XML)"],
'application/vnd.oasis.opendocument.graphics-template' => [%w(otg), %w(application/zip), "ODG template"],
'application/vnd.oasis.opendocument.image' => [%w(odi), %w(application/zip), "ODI image"],
'application/vnd.oasis.opendocument.presentation' => [%w(odp), %w(application/zip), "ODP presentation"],
'application/vnd.oasis.opendocument.presentation-flat-xml' => [%w(fodp), %w(application/xml), "ODP presentation (Flat XML)"],
'application/vnd.oasis.opendocument.presentation-template' => [%w(otp), %w(application/zip), "ODP template"],
'application/vnd.oasis.opendocument.spreadsheet' => [%w(ods), %w(application/zip), "ODS spreadsheet"],
'application/vnd.oasis.opendocument.spreadsheet-flat-xml' => [%w(fods), %w(application/xml), "ODS spreadsheet (Flat XML)"],
'application/vnd.oasis.opendocument.spreadsheet-template' => [%w(ots), %w(application/zip), "ODS template"],
'application/vnd.oasis.opendocument.text' => [%w(odt), %w(application/zip), "ODT document"],
'application/vnd.oasis.opendocument.text-flat-xml' => [%w(fodt), %w(application/xml), "ODT document (Flat XML)"],
'application/vnd.oasis.opendocument.text-master' => [%w(odm), %w(application/zip), "ODM document"],
'application/vnd.oasis.opendocument.text-template' => [%w(ott), %w(application/zip), "ODT template"],
'application/vnd.oasis.opendocument.text-web' => [%w(oth), %w(application/zip), "OTH template"],
'application/vnd.openofficeorg.extension' => [%w(oxt), %w(application/zip), "OpenOffice.org extension"],
'application/vnd.openxmlformats-officedocument.presentationml.presentation' => [%w(pptm pptx), %w(application/zip), "PowerPoint 2007 presentation"],
'application/vnd.openxmlformats-officedocument.presentationml.slideshow' => [%w(ppsx), %w(application/zip), "PowerPoint 2007 show"],
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => [%w(xlsm xlsx), %w(application/zip), "Excel 2007 spreadsheet"],
'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => [%w(docm docx), %w(application/zip), "Word 2007 document"],
'application/vnd.rn-realmedia' => [%w(rm rmj rmm rms rmvb rmx), %w(), "RealMedia document"],
'application/vnd.stardivision.calc' => [%w(sdc), %w(), "StarCalc spreadsheet"],
'application/vnd.stardivision.chart' => [%w(sds), %w(), "StarChart chart"],
'application/vnd.stardivision.draw' => [%w(sda), %w(), "StarDraw drawing"],
'application/vnd.stardivision.impress' => [%w(sdd sdp), %w(), "StarImpress presentation"],
'application/vnd.stardivision.mail' => [%w(smd), %w(), "StarMail email"],
'application/vnd.stardivision.math' => [%w(smf), %w(), "StarMath formula"],
'application/vnd.stardivision.writer' => [%w(sdw sgl vor), %w(), "StarWriter document"],
'application/vnd.sun.xml.calc' => [%w(sxc), %w(application/zip), "OpenOffice Calc spreadsheet"],
'application/vnd.sun.xml.calc.template' => [%w(stc), %w(application/zip), "OpenOffice Calc template"],
'application/vnd.sun.xml.draw' => [%w(sxd), %w(application/zip), "OpenOffice Draw drawing"],
'application/vnd.sun.xml.draw.template' => [%w(std), %w(application/zip), "OpenOffice Draw template"],
'application/vnd.sun.xml.impress' => [%w(sxi), %w(application/zip), "OpenOffice Impress presentation"],
'application/vnd.sun.xml.impress.template' => [%w(sti), %w(application/zip), "OpenOffice Impress template"],
'application/vnd.sun.xml.math' => [%w(sxm), %w(application/zip), "OpenOffice Math formula"],
'application/vnd.sun.xml.writer' => [%w(sxw), %w(application/zip), "OpenOffice Writer document"],
'application/vnd.sun.xml.writer.global' => [%w(sxg), %w(application/zip), "OpenOffice Writer global document"],
'application/vnd.sun.xml.writer.template' => [%w(stw), %w(application/zip), "OpenOffice Writer template"],
'application/vnd.symbian.install' => [%w(sis), %w(), "SIS package"],
'application/vnd.wordperfect' => [%w(wp wp4 wp5 wp6 wpd wpp), %w(), "WordPerfect document"],
'application/x-7z-compressed' => [%w(7z), %w(), "7-zip archive"],
'application/x-abiword' => [%w(abw abw.crashed abw.gz zabw), %w(application/xml), "AbiWord document"],
'application/x-ace' => [%w(ace), %w(), "ACE archive"],
'application/x-alz' => [%w(alz), %w(), "Alzip archive"],
'application/x-amipro' => [%w(sam), %w(), "Lotus AmiPro document"],
'application/x-aportisdoc' => [%w(pdb pdc), %w(application/x-palm-database), "AportisDoc document"],
'application/x-applix-spreadsheet' => [%w(as), %w(), "Applix Spreadsheets spreadsheet"],
'application/x-applix-word' => [%w(aw), %w(), "Applix Words document"],
'application/x-archive' => [%w(a), %w(), "AR archive"],
'application/x-arj' => [%w(arj), %w(), "ARJ archive"],
'application/x-asp' => [%w(asp), %w(text/plain), "ASP page"],
'application/x-awk' => [%w(awk), %w(application/x-executable text/plain), "AWK script"],
'application/x-bcpio' => [%w(bcpio), %w(), "BCPIO document"],
'application/x-bittorrent' => [%w(torrent), %w(), "BitTorrent seed file"],
'application/x-blender' => [%w(blend blend blender), %w(), "Blender scene"],
'application/x-bzdvi' => [%w(dvi.bz2), %w(), "TeX DVI document (bzip-compressed)"],
'application/x-bzip' => [%w(bz bz2), %w(), "Bzip archive"],
'application/x-bzip-compressed-tar' => [%w(tar.bz tar.bz2 tbz tbz2), %w(application/x-bzip), "Tar archive (bzip-compressed)"],
'application/x-bzpdf' => [%w(pdf.bz2), %w(), "PDF document (bzip-compressed)"],
'application/x-bzpostscript' => [%w(ps.bz2), %w(), "PostScript document (bzip-compressed)"],
'application/x-cb7' => [%w(cb7), %w(application/x-7z-compressed), "comic book archive"],
'application/x-cbr' => [%w(cbr), %w(application/x-rar), "comic book archive"],
'application/x-cbt' => [%w(cbt), %w(application/x-tar), "comic book archive"],
'application/x-cbz' => [%w(cbz), %w(application/zip), "comic book archive"],
'application/x-cd-image' => [%w(iso iso9660), %w(), "raw CD image"],
'application/x-cdrdao-toc' => [%w(toc), %w(text/plain), "CD Table Of Contents"],
'application/x-chess-pgn' => [%w(pgn), %w(text/plain), "PGN chess game notation"],
'application/x-chm' => [%w(chm), %w(), "CHM document"],
'application/x-cisco-vpn-settings' => [%w(pcf), %w(), "Cisco VPN Settings"],
'application/x-compress' => [%w(z), %w(), "UNIX-compressed file"],
'application/x-compressed-tar' => [%w(tar.gz tgz), %w(), "Tar archive (gzip-compressed)"],
'application/x-cpio' => [%w(cpio), %w(), "CPIO archive"],
'application/x-cpio-compressed' => [%w(cpio.gz), %w(), "CPIO archive (gzip-compressed)"],
'application/x-csh' => [%w(csh), %w(application/x-shellscript text/plain), "C shell script"],
'application/x-cue' => [%w(cue), %w(text/plain), "CD image cuesheet"],
'application/x-dar' => [%w(dar), %w(), "DAR archive"],
'application/x-dbf' => [%w(dbf), %w(), "Xbase document"],
'application/x-dc-rom' => [%w(dc), %w(), "Dreamcast ROM"],
'application/x-deb' => [%w(deb), %w(), "Debian package"],
'application/x-designer' => [%w(ui), %w(), "Qt Designer file"],
'application/x-desktop' => [%w(desktop kdelnk), %w(text/plain), "desktop configuration file"],
'application/x-dia-diagram' => [%w(dia), %w(application/xml), "Dia diagram"],
'application/x-dvi' => [%w(dvi), %w(), "TeX DVI document"],
'application/x-e-theme' => [%w(etheme), %w(), "Enlightenment theme"],
'application/x-egon' => [%w(egon), %w(), "Egon Animator animation"],
'application/x-fictionbook+xml' => [%w(fb2), %w(application/xml), "FictionBook document"],
'application/x-fluid' => [%w(fl), %w(text/plain), "FLTK Fluid file"],
'application/x-font-afm' => [%w(afm), %w(), "Adobe font metrics"],
'application/x-font-bdf' => [%w(bdf), %w(), "BDF font"],
'application/x-font-linux-psf' => [%w(psf), %w(), "Linux PSF console font"],
'application/x-font-otf' => [%w(otf), %w(), "OpenType font"],
'application/x-font-pcf' => [%w(pcf pcf.gz pcf.z), %w(), "PCF font"],
'application/x-font-speedo' => [%w(spd), %w(), "Speedo font"],
'application/x-font-ttf' => [%w(ttc ttf), %w(), "TrueType font"],
'application/x-font-ttx' => [%w(ttx), %w(text/xml), "TrueType XML font"],
'application/x-font-type1' => [%w(gsf pfa pfb), %w(application/postscript), "Postscript type-1 font"],
'application/x-gameboy-rom' => [%w(gb), %w(), "Game Boy ROM"],
'application/x-gba-rom' => [%w(gba), %w(), "Game Boy Advance ROM"],
'application/x-gedcom' => [%w(ged gedcom), %w(), "GEDCOM family history"],
'application/x-genesis-rom' => [%w(gen md), %w(), "Genesis ROM"],
'application/x-gettext-translation' => [%w(gmo mo), %w(), "translated messages (machine-readable)"],
'application/x-glade' => [%w(glade), %w(application/xml), "Glade project"],
'application/x-gnucash' => [%w(gnc gnucash xac), %w(), "GnuCash financial data"],
'application/x-gnumeric' => [%w(gnumeric), %w(), "Gnumeric spreadsheet"],
'application/x-gnuplot' => [%w(gnuplot gp gplt), %w(text/plain), "Gnuplot document"],
'application/x-go-sgf' => [%w(sgf), %w(text/plain), "SGF record"],
'application/x-graphite' => [%w(gra), %w(), "Graphite scientific graph"],
'application/x-gz-font-linux-psf' => [%w(psf.gz), %w(application/x-gzip), "Linux PSF console font (gzip-compressed)"],
'application/x-gzdvi' => [%w(dvi.gz), %w(application/x-gzip), "TeX DVI document (gzip-compressed)"],
'application/x-gzip' => [%w(gz), %w(), "Gzip archive"],
'application/x-gzpdf' => [%w(pdf.gz), %w(application/x-gzip), "PDF document (gzip-compressed)"],
'application/x-gzpostscript' => [%w(ps.gz), %w(application/x-gzip), "PostScript document (gzip-compressed)"],
'application/x-hdf' => [%w(hdf), %w(), "HDF document"],
'application/x-hwp' => [%w(hwp), %w(), "Haansoft Hangul document"],
'application/x-hwt' => [%w(hwt), %w(), "Haansoft Hangul document template"],
'application/x-ica' => [%w(ica), %w(text/plain), "Citrix ICA settings file"],
'application/x-it87' => [%w(it87), %w(text/plain), "IT 8.7 color calibration file"],
'application/x-java' => [%w(class), %w(), "Java class"],
'application/x-java-archive' => [%w(jar), %w(), "Java archive"],
'application/x-java-jce-keystore' => [%w(jceks), %w(), "Java JCE keystore"],
'application/x-java-jnlp-file' => [%w(jnlp), %w(application/xml), "JNLP file"],
'application/x-java-keystore' => [%w(jks ks), %w(), "Java keystore"],
'application/x-java-pack200' => [%w(pack), %w(), "Pack200 Java archive"],
'application/x-jbuilder-project' => [%w(jpr jpx), %w(), "JBuilder project"],
'application/x-karbon' => [%w(karbon), %w(), "Karbon14 drawing"],
'application/x-kchart' => [%w(chrt), %w(), "KChart chart"],
'application/x-kexi-connectiondata' => [%w(kexic), %w(), "Kexi settings for database server connection"],
'application/x-kexiproject-shortcut' => [%w(kexis), %w(), "shortcut to Kexi project on database server"],
'application/x-kexiproject-sqlite2' => [%w(kexi), %w(application/x-sqlite2), "Kexi database file-based project"],
'application/x-kexiproject-sqlite3' => [%w(kexi), %w(application/x-sqlite3), "Kexi database file-based project"],
'application/x-kformula' => [%w(kfo), %w(), "KFormula formula"],
'application/x-killustrator' => [%w(kil), %w(), "KIllustrator drawing"],
'application/x-kivio' => [%w(flw), %w(), "Kivio flowchart"],
'application/x-kontour' => [%w(kon), %w(), "Kontour drawing"],
'application/x-kpovmodeler' => [%w(kpm), %w(), "KPovModeler scene"],
'application/x-kpresenter' => [%w(kpr kpt), %w(), "KPresenter presentation"],
'application/x-krita' => [%w(kra), %w(), "Krita document"],
'application/x-kspread' => [%w(ksp), %w(), "KSpread spreadsheet"],
'application/x-kugar' => [%w(kud), %w(), "Kugar document"],
'application/x-kword' => [%w(kwd kwt), %w(), "KWord document"],
'application/x-lha' => [%w(lha lzh), %w(), "LHA archive"],
'application/x-lhz' => [%w(lhz), %w(), "LHZ archive"],
'application/x-linguist' => [%w(ts), %w(), "message catalog"],
'application/x-lyx' => [%w(lyx), %w(text/plain), "LyX document"],
'application/x-lzip' => [%w(lz), %w(), "Lzip archive"],
'application/x-lzma' => [%w(lzma), %w(), "LZMA archive"],
'application/x-lzma-compressed-tar' => [%w(tar.lzma tlz), %w(), "Tar archive (LZMA-compressed)"],
'application/x-lzop' => [%w(lzo), %w(), "LZO archive"],
'application/x-m4' => [%w(m4), %w(text/plain), "M4 macro"],
'application/x-magicpoint' => [%w(mgp), %w(text/plain), "MagicPoint presentation"],
'application/x-markaby' => [%w(mab), %w(application/x-ruby), "Markaby script"],
'application/x-mif' => [%w(mif), %w(), "Adobe FrameMaker MIF document"],
'application/x-ms-dos-executable' => [%w(exe), %w(), "DOS/Windows executable"],
'application/x-msi' => [%w(msi), %w(application/x-ole-storage), "Windows Installer package"],
'application/x-mswrite' => [%w(wri), %w(), "WRI document"],
'application/x-msx-rom' => [%w(msx), %w(), "MSX ROM"],
'application/x-n64-rom' => [%w(n64), %w(), "Nintendo64 ROM"],
'application/x-navi-animation' => [%w(ani), %w(), "Windows animated cursor"],
'application/x-nes-rom' => [%w(nes), %w(), "NES ROM"],
'application/x-netcdf' => [%w(cdf nc), %w(), "Unidata NetCDF document"],
'application/x-netshow-channel' => [%w(nsc), %w(video/x-ms-asf), "Windows Media Station file"],
'application/x-nintendo-ds-rom' => [%w(nds), %w(), "Nintendo DS ROM"],
'application/x-object' => [%w(o), %w(), "object code"],
'application/x-oleo' => [%w(oleo), %w(), "GNU Oleo spreadsheet"],
'application/x-pak' => [%w(pak), %w(), "PAK archive"],
'application/x-palm-database' => [%w(pdb prc), %w(), "Palm OS database"],
'application/x-par2' => [%w(par2 par2), %w(), "Parchive archive"],
'application/x-perl' => [%w(al perl pl pm), %w(application/x-executable text/plain), "Perl script"],
'application/x-php' => [%w(php php3 php4), %w(text/plain), "PHP script"],
'application/x-pkcs12' => [%w(p12 pfx), %w(), "PKCS#12 certificate bundle"],
'application/x-pkcs7-certificates' => [%w(p7b spc), %w(), "PKCS#7 certificate bundle"],
'application/x-planperfect' => [%w(pln), %w(), "PlanPerfect spreadsheet"],
'application/x-pocket-word' => [%w(psw), %w(), "Pocket Word document"],
'application/x-pw' => [%w(pw), %w(), "Pathetic Writer document"],
'application/x-python-bytecode' => [%w(pyc pyo), %w(), "Python bytecode"],
'application/x-quattropro' => [%w(wb1 wb2 wb3), %w(), "Quattro Pro spreadsheet"],
'application/x-quicktime-media-link' => [%w(qtl), %w(video/quicktime), "QuickTime metalink playlist"],
'application/x-qw' => [%w(qif), %w(), "Quicken document"],
'application/x-rar' => [%w(rar), %w(), "RAR archive"],
'application/x-reject' => [%w(rej), %w(text/plain), "rejected patch"],
'application/x-rpm' => [%w(rpm), %w(), "RPM package"],
'application/x-ruby' => [%w(rb), %w(application/x-executable text/plain), "Ruby script"],
'application/x-sami' => [%w(sami smi), %w(text/plain), "SAMI subtitles"],
'application/x-shar' => [%w(shar), %w(), "shell archive"],
'application/x-shared-library-la' => [%w(la), %w(text/plain), "libtool shared library"],
'application/x-sharedlib' => [%w(so), %w(), "shared library"],
'application/x-shellscript' => [%w(sh), %w(application/x-executable text/plain), "shell script"],
'application/x-shockwave-flash' => [%w(spl swf), %w(), "Shockwave Flash file"],
'application/x-shorten' => [%w(shn), %w(), "Shorten audio"],
'application/x-siag' => [%w(siag), %w(), "Siag spreadsheet"],
'application/x-smaf' => [%w(mmf smaf), %w(), "SMAF audio"],
'application/x-sms-rom' => [%w(gg sms), %w(), "Sega Master System/Game Gear ROM"],
'application/x-snes-rom' => [%w(smc), %w(), "Super NES ROM"],
'application/x-spss-por' => [%w(por), %w(), "SPSS Portable Data File"],
'application/x-spss-sav' => [%w(sav), %w(), "SPSS Data File"],
'application/x-stuffit' => [%w(sit), %w(), "StuffIt archive"],
'application/x-subrip' => [%w(srt), %w(text/plain), "SubRip subtitles"],
'application/x-sv4cpio' => [%w(sv4cpio), %w(), "SV4 CPIO archive"],
'application/x-sv4crc' => [%w(sv4crc), %w(), "SV4 CPIO archive (with CRC)"],
'application/x-t602' => [%w(602), %w(), "T602 document"],
'application/x-tar' => [%w(gtar tar), %w(), "Tar archive"],
'application/x-tarz' => [%w(tar.z), %w(), "Tar archive (compressed)"],
'application/x-tex-gf' => [%w(gf), %w(), "generic font file"],
'application/x-tex-pk' => [%w(pk), %w(), "packed font file"],
'application/x-tgif' => [%w(obj), %w(), "TGIF document"],
'application/x-theme' => [%w(theme), %w(application/x-desktop), "theme"],
'application/x-trash' => [%w(bak old sik), %w(), "backup file"],
'application/x-troff-man' => [%w(man), %w(text/plain), "Troff document (with manpage macros)"],
'application/x-tzo' => [%w(tar.lzo tzo), %w(), "Tar archive (LZO-compressed)"],
'application/x-ufraw' => [%w(ufraw), %w(text/xml), "UFRaw ID image"],
'application/x-ustar' => [%w(ustar), %w(), "Ustar archive"],
'application/x-wais-source' => [%w(src), %w(), "WAIS source code"],
'application/x-windows-themepack' => [%w(themepack), %w(application/vnd.ms-cab-compressed), "Microsoft Windows theme pack"],
'application/x-wpg' => [%w(wpg), %w(), "WordPerfect/Drawperfect image"],
'application/x-x509-ca-cert' => [%w(cert crt der pem), %w(), "DER/PEM/Netscape-encoded X.509 certificate"],
'application/x-xbel' => [%w(xbel), %w(application/xml), "XBEL bookmarks"],
'application/x-xliff' => [%w(xlf xliff), %w(application/xml), "XLIFF translation file"],
'application/x-xz' => [%w(xz), %w(), "XZ archive"],
'application/x-xz-compressed-tar' => [%w(tar.xz txz), %w(), "Tar archive (XZ-compressed)"],
'application/x-zoo' => [%w(zoo), %w(), "Zoo archive"],
'application/xhtml+xml' => [%w(xhtml), %w(application/xml), "XHTML page"],
'application/xml' => [%w(xbl xml), %w(text/plain), "XML document"],
'application/xml-dtd' => [%w(dtd), %w(text/plain), "DTD file"],
'application/xml-external-parsed-entity' => [%w(ent), %w(application/xml), "XML entities document"],
'application/xslt+xml' => [%w(xsl xslt), %w(application/xml), "XSLT stylesheet"],
'application/xspf+xml' => [%w(xspf), %w(application/xml), "XSPF playlist"],
'application/zip' => [%w(zip), %w(), "Zip archive"],
'audio/AMR' => [%w(amr), %w(), "AMR audio"],
'audio/AMR-WB' => [%w(awb), %w(), "AMR-WB audio"],
'audio/ac3' => [%w(ac3), %w(), "Dolby Digital audio"],
'audio/annodex' => [%w(axa), %w(application/annodex), "Annodex Audio"],
'audio/basic' => [%w(au snd), %w(), "ULAW (Sun) audio"],
'audio/midi' => [%w(kar mid midi), %w(), "MIDI audio"],
'audio/mp2' => [%w(mp2), %w(), "MP2 audio"],
'audio/mp4' => [%w(aac m4a), %w(), "MPEG-4 audio"],
'audio/mpeg' => [%w(mp3 mpga), %w(), "MP3 audio"],
'audio/ogg' => [%w(oga ogg spx), %w(application/ogg), "Ogg Audio"],
'audio/prs.sid' => [%w(psid sid), %w(), "Commodore 64 audio"],
'audio/vnd.rn-realaudio' => [%w(ra rax), %w(), "RealAudio document"],
'audio/x-aiff' => [%w(aif aifc aiff), %w(), "AIFF/Amiga/Mac audio"],
'audio/x-ape' => [%w(ape), %w(), "Monkey's audio"],
'audio/x-flac' => [%w(flac), %w(), "FLAC audio"],
'audio/x-flac+ogg' => [%w(ogg), %w(audio/ogg), "Ogg FLAC audio"],
'audio/x-gsm' => [%w(gsm), %w(), "GSM 06.10 audio"],
'audio/x-iriver-pla' => [%w(pla), %w(), "iRiver Playlist"],
'audio/x-it' => [%w(it), %w(), "Impulse Tracker audio"],
'audio/x-m4b' => [%w(m4b), %w(audio/mp4), "MPEG-4 audio book"],
'audio/x-matroska' => [%w(mka), %w(application/x-matroska), "Matroska audio"],
'audio/x-minipsf' => [%w(minipsf), %w(audio/x-psf), "MiniPSF audio"],
'audio/x-mo3' => [%w(mo3), %w(), "compressed Tracker audio"],
'audio/x-mod' => [%w(669 m15 med mod mtm ult uni), %w(), "Amiga SoundTracker audio"],
'audio/x-mpegurl' => [%w(m3u m3u8 vlc), %w(text/plain), "MP3 audio (streamed)"],
'audio/x-ms-asx' => [%w(asx wax wmx wvx), %w(), "Microsoft ASX playlist"],
'audio/x-ms-wma' => [%w(wma), %w(video/x-ms-asf), "Windows Media audio"],
'audio/x-musepack' => [%w(mp+ mpc mpp), %w(), "Musepack audio"],
'audio/x-psf' => [%w(psf), %w(), "PSF audio"],
'audio/x-psflib' => [%w(psflib), %w(audio/x-psf), "PSFlib audio library"],
'audio/x-s3m' => [%w(s3m), %w(), "Scream Tracker 3 audio"],
'audio/x-scpls' => [%w(pls), %w(), "MP3 ShoutCast playlist"],
'audio/x-speex' => [%w(spx), %w(), "Speex audio"],
'audio/x-speex+ogg' => [%w(ogg), %w(audio/ogg), "Ogg Speex audio"],
'audio/x-stm' => [%w(stm), %w(), "Scream Tracker audio"],
'audio/x-tta' => [%w(tta), %w(), "TrueAudio audio"],
'audio/x-voc' => [%w(voc), %w(), "VOC audio"],
'audio/x-vorbis+ogg' => [%w(ogg), %w(audio/ogg), "Ogg Vorbis audio"],
'audio/x-wav' => [%w(wav), %w(), "WAV audio"],
'audio/x-wavpack' => [%w(wv wvp), %w(), "WavPack audio"],
'audio/x-wavpack-correction' => [%w(wvc), %w(), "WavPack audio correction file"],
'audio/x-xi' => [%w(xi), %w(), "Scream Tracker instrument"],
'audio/x-xm' => [%w(xm), %w(), "FastTracker II audio"],
'audio/x-xmf' => [%w(xmf), %w(), "XMF audio"],
'image/bmp' => [%w(bmp), %w(), "Windows BMP image"],
'image/cgm' => [%w(cgm), %w(), "Computer Graphics Metafile"],
'image/fax-g3' => [%w(g3), %w(), "CCITT G3 fax"],
'image/fits' => [%w(fits), %w(), "FITS document"],
'image/gif' => [%w(gif), %w(), "GIF image"],
'image/ief' => [%w(ief), %w(), "IEF image"],
'image/jp2' => [%w(j2k jp2 jpc jpf jpx), %w(), "JPEG-2000 image"],
'image/jpeg' => [%w(jpe jpeg jpg), %w(), "JPEG image"],
'image/openraster' => [%w(ora), %w(), "OpenRaster archiving image"],
'image/png' => [%w(png), %w(), "PNG image"],
'image/rle' => [%w(rle), %w(), "Run Length Encoded bitmap image"],
'image/svg+xml' => [%w(svg), %w(application/xml), "SVG image"],
'image/svg+xml-compressed' => [%w(svgz), %w(application/x-gzip), "compressed SVG image"],
'image/tiff' => [%w(tif tiff), %w(), "TIFF image"],
'image/vnd.adobe.photoshop' => [%w(psd), %w(), "Photoshop image"],
'image/vnd.djvu' => [%w(djv djvu), %w(), "DjVu image"],
'image/vnd.dwg' => [%w(dwg), %w(), "AutoCAD image"],
'image/vnd.dxf' => [%w(dxf), %w(), "DXF vector image"],
'image/vnd.microsoft.icon' => [%w(ico), %w(), "Microsoft icon"],
'image/vnd.ms-modi' => [%w(mdi), %w(), "Microsoft Document Imaging format"],
'image/vnd.rn-realpix' => [%w(rp), %w(), "RealPix document"],
'image/vnd.wap.wbmp' => [%w(wbmp), %w(), "WBMP image"],
'image/x-3ds' => [%w(3ds), %w(), "3D Studio image"],
'image/x-adobe-dng' => [%w(dng), %w(image/tiff image/x-dcraw), "Adobe DNG negative"],
'image/x-applix-graphics' => [%w(ag), %w(), "Applix Graphics image"],
'image/x-bzeps' => [%w(eps.bz2 epsf.bz2 epsi.bz2), %w(), "EPS image (bzip-compressed)"],
'image/x-canon-cr2' => [%w(cr2), %w(image/tiff image/x-dcraw), "Canon CR2 raw image"],
'image/x-canon-crw' => [%w(crw), %w(image/x-dcraw), "Canon CRW raw image"],
'image/x-cmu-raster' => [%w(ras), %w(), "CMU raster image"],
'image/x-compressed-xcf' => [%w(xcf.bz2 xcf.gz), %w(), "compressed GIMP image"],
'image/x-dds' => [%w(dds), %w(), "DirectDraw surface"],
'image/x-emf' => [%w(emf), %w(), "EMF image"],
'image/x-eps' => [%w(eps epsf epsi), %w(application/postscript), "EPS image"],
'image/x-exr' => [%w(exr), %w(), "EXR image"],
'image/x-fuji-raf' => [%w(raf), %w(image/x-dcraw), "Fuji RAF raw image"],
'image/x-gzeps' => [%w(eps.gz epsf.gz epsi.gz), %w(), "EPS image (gzip-compressed)"],
'image/x-icns' => [%w(icns), %w(), "MacOS X icon"],
'image/x-iff' => [%w(iff), %w(), "IFF image"],
'image/x-ilbm' => [%w(ilbm), %w(), "ILBM image"],
'image/x-jng' => [%w(jng), %w(), "JNG image"],
'image/x-kodak-dcr' => [%w(dcr), %w(image/tiff image/x-dcraw), "Kodak DCR raw image"],
'image/x-kodak-k25' => [%w(k25), %w(image/tiff image/x-dcraw), "Kodak K25 raw image"],
'image/x-kodak-kdc' => [%w(kdc), %w(image/tiff image/x-dcraw), "Kodak KDC raw image"],
'image/x-lwo' => [%w(lwo lwob), %w(), "LightWave object"],
'image/x-lws' => [%w(lws), %w(), "LightWave scene"],
'image/x-macpaint' => [%w(pntg), %w(), "MacPaint Bitmap image"],
'image/x-minolta-mrw' => [%w(mrw), %w(image/x-dcraw), "Minolta MRW raw image"],
'image/x-msod' => [%w(msod), %w(), "Office drawing"],
'image/x-nikon-nef' => [%w(nef), %w(image/tiff image/x-dcraw), "Nikon NEF raw image"],
'image/x-olympus-orf' => [%w(orf), %w(image/x-dcraw), "Olympus ORF raw image"],
'image/x-panasonic-raw' => [%w(raw), %w(image/x-dcraw), "Panasonic raw image"],
'image/x-pcx' => [%w(pcx), %w(), "PCX image"],
'image/x-pentax-pef' => [%w(pef), %w(image/tiff image/x-dcraw), "Pentax PEF raw image"],
'image/x-photo-cd' => [%w(pcd), %w(), "PCD image"],
'image/x-pict' => [%w(pict pict1 pict2), %w(), "Macintosh Quickdraw/PICT drawing"],
'image/x-portable-anymap' => [%w(pnm), %w(), "PNM image"],
'image/x-portable-bitmap' => [%w(pbm), %w(image/x-portable-anymap), "PBM image"],
'image/x-portable-graymap' => [%w(pgm), %w(image/x-portable-anymap), "PGM image"],
'image/x-portable-pixmap' => [%w(ppm), %w(image/x-portable-anymap), "PPM image"],
'image/x-quicktime' => [%w(qif qtif), %w(), "QuickTime image"],
'image/x-rgb' => [%w(rgb), %w(), "RGB image"],
'image/x-sgi' => [%w(sgi), %w(), "SGI image"],
'image/x-sigma-x3f' => [%w(x3f), %w(image/x-dcraw), "Sigma X3F raw image"],
'image/x-skencil' => [%w(sk sk1), %w(), "Skencil document"],
'image/x-sony-arw' => [%w(arw), %w(image/tiff image/x-dcraw), "Sony ARW raw image"],
'image/x-sony-sr2' => [%w(sr2), %w(image/tiff image/x-dcraw), "Sony SR2 raw image"],
'image/x-sony-srf' => [%w(srf), %w(image/tiff image/x-dcraw), "Sony SRF raw image"],
'image/x-sun-raster' => [%w(sun), %w(), "Sun raster image"],
'image/x-tga' => [%w(icb tga tpic vda vst), %w(), "TGA image"],
'image/x-win-bitmap' => [%w(cur), %w(), "Windows cursor"],
'image/x-wmf' => [%w(wmf), %w(), "WMF image"],
'image/x-xbitmap' => [%w(xbm), %w(), "XBM image"],
'image/x-xcf' => [%w(xcf), %w(), "GIMP image"],
'image/x-xfig' => [%w(fig), %w(), "XFig image"],
'image/x-xpixmap' => [%w(xpm), %w(), "XPM image"],
'image/x-xwindowdump' => [%w(xwd), %w(), "X window image"],
'message/rfc822' => [%w(eml), %w(text/plain), "email message"],
'model/vrml' => [%w(wrl), %w(text/plain), "VRML document"],
'text/calendar' => [%w(ics vcs), %w(text/plain), "VCS/ICS calendar"],
'text/css' => [%w(css cssl), %w(text/x-csrc), "CSS stylesheet"],
'text/csv' => [%w(csv), %w(text/plain), "CSV document"],
'text/directory' => [%w(gcrd vcf vct), %w(text/plain), "electronic business card"],
'text/html' => [%w(htm html), %w(text/plain), "HTML document"],
'text/plain' => [%w(asc txt), %w(), "plain text document"],
'text/richtext' => [%w(rtx), %w(text/plain), "rich text document"],
'text/sgml' => [%w(sgm sgml), %w(text/plain), "SGML document"],
'text/spreadsheet' => [%w(slk sylk), %w(text/plain), "spreadsheet interchange document"],
'text/tab-separated-values' => [%w(tsv), %w(text/plain), "TSV document"],
'text/troff' => [%w(roff t tr), %w(text/plain), "Troff document"],
'text/vnd.graphviz' => [%w(dot gv), %w(), "Graphviz DOT graph"],
'text/vnd.rn-realtext' => [%w(rt), %w(), "RealText document"],
'text/vnd.sun.j2me.app-descriptor' => [%w(jad), %w(), "JAD document"],
'text/vnd.wap.wml' => [%w(wml), %w(application/xml), "WML document"],
'text/vnd.wap.wmlscript' => [%w(wmls), %w(), "WMLScript program"],
'text/x-adasrc' => [%w(adb ads), %w(text/plain), "Ada source code"],
'text/x-bibtex' => [%w(bib), %w(text/plain), "BibTeX document"],
'text/x-c++hdr' => [%w(h++ hh hp hpp hxx), %w(text/x-chdr), "C++ header"],
'text/x-c++src' => [%w(c c++ cc cpp cxx), %w(text/x-csrc), "C++ source code"],
'text/x-chdr' => [%w(h), %w(text/x-csrc), "C header"],
'text/x-cmake' => [%w(cmake), %w(), "CMake source code"],
'text/x-csharp' => [%w(cs), %w(text/x-csrc), "C# source code"],
'text/x-csrc' => [%w(c), %w(text/plain), "C source code"],
'text/x-dcl' => [%w(dcl), %w(text/plain), "DCL script"],
'text/x-dsl' => [%w(dsl), %w(text/plain), "DSSSL document"],
'text/x-dsrc' => [%w(d), %w(text/x-csrc), "D source code"],
'text/x-eiffel' => [%w(e eif), %w(text/plain), "Eiffel source code"],
'text/x-emacs-lisp' => [%w(el), %w(text/plain), "Emacs Lisp source code"],
'text/x-erlang' => [%w(erl), %w(text/plain), "Erlang source code"],
'text/x-fortran' => [%w(f f90 f95 for), %w(text/plain), "Fortran source code"],
'text/x-gettext-translation' => [%w(po), %w(text/plain), "translation file"],
'text/x-gettext-translation-template' => [%w(pot), %w(text/plain), "translation template"],
'text/x-google-video-pointer' => [%w(gvp), %w(), "Google Video Pointer"],
'text/x-haskell' => [%w(hs), %w(text/plain), "Haskell source code"],
'text/x-iMelody' => [%w(ime imy), %w(), "iMelody ringtone"],
'text/x-idl' => [%w(idl), %w(text/plain), "IDL document"],
'text/x-iptables' => [%w(iptables), %w(text/plain), "iptables configuration file"],
'text/x-java' => [%w(java), %w(text/x-csrc), "Java source code"],
'text/x-ldif' => [%w(ldif), %w(text/plain), "LDIF address book"],
'text/x-lilypond' => [%w(ly), %w(text/plain), "Lilypond music sheet"],
'text/x-literate-haskell' => [%w(lhs), %w(text/plain), "LHS source code"],
'text/x-log' => [%w(log), %w(text/plain), "application log"],
'text/x-lua' => [%w(lua), %w(application/x-executable text/plain), "Lua script"],
'text/x-matlab' => [%w(m), %w(text/plain), "MATLAB script/function"],
'text/x-microdvd' => [%w(sub), %w(text/plain), "MicroDVD subtitles"],
'text/x-moc' => [%w(moc), %w(text/plain), "Qt MOC file"],
'text/x-mof' => [%w(mof), %w(text/x-csrc), "Managed Object Format"],
'text/x-mpsub' => [%w(sub), %w(text/plain), "MPSub subtitles"],
'text/x-mrml' => [%w(mrl mrml), %w(), "MRML playlist"],
'text/x-ms-regedit' => [%w(reg), %w(text/plain), "Windows Registry extract"],
'text/x-mup' => [%w(mup not), %w(text/plain), "Mup publication"],
'text/x-nfo' => [%w(nfo), %w(text/x-readme), "NFO document"],
'text/x-objcsrc' => [%w(m), %w(text/x-csrc), "Objective-C source code"],
'text/x-ocaml' => [%w(ml mli), %w(), "OCaml source code"],
'text/x-ocl' => [%w(ocl), %w(text/plain), "OCL file"],
'text/x-opml+xml' => [%w(opml), %w(application/xml), "OPML syndication feed"],
'text/x-pascal' => [%w(p pas), %w(text/plain), "Pascal source code"],
'text/x-patch' => [%w(diff patch), %w(text/plain), "differences between files"],
'text/x-python' => [%w(py), %w(application/x-executable text/plain), "Python script"],
'text/x-rpm-spec' => [%w(spec), %w(text/plain), "RPM spec file"],
'text/x-scheme' => [%w(scm), %w(text/plain), "Scheme source code"],
'text/x-setext' => [%w(etx), %w(text/plain), "Setext document"],
'text/x-sql' => [%w(sql), %w(text/plain), "SQL code"],
'text/x-ssa' => [%w(ass ssa), %w(text/plain), "SSA subtitles"],
'text/x-subviewer' => [%w(sub), %w(text/plain), "SubViewer subtitles"],
'text/x-tcl' => [%w(tcl tk), %w(text/plain), "Tcl script"],
'text/x-tex' => [%w(cls dtx ins latex ltx sty tex), %w(text/plain), "TeX document"],
'text/x-texinfo' => [%w(texi texinfo), %w(text/plain), "TeXInfo document"],
'text/x-troff-me' => [%w(me), %w(text/plain), "Troff ME input document"],
'text/x-troff-mm' => [%w(mm), %w(text/plain), "Troff MM input document"],
'text/x-troff-ms' => [%w(ms), %w(text/plain), "Troff MS input document"],
'text/x-txt2tags' => [%w(t2t), %w(text/plain), "txt2tags document"],
'text/x-uil' => [%w(uil), %w(text/plain), "X-Motif UIL table"],
'text/x-uri' => [%w(uri url), %w(text/plain), "resource location"],
'text/x-vala' => [%w(vala vapi), %w(text/x-csrc), "Vala source code"],
'text/x-vhdl' => [%w(vhd vhdl), %w(text/plain), "VHDL document"],
'text/x-xmi' => [%w(xmi), %w(application/xml), "XMI file"],
'text/x-xslfo' => [%w(fo xslfo), %w(application/xml), "XSL FO file"],
'video/3gpp' => [%w(3g2 3ga 3gp 3gpp), %w(video/mp4), "3GPP multimedia file"],
'video/annodex' => [%w(axv), %w(application/annodex), "Annodex Video"],
'video/dv' => [%w(dv), %w(), "DV video"],
'video/mp4' => [%w(m4v mp4), %w(), "MPEG-4 video"],
'video/mpeg' => [%w(m2t mp2 mpe mpeg mpg vob), %w(), "MPEG video"],
'video/ogg' => [%w(ogv), %w(application/ogg), "Ogg Video"],
'video/quicktime' => [%w(moov mov qt qtvr), %w(), "QuickTime video"],
'video/vivo' => [%w(viv vivo), %w(), "Vivo video"],
'video/vnd.rn-realvideo' => [%w(rv rvx), %w(), "RealVideo document"],
'video/x-flic' => [%w(flc fli), %w(), "FLIC animation"],
'video/x-flv' => [%w(flv), %w(), "Flash video"],
'video/x-matroska' => [%w(mkv), %w(application/x-matroska), "Matroska video"],
'video/x-mng' => [%w(mng), %w(), "MNG animation"],
'video/x-ms-asf' => [%w(asf), %w(), "ASF video"],
'video/x-ms-wmv' => [%w(wmv), %w(video/x-ms-asf), "Windows Media video"],
'video/x-msvideo' => [%w(avi divx), %w(), "AVI video"],
'video/x-nsv' => [%w(nsv), %w(), "NullSoft video"],
'video/x-ogm+ogg' => [%w(ogm), %w(video/ogg), "OGM video"],
'video/x-sgi-movie' => [%w(movie), %w(), "SGI video"],
'video/x-theora+ogg' => [%w(ogg), %w(video/ogg), "Ogg Theora video"],
'x-epoc/x-sisx-app' => [%w(sisx), %w(), "SISX package"],
}
MAGIC = [
['application/vnd.stardivision.writer', [[2089, "StarWriter"]]],
......
......@@ -61,6 +61,7 @@ extensions = {}
types = {}
magics = []
(doc/'mime-info/mime-type').each do |mime|
comments = Hash[*(mime/'comment').map {|comment| [comment['lang'], comment.inner_text] }.flatten]
type = mime['type']
subclass = (mime/'sub-class-of').map{|x| x['type']}
exts = (mime/'glob').map{|x| x['pattern'] =~ /^\*\.([^\[\]]+)$/ ? $1.downcase : nil }.compact
......@@ -73,7 +74,7 @@ magics = []
exts.each{|x|
extensions[x] = type if !extensions.include?(x)
}
types[type] = [exts,subclass]
types[type] = [exts,subclass,comments[nil]]
end
end
......@@ -91,7 +92,8 @@ puts " TYPES = {"
types.keys.sort.each do |key|
exts = types[key][0].sort.join(' ')
parents = types[key][1].sort.join(' ')
puts " '#{key}' => [%w(#{exts}), %w(#{parents})],"
comment = types[key][2].inspect
puts " '#{key}' => [%w(#{exts}), %w(#{parents}), #{comment}],"
end
puts " }"
puts " MAGIC = ["
......
......@@ -23,8 +23,13 @@ describe 'MimeMagic' do
MimeMagic.new('text/html').extensions.should.equal %w(htm html)
end
it 'should have comment' do
MimeMagic.new('text/html').comment.should.equal 'HTML document'
end
it 'should recognize extensions' do
MimeMagic.by_extension('html').to_s.should.equal 'text/html'
MimeMagic.by_extension(:html).to_s.should.equal 'text/html'
MimeMagic.by_extension('rb').to_s.should.equal 'application/x-ruby'
MimeMagic.by_extension('crazy').should.equal nil
MimeMagic.by_extension('').should.equal nil
......@@ -39,9 +44,10 @@ describe 'MimeMagic' do
end
it 'should have add' do
MimeMagic.add('application/mimemagic-test', %w(ext1 ext2), %w(application/xml))
MimeMagic.add('application/mimemagic-test', :extensions => %w(ext1 ext2), :parents => 'application/xml', :comment => 'Comment')
MimeMagic.by_extension('ext1').to_s.should.equal 'application/mimemagic-test'
MimeMagic.by_extension('ext2').to_s.should.equal 'application/mimemagic-test'
MimeMagic.by_extension('ext2').comment.should.equal 'Comment'
MimeMagic.new('application/mimemagic-test').extensions.should.equal %w(ext1 ext2)
MimeMagic.new('application/mimemagic-test').should.be.child_of 'text/plain'
end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment