{-# OPTIONS_GHC -threaded #-}
{-# OPTIONS_HADDOCK show-extensions #-}
{-# LANGUAGE BangPatterns #-}
module Phonetic.Languages.General.Simple.Parsing where
import Phonetic.Languages.Array.General.PropertiesSyllablesG2
import Data.Phonetic.Languages.PrepareText
import System.Environment (getArgs)
import Phonetic.Languages.General.Simple
import Data.List (sort)
import GHC.Arr
import Data.Phonetic.Languages.Base
import Data.Phonetic.Languages.Syllables
import Text.Read (readMaybe)
import Data.Maybe (fromMaybe)
import Data.Phonetic.Languages.SpecificationsRead
argsToSimplePrepare
:: (Double -> String -> ([[[PRS]]] -> [[Double]]))
-> [([[[PRS]]] -> [[Double]])]
-> IO ()
argsToSimplePrepare :: (Double -> String -> [[[PRS]]] -> [[Double]])
-> [[[[PRS]]] -> [[Double]]] -> IO ()
argsToSimplePrepare Double -> String -> [[[PRS]]] -> [[Double]]
h [[[[PRS]]] -> [[Double]]]
qs = do
[String]
args000 <- IO [String]
getArgs
let (![String]
args14,![String]
args00) = Int -> [String] -> ([String], [String])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
4 [String]
args000
[String
fileGWrSys, String
controlFile, String
segmentRulesFile, String
concatenationsFileP] = [String]
args14
(String
gwrsCnts, String
controlConts, String
segmentData, String
concatenationsFile, String
toFileMode1, Bool
interactiveP, Bool
jstL0, [String]
args0, Coeffs2
coeffs, [String]
args, Bool
lstW) <- String
-> String
-> String
-> String
-> [String]
-> IO
(String, String, String, String, String, Bool, Bool, [String],
Coeffs2, [String], Bool)
argsProcessment String
fileGWrSys String
controlFile String
segmentRulesFile String
concatenationsFileP [String]
args00
let (GWritingSystemPRPLX
wrs, [(Char, Char)]
ks, CharPhoneticClassification
arr, SegmentRulesG
gs, String
js, String
vs, Concatenations
ysss, String
ws) = String
-> String
-> String
-> String
-> (GWritingSystemPRPLX, [(Char, Char)],
CharPhoneticClassification, SegmentRulesG, String, String,
Concatenations, String)
innerProcessmentSimple String
gwrsCnts String
controlConts String
segmentData String
concatenationsFile
if Coeffs2 -> Bool
forall a. CoeffTwo a -> Bool
isPair Coeffs2
coeffs then GWritingSystemPRPLX
-> [(Char, Char)]
-> CharPhoneticClassification
-> SegmentRulesG
-> String
-> String
-> (Double -> String -> [[[PRS]]] -> [[Double]])
-> [[[[PRS]]] -> [[Double]]]
-> Concatenations
-> String
-> String
-> Bool
-> Bool
-> [String]
-> Coeffs2
-> [String]
-> Bool
-> IO ()
generalProc2G GWritingSystemPRPLX
wrs [(Char, Char)]
ks CharPhoneticClassification
arr SegmentRulesG
gs String
js String
vs Double -> String -> [[[PRS]]] -> [[Double]]
h [[[[PRS]]] -> [[Double]]]
qs Concatenations
ysss String
ws String
toFileMode1 Bool
interactiveP Bool
jstL0 [String]
args0 Coeffs2
coeffs (Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
drop Int
1 [String]
args) Bool
lstW
else GWritingSystemPRPLX
-> [(Char, Char)]
-> CharPhoneticClassification
-> SegmentRulesG
-> String
-> String
-> (Double -> String -> [[[PRS]]] -> [[Double]])
-> [[[[PRS]]] -> [[Double]]]
-> Concatenations
-> String
-> String
-> Bool
-> Bool
-> [String]
-> Coeffs2
-> [String]
-> Bool
-> IO ()
generalProc2G GWritingSystemPRPLX
wrs [(Char, Char)]
ks CharPhoneticClassification
arr SegmentRulesG
gs String
js String
vs Double -> String -> [[[PRS]]] -> [[Double]]
h [[[[PRS]]] -> [[Double]]]
qs Concatenations
ysss String
ws String
toFileMode1 Bool
interactiveP Bool
jstL0 [String]
args0 Coeffs2
coeffs [String]
args Bool
lstW
argsToSimplePrepare4Files
:: FilePath
-> FilePath
-> FilePath
-> FilePath
-> (Double -> String -> ([[[PRS]]] -> [[Double]]))
-> [([[[PRS]]] -> [[Double]])]
-> String
-> IO ()
argsToSimplePrepare4Files :: String
-> String
-> String
-> String
-> (Double -> String -> [[[PRS]]] -> [[Double]])
-> [[[[PRS]]] -> [[Double]]]
-> String
-> IO ()
argsToSimplePrepare4Files String
fileGWrSys String
controlFile String
segmentRulesFile String
concatenationsFileP Double -> String -> [[[PRS]]] -> [[Double]]
h [[[[PRS]]] -> [[Double]]]
qs String
other_args = do
let args000 :: [String]
args000 = String -> [String]
words String
other_args
args00 :: [String]
args00 = Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
drop Int
4 [String]
args000
(String
gwrsCnts, String
controlConts, String
segmentData, String
concatenationsFile, String
toFileMode1, Bool
interactiveP, Bool
jstL0, [String]
args0, Coeffs2
coeffs, [String]
args, Bool
lstW) <- String
-> String
-> String
-> String
-> [String]
-> IO
(String, String, String, String, String, Bool, Bool, [String],
Coeffs2, [String], Bool)
argsProcessment String
fileGWrSys String
controlFile String
segmentRulesFile String
concatenationsFileP [String]
args00
let (GWritingSystemPRPLX
wrs, [(Char, Char)]
ks, CharPhoneticClassification
arr, SegmentRulesG
gs, String
js, String
vs, Concatenations
ysss, String
ws) = String
-> String
-> String
-> String
-> (GWritingSystemPRPLX, [(Char, Char)],
CharPhoneticClassification, SegmentRulesG, String, String,
Concatenations, String)
innerProcessmentSimple String
gwrsCnts String
controlConts String
segmentData String
concatenationsFile
if Coeffs2 -> Bool
forall a. CoeffTwo a -> Bool
isPair Coeffs2
coeffs then GWritingSystemPRPLX
-> [(Char, Char)]
-> CharPhoneticClassification
-> SegmentRulesG
-> String
-> String
-> (Double -> String -> [[[PRS]]] -> [[Double]])
-> [[[[PRS]]] -> [[Double]]]
-> Concatenations
-> String
-> String
-> Bool
-> Bool
-> [String]
-> Coeffs2
-> [String]
-> Bool
-> IO ()
generalProc2G GWritingSystemPRPLX
wrs [(Char, Char)]
ks CharPhoneticClassification
arr SegmentRulesG
gs String
js String
vs Double -> String -> [[[PRS]]] -> [[Double]]
h [[[[PRS]]] -> [[Double]]]
qs Concatenations
ysss String
ws String
toFileMode1 Bool
interactiveP Bool
jstL0 [String]
args0 Coeffs2
coeffs (Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
drop Int
1 [String]
args) Bool
lstW
else GWritingSystemPRPLX
-> [(Char, Char)]
-> CharPhoneticClassification
-> SegmentRulesG
-> String
-> String
-> (Double -> String -> [[[PRS]]] -> [[Double]])
-> [[[[PRS]]] -> [[Double]]]
-> Concatenations
-> String
-> String
-> Bool
-> Bool
-> [String]
-> Coeffs2
-> [String]
-> Bool
-> IO ()
generalProc2G GWritingSystemPRPLX
wrs [(Char, Char)]
ks CharPhoneticClassification
arr SegmentRulesG
gs String
js String
vs Double -> String -> [[[PRS]]] -> [[Double]]
h [[[[PRS]]] -> [[Double]]]
qs Concatenations
ysss String
ws String
toFileMode1 Bool
interactiveP Bool
jstL0 [String]
args0 Coeffs2
coeffs [String]
args Bool
lstW
innerProcessmentSimple
:: String
-> String
-> String
-> String
-> (GWritingSystemPRPLX, [(Char, Char)], CharPhoneticClassification, SegmentRulesG, String, String, Concatenations, String)
innerProcessmentSimple :: String
-> String
-> String
-> String
-> (GWritingSystemPRPLX, [(Char, Char)],
CharPhoneticClassification, SegmentRulesG, String, String,
Concatenations, String)
innerProcessmentSimple String
gwrsCnts String
controlConts String
segmentData String
concatenationsFile =
let [[String]
allophonesGs, [String]
charClfs, [String]
jss, [String]
vss, [String]
wss] = Char -> [String] -> Concatenations
groupBetweenChars Char
'~' ([String] -> Concatenations)
-> (String -> [String]) -> String -> Concatenations
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String]
lines (String -> Concatenations) -> String -> Concatenations
forall a b. (a -> b) -> a -> b
$ String
controlConts
wrs :: GWritingSystemPRPLX
wrs = Char -> String -> GWritingSystemPRPLX
getGWritingSystem Char
'~' String
gwrsCnts
ks :: [(Char, Char)]
ks = [(Char, Char)] -> [(Char, Char)]
forall a. Ord a => [a] -> [a]
sort ([(Char, Char)] -> [(Char, Char)])
-> (Maybe [(Char, Char)] -> [(Char, Char)])
-> Maybe [(Char, Char)]
-> [(Char, Char)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(Char, Char)] -> Maybe [(Char, Char)] -> [(Char, Char)]
forall a. a -> Maybe a -> a
fromMaybe [] (Maybe [(Char, Char)] -> [(Char, Char)])
-> Maybe [(Char, Char)] -> [(Char, Char)]
forall a b. (a -> b) -> a -> b
$ (String -> Maybe [(Char, Char)]
forall a. Read a => String -> Maybe a
readMaybe ([String] -> String
unwords [String]
allophonesGs)::Maybe [(Char, Char)])
arr :: CharPhoneticClassification
arr = String -> CharPhoneticClassification
forall a. Read a => String -> a
read ([String] -> String
unwords [String]
charClfs)::Array Int PRS
gs :: SegmentRulesG
gs = String -> SegmentRulesG
forall a. Read a => String -> a
read String
segmentData::SegmentRulesG
ysss :: Concatenations
ysss = Concatenations -> Concatenations
sort2Concat (Concatenations -> Concatenations)
-> (Maybe Concatenations -> Concatenations)
-> Maybe Concatenations
-> Concatenations
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Concatenations -> Maybe Concatenations -> Concatenations
forall a. a -> Maybe a -> a
fromMaybe [] (Maybe Concatenations -> Concatenations)
-> Maybe Concatenations -> Concatenations
forall a b. (a -> b) -> a -> b
$ (String -> Maybe Concatenations
forall a. Read a => String -> Maybe a
readMaybe String
segmentData::Maybe [[String]])
js :: String
js = [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [String]
jss
vs :: String
vs = [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [String]
vss
ws :: String
ws = String -> String
forall a. Ord a => [a] -> [a]
sort (String -> String) -> ([String] -> String) -> [String] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ [String]
wss
in (GWritingSystemPRPLX
wrs, [(Char, Char)]
ks, CharPhoneticClassification
arr, SegmentRulesG
gs, String
js, String
vs, Concatenations
ysss, String
ws)
argsProcessment
:: FilePath
-> FilePath
-> FilePath
-> FilePath
-> [String]
-> IO (String, String, String, String, String, Bool, Bool, [String], Coeffs2, [String], Bool)
argsProcessment :: String
-> String
-> String
-> String
-> [String]
-> IO
(String, String, String, String, String, Bool, Bool, [String],
Coeffs2, [String], Bool)
argsProcessment String
fileGWrSys String
controlFile String
segmentRulesFile String
concatenationsFileP [String]
args00 = do
let args0 :: [String]
args0 = (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (\String
xs -> String
xs String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"++B" Bool -> Bool -> Bool
&& String
xs String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"++L" Bool -> Bool -> Bool
&& String
xs String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"++BL" Bool -> Bool -> Bool
&& String
xs String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"++I" Bool -> Bool -> Bool
&& String
xs String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"+U") [String]
args00
lstW :: Bool
lstW = if (String -> Bool) -> [String] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (\String
x -> String
x String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"++B" Bool -> Bool -> Bool
|| String
x String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"++BL") [String]
args00 then Bool
True else Bool
False
jstL0 :: Bool
jstL0 = if (String -> Bool) -> [String] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (\String
x -> String
x String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"++L" Bool -> Bool -> Bool
|| String
x String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"++BL") [String]
args00 then Bool
True else Bool
False
toFileMode1 :: String
toFileMode1 = [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([String] -> String)
-> ([String] -> [String]) -> [String] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
take Int
1 ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
drop Int
1 ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
dropWhile (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"+IF") ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
takeWhile (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"-IF") ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ [String]
args0
interactiveP :: Bool
interactiveP = if (String -> Bool) -> [String] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (\String
xs -> String
xs String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"++I" Bool -> Bool -> Bool
|| String
xs String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"+IF") [String]
args00 then Bool
True else Bool
False
args01 :: [String]
args01 = (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
takeWhile (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"+A") [String]
args0 [String] -> [String] -> [String]
forall a. Monoid a => a -> a -> a
`mappend` (Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
drop Int
1 ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
dropWhile (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"-A") ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ [String]
args0)
args02 :: [String]
args02
| String -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
toFileMode1 = (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (\String
xs -> String
xs String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"+IF" Bool -> Bool -> Bool
&& String
xs String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"-IF") [String]
args01
| Bool
otherwise = (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
takeWhile (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"+IF") [String]
args01 [String] -> [String] -> [String]
forall a. Monoid a => a -> a -> a
`mappend` (Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
drop Int
1 ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
dropWhile (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"-IF") ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ [String]
args01)
args :: [String]
args = (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
takeWhile (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"+M") [String]
args02 [String] -> [String] -> [String]
forall a. Monoid a => a -> a -> a
`mappend` (Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
drop Int
1 ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
dropWhile (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"-M") ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ [String]
args02)
coeffs :: Coeffs2
coeffs = String -> Coeffs2
readCF (String -> Coeffs2) -> ([String] -> String) -> [String] -> Coeffs2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([String] -> String)
-> ([String] -> [String]) -> [String] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
take Int
1 ([String] -> Coeffs2) -> [String] -> Coeffs2
forall a b. (a -> b) -> a -> b
$ [String]
args
[String
controlConts, String
gwrsCnts, String
segmentData, String
concatenationsFile] <- (String -> IO String) -> [String] -> IO [String]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM String -> IO String
readFile [String
controlFile, String
fileGWrSys, String
segmentRulesFile, String
concatenationsFileP]
(String, String, String, String, String, Bool, Bool, [String],
Coeffs2, [String], Bool)
-> IO
(String, String, String, String, String, Bool, Bool, [String],
Coeffs2, [String], Bool)
forall (m :: * -> *) a. Monad m => a -> m a
return (String
gwrsCnts, String
controlConts, String
segmentData, String
concatenationsFile, String
toFileMode1, Bool
interactiveP, Bool
jstL0, [String]
args0, Coeffs2
coeffs, [String]
args, Bool
lstW)