git.iko.soy/typeable/pandoc
on master help sign in
Muse reader: split link and image parsing into separate functions
commitbdf8c01f2c0e3d3cd549c19b118c332cd48eeeb0 authorAlexander Krotov <ilabdsf@gmail.com> dateMon 28 May 2018, 01:24 (8 years ago) parent91aceee
1 file changed+17−10
src/Text/Pandoc/Readers/Muse.hs+17−10
src/Text/Pandoc/Readers/Muse.hs+17−10
@@ -778,7 +778,7 @@ inlineList = [ whitespace
778778 , verbatimTag
779779 , classTag
780780 , nbsp
781− , link
781+ , linkOrImage
782782 , code
783783 , codeTag
784784 , mathTag
@@ -942,17 +942,17 @@ symbol :: PandocMonad m => MuseParser m (F Inlines)
942942symbol = return . B.str <$> count 1 nonspaceChar
943943
944944-- | Parse a link or image.
945−link :: PandocMonad m => MuseParser m (F Inlines)
946−link = try $ do
945+linkOrImage :: PandocMonad m => MuseParser m (F Inlines)
946+linkOrImage = try $ do
947947 st <- getState
948948 guard $ not $ museInLink st
949949 setState $ st{ museInLink = True }
950− res <- explicitLink <|> linkText
950+ res <- explicitLink <|> image <|> link
951951 updateState (\state -> state { museInLink = False })
952952 return res
953953
954954linkContent :: PandocMonad m => MuseParser m (F Inlines)
955−linkContent = char '[' >> trimInlinesF . mconcat <$> manyTill inline (string "]")
955+linkContent = char '[' >> trimInlinesF . mconcat <$> manyTill inline (char ']')
956956
957957-- | Parse a link starting with @URL:@
958958explicitLink :: PandocMonad m => MuseParser m (F Inlines)
@@ -963,15 +963,22 @@ explicitLink = try $ do
963963 char ']'
964964 return $ B.link url "" <$> content
965965
966−linkText :: PandocMonad m => MuseParser m (F Inlines)
967−linkText = do
966+image :: PandocMonad m => MuseParser m (F Inlines)
967+image = try $ do
968968 string "[["
969969 url <- manyTill anyChar $ char ']'
970970 content <- optionMaybe linkContent
971971 char ']'
972− return $ if isImageUrl url
973− then B.image url "" <$> fromMaybe (return mempty) content
974− else B.link url "" <$> fromMaybe (return $ B.str url) content
972+ guard $ isImageUrl url
973+ return $ B.image url "" <$> fromMaybe (return mempty) content
975974 where -- Taken from muse-image-regexp defined in Emacs Muse file lisp/muse-regexps.el
976975 imageExtensions = [".eps", ".gif", ".jpg", ".jpeg", ".pbm", ".png", ".tiff", ".xbm", ".xpm"]
977976 isImageUrl = (`elem` imageExtensions) . takeExtension
977+
978+link :: PandocMonad m => MuseParser m (F Inlines)
979+link = try $ do
980+ string "[["
981+ url <- manyTill anyChar $ char ']'
982+ content <- optionMaybe linkContent
983+ char ']'
984+ return $ B.link url "" <$> fromMaybe (return $ B.str url) content