@@ -1,4 +1,5 @@
11{-# LANGUAGE NoImplicitPrelude #-}
2+{-# LANGUAGE ScopedTypeVariables #-}
23{-# LANGUAGE OverloadedStrings #-}
34{- |
45 Module : Text.Pandoc.Writers.Shared
@@ -39,9 +40,10 @@ import Control.Monad (zipWithM)
3940import qualified Data.Aeson as Aeson
4041import Data.Aeson (FromJSON (..), Result (..), ToJSON (..), Value (Object),
4142 encode, fromJSON)
42−import Data.Char (chr, ord, isSpace, isDigit)
43+import Data.Char (chr, ord, isSpace)
4344import qualified Data.HashMap.Strict as H
4445import Data.List (groupBy, intersperse, transpose, foldl')
46+import Data.Scientific (Scientific)
4547import qualified Data.Map as M
4648import Data.Maybe (isJust)
4749import qualified Data.Text as T
@@ -108,11 +110,12 @@ metaValueToJSON blockWriter inlineWriter (MetaList xs) = toJSON <$>
108110 Traversable.mapM (metaValueToJSON blockWriter inlineWriter) xs
109111metaValueToJSON _ _ (MetaBool b) = return $ toJSON b
110112metaValueToJSON _ 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))
113+ case safeRead s of
114+ Just (n :: Scientific) -> return $ Aeson.Number n
115+ Nothing -> toJSON <$> inlineWriter (Builder.toList (Builder.text s))
115116metaValueToJSON blockWriter _ (MetaBlocks bs) = toJSON <$> blockWriter bs
117+metaValueToJSON blockWriter inlineWriter (MetaInlines [Str s]) =
118+ metaValueToJSON blockWriter inlineWriter (MetaString s)
116119metaValueToJSON _ inlineWriter (MetaInlines is) = toJSON <$> inlineWriter is
117120
118121-- | Retrieve a field value from a JSON object.