aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES2
-rw-r--r--haddock-library/src/Documentation/Haddock/Parser.hs16
-rw-r--r--haddock-library/test/Documentation/Haddock/ParserSpec.hs16
-rw-r--r--html-test/ref/Nesting.html54
4 files changed, 51 insertions, 37 deletions
diff --git a/CHANGES b/CHANGES
index ee20ca1b..3814d095 100644
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,8 @@ Changes in version 2.15.0
* parser: don't wrap headers in DocParagraph (#307)
+ * parser: don't mangle append order for nested lists (pandoc #1346)
+
Changes in version 2.14.3
* Fix parsing of identifiers with ^ or ⋆ in them (#298)
diff --git a/haddock-library/src/Documentation/Haddock/Parser.hs b/haddock-library/src/Documentation/Haddock/Parser.hs
index 1d98601a..805b33f8 100644
--- a/haddock-library/src/Documentation/Haddock/Parser.hs
+++ b/haddock-library/src/Documentation/Haddock/Parser.hs
@@ -265,7 +265,7 @@ innerList item = do
(cs, items) <- more item
let contents = docParagraph . parseString . dropNLs . unlines $ c : cs
return $ case items of
- Left p -> [contents `joinPara` p]
+ Left p -> [contents <> p]
Right i -> contents : i
-- | Parses definition lists.
@@ -276,21 +276,9 @@ definitionList = do
(cs, items) <- more definitionList
let contents = parseString . dropNLs . unlines $ c : cs
return $ case items of
- Left p -> [(label, contents `joinPara` p)]
+ Left p -> [(label, contents <> p)]
Right i -> (label, contents) : i
--- | If possible, appends two 'Doc's under a 'DocParagraph' rather than
--- outside of it. This allows to get structures like
---
--- @DocParagraph (DocAppend … …)@
---
--- rather than
---
--- @DocAppend (DocParagraph …) …@
-joinPara :: DocH mod id -> DocH mod id -> DocH mod id
-joinPara (DocParagraph p) c = docParagraph $ p <> c
-joinPara d p = d <> p
-
-- | Drops all trailing newlines.
dropNLs :: String -> String
dropNLs = reverse . dropWhile (== '\n') . reverse
diff --git a/haddock-library/test/Documentation/Haddock/ParserSpec.hs b/haddock-library/test/Documentation/Haddock/ParserSpec.hs
index 6d05791b..a8c2199a 100644
--- a/haddock-library/test/Documentation/Haddock/ParserSpec.hs
+++ b/haddock-library/test/Documentation/Haddock/ParserSpec.hs
@@ -547,34 +547,34 @@ spec = do
context "when parsing paragraphs nested in lists" $ do
it "can nest the same type of list" $ do
"* foo\n\n * bar" `shouldParseTo`
- DocUnorderedList [ DocParagraph $ "foo"
+ DocUnorderedList [ DocParagraph "foo"
<> DocUnorderedList [DocParagraph "bar"]]
it "can nest another type of list inside" $ do
"* foo\n\n 1. bar" `shouldParseTo`
- DocUnorderedList [ DocParagraph $ "foo"
+ DocUnorderedList [ DocParagraph "foo"
<> DocOrderedList [DocParagraph "bar"]]
it "can nest a code block inside" $ do
"* foo\n\n @foo bar baz@" `shouldParseTo`
- DocUnorderedList [ DocParagraph $ "foo"
+ DocUnorderedList [ DocParagraph "foo"
<> DocCodeBlock "foo bar baz"]
"* foo\n\n @\n foo bar baz\n @" `shouldParseTo`
- DocUnorderedList [ DocParagraph $ "foo"
+ DocUnorderedList [ DocParagraph "foo"
<> DocCodeBlock "foo bar baz\n"]
it "can nest more than one level" $ do
"* foo\n\n * bar\n\n * baz\n qux" `shouldParseTo`
- DocUnorderedList [ DocParagraph $ "foo"
- <> DocUnorderedList [ DocParagraph $ "bar"
+ DocUnorderedList [ DocParagraph "foo"
+ <> DocUnorderedList [ DocParagraph "bar"
<> DocUnorderedList [DocParagraph "baz\nqux"]
]
]
it "won't fail on not fully indented paragraph" $ do
"* foo\n\n * bar\n\n * qux\nquux" `shouldParseTo`
- DocUnorderedList [ DocParagraph $ "foo"
+ DocUnorderedList [ DocParagraph "foo"
<> DocUnorderedList [ DocParagraph "bar" ]
, DocParagraph "qux\nquux"]
@@ -589,7 +589,7 @@ spec = do
it "can come back to top level with a different list" $ do
"* foo\n\n * bar\n\n1. baz" `shouldParseTo`
- DocUnorderedList [ DocParagraph $ "foo"
+ DocUnorderedList [ DocParagraph "foo"
<> DocUnorderedList [ DocParagraph "bar" ]
]
<> DocOrderedList [ DocParagraph "baz" ]
diff --git a/html-test/ref/Nesting.html b/html-test/ref/Nesting.html
index 1a7f2755..e3302d8f 100644
--- a/html-test/ref/Nesting.html
+++ b/html-test/ref/Nesting.html
@@ -86,9 +86,13 @@ window.onload = function () {pageLoad();setSynopsis("mini_Nesting.html");};
><div class="doc"
><ul
><li
- >We can<ul
+ ><p
+ >We can</p
+ ><ul
><li
- >easily go back<ol
+ ><p
+ >easily go back</p
+ ><ol
><li
>some indentation</li
></ol
@@ -114,7 +118,9 @@ window.onload = function () {pageLoad();setSynopsis("mini_Nesting.html");};
><div class="doc"
><ul
><li
- >Beginning of list<ul
+ ><p
+ >Beginning of list</p
+ ><ul
><li
>second list</li
></ul
@@ -133,7 +139,9 @@ the presence of this text pushes it out of nesting back to the top.</li
><div class="doc"
><ul
><li
- >Beginning of list<pre
+ ><p
+ >Beginning of list</p
+ ><pre
>nested code
we preserve the space correctly
</pre
@@ -149,7 +157,9 @@ the presence of this text pushes it out of nesting back to the top.</li
><div class="doc"
><ul
><li
- >Beginning of list<ul
+ ><p
+ >Beginning of list</p
+ ><ul
><li
>Nested list</li
></ul
@@ -165,7 +175,9 @@ the presence of this text pushes it out of nesting back to the top.</li
><div class="doc"
><ul
><li
- >Beginning of list<pre
+ ><p
+ >Beginning of list</p
+ ><pre
>nested
bird
tracks</pre
@@ -181,8 +193,10 @@ tracks</pre
><div class="doc"
><ul
><li
- >Beginning of list
-This belongs to the list above!<pre
+ ><p
+ >Beginning of list
+This belongs to the list above!</p
+ ><pre
>nested
bird
tracks
@@ -194,12 +208,18 @@ another line
without leading space</pre
><ul
><li
- >Next list
-More of the indented list.<ul
+ ><p
+ >Next list
+More of the indented list.</p
+ ><ul
><li
- >Deeper<ul
+ ><p
+ >Deeper</p
+ ><ul
><li
- >Deeper<ul
+ ><p
+ >Deeper</p
+ ><ul
><li
>Even deeper!</li
><li
@@ -232,12 +252,16 @@ bird
tracks</pre
><ul
><li
- >Next list
-with more of the indented list content.<p
+ ><p
+ >Next list
+with more of the indented list content.</p
+ ><p
>Even more content on a new line.</p
><ol
><li
- >Different type of list<ol
+ ><p
+ >Different type of list</p
+ ><ol
><li
>Deeper</li
></ol