{-# OPTIONS -cpp -fth -fglasgow-exts #-}

-- arch-tag: fbf47393-bde4-4ee8-8bf2-80a17bf0b41b

module RRegex.TH(mkRe) where

import RRegex.PCRE
import Array
import Control.Exception
import Language.Haskell.THSyntax
import System.IO.Unsafe

-- | template haskell function to turn a string into a Regex
mkRe :: String -> ExpQ

#ifndef __HADDOCK__

mkRe s = e where
    e = do
        v <- qIO $ compile s 0
        case v of
            Left (i,err) -> fail $ "\nPCRE Regular Expression Error:\n" ++ s ++ "\n" ++ replicate i ' ' ++ "^ " ++ err ++ "\n"
            Right _ -> return ()
        [| unsafePerformIO (compile s 0) |]

#endif
{-
mkRe :: String -> ExpQ
mkRe s = e where
    e = do
        v <- qIO $ (Control.Exception.catch (regcomp rx f >> return Nothing) (\e -> return $ Just e )) 
        maybe (return ()) (fail . show) v
        [| unsafePerformIO (Text.Regex.Posix.regcomp rx f) |]
    (f,rx) | Just (_::String,_::String,rest,a) <- s =~~ "^([si]?)([si]?)/" = let 
               f x y  = if x `elem` elems (a :: Array Int String) then y else 0 in
                (regExtended + f "i" regIgnoreCase + f "s" regNewline, rest)
           | otherwise  = (regExtended,s)
-}