summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2016-11-15 10:32:16 +0100
committerJohn MacFarlane <jgm@berkeley.edu>2016-11-15 10:32:16 +0100
commit064e3f8c5534a57b5d875aad84b45b22f5c4f95a (patch)
tree22007a9d4ff15417c0c0ccedffd16b6739633b47
parentdec0ff36930f82bff23b4c1a6fef7612793bb528 (diff)
Markdown writer: fixed inconsistent spacing issue.
Previously a tight bullet sublist got rendered with a blank line after, while a tight ordered sublist did not. Now we don't get the blank line in either case. Closes #3232.
-rw-r--r--src/Text/Pandoc/Writers/Markdown.hs32
-rw-r--r--tests/writer.markdown1
-rw-r--r--tests/writer.opml2
-rw-r--r--tests/writer.plain1
4 files changed, 21 insertions, 15 deletions
diff --git a/src/Text/Pandoc/Writers/Markdown.hs b/src/Text/Pandoc/Writers/Markdown.hs
index 99ffe64c7..6e6b6dcae 100644
--- a/src/Text/Pandoc/Writers/Markdown.hs
+++ b/src/Text/Pandoc/Writers/Markdown.hs
@@ -657,19 +657,23 @@ gridTable opts headless _aligns widths headers' rawRows = do
else head' $$ border '='
return $ border '-' $$ head'' $$ body $$ border '-'
+itemEndsWithTightList :: [Block] -> Bool
+itemEndsWithTightList bs =
+ case bs of
+ [Plain _, BulletList xs] -> isTightList xs
+ [Plain _, OrderedList _ xs] -> isTightList xs
+ _ -> False
+
-- | Convert bullet list item (list of blocks) to markdown.
bulletListItemToMarkdown :: WriterOptions -> [Block] -> MD Doc
-bulletListItemToMarkdown opts items = do
- contents <- blockListToMarkdown opts items
+bulletListItemToMarkdown opts bs = do
+ contents <- blockListToMarkdown opts bs
let sps = replicate (writerTabStop opts - 2) ' '
let start = text ('-' : ' ' : sps)
- -- remove trailing blank line if it is a tight list
- let contents' = case reverse items of
- (BulletList xs:_) | isTightList xs ->
- chomp contents <> cr
- (OrderedList _ xs:_) | isTightList xs ->
- chomp contents <> cr
- _ -> contents
+ -- remove trailing blank line if item ends with a tight list
+ let contents' = if itemEndsWithTightList bs
+ then chomp contents <> cr
+ else contents
return $ hang (writerTabStop opts) start $ contents' <> cr
-- | Convert ordered list item (a list of blocks) to markdown.
@@ -677,13 +681,17 @@ orderedListItemToMarkdown :: WriterOptions -- ^ options
-> String -- ^ list item marker
-> [Block] -- ^ list item (list of blocks)
-> MD Doc
-orderedListItemToMarkdown opts marker items = do
- contents <- blockListToMarkdown opts items
+orderedListItemToMarkdown opts marker bs = do
+ contents <- blockListToMarkdown opts bs
let sps = case length marker - writerTabStop opts of
n | n > 0 -> text $ replicate n ' '
_ -> text " "
let start = text marker <> sps
- return $ hang (writerTabStop opts) start $ contents <> cr
+ -- remove trailing blank line if item ends with a tight list
+ let contents' = if itemEndsWithTightList bs
+ then chomp contents <> cr
+ else contents
+ return $ hang (writerTabStop opts) start $ contents' <> cr
-- | Convert definition list item (label, list of blocks) to markdown.
definitionListItemToMarkdown :: WriterOptions
diff --git a/tests/writer.markdown b/tests/writer.markdown
index d705bb044..f59174023 100644
--- a/tests/writer.markdown
+++ b/tests/writer.markdown
@@ -210,7 +210,6 @@ Here’s another:
- Fee
- Fie
- Foe
-
3. Third
Same thing but with paragraphs:
diff --git a/tests/writer.opml b/tests/writer.opml
index c10ca44c8..8b4dea3b1 100644
--- a/tests/writer.opml
+++ b/tests/writer.opml
@@ -35,7 +35,7 @@
</outline>
<outline text="Ordered" _note="Tight:&#10;&#10;1. First&#10;2. Second&#10;3. Third&#10;&#10;and:&#10;&#10;1. One&#10;2. Two&#10;3. Three&#10;&#10;Loose using tabs:&#10;&#10;1. First&#10;&#10;2. Second&#10;&#10;3. Third&#10;&#10;and using spaces:&#10;&#10;1. One&#10;&#10;2. Two&#10;&#10;3. Three&#10;&#10;Multiple paragraphs:&#10;&#10;1. Item 1, graf one.&#10;&#10; Item 1. graf two. The quick brown fox jumped over the lazy&#10; dog’s back.&#10;&#10;2. Item 2.&#10;&#10;3. Item 3.&#10;&#10;">
</outline>
- <outline text="Nested" _note="- Tab&#10; - Tab&#10; - Tab&#10;&#10;Here’s another:&#10;&#10;1. First&#10;2. Second:&#10; - Fee&#10; - Fie&#10; - Foe&#10;&#10;3. Third&#10;&#10;Same thing but with paragraphs:&#10;&#10;1. First&#10;&#10;2. Second:&#10;&#10; - Fee&#10; - Fie&#10; - Foe&#10;&#10;3. Third&#10;&#10;">
+ <outline text="Nested" _note="- Tab&#10; - Tab&#10; - Tab&#10;&#10;Here’s another:&#10;&#10;1. First&#10;2. Second:&#10; - Fee&#10; - Fie&#10; - Foe&#10;3. Third&#10;&#10;Same thing but with paragraphs:&#10;&#10;1. First&#10;&#10;2. Second:&#10;&#10; - Fee&#10; - Fie&#10; - Foe&#10;&#10;3. Third&#10;&#10;">
</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&#10;&#10;">
</outline>
diff --git a/tests/writer.plain b/tests/writer.plain
index a8c8f9bf9..0774e9465 100644
--- a/tests/writer.plain
+++ b/tests/writer.plain
@@ -215,7 +215,6 @@ Here’s another:
- Fee
- Fie
- Foe
-
3. Third
Same thing but with paragraphs: