git.iko.soy/typeable/pandoc
on master help sign in
Writers.Shared.metaValueToJSON: use Number Values for integers.
6157f7eJohn MacFarlane
src/Text/Pandoc/Writers/Shared.hs+9−4
@@ -36,9 +36,10 @@ module Text.Pandoc.Writers.Shared (
36where
36where
37import Prelude
37import Prelude
38import Control.Monad (zipWithM)
38import Control.Monad (zipWithM)
39+import qualified Data.Aeson as Aeson
39import Data.Aeson (FromJSON (..), Result (..), ToJSON (..), Value (Object),
40import Data.Aeson (FromJSON (..), Result (..), ToJSON (..), Value (Object),
40 encode, fromJSON)
41 encode, fromJSON)
41−import Data.Char (chr, ord, isSpace)
42+import Data.Char (chr, ord, isSpace, isDigit)
42import qualified Data.HashMap.Strict as H
43import qualified Data.HashMap.Strict as H
43import Data.List (groupBy, intersperse, transpose)
44import Data.List (groupBy, intersperse, transpose)
44import qualified Data.Map as M
45import qualified Data.Map as M
@@ -49,7 +50,8 @@ import qualified Text.Pandoc.Builder as Builder
49import Text.Pandoc.Definition
50import Text.Pandoc.Definition
50import Text.Pandoc.Options
51import Text.Pandoc.Options
51import Text.Pandoc.Pretty
52import Text.Pandoc.Pretty
52−import Text.Pandoc.Shared (stringify, hierarchicalize, Element(..), deNote)
53+import Text.Pandoc.Shared (stringify, hierarchicalize, Element(..), deNote,
54+ safeRead)
53import Text.Pandoc.Walk (walk)
55import Text.Pandoc.Walk (walk)
54import Text.Pandoc.UTF8 (toStringLazy)
56import Text.Pandoc.UTF8 (toStringLazy)
55import Text.Pandoc.XML (escapeStringForXML)
57import Text.Pandoc.XML (escapeStringForXML)
@@ -105,8 +107,11 @@ metaValueToJSON blockWriter inlineWriter (MetaMap metamap) = toJSON <$>
105metaValueToJSON blockWriter inlineWriter (MetaList xs) = toJSON <$>
107metaValueToJSON blockWriter inlineWriter (MetaList xs) = toJSON <$>
106 Traversable.mapM (metaValueToJSON blockWriter inlineWriter) xs
108 Traversable.mapM (metaValueToJSON blockWriter inlineWriter) xs
107metaValueToJSON _ _ (MetaBool b) = return $ toJSON b
109metaValueToJSON _ _ (MetaBool b) = return $ toJSON b
108−metaValueToJSON _ inlineWriter (MetaString s) = toJSON <$>
110+metaValueToJSON _ inlineWriter (MetaString s) =
111+ if all isDigit s
112+ then return $
113+ maybe (Aeson.String . T.pack $ s) Aeson.Number $ safeRead s
109− inlineWriter (Builder.toList (Builder.text s))
114+ else toJSON <$> inlineWriter (Builder.toList (Builder.text s))
110metaValueToJSON blockWriter _ (MetaBlocks bs) = toJSON <$> blockWriter bs
115metaValueToJSON blockWriter _ (MetaBlocks bs) = toJSON <$> blockWriter bs
111metaValueToJSON _ inlineWriter (MetaInlines is) = toJSON <$> inlineWriter is
116metaValueToJSON _ inlineWriter (MetaInlines is) = toJSON <$> inlineWriter is
112
117