examples/mime-type.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Fri, 02 Apr 2010 19:58:18 +0300
changeset 101 98488a7e6a48
child 102 f3d9d9e67ee4
permissions -rw-r--r--
Add missing mime-type script
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
101
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
#! /usr/bin/lua
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
--[[ Copyright 2010 Myhailo Danylenko
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
This program is free software: you can redistribute it and/or modify
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     6
it under the terms of the GNU General Public License as published by
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     7
the Free Software Foundation, either version 2 of the License, or
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
(at your option) any later version.
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     9
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
This program is distributed in the hope that it will be useful,
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
but WITHOUT ANY WARRANTY; without even the implied warranty of
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    13
GNU General Public License for more details.
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    14
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    15
You should have received a copy of the GNU General Public License
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
along with this program.  If not, see <http://www.gnu.org/licenses/>. ]]
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    17
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    18
--
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
-- Simple mime type detector
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
--
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
local F = { }
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
local options = {
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
	database = '/etc/mime.types',
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
	default  = 'application/octet-stream',
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
}
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
local db = { }
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
local h = io.open ( options['database'], 'r' )
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
if not h then
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
	print ( ("mime-type: error loading database from %s"):format ( options['database'] ) )
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
else
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
	for l in h:lines () do
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
		local mtype, exts = l:match ( '^([%S]+)%s+(%S.*)$' )
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
		if mtype then
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
			for ext in exts:gmatch ( '%S+' ) do
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
				print ( ("Adding type %s for extension %s"):format ( mtype, ext ) )
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
				db[ext] = mtype
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
			end
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
		end
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
	end
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
	h:close ()
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
end
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
function F.type ( filename )
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
	local ext = filename:match ( "^.-%.([%w%d]+)$" )
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
	if ext then
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
		local mtype = db[ext]
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
		if mtype then
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
			return mtype
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
		end
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
	end
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
	return options['default']
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
end
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
return F
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
98488a7e6a48 Add missing mime-type script
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
-- vim: se ts=4 sw=4: --