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.
This commit is contained in:
John MacFarlane 2019-02-23 15:40:06 -07:00
parent 38c028bd50
commit ba05e1ea02
23 changed files with 48 additions and 26 deletions

View file

@ -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

View file

@ -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"]]]]]
```

View file

@ -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)

View file

@ -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.

View file

@ -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)

View file

@ -263,7 +263,7 @@ indented with spaces</p></li>
<h2 id="fancy-list-markers">Fancy list markers</h2>
<ol>
<li>begins with 2</li>
<li><p>begins with 2</p></li>
<li><p>and now 3</p>
<p>with a continuation</p>

View file

@ -205,7 +205,7 @@ Same thing but with paragraphs:
===== Fancy list markers =====
<HTML><ol start="2" style="list-style-type: decimal;"></HTML>
<HTML><li></HTML>begins with 2<HTML></li></HTML>
<HTML><li></HTML><HTML><p></HTML>begins with 2<HTML></p></HTML><HTML></li></HTML>
<HTML><li></HTML><HTML><p></HTML>and now 3<HTML></p></HTML>
<HTML><p></HTML>with a continuation<HTML></p></HTML>
<HTML><ol start="4" style="list-style-type: lower-roman;"></HTML>

View file

@ -302,6 +302,7 @@ indented with spaces</p>
<p>Fancy list markers</p>
</title>
<p>(2) begins with 2</p>
<empty-line />
<p>(3) and now 3</p>
<empty-line />
<p>    with a continuation</p>

View file

@ -236,6 +236,7 @@ Same thing but with paragraphs:
#fancy-list-markers#
(2) begins with 2
(3) and now 3
with a continuation

View file

@ -196,7 +196,7 @@ These should not be escaped: \$ \\ \&gt; \[ \{</code></pre>
</ul>
<h2 id="fancy-list-markers">Fancy list markers</h2>
<ol start="2" style="list-style-type: decimal">
<li>begins with 2</li>
<li><p>begins with 2</p></li>
<li><p>and now 3</p>
<p>with a continuation</p>
<ol start="4" style="list-style-type: lower-roman">

View file

@ -199,7 +199,7 @@ These should not be escaped: \$ \\ \&gt; \[ \{</code></pre>
</ul>
<h2 id="fancy-list-markers">Fancy list markers</h2>
<ol start="2" type="1">
<li>begins with 2</li>
<li><p>begins with 2</p></li>
<li><p>and now 3</p>
<p>with a continuation</p>
<ol start="4" type="i">

View file

@ -400,7 +400,7 @@
<BasedOn type="object">$ID/NormalParagraphStyle</BasedOn>
</Properties>
</ParagraphStyle>
<ParagraphStyle Self="ParagraphStyle/NumList &gt; first &gt; beginsWith-2" Name="NumList &gt; first &gt; beginsWith-2" NumberingExpression="^#.^t" NumberingLevel="1" BulletsAndNumberingListType="NumberedList" LeftIndent="0">
<ParagraphStyle Self="ParagraphStyle/NumList &gt; first &gt; beginsWith-2 &gt; Paragraph" Name="NumList &gt; first &gt; beginsWith-2 &gt; Paragraph" NumberingExpression="^#.^t" NumberingLevel="1" BulletsAndNumberingListType="NumberedList" LeftIndent="0">
<Properties>
<BasedOn type="object">$ID/NormalParagraphStyle</BasedOn>
</Properties>
@ -1105,7 +1105,7 @@ These should not be escaped: \$ \\ \&gt; \[ \{</Content>
</CharacterStyleRange>
</ParagraphStyleRange>
<Br />
<ParagraphStyleRange NumberingStartAt="2" AppliedParagraphStyle="ParagraphStyle/NumList &gt; first &gt; beginsWith-2" NumberingContinue="false">
<ParagraphStyleRange NumberingStartAt="2" AppliedParagraphStyle="ParagraphStyle/NumList &gt; first &gt; beginsWith-2 &gt; Paragraph" NumberingContinue="false">
<CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
<Content>begins with 2</Content>
</CharacterStyleRange>

View file

@ -239,6 +239,7 @@ Fancy list markers
------------------
(2) begins with 2
(3) and now 3
with a continuation

View file

@ -198,7 +198,7 @@ Same thing but with paragraphs:
== Fancy list markers ==
<ol start="2" style="list-style-type: decimal;">
<li>begins with 2</li>
<li><p>begins with 2</p></li>
<li><p>and now 3</p>
<p>with a continuation</p>
<ol start="4" style="list-style-type: lower-roman;">

View file

@ -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)

View file

@ -1115,7 +1115,6 @@
<style:style style:name="P38" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L21">
</style:style>
<style:style style:name="P39" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L22">
<style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />
</style:style>
<style:style style:name="P40" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L23">
<style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />

View file

@ -39,7 +39,7 @@
</outline>
<outline text="Tabs and spaces" _note="- this is a list item indented with tabs&#10;&#10;- this is a list item indented with spaces&#10;&#10; - this is an example list item indented with tabs&#10;&#10; - this is an example list item indented with spaces">
</outline>
<outline text="Fancy list markers" _note="1. begins with 2&#10;2. and now 3&#10;&#10; with a continuation&#10;&#10; 1. sublist with roman numerals, starting with 4&#10; 2. more items&#10; 1. a subsublist&#10; 2. a subsublist&#10;&#10;Nesting:&#10;&#10;1. Upper Alpha&#10; 1. Upper Roman.&#10; 1. Decimal start with 6&#10; 1. Lower alpha with paren&#10;&#10;Autonumbering:&#10;&#10;1. Autonumber.&#10;2. More.&#10; 1. Nested.&#10;&#10;Should not be a list item:&#10;&#10;M.A. 2007&#10;&#10;B. Williams&#10;&#10;------------------------------------------------------------------------">
<outline text="Fancy list markers" _note="1. begins with 2&#10;&#10;2. and now 3&#10;&#10; with a continuation&#10;&#10; 1. sublist with roman numerals, starting with 4&#10; 2. more items&#10; 1. a subsublist&#10; 2. a subsublist&#10;&#10;Nesting:&#10;&#10;1. Upper Alpha&#10; 1. Upper Roman.&#10; 1. Decimal start with 6&#10; 1. Lower alpha with paren&#10;&#10;Autonumbering:&#10;&#10;1. Autonumber.&#10;2. More.&#10; 1. Nested.&#10;&#10;Should not be a list item:&#10;&#10;M.A. 2007&#10;&#10;B. Williams&#10;&#10;------------------------------------------------------------------------">
</outline>
</outline>
<outline text="Definition Lists" _note="Tight using spaces:&#10;&#10;apple &#10;red fruit&#10;&#10;orange &#10;orange fruit&#10;&#10;banana &#10;yellow fruit&#10;&#10;Tight using tabs:&#10;&#10;apple &#10;red fruit&#10;&#10;orange &#10;orange fruit&#10;&#10;banana &#10;yellow fruit&#10;&#10;Loose:&#10;&#10;apple &#10;red fruit&#10;&#10;orange &#10;orange fruit&#10;&#10;banana &#10;yellow fruit&#10;&#10;Multiple blocks with italics:&#10;&#10;*apple* &#10;red fruit&#10;&#10;contains seeds, crisp, pleasant to taste&#10;&#10;*orange* &#10;orange fruit&#10;&#10; { orange code block }&#10;&#10;&gt; orange block quote&#10;&#10;Multiple definitions, tight:&#10;&#10;apple &#10;red fruit&#10;&#10;computer&#10;&#10;orange &#10;orange fruit&#10;&#10;bank&#10;&#10;Multiple definitions, loose:&#10;&#10;apple &#10;red fruit&#10;&#10;computer&#10;&#10;orange &#10;orange fruit&#10;&#10;bank&#10;&#10;Blank line after term, indented marker, alternate markers:&#10;&#10;apple &#10;red fruit&#10;&#10;computer&#10;&#10;orange &#10;orange fruit&#10;&#10;1. sublist&#10;2. sublist">

View file

@ -294,6 +294,7 @@ Same thing but with paragraphs:
:END:
2) begins with 2
3) and now 3
with a continuation

View file

@ -244,6 +244,7 @@ Tabs and spaces
Fancy list markers
(2) begins with 2
(3) and now 3
with a continuation

View file

@ -261,6 +261,7 @@ Fancy list markers
------------------
(2) begins with 2
(3) and now 3
with a continuation

View file

@ -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}

View file

@ -453,6 +453,7 @@ this is an example list item indented with spaces
@enumerate 2
@item
begins with 2
@item
and now 3

View file

@ -212,7 +212,7 @@ h2(#tabs-and-spaces). Tabs and spaces
h2(#fancy-list-markers). Fancy list markers
<ol start="2" style="list-style-type: decimal;">
<li>begins with 2</li>
<li><p>begins with 2</p></li>
<li><p>and now 3</p>
<p>with a continuation</p>
<ol start="4" style="list-style-type: lower-roman;">