Use same format as mime type lib

This commit is contained in:
Joshua Peek
2011-06-08 09:17:20 -05:00
parent 555745c48f
commit 04e6a8133b
3 changed files with 52 additions and 102 deletions

View File

@@ -2,27 +2,42 @@ require 'mime/types'
require 'yaml'
# Register additional mime type extensions
mime_extensions = YAML.load_file(File.expand_path("../mimes.yml", __FILE__))
mime_extensions.each do |mime_type, options|
mime = MIME::Types[mime_type].first || MIME::Type.new(mime_type)
File.read(File.expand_path("../mimes.yml", __FILE__)).lines.each do |line|
next unless line =~ %r{^
#{MIME::Type::MEDIA_TYPE_RE}
(?:\s@([^\s]+))?
(?:\s:(#{MIME::Type::ENCODING_RE}))?
}x
(options['extensions'] || []).each { |ext| mime.extensions << ext }
mediatype = $1
subtype = $2
extensions = $3
encoding = $4
(options['exclude_extensions'] || []).each do |ext|
mime.extensions.delete(ext)
mime_type = MIME::Types["#{mediatype}/#{subtype}"].first ||
MIME::Type.new("#{mediatype}/#{subtype}")
MIME::Types.instance_eval do
@__types__.instance_eval do
@extension_index[ext].delete(mime)
if extensions
extensions.split(/,/).each do |extension|
if extension =~ /^-(\w+)/
extension = $1
mime_type.extensions.delete(extension)
MIME::Types.instance_eval do
@__types__.instance_eval do
@extension_index[extension].delete(mime_type)
end
end
else
mime_type.extensions << extension
end
end
end
mime.binary = options['binary'] if options.key?('binary')
mime.encoding = options['encoding'] if options.key?('encoding')
mime_type.encoding = encoding
MIME::Types.add_type_variant(mime)
MIME::Types.index_extensions(mime)
MIME::Types.add_type_variant(mime_type)
MIME::Types.index_extensions(mime_type)
end
module Linguist

View File

@@ -1,92 +1,26 @@
# Additional types to add to MIME::Types
#
# <type> @<extensions> :<encoding>
#
# Follows same format as mime-types data file
# https://github.com/halostatue/mime-types/blob/master/lib/mime/types.rb.data
application/x-troff-ms:
encoding: 8bit
# TODO: Lookup actual types
application/octet-stream @a,blend,gem,graffle,ipa,lib,mcz,nib,o,odp,ods,odt,otf,ogv,pfx,pigx,plgx,pptx,psd,sib,spl,sqlite3,swc,ucode,xpi
application/netcdf:
encoding: 8bit
application/x-pagemaker:
exclude_extensions:
- pm
application/x-wais-source:
encoding: 8bit
application/vnd.mozilla.xul+xml:
encoding: 8bit
application/vnd.adobe.air-application-installer-package+zip:
extensions:
- air
application/octet-stream:
extensions:
# TODO: Lookup actual content type for these extensions
- a
- blend
- gem
- graffle
- ipa
- lib
- mcz
- nib
- o
- odp
- ods
- odt
- otf
- ogv
- pfx
- pigx
- plgx
- pptx
- psd
- sib
- spl
- sqlite3
- swc
- ucode
- xpi
application/postscript:
encoding: base64
application/java-archive:
extensions:
- ear
- war
application/x-chrome-extension:
extensions:
- crx
application/x-shockwave-flash:
extensions:
- swf
image/x-icns:
extensions:
- icns
text/cache-manifest:
extensions:
- manifest
application/ogg:
extensions:
- ogg
application/x-silverlight-app:
extensions:
- xap
application/xaml+xml:
encoding: 8bit
extensions:
- xaml
application/x-ms-xbap:
encoding: 8bit
extensions:
- xbap
application/java-archive @ear,war
application/netcdf :8bit
application/ogg @ogg
application/postscript :base64
application/vnd.adobe.air-application-installer-package+zip @air
application/vnd.mozilla.xul+xml :8bit
application/x-chrome-extension @crx
application/x-ms-xbap @xbap :8bit
application/x-pagemaker @-pm
application/x-shockwave-flash @swf
application/x-silverlight-app @xap
application/x-troff-ms :8bit
application/x-wais-source :8bit
application/xaml+xml @xaml :8bit
image/x-icns @icns
text/cache-manifest @manifest

View File

@@ -120,6 +120,7 @@ class TestMime < Test::Unit::TestCase
assert !Mime.binary?("application/xaml+xml")
assert !Mime.binary?("application/xhtml+xml")
assert !Mime.binary?("application/xml")
assert !Mime.binary?("text/cache-manifest")
assert !Mime.binary?("text/css")
assert !Mime.binary?("text/csv")
assert !Mime.binary?("text/html")