aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Writers
diff options
context:
space:
mode:
authorfiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b>2007-01-04 01:04:56 +0000
committerfiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b>2007-01-04 01:04:56 +0000
commit99959b68e9ebbe48e952ce915368d6fc88a7d41a (patch)
treeaa25d2ffcddacb044a35fa48865794d7d013dab6 /src/Text/Pandoc/Writers
parente4880319e66493948e198cdd8b3d18ba572a2967 (diff)
downloadpandoc-99959b68e9ebbe48e952ce915368d6fc88a7d41a.tar.gz
+ Improved text wrapping algorithm in markdown, docbook, and RST writers.
LineBreaks no longer cause ugly wrapping in Markdown output. + Replaced splitBySpace with the more general, polymorphic function splitBy (in Text/Pandoc/Shared). git-svn-id: https://pandoc.googlecode.com/svn/trunk@411 788f1e2b-df1e-0410-8736-df70ead52e1b
Diffstat (limited to 'src/Text/Pandoc/Writers')
-rw-r--r--src/Text/Pandoc/Writers/Docbook.hs2
-rw-r--r--src/Text/Pandoc/Writers/Markdown.hs9
-rw-r--r--src/Text/Pandoc/Writers/RST.hs7
3 files changed, 12 insertions, 6 deletions
diff --git a/src/Text/Pandoc/Writers/Docbook.hs b/src/Text/Pandoc/Writers/Docbook.hs
index 8ccf84f30..5f6f1c8b1 100644
--- a/src/Text/Pandoc/Writers/Docbook.hs
+++ b/src/Text/Pandoc/Writers/Docbook.hs
@@ -176,7 +176,7 @@ cdata str = text $ "<![CDATA[" ++ str ++ "]]>"
-- | Take list of inline elements and return wrapped doc.
wrap :: WriterOptions -> [Inline] -> Doc
-wrap options lst = fsep $ map (hcat . (map (inlineToDocbook options))) (splitBySpace lst)
+wrap options lst = fsep $ map (inlinesToDocbook options) (splitBy Space lst)
-- | Escape a string for XML (with "smart" option if specified).
stringToXML :: WriterOptions -> String -> String
diff --git a/src/Text/Pandoc/Writers/Markdown.hs b/src/Text/Pandoc/Writers/Markdown.hs
index bfebc71fe..c1d50c2ef 100644
--- a/src/Text/Pandoc/Writers/Markdown.hs
+++ b/src/Text/Pandoc/Writers/Markdown.hs
@@ -58,8 +58,13 @@ escapeLinkTitle = gsub "\"" "\\\\\""
-- | Take list of inline elements and return wrapped doc.
wrappedMarkdown :: [Inline] -> Doc
-wrappedMarkdown lst = fsep $
- map (fcat . (map inlineToMarkdown)) (splitBySpace lst)
+wrappedMarkdown lst =
+ let wrapSection sec = fsep $ map inlineListToMarkdown $ (splitBy Space sec)
+ wrappedSecs = map wrapSection $ splitBy LineBreak lst
+ wrappedSecs' = foldr (\s rest -> if not (null rest)
+ then (s <> text " "):rest
+ else s:rest) [] wrappedSecs in
+ vcat wrappedSecs'
-- | Insert Blank block between key and non-key
formatKeys :: [Block] -> [Block]
diff --git a/src/Text/Pandoc/Writers/RST.hs b/src/Text/Pandoc/Writers/RST.hs
index 8b2563eb4..9184e0200 100644
--- a/src/Text/Pandoc/Writers/RST.hs
+++ b/src/Text/Pandoc/Writers/RST.hs
@@ -59,9 +59,10 @@ escapeString = backslashEscape "`\\|*_"
-- and another containing references.
wrappedRST :: [Inline] -> (Doc, Doc)
wrappedRST lst =
- let words = splitBySpace lst in
- ( fsep $ map (fcat . (map (fst . inlineToRST))) words,
- vcat (map (snd . inlineToRST) lst) )
+ let wrap_section sec = fsep $ map (fst . inlineListToRST) $
+ (splitBy Space sec) in
+ ((vcat $ map wrap_section $ (splitBy LineBreak lst)),
+ vcat $ map (snd . inlineToRST) lst)
-- | Remove reference keys, and make sure there are blanks before each list.
reformatBlocks :: [Block] -> [Block]