-- |
-- Module      :  Parser.ReplaceP
-- Copyright   :  (c) OleksandrZhabenko 2020-2021
-- License     :  MIT
-- Stability   :  Experimental
-- Maintainer  :  olexandr543@yahoo.com
--
-- This module provides some basic parsing functions for some special used 'Show' representation.
--

module Parser.ReplaceP 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 [] = []