diff options
-rw-r--r-- | src/Text/Pandoc/Readers/DocBook.hs | 20 | ||||
-rw-r--r-- | test/command/6541.md | 27 |
2 files changed, 41 insertions, 6 deletions
diff --git a/src/Text/Pandoc/Readers/DocBook.hs b/src/Text/Pandoc/Readers/DocBook.hs index 3db459cfd..b01ad3252 100644 --- a/src/Text/Pandoc/Readers/DocBook.hs +++ b/src/Text/Pandoc/Readers/DocBook.hs @@ -600,16 +600,24 @@ addMetadataFromElement e = do Nothing -> return () Just z -> addMetaField "author" z addMetaField "subtitle" e - addMetaField "author" e + addAuthor e addMetaField "date" e addMetaField "release" e addMetaField "releaseinfo" e return mempty - where addMetaField fieldname elt = - case filterChildren (named fieldname) elt of - [] -> return () - [z] -> getInlines z >>= addMeta fieldname - zs -> mapM getInlines zs >>= addMeta fieldname + where + addAuthor elt = + case filterChildren (named "author") elt of + [] -> return () + [z] -> fromAuthor z >>= addMeta "author" + zs -> mapM fromAuthor zs >>= addMeta "author" + fromAuthor elt = + mconcat . intersperse space <$> mapM getInlines (elChildren elt) + addMetaField fieldname elt = + case filterChildren (named fieldname) elt of + [] -> return () + [z] -> getInlines z >>= addMeta fieldname + zs -> mapM getInlines zs >>= addMeta fieldname addMeta :: PandocMonad m => ToMetaValue a => Text -> a -> DB m () addMeta field val = modify (setMeta field val) diff --git a/test/command/6541.md b/test/command/6541.md new file mode 100644 index 000000000..956340d4c --- /dev/null +++ b/test/command/6541.md @@ -0,0 +1,27 @@ +``` +% pandoc -f docbook -t markdown -s +<?xml version="1.0"?> +<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> +<book> + +<bookinfo> +<title>Title</title> +<author> +<firstname>Firstname</firstname><surname>Lastname</surname> +</author> +<releaseinfo>1.17</releaseinfo> +</bookinfo> + +<para>Text.</para> + +</book> +^D +--- +author: Firstname Lastname +releaseinfo: 1.17 +title: Title +--- + +Text. +``` |