diff options
Diffstat (limited to 'src/Zettel/Common.hs')
-rw-r--r-- | src/Zettel/Common.hs | 23 |
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 |