module Text.Regex.Do.Pcre.Option (
Comp(..),
Exec(..),
comp,
exec
) where
import Data.Bits
import qualified Text.Regex.PCRE.ByteString as B
data Comp = Blank
| Anchored
| Caseless
| Dotall
| Multiline
| Utf8
| Ungreedy
deriving Enum
data Exec = BlankE
| NotEmpty
| Partial
deriving Enum
compOpt::Comp -> B.CompOption
compOpt o = case o of
Blank -> B.compBlank
Anchored -> B.compAnchored
Caseless -> B.compCaseless
Dotall -> B.compDotAll
Multiline -> B.compMultiline
Utf8 -> B.compUTF8
Ungreedy -> B.compUngreedy
comp::[Comp] -> B.CompOption
comp [] = B.compBlank
comp l = foldl (.&.) o0 l1
where l1 = compOpt <$> l
o0 = compOpt $ head l
execOpt::Exec -> B.ExecOption
execOpt o = case o of
BlankE -> B.execBlank
NotEmpty -> B.execNotEmpty
Partial -> B.execPartial
exec::[Exec] -> B.ExecOption
exec [] = B.execBlank
exec l = foldl (.&.) o0 l1
where l1 = execOpt <$> l
o0 = execOpt $ head l