diff options
author | fiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b> | 2007-01-04 01:04:56 +0000 |
---|---|---|
committer | fiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b> | 2007-01-04 01:04:56 +0000 |
commit | 99959b68e9ebbe48e952ce915368d6fc88a7d41a (patch) | |
tree | aa25d2ffcddacb044a35fa48865794d7d013dab6 /src/Text/Pandoc/Writers | |
parent | e4880319e66493948e198cdd8b3d18ba572a2967 (diff) | |
download | pandoc-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.hs | 2 | ||||
-rw-r--r-- | src/Text/Pandoc/Writers/Markdown.hs | 9 | ||||
-rw-r--r-- | src/Text/Pandoc/Writers/RST.hs | 7 |
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] |