@@ -45,7 +45,7 @@ import Control.Applicative ( Applicative, pure
45 , (<$>), (<$), (<*>), (<*), (*>), (<**>) )
45 , (<$>), (<$), (<*>), (<*), (*>), (<**>) )
46import Control.Monad (foldM, guard, liftM, liftM2, when)
46import Control.Monad (foldM, guard, liftM, liftM2, when)
47import Control.Monad.Reader (Reader, runReader, ask, asks)
47import Control.Monad.Reader (Reader, runReader, ask, asks)
48−import Data.Char (toLower)
48+import Data.Char (isAlphaNum, toLower)
49import Data.Default
49import Data.Default
50import Data.List (intersperse, isPrefixOf, isSuffixOf)
50import Data.List (intersperse, isPrefixOf, isSuffixOf)
51import qualified Data.Map as M
51import qualified Data.Map as M
@@ -209,6 +209,9 @@ instance Monoid a => Monoid (F a) where
209trimInlinesF :: F Inlines -> F Inlines
209trimInlinesF :: F Inlines -> F Inlines
210trimInlinesF = liftM trimInlines
210trimInlinesF = liftM trimInlines
212+returnF :: a -> OrgParser (F a)
213+returnF = return . return
213-- | Like @Text.Parsec.Char.newline@, but causes additional state changes.
216-- | Like @Text.Parsec.Char.newline@, but causes additional state changes.
214newline :: OrgParser Char
217newline :: OrgParser Char
@@ -291,9 +294,6 @@ orgBlock = try $ do
291 "src" -> codeBlockWithAttr classArgs content
294 "src" -> codeBlockWithAttr classArgs content
292 _ -> return $ B.divWith ("", [blockType], []) <$> contentBlocks
295 _ -> return $ B.divWith ("", [blockType], []) <$> contentBlocks
294− returnF :: a -> OrgParser (F a)
295− returnF = return . return
297 parseVerse :: String -> OrgParser (F Blocks)
297 parseVerse :: String -> OrgParser (F Blocks)
298 parseVerse cs =
298 parseVerse cs =
299 fmap B.para . mconcat . intersperse (pure B.linebreak)
299 fmap B.para . mconcat . intersperse (pure B.linebreak)
@@ -834,7 +834,11 @@ noteMarker = try $ do
836linkOrImage :: OrgParser (F Inlines)
836linkOrImage :: OrgParser (F Inlines)
837−linkOrImage = explicitOrImageLink <|> selflinkOrImage <?> "link or image"
837+linkOrImage = explicitOrImageLink
839explicitOrImageLink :: OrgParser (F Inlines)
843explicitOrImageLink :: OrgParser (F Inlines)
840explicitOrImageLink = try $ do
844explicitOrImageLink = try $ do
@@ -851,15 +855,27 @@ explicitOrImageLink = try $ do
851selflinkOrImage :: OrgParser (F Inlines)
855selflinkOrImage :: OrgParser (F Inlines)
852selflinkOrImage = try $ do
856selflinkOrImage = try $ do
853 src <- char '[' *> linkTarget <* char ']'
857 src <- char '[' *> linkTarget <* char ']'
854− return . return $ if isImageFilename src
858+ returnF $ if isImageFilename src
855− then B.image src "" ""
859+ then B.image src "" ""
856− else B.link src "" (B.str src)
860+ else B.link src "" (B.str src)
862+plainLink :: OrgParser (F Inlines)
865+ returnF $ B.link src "" (B.str orig)
867+angleLink :: OrgParser (F Inlines)
858selfTarget :: OrgParser String
874selfTarget :: OrgParser String
859selfTarget = try $ char '[' *> linkTarget <* char ']'
875selfTarget = try $ char '[' *> linkTarget <* char ']'
861linkTarget :: OrgParser String
877linkTarget :: OrgParser String
862−linkTarget = enclosed (char '[') (char ']') (noneOf "\n\r]")
878+linkTarget = enclosed (char '[') (char ']') (noneOf "\n\r[]")
864isImageFilename :: String -> Bool
880isImageFilename :: String -> Bool
865isImageFilename filename =
881isImageFilename filename =