@@ -36,9 +36,10 @@ module Text.Pandoc.Writers.Shared (
3636where
3737import Prelude
3838import Control.Monad (zipWithM)
39+import qualified Data.Aeson as Aeson
3940import Data.Aeson (FromJSON (..), Result (..), ToJSON (..), Value (Object),
4041 encode, fromJSON)
41−import Data.Char (chr, ord, isSpace)
42+import Data.Char (chr, ord, isSpace, isDigit)
4243import qualified Data.HashMap.Strict as H
4344import Data.List (groupBy, intersperse, transpose)
4445import qualified Data.Map as M
@@ -49,7 +50,8 @@ import qualified Text.Pandoc.Builder as Builder
4950import Text.Pandoc.Definition
5051import Text.Pandoc.Options
5152import Text.Pandoc.Pretty
52−import Text.Pandoc.Shared (stringify, hierarchicalize, Element(..), deNote)
53+import Text.Pandoc.Shared (stringify, hierarchicalize, Element(..), deNote,
54+ safeRead)
5355import Text.Pandoc.Walk (walk)
5456import Text.Pandoc.UTF8 (toStringLazy)
5557import Text.Pandoc.XML (escapeStringForXML)
@@ -105,8 +107,11 @@ metaValueToJSON blockWriter inlineWriter (MetaMap metamap) = toJSON <$>
105107metaValueToJSON blockWriter inlineWriter (MetaList xs) = toJSON <$>
106108 Traversable.mapM (metaValueToJSON blockWriter inlineWriter) xs
107109metaValueToJSON _ _ (MetaBool b) = return $ toJSON b
108−metaValueToJSON _ inlineWriter (MetaString s) = toJSON <$>
109− inlineWriter (Builder.toList (Builder.text s))
110+metaValueToJSON _ inlineWriter (MetaString s) =
111+ if all isDigit s
112+ then return $
113+ maybe (Aeson.String . T.pack $ s) Aeson.Number $ safeRead s
114+ else toJSON <$> inlineWriter (Builder.toList (Builder.text s))
110115metaValueToJSON blockWriter _ (MetaBlocks bs) = toJSON <$> blockWriter bs
111116metaValueToJSON _ inlineWriter (MetaInlines is) = toJSON <$> inlineWriter is
112117