{-# OPTIONS --with-K #-}
module Text.Regex.String.Unsafe where
open import Data.String.Base using (String; toList; fromList)
import Data.String.Unsafe as Stringₚ
open import Function.Base using (_on_; id)
open import Level using (0ℓ)
open import Relation.Binary.Core using (Rel)
open import Relation.Binary.Definitions using (Decidable)
open import Relation.Binary.PropositionalEquality.Core using (_≡_; sym; subst)
open import Relation.Nullary.Decidable using (map′)
open import Text.Regex.String as Regex public
hiding (_∈_; _∉_; _∈?_; _∉?_; Span; Match; search)
infix 4 _∈_ _∉_ _∈?_ _∉?_
_∈_ : String → Exp → Set
str ∈ e = toList str Regex.∈ e
_∉_ : String → Exp → Set
str ∉ e = toList str Regex.∉ e
_∈?_ : Decidable _∈_
str ∈? e = toList str Regex.∈? e
_∉?_ : Decidable _∉_
str ∉? e = toList str Regex.∉? e
Span : Regex → Rel String 0ℓ
Span e = Regex.Span e _≡_ on toList
record Match (str : String) (e : Regex) : Set where
constructor mkMatch
field
string : String
match : string ∈ Regex.expression e
related : Span e string str
open Match public
search : Decidable Match
search str e = map′ from to (Regex.search input e) where
input = toList str
exp = Regex.expression e
from : Regex.Match (Regex.Span e _≡_) input exp → Match str e
from (Regex.mkMatch list match related) =
let eq = sym (Stringₚ.toList∘fromList list) in
mkMatch (fromList list)
(subst (Regex._∈ exp) eq match)
(subst (λ str → Regex.Span e _≡_ str input) eq related)
to : Match str e → Regex.Match (Regex.Span e _≡_) input exp
to (mkMatch string match related) =
Regex.mkMatch (toList string) match related