From d5633e2395368410e1dfa22e5a046e655671a981 Mon Sep 17 00:00:00 2001 From: tv Date: Wed, 30 Sep 2026 03:21:31 +0200 Subject: init --- src/MdBlocks/Metadata.hs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/MdBlocks/Metadata.hs (limited to 'src/MdBlocks/Metadata.hs') diff --git a/src/MdBlocks/Metadata.hs b/src/MdBlocks/Metadata.hs new file mode 100644 index 0000000..c0b1777 --- /dev/null +++ b/src/MdBlocks/Metadata.hs @@ -0,0 +1,38 @@ +{-# LANGUAGE OverloadedStrings #-} + +module MdBlocks.Metadata where + +import qualified Data.Map.Strict as M +import Data.Text (Text) +import qualified Data.Text as T + +import MdBlocks.Types + +emptyMetadata :: Metadata +emptyMetadata = + Metadata Nothing Nothing M.empty + +parseMetadataLine :: Text -> Metadata +parseMetadataLine line = + case T.words line of + [] -> + emptyMetadata + + (langTok:rest) + | T.isPrefixOf "@" langTok -> + Metadata + (Just $ T.drop 1 langTok) + (lookupKey "id") + attrs + | otherwise -> + emptyMetadata + where + attrs = + M.fromList + [ let (k,v) = T.breakOn "=" x + in (k, T.drop 1 v) + | x <- rest + , "=" `T.isInfixOf` x + ] + + lookupKey k = M.lookup k attrs -- cgit v1.3.1