{-# LANGUAGE LambdaCase #-} module Data.ZettelMeta where import Text.Pandoc import Text.Pandoc.Walk import Data.Text (Text) import qualified Data.Text as T import Data.Maybe (listToMaybe) import Data.ZettelID data ZettelMeta = ZettelMeta { zettelID :: ZettelID , title :: Text } deriving Show extractTitle :: Block -> [Text] extractTitle = \case Header 1 _attr inlines -> [T.unwords (query strings inlines)] _ -> [] where strings = \case Str x -> [x] _ -> [] zettelMeta :: ZettelID -> Pandoc -> Maybe ZettelMeta zettelMeta zid p = ZettelMeta zid <$> listToMaybe (query extractTitle p)