{- copyright (c) sreservoir.
   license bsd three-clause. -}

module Text.Regex.Less.RECtOpts (reCtOpts,RECtOpt(..)) where

import qualified Text.Regex.PCRE.Light as R

-- compile options.
data RECtOpt = CtAnchored | CtAutoCallout | CtCaseless | CtDollarEndOnly
            | CtDotAll | CtDupNames | CtExtended | CtFirstLine | CtMultiLine
            | CtNoAutoCapture | CtReverseGreedy | CtUtf8 | CtNoUtf8Check
            | CtNlAnyCrLf | CtNlAnyUnicode | CtNlCr | CtNlLf | CtNlCrLf
            | CtRAnyCrLf | CtRAnyUnicode | CtExtra
  deriving (Eq,Show)

-- translates lists of compile option constructors.
reCtOpts :: [RECtOpt] -> [R.PCREOption]
reCtOpts = map reCtOpt1

-- translates a compile option constructor.
reCtOpt1 :: RECtOpt -> R.PCREOption
reCtOpt1 CtAnchored = R.anchored
reCtOpt1 CtAutoCallout = R.auto_callout
reCtOpt1 CtCaseless = R.caseless
reCtOpt1 CtDollarEndOnly = R.dollar_endonly
reCtOpt1 CtDotAll = R.dotall
reCtOpt1 CtDupNames = R.dupnames
reCtOpt1 CtExtended = R.extended
reCtOpt1 CtFirstLine = R.firstline
reCtOpt1 CtMultiLine = R.multiline
reCtOpt1 CtNoAutoCapture = R.no_auto_capture
reCtOpt1 CtReverseGreedy = R.ungreedy
reCtOpt1 CtUtf8 = R.utf8
reCtOpt1 CtNoUtf8Check = R.no_utf8_check
reCtOpt1 CtNlCr = R.newline_cr
reCtOpt1 CtNlLf = R.newline_lf
reCtOpt1 CtNlCrLf = R.newline_crlf
--reCtOpt1 CtNAnyCrLf    = R.newline_anycrlf
--reCtOpt1 CtNAnyUnicode = R.newline_any
--reCtOpt1 CtNAnyCrLf    = R.bsr_anycrlf
--reCtOpt1 CtNAnyUnicode = R.bsr_unicode
reCtOpt1 _                = undefined