aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Text/Pandoc/Readers/RST.hs23
-rw-r--r--tests/rst-reader.native7
-rw-r--r--tests/rst-reader.rst3
3 files changed, 25 insertions, 8 deletions
diff --git a/src/Text/Pandoc/Readers/RST.hs b/src/Text/Pandoc/Readers/RST.hs
index 0829996a7..34962b553 100644
--- a/src/Text/Pandoc/Readers/RST.hs
+++ b/src/Text/Pandoc/Readers/RST.hs
@@ -109,8 +109,29 @@ titleTransform (bs, meta) =
_ -> (bs', meta')
metaFromDefList :: [([Inline], [[Block]])] -> Meta -> Meta
-metaFromDefList ds meta = foldr f meta ds
+metaFromDefList ds meta = adjustAuthors $ foldr f meta ds
where f (k,v) = setMeta (map toLower $ stringify k) (mconcat $ map fromList v)
+ adjustAuthors (Meta metamap) = Meta $ M.adjust toPlain "author"
+ $ M.adjust toPlain "date"
+ $ M.adjust toPlain "title"
+ $ M.adjust splitAuthors "authors"
+ $ metamap
+ toPlain (MetaBlocks [Para xs]) = MetaInlines xs
+ toPlain x = x
+ splitAuthors (MetaBlocks [Para xs]) = MetaList $ map MetaInlines
+ $ splitAuthors' xs
+ splitAuthors x = x
+ splitAuthors' = map normalizeSpaces .
+ splitOnSemi . concatMap factorSemi
+ splitOnSemi = splitBy (==Str ";")
+ factorSemi (Str []) = []
+ factorSemi (Str s) = case break (==';') s of
+ (xs,[]) -> [Str xs]
+ (xs,';':ys) -> Str xs : Str ";" :
+ factorSemi (Str ys)
+ (xs,ys) -> Str xs :
+ factorSemi (Str ys)
+ factorSemi x = [x]
parseRST :: RSTParser Pandoc
parseRST = do
diff --git a/tests/rst-reader.native b/tests/rst-reader.native
index 92c3ce2ca..49677d958 100644
--- a/tests/rst-reader.native
+++ b/tests/rst-reader.native
@@ -1,8 +1,5 @@
-Pandoc (Meta {docTitle = [Str "Pandoc",Space,Str "Test",Space,Str "Suite",Str ":",Space,Str "Subtitle"], docAuthors = [[Str "John",Space,Str "MacFarlane"],[Str "Anonymous"]], docDate = [Str "July",Space,Str "17,",Space,Str "2006"]})
-[DefinitionList
- [([Str "Revision"],
- [[Para [Str "3"]]])]
-,Header 1 ("",[],[]) [Str "Level",Space,Str "one",Space,Str "header"]
+Pandoc (Meta {unMeta = fromList [("authors",MetaList [MetaInlines [Str "John",Space,Str "MacFarlane"],MetaInlines [Str "Anonymous"]]),("date",MetaInlines [Str "July",Space,Str "17,",Space,Str "2006"]),("revision",MetaBlocks [Para [Str "3"]]),("subtitle",MetaInlines [Str "Subtitle"]),("title",MetaInlines [Str "Pandoc",Space,Str "Test",Space,Str "Suite"])]})
+[Header 1 ("",[],[]) [Str "Level",Space,Str "one",Space,Str "header"]
,Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "set",Space,Str "of",Space,Str "tests",Space,Str "for",Space,Str "pandoc.",Space,Str "Most",Space,Str "of",Space,Str "them",Space,Str "are",Space,Str "adapted",Space,Str "from",Space,Str "John",Space,Str "Gruber\8217s",Space,Str "markdown",Space,Str "test",Space,Str "suite."]
,Header 2 ("",[],[]) [Str "Level",Space,Str "two",Space,Str "header"]
,Header 3 ("",[],[]) [Str "Level",Space,Str "three"]
diff --git a/tests/rst-reader.rst b/tests/rst-reader.rst
index 970ab4d4a..748bfe0a5 100644
--- a/tests/rst-reader.rst
+++ b/tests/rst-reader.rst
@@ -3,8 +3,7 @@ Pandoc Test Suite
Subtitle
^^^^^^^^
-:Author: John MacFarlane
-:Author: Anonymous
+:Authors: John MacFarlane; Anonymous
:Date: July 17, 2006
:Revision: 3