(in-package :site) (defconstant +content-type->extensions+ (loop with table = (make-hash-table :test 'equal) for (content-type . extensions) in '(("application/atom+xml" "xml" "atom") ("application/javascript" "js") ("application/msword" "doc") ("application/pdf" "pdf") ("application/postscript" "ps" "ai" "eps") ("application/vnd.ms-powerpoint" "ppt") ("application/rss+xml" "xml" "rss") ("application/x-latex" "latex" "tex") ("application/x-rpm" "rpm") ("application/x-sh" "sh") ("application/x-shockwave-flash" "swf") ("application/x-tex" "tex") ("application/x-texinfo" "texi" "texinfo") ("application/x-troff" "t" "tr" "roff") ("application/x-troff-man" "man") ("application/x-troff-me" "me") ("application/x-troff-ms" "ms") ("audio/basic" "au" "snd") ("audio/midi" "mid" "midi" "kar") ("audio/mpeg" "mp3" "mp2" "mpga") ("audio/x-aiff" "aif" "aiff" "aifc") ("audio/x-pn-realaudio" "ram" "rm") ("audio/x-realaudio" "ra") ("audio/x-wav" "wav") ("image/bmp" "bmp") ("image/gif" "gif") ("image/jpeg" "jpg" "jpeg" "jpe") ("image/pjpeg" "jpg") ("image/png" "png") ("image/tiff" "tiff" "tif") ("image/x-png" "png") ("image/x-portable-anymap" "pnm") ("image/x-portable-bitmap" "pbm") ("image/x-portable-graymap" "pgm") ("image/x-portable-pixmap" "ppm") ("image/x-rgb" "rgb") ("image/x-xbitmap" "xbm") ("image/x-xpixmap" "xpm") ("image/x-xwindowdump" "xwd") ("text/css" "css") ("text/html" "html" "htm" "shtml") ("text/javascript" "js") ("text/lisp" "lisp" "lsp" "cl") ("text/plain" "txt" "text" "asc") ("text/richtext" "rtx") ("text/rtf" "rtf") ("text/sgml" "sgml" "sgm") ("text/tab-separated-values" "tsv") ("text/xml" "xml") ("video/mpeg" "mpeg" "mpg" "mpe") ("video/quicktime" "mov" "qt") ("video/x-msvideo" "avi") ("video/x-sgi-movie" "movie") ("x-conference/x-cooltalk" "ice")) do (setf (gethash content-type table) extensions) finally (return table)))