{-# 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