@@ -556,7 +556,7 @@ targetURI = do
556 contents <- many1 (try (many spaceChar >> newline >>
556 contents <- many1 (try (many spaceChar >> newline >>
557 many1 spaceChar >> noneOf " \t\n") <|> noneOf "\n")
557 many1 spaceChar >> noneOf " \t\n") <|> noneOf "\n")
558 blanklines
558 blanklines
559− return contents
559+ return $ escapeURI $ removeLeadingTrailingSpace $ contents
561imageKey :: GenParser Char ParserState ([Inline], (String, [Char]))
561imageKey :: GenParser Char ParserState ([Inline], (String, [Char]))
562imageKey = try $ do
562imageKey = try $ do
@@ -565,13 +565,13 @@ imageKey = try $ do
565 skipSpaces
565 skipSpaces
566 string "image::"
566 string "image::"
567 src <- targetURI
567 src <- targetURI
568− return (normalizeSpaces ref, (removeLeadingTrailingSpace src, ""))
568+ return (normalizeSpaces ref, (src, ""))
570anonymousKey :: GenParser Char st ([Inline], (String, [Char]))
570anonymousKey :: GenParser Char st ([Inline], (String, [Char]))
571anonymousKey = try $ do
571anonymousKey = try $ do
572 oneOfStrings [".. __:", "__"]
572 oneOfStrings [".. __:", "__"]
573 src <- targetURI
573 src <- targetURI
574− return ([Str "_"], (removeLeadingTrailingSpace src, ""))
574+ return ([Str "_"], (src, ""))
576regularKey :: GenParser Char ParserState ([Inline], (String, [Char]))
576regularKey :: GenParser Char ParserState ([Inline], (String, [Char]))
577regularKey = try $ do
577regularKey = try $ do
@@ -579,7 +579,7 @@ regularKey = try $ do
579 ref <- referenceName
579 ref <- referenceName
581 src <- targetURI
581 src <- targetURI
582− return (normalizeSpaces ref, (removeLeadingTrailingSpace src, ""))
582+ return (normalizeSpaces ref, (src, ""))
@@ -883,7 +883,8 @@ explicitLink = try $ do
883 src <- manyTill (noneOf ">\n") (char '>')
883 src <- manyTill (noneOf ">\n") (char '>')
884 skipSpaces
884 skipSpaces
885 string "`_"
885 string "`_"
886− return $ Link (normalizeSpaces label') (removeLeadingTrailingSpace src, "")
886+ return $ Link (normalizeSpaces label')
887+ (escapeURI $ removeLeadingTrailingSpace src, "")
888referenceLink :: GenParser Char ParserState Inline
889referenceLink :: GenParser Char ParserState Inline
889referenceLink = try $ do
890referenceLink = try $ do
@@ -891,25 +892,25 @@ referenceLink = try $ do
891 key <- option label' (do{char '_'; return [Str "_"]}) -- anonymous link
892 key <- option label' (do{char '_'; return [Str "_"]}) -- anonymous link
892 state <- getState
893 state <- getState
893 let keyTable = stateKeys state
894 let keyTable = stateKeys state
894− src <- case lookupKeySrc keyTable key of
895+ (src,tit) <- case lookupKeySrc keyTable key of
895− Nothing -> fail "no corresponding key"
896+ Nothing -> fail "no corresponding key"
896− Just target -> return target
897+ Just target -> return target
897 -- if anonymous link, remove first anon key so it won't be used again
898 -- if anonymous link, remove first anon key so it won't be used again
898 let keyTable' = if (key == [Str "_"]) -- anonymous link?
899 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
900 else keyTable
901 else keyTable
901 setState $ state { stateKeys = keyTable' }
902 setState $ state { stateKeys = keyTable' }
902− return $ Link (normalizeSpaces label') src
903+ return $ Link (normalizeSpaces label') (src, tit)
904autoURI :: GenParser Char ParserState Inline
905autoURI :: GenParser Char ParserState Inline
905autoURI = do
906autoURI = do
906− src <- uri
907+ (orig, src) <- uri
907− return $ Link [Str src] (src, "")
908+ return $ Link [Str orig] (src, "")
909autoEmail :: GenParser Char ParserState Inline
910autoEmail :: GenParser Char ParserState Inline
910autoEmail = do
911autoEmail = do
911− src <- emailAddress
912+ (orig, src) <- emailAddress
912− return $ Link [Str src] ("mailto:" ++ src, "")
913+ return $ Link [Str orig] (src, "")
914autoLink :: GenParser Char ParserState Inline
915autoLink :: GenParser Char ParserState Inline
915autoLink = autoURI <|> autoEmail
916autoLink = autoURI <|> autoEmail
@@ -921,7 +922,7 @@ image = try $ do
921 ref <- manyTill inline (char '|')
922 ref <- manyTill inline (char '|')
922 state <- getState
923 state <- getState
923 let keyTable = stateKeys state
924 let keyTable = stateKeys state
924− src <- case lookupKeySrc keyTable ref of
925+ (src,tit) <- case lookupKeySrc keyTable ref of
925− Nothing -> fail "no corresponding key"
926+ Nothing -> fail "no corresponding key"
926− Just target -> return target
927+ Just target -> return target
927− return $ Image (normalizeSpaces ref) src
928+ return $ Image (normalizeSpaces ref) (src, tit)