regexpr-0.1.3: Hidden/RegexPRTypes.hs
module Hidden.RegexPRTypes (
reverseRegexAction
, RegexSrcParser
, RegexAction(..)
, RegexResult
, MatchList
, RegexParser
, runRegexParser
) where
import Hidden.ParseLib( Parse, runParse )
import Control.Monad.State( StateT, runStateT )
import Control.Monad.Reader( ReaderT(runReaderT) )
import Hidden.Tools( modifySnd )
type RegexResult = ( String, (String, String) )
type MatchList = [ (Int, String) ]
type RegexParser = ReaderT (String, String) (StateT MatchList (Parse Char))
runRegexParser ::
(String, String) ->
RegexParser a -> (String, String) -> [((a, MatchList), (String, String))]
runRegexParser point = runParse . flip runStateT [] . flip runReaderT point
type RegexSrcParser = StateT Int (Parse Char)
data RegexAction = Select (Char -> Bool) |
Repeat Int (Maybe Int) RegexAction |
RepeatNotGreedy Int (Maybe Int) RegexAction |
RegexOr [RegexAction] [RegexAction] |
Note Int [RegexAction] | BackReference Int |
Still [RegexAction] | Backword [RegexAction] |
RegActNot [RegexAction] |
BeginningOfInput | EndOfInput |
PreMatchPoint | Parens [RegexAction] |
Comment String
reverseRegexAction :: RegexAction -> RegexAction
reverseRegexAction (Note i ras)
= Note i $ reverse $ map reverseRegexAction ras
reverseRegexAction (RegexOr ras1 ras2)
= RegexOr (reverse $ map reverseRegexAction ras1)
(reverse $ map reverseRegexAction ras2)
-- reverseRegexAction (Still ras)
-- = Still $ reverse $ map reverseRegexAction ras
-- reverseRegexAction (Backword ras)
-- = Backword $ reverse $ map reverseRegexAction ras
reverseRegexAction ra = ra