summaryrefslogtreecommitdiffstats
path: root/src/Zettel/Common.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Zettel/Common.hs')
-rw-r--r--src/Zettel/Common.hs23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/Zettel/Common.hs b/src/Zettel/Common.hs
index 7b77417..515ebd5 100644
--- a/src/Zettel/Common.hs
+++ b/src/Zettel/Common.hs
@@ -8,7 +8,7 @@ import qualified Data.Text as T
import Data.Text.Read (decimal)
import Numeric (readInt, showIntAtBase)
import Text.Pandoc.Builder (HasMeta (..), ToMetaValue (..))
-import Text.Pandoc.Definition (MetaValue (..), Pandoc (..))
+import Text.Pandoc.Definition (Inline (..), Meta (..), MetaValue (..), Pandoc (..))
import Zettel.Types
trySet :: (HasMeta a, ToMetaValue b) => Text -> Maybe b -> a -> a
@@ -111,3 +111,24 @@ parseLink :: Text -> ZettelId
parseLink t = ZettelId $ parseIds ident
where
ident = T.takeWhile (']' /=) $ T.dropWhile ('#' /=) t
+
+metaToString :: MetaValue -> Maybe Text
+metaToString (MetaString t) = Just t
+metaToString _ = Nothing
+
+metaToInlines :: MetaValue -> Maybe [Inline]
+metaToInlines (MetaInlines t) = Just t
+metaToInlines _ = Nothing
+
+metaToTextList :: MetaValue -> Maybe [Text]
+metaToTextList (MetaList t) = traverse metaToString t
+metaToTextList _ = Nothing
+
+lookupString :: Text -> Meta -> Maybe Text
+lookupString t m = Map.lookup t (unMeta m) >>= metaToString
+
+lookupInlines :: Text -> Meta -> Maybe [Inline]
+lookupInlines t m = Map.lookup t (unMeta m) >>= metaToInlines
+
+lookupTextList :: Text -> Meta -> Maybe [Text]
+lookupTextList t m = Map.lookup t (unMeta m) >>= metaToTextList