aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2018-08-28 12:34:49 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2018-08-28 12:35:28 -0700
commit7318bc91ce58bb6c39e556e334f278e590439c3f (patch)
tree72a0054c1168d22d9bf9e8e18c0d1ea1f74db4f8
parentdac85d683feb6f9f7e12b9273f353a1291171cd1 (diff)
downloadpandoc-7318bc91ce58bb6c39e556e334f278e590439c3f.tar.gz
EPUB writer: set epub:type on body element intelligently.
epub:type of first section epub:type of body -------------------------- ------------------ prologue frontmatter abstract frontmatter acknowledgments frontmatter copyright-page frontmatter dedication frontmatter foreword frontmatter halftitle, frontmatter introduction frontmatter preface frontmatter seriespage frontmatter titlepage frontmatter afterword backmatter appendix backmatter colophon backmatter conclusion backmatter epigraph backmatter Otherwise body will have epub:type 'bodymatter'. This only affects epub3. See http://www.idpf.org/epub/profiles/edu/structure/#h.l0bzsloklt10 Closes #4823.
-rw-r--r--data/templates/default.epub32
-rw-r--r--src/Text/Pandoc/Writers/EPUB.hs28
2 files changed, 23 insertions, 7 deletions
diff --git a/data/templates/default.epub3 b/data/templates/default.epub3
index b22714963..6428e984c 100644
--- a/data/templates/default.epub3
+++ b/data/templates/default.epub3
@@ -26,7 +26,7 @@ $for(header-includes)$
$header-includes$
$endfor$
</head>
-<body$if(coverpage)$ id="cover"$endif$>
+<body$if(coverpage)$ id="cover"$endif$$if(body-type)$ epub:type="$body-type$"$endif$>
$if(titlepage)$
<section epub:type="titlepage">
$for(title)$
diff --git a/src/Text/Pandoc/Writers/EPUB.hs b/src/Text/Pandoc/Writers/EPUB.hs
index 3c6ab69b9..4c5e73d81 100644
--- a/src/Text/Pandoc/Writers/EPUB.hs
+++ b/src/Text/Pandoc/Writers/EPUB.hs
@@ -461,6 +461,7 @@ pandocToEPUB version opts doc@(Pandoc meta _) = do
-- title page
tpContent <- lift $ writeHtml opts'{
writerVariables = ("titlepage","true"):
+ ("body-type", "frontmatter"):
("pagetitle", escapeStringForXML plainTitle):
cssvars True ++ vars }
(Pandoc meta [])
@@ -565,13 +566,28 @@ pandocToEPUB version opts doc@(Pandoc meta _) = do
let chapToEntry num (Chapter mbnum bs) =
mkEntry ("text/" ++ showChapter num) =<<
writeHtml opts'{ writerNumberOffset = fromMaybe [] mbnum
- , writerVariables = cssvars True ++ vars }
- (case bs of
- (Header _ _ xs : _) ->
+ , writerVariables = ("body-type", bodyType) :
+ cssvars True ++ vars } pdoc
+ where (pdoc, bodyType) =
+ case bs of
+ (Header _ (_,_,kvs) xs : _) ->
-- remove notes or we get doubled footnotes
- Pandoc (setMeta "title" (walk removeNote $ fromList xs)
- nullMeta) bs
- _ -> Pandoc nullMeta bs)
+ (Pandoc (setMeta "title"
+ (walk removeNote $ fromList xs) nullMeta) bs,
+ case lookup "epub:type" kvs of
+ Nothing -> "bodymatter"
+ Just x
+ | x `elem` frontMatterTypes -> "frontmatter"
+ | x `elem` backMatterTypes -> "backmatter"
+ | otherwise -> "bodymatter")
+ _ -> (Pandoc nullMeta bs, "bodymatter")
+ frontMatterTypes = ["prologue", "abstract", "acknowledgments",
+ "copyright-page", "dedication",
+ "foreword", "halftitle",
+ "introduction", "preface",
+ "seriespage", "titlepage"]
+ backMatterTypes = ["afterword", "appendix", "colophon",
+ "conclusion", "epigraph"]
chapterEntries <- zipWithM chapToEntry [1..] chapters