-- |
-- Module      :  Parser.ReplaceP
-- Copyright   :  (c) OleksandrZhabenko 2020-2021, 2024
-- License     :  MIT
-- Stability   :  Experimental
-- Maintainer  :  oleksandr.zhabenko@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 :: [Char] -> [Char]
replaceP (Char
x:Char
y:Char
z:Char
u:Char
v:[Char]
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
'\\' = [Char]
"[\"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char] -> [Char]
replaceP [Char]
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
'\\' = [Char]
"\",\"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char] -> [Char]
replaceP (Char
uChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:Char
vChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:[Char]
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
']' = [Char]
"\"]" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char] -> [Char]
replaceP (Char
uChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:Char
vChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:[Char]
xs)
 | Bool
otherwise = Char
xChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:[Char] -> [Char]
replaceP (Char
yChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:Char
zChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:Char
uChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:Char
vChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:[Char]
xs)
replaceP (Char
x:Char
y:Char
z:Char
u:[Char]
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
'\\' = [Char]
"\",\"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char] -> [Char]
replaceP (Char
uChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:[Char]
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
']' = [Char]
"\"]" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char] -> [Char]
replaceP (Char
uChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:[Char]
xs)
 | Bool
otherwise = Char
xChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:[Char] -> [Char]
replaceP (Char
yChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:Char
zChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:Char
uChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:[Char]
xs)
replaceP (Char
x:Char
y:Char
z:[Char]
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
'\\' = [Char]
"\",\"\\" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char] -> [Char]
replaceP [Char]
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
']' = [Char]
"\"]" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char] -> [Char]
replaceP [Char]
xs
 | Bool
otherwise = Char
xChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:[Char] -> [Char]
replaceP (Char
yChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:Char
zChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:[Char]
xs)
replaceP [Char]
xs = [Char]
xs

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