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

    -
  1. begins with 2
  2. +
  3. begins with 2

  4. 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 =====
      -
    1. begins with 2
    2. +
    3. begins with 2

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

          -
        1. begins with 2
        2. +
        3. begins with 2

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

              -
            1. begins with 2
            2. +
            3. begins with 2

            4. 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 ==
                  -
                1. begins with 2
                2. +
                3. begins with 2

                4. 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
                      -
                    1. begins with 2
                    2. +
                    3. begins with 2

                    4. and now 3

                      with a continuation

                        -- cgit v1.2.3