diff options
Diffstat (limited to 'src/Text/Pandoc/Readers/Org/Meta.hs')
-rw-r--r-- | src/Text/Pandoc/Readers/Org/Meta.hs | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/Text/Pandoc/Readers/Org/Meta.hs b/src/Text/Pandoc/Readers/Org/Meta.hs index e61947d43..8f0b9f6b5 100644 --- a/src/Text/Pandoc/Readers/Org/Meta.hs +++ b/src/Text/Pandoc/Readers/Org/Meta.hs @@ -55,20 +55,35 @@ metaLine = mempty <$ metaLineStart <* (optionLine <|> declarationLine) declarationLine :: OrgParser () declarationLine = try $ do - key <- metaKey - value <- metaInlines + key <- map toLower <$> metaKey + value <- metaValue key updateState $ \st -> let meta' = B.setMeta key <$> value <*> pure nullMeta in st { orgStateMeta = orgStateMeta st <> meta' } -metaInlines :: OrgParser (F MetaValue) -metaInlines = fmap (MetaInlines . B.toList) <$> inlinesTillNewline - metaKey :: OrgParser String metaKey = map toLower <$> many1 (noneOf ": \n\r") <* char ':' <* skipSpaces +metaValue :: String -> OrgParser (F MetaValue) +metaValue key = do + case key of + "author" -> metaInlines + "title" -> metaInlines + "date" -> metaInlines + _ -> metaString + +metaInlines :: OrgParser (F MetaValue) +metaInlines = fmap (MetaInlines . B.toList) <$> inlinesTillNewline + +metaString :: OrgParser (F MetaValue) +metaString = return . MetaString <$> anyLine + + +-- +-- export options +-- optionLine :: OrgParser () optionLine = try $ do key <- metaKey |