summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-09-30 03:38:59 +0200
committertv <tv@krebsco.de>2026-09-30 03:38:59 +0200
commit359ce0a3104d6407372e0dd3ba86bca71617b9a5 (patch)
tree087389571413662d69c0781bfd9c95d4c157d9dc /src
parentb1db72a28b1bc983e4a11eb6c03830bf06dfad2c (diff)
refactor MdBlocks.Metadata
Diffstat (limited to 'src')
-rw-r--r--src/MdBlocks/Metadata.hs48
1 files changed, 30 insertions, 18 deletions
diff --git a/src/MdBlocks/Metadata.hs b/src/MdBlocks/Metadata.hs
index c0b1777..607fa3f 100644
--- a/src/MdBlocks/Metadata.hs
+++ b/src/MdBlocks/Metadata.hs
@@ -1,6 +1,10 @@
{-# LANGUAGE OverloadedStrings #-}
-module MdBlocks.Metadata where
+module MdBlocks.Metadata
+ ( emptyMetadata
+ , parseMetadataLine
+ )
+where
import qualified Data.Map.Strict as M
import Data.Text (Text)
@@ -10,7 +14,11 @@ import MdBlocks.Types
emptyMetadata :: Metadata
emptyMetadata =
- Metadata Nothing Nothing M.empty
+ Metadata
+ { mdLanguage = Nothing
+ , mdId = Nothing
+ , mdAttrs = M.empty
+ }
parseMetadataLine :: Text -> Metadata
parseMetadataLine line =
@@ -18,21 +26,25 @@ parseMetadataLine line =
[] ->
emptyMetadata
- (langTok:rest)
- | T.isPrefixOf "@" langTok ->
- Metadata
- (Just $ T.drop 1 langTok)
- (lookupKey "id")
- attrs
- | otherwise ->
+ langTok : rest
+ | not ("@" `T.isPrefixOf` langTok) ->
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
+ | otherwise ->
+ Metadata
+ { mdLanguage = Just (T.drop 1 langTok)
+ , mdId = M.lookup "id" attrs
+ , mdAttrs = attrs
+ }
+ where
+ attrs =
+ M.fromList
+ [ parseKV tok
+ | tok <- rest
+ , "=" `T.isInfixOf` tok
+ ]
+
+parseKV :: Text -> (Text, Text)
+parseKV t =
+ let (k,v) = T.breakOn "=" t
+ in (k, T.drop 1 v)