diff options
author | John MacFarlane <jgm@berkeley.edu> | 2019-03-28 17:01:32 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2019-03-28 17:01:32 -0700 |
commit | 2b0a0bba9c996d6eb3adde1a550383090d4d6569 (patch) | |
tree | 57b465d5977035deec8d4386aa1fb6b02ac0fe1f /src/Text/Pandoc | |
parent | 4c9a68e83f2d7b87d11ce32a9c5bb662b332dce4 (diff) | |
download | pandoc-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')
-rw-r--r-- | src/Text/Pandoc/Writers/Shared.hs | 13 |
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. |