From 1a8af5fc442287ef2f7775c4de179e4520487a4f Mon Sep 17 00:00:00 2001 From: Albert Krewinkel Date: Sat, 19 Nov 2016 01:17:04 +0100 Subject: Org reader: Ensure images in paragraphs are not parsed as figures This fixes a regression introduced in 7e5220b57c5a48fabe6e43ba270db812593d3463. --- src/Text/Pandoc/Readers/Org/BlockStarts.hs | 26 +++++++++++++++++++++++++- src/Text/Pandoc/Readers/Org/Blocks.hs | 6 +++++- src/Text/Pandoc/Readers/Org/Inlines.hs | 15 ++------------- 3 files changed, 32 insertions(+), 15 deletions(-) (limited to 'src/Text/Pandoc/Readers/Org') diff --git a/src/Text/Pandoc/Readers/Org/BlockStarts.hs b/src/Text/Pandoc/Readers/Org/BlockStarts.hs index e4dc31342..53a999307 100644 --- a/src/Text/Pandoc/Readers/Org/BlockStarts.hs +++ b/src/Text/Pandoc/Readers/Org/BlockStarts.hs @@ -37,9 +37,11 @@ module Text.Pandoc.Readers.Org.BlockStarts , commentLineStart , bulletListStart , orderedListStart + , endOfBlock ) where -import Text.Pandoc.Readers.Org.Parsing +import Control.Monad ( void ) +import Text.Pandoc.Readers.Org.Parsing -- | Horizontal Line (five -- dashes or more) hline :: OrgParser () @@ -110,3 +112,25 @@ noteMarker = try $ do , (++) <$> string "fn:" <*> many1Till (noneOf "\n\r\t ") (char ']') ] + + -- | Succeeds if the parser is at the end of a block. +endOfBlock :: OrgParser () +endOfBlock = lookAhead . try $ do + void blankline <|> anyBlockStart <|> void noteMarker + where + -- | Succeeds if there is a new block starting at this position. + anyBlockStart :: OrgParser () + anyBlockStart = try . choice $ + [ exampleLineStart + , hline + , metaLineStart + , commentLineStart + , void noteMarker + , void tableStart + , void drawerStart + , void headerStart + , void latexEnvStart + , void bulletListStart + , void orderedListStart + ] + diff --git a/src/Text/Pandoc/Readers/Org/Blocks.hs b/src/Text/Pandoc/Readers/Org/Blocks.hs index 481684600..807cce2fc 100644 --- a/src/Text/Pandoc/Readers/Org/Blocks.hs +++ b/src/Text/Pandoc/Readers/Org/Blocks.hs @@ -623,7 +623,7 @@ propertiesDrawer = try $ do figure :: OrgParser (F Blocks) figure = try $ do figAttrs <- blockAttributes - src <- skipSpaces *> selfTarget <* skipSpaces <* newline + src <- skipSpaces *> selfTarget <* skipSpaces <* endOfParagraph case cleanLinkString src of Nothing -> mzero Just imgSrc -> do @@ -652,6 +652,10 @@ figure = try $ do then cs else "fig:" ++ cs +-- | Succeeds if looking at the end of the current paragraph +endOfParagraph :: OrgParser () +endOfParagraph = try $ skipSpaces *> newline *> endOfBlock + -- -- Examples diff --git a/src/Text/Pandoc/Readers/Org/Inlines.hs b/src/Text/Pandoc/Readers/Org/Inlines.hs index 14e77dda9..97b36b388 100644 --- a/src/Text/Pandoc/Readers/Org/Inlines.hs +++ b/src/Text/Pandoc/Readers/Org/Inlines.hs @@ -33,7 +33,7 @@ module Text.Pandoc.Readers.Org.Inlines , linkTarget ) where -import Text.Pandoc.Readers.Org.BlockStarts +import Text.Pandoc.Readers.Org.BlockStarts ( endOfBlock, noteMarker ) import Text.Pandoc.Readers.Org.ParserState import Text.Pandoc.Readers.Org.Parsing import Text.Pandoc.Readers.Org.Shared @@ -152,18 +152,7 @@ str = return . B.str <$> many1 (noneOf $ specialChars ++ "\n\r ") endline :: OrgParser (F Inlines) endline = try $ do newline - notFollowedBy blankline - notFollowedBy' exampleLineStart - notFollowedBy' hline - notFollowedBy' noteMarker - notFollowedBy' tableStart - notFollowedBy' drawerStart - notFollowedBy' headerStart - notFollowedBy' metaLineStart - notFollowedBy' latexEnvStart - notFollowedBy' commentLineStart - notFollowedBy' bulletListStart - notFollowedBy' orderedListStart + notFollowedBy' endOfBlock decEmphasisNewlinesCount guard =<< newlinesCountWithinLimits updateLastPreCharPos -- cgit v1.2.3