@@ -556,7 +556,7 @@ targetURI = do
556556 contents <- many1 (try (many spaceChar >> newline >>
557557 many1 spaceChar >> noneOf " \t\n") <|> noneOf "\n")
558558 blanklines
559− return contents
559+ return $ escapeURI $ removeLeadingTrailingSpace $ contents
560560
561561imageKey :: GenParser Char ParserState ([Inline], (String, [Char]))
562562imageKey = try $ do
@@ -565,13 +565,13 @@ imageKey = try $ do
565565 skipSpaces
566566 string "image::"
567567 src <- targetURI
568− return (normalizeSpaces ref, (removeLeadingTrailingSpace src, ""))
568+ return (normalizeSpaces ref, (src, ""))
569569
570570anonymousKey :: GenParser Char st ([Inline], (String, [Char]))
571571anonymousKey = try $ do
572572 oneOfStrings [".. __:", "__"]
573573 src <- targetURI
574− return ([Str "_"], (removeLeadingTrailingSpace src, ""))
574+ return ([Str "_"], (src, ""))
575575
576576regularKey :: GenParser Char ParserState ([Inline], (String, [Char]))
577577regularKey = try $ do
@@ -579,7 +579,7 @@ regularKey = try $ do
579579 ref <- referenceName
580580 char ':'
581581 src <- targetURI
582− return (normalizeSpaces ref, (removeLeadingTrailingSpace src, ""))
582+ return (normalizeSpaces ref, (src, ""))
583583
584584--
585585-- tables
@@ -883,7 +883,8 @@ explicitLink = try $ do
883883 src <- manyTill (noneOf ">\n") (char '>')
884884 skipSpaces
885885 string "`_"
886− return $ Link (normalizeSpaces label') (removeLeadingTrailingSpace src, "")
886+ return $ Link (normalizeSpaces label')
887+ (escapeURI $ removeLeadingTrailingSpace src, "")
887888
888889referenceLink :: GenParser Char ParserState Inline
889890referenceLink = try $ do
@@ -891,25 +892,25 @@ referenceLink = try $ do
891892 key <- option label' (do{char '_'; return [Str "_"]}) -- anonymous link
892893 state <- getState
893894 let keyTable = stateKeys state
894− src <- case lookupKeySrc keyTable key of
895− Nothing -> fail "no corresponding key"
896− Just target -> return target
895+ (src,tit) <- case lookupKeySrc keyTable key of
896+ Nothing -> fail "no corresponding key"
897+ Just target -> return target
897898 -- if anonymous link, remove first anon key so it won't be used again
898899 let keyTable' = if (key == [Str "_"]) -- anonymous link?
899− then delete ([Str "_"], src) keyTable -- remove first anon key
900+ then delete ([Str "_"], (src,tit)) keyTable -- remove first anon key
900901 else keyTable
901902 setState $ state { stateKeys = keyTable' }
902− return $ Link (normalizeSpaces label') src
903+ return $ Link (normalizeSpaces label') (src, tit)
903904
904905autoURI :: GenParser Char ParserState Inline
905906autoURI = do
906− src <- uri
907− return $ Link [Str src] (src, "")
907+ (orig, src) <- uri
908+ return $ Link [Str orig] (src, "")
908909
909910autoEmail :: GenParser Char ParserState Inline
910911autoEmail = do
911− src <- emailAddress
912− return $ Link [Str src] ("mailto:" ++ src, "")
912+ (orig, src) <- emailAddress
913+ return $ Link [Str orig] (src, "")
913914
914915autoLink :: GenParser Char ParserState Inline
915916autoLink = autoURI <|> autoEmail
@@ -921,7 +922,7 @@ image = try $ do
921922 ref <- manyTill inline (char '|')
922923 state <- getState
923924 let keyTable = stateKeys state
924− src <- case lookupKeySrc keyTable ref of
925− Nothing -> fail "no corresponding key"
926− Just target -> return target
927− return $ Image (normalizeSpaces ref) src
925+ (src,tit) <- case lookupKeySrc keyTable ref of
926+ Nothing -> fail "no corresponding key"
927+ Just target -> return target
928+ return $ Image (normalizeSpaces ref) (src, tit)