@@ -31,6 +31,7 @@ module Text.Pandoc.Options ( module Text.Pandoc.Extensions
3131 , isEnabled
3232 ) where
3333import Prelude
34+import Data.Char (toLower)
3435import Data.Data (Data)
3536import Data.Default
3637import qualified Data.Set as Set
@@ -39,8 +40,10 @@ import GHC.Generics (Generic)
3940import Skylighting (SyntaxMap, defaultSyntaxMap)
4041import Text.Pandoc.Extensions
4142import Text.Pandoc.Highlighting (Style, pygments)
43+import Text.Pandoc.Shared (camelCaseToHyphenated)
4244import Text.DocTemplates (Template)
43−import Data.Aeson.TH (deriveJSON, defaultOptions)
45+import Data.Aeson.TH (deriveJSON, defaultOptions, Options(..),
46+ SumEncoding(..))
4447
4548class HasSyntaxExtensions a where
4649 getExtensions :: a -> Extensions
@@ -223,11 +226,32 @@ isEnabled :: HasSyntaxExtensions a => Extension -> a -> Bool
223226isEnabled ext opts = ext `extensionEnabled` getExtensions opts
224227
225228$(deriveJSON defaultOptions ''ReaderOptions)
226−$(deriveJSON defaultOptions ''HTMLMathMethod)
227−$(deriveJSON defaultOptions ''CiteMethod)
228−$(deriveJSON defaultOptions ''ObfuscationMethod)
229+$(deriveJSON defaultOptions{
230+ constructorTagModifier = map toLower,
231+ sumEncoding = TaggedObject{
232+ tagFieldName = "method",
233+ contentsFieldName = "url" }
234+ } ''HTMLMathMethod)
235+$(deriveJSON defaultOptions{ constructorTagModifier =
236+ camelCaseToHyphenated
237+ } ''CiteMethod)
238+$(deriveJSON defaultOptions{ constructorTagModifier =
239+ \t -> case t of
240+ "NoObfuscation" -> "none"
241+ "ReferenceObfuscation" -> "references"
242+ "JavascriptObfuscation" -> "javascript"
243+ _ -> "none"
244+ } ''ObfuscationMethod)
229245$(deriveJSON defaultOptions ''HTMLSlideVariant)
230−$(deriveJSON defaultOptions ''TrackChanges)
231−$(deriveJSON defaultOptions ''WrapOption)
232−$(deriveJSON defaultOptions ''TopLevelDivision)
233−$(deriveJSON defaultOptions ''ReferenceLocation)
246+$(deriveJSON defaultOptions{ constructorTagModifier =
247+ camelCaseToHyphenated
248+ } ''TrackChanges)
249+$(deriveJSON defaultOptions{ constructorTagModifier =
250+ camelCaseToHyphenated
251+ } ''WrapOption)
252+$(deriveJSON defaultOptions{ constructorTagModifier =
253+ camelCaseToHyphenated . drop 8
254+ } ''TopLevelDivision)
255+$(deriveJSON defaultOptions{ constructorTagModifier =
256+ camelCaseToHyphenated
257+ } ''ReferenceLocation)