aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Writers
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2019-03-28 17:01:32 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2019-03-28 17:01:32 -0700
commit2b0a0bba9c996d6eb3adde1a550383090d4d6569 (patch)
tree57b465d5977035deec8d4386aa1fb6b02ac0fe1f /src/Text/Pandoc/Writers
parent4c9a68e83f2d7b87d11ce32a9c5bb662b332dce4 (diff)
downloadpandoc-2b0a0bba9c996d6eb3adde1a550383090d4d6569.tar.gz
Shared - improve metaToJSON with numbers.
We now do a better job marshalling numbers from MetaString OR MetaInlines into JSON Number.
Diffstat (limited to 'src/Text/Pandoc/Writers')
-rw-r--r--src/Text/Pandoc/Writers/Shared.hs13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/Text/Pandoc/Writers/Shared.hs b/src/Text/Pandoc/Writers/Shared.hs
index f4370b7bf..948308b50 100644
--- a/src/Text/Pandoc/Writers/Shared.hs
+++ b/src/Text/Pandoc/Writers/Shared.hs
@@ -1,4 +1,5 @@
{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}
{- |
Module : Text.Pandoc.Writers.Shared
@@ -39,9 +40,10 @@ import Control.Monad (zipWithM)
import qualified Data.Aeson as Aeson
import Data.Aeson (FromJSON (..), Result (..), ToJSON (..), Value (Object),
encode, fromJSON)
-import Data.Char (chr, ord, isSpace, isDigit)
+import Data.Char (chr, ord, isSpace)
import qualified Data.HashMap.Strict as H
import Data.List (groupBy, intersperse, transpose, foldl')
+import Data.Scientific (Scientific)
import qualified Data.Map as M
import Data.Maybe (isJust)
import qualified Data.Text as T
@@ -108,11 +110,12 @@ metaValueToJSON blockWriter inlineWriter (MetaList xs) = toJSON <$>
Traversable.mapM (metaValueToJSON blockWriter inlineWriter) xs
metaValueToJSON _ _ (MetaBool b) = return $ toJSON b
metaValueToJSON _ inlineWriter (MetaString s) =
- if all isDigit s
- then return $
- maybe (Aeson.String . T.pack $ s) Aeson.Number $ safeRead s
- else toJSON <$> inlineWriter (Builder.toList (Builder.text s))
+ case safeRead s of
+ Just (n :: Scientific) -> return $ Aeson.Number n
+ Nothing -> toJSON <$> inlineWriter (Builder.toList (Builder.text s))
metaValueToJSON blockWriter _ (MetaBlocks bs) = toJSON <$> blockWriter bs
+metaValueToJSON blockWriter inlineWriter (MetaInlines [Str s]) =
+ metaValueToJSON blockWriter inlineWriter (MetaString s)
metaValueToJSON _ inlineWriter (MetaInlines is) = toJSON <$> inlineWriter is
-- | Retrieve a field value from a JSON object.