@@ -57,7 +57,7 @@ openURL u = getResponseBody =<< simpleHTTP (getReq u)
5757 Nothing -> error $ "Could not parse URI: " ++ u
5858 Just u' -> mkRequest GET u'
5959
60−mimeTypeFor :: String -> ByteString
60+mimeTypeFor :: String -> String
6161mimeTypeFor s = case lookup s mimetypes of
6262 Nothing -> error $ "Could not find mime type for " ++ s
6363 Just x -> x
@@ -191,46 +191,43 @@ mimeTypeFor s = case lookup s mimetypes of
191191
192192isOk c = isAscii c && isAlphaNum c
193193
194−convertTag :: Tag ByteString -> IO (Tag ByteString)
194+convertTag :: Tag String -> IO (Tag String)
195195convertTag t@(TagOpen "img" as) =
196196 case fromAttrib "src" t of
197− src | not (B.null src) -> do
197+ [] -> return t
198+ src -> do
198199 (raw, mime) <- getRaw t src
199− let enc = "data:" `B.append` mime `B.append` ";base64," `B.append` encode raw
200+ let enc = "data:" ++ mime ++ ";base64," ++ toString (encode raw)
200201 return $ TagOpen "img" (("src",enc) : [(x,y) | (x,y) <- as, x /= "src"])
201− _ -> return t
202202convertTag t@(TagOpen "script" as) =
203203 case fromAttrib "src" t of
204− src | not (B.null src) -> do
204+ [] -> return t
205+ src -> do
205206 (raw, mime) <- getRaw t src
206− let enc = "data:" `B.append` mime `B.append` "," `B.append`
207− (fromString $ escapeURIString isOk $ toString raw)
207+ let enc = "data:" ++ mime ++ "," ++ escapeURIString isOk (toString raw)
208208 return $ TagOpen "script" (("src",enc) : [(x,y) | (x,y) <- as, x /= "src"])
209− _ -> return t
210209convertTag t@(TagOpen "link" as) =
211210 case fromAttrib "href" t of
212− src | not (B.null src) -> do
211+ [] -> return t
212+ src -> do
213213 (raw, mime) <- getRaw t src
214− let enc = "data:" `B.append` mime `B.append` "," `B.append`
215− (fromString $ escapeURIString isOk $ toString raw)
214+ let enc = "data:" ++ mime ++ "," ++ escapeURIString isOk (toString raw)
216215 return $ TagOpen "link" (("href",enc) : [(x,y) | (x,y) <- as, x /= "href"])
217− _ -> return t
218216convertTag t = return t
219217
220−getRaw :: Tag ByteString -> ByteString -> IO (ByteString, ByteString)
218+getRaw :: Tag String -> String -> IO (ByteString, String)
221219getRaw t src = do
222− let src' = toString src
223− let ext = map toLower $ takeExtension src'
220+ let ext = map toLower $ takeExtension src
224221 let (ext',decompress) = if ext == ".gz"
225− then (takeExtension $ dropExtension src', B.concat . L.toChunks . Gzip.decompress . L.fromChunks . (:[]))
222+ then (takeExtension $ dropExtension src, B.concat . L.toChunks . Gzip.decompress . L.fromChunks . (:[]))
226223 else (ext, id)
227224 let mime = case fromAttrib "type" t of
228− x | not (B.null x) -> x
229− _ -> mimeTypeFor ext'
230− raw <- getItem src'
225+ [] -> mimeTypeFor ext'
226+ x -> x
227+ raw <- getItem src
231228 return (decompress raw, mime)
232229
233−offline :: ByteString -> IO ByteString
230+offline :: String -> IO String
234231offline inp = do
235232 let tags = parseTags inp
236233 out <- mapM convertTag tags