From f5704fac9769e4b236cfe70292f77b80b19accc6 Mon Sep 17 00:00:00 2001
From: John MacFarlane <jgm@berkeley.edu>
Date: Fri, 19 Oct 2018 22:54:05 -0700
Subject: [PATCH] Man reader: properly handle multi-block list items.

Closes #4985.
---
 src/Text/Pandoc/Readers/Man.hs | 12 ++++----
 test/Tests/Readers/Man.hs      |  8 ++---
 test/man-reader.native         | 54 +++++++++++++++++-----------------
 3 files changed, 37 insertions(+), 37 deletions(-)

diff --git a/src/Text/Pandoc/Readers/Man.hs b/src/Text/Pandoc/Readers/Man.hs
index 9ead84f3e..4eeeeb825 100644
--- a/src/Text/Pandoc/Readers/Man.hs
+++ b/src/Text/Pandoc/Readers/Man.hs
@@ -554,15 +554,15 @@ parseList = try $ do
     (MMacro _ args) <- mmacro "IP"
     let lbuilder = listKind args
     inls <- parseInlines
-    subls <- mconcat <$> many sublist
-    return $ (lbuilder, plain inls <> subls)
+    continuations <- mconcat <$> many continuation
+    return $ (lbuilder, para inls <> continuations)
 
-  sublist :: PandocMonad m => ManParser m Blocks
-  sublist = do
+  continuation :: PandocMonad m => ManParser m Blocks
+  continuation = do
     mmacro "RS"
-    bl <- parseList
+    bs <- mconcat <$> many (notFollowedBy (mmacro "RE") >> parseBlock)
     mmacro "RE"
-    return bl
+    return bs
 
 -- In case of weird man file it will be parsed succesfully
 parseSkipMacro :: PandocMonad m => ManParser m Blocks
diff --git a/test/Tests/Readers/Man.hs b/test/Tests/Readers/Man.hs
index a134c5813..974dd1cb9 100644
--- a/test/Tests/Readers/Man.hs
+++ b/test/Tests/Readers/Man.hs
@@ -75,16 +75,16 @@ tests = [
   testGroup "Lists" [
       "bullet" =:
       ".IP\nfirst\n.IP\nsecond"
-      =?> bulletList [plain $ str "first", plain $ str "second"]
+      =?> bulletList [para $ str "first", para $ str "second"]
     , "ordered" =:
       ".IP 1 a\nfirst\n.IP 2 a\nsecond"
-      =?> orderedListWith (1,Decimal,DefaultDelim) [plain $ str "first", plain $ str "second"]
+      =?> orderedListWith (1,Decimal,DefaultDelim) [para $ str "first", para $ str "second"]
     , "upper" =:
       ".IP A a\nfirst\n.IP B a\nsecond"
-      =?> orderedListWith (1,UpperAlpha,DefaultDelim) [plain $ str "first", plain $ str "second"]
+      =?> orderedListWith (1,UpperAlpha,DefaultDelim) [para $ str "first", para $ str "second"]
     , "nested" =:
       ".IP\nfirst\n.RS\n.IP\n1a\n.IP\n1b\n.RE"
-      =?> bulletList [(plain $ str "first") <> (bulletList [plain $ str "1a", plain $ str "1b"])]
+      =?> bulletList [(para $ str "first") <> (bulletList [para $ str "1a", para $ str "1b"])]
     ],
   testGroup "CodeBlocks" [
       "cb1"=:
diff --git a/test/man-reader.native b/test/man-reader.native
index 042bd2386..1e10e2f11 100644
--- a/test/man-reader.native
+++ b/test/man-reader.native
@@ -17,8 +17,8 @@ Pandoc (Meta {unMeta = fromList [("title",MetaString "Pandoc Man tests")]})
 ,CodeBlock ("",[],[]) "\nsub status {\n    print \"working\";\n}"
 ,Para [Str "A",Space,Str "list:"]
 ,OrderedList (1,Decimal,Period)
- [[Plain [Str "item",Space,Str "one"]]
- ,[Plain [Str "item",Space,Str "two"]]]
+ [[Para [Str "item",Space,Str "one"]]
+ ,[Para [Str "item",Space,Str "two"]]]
 ,Header 2 ("",[],[]) [Str "Code",Space,Str "Blocks"]
 ,Para [Str "Code:"]
 ,CodeBlock ("",[],[]) "\n---- (should be four hyphens)\n\nsub status {\n    print \"working\";\n}\n"
@@ -29,48 +29,48 @@ Pandoc (Meta {unMeta = fromList [("title",MetaString "Pandoc Man tests")]})
 ,Header 3 ("",[],[]) [Str "Unordered"]
 ,Para [Str "Asterisks:"]
 ,BulletList
- [[Plain [Str "asterisk",Space,Str "1"]]
- ,[Plain [Str "asterisk",Space,Str "2"]]
- ,[Plain [Str "asterisk",Space,Str "3"]]]
+ [[Para [Str "asterisk",Space,Str "1"]]
+ ,[Para [Str "asterisk",Space,Str "2"]]
+ ,[Para [Str "asterisk",Space,Str "3"]]]
 ,Header 3 ("",[],[]) [Str "Ordered"]
 ,OrderedList (1,Decimal,Period)
- [[Plain [Str "First"]]
- ,[Plain [Str "Second"]]
- ,[Plain [Str "Third"]]]
+ [[Para [Str "First"]]
+ ,[Para [Str "Second"]]
+ ,[Para [Str "Third"]]]
 ,Header 3 ("",[],[]) [Str "Nested"]
 ,BulletList
- [[Plain [Str "Tab"]
+ [[Para [Str "Tab"]
   ,BulletList
-   [[Plain [Str "Tab"]
+   [[Para [Str "Tab"]
     ,BulletList
-     [[Plain [Str "Tab"]]]]]]]
+     [[Para [Str "Tab"]]]]]]]
 ,Para [Str "Here's",Space,Str "another:"]
 ,OrderedList (1,Decimal,Period)
- [[Plain [Str "First"]]
- ,[Plain [Str "Second:"]
+ [[Para [Str "First"]]
+ ,[Para [Str "Second:"]
   ,BulletList
-   [[Plain [Str "Fee"]]
-   ,[Plain [Str "Fie"]]
-   ,[Plain [Str "Foe"]]]]
- ,[Plain [Str "Third"]]]
+   [[Para [Str "Fee"]]
+   ,[Para [Str "Fie"]]
+   ,[Para [Str "Foe"]]]]
+ ,[Para [Str "Third"]]]
 ,Para [Str "Same",Space,Str "thing:"]
 ,OrderedList (1,Decimal,Period)
- [[Plain [Str "First"]]
- ,[Plain [Str "Second:"]
+ [[Para [Str "First"]]
+ ,[Para [Str "Second:"]
   ,BulletList
-   [[Plain [Str "Fee"]]
-   ,[Plain [Str "Fie"]]
-   ,[Plain [Str "Foe"]]]]
- ,[Plain [Str "Third"]]]
+   [[Para [Str "Fee"]]
+   ,[Para [Str "Fie"]]
+   ,[Para [Str "Foe"]]]]
+ ,[Para [Str "Third"]]]
 ,Header 3 ("",[],[]) [Str "different",Space,Str "styles:"]
 ,OrderedList (1,UpperAlpha,Period)
- [[Plain [Str "Upper",Space,Str "Alpha"]
+ [[Para [Str "Upper",Space,Str "Alpha"]
   ,OrderedList (1,UpperRoman,Period)
-   [[Plain [Str "Upper",Space,Str "Roman."]
+   [[Para [Str "Upper",Space,Str "Roman."]
     ,OrderedList (6,Decimal,TwoParens)
-     [[Plain [Str "Decimal",Space,Str "start",Space,Str "with",Space,Str "6"]
+     [[Para [Str "Decimal",Space,Str "start",Space,Str "with",Space,Str "6"]
       ,OrderedList (3,LowerAlpha,OneParen)
-       [[Plain [Str "Lower",Space,Str "alpha",Space,Str "with",Space,Str "paren"]]]]]]]]]
+       [[Para [Str "Lower",Space,Str "alpha",Space,Str "with",Space,Str "paren"]]]]]]]]]
 ,Para [Str "*",Space,Str "*",Space,Str "*",Space,Str "*",Space,Str "*"]
 ,Header 2 ("",[],[]) [Str "Special",Space,Str "Characters"]
 ,Para [Str "AT&T",Space,Str "has",Space,Str "an",Space,Str "ampersand",Space,Str "in",Space,Str "their",Space,Str "name."]