-
Notifications
You must be signed in to change notification settings - Fork 19
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #93 from iconnect/prepare-0.10.0.2
Tweak Templates, fix release scripts add Escape IsRegex methods
- Loading branch information
Showing
69 changed files
with
1,704 additions
and
562 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,10 +4,10 @@ | |
.ghci | ||
.hub | ||
.ghci | ||
stack.yaml | ||
/stack.yaml | ||
README.markdown | ||
tmp | ||
|
||
/releases/test-regex-examples | ||
|
||
# Haskell | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
{-# LANGUAGE NoImplicitPrelude #-} | ||
{-# LANGUAGE RecordWildCards #-} | ||
{-# LANGUAGE CPP #-} | ||
#if __GLASGOW_HASKELL__ >= 800 | ||
{-# OPTIONS_GHC -fno-warn-redundant-constraints #-} | ||
{-# LANGUAGE TemplateHaskellQuotes #-} | ||
#else | ||
{-# LANGUAGE QuasiQuotes #-} | ||
{-# LANGUAGE TemplateHaskell #-} | ||
#endif | ||
{-# OPTIONS_GHC -fno-warn-orphans #-} | ||
|
||
module Text.RE.Internal.SearchReplace | ||
( unsafeCompileSearchReplace_ | ||
, compileSearchReplace_ | ||
, compileSearchAndReplace_ | ||
) where | ||
|
||
import qualified Data.HashMap.Strict as HMS | ||
import Prelude.Compat | ||
import Text.RE.Internal.NamedCaptures | ||
import Text.RE.Types.Capture | ||
import Text.RE.Types.CaptureID | ||
import Text.RE.Types.Matches | ||
import Text.RE.Types.Replace | ||
import Text.RE.Types.SearchReplace | ||
import qualified Text.Regex.TDFA as TDFA | ||
|
||
|
||
-- | warapper on 'compileSearchReplace_' that will generate an error | ||
-- if any compilation errors are found | ||
unsafeCompileSearchReplace_ :: (String->s) | ||
-> (String->Either String re) | ||
-> String | ||
-> SearchReplace re s | ||
unsafeCompileSearchReplace_ pk cf = either err id . compileSearchReplace_ pk cf | ||
where | ||
err msg = error $ "unsafeCompileSearchReplace_: " ++ msg | ||
|
||
-- | compile a SearchReplace template generating errors if the RE or | ||
-- the template are not well formed -- all capture references being checked | ||
compileSearchReplace_ :: (Monad m,Functor m) | ||
=> (String->s) | ||
-> (String->Either String re) | ||
-> String | ||
-> m (SearchReplace re s) | ||
compileSearchReplace_ pack compile_re sr_tpl = either fail return $ do | ||
case mainCaptures $ sr_tpl $=~ "///" of | ||
[cap] -> | ||
compileSearchAndReplace_ pack compile_re | ||
(capturePrefix cap) (captureSuffix cap) | ||
_ -> Left $ "bad search-replace template syntax: " ++ sr_tpl | ||
|
||
-- | compile 'SearcgReplace' from two strings containing the RE | ||
-- and the replacement template | ||
compileSearchAndReplace_ :: (Monad m,Functor m) | ||
=> (String->s) | ||
-> (String->Either String re) | ||
-> String | ||
-> String | ||
-> m (SearchReplace re s) | ||
compileSearchAndReplace_ pack compile_re re_s tpl = either fail return $ do | ||
re <- compile_re re_s | ||
((n,cnms),_) <- extractNamedCaptures re_s | ||
mapM_ (check n cnms) $ templateCaptures id tpl | ||
return $ SearchReplace re $ pack tpl | ||
where | ||
check :: Int -> CaptureNames -> CaptureID -> Either String () | ||
check n cnms cid = case cid of | ||
IsCaptureOrdinal co -> check_co n co | ||
IsCaptureName cn -> check_cn cnms cn | ||
|
||
check_co n (CaptureOrdinal i) = case i <= n of | ||
True -> return () | ||
False -> Left $ "capture ordinal out of range: " ++ | ||
show i ++ " >= " ++ show n | ||
|
||
check_cn cnms cnm = case cnm `HMS.member` cnms of | ||
True -> return () | ||
False -> Left $ "capture name not defined: " ++ | ||
show (getCaptureName cnm) | ||
|
||
($=~) :: String -> String -> Matches String | ||
($=~) = (TDFA.=~) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
{-# LANGUAGE NoImplicitPrelude #-} | ||
{-# LANGUAGE CPP #-} | ||
#if __GLASGOW_HASKELL__ >= 800 | ||
{-# LANGUAGE TemplateHaskellQuotes #-} | ||
#else | ||
{-# LANGUAGE QuasiQuotes #-} | ||
{-# LANGUAGE TemplateHaskell #-} | ||
#endif | ||
|
||
module Text.RE.Internal.SearchReplace.PCRE | ||
( ed | ||
, edMS | ||
, edMI | ||
, edBS | ||
, edBI | ||
, edMultilineSensitive | ||
, edMultilineInsensitive | ||
, edBlockSensitive | ||
, edBlockInsensitive | ||
, ed_ | ||
) where | ||
|
||
import Language.Haskell.TH | ||
import Language.Haskell.TH.Quote | ||
import Prelude.Compat | ||
import Text.RE.Internal.SearchReplace.PCREEdPrime | ||
import Text.RE.Types.REOptions | ||
|
||
|
||
-- | the @[ed| ... /// ... |]@ quasi quoters | ||
ed | ||
, edMS | ||
, edMI | ||
, edBS | ||
, edBI | ||
, edMultilineSensitive | ||
, edMultilineInsensitive | ||
, edBlockSensitive | ||
, edBlockInsensitive | ||
, ed_ :: QuasiQuoter | ||
|
||
ed = ed' cast $ Just minBound | ||
edMS = edMultilineSensitive | ||
edMI = edMultilineInsensitive | ||
edBS = edBlockSensitive | ||
edBI = edBlockInsensitive | ||
edMultilineSensitive = ed' cast $ Just MultilineSensitive | ||
edMultilineInsensitive = ed' cast $ Just MultilineInsensitive | ||
edBlockSensitive = ed' cast $ Just BlockSensitive | ||
edBlockInsensitive = ed' cast $ Just BlockInsensitive | ||
ed_ = ed' cast Nothing | ||
|
||
cast :: Q Exp | ||
cast = [|id|] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
{-# LANGUAGE CPP #-} | ||
#if __GLASGOW_HASKELL__ >= 800 | ||
{-# LANGUAGE TemplateHaskellQuotes #-} | ||
#else | ||
{-# LANGUAGE QuasiQuotes #-} | ||
{-# LANGUAGE TemplateHaskell #-} | ||
#endif | ||
|
||
module Text.RE.Internal.SearchReplace.PCRE.ByteString | ||
( ed | ||
, edMS | ||
, edMI | ||
, edBS | ||
, edBI | ||
, edMultilineSensitive | ||
, edMultilineInsensitive | ||
, edBlockSensitive | ||
, edBlockInsensitive | ||
, ed_ | ||
) where | ||
|
||
import qualified Data.ByteString.Char8 as B | ||
import Language.Haskell.TH | ||
import Language.Haskell.TH.Quote | ||
import Text.RE.PCRE.RE | ||
import Text.RE.Internal.SearchReplace.PCREEdPrime | ||
import Text.RE.SearchReplace | ||
import Text.RE.Types.REOptions | ||
|
||
|
||
-- | the @[ed| ... /// ... |]@ quasi quoters | ||
ed | ||
, edMS | ||
, edMI | ||
, edBS | ||
, edBI | ||
, edMultilineSensitive | ||
, edMultilineInsensitive | ||
, edBlockSensitive | ||
, edBlockInsensitive | ||
, ed_ :: QuasiQuoter | ||
|
||
ed = ed' sr_cast $ Just minBound | ||
edMS = edMultilineSensitive | ||
edMI = edMultilineInsensitive | ||
edBS = edBlockSensitive | ||
edBI = edBlockInsensitive | ||
edMultilineSensitive = ed' sr_cast $ Just MultilineSensitive | ||
edMultilineInsensitive = ed' sr_cast $ Just MultilineInsensitive | ||
edBlockSensitive = ed' sr_cast $ Just BlockSensitive | ||
edBlockInsensitive = ed' sr_cast $ Just BlockInsensitive | ||
ed_ = ed' fn_cast Nothing | ||
|
||
sr_cast :: Q Exp | ||
sr_cast = [|\x -> x :: SearchReplace RE B.ByteString|] | ||
|
||
fn_cast :: Q Exp | ||
fn_cast = [|\x -> x :: SimpleREOptions -> SearchReplace RE B.ByteString|] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
{-# LANGUAGE CPP #-} | ||
#if __GLASGOW_HASKELL__ >= 800 | ||
{-# LANGUAGE TemplateHaskellQuotes #-} | ||
#else | ||
{-# LANGUAGE QuasiQuotes #-} | ||
{-# LANGUAGE TemplateHaskell #-} | ||
#endif | ||
|
||
module Text.RE.Internal.SearchReplace.PCRE.ByteString.Lazy | ||
( ed | ||
, edMS | ||
, edMI | ||
, edBS | ||
, edBI | ||
, edMultilineSensitive | ||
, edMultilineInsensitive | ||
, edBlockSensitive | ||
, edBlockInsensitive | ||
, ed_ | ||
) where | ||
|
||
import qualified Data.ByteString.Lazy.Char8 as LBS | ||
import Language.Haskell.TH | ||
import Language.Haskell.TH.Quote | ||
import Text.RE.PCRE.RE | ||
import Text.RE.Internal.SearchReplace.PCREEdPrime | ||
import Text.RE.SearchReplace | ||
import Text.RE.Types.REOptions | ||
|
||
|
||
-- | the @[ed| ... /// ... |]@ quasi quoters | ||
ed | ||
, edMS | ||
, edMI | ||
, edBS | ||
, edBI | ||
, edMultilineSensitive | ||
, edMultilineInsensitive | ||
, edBlockSensitive | ||
, edBlockInsensitive | ||
, ed_ :: QuasiQuoter | ||
|
||
ed = ed' sr_cast $ Just minBound | ||
edMS = edMultilineSensitive | ||
edMI = edMultilineInsensitive | ||
edBS = edBlockSensitive | ||
edBI = edBlockInsensitive | ||
edMultilineSensitive = ed' sr_cast $ Just MultilineSensitive | ||
edMultilineInsensitive = ed' sr_cast $ Just MultilineInsensitive | ||
edBlockSensitive = ed' sr_cast $ Just BlockSensitive | ||
edBlockInsensitive = ed' sr_cast $ Just BlockInsensitive | ||
ed_ = ed' fn_cast Nothing | ||
|
||
sr_cast :: Q Exp | ||
sr_cast = [|\x -> x :: SearchReplace RE LBS.ByteString|] | ||
|
||
fn_cast :: Q Exp | ||
fn_cast = [|\x -> x :: SimpleREOptions -> SearchReplace RE LBS.ByteString|] |
Oops, something went wrong.