module Cookbook.Recipes.Sanitize where
import qualified Cookbook.Essential.Common as Cm
import qualified Cookbook.Ingredients.Lists.Modify as Md
import qualified Cookbook.Ingredients.Lists.Access as Ac
import qualified Cookbook.Ingredients.Functional.Break as Br
blacklist :: (Eq a) => [a] -> [a] -> [a]
blacklist x c = Cm.apply (map (flip Md.rm) c) x
rmleading :: (Eq a) => [a] -> a -> [a]
rmleading x c = Br.filterBreak (==c) x
up :: (Eq a) => ([a],[a]) -> [a] -> [a]
up (a,b) = map (Ac.refpos (a,b))
down :: (Eq a) => ([a],[a]) -> [a] -> [a]
down (a,b) = map (Ac.refpos (b,a))
rmdb :: (Eq a) => [a] -> [a]
rmdb [] = []
rmdb [x] = [x]
rmdb (x:y:zs) = x: rmdb (if x == y then Br.removeBreak (== x) (y:zs) else y:zs)
rmdbAll :: (Eq a) => [a] -> [a]
rmdbAll [] = []
rmdbAll (x:xs) = x : rmdb (Md.rm xs x)
tolower :: String -> String
tolower = down (['a'..'z'],['A'..'Z'])
toupper :: String -> String
toupper = up (['a'..'z'],['A'..'Z'])
rmlws :: String -> String
rmlws = (`rmleading` ' ')
rmsymbols :: String -> String
rmsymbols = (`blacklist` ['\\'..'`'])
notNumeral :: String -> Bool
notNumeral x = all (\c -> c `elem` ['A'..'z']) x
numeral :: String -> Bool
numeral x = all (\c -> c `notElem` ['A'..'z']) x