@@ -1,5 +1,6 @@
11{-# LANGUAGE DeriveDataTypeable #-}
22{-# LANGUAGE DeriveGeneric #-}
3+{-# LANGUAGE TemplateHaskell #-}
34{-
45Copyright (C) 2012-2017 John MacFarlane <jgm@berkeley.edu>
56
@@ -45,8 +46,8 @@ module Text.Pandoc.Options ( module Text.Pandoc.Extensions
4546 , def
4647 , isEnabled
4748 ) where
48−import Data.Aeson (FromJSON (..), ToJSON (..), defaultOptions,
49− genericToEncoding)
49+import Data.Aeson (defaultOptions)
50+import Data.Aeson.TH (deriveJSON)
5051import Data.Data (Data)
5152import Data.Default
5253import qualified Data.Set as Set
@@ -75,10 +76,6 @@ data ReaderOptions = ReaderOptions{
7576instance HasSyntaxExtensions ReaderOptions where
7677 getExtensions opts = readerExtensions opts
7778
78−instance ToJSON ReaderOptions where
79− toEncoding = genericToEncoding defaultOptions
80−instance FromJSON ReaderOptions
81−
8279instance Default ReaderOptions
8380 where def = ReaderOptions{
8481 readerExtensions = emptyExtensions
@@ -116,29 +113,17 @@ data HTMLMathMethod = PlainMath
116113 | KaTeX String -- url of KaTeX files
117114 deriving (Show, Read, Eq, Data, Typeable, Generic)
118115
119−instance ToJSON HTMLMathMethod where
120− toEncoding = genericToEncoding defaultOptions
121−instance FromJSON HTMLMathMethod
122−
123116data CiteMethod = Citeproc -- use citeproc to render them
124117 | Natbib -- output natbib cite commands
125118 | Biblatex -- output biblatex cite commands
126119 deriving (Show, Read, Eq, Data, Typeable, Generic)
127120
128−instance ToJSON CiteMethod where
129− toEncoding = genericToEncoding defaultOptions
130−instance FromJSON CiteMethod
131−
132121-- | Methods for obfuscating email addresses in HTML.
133122data ObfuscationMethod = NoObfuscation
134123 | ReferenceObfuscation
135124 | JavascriptObfuscation
136125 deriving (Show, Read, Eq, Data, Typeable, Generic)
137126
138−instance ToJSON ObfuscationMethod where
139− toEncoding = genericToEncoding defaultOptions
140−instance FromJSON ObfuscationMethod
141−
142127-- | Varieties of HTML slide shows.
143128data HTMLSlideVariant = S5Slides
144129 | SlidySlides
@@ -148,30 +133,18 @@ data HTMLSlideVariant = S5Slides
148133 | NoSlides
149134 deriving (Show, Read, Eq, Data, Typeable, Generic)
150135
151−instance ToJSON HTMLSlideVariant where
152− toEncoding = genericToEncoding defaultOptions
153−instance FromJSON HTMLSlideVariant
154−
155136-- | Options for accepting or rejecting MS Word track-changes.
156137data TrackChanges = AcceptChanges
157138 | RejectChanges
158139 | AllChanges
159140 deriving (Show, Read, Eq, Data, Typeable, Generic)
160141
161−instance ToJSON TrackChanges where
162− toEncoding = genericToEncoding defaultOptions
163−instance FromJSON TrackChanges
164−
165142-- | Options for wrapping text in the output.
166143data WrapOption = WrapAuto -- ^ Automatically wrap to width
167144 | WrapNone -- ^ No non-semantic newlines
168145 | WrapPreserve -- ^ Preserve wrapping of input source
169146 deriving (Show, Read, Eq, Data, Typeable, Generic)
170147
171−instance ToJSON WrapOption where
172− toEncoding = genericToEncoding defaultOptions
173−instance FromJSON WrapOption
174−
175148-- | Options defining the type of top-level headers.
176149data TopLevelDivision = TopLevelPart -- ^ Top-level headers become parts
177150 | TopLevelChapter -- ^ Top-level headers become chapters
@@ -180,20 +153,12 @@ data TopLevelDivision = TopLevelPart -- ^ Top-level headers become parts
180153 -- heuristics
181154 deriving (Show, Read, Eq, Data, Typeable, Generic)
182155
183−instance ToJSON TopLevelDivision where
184− toEncoding = genericToEncoding defaultOptions
185−instance FromJSON TopLevelDivision
186−
187156-- | Locations for footnotes and references in markdown output
188157data ReferenceLocation = EndOfBlock -- ^ End of block
189158 | EndOfSection -- ^ prior to next section header (or end of document)
190159 | EndOfDocument -- ^ at end of document
191160 deriving (Show, Read, Eq, Data, Typeable, Generic)
192161
193−instance ToJSON ReferenceLocation where
194− toEncoding = genericToEncoding defaultOptions
195−instance FromJSON ReferenceLocation
196−
197162-- | Options for writers
198163data WriterOptions = WriterOptions
199164 { writerTemplate :: Maybe String -- ^ Template to use
@@ -271,3 +236,13 @@ instance HasSyntaxExtensions WriterOptions where
271236-- | Returns True if the given extension is enabled.
272237isEnabled :: HasSyntaxExtensions a => Extension -> a -> Bool
273238isEnabled ext opts = ext `extensionEnabled` getExtensions opts
239+
240+$(deriveJSON defaultOptions ''ReaderOptions)
241+$(deriveJSON defaultOptions ''HTMLMathMethod)
242+$(deriveJSON defaultOptions ''CiteMethod)
243+$(deriveJSON defaultOptions ''ObfuscationMethod)
244+$(deriveJSON defaultOptions ''HTMLSlideVariant)
245+$(deriveJSON defaultOptions ''TrackChanges)
246+$(deriveJSON defaultOptions ''WrapOption)
247+$(deriveJSON defaultOptions ''TopLevelDivision)
248+$(deriveJSON defaultOptions ''ReferenceLocation)