git.iko.soy/typeable/pandoc
on master help sign in
Muse reader: parse links starting with "URL:" explicitly
91aceeeAlexander Krotov
src/Text/Pandoc/Readers/Muse.hs+19−12
@@ -46,7 +46,7 @@ import Control.Monad.Except (throwError)
46import Data.Bifunctor
46import Data.Bifunctor
47import Data.Char (isLetter)
47import Data.Char (isLetter)
48import Data.Default
48import Data.Default
49−import Data.List (stripPrefix, intercalate)
49+import Data.List (intercalate)
50import Data.List.Split (splitOn)
50import Data.List.Split (splitOn)
51import qualified Data.Map as M
51import qualified Data.Map as M
52import qualified Data.Set as Set
52import qualified Data.Set as Set
@@ -947,24 +947,31 @@ link = try $ do
947 st <- getState
947 st <- getState
948 guard $ not $ museInLink st
948 guard $ not $ museInLink st
949 setState $ st{ museInLink = True }
949 setState $ st{ museInLink = True }
950− (url, content) <- linkText
950+ res <- explicitLink <|> linkText
951 updateState (\state -> state { museInLink = False })
951 updateState (\state -> state { museInLink = False })
952− return $ case stripPrefix "URL:" url of
952+ return res
953− Nothing -> if isImageUrl url
954− then B.image url "" <$> fromMaybe (return mempty) content
955− else B.link url "" <$> fromMaybe (return $ B.str url) content
956− Just url' -> B.link url' "" <$> fromMaybe (return $ B.str url') content
957− where -- Taken from muse-image-regexp defined in Emacs Muse file lisp/muse-regexps.el
958− imageExtensions = [".eps", ".gif", ".jpg", ".jpeg", ".pbm", ".png", ".tiff", ".xbm", ".xpm"]
959− isImageUrl = (`elem` imageExtensions) . takeExtension
960
953
961linkContent :: PandocMonad m => MuseParser m (F Inlines)
954linkContent :: PandocMonad m => MuseParser m (F Inlines)
962linkContent = char '[' >> trimInlinesF . mconcat <$> manyTill inline (string "]")
955linkContent = char '[' >> trimInlinesF . mconcat <$> manyTill inline (string "]")
963
956
957+-- | Parse a link starting with @URL:@
958+explicitLink :: PandocMonad m => MuseParser m (F Inlines)
959+explicitLink = try $ do
960+ string "[[URL:"
961+ url <- manyTill anyChar $ char ']'
962+ content <- option (pure $ B.str url) linkContent
963+ char ']'
964+ return $ B.link url "" <$> content
965+
964−linkText :: PandocMonad m => MuseParser m (String, Maybe (F Inlines))
966+linkText :: PandocMonad m => MuseParser m (F Inlines)
965linkText = do
967linkText = do
966 string "[["
968 string "[["
967 url <- manyTill anyChar $ char ']'
969 url <- manyTill anyChar $ char ']'
968 content <- optionMaybe linkContent
970 content <- optionMaybe linkContent
969 char ']'
971 char ']'
970− return (url, content)
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
975+ where -- Taken from muse-image-regexp defined in Emacs Muse file lisp/muse-regexps.el
976+ imageExtensions = [".eps", ".gif", ".jpg", ".jpeg", ".pbm", ".png", ".tiff", ".xbm", ".xpm"]
977+ isImageUrl = (`elem` imageExtensions) . takeExtension