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 = compactify items =
let (others, final) = (init items, last items) let (others, final) = (init items, last items)
in case reverse (B.toList final) of in case reverse (B.toList final) of
(Para a:xs) -> case [Para x | Para x <- concatMap B.toList items] of (Para a:xs)
-- if this is only Para, change to Plain | null [Para x | Para x <- (xs ++ concatMap B.toList others)]
[_] -> others ++ [B.fromList (reverse $ Plain a : xs)] -> others ++ [B.fromList (reverse (Plain a : xs))]
-- if other Paras, it's a loose list, change _ | null [Para x | Para x <- concatMap B.toList items]
-- all Plain to Para -> items
_ -> map (fmap plainToPara) items _ -> map (fmap plainToPara) items
_ -> items
plainToPara :: Block -> Block plainToPara :: Block -> Block
plainToPara (Plain ils) = Para ils plainToPara (Plain ils) = Para ils

View file

@ -13,3 +13,20 @@
,[Para [Str "a"]] ,[Para [Str "a"]]
,[Para [Str "b"]]]] ,[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) ,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 "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."]] ,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."]] ,[Para [Str "Item",Space,Str "2."]]
,[Plain [Str "Item",Space,Str "3."]]] ,[Para [Str "Item",Space,Str "3."]]]
,Para [Str "Nested:"] ,Para [Str "Nested:"]
,BulletList ,BulletList
[[Plain [Str "Tab"] [[Plain [Str "Tab"]
@ -107,17 +107,17 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Spa
[[Plain [Str "Tab"]]]]]]] [[Plain [Str "Tab"]]]]]]]
,Para [Str "Here\8217s",Space,Str "another:"] ,Para [Str "Here\8217s",Space,Str "another:"]
,OrderedList (1,Decimal,Period) ,OrderedList (1,Decimal,Period)
[[Plain [Str "First"]] [[Para [Str "First"]]
,[Para [Str "Second:"] ,[Para [Str "Second:"]
,BlockQuote ,BlockQuote
[BulletList [BulletList
[[Plain [Str "Fee"]] [[Plain [Str "Fee"]]
,[Plain [Str "Fie"]] ,[Plain [Str "Fie"]]
,[Plain [Str "Foe"]]]]] ,[Plain [Str "Foe"]]]]]
,[Plain [Str "Third"]]] ,[Para [Str "Third"]]]
,Header 2 ("fancy-list-markers",[],[]) [Str "Fancy",Space,Str "list",Space,Str "markers"] ,Header 2 ("fancy-list-markers",[],[]) [Str "Fancy",Space,Str "list",Space,Str "markers"]
,OrderedList (2,Decimal,TwoParens) ,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 "and",Space,Str "now",Space,Str "3"]
,Para [Str "with",Space,Str "a",Space,Str "continuation"] ,Para [Str "with",Space,Str "a",Space,Str "continuation"]
,OrderedList (4,LowerRoman,Period) ,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 Item 1. graf two. The quick brown fox jumped over the lazy dog's
back. back.
2. Item 2. 2. Item 2.
3. Item 3. 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"]]]]] ,[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"] ,Header 2 ("fancy-list-markers",[],[]) [Str "Fancy",Space,Str "list",Space,Str "markers"]
,OrderedList (2,Decimal,TwoParens) ,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 "and",Space,Str "now",Space,Str "3"]
,Para [Str "with",Space,Str "a",Space,Str "continuation"] ,Para [Str "with",Space,Str "a",Space,Str "continuation"]
,OrderedList (4,LowerRoman,Period) ,OrderedList (4,LowerRoman,Period)

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -400,7 +400,7 @@
<BasedOn type="object">$ID/NormalParagraphStyle</BasedOn> <BasedOn type="object">$ID/NormalParagraphStyle</BasedOn>
</Properties> </Properties>
</ParagraphStyle> </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> <Properties>
<BasedOn type="object">$ID/NormalParagraphStyle</BasedOn> <BasedOn type="object">$ID/NormalParagraphStyle</BasedOn>
</Properties> </Properties>
@ -1105,7 +1105,7 @@ These should not be escaped: \$ \\ \&gt; \[ \{</Content>
</CharacterStyleRange> </CharacterStyleRange>
</ParagraphStyleRange> </ParagraphStyleRange>
<Br /> <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"> <CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
<Content>begins with 2</Content> <Content>begins with 2</Content>
</CharacterStyleRange> </CharacterStyleRange>

View file

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

View file

@ -198,7 +198,7 @@ Same thing but with paragraphs:
== Fancy list markers == == Fancy list markers ==
<ol start="2" style="list-style-type: decimal;"> <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> <li><p>and now 3</p>
<p>with a continuation</p> <p>with a continuation</p>
<ol start="4" style="list-style-type: lower-roman;"> <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"]]]]] ,[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"] ,Header 2 ("fancy-list-markers",[],[]) [Str "Fancy",Space,Str "list",Space,Str "markers"]
,OrderedList (2,Decimal,TwoParens) ,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 "and",Space,Str "now",Space,Str "3"]
,Para [Str "with",Space,Str "a",Space,Str "continuation"] ,Para [Str "with",Space,Str "a",Space,Str "continuation"]
,OrderedList (4,LowerRoman,Period) ,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:name="P38" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L21">
</style:style> </style:style>
<style:style style:name="P39" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L22"> <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:style style:name="P40" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L23"> <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" /> <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />

View file

@ -39,7 +39,7 @@
</outline> </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 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>
<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> </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"> <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: :END:
2) begins with 2 2) begins with 2
3) and now 3 3) and now 3
with a continuation with a continuation

View file

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

View file

@ -261,6 +261,7 @@ Fancy list markers
------------------ ------------------
(2) begins with 2 (2) begins with 2
(3) and now 3 (3) and now 3
with a continuation 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 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 \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 \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 \fi-360 (3)\tx360\tab and now 3\par}
{\pard \ql \f0 \sa180 \li360 \fi0 with a continuation\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} {\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 @enumerate 2
@item @item
begins with 2 begins with 2
@item @item
and now 3 and now 3

View file

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