@@ -95,8 +95,8 @@ parseRST = do
95 startPos <- getPosition
95 startPos <- getPosition
96 -- go through once just to get list of reference keys and notes
96 -- go through once just to get list of reference keys and notes
97 -- docMinusKeys is the raw document with blanks where the keys were...
97 -- docMinusKeys is the raw document with blanks where the keys were...
98− docMinusKeys <- manyTill (referenceKey <|> noteBlock <|> lineClump) eof >>=
98+ docMinusKeys <- manyTill (referenceKey <|> imageKey <|>
99− return . concat
99+ noteBlock <|> lineClump) eof >>= return . concat
100 setInput docMinusKeys
100 setInput docMinusKeys
101 setPosition startPos
101 setPosition startPos
102 st' <- getState
102 st' <- getState
@@ -652,7 +652,7 @@ referenceName = quotedReferenceName <|>
652referenceKey :: Parser [Char] ParserState [Char]
652referenceKey :: Parser [Char] ParserState [Char]
653referenceKey = do
653referenceKey = do
654 startPos <- getPosition
654 startPos <- getPosition
655− (key, target) <- choice [imageKey, anonymousKey, regularKey]
655+ (key, target) <- choice [anonymousKey, regularKey]
656 st <- getState
656 st <- getState
657 let oldkeys = stateKeys st
657 let oldkeys = stateKeys st
658 updateState $ \s -> s { stateKeys = M.insert key target oldkeys }
658 updateState $ \s -> s { stateKeys = M.insert key target oldkeys }
@@ -670,14 +670,21 @@ targetURI = do
670 blanklines
670 blanklines
671 return $ escapeURI $ removeLeadingTrailingSpace $ contents
671 return $ escapeURI $ removeLeadingTrailingSpace $ contents
673−imageKey :: Parser [Char] ParserState (Key, Target)
673+imageKey :: Parser [Char] ParserState [Char]
674imageKey = try $ do
674imageKey = try $ do
675+ startPos <- getPosition
675 string ".. |"
676 string ".. |"
676− (_,ref) <- withRaw (manyTill inline (char '|'))
677+ (alt,ref) <- withRaw (manyTill inline (char '|'))
677 skipSpaces
678 skipSpaces
678 string "image::"
679 string "image::"
679 src <- targetURI
680 src <- targetURI
681+ let img = Image alt (src,"")
680− return (toKey $ init ref, (src, ""))
682+ let key = toKey $ init ref
683+ updateState $ \s -> s{ stateSubstitutions = M.insert key img $ stateSubstitutions s }
685+ endPos <- getPosition
686+ -- return enough blanks to replace key
687+ return $ replicate (sourceLine endPos - sourceLine startPos) '\n'
682anonymousKey :: Parser [Char] st (Key, Target)
689anonymousKey :: Parser [Char] st (Key, Target)
683anonymousKey = try $ do
690anonymousKey = try $ do
@@ -965,13 +972,12 @@ autoLink = autoURI <|> autoEmail
965image :: Parser [Char] ParserState Inline
972image :: Parser [Char] ParserState Inline
966image = try $ do
973image = try $ do
968− (alt,ref) <- withRaw (manyTill inline (char '|'))
975+ (_,ref) <- withRaw (manyTill inline (char '|'))
969 state <- getState
976 state <- getState
970− let keyTable = stateKeys state
977+ let substTable = stateSubstitutions state
971− (src,tit) <- case M.lookup (toKey $ init ref) keyTable of
978+ case M.lookup (toKey $ init ref) substTable of
972− Nothing -> fail "no corresponding key"
979+ Nothing -> fail "no corresponding key"
973− Just target -> return target
980+ Just target -> return target
974− return $ Image (normalizeSpaces alt) (src, tit)
976note :: Parser [Char] ParserState Inline
982note :: Parser [Char] ParserState Inline
977note = try $ do
983note = try $ do