git.iko.soy/typeable/pandoc
on master help sign in
Change Generic JSON instances to TemplateHaskell (#4085)
commitcf87ffe9ee87b5e908725616998724fca0d6a8fd authorJasper Van der Jeugt <jaspervdj@gmail.com> dateTue 21 Nov 2017, 21:27 (9 years ago) parentd070424
2 files changed+22−51
src/Text/Pandoc/Extensions.hs+9−13 src/Text/Pandoc/Options.hs+13−38
src/Text/Pandoc/Extensions.hs+9−13
@@ -15,8 +15,10 @@ You should have received a copy of the GNU General Public License
1515along with this program; if not, write to the Free Software
1616Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
1717-}
18−{-# LANGUAGE DeriveDataTypeable #-}
19−{-# LANGUAGE DeriveGeneric #-}
18+{-# LANGUAGE DeriveDataTypeable #-}
19+{-# LANGUAGE DeriveGeneric #-}
20+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
21+{-# LANGUAGE TemplateHaskell #-}
2022
2123{- |
2224 Module : Text.Pandoc.Extensions
@@ -45,8 +47,8 @@ module Text.Pandoc.Extensions ( Extension(..)
4547 , githubMarkdownExtensions
4648 , multimarkdownExtensions )
4749where
48−import Data.Aeson (FromJSON (..), ToJSON (..), defaultOptions,
49− genericToEncoding)
50+import Data.Aeson (FromJSON (..), ToJSON (..), defaultOptions)
51+import Data.Aeson.TH (deriveJSON)
5052import Data.Bits (clearBit, setBit, testBit, (.|.))
5153import Data.Data (Data)
5254import Data.Typeable (Typeable)
@@ -55,11 +57,7 @@ import Text.Pandoc.Shared (safeRead)
5557import Text.Parsec
5658
5759newtype Extensions = Extensions Integer
58− deriving (Show, Read, Eq, Ord, Data, Typeable, Generic)
59−
60−instance ToJSON Extensions where
61− toEncoding = genericToEncoding defaultOptions
62−instance FromJSON Extensions
60+ deriving (Show, Read, Eq, Ord, Data, Typeable, Generic, ToJSON, FromJSON)
6361
6462instance Monoid Extensions where
6563 mempty = Extensions 0
@@ -156,10 +154,6 @@ data Extension =
156154 | Ext_amuse -- ^ Enable Text::Amuse extensions to Emacs Muse markup
157155 deriving (Show, Read, Enum, Eq, Ord, Bounded, Data, Typeable, Generic)
158156
159−instance ToJSON Extension where
160− toEncoding = genericToEncoding defaultOptions
161−instance FromJSON Extension
162−
163157-- | Extensions to be used with pandoc-flavored markdown.
164158pandocExtensions :: Extensions
165159pandocExtensions = extensionsFromList
@@ -373,3 +367,5 @@ parseFormatSpec = parse formatSpec ""
373367 return $ case polarity of
374368 '-' -> disableExtension ext
375369 _ -> enableExtension ext
370+
371+$(deriveJSON defaultOptions ''Extension)
src/Text/Pandoc/Options.hs+13−38
@@ -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)