12345678910111213141516171819202122232425262728293031323334353637383940414243(*
* Copyright (c) 2009 Anil Madhavapeddy <anil@recoil.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*)(* Retrieve file extension, if any, or blank string otherwise *)letget_extensionfilename=letrecsearch_doti=ifi<1||filename.[i]='/'then""elseiffilename.[i]='.'thenString.subfilename(i+1)(String.lengthfilename-i-1)elsesearch_dot(i-1)insearch_dot(String.lengthfilename-1)(* Given a full filename, lookup its MIME type *)letlookup?defaultfilename=matchget_extensionfilenamewith|""->Mime_types.map_file?defaultfilename|ext->Mime_types.map_extension?default(String.lowercase_asciiext)letreverse_lookupmime=letmime'=letstring_length=String.lengthmimeinletrecstrip_parametersi=ifi=string_length||mime.[i]=';'thenString.submime0ielsestrip_parameters(i+1)instrip_parameters0inMime_types.map_mimemime'