X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FMIMEType%2FGuess.hs;h=39de37e07d68464b8029021f745e956fa236c036;hb=70bf5bd248aa426ca4e410b3fb9a0529354aedaf;hp=6f4632609c6b1b2ef0d940de4cdc6b5003f470ef;hpb=11c3854540c46bfcd9e88c2164ed554f3b6550a5;p=Lucu.git diff --git a/Network/HTTP/Lucu/MIMEType/Guess.hs b/Network/HTTP/Lucu/MIMEType/Guess.hs index 6f46326..39de37e 100644 --- a/Network/HTTP/Lucu/MIMEType/Guess.hs +++ b/Network/HTTP/Lucu/MIMEType/Guess.hs @@ -1,5 +1,9 @@ --- |MIME Type guesser which guesses by a file extension. This is a --- poor man's way of guessing MIME Types. It is simple and fast. +{-# LANGUAGE + UnboxedTuples + , UnicodeSyntax + #-} +-- |MIME Type guessing by a file extension. This is a poor man's way +-- of guessing MIME Types. It is simple and fast. -- -- In general you don't have to use this module directly. module Network.HTTP.Lucu.MIMEType.Guess @@ -21,9 +25,8 @@ import Network.HTTP.Lucu.MIMEType import Network.HTTP.Lucu.Parser import Network.HTTP.Lucu.Parser.Http import Network.HTTP.Lucu.Utils -import System.IO --- |Map from extension to MIME Type. +-- |'Data.Map.Map' from extension to MIME Type. type ExtMap = Map String MIMEType -- |Guess the MIME Type of file. @@ -40,10 +43,13 @@ parseExtMapFile fpath = fpath `seq` do file <- B.readFile fpath case parse (allowEOF extMapP) file of - (Success xs, _) -> return $ compile xs - (_, input') -> let near = B.unpack $ B.take 100 input' - in - fail ("Failed to parse: " ++ fpath ++ " (near: " ++ near ++ ")") + (# Success xs, _ #) + -> return $ compile xs + + (# _, input' #) + -> let near = B.unpack $ B.take 100 input' + in + fail ("Failed to parse: " ++ fpath ++ " (near: " ++ near ++ ")") extMapP :: Parser [ (MIMEType, [String]) ] @@ -53,14 +59,14 @@ extMapP = do xs <- many (comment <|> validLine <|> emptyLine) where spc = oneOf " \t" - comment = do many spc - char '#' - many $ satisfy (/= '\n') - return Nothing + comment = many spc >> + char '#' >> + ( many $ satisfy (/= '\n') ) >> + return Nothing - validLine = do many spc + validLine = do _ <- many spc mime <- mimeTypeP - many spc + _ <- many spc exts <- sepBy token (many spc) return $ Just (mime, exts) @@ -99,9 +105,9 @@ serializeExtMap extMap moduleName variableName [] (HsUnGuardedRhs extMapExp) []] ] extMapExp = HsApp (HsVar (Qual (Module "M") (HsIdent "fromList"))) (HsList records) - comment = "{- !!! WARNING !!!\n" - ++ " This file is automatically generated.\n" - ++ " DO NOT EDIT BY HAND OR YOU WILL REGRET -}\n\n" + comment = "{- !!! WARNING !!!\n" + ++ " This file is automatically generated.\n" + ++ " DO NOT EDIT BY HAND OR YOU WILL REGRET -}\n\n" in comment ++ prettyPrint hsModule ++ "\n" where