@@ -39,7 +39,7 @@ import Control.Applicative (pure, (<$>), (<$), (<*>), (<*), (*>), (<**
3939import Control.Monad (guard, mzero)
4040import Data.Char (toLower)
4141import Data.Default
42−import Data.List (foldl')
42+import Data.List (foldl', isPrefixOf, isSuffixOf)
4343import Data.Maybe (listToMaybe, fromMaybe)
4444import Data.Monoid (mconcat, mempty, mappend)
4545
@@ -484,20 +484,26 @@ endline = try $ do
484484 return B.space
485485
486486link :: OrgParser Inlines
487−link = explicitLink <|> selfLink <?> "link"
487+link = explicitOrImageLink <|> selflinkOrImage <?> "link"
488488
489−explicitLink :: OrgParser Inlines
490−explicitLink = try $ do
489+explicitOrImageLink :: OrgParser Inlines
490+explicitOrImageLink = try $ do
491491 char '['
492− src <- enclosedRaw (char '[') (char ']')
493− title <- enclosedInlines (char '[') (char ']')
492+ src <- enclosedRaw (char '[') (char ']')
493+ title <- enclosedRaw (char '[') (char ']')
494+ title' <- parseFromString (mconcat . butLast <$> many inline) (title++"\n")
494495 char ']'
495− return $ B.link src "" title
496+ return $ if (isImage src) && (isImage title)
497+ then B.link src "" (B.image title "" "")
498+ else B.link src "" title'
499+ where butLast = reverse . tail . reverse
496500
497−selfLink :: OrgParser Inlines
498−selfLink = try $ do
501+selflinkOrImage :: OrgParser Inlines
502+selflinkOrImage = try $ do
499503 src <- enclosedRaw (string "[[") (string "]]")
500− return $ B.link src "" (B.str src)
504+ return $ if isImage src
505+ then B.image src "" ""
506+ else B.link src "" (B.str src)
501507
502508emph :: OrgParser Inlines
503509emph = B.emph <$> inlinesEnclosedBy '/'
@@ -606,3 +612,11 @@ endsOnThisLine input c doOnOtherLines = do
606612 then return ()
607613 else endsOnThisLine rest c doOnOtherLines
608614 _ -> mzero
615+
616+isImage filename =
617+ any (\x -> ('.':x) `isSuffixOf` filename) imageExtensions &&
618+ any (\x -> (x++":") `isPrefixOf` filename) protocols ||
619+ ':' `notElem` filename
620+ where
621+ imageExtensions = [ "jpeg" , "jpg" , "png" , "gif" , "svg" ]
622+ protocols = [ "file", "http", "https" ]