diff options
Diffstat (limited to 'src/MdBlocks/Metadata.hs')
| -rw-r--r-- | src/MdBlocks/Metadata.hs | 38 |
1 files changed, 38 insertions, 0 deletions
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 |
