@@ -55,20 +55,35 @@ metaLine = mempty <$ metaLineStart <* (optionLine <|> declarationLine)
5555
5656declarationLine :: OrgParser ()
5757declarationLine = try $ do
58− key <- metaKey
59− value <- metaInlines
58+ key <- map toLower <$> metaKey
59+ value <- metaValue key
6060 updateState $ \st ->
6161 let meta' = B.setMeta key <$> value <*> pure nullMeta
6262 in st { orgStateMeta = orgStateMeta st <> meta' }
6363
64−metaInlines :: OrgParser (F MetaValue)
65−metaInlines = fmap (MetaInlines . B.toList) <$> inlinesTillNewline
66−
6764metaKey :: OrgParser String
6865metaKey = map toLower <$> many1 (noneOf ": \n\r")
6966 <* char ':'
7067 <* skipSpaces
7168
69+metaValue :: String -> OrgParser (F MetaValue)
70+metaValue key = do
71+ case key of
72+ "author" -> metaInlines
73+ "title" -> metaInlines
74+ "date" -> metaInlines
75+ _ -> metaString
76+
77+metaInlines :: OrgParser (F MetaValue)
78+metaInlines = fmap (MetaInlines . B.toList) <$> inlinesTillNewline
79+
80+metaString :: OrgParser (F MetaValue)
81+metaString = return . MetaString <$> anyLine
82+
83+
84+--
85+-- export options
86+--
7287optionLine :: OrgParser ()
7388optionLine = try $ do
7489 key <- metaKey