module Text.Regex.Do.Match.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 (Comp -> Comp -> Bool
(Comp -> Comp -> Bool) -> (Comp -> Comp -> Bool) -> Eq Comp
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Comp -> Comp -> Bool
$c/= :: Comp -> Comp -> Bool
== :: Comp -> Comp -> Bool
$c== :: Comp -> Comp -> Bool
Eq,Eq Comp
Eq Comp =>
(Comp -> Comp -> Ordering)
-> (Comp -> Comp -> Bool)
-> (Comp -> Comp -> Bool)
-> (Comp -> Comp -> Bool)
-> (Comp -> Comp -> Bool)
-> (Comp -> Comp -> Comp)
-> (Comp -> Comp -> Comp)
-> Ord Comp
Comp -> Comp -> Bool
Comp -> Comp -> Ordering
Comp -> Comp -> Comp
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Comp -> Comp -> Comp
$cmin :: Comp -> Comp -> Comp
max :: Comp -> Comp -> Comp
$cmax :: Comp -> Comp -> Comp
>= :: Comp -> Comp -> Bool
$c>= :: Comp -> Comp -> Bool
> :: Comp -> Comp -> Bool
$c> :: Comp -> Comp -> Bool
<= :: Comp -> Comp -> Bool
$c<= :: Comp -> Comp -> Bool
< :: Comp -> Comp -> Bool
$c< :: Comp -> Comp -> Bool
compare :: Comp -> Comp -> Ordering
$ccompare :: Comp -> Comp -> Ordering
$cp1Ord :: Eq Comp
Ord,Int -> Comp
Comp -> Int
Comp -> [Comp]
Comp -> Comp
Comp -> Comp -> [Comp]
Comp -> Comp -> Comp -> [Comp]
(Comp -> Comp)
-> (Comp -> Comp)
-> (Int -> Comp)
-> (Comp -> Int)
-> (Comp -> [Comp])
-> (Comp -> Comp -> [Comp])
-> (Comp -> Comp -> [Comp])
-> (Comp -> Comp -> Comp -> [Comp])
-> Enum Comp
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: Comp -> Comp -> Comp -> [Comp]
$cenumFromThenTo :: Comp -> Comp -> Comp -> [Comp]
enumFromTo :: Comp -> Comp -> [Comp]
$cenumFromTo :: Comp -> Comp -> [Comp]
enumFromThen :: Comp -> Comp -> [Comp]
$cenumFromThen :: Comp -> Comp -> [Comp]
enumFrom :: Comp -> [Comp]
$cenumFrom :: Comp -> [Comp]
fromEnum :: Comp -> Int
$cfromEnum :: Comp -> Int
toEnum :: Int -> Comp
$ctoEnum :: Int -> Comp
pred :: Comp -> Comp
$cpred :: Comp -> Comp
succ :: Comp -> Comp
$csucc :: Comp -> Comp
Enum)
data Exec = BlankE
| NotEmpty
| Partial
deriving (Exec -> Exec -> Bool
(Exec -> Exec -> Bool) -> (Exec -> Exec -> Bool) -> Eq Exec
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Exec -> Exec -> Bool
$c/= :: Exec -> Exec -> Bool
== :: Exec -> Exec -> Bool
$c== :: Exec -> Exec -> Bool
Eq,Eq Exec
Eq Exec =>
(Exec -> Exec -> Ordering)
-> (Exec -> Exec -> Bool)
-> (Exec -> Exec -> Bool)
-> (Exec -> Exec -> Bool)
-> (Exec -> Exec -> Bool)
-> (Exec -> Exec -> Exec)
-> (Exec -> Exec -> Exec)
-> Ord Exec
Exec -> Exec -> Bool
Exec -> Exec -> Ordering
Exec -> Exec -> Exec
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Exec -> Exec -> Exec
$cmin :: Exec -> Exec -> Exec
max :: Exec -> Exec -> Exec
$cmax :: Exec -> Exec -> Exec
>= :: Exec -> Exec -> Bool
$c>= :: Exec -> Exec -> Bool
> :: Exec -> Exec -> Bool
$c> :: Exec -> Exec -> Bool
<= :: Exec -> Exec -> Bool
$c<= :: Exec -> Exec -> Bool
< :: Exec -> Exec -> Bool
$c< :: Exec -> Exec -> Bool
compare :: Exec -> Exec -> Ordering
$ccompare :: Exec -> Exec -> Ordering
$cp1Ord :: Eq Exec
Ord,Int -> Exec
Exec -> Int
Exec -> [Exec]
Exec -> Exec
Exec -> Exec -> [Exec]
Exec -> Exec -> Exec -> [Exec]
(Exec -> Exec)
-> (Exec -> Exec)
-> (Int -> Exec)
-> (Exec -> Int)
-> (Exec -> [Exec])
-> (Exec -> Exec -> [Exec])
-> (Exec -> Exec -> [Exec])
-> (Exec -> Exec -> Exec -> [Exec])
-> Enum Exec
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: Exec -> Exec -> Exec -> [Exec]
$cenumFromThenTo :: Exec -> Exec -> Exec -> [Exec]
enumFromTo :: Exec -> Exec -> [Exec]
$cenumFromTo :: Exec -> Exec -> [Exec]
enumFromThen :: Exec -> Exec -> [Exec]
$cenumFromThen :: Exec -> Exec -> [Exec]
enumFrom :: Exec -> [Exec]
$cenumFrom :: Exec -> [Exec]
fromEnum :: Exec -> Int
$cfromEnum :: Exec -> Int
toEnum :: Int -> Exec
$ctoEnum :: Int -> Exec
pred :: Exec -> Exec
$cpred :: Exec -> Exec
succ :: Exec -> Exec
$csucc :: Exec -> Exec
Enum)
compOpt::Comp -> B.CompOption
compOpt :: Comp -> CompOption
compOpt o :: Comp
o = case Comp
o of
Blank -> CompOption
B.compBlank
Anchored -> CompOption
B.compAnchored
Caseless -> CompOption
B.compCaseless
Dotall -> CompOption
B.compDotAll
Multiline -> CompOption
B.compMultiline
Utf8 -> CompOption
B.compUTF8
Ungreedy -> CompOption
B.compUngreedy
comp::[Comp] -> B.CompOption
comp :: [Comp] -> CompOption
comp [] = CompOption
B.compBlank
comp l :: [Comp]
l = (CompOption -> CompOption -> CompOption)
-> CompOption -> [CompOption] -> CompOption
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl CompOption -> CompOption -> CompOption
forall a. Bits a => a -> a -> a
(.&.) CompOption
o0 [CompOption]
l1
where l1 :: [CompOption]
l1 = Comp -> CompOption
compOpt (Comp -> CompOption) -> [Comp] -> [CompOption]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Comp]
l
o0 :: CompOption
o0 = Comp -> CompOption
compOpt (Comp -> CompOption) -> Comp -> CompOption
forall a b. (a -> b) -> a -> b
$ [Comp] -> Comp
forall a. [a] -> a
head [Comp]
l
execOpt::Exec -> B.ExecOption
execOpt :: Exec -> ExecOption
execOpt o :: Exec
o = case Exec
o of
BlankE -> ExecOption
B.execBlank
NotEmpty -> ExecOption
B.execNotEmpty
Partial -> ExecOption
B.execPartial
exec::[Exec] -> B.ExecOption
exec :: [Exec] -> ExecOption
exec [] = ExecOption
B.execBlank
exec l :: [Exec]
l = (ExecOption -> ExecOption -> ExecOption)
-> ExecOption -> [ExecOption] -> ExecOption
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl ExecOption -> ExecOption -> ExecOption
forall a. Bits a => a -> a -> a
(.&.) ExecOption
o0 [ExecOption]
l1
where l1 :: [ExecOption]
l1 = Exec -> ExecOption
execOpt (Exec -> ExecOption) -> [Exec] -> [ExecOption]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Exec]
l
o0 :: ExecOption
o0 = Exec -> ExecOption
execOpt (Exec -> ExecOption) -> Exec -> ExecOption
forall a b. (a -> b) -> a -> b
$ [Exec] -> Exec
forall a. [a] -> a
head [Exec]
l