diff options
-rw-r--r-- | src/Text/Pandoc/Readers/RST.hs | 23 | ||||
-rw-r--r-- | tests/rst-reader.native | 7 | ||||
-rw-r--r-- | tests/rst-reader.rst | 3 |
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 |