{-# LANGUAGE Trustworthy #-}
module System.Path.WildMatch (
wildCheckCase,
wildToRegex)
where
import Data.String.Utils
import Text.Regex
wildToRegex :: String -> String
wildToRegex :: String -> String
wildToRegex i :: String
i = String -> String
convwild String
i String -> String -> String
forall a. [a] -> [a] -> [a]
++ "$"
wildCheckCase :: String
-> String
-> Bool
wildCheckCase :: String -> String -> Bool
wildCheckCase patt :: String
patt name :: String
name =
case Regex -> String -> Maybe [String]
matchRegex (String -> Regex
mkRegex (String -> Regex) -> String -> Regex
forall a b. (a -> b) -> a -> b
$ "^" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
wildToRegex String
patt) String
name of
Nothing -> Bool
False
Just _ -> Bool
True
convwild :: String -> String
convwild :: String -> String
convwild [] = []
convwild ('*':xs :: String
xs) = ".*" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
convwild String
xs
convwild ('?':xs :: String
xs) = "." String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
convwild String
xs
convwild ('[':'!':xs :: String
xs) = "[^" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
convpat String
xs
convwild ('[':xs :: String
xs) = '[' Char -> String -> String
forall a. a -> [a] -> [a]
: String -> String
convpat String
xs
convwild ('.':xs :: String
xs) = "\\." String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
convwild String
xs
convwild (x :: Char
x:xs :: String
xs) = String -> String
escapeRe [Char
x] String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
convwild String
xs
convpat :: String -> String
convpat :: String -> String
convpat ('\\':xs :: String
xs) = "\\\\" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
convpat String
xs
convpat (']':xs :: String
xs) = ']' Char -> String -> String
forall a. a -> [a] -> [a]
: String -> String
convwild String
xs
convpat (x :: Char
x:xs :: String
xs) = Char
x Char -> String -> String
forall a. a -> [a] -> [a]
: String -> String
convpat String
xs
convpat [] = []