aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Text/Pandoc/Shared.hs15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs
index af56c6654..3dfdc3c8b 100644
--- a/src/Text/Pandoc/Shared.hs
+++ b/src/Text/Pandoc/Shared.hs
@@ -324,17 +324,22 @@ tabFilter tabStop =
-- Date/time
--
--- | Parse a date and convert (if possible) to "YYYY-MM-DD" format.
+-- | Parse a date and convert (if possible) to "YYYY-MM-DD" format. We
+-- limit years to the range 1601-9999 (ISO 8601 accepts greater than
+-- or equal to 1583, but MS Word only accepts dates starting 1601.
normalizeDate :: String -> Maybe String
-normalizeDate s = fmap (formatTime defaultTimeLocale "%F")
- (msum $ map (\fs -> parsetimeWith fs s) formats :: Maybe Day)
- where parsetimeWith =
+normalizeDate s = case toGregorian <$> day of
+ Just (y, _, _) | y >= 1601 && y <= 9999 ->
+ fmap (formatTime defaultTimeLocale "%F") day
+ _ -> Nothing
+ where day = (msum $ map (\fs -> parsetimeWith fs s) formats :: Maybe Day)
+ parsetimeWith =
#if MIN_VERSION_time(1,5,0)
parseTimeM True defaultTimeLocale
#else
parseTime defaultTimeLocale
#endif
- formats = ["%x","%m/%d/%Y", "%D","%F", "%d %b %Y",
+ formats = ["%x","%m/%d/%Y", "%D","%F", "%d %b %Y",
"%d %B %Y", "%b. %d, %Y", "%B %d, %Y",
"%Y%m%d", "%Y%m", "%Y"]