diff --git a/debian/changelog b/debian/changelog index 68942258b..3fa92832f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -103,6 +103,8 @@ pandoc (0.3) unstable; urgency=low + Modified HTML reader to skip a newline following a
tag. Otherwise the newline will be treated as a space at the beginning of the next line. + + Fixed bug in text-wrapping routine in Markdown and RST writers. + Now LineBreaks no longer cause wrapping problems. * Made handling of code blocks more consistent. Previously, some readers allowed trailing newlines, while others stripped them. @@ -162,7 +164,8 @@ pandoc (0.3) unstable; urgency=low a '.exe' extension is added to each executable in EXECS. * Removed all wrappers except markdown2pdf and html2markdown. - Added new wrapper hsmarkdown, to be used as a drop-in replacement + + * Added new wrapper hsmarkdown, to be used as a drop-in replacement for Markdown.pl. hsmarkdown calls pandoc with the '--strict' option and disables other options. @@ -185,6 +188,8 @@ pandoc (0.3) unstable; urgency=low not to be HTML-specific. + Removed 'BlockQuoteContext' from ParserContext, as it isn't used anywhere. + + Removed splitBySpace and replaced it with a general, polymorphic + splitBy function. + Refactored LaTeX reader for clarity (added isArg function). + Converted some CR's to LF's in src/ui/default/print.css. + Added license text to top of source files. diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs index adc2621f3..d4687b10e 100644 --- a/src/Text/Pandoc/Shared.hs +++ b/src/Text/Pandoc/Shared.hs @@ -52,7 +52,7 @@ module Text.Pandoc.Shared ( -- * Pandoc block list processing consolidateList, isNoteBlock, - splitBySpace, + splitBy, normalizeSpaces, compactify, generateReference, @@ -274,10 +274,13 @@ removeTrailingSpace = reverse . removeLeadingSpace . reverse stripFirstAndLast str = drop 1 $ take ((length str) - 1) str --- | Split list of inlines into groups separated by a space. -splitBySpace :: [Inline] -> [[Inline]] -splitBySpace lst = filter (\a -> (/= Space) (head a)) - (groupBy (\a b -> (/= Space) a && (/= Space) b) lst) +-- | Split list into groups separated by sep. +splitBy :: (Eq a) => a -> [a] -> [[a]] +splitBy _ [] = [] +splitBy sep lst = + let (first, rest) = break (== sep) lst + rest' = dropWhile (== sep) rest in + first:(splitBy sep rest') -- | Normalize a list of inline elements: remove leading and trailing -- @Space@ elements, and collapse double @Space@s into singles. 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 $ "" -- | 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] diff --git a/tests/writer.rst b/tests/writer.rst index e929fdd8f..b54ab9665 100644 --- a/tests/writer.rst +++ b/tests/writer.rst @@ -55,7 +55,8 @@ looked like a list item. Here's one with a bullet. \* criminey. -There should be a hard line break here. +There should be a hard line break +here. --------------