git.iko.soy/typeable/pandoc
on master help sign in
Muse reader: parse links starting with "URL:" explicitly

instead of trying to strip "URL:" prefix after parsing.

commit91aceeeff336e2bcaf56b8c9610c53f79ba40cb6 authorAlexander Krotov <ilabdsf@gmail.com> dateSun 27 May 2018, 23:57 (8 years ago) parent6907985
1 file changed+19−12
src/Text/Pandoc/Readers/Muse.hs+19−12
src/Text/Pandoc/Readers/Muse.hs+19−12
@@ -46,7 +46,7 @@ import Control.Monad.Except (throwError)
4646import Data.Bifunctor
4747import Data.Char (isLetter)
4848import Data.Default
49−import Data.List (stripPrefix, intercalate)
49+import Data.List (intercalate)
5050import Data.List.Split (splitOn)
5151import qualified Data.Map as M
5252import qualified Data.Set as Set
@@ -947,24 +947,31 @@ link = try $ do
947947 st <- getState
948948 guard $ not $ museInLink st
949949 setState $ st{ museInLink = True }
950− (url, content) <- linkText
950+ res <- explicitLink <|> linkText
951951 updateState (\state -> state { museInLink = False })
952− return $ case stripPrefix "URL:" url of
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
952+ return res
960953
961954linkContent :: PandocMonad m => MuseParser m (F Inlines)
962955linkContent = char '[' >> trimInlinesF . mconcat <$> manyTill inline (string "]")
963956
964−linkText :: PandocMonad m => MuseParser m (String, Maybe (F Inlines))
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+
966+linkText :: PandocMonad m => MuseParser m (F Inlines)
965967linkText = do
966968 string "[["
967969 url <- manyTill anyChar $ char ']'
968970 content <- optionMaybe linkContent
969971 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