{-# LANGUAGE OverloadedStrings #-}
module Regex.KDE
(Regex(..), compileRegex, matchRegex, testRegex, isWordChar)
where
import Regex.KDE.Regex
import Regex.KDE.Compile
import Regex.KDE.Match
import qualified Data.ByteString.UTF8 as U
import qualified Data.IntMap.Strict as M
import qualified Data.ByteString as B
import Data.List (sortOn)
testRegex :: Bool -> String -> String -> Maybe (String, [(Int, String)])
testRegex caseSensitive re s =
let bs = U.fromString s
toSlice (off,len) = U.toString $ B.take len $ B.drop off bs
in case compileRegex caseSensitive (U.fromString re) of
Right r ->
case matchRegex r bs of
Nothing -> Nothing
Just (m,cs) -> Just (U.toString m, sortOn fst
(M.toList (M.map toSlice cs)))
Left e -> error e