diff options
| author | John MacFarlane <[email protected]> | 2022-10-13 23:35:42 -0700 |
|---|---|---|
| committer | John MacFarlane <[email protected]> | 2022-10-13 23:36:25 -0700 |
| commit | 7312e36104f99f32ad44e36cbba948bd60a1848a (patch) | |
| tree | c6878dfff05d7678bc4644c9305b1d72fdfa609d | |
| parent | e26c8eca6981200625de138dfb396048fa188e1a (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.hs | 16 |
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 |
