{-# 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)
valueOf :: P.Meta -> T.Text -> [T.Text]
Meta
m valueOf :: Meta -> Text -> [Text]
`valueOf` Text
k = MetaValue -> [Text]
metaValueToTexts (MetaValue -> [Text]) -> (Meta -> MetaValue) -> Meta -> [Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MetaValue -> Maybe MetaValue -> MetaValue
forall a. a -> Maybe a -> a
fromMaybe ([Inline] -> MetaValue
P.MetaInlines []) (Maybe MetaValue -> MetaValue)
-> (Meta -> Maybe MetaValue) -> Meta -> MetaValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Meta -> Maybe MetaValue
P.lookupMeta Text
k (Meta -> [Text]) -> Meta -> [Text]
forall a b. (a -> b) -> a -> b
$ Meta
m
metaValueToTexts :: P.MetaValue -> [T.Text]
metaValueToTexts :: MetaValue -> [Text]
metaValueToTexts (P.MetaMap Map Text MetaValue
_) = [Char] -> [Text]
forall a. HasCallStack => [Char] -> a
error [Char]
"This version of pandoc-query does not support queries on MetaMap values"
metaValueToTexts (P.MetaList [MetaValue]
xs) = (MetaValue -> Text) -> [MetaValue] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map ([Text] -> Text
T.concat ([Text] -> Text) -> (MetaValue -> [Text]) -> MetaValue -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MetaValue -> [Text]
metaValueToTexts) [MetaValue]
xs
metaValueToTexts (P.MetaBool Bool
x) = [ [Char] -> Text
T.pack ([Char] -> Text) -> [Char] -> Text
forall a b. (a -> b) -> a -> b
$ Bool -> [Char]
forall a. Show a => a -> [Char]
show Bool
x ]
metaValueToTexts (P.MetaString Text
t) = [Text
t]
metaValueToTexts (P.MetaInlines [Inline]
xs) = [ (Inline -> Text) -> [Inline] -> Text
forall c. Monoid c => (Inline -> c) -> [Inline] -> c
forall a b c. (Walkable a b, Monoid c) => (a -> c) -> b -> c
query Inline -> Text
inlineToText [Inline]
xs ]
metaValueToTexts (P.MetaBlocks [Block]
xs) = [ (Inline -> Text) -> [Block] -> Text
forall c. Monoid c => (Inline -> c) -> [Block] -> c
forall a b c. (Walkable a b, Monoid c) => (a -> c) -> b -> c
query Inline -> Text
inlineToText [Block]
xs ]
inlineToText :: P.Inline -> T.Text
inlineToText :: Inline -> Text
inlineToText (P.Str Text
t) = Text
t
inlineToText (Inline
P.Space) = Text
" "
inlineToText Inline
_ = Text
""