module Sound.SC3.UGen.DB.Rename where
import Data.Char
import Data.List
import Sound.SC3.UGen.Name
import Sound.SC3.UGen.DB.Record
rename_input :: String -> String
rename_input p =
case p of
"default" -> "default_"
"in" -> "input"
"type" -> "type_"
"div" -> "div_"
"drop" -> "drop_"
"exp" -> "exp_"
"floor" -> "floor_"
"id" -> "id_"
"init" -> "init_"
"length" -> "length_"
"min" -> "min_"
"max" -> "max_"
"rate" -> "rate_"
"label" -> "label_"
"channelsArray" -> "input"
_ -> p
rename_ugen :: String -> String
rename_ugen nm =
let nm' = fromSC3Name nm
in case nm' of
"in" -> "in'"
_ -> nm'
ci_eq :: String -> String -> Bool
ci_eq p q = let f = map toLower in f p == f q
rename_eq_input :: U -> I -> String
rename_eq_input u =
let f x = if x `ci_eq` ugen_name u then x ++ "_" else x
in rename_input . f . input_name
i_rename :: I -> I
i_rename i = i {input_name = rename_input (input_name i)}
u_rename :: U -> U
u_rename u =
let n' = rename_ugen (ugen_name u)
i' = map i_rename (ugen_inputs u)
in u {ugen_name = n',ugen_inputs = i'}
i_rename_db :: [String] -> I -> I
i_rename_db uu_nm i =
let n = input_name i
n' = case find (ci_eq n) uu_nm of
Just _ -> n ++ "_"
Nothing -> n
in i {input_name = rename_input n'}
u_rename_db :: [U] -> U -> U
u_rename_db uu u =
let uu_nm = map ugen_name uu
n' = rename_ugen (ugen_name u)
i' = map (i_rename_db uu_nm) (ugen_inputs u)
in u {ugen_name = n',ugen_inputs = i'}