module Regex
( Pattern'
, patternCodec
, filterPattern
, parseRegex'
) where
import Data.Text (Text)
import Text.Regex.TDFA (defaultExecOpt, defaultCompOpt, RegexLike(..))
import Text.Regex.TDFA.Pattern
import Text.Regex.TDFA.ReadRegex (parseRegex)
import Text.Regex.TDFA.TDFA ( patternToRegex )
import Text.Regex.TDFA.Text
import qualified Data.Text as T
import qualified Toml
type Pattern' = (Pattern, (GroupIndex, DoPa))
parseRegex' :: Text -> Either Text Pattern'
parseRegex' inp = case parseRegex (T.unpack inp) of
Left e -> Left $ T.pack $ show e
Right pattern -> Right pattern
_Pattern :: Toml.TomlBiMap Pattern' Toml.AnyValue
_Pattern = Toml._TextBy (T.pack . showPattern . fst) parseRegex'
patternCodec :: Toml.Key -> Toml.TomlCodec Pattern'
patternCodec key = Toml.match _Pattern key
filterPattern :: Pattern' -> [Text] -> [Text]
filterPattern pattern strings = filter matchPattern strings
where
regex :: Regex
regex = patternToRegex pattern defaultCompOpt defaultExecOpt
matchPattern :: Text -> Bool
matchPattern x = matchTest regex x