@@ -338,11 +338,13 @@ footnoteSection opts notes =
339-- | Parse a mailto link; return Just (name, domain) or Nothing.
339-- | Parse a mailto link; return Just (name, domain) or Nothing.
340parseMailto :: String -> Maybe (String, String)
340parseMailto :: String -> Maybe (String, String)
341−parseMailto ('m':'a':'i':'l':'t':'o':':':addr) =
341+parseMailto s = do
342+ case break (==':') s of
343+ (xs,':':addr) | map toLower xs == "mailto" -> do
342− let (name', rest) = span (/='@') addr
344+ let (name', rest) = span (/='@') addr
343− domain = drop 1 rest
345+ let domain = drop 1 rest
344− in Just (name', domain)
346+ return (name', domain)
345−parseMailto _ = Nothing
347+ _ -> fail "not a mailto: URL"
347-- | Obfuscate a "mailto:" link.
349-- | Obfuscate a "mailto:" link.
348obfuscateLink :: WriterOptions -> String -> String -> Html
350obfuscateLink :: WriterOptions -> String -> String -> Html
@@ -350,7 +352,7 @@ obfuscateLink opts txt s | writerEmailObfuscation opts == NoObfuscation =
350 H.a ! A.href (toValue s) $ toHtml txt
352 H.a ! A.href (toValue s) $ toHtml txt
351obfuscateLink opts txt s =
353obfuscateLink opts txt s =
352 let meth = writerEmailObfuscation opts
354 let meth = writerEmailObfuscation opts
353− s' = map toLower s
355+ s' = map toLower (take 7 s) ++ drop 7 s
354 in case parseMailto s' of
356 in case parseMailto s' of
355 (Just (name', domain)) ->
357 (Just (name', domain)) ->
356 let domain' = substitute "." " dot " domain
358 let domain' = substitute "." " dot " domain