-- |
-- Module      :  ReplaceP.Arr
-- Copyright   :  (c) OleksandrZhabenko 2020-2022
-- License     :  MIT
-- Stability   :  Experimental
-- Maintainer  :  olexandr543@yahoo.com
--
-- A program and a library that can be used as a simple 
-- basic interface to some SoX functionality or for producing 
-- the approximately Ukrainian speech with your own recorded 
-- voice (actually it produces the needed sound representations).
--

module ReplaceP.Arr where

-- | Function is used internally to parse a given third command line argument as a @[String]@ representing the Ukrainian sounds, which will be produced.
replaceP :: String -> String
replaceP :: String -> String
replaceP (Char
x:Char
y:Char
z:Char
u:Char
v:String
xs) | Char
x Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'[' Bool -> Bool -> Bool
&& Char
y Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\"' Bool -> Bool -> Bool
&& Char
z Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'[' Bool -> Bool -> Bool
&& Char
u Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\\' Bool -> Bool -> Bool
&& Char
v Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\\' = String
"[\"\\" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
replaceP String
xs
                        | Char
x Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
',' Bool -> Bool -> Bool
&& Char
y Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\\' Bool -> Bool -> Bool
&& Char
z Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\\' = String
"\",\"\\" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
replaceP (Char
uChar -> String -> String
forall a. a -> [a] -> [a]
:Char
vChar -> String -> String
forall a. a -> [a] -> [a]
:String
xs)
                        | Char
x Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
']' Bool -> Bool -> Bool
&& Char
y Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\"' Bool -> Bool -> Bool
&& Char
z Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
']' = String
"\"]" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
replaceP (Char
uChar -> String -> String
forall a. a -> [a] -> [a]
:Char
vChar -> String -> String
forall a. a -> [a] -> [a]
:String
xs)
                        | Bool
otherwise = Char
xChar -> String -> String
forall a. a -> [a] -> [a]
:String -> String
replaceP (Char
yChar -> String -> String
forall a. a -> [a] -> [a]
:Char
zChar -> String -> String
forall a. a -> [a] -> [a]
:Char
uChar -> String -> String
forall a. a -> [a] -> [a]
:Char
vChar -> String -> String
forall a. a -> [a] -> [a]
:String
xs)
replaceP (Char
x:Char
y:Char
z:Char
u:String
xs) | Char
x Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
',' Bool -> Bool -> Bool
&& Char
y Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\\' Bool -> Bool -> Bool
&& Char
z Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\\' = String
"\",\"\\" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
replaceP (Char
uChar -> String -> String
forall a. a -> [a] -> [a]
:String
xs)
                      | Char
x Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
']' Bool -> Bool -> Bool
&& Char
y Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\"' Bool -> Bool -> Bool
&& Char
z Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
']' = String
"\"]" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
replaceP (Char
uChar -> String -> String
forall a. a -> [a] -> [a]
:String
xs)
                      | Bool
otherwise = Char
xChar -> String -> String
forall a. a -> [a] -> [a]
:String -> String
replaceP (Char
yChar -> String -> String
forall a. a -> [a] -> [a]
:Char
zChar -> String -> String
forall a. a -> [a] -> [a]
:Char
uChar -> String -> String
forall a. a -> [a] -> [a]
:String
xs)
replaceP (Char
x:Char
y:Char
z:String
xs) | Char
x Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
',' Bool -> Bool -> Bool
&& Char
y Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\\' Bool -> Bool -> Bool
&& Char
z Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\\' = String
"\",\"\\" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
replaceP String
xs
                    | Char
x Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
']' Bool -> Bool -> Bool
&& Char
y Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\"' Bool -> Bool -> Bool
&& Char
z Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
']' = String
"\"]" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
replaceP String
xs
                    | Bool
otherwise = Char
xChar -> String -> String
forall a. a -> [a] -> [a]
:String -> String
replaceP (Char
yChar -> String -> String
forall a. a -> [a] -> [a]
:Char
zChar -> String -> String
forall a. a -> [a] -> [a]
:String
xs)
replaceP String
xs = String
xs

-- | Function is used internally to parse further the result dealt with 'replaceP' function.
replaceP4 :: String -> String
replaceP4 :: String -> String
replaceP4 (Char
t:Char
x:Char
y:Char
z:Char
u:Char
v:String
xs) | [Char
t,Char
x,Char
y,Char
z,Char
u,Char
v] String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"\\\\1078" = Char
'\1078'Char -> String -> String
forall a. a -> [a] -> [a]
:String -> String
replaceP4 String
xs
                           | [Char
t,Char
x,Char
y,Char
z,Char
u,Char
v] String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"\\\\1079" = Char
'\1079'Char -> String -> String
forall a. a -> [a] -> [a]
:String -> String
replaceP4 String
xs
                           | [Char
t,Char
x,Char
y,Char
z,Char
u,Char
v] String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"\\\\1100" = Char
'\1100'Char -> String -> String
forall a. a -> [a] -> [a]
:String -> String
replaceP4 String
xs
                           | Bool
otherwise = Char
tChar -> String -> String
forall a. a -> [a] -> [a]
:String -> String
replaceP4 (Char
xChar -> String -> String
forall a. a -> [a] -> [a]
:Char
yChar -> String -> String
forall a. a -> [a] -> [a]
:Char
zChar -> String -> String
forall a. a -> [a] -> [a]
:Char
uChar -> String -> String
forall a. a -> [a] -> [a]
:Char
vChar -> String -> String
forall a. a -> [a] -> [a]
:String
xs)
replaceP4 (Char
x:String
xs) = Char
xChar -> String -> String
forall a. a -> [a] -> [a]
:String -> String
replaceP4 String
xs
replaceP4 [] = []