Extensions: simpler implementation based on Set.

This implementation would allow us (if we wanted) to add
an extensible Ext_custom Text constructor.
This commit is contained in:
John MacFarlane
2022-10-13 23:36:25 -07:00
parent e26c8eca69
commit 7312e36104
+8 -8
View File
@@ -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