Removed many usage of READABLE_STRING_GENERAL in favor to READABLE_STRING_8 to avoid potential nasty issues in user's code URI-template is working only with STRING_8, then changed any _GENERAL or _STRING_32 to _STRING_8
239 lines
4.9 KiB
Plaintext
239 lines
4.9 KiB
Plaintext
note
|
|
description: "[
|
|
Various common MIME types for file extensions
|
|
|
|
See also for longer list and description
|
|
http://www.webmaster-toolkit.com/mime-types.shtml
|
|
|
|
Please suggest missing entries
|
|
]"
|
|
date: "$Date$"
|
|
revision: "$Revision$"
|
|
|
|
class
|
|
HTTP_FILE_EXTENSION_MIME_MAPPING
|
|
|
|
inherit
|
|
ANY
|
|
|
|
HTTP_MIME_TYPES
|
|
export
|
|
{NONE} all
|
|
end
|
|
|
|
create
|
|
make_empty,
|
|
make_default,
|
|
make_from_string,
|
|
make_from_file
|
|
|
|
feature {NONE} -- Initialization
|
|
|
|
make_empty (n: INTEGER)
|
|
-- Create with no mapping
|
|
-- but one can use `map' to add new mapping
|
|
do
|
|
create mapping.make (n)
|
|
mapping.compare_objects
|
|
end
|
|
|
|
make_default
|
|
-- Create with default limited mapping
|
|
-- One can use `map' to add new mapping
|
|
local
|
|
m: like mapping
|
|
do
|
|
create m.make (40)
|
|
mapping := m
|
|
m.compare_objects
|
|
m.force (text_css, "css")
|
|
m.force (text_html, "html")
|
|
m.force (text_xml, "xml")
|
|
m.force (application_json, "json")
|
|
m.force (application_javascript, "js")
|
|
m.force (application_rss_xml, "rss")
|
|
m.force (application_atom_xml, "atom")
|
|
m.force (image_x_ico, "ico")
|
|
m.force (image_gif, "gif")
|
|
m.force (image_jpeg, "jpeg")
|
|
m.force (image_jpg, "jpg")
|
|
m.force (image_png, "png")
|
|
m.force (application_zip, "zip")
|
|
m.force (application_x_bzip, "bz")
|
|
m.force (application_x_bzip2, "bz2")
|
|
m.force (application_x_gzip, "gz")
|
|
m.force (application_x_gzip, "gzip")
|
|
m.force (application_x_tar, "tar")
|
|
m.force (application_x_compressed, "tgz")
|
|
m.force (application_postscript, "ps")
|
|
m.force (application_pdf, "pdf")
|
|
m.force (application_x_shockwave_flash, "swf")
|
|
m.force (text_plain, "conf")
|
|
m.force (text_plain, "log")
|
|
m.force (text_plain, "text")
|
|
m.force (text_plain, "txt")
|
|
end
|
|
|
|
make_from_file (fn: READABLE_STRING_8)
|
|
-- Create with mime.types file
|
|
-- One can use `map' to add new mapping
|
|
local
|
|
f: RAW_FILE
|
|
do
|
|
create f.make (fn)
|
|
if f.exists and then f.is_readable then
|
|
make_empty (50)
|
|
f.open_read
|
|
from
|
|
f.read_line
|
|
until
|
|
f.exhausted or f.end_of_file
|
|
loop
|
|
add_mapping_line (f.last_string)
|
|
f.read_line
|
|
end
|
|
f.close
|
|
else
|
|
make_empty (0)
|
|
end
|
|
end
|
|
|
|
make_from_string (t: READABLE_STRING_8)
|
|
-- Set mapping from multiline string `t'
|
|
-- line should be formatted as in http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
|
|
--| # is a comment
|
|
--| mime-type space(s) extensions
|
|
local
|
|
i,j,n: INTEGER
|
|
do
|
|
make_empty (10)
|
|
n := t.count
|
|
if n > 0 then
|
|
from
|
|
i := 1
|
|
until
|
|
i = 0 or i > n
|
|
loop
|
|
j := t.index_of ('%N', i)
|
|
if j > 0 then
|
|
add_mapping_line (t.substring (i, j - 1))
|
|
i := j + 1
|
|
else
|
|
add_mapping_line (t.substring (i, n))
|
|
i := 0
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
feature -- Access
|
|
|
|
mime_type (ext: READABLE_STRING_8): detachable READABLE_STRING_8
|
|
-- Mime type for extension `ext'
|
|
do
|
|
Result := mapping.item (ext.as_lower)
|
|
end
|
|
|
|
feature -- Element change
|
|
|
|
map (e: READABLE_STRING_8; t: READABLE_STRING_8)
|
|
-- Add mapping extension `e' to mime type `t'
|
|
do
|
|
mapping.force (t, e.as_lower)
|
|
end
|
|
|
|
feature {NONE} -- Implementation
|
|
|
|
add_mapping_line (t: READABLE_STRING_8)
|
|
local
|
|
i,j,n: INTEGER
|
|
l_type, l_ext: READABLE_STRING_8
|
|
do
|
|
n := t.count
|
|
if n > 0 then
|
|
-- ignore blanks
|
|
i := next_non_blank_position (t, i)
|
|
if i > 0 then
|
|
if t[i] = '#' then
|
|
--| ignore
|
|
else
|
|
j := next_blank_position (t, i)
|
|
if j > i then
|
|
l_type := t.substring (i, j - 1)
|
|
from
|
|
until
|
|
i = 0
|
|
loop
|
|
i := next_non_blank_position (t, j)
|
|
if i > 0 then
|
|
j := next_blank_position (t, i)
|
|
if j = 0 then
|
|
l_ext := t.substring (i, n)
|
|
i := 0
|
|
else
|
|
l_ext := t.substring (i, j - 1)
|
|
i := j
|
|
end
|
|
map (l_ext, l_type)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
next_blank_position (s: READABLE_STRING_8; p: INTEGER): INTEGER
|
|
local
|
|
i, n: INTEGER
|
|
do
|
|
n := s.count
|
|
from
|
|
i := p + 1
|
|
until
|
|
i > n or s[i].is_space
|
|
loop
|
|
i := i + 1
|
|
end
|
|
if i <= n then
|
|
Result := i
|
|
end
|
|
end
|
|
|
|
next_non_blank_position (s: READABLE_STRING_8; p: INTEGER): INTEGER
|
|
local
|
|
i, n: INTEGER
|
|
do
|
|
n := s.count
|
|
from
|
|
i := p + 1
|
|
until
|
|
i > n or not s[i].is_space
|
|
loop
|
|
i := i + 1
|
|
end
|
|
if i <= n then
|
|
Result := i
|
|
end
|
|
end
|
|
|
|
|
|
feature {NONE} -- Extension MIME mapping
|
|
|
|
mapping: HASH_TABLE [READABLE_STRING_8, READABLE_STRING_8]
|
|
|
|
invariant
|
|
mapping_keys_are_lowercase: across mapping as c all c.key.same_string (c.key.as_lower) end
|
|
|
|
note
|
|
copyright: "2011-2011, Eiffel Software and others"
|
|
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
|
source: "[
|
|
Eiffel Software
|
|
5949 Hollister Ave., Goleta, CA 93117 USA
|
|
Telephone 805-685-1006, Fax 805-685-6869
|
|
Website http://www.eiffel.com
|
|
Customer support http://support.eiffel.com
|
|
]"
|
|
end
|