From 1a8af5fc442287ef2f7775c4de179e4520487a4f Mon Sep 17 00:00:00 2001
From: Albert Krewinkel <albert@zeitkraut.de>
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')

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