From 909083090a63f65f4e720d210272c4bd6866cbee Mon Sep 17 00:00:00 2001
From: Albert Krewinkel <albert@zeitkraut.de>
Date: Sun, 27 Oct 2019 22:39:32 +0100
Subject: [PATCH] Org reader: fix parsing of empty comment lines

Comment lines in Org-mode can be completely empty; both of these line
should produce no output:

    # a comment
    #

The reader used to produce a wrong result for the latter, but ignores
that line as well now.

Fixes: #5856
---
 src/Text/Pandoc/Readers/Org/BlockStarts.hs |  4 +++-
 test/Tests/Readers/Org/Block.hs            | 12 +++++++++++-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/Text/Pandoc/Readers/Org/BlockStarts.hs b/src/Text/Pandoc/Readers/Org/BlockStarts.hs
index d1e13eb70..58db4f46c 100644
--- a/src/Text/Pandoc/Readers/Org/BlockStarts.hs
+++ b/src/Text/Pandoc/Readers/Org/BlockStarts.hs
@@ -92,7 +92,9 @@ metaLineStart :: Monad m => OrgParser m ()
 metaLineStart = try $ skipSpaces <* string "#+"
 
 commentLineStart :: Monad m => OrgParser m ()
-commentLineStart = try $ skipSpaces <* string "# "
+commentLineStart = try $
+  -- the first char after '#' must be a plain space character or a newline
+  skipSpaces <* string "#" <* lookAhead (oneOf " \n")
 
 exampleLineStart :: Monad m => OrgParser m ()
 exampleLineStart = () <$ try (skipSpaces *> string ": ")
diff --git a/test/Tests/Readers/Org/Block.hs b/test/Tests/Readers/Org/Block.hs
index f5ea66343..35fd4c1fa 100644
--- a/test/Tests/Readers/Org/Block.hs
+++ b/test/Tests/Readers/Org/Block.hs
@@ -73,13 +73,23 @@ tests =
       "----- em and en dash" =?>
       para "\8212\8211 em and en dash"
 
-  , "Comment Block" =:
+  , testGroup "Comments"
+    [ "Comment Block" =:
       T.unlines [ "#+BEGIN_COMMENT"
                 , "stuff"
                 , "bla"
                 , "#+END_COMMENT"] =?>
       (mempty::Blocks)
 
+    , "Comment line" =:
+      T.unlines [ "# this is a comment" ] =?>
+      (mempty :: Blocks)
+
+    , "Empty comment line" =:
+      T.unlines [ "  #" ] =?>
+      (mempty :: Blocks)
+    ]
+
   , testGroup "Blocks and fragments"
     [ "HTML block" =:
       T.unlines [ "#+BEGIN_HTML"