git.iko.soy/typeable/pandoc
on master help sign in
Org reader: allow multiple, comma-separated authors
2ca2585Albert Krewinkel
src/Text/Pandoc/Readers/Org/Meta.hs+9−1
@@ -69,7 +69,7 @@ metaKey = map toLower <$> many1 (noneOf ": \n\r")
69metaValue :: String -> OrgParser (F MetaValue)
69metaValue :: String -> OrgParser (F MetaValue)
70metaValue key = do
70metaValue key = do
71 case key of
71 case key of
72− "author" -> metaInlines
72+ "author" -> metaInlinesCommaSeparated
73 "title" -> metaInlines
73 "title" -> metaInlines
74 "date" -> metaInlines
74 "date" -> metaInlines
75 _ -> metaString
75 _ -> metaString
@@ -77,6 +77,14 @@ metaValue key = do
77metaInlines :: OrgParser (F MetaValue)
77metaInlines :: OrgParser (F MetaValue)
78metaInlines = fmap (MetaInlines . B.toList) <$> inlinesTillNewline
78metaInlines = fmap (MetaInlines . B.toList) <$> inlinesTillNewline
79
79
80+metaInlinesCommaSeparated :: OrgParser (F MetaValue)
81+metaInlinesCommaSeparated = do
82+ authStrs <- (many1 (noneOf ",\n")) `sepBy1` (char ',')
83+ newline
84+ authors <- mapM (parseFromString inlinesTillNewline . (++ "\n")) authStrs
85+ let toMetaInlines = MetaInlines . B.toList
86+ return $ MetaList . map toMetaInlines <$> sequence authors
87+
80metaString :: OrgParser (F MetaValue)
88metaString :: OrgParser (F MetaValue)
81metaString = return . MetaString <$> anyLine
89metaString = return . MetaString <$> anyLine
82
90
tests/Tests/Readers/Org.hs+8−1
@@ -467,7 +467,14 @@ tests =
467 , "Author" =:
467 , "Author" =:
468 "#+author: Albert /Emacs-Fanboy/ Krewinkel" =?>
468 "#+author: Albert /Emacs-Fanboy/ Krewinkel" =?>
469 let author = toList . spcSep $ [ "Albert", emph "Emacs-Fanboy", "Krewinkel" ]
469 let author = toList . spcSep $ [ "Albert", emph "Emacs-Fanboy", "Krewinkel" ]
470− meta = setMeta "author" (MetaInlines author) $ nullMeta
470+ meta = setMeta "author" (MetaList [MetaInlines author]) $ nullMeta
471+ in Pandoc meta mempty
472+
473+ , "Multiple authors" =:
474+ "#+author: James Dewey Watson, Francis Harry Compton Crick " =?>
475+ let watson = MetaInlines $ toList "James Dewey Watson"
476+ crick = MetaInlines $ toList "Francis Harry Compton Crick"
477+ meta = setMeta "author" (MetaList [watson, crick]) $ nullMeta
471 in Pandoc meta mempty
478 in Pandoc meta mempty
472
479
473 , "Date" =:
480 , "Date" =: