-- | Functions to normalise UGen names. module Sound.SC3.UGen.Name where import Data.Char -- | Convert from @hsc3@ name to @SC3@ name. -- -- > toSC3Name "sinOsc" == "SinOsc" -- > toSC3Name "lfSaw" == "LFSaw" -- > toSC3Name "pv_Copy" == "PV_Copy" -- > map toSC3Name ["bpf","fft","tpv"] == ["BPF","FFT","TPV"] toSC3Name :: String -> String toSC3Name nm = case nm of 'l':'f':nm' -> "LF" ++ nm' 'p':'v':'_':nm' -> "PV_" ++ nm' p:q -> if all isLower nm && length nm <= 3 then map toUpper nm else toUpper p : q [] -> [] -- | Inverse of 'toSC3Name'. -- -- > let nm = ["SinOsc","LFSaw","PV_Copy"] -- > in map fromSC3Name nm == ["sinOsc","lfSaw","pv_Copy"] -- -- > map fromSC3Name ["BPF","FFT","TPV"] == ["bpf","fft","tpv"] fromSC3Name :: String -> String fromSC3Name nm = case nm of 'L':'F':nm' -> "lf"++nm' 'P':'V':'_':nm' -> "pv_"++nm' p:q -> if all isUpper nm && length nm <= 3 then map toLower nm else toLower p : q [] -> []