{-| 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 _ = ""