\begin{code}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE DeriveDataTypeable #-}
\end{code}
\begin{code}
module Text.RE.ZeInternals.Types.Capture
( Capture(..)
, hasCaptured
, capturePrefix
, captureSuffix
) where
\end{code}
\begin{code}
import Text.Regex.Base
\end{code}
\begin{code}
data Capture a =
Capture
{ Capture a -> a
captureSource :: !a
, Capture a -> a
capturedText :: !a
, Capture a -> Int
captureOffset :: !Int
, Capture a -> Int
captureLength :: !Int
}
deriving (Int -> Capture a -> ShowS
[Capture a] -> ShowS
Capture a -> String
(Int -> Capture a -> ShowS)
-> (Capture a -> String)
-> ([Capture a] -> ShowS)
-> Show (Capture a)
forall a. Show a => Int -> Capture a -> ShowS
forall a. Show a => [Capture a] -> ShowS
forall a. Show a => Capture a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Capture a] -> ShowS
$cshowList :: forall a. Show a => [Capture a] -> ShowS
show :: Capture a -> String
$cshow :: forall a. Show a => Capture a -> String
showsPrec :: Int -> Capture a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Capture a -> ShowS
Show,Capture a -> Capture a -> Bool
(Capture a -> Capture a -> Bool)
-> (Capture a -> Capture a -> Bool) -> Eq (Capture a)
forall a. Eq a => Capture a -> Capture a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Capture a -> Capture a -> Bool
$c/= :: forall a. Eq a => Capture a -> Capture a -> Bool
== :: Capture a -> Capture a -> Bool
$c== :: forall a. Eq a => Capture a -> Capture a -> Bool
Eq)
\end{code}
\begin{code}
instance Functor Capture where
fmap :: (a -> b) -> Capture a -> Capture b
fmap a -> b
f c :: Capture a
c@Capture{a
Int
captureLength :: Int
captureOffset :: Int
capturedText :: a
captureSource :: a
captureLength :: forall a. Capture a -> Int
captureOffset :: forall a. Capture a -> Int
capturedText :: forall a. Capture a -> a
captureSource :: forall a. Capture a -> a
..} =
Capture a
c
{ captureSource :: b
captureSource = a -> b
f a
captureSource
, capturedText :: b
capturedText = a -> b
f a
capturedText
}
\end{code}
\begin{code}
hasCaptured :: Capture a -> Bool
hasCaptured :: Capture a -> Bool
hasCaptured = (Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=Int
0) (Int -> Bool) -> (Capture a -> Int) -> Capture a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Capture a -> Int
forall a. Capture a -> Int
captureOffset
capturePrefix :: Extract a => Capture a -> a
capturePrefix :: Capture a -> a
capturePrefix Capture{a
Int
captureLength :: Int
captureOffset :: Int
capturedText :: a
captureSource :: a
captureLength :: forall a. Capture a -> Int
captureOffset :: forall a. Capture a -> Int
capturedText :: forall a. Capture a -> a
captureSource :: forall a. Capture a -> a
..} = Int -> a -> a
forall source. Extract source => Int -> source -> source
before Int
captureOffset a
captureSource
captureSuffix :: Extract a => Capture a -> a
captureSuffix :: Capture a -> a
captureSuffix Capture{a
Int
captureLength :: Int
captureOffset :: Int
capturedText :: a
captureSource :: a
captureLength :: forall a. Capture a -> Int
captureOffset :: forall a. Capture a -> Int
capturedText :: forall a. Capture a -> a
captureSource :: forall a. Capture a -> a
..} = Int -> a -> a
forall source. Extract source => Int -> source -> source
after (Int
captureOffsetInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
captureLength) a
captureSource
\end{code}