aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <[email protected]>2022-10-13 23:35:42 -0700
committerJohn MacFarlane <[email protected]>2022-10-13 23:36:25 -0700
commit7312e36104f99f32ad44e36cbba948bd60a1848a (patch)
treec6878dfff05d7678bc4644c9305b1d72fdfa609d
parente26c8eca6981200625de138dfb396048fa188e1a (diff)
Extensions: simpler implementation based on Set.
This implementation would allow us (if we wanted) to add an extensible Ext_custom Text constructor.
-rw-r--r--src/Text/Pandoc/Extensions.hs16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/Text/Pandoc/Extensions.hs b/src/Text/Pandoc/Extensions.hs
index d8df71bd6..048d234f8 100644
--- a/src/Text/Pandoc/Extensions.hs
+++ b/src/Text/Pandoc/Extensions.hs
@@ -32,7 +32,6 @@ module Text.Pandoc.Extensions ( Extension(..)
, githubMarkdownExtensions
, multimarkdownExtensions )
where
-import Data.Bits (clearBit, setBit, testBit, (.|.))
import Data.Data (Data)
import qualified Data.Text as T
import Data.Typeable (Typeable)
@@ -40,6 +39,7 @@ import GHC.Generics (Generic)
import Text.Read (readMaybe)
import Data.Aeson.TH (deriveJSON)
import Data.Aeson
+import qualified Data.Set as Set
-- | Individually selectable syntax extensions.
data Extension =
@@ -139,13 +139,13 @@ data Extension =
$(deriveJSON defaultOptions{ constructorTagModifier = drop 4 } ''Extension)
-newtype Extensions = Extensions Integer
+newtype Extensions = Extensions (Set.Set Extension)
deriving (Show, Read, Eq, Ord, Data, Typeable, Generic)
instance Semigroup Extensions where
- (Extensions a) <> (Extensions b) = Extensions (a .|. b)
+ (Extensions a) <> (Extensions b) = Extensions (a <> b)
instance Monoid Extensions where
- mempty = Extensions 0
+ mempty = Extensions mempty
mappend = (<>)
instance FromJSON Extensions where
@@ -165,16 +165,16 @@ extensionsFromList :: [Extension] -> Extensions
extensionsFromList = foldr enableExtension emptyExtensions
emptyExtensions :: Extensions
-emptyExtensions = Extensions 0
+emptyExtensions = Extensions mempty
extensionEnabled :: Extension -> Extensions -> Bool
-extensionEnabled x (Extensions exts) = testBit exts (fromEnum x)
+extensionEnabled x (Extensions exts) = x `Set.member` exts
enableExtension :: Extension -> Extensions -> Extensions
-enableExtension x (Extensions exts) = Extensions (setBit exts (fromEnum x))
+enableExtension x (Extensions exts) = Extensions (Set.insert x exts)
disableExtension :: Extension -> Extensions -> Extensions
-disableExtension x (Extensions exts) = Extensions (clearBit exts (fromEnum x))
+disableExtension x (Extensions exts) = Extensions (Set.delete x exts)
-- | Extensions to be used with pandoc-flavored markdown.
pandocExtensions :: Extensions