{-# 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