diff options
| author | Iacobus1983 <77020754+Iacobus1983@users.noreply.github.com> | 2024-02-01 19:19:08 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-01 10:19:08 -0800 |
| commit | 3e7e6f014a7b3b0172a8fe72e61cd68627f058cb (patch) | |
| tree | 335a0ce0db00c4365c16cbca12054fbf3e77edf8 /src/Text | |
| parent | 9ab0ffb99e5474b1b3af05902051a8f8baea1167 (diff) | |
EPUB accessibility additions (#9400)
AccessModeSufficient and AccessibilitySummary are added.
These metadata are optional according to the EPUB Accessibility 1.1
standard, but ACE Daisy checker flags ebooks for missing them
(cf daisy/ace#389 and daisy/ace#400).
With this commit:
AccessModeSufficient is defaulted to "textual".
AccessibilitySummary can be included via the metadata block.
Diffstat (limited to 'src/Text')
| -rw-r--r-- | src/Text/Pandoc/Writers/EPUB.hs | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/Text/Pandoc/Writers/EPUB.hs b/src/Text/Pandoc/Writers/EPUB.hs index ea8a46cd1..e737b0b63 100644 --- a/src/Text/Pandoc/Writers/EPUB.hs +++ b/src/Text/Pandoc/Writers/EPUB.hs @@ -101,8 +101,10 @@ data EPUBMetadata = EPUBMetadata{ , epubIbooksFields :: [(Text, Text)] , epubCalibreFields :: [(Text, Text)] , epubAccessModes :: [Text] -- https://kb.daisy.org/publishing/docs/metadata/schema.org/accessMode.html + , epubAccessModeSufficient :: [Text] -- https://kb.daisy.org/publishing/docs/metadata/schema.org/accessModeSufficient.html , epubAccessibilityFeatures :: [Text] -- https://kb.daisy.org/publishing/docs/metadata/schema.org/accessibilityFeature.html , epubAccessibilityHazards :: [Text] -- https://kb.daisy.org/publishing/docs/metadata/schema.org/accessibilityHazard.html + , epubAccessibilitySummary :: Maybe Text -- https://kb.daisy.org/publishing/docs/metadata/schema.org/accessibilitySummary.html } deriving Show data Date = Date{ @@ -362,8 +364,10 @@ metadataFromMeta opts meta = EPUBMetadata{ , epubIbooksFields = ibooksFields , epubCalibreFields = calibreFields , epubAccessModes = accessModes + , epubAccessModeSufficient = accessModeSufficient , epubAccessibilityFeatures = accessibilityFeatures , epubAccessibilityHazards = accessibilityHazards + , epubAccessibilitySummary = accessibilitySummary } where identifiers = getIdentifier meta titles = getTitle meta @@ -410,6 +414,9 @@ metadataFromMeta opts meta = EPUBMetadata{ accessModes = case lookupMeta "accessModes" meta of Just (MetaList xs) -> map metaValueToString xs _ -> ["textual"] + accessModeSufficient = case lookupMeta "accessModeSufficient" meta of + Just (MetaList xs) -> map metaValueToString xs + _ -> ["textual"] accessibilityFeatures = case lookupMeta "accessibilityFeatures" meta of Just (MetaList xs) -> map metaValueToString xs @@ -419,6 +426,7 @@ metadataFromMeta opts meta = EPUBMetadata{ case lookupMeta "accessibilityHazards" meta of Just (MetaList xs) -> map metaValueToString xs _ -> ["none"] + accessibilitySummary = metaValueToString <$> lookupMeta "accessibilitySummary" meta -- | Produce an EPUB2 file from a Pandoc document. writeEPUB2 :: PandocMonad m @@ -1000,8 +1008,8 @@ metadataElement version md currentTime = ++ publisherNodes ++ sourceNodes ++ relationNodes ++ coverageNodes ++ rightsNodes ++ coverImageNodes ++ modifiedNodes ++ belongsToCollectionNodes - ++ accessModeNodes ++ accessibilityFeatureNodes - ++ accessibilityHazardNodes + ++ accessModeNodes ++ accessModeSufficientNodes ++ accessibilityFeatureNodes + ++ accessibilityHazardNodes ++ accessibilitySummaryNodes metaprop = if version == EPUB2 then "name" else "property" withIds base f = concat . zipWith f (map (\x -> base <> T.cons '-' (tshow x)) @@ -1053,10 +1061,13 @@ metadataElement version md currentTime = (epubGroupPosition md) schemanode k v = unode "meta" ! [(metaprop, "schema:" <> k)] $ v accessModeNodes = map (schemanode "accessMode") (epubAccessModes md) + accessModeSufficientNodes = map (schemanode "accessModeSufficient") (epubAccessModeSufficient md) accessibilityFeatureNodes = map (schemanode "accessibilityFeature") (epubAccessibilityFeatures md) accessibilityHazardNodes = map (schemanode "accessibilityHazard") (epubAccessibilityHazards md) + accessibilitySummaryNodes = maybe [] (\summary -> [schemanode "accessibilitySummary" summary]) $ epubAccessibilitySummary md + dcTag n s = unode ("dc:" <> n) s dcTag' n s = [dcTag n s] toIdentifierNode id' (Identifier txt scheme) |
