aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Writers
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2012-08-23 19:09:56 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2012-08-23 19:09:56 -0700
commitd7e658c6432bf4c820029eefb9779dca24a1ddaf (patch)
tree853cacd6c79e206293b6d538c3e2cd304d7a1deb /src/Text/Pandoc/Writers
parentdc8e5970bfeb6bc760bf57b87b5d99f1a2c2ad38 (diff)
downloadpandoc-d7e658c6432bf4c820029eefb9779dca24a1ddaf.tar.gz
Don't strip meta and link elements in epub metadata.
Per http://idpf.org/epub/30/spec/epub30-publications.html#sec-metadata-elem, a metadata element can contain not just Dublin Core elements but also meta and link elements, but Pandoc currently strips those out. Patch from aberrancy. Closes #589.
Diffstat (limited to 'src/Text/Pandoc/Writers')
-rw-r--r--src/Text/Pandoc/Writers/EPUB.hs8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/Text/Pandoc/Writers/EPUB.hs b/src/Text/Pandoc/Writers/EPUB.hs
index 1a2764cb6..46310e398 100644
--- a/src/Text/Pandoc/Writers/EPUB.hs
+++ b/src/Text/Pandoc/Writers/EPUB.hs
@@ -248,12 +248,14 @@ metadataElement metadataXML uuid lang title authors date mbCoverImage =
let userNodes = parseXML metadataXML
elt = unode "metadata" ! [("xmlns:dc","http://purl.org/dc/elements/1.1/")
,("xmlns:opf","http://www.idpf.org/2007/opf")] $
- filter isDublinCoreElement $ onlyElems userNodes
+ filter isMetadataElement $ onlyElems userNodes
dublinElements = ["contributor","coverage","creator","date",
"description","format","identifier","language","publisher",
"relation","rights","source","subject","title","type"]
- isDublinCoreElement e = qPrefix (elName e) == Just "dc" &&
- qName (elName e) `elem` dublinElements
+ isMetadataElement e = (qPrefix (elName e) == Just "dc" &&
+ qName (elName e) `elem` dublinElements) ||
+ (qPrefix (elName e) == Nothing &&
+ qName (elName e) `elem` ["link","meta"])
contains e n = not (null (findElements (QName n Nothing (Just "dc")) e))
newNodes = [ unode "dc:title" title | not (elt `contains` "title") ] ++
[ unode "dc:language" lang | not (elt `contains` "language") ] ++