From 76748ee0fec8c2c1b8b85d6c8dfb0c5ad168d171 Mon Sep 17 00:00:00 2001
From: John MacFarlane <jgm@berkeley.edu>
Date: Tue, 29 Mar 2022 19:41:14 -0700
Subject: [PATCH] JATS reader: handle pub-date.

Closes #8000.
---
 src/Text/Pandoc/Readers/JATS.hs | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/Text/Pandoc/Readers/JATS.hs b/src/Text/Pandoc/Readers/JATS.hs
index 2dee2bab3..9442e2506 100644
--- a/src/Text/Pandoc/Readers/JATS.hs
+++ b/src/Text/Pandoc/Readers/JATS.hs
@@ -341,6 +341,7 @@ parseMetadata e = do
   getAuthors e
   getAffiliations e
   getAbstract e
+  getPubDate e
   return mempty
 
 getTitle :: PandocMonad m => Element -> JATS m ()
@@ -380,6 +381,19 @@ getAbstract e =
       addMeta "abstract" blks
     Nothing -> pure ()
 
+getPubDate :: PandocMonad m => Element -> JATS m ()
+getPubDate e =
+  case filterElement (named "pub-date") e of
+    Just d -> do
+      case maybeAttrValue "iso-8601-date" d of
+        Just isod -> addMeta "date" (text isod)
+        Nothing -> do
+          let yr = strContent <$> filterElement (named "year") d
+          let mon = strContent <$> filterElement (named "month") d
+          let day = strContent <$> filterElement (named "day") d
+          addMeta "date" $ text $ T.intercalate "-" $ catMaybes [yr, mon, day]
+    Nothing -> pure ()
+
 getContrib :: PandocMonad m => Element -> JATS m Inlines
 getContrib x = do
   given <- maybe (return mempty) getInlines