summaryrefslogtreecommitdiffstats
path: root/src/MdBlocks/Metadata.hs
blob: c0b1777443c2240fc20b613f44de7454ed4523f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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