pandoc-query-0.1.1: lib/Text/Pandoc/Metadata.hs
{-|
Module : Metadata
Description : Utilities for working with Pandoc metadata.
Copyright : (c) 2023 Amy de Buitléir
License : GPL-3.0-only
Maintainer : amy@nualeargais.ie
Stability : experimental
Portability : POSIX
-}
{-# LANGUAGE OverloadedStrings #-}
module Text.Pandoc.Metadata
(
valueOf
)
where
import Data.Maybe (fromMaybe)
import Data.Text qualified as T
import Text.Pandoc qualified as P
import Text.Pandoc.Walk (query)
-- | Given metadata, extracts the values associated with the specified key.
valueOf :: P.Meta -> T.Text -> [T.Text]
m `valueOf` k = metaValueToTexts . fromMaybe (P.MetaInlines []) . P.lookupMeta k $ m
metaValueToTexts :: P.MetaValue -> [T.Text]
metaValueToTexts (P.MetaMap _) = error "This version of pandoc-query does not support queries on MetaMap values"
metaValueToTexts (P.MetaList xs) = map (T.concat . metaValueToTexts) xs
metaValueToTexts (P.MetaBool x) = [ T.pack $ show x ]
metaValueToTexts (P.MetaString t) = [t]
metaValueToTexts (P.MetaInlines xs) = [ query inlineToText xs ]
metaValueToTexts (P.MetaBlocks xs) = [ query inlineToText xs ]
inlineToText :: P.Inline -> T.Text
inlineToText (P.Str t) = t
inlineToText (P.Space) = " "
inlineToText _ = ""