@@ -32,12 +32,14 @@ module Text.Pandoc.Writers.Docbook ( writeDocbook) where
3232import Text.Pandoc.Definition
3333import Text.Pandoc.XML
3434import Text.Pandoc.Shared
35+import Text.Pandoc.Walk
3536import Text.Pandoc.Writers.Shared
3637import Text.Pandoc.Options
3738import Text.Pandoc.Templates (renderTemplate')
3839import Text.Pandoc.Readers.TeXMath
3940import Data.List ( isPrefixOf, intercalate, isSuffixOf )
4041import Data.Char ( toLower )
42+import Data.Monoid ( Any(..) )
4143import Text.Pandoc.Highlighting ( languages, languagesByExtension )
4244import Text.Pandoc.Pretty
4345import qualified Text.Pandoc.Builder as B
@@ -165,8 +167,9 @@ blockToDocbook opts (Para [Image txt (src,'f':'i':'g':':':_)]) =
165167 (inTagsIndented "imageobject"
166168 (selfClosingTag "imagedata" [("fileref",src)])) $$
167169 inTagsSimple "textobject" (inTagsSimple "phrase" alt))
168−blockToDocbook opts (Para lst) =
169− inTagsIndented "para" $ inlinesToDocbook opts lst
170+blockToDocbook opts (Para lst)
171+ | hasLineBreaks lst = flush $ nowrap $ inTagsSimple "literallayout" $ inlinesToDocbook opts lst
172+ | otherwise = inTagsIndented "para" $ inlinesToDocbook opts lst
170173blockToDocbook opts (BlockQuote blocks) =
171174 inTagsIndented "blockquote" $ blocksToDocbook opts blocks
172175blockToDocbook _ (CodeBlock (_,classes,_) str) =
@@ -226,6 +229,16 @@ blockToDocbook opts (Table caption aligns widths headers rows) =
226229 (inTags True "tgroup" [("cols", show (length headers))] $
227230 coltags $$ head' $$ body')
228231
232+hasLineBreaks :: [Inline] -> Bool
233+hasLineBreaks = getAny . query isLineBreak . walk removeNote
234+ where
235+ removeNote :: Inline -> Inline
236+ removeNote (Note _) = Str ""
237+ removeNote x = x
238+ isLineBreak :: Inline -> Any
239+ isLineBreak LineBreak = Any True
240+ isLineBreak _ = Any False
241+
229242alignmentToString :: Alignment -> [Char]
230243alignmentToString alignment = case alignment of
231244 AlignLeft -> "left"
@@ -293,7 +306,7 @@ inlineToDocbook opts (Math t str)
293306 fixNS = everywhere (mkT fixNS')
294307inlineToDocbook _ (RawInline f x) | f == "html" || f == "docbook" = text x
295308 | otherwise = empty
296−inlineToDocbook _ LineBreak = flush $ inTagsSimple "literallayout" (text "\n")
309+inlineToDocbook _ LineBreak = text "\n"
297310inlineToDocbook _ Space = space
298311inlineToDocbook opts (Link txt (src, _)) =
299312 if isPrefixOf "mailto:" src