@@ -33,7 +33,7 @@ import Control.Applicative ((<|>))
33import Foreign.Lua (FromLuaStack, Lua, LuaInteger, NumResults)
33import Foreign.Lua (FromLuaStack, Lua, LuaInteger, NumResults)
34import Text.Pandoc.Definition (Pandoc, Meta, Block, Inline)
34import Text.Pandoc.Definition (Pandoc, Meta, Block, Inline)
35import Text.Pandoc.Lua.StackInstances ()
35import Text.Pandoc.Lua.StackInstances ()
36−import Text.Pandoc.Lua.Util (addFunction)
36+import Text.Pandoc.Lua.Util (OrNil (OrNil), addFunction)
38import qualified Data.Digest.Pure.SHA as SHA
38import qualified Data.Digest.Pure.SHA as SHA
39import qualified Data.ByteString.Lazy as BSL
39import qualified Data.ByteString.Lazy as BSL
@@ -44,9 +44,10 @@ import qualified Text.Pandoc.Shared as Shared
44pushModule :: Lua NumResults
44pushModule :: Lua NumResults
45pushModule = do
45pushModule = do
46 Lua.newtable
46 Lua.newtable
47− addFunction "to_roman_numeral" toRomanNumeral
47+ addFunction "normalize_date" normalizeDate
48 addFunction "sha1" sha1
48 addFunction "sha1" sha1
49 addFunction "stringify" stringify
49 addFunction "stringify" stringify
50+ addFunction "to_roman_numeral" toRomanNumeral
52-- | Calculate the hash of the given contents.
53-- | Calculate the hash of the given contents.
@@ -85,3 +86,10 @@ instance FromLuaStack AstElement where
85-- | Convert a number < 4000 to uppercase roman numeral.
86-- | Convert a number < 4000 to uppercase roman numeral.
86toRomanNumeral :: LuaInteger -> Lua String
87toRomanNumeral :: LuaInteger -> Lua String
87toRomanNumeral = return . Shared.toRomanNumeral . fromIntegral
88toRomanNumeral = return . Shared.toRomanNumeral . fromIntegral
90+-- | Parse a date and convert (if possible) to "YYYY-MM-DD" format. We
91+-- limit years to the range 1601-9999 (ISO 8601 accepts greater than
92+-- or equal to 1583, but MS Word only accepts dates starting 1601).
93+-- Returns nil instead of a string if the conversion failed.
94+normalizeDate :: String -> Lua (OrNil String)
95+normalizeDate = return . OrNil . Shared.normalizeDate