diff options
author | John MacFarlane <jgm@berkeley.edu> | 2017-12-23 10:03:13 -0800 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2017-12-23 10:03:13 -0800 |
commit | 6b63b63f30c8d03575d99f300cca6e54b78d42eb (patch) | |
tree | 4c1dccf09f4500ed50f42df0986c29ca8809aabb | |
parent | 2c66a42ab81d40e771eda0f054c62f22ad45f3d0 (diff) | |
download | pandoc-6b63b63f30c8d03575d99f300cca6e54b78d42eb.tar.gz |
JATS reader: process author metadata.
-rw-r--r-- | src/Text/Pandoc/Readers/JATS.hs | 32 | ||||
-rw-r--r-- | test/jats-reader.native | 2 | ||||
-rw-r--r-- | test/jats-reader.xml | 12 |
3 files changed, 40 insertions, 6 deletions
diff --git a/src/Text/Pandoc/Readers/JATS.hs b/src/Text/Pandoc/Readers/JATS.hs index 8c0cb2db5..29c443d86 100644 --- a/src/Text/Pandoc/Readers/JATS.hs +++ b/src/Text/Pandoc/Readers/JATS.hs @@ -182,6 +182,7 @@ parseBlock (Elem e) = "sec" -> gets jatsSectionLevel >>= sect . (+1) "title" -> return mempty "title-group" -> checkInMeta getTitle + "contrib-group" -> checkInMeta getAuthors "graphic" -> para <$> getGraphic e "journal-meta" -> metaBlock "article-meta" -> metaBlock @@ -239,7 +240,28 @@ parseBlock (Elem e) = Just s -> (text ": " <>) <$> getInlines s Nothing -> return mempty - addMeta "title" (tit <> subtit) + when (tit /= mempty) $ addMeta "title" tit + when (subtit /= mempty) $ addMeta "subtitle" subtit + + getAuthors :: PandocMonad m => JATS m () + getAuthors = do + authors <- mapM getContrib $ filterChildren + (\x -> named "contrib" x && + attrValue "contrib-type" x == "author") e + unless (null authors) $ addMeta "author" authors + + getContrib :: PandocMonad m => Element -> JATS m Inlines + getContrib x = do + given <- maybe (return mempty) getInlines + $ filterElement (named "given-names") x + family <- maybe (return mempty) getInlines + $ filterElement (named "surname") x + if given == mempty && family == mempty + then return mempty + else if given == mempty || family == mempty + then return $ given <> family + else return $ given <> space <> family + -- TODO institute, etc. parseTable = do let isCaption x = named "title" x || named "caption" x @@ -345,19 +367,19 @@ parseRef e = do let refPages = refFirstPage <> (if refLastPage == mempty then mempty else text "\x2013" <> refLastPage) - let personGroups' = filterElements (named "person-group") c + let personGroups' = filterChildren (named "person-group") c let getName nm = do given <- maybe (return mempty) getInlines - $ filterElement (named "given-names") nm + $ filterChild (named "given-names") nm family <- maybe (return mempty) getInlines - $ filterElement (named "surname") nm + $ filterChild (named "surname") nm return $ toMetaValue $ Map.fromList [ ("given", given) , ("family", family) ] personGroups <- mapM (\pg -> do names <- mapM getName - (filterElements (named "name") pg) + (filterChildren (named "name") pg) return (attrValue "person-group-type" pg, toMetaValue names)) personGroups' diff --git a/test/jats-reader.native b/test/jats-reader.native index 2bc8b94ce..a7c349149 100644 --- a/test/jats-reader.native +++ b/test/jats-reader.native @@ -1,4 +1,4 @@ -Pandoc (Meta {unMeta = fromList [("title",MetaInlines [Str "Pandoc",Space,Str "Test",Space,Str "Suite"])]}) +Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Space,Str "MacFarlane"]]),("title",MetaInlines [Str "Pandoc",Space,Str "Test",Space,Str "Suite"])]}) [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",SoftBreak,Str "Gruber's",Space,Str "markdown",Space,Str "test",Space,Str "suite."] ,Header 1 ("headers",[],[]) [Str "Headers"] ,Header 2 ("level-2-with-an-embedded-link",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",SoftBreak,Link ("",[],[]) [Str "embedded",SoftBreak,Str "link"] ("/url","")] diff --git a/test/jats-reader.xml b/test/jats-reader.xml index eb06fcc22..f98caa46e 100644 --- a/test/jats-reader.xml +++ b/test/jats-reader.xml @@ -14,6 +14,18 @@ <title-group> <article-title>Pandoc Test Suite</article-title> </title-group> +<contrib-group> + <contrib contrib-type="author"> + <name> + <surname>MacFarlane</surname> + <given-names>John</given-names> + </name> + <contrib contrib-type="author"> + <name> + <surname>Anonymous</surname> + </name> + </contrib> +</contrib-group> </article-meta> </front> <body> |