diff options
author | Albert Krewinkel <albert@zeitkraut.de> | 2016-08-29 14:10:57 +0200 |
---|---|---|
committer | Albert Krewinkel <albert@zeitkraut.de> | 2016-08-29 14:10:57 +0200 |
commit | 2ca2585b3569bd14923795f3023bd0789fe7911f (patch) | |
tree | dcaffb228990eb0c7da4f5c5d1fb4c79534dc1b7 | |
parent | 153970bef5068f5a82943cc7a2bec79f04d31ae9 (diff) | |
download | pandoc-2ca2585b3569bd14923795f3023bd0789fe7911f.tar.gz |
Org reader: allow multiple, comma-separated authors
Multiple authors can be specified in the `#+AUTHOR` meta line if they
are given as a comma-separated list.
-rw-r--r-- | src/Text/Pandoc/Readers/Org/Meta.hs | 10 | ||||
-rw-r--r-- | tests/Tests/Readers/Org.hs | 9 |
2 files changed, 17 insertions, 2 deletions
diff --git a/src/Text/Pandoc/Readers/Org/Meta.hs b/src/Text/Pandoc/Readers/Org/Meta.hs index 8f0b9f6b5..372b19fb6 100644 --- a/src/Text/Pandoc/Readers/Org/Meta.hs +++ b/src/Text/Pandoc/Readers/Org/Meta.hs @@ -69,7 +69,7 @@ metaKey = map toLower <$> many1 (noneOf ": \n\r") metaValue :: String -> OrgParser (F MetaValue) metaValue key = do case key of - "author" -> metaInlines + "author" -> metaInlinesCommaSeparated "title" -> metaInlines "date" -> metaInlines _ -> metaString @@ -77,6 +77,14 @@ metaValue key = do metaInlines :: OrgParser (F MetaValue) metaInlines = fmap (MetaInlines . B.toList) <$> inlinesTillNewline +metaInlinesCommaSeparated :: OrgParser (F MetaValue) +metaInlinesCommaSeparated = do + authStrs <- (many1 (noneOf ",\n")) `sepBy1` (char ',') + newline + authors <- mapM (parseFromString inlinesTillNewline . (++ "\n")) authStrs + let toMetaInlines = MetaInlines . B.toList + return $ MetaList . map toMetaInlines <$> sequence authors + metaString :: OrgParser (F MetaValue) metaString = return . MetaString <$> anyLine diff --git a/tests/Tests/Readers/Org.hs b/tests/Tests/Readers/Org.hs index 61c222919..844266401 100644 --- a/tests/Tests/Readers/Org.hs +++ b/tests/Tests/Readers/Org.hs @@ -467,7 +467,14 @@ tests = , "Author" =: "#+author: Albert /Emacs-Fanboy/ Krewinkel" =?> let author = toList . spcSep $ [ "Albert", emph "Emacs-Fanboy", "Krewinkel" ] - meta = setMeta "author" (MetaInlines author) $ nullMeta + meta = setMeta "author" (MetaList [MetaInlines author]) $ nullMeta + in Pandoc meta mempty + + , "Multiple authors" =: + "#+author: James Dewey Watson, Francis Harry Compton Crick " =?> + let watson = MetaInlines $ toList "James Dewey Watson" + crick = MetaInlines $ toList "Francis Harry Compton Crick" + meta = setMeta "author" (MetaList [watson, crick]) $ nullMeta in Pandoc meta mempty , "Date" =: |