From ba05e1ea02d5227796f12dea2404285300021de6 Mon Sep 17 00:00:00 2001
From: John MacFarlane
Date: Sat, 23 Feb 2019 15:40:06 -0700
Subject: Shared.compactify: Avoid mixed lists.
This improves on the original fix to #5285 by preventing
other mixed lists (lists with a mix of Plain and Para
elements) that were allowed given the original fix.
---
src/Text/Pandoc/Shared.hs | 13 ++++++-------
test/command/5285.md | 17 +++++++++++++++++
test/rst-reader.native | 10 +++++-----
test/rst-reader.rst | 2 +-
test/testsuite.native | 2 +-
test/writer.custom | 2 +-
test/writer.dokuwiki | 2 +-
test/writer.fb2 | 1 +
test/writer.haddock | 1 +
test/writer.html4 | 2 +-
test/writer.html5 | 2 +-
test/writer.icml | 4 ++--
test/writer.markdown | 1 +
test/writer.mediawiki | 2 +-
test/writer.native | 2 +-
test/writer.opendocument | 1 -
test/writer.opml | 2 +-
test/writer.org | 1 +
test/writer.plain | 1 +
test/writer.rst | 1 +
test/writer.rtf | 2 +-
test/writer.texinfo | 1 +
test/writer.textile | 2 +-
23 files changed, 48 insertions(+), 26 deletions(-)
diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs
index a945c9355..db00d5aa4 100644
--- a/src/Text/Pandoc/Shared.hs
+++ b/src/Text/Pandoc/Shared.hs
@@ -424,13 +424,12 @@ compactify [] = []
compactify items =
let (others, final) = (init items, last items)
in case reverse (B.toList final) of
- (Para a:xs) -> case [Para x | Para x <- concatMap B.toList items] of
- -- if this is only Para, change to Plain
- [_] -> others ++ [B.fromList (reverse $ Plain a : xs)]
- -- if other Paras, it's a loose list, change
- -- all Plain to Para
- _ -> map (fmap plainToPara) items
- _ -> items
+ (Para a:xs)
+ | null [Para x | Para x <- (xs ++ concatMap B.toList others)]
+ -> others ++ [B.fromList (reverse (Plain a : xs))]
+ _ | null [Para x | Para x <- concatMap B.toList items]
+ -> items
+ _ -> map (fmap plainToPara) items
plainToPara :: Block -> Block
plainToPara (Plain ils) = Para ils
diff --git a/test/command/5285.md b/test/command/5285.md
index 780812761..6085ec1a9 100644
--- a/test/command/5285.md
+++ b/test/command/5285.md
@@ -13,3 +13,20 @@
,[Para [Str "a"]]
,[Para [Str "b"]]]]
```
+
+```
+% pandoc -t native
+- foo
+
+ foo
+- foo
+
+ > foo
+^D
+[BulletList
+ [[Para [Str "foo"]
+ ,Para [Str "foo"]]
+ ,[Para [Str "foo"]
+ ,BlockQuote
+ [Para [Str "foo"]]]]]
+```
diff --git a/test/rst-reader.native b/test/rst-reader.native
index cd1437ac8..70ed3cf60 100644
--- a/test/rst-reader.native
+++ b/test/rst-reader.native
@@ -96,8 +96,8 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
,OrderedList (1,Decimal,Period)
[[Para [Str "Item",Space,Str "1,",Space,Str "graf",Space,Str "one."]
,Para [Str "Item",Space,Str "1.",Space,Str "graf",Space,Str "two.",Space,Str "The",Space,Str "quick",Space,Str "brown",Space,Str "fox",Space,Str "jumped",Space,Str "over",Space,Str "the",Space,Str "lazy",Space,Str "dog\8217s",SoftBreak,Str "back."]]
- ,[Plain [Str "Item",Space,Str "2."]]
- ,[Plain [Str "Item",Space,Str "3."]]]
+ ,[Para [Str "Item",Space,Str "2."]]
+ ,[Para [Str "Item",Space,Str "3."]]]
,Para [Str "Nested:"]
,BulletList
[[Plain [Str "Tab"]
@@ -107,17 +107,17 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
[[Plain [Str "Tab"]]]]]]]
,Para [Str "Here\8217s",Space,Str "another:"]
,OrderedList (1,Decimal,Period)
- [[Plain [Str "First"]]
+ [[Para [Str "First"]]
,[Para [Str "Second:"]
,BlockQuote
[BulletList
[[Plain [Str "Fee"]]
,[Plain [Str "Fie"]]
,[Plain [Str "Foe"]]]]]
- ,[Plain [Str "Third"]]]
+ ,[Para [Str "Third"]]]
,Header 2 ("fancy-list-markers",[],[]) [Str "Fancy",Space,Str "list",Space,Str "markers"]
,OrderedList (2,Decimal,TwoParens)
- [[Plain [Str "begins",Space,Str "with",Space,Str "2"]]
+ [[Para [Str "begins",Space,Str "with",Space,Str "2"]]
,[Para [Str "and",Space,Str "now",Space,Str "3"]
,Para [Str "with",Space,Str "a",Space,Str "continuation"]
,OrderedList (4,LowerRoman,Period)
diff --git a/test/rst-reader.rst b/test/rst-reader.rst
index cfe959f2d..a918c0e2c 100644
--- a/test/rst-reader.rst
+++ b/test/rst-reader.rst
@@ -192,7 +192,7 @@ Multiple paragraphs:
Item 1. graf two. The quick brown fox jumped over the lazy dog's
back.
-
+
2. Item 2.
3. Item 3.
diff --git a/test/testsuite.native b/test/testsuite.native
index 73fcc0633..f9132c797 100644
--- a/test/testsuite.native
+++ b/test/testsuite.native
@@ -137,7 +137,7 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
,[Para [Str "this",Space,Str "is",Space,Str "an",Space,Str "example",Space,Str "list",Space,Str "item",SoftBreak,Str "indented",Space,Str "with",Space,Str "spaces"]]]]]
,Header 2 ("fancy-list-markers",[],[]) [Str "Fancy",Space,Str "list",Space,Str "markers"]
,OrderedList (2,Decimal,TwoParens)
- [[Plain [Str "begins",Space,Str "with",Space,Str "2"]]
+ [[Para [Str "begins",Space,Str "with",Space,Str "2"]]
,[Para [Str "and",Space,Str "now",Space,Str "3"]
,Para [Str "with",Space,Str "a",Space,Str "continuation"]
,OrderedList (4,LowerRoman,Period)
diff --git a/test/writer.custom b/test/writer.custom
index f3341360e..595d8f70e 100644
--- a/test/writer.custom
+++ b/test/writer.custom
@@ -263,7 +263,7 @@ indented with spaces
Fancy list markers
-- begins with 2
+begins with 2
and now 3
with a continuation
diff --git a/test/writer.dokuwiki b/test/writer.dokuwiki
index 34f4246db..5e6773799 100644
--- a/test/writer.dokuwiki
+++ b/test/writer.dokuwiki
@@ -205,7 +205,7 @@ Same thing but with paragraphs:
===== Fancy list markers =====
-- begins with 2
+begins with 2
and now 3
with a continuation
diff --git a/test/writer.fb2 b/test/writer.fb2
index 6f5b1cfcd..6f8c25cde 100644
--- a/test/writer.fb2
+++ b/test/writer.fb2
@@ -302,6 +302,7 @@ indented with spaces
Fancy list markers
(2) begins with 2
+
(3) and now 3
with a continuation
diff --git a/test/writer.haddock b/test/writer.haddock
index 13f22021d..fbe6c257b 100644
--- a/test/writer.haddock
+++ b/test/writer.haddock
@@ -236,6 +236,7 @@ Same thing but with paragraphs:
#fancy-list-markers#
(2) begins with 2
+
(3) and now 3
with a continuation
diff --git a/test/writer.html4 b/test/writer.html4
index bed6617a0..4d5d11897 100644
--- a/test/writer.html4
+++ b/test/writer.html4
@@ -196,7 +196,7 @@ These should not be escaped: \$ \\ \> \[ \{
Fancy list markers
-- begins with 2
+begins with 2
and now 3
with a continuation
diff --git a/test/writer.html5 b/test/writer.html5
index 39b5344dd..e0b30f4af 100644
--- a/test/writer.html5
+++ b/test/writer.html5
@@ -199,7 +199,7 @@ These should not be escaped: \$ \\ \> \[ \{
Fancy list markers
-- begins with 2
+begins with 2
and now 3
with a continuation
diff --git a/test/writer.icml b/test/writer.icml
index 5fdf450fb..4c1a2b950 100644
--- a/test/writer.icml
+++ b/test/writer.icml
@@ -400,7 +400,7 @@
$ID/NormalParagraphStyle
-
+
$ID/NormalParagraphStyle
@@ -1105,7 +1105,7 @@ These should not be escaped: \$ \\ \> \[ \{
-
+
begins with 2
diff --git a/test/writer.markdown b/test/writer.markdown
index de0821970..6aab1e597 100644
--- a/test/writer.markdown
+++ b/test/writer.markdown
@@ -239,6 +239,7 @@ Fancy list markers
------------------
(2) begins with 2
+
(3) and now 3
with a continuation
diff --git a/test/writer.mediawiki b/test/writer.mediawiki
index 29686f3e7..79cc1b4e1 100644
--- a/test/writer.mediawiki
+++ b/test/writer.mediawiki
@@ -198,7 +198,7 @@ Same thing but with paragraphs:
== Fancy list markers ==
-- begins with 2
+begins with 2
and now 3
with a continuation
diff --git a/test/writer.native b/test/writer.native
index 73fcc0633..f9132c797 100644
--- a/test/writer.native
+++ b/test/writer.native
@@ -137,7 +137,7 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
,[Para [Str "this",Space,Str "is",Space,Str "an",Space,Str "example",Space,Str "list",Space,Str "item",SoftBreak,Str "indented",Space,Str "with",Space,Str "spaces"]]]]]
,Header 2 ("fancy-list-markers",[],[]) [Str "Fancy",Space,Str "list",Space,Str "markers"]
,OrderedList (2,Decimal,TwoParens)
- [[Plain [Str "begins",Space,Str "with",Space,Str "2"]]
+ [[Para [Str "begins",Space,Str "with",Space,Str "2"]]
,[Para [Str "and",Space,Str "now",Space,Str "3"]
,Para [Str "with",Space,Str "a",Space,Str "continuation"]
,OrderedList (4,LowerRoman,Period)
diff --git a/test/writer.opendocument b/test/writer.opendocument
index 625cdf2c6..2d9068d07 100644
--- a/test/writer.opendocument
+++ b/test/writer.opendocument
@@ -1115,7 +1115,6 @@
-
diff --git a/test/writer.opml b/test/writer.opml
index 4e67652d2..6bdcb882e 100644
--- a/test/writer.opml
+++ b/test/writer.opml
@@ -39,7 +39,7 @@
-
+
diff --git a/test/writer.org b/test/writer.org
index 32fcfc404..cd2be4574 100644
--- a/test/writer.org
+++ b/test/writer.org
@@ -294,6 +294,7 @@ Same thing but with paragraphs:
:END:
2) begins with 2
+
3) and now 3
with a continuation
diff --git a/test/writer.plain b/test/writer.plain
index 031c4a3e6..79921fa27 100644
--- a/test/writer.plain
+++ b/test/writer.plain
@@ -244,6 +244,7 @@ Tabs and spaces
Fancy list markers
(2) begins with 2
+
(3) and now 3
with a continuation
diff --git a/test/writer.rst b/test/writer.rst
index b47490de2..683a41f30 100644
--- a/test/writer.rst
+++ b/test/writer.rst
@@ -261,6 +261,7 @@ Fancy list markers
------------------
(2) begins with 2
+
(3) and now 3
with a continuation
diff --git a/test/writer.rtf b/test/writer.rtf
index c67c67a83..4f3751b36 100644
--- a/test/writer.rtf
+++ b/test/writer.rtf
@@ -132,7 +132,7 @@ These should not be escaped: \\$ \\\\ \\> \\[ \\\{\par}
{\pard \ql \f0 \sa180 \li720 \fi-360 \endash \tx360\tab this is an example list item indented with tabs\par}
{\pard \ql \f0 \sa180 \li720 \fi-360 \endash \tx360\tab this is an example list item indented with spaces\sa180\sa180\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs32 Fancy list markers\par}
-{\pard \ql \f0 \sa0 \li360 \fi-360 (2)\tx360\tab begins with 2\par}
+{\pard \ql \f0 \sa180 \li360 \fi-360 (2)\tx360\tab begins with 2\par}
{\pard \ql \f0 \sa180 \li360 \fi-360 (3)\tx360\tab and now 3\par}
{\pard \ql \f0 \sa180 \li360 \fi0 with a continuation\par}
{\pard \ql \f0 \sa0 \li720 \fi-360 iv.\tx360\tab sublist with roman numerals, starting with 4\par}
diff --git a/test/writer.texinfo b/test/writer.texinfo
index b55945751..53a25d515 100644
--- a/test/writer.texinfo
+++ b/test/writer.texinfo
@@ -453,6 +453,7 @@ this is an example list item indented with spaces
@enumerate 2
@item
begins with 2
+
@item
and now 3
diff --git a/test/writer.textile b/test/writer.textile
index 78e659091..e99f9ab6e 100644
--- a/test/writer.textile
+++ b/test/writer.textile
@@ -212,7 +212,7 @@ h2(#tabs-and-spaces). Tabs and spaces
h2(#fancy-list-markers). Fancy list markers
-- begins with 2
+begins with 2
and now 3
with a continuation
--
cgit v1.2.3