1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
{-# LANGUAGE CPP #-}
#if __GLASGOW_HASKELL__ >= 800
{-# LANGUAGE TemplateHaskellQuotes #-}
#else
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
#endif
module Text.RE.ZeInternals.SearchReplace.TDFA.String
( ed
, edMultilineSensitive
, edMultilineInsensitive
, edBlockSensitive
, edBlockInsensitive
, edMS
, edMI
, edBS
, edBI
, ed_
) where
import Language.Haskell.TH
import Language.Haskell.TH.Quote
import Text.RE.REOptions
import Text.RE.Tools.IsRegex
import Text.RE.ZeInternals.SearchReplace.TDFAEdPrime
import Text.RE.ZeInternals.TDFA
-- | @[ed| ... \/\/\/ ... |]@, is equivalent to @[edMultilineSensitive| ... \/\/\/ ... |]@,
-- compiling a case-sensitive, multi-line 'SearchReplace'
ed :: QuasiQuoter
ed = ed' sr_cast $ Just minBound
-- | @[edMultilineSensitive| ... \/\/\/ ... |]@ compiles a case-sensitive, multi-line 'SearchReplace' template
edMultilineSensitive :: QuasiQuoter
edMultilineSensitive = ed' sr_cast $ Just MultilineSensitive
-- | @[edMultilineInsensitive| ... \/\/\/ ... |]@ compiles a case-insensitive, multi-line 'SearchReplace' template
edMultilineInsensitive :: QuasiQuoter
edMultilineInsensitive = ed' sr_cast $ Just MultilineInsensitive
-- | @[edBlockSensitive| ... \/\/\/ ... |]@ compiles a case-sensitive, non-multi-line 'SearchReplace' template
edBlockSensitive :: QuasiQuoter
edBlockSensitive = ed' sr_cast $ Just BlockSensitive
-- | @[edBlockInsensitive| ... \/\/\/ ... |]@ compiles a case-insensitive, non-multi-line 'SearchReplace' template
edBlockInsensitive :: QuasiQuoter
edBlockInsensitive = ed' sr_cast $ Just BlockInsensitive
-- | @[edMS| ... \/\/\/ ... |]@ is a shorthand for @[edMultilineSensitive| ... \/\/\/ ... |]@
edMS :: QuasiQuoter
edMS = edMultilineSensitive
-- | @[edMI| ... \/\/\/ ... |]@ is a shorthand for @[edMultilineInsensitive| ... \/\/\/ ... |]@
edMI :: QuasiQuoter
edMI = edMultilineInsensitive
-- | @[edBS| ... \/\/\/ ... |]@ is a shorthand for @[edBlockSensitive| ... \/\/\/ ... |]@
edBS :: QuasiQuoter
edBS = edBlockSensitive
-- | @[edBI| ... \/\/\/ ... |]@ is a shorthand for @[edBlockInsensitive| ... \/\/\/ ... |]@
edBI :: QuasiQuoter
edBI = edBlockInsensitive
-- | @[ed_| ... \/\/\/ ... |]@ compiles a 'SearchReplace' template to produce a function that
-- takes the RE options (e.g., a 'SimpleREOptions' value) and yields the
-- 'SearchReplace' template compiled with those options. For example,
--
-- @s *=~/ [ed_|${hex}([0-9a-f]+)\/\/\/0x${hex}|] MultilineInsensitive@
--
-- prefixes the hexadecimal digit strings in s with @0x@, allowing for
-- upper- or lower-case hex digits (which is entirely equivalent
-- in this example to just using @[edMultilineInsensitive|[0-9a-f]+|]@).
ed_ :: QuasiQuoter
ed_ = ed' fn_cast Nothing
sr_cast :: Q Exp
sr_cast = [|\x -> x :: SearchReplace RE String|]
fn_cast :: Q Exp
fn_cast = [|\f x -> f x :: SearchReplace RE String|]
|