@@ -670,26 +670,31 @@ targetURI = do
670670imageKey :: Parser [Char] ParserState (Key, Target)
671671imageKey = try $ do
672672 string ".. |"
673− ref <- manyTill inline (char '|')
673+ (_,ref) <- withRaw (manyTill inline (char '|'))
674674 skipSpaces
675675 string "image::"
676676 src <- targetURI
677− return (toKey (normalizeSpaces ref), (src, ""))
677+ return (toKey $ init ref, (src, ""))
678678
679679anonymousKey :: Parser [Char] st (Key, Target)
680680anonymousKey = try $ do
681681 oneOfStrings [".. __:", "__"]
682682 src <- targetURI
683683 pos <- getPosition
684− return (toKey [Str $ "_" ++ printf "%09d" (sourceLine pos)], (src, ""))
684+ return (toKey $ "_" ++ printf "%09d" (sourceLine pos), (src, ""))
685+
686+stripTicks :: String -> String
687+stripTicks = reverse . stripTick . reverse . stripTick
688+ where stripTick ('`':xs) = xs
689+ stripTick xs = xs
685690
686691regularKey :: Parser [Char] ParserState (Key, Target)
687692regularKey = try $ do
688693 string ".. _"
689− ref <- referenceName
694+ (_,ref) <- withRaw referenceName
690695 char ':'
691696 src <- targetURI
692− return (toKey (normalizeSpaces ref), (src, ""))
697+ return (toKey $ stripTicks ref, (src, ""))
693698
694699--
695700-- tables
@@ -921,19 +926,19 @@ explicitLink = try $ do
921926
922927referenceLink :: Parser [Char] ParserState Inline
923928referenceLink = try $ do
924− label' <- (quotedReferenceName <|> simpleReferenceName) >>~ char '_'
929+ (label',ref) <- withRaw (quotedReferenceName <|> simpleReferenceName) >>~
930+ char '_'
925931 state <- getState
926932 let keyTable = stateKeys state
927− let isAnonKey x = case fromKey x of
928− [Str ('_':_)] -> True
929− _ -> False
930− key <- option (toKey label') $
933+ let isAnonKey (Key ('_':_)) = True
934+ isAnonKey _ = False
935+ key <- option (toKey $ stripTicks ref) $
931936 do char '_'
932937 let anonKeys = sort $ filter isAnonKey $ M.keys keyTable
933938 if null anonKeys
934939 then mzero
935940 else return (head anonKeys)
936− (src,tit) <- case lookupKeySrc keyTable key of
941+ (src,tit) <- case M.lookup key keyTable of
937942 Nothing -> fail "no corresponding key"
938943 Just target -> return target
939944 -- if anonymous link, remove key so it won't be used again
@@ -957,13 +962,13 @@ autoLink = autoURI <|> autoEmail
957962image :: Parser [Char] ParserState Inline
958963image = try $ do
959964 char '|'
960− ref <- manyTill inline (char '|')
965+ (alt,ref) <- withRaw (manyTill inline (char '|'))
961966 state <- getState
962967 let keyTable = stateKeys state
963− (src,tit) <- case lookupKeySrc keyTable (toKey ref) of
968+ (src,tit) <- case M.lookup (toKey $ init ref) keyTable of
964969 Nothing -> fail "no corresponding key"
965970 Just target -> return target
966− return $ Image (normalizeSpaces ref) (src, tit)
971+ return $ Image (normalizeSpaces alt) (src, tit)
967972
968973note :: Parser [Char] ParserState Inline
969974note = try $ do