{-# OPTIONS_GHC -threaded -rtsopts #-}
{-# OPTIONS_HADDOCK show-extensions #-}
{-# LANGUAGE BangPatterns #-}
module Phonetic.Languages.General.Lines.Parsing where
import Phonetic.Languages.Array.General.PropertiesSyllablesG2
import Text.Read (readMaybe)
import Data.Maybe (fromMaybe)
import System.Environment (getArgs)
import Data.Char (isDigit)
import Phonetic.Languages.General.Common
import Phonetic.Languages.General.Lines
import Data.Phonetic.Languages.PrepareText
import Phonetic.Languages.General.Lines
import Data.List (sort,nub)
import GHC.Arr
import Data.Phonetic.Languages.Base
import Data.Phonetic.Languages.Syllables
import Data.Phonetic.Languages.SpecificationsRead
import Phonetic.Languages.General.Simple.Parsing
argsToLinePrepare
:: (Double -> String -> ([[[PRS]]] -> [[Double]]))
-> [([[[PRS]]] -> [[Double]])]
-> IO ()
argsToLinePrepare :: (Double -> String -> [[[PRS]]] -> [[Double]])
-> [[[[PRS]]] -> [[Double]]] -> IO ()
argsToLinePrepare Double -> String -> [[[PRS]]] -> [[Double]]
h [[[[PRS]]] -> [[Double]]]
qs = do
[String]
args000 <- IO [String]
getArgs
let multiple :: Int
multiple = if [String] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null ([String] -> Bool) -> ([String] -> [String]) -> [String] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"+m") ([String] -> Bool) -> [String] -> Bool
forall a b. (a -> b) -> a -> b
$ [String]
args000 then Int
0 else Int
1
args00 :: [String]
args00
| Int
multiple Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
1 = (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
takeWhile (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"+m") [String]
args000 [String] -> [String] -> [String]
forall a. Monoid a => a -> a -> a
`mappend` Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
drop Int
1 ((String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
dropWhile (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"-m") [String]
args000)
| Bool
otherwise = [String]
args000
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]
args00
compare2 :: Bool
compare2 = (\[String]
xs -> if [String] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [String]
xs then Bool
False else Bool
True) ([String] -> Bool) -> ([String] -> [String]) -> [String] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"+c") ([String] -> Bool) -> [String] -> Bool
forall a b. (a -> b) -> a -> b
$ [String]
args00
if Bool
compare2 then do
let args1 :: [String]
args1 = (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
"+c" Bool -> Bool -> Bool
&& Int -> String -> String
forall a. Int -> [a] -> [a]
take Int
2 String
xs String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"+g") [String]
args00
([String]
args2,String
file3)
| [String] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [String]
args1 = ([],[])
| Bool
otherwise = ([String] -> [String]
forall a. [a] -> [a]
init ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> [String]
forall a. Eq a => [a] -> [a]
nub ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ [String]
args1,[String] -> String
forall a. [a] -> a
last [String]
args1)
if String -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
file3 then do
String -> IO ()
putStrLn String
"Please, specify the file to save the data to. "
String
file3 <- IO String
getLine
[String] -> String -> IO ()
compareFilesToOneCommon [String]
args2 String
file3
else [String] -> String -> IO ()
compareFilesToOneCommon [String]
args2 String
file3
else do
let growing :: [String]
growing = (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter ((String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"+g") (String -> Bool) -> (String -> String) -> String -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int -> String -> String
forall a. Int -> [a] -> [a]
take Int
2)) [String]
args00
(Int
gr1,Int
gr2)
| [String] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [String]
growing = (Int
0,Int
0)
| Bool
otherwise = let ([String]
nms,[String]
mms) = Int -> [String] -> ([String], [String])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
1 ([String] -> ([String], [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
2 ([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
4 ([String] -> ([String], [String]))
-> [String] -> ([String], [String])
forall a b. (a -> b) -> a -> b
$ [String]
growing
nm :: Maybe Int
nm = String -> Maybe Int
forall a. Read a => String -> Maybe a
readMaybe ([String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [String]
nms)::Maybe Int
mm :: Maybe Int
mm = String -> Maybe Int
forall a. Read a => String -> Maybe a
readMaybe ([String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [String]
mms)::Maybe Int in case (Maybe Int
nm,Maybe Int
mm) of
(Just Int
n4,Just Int
m4) -> if (Int
m4 Int -> Int -> Int
forall a. Integral a => a -> a -> a
`rem` Int
7) Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< (Int
n4 Int -> Int -> Int
forall a. Integral a => a -> a -> a
`rem` Int
7) then (Int
n4 Int -> Int -> Int
forall a. Integral a => a -> a -> a
`rem` Int
7 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1, Int
m4 Int -> Int -> Int
forall a. Integral a => a -> a -> a
`rem` Int
7 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) else (Int
0,Int
0)
(Maybe Int, Maybe Int)
_ -> (Int
0,Int
0)
args0 :: [String]
args0 = Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
drop Int
5 [String]
args000
[String
fileGWrSys, String
controlFile, String
segmentRulesFile, String
concatenationsFileP] = 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
. Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
take Int
5 ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ [String]
args00
(GWritingSystemPRPLX
wrs, [(Char, Char)]
ks, CharPhoneticClassification
arr, SegmentRulesG
gs, String
js, String
vs, Concatenations
ysss, String
xs, [String]
numericArgs, [String]
choices, Int
numberI, String
file) <- String
-> String
-> String
-> String
-> Int
-> [String]
-> IO
(GWritingSystemPRPLX, [(Char, Char)], CharPhoneticClassification,
SegmentRulesG, String, String, Concatenations, String, [String],
[String], Int, String)
files4Processment String
fileGWrSys String
controlFile String
segmentRulesFile String
concatenationsFileP Int
multiple [String]
args0
(Int, Int)
-> GWritingSystemPRPLX
-> [(Char, Char)]
-> CharPhoneticClassification
-> SegmentRulesG
-> (Double -> String -> [[[PRS]]] -> [[Double]])
-> [[[[PRS]]] -> [[Double]]]
-> Concatenations
-> String
-> String
-> String
-> Coeffs2
-> [String]
-> [String]
-> Int
-> String
-> IO ()
generalProcessment (Int
gr1,Int
gr2) GWritingSystemPRPLX
wrs [(Char, Char)]
ks CharPhoneticClassification
arr SegmentRulesG
gs Double -> String -> [[[PRS]]] -> [[Double]]
h [[[[PRS]]] -> [[Double]]]
qs Concatenations
ysss String
xs String
js String
vs Coeffs2
coeffs [String]
numericArgs [String]
choices Int
numberI String
file
files4Processment
:: FilePath
-> FilePath
-> FilePath
-> FilePath
-> Int
-> [String]
-> IO (GWritingSystemPRPLX, [(Char, Char)], CharPhoneticClassification, SegmentRulesG, String, String, Concatenations, String, [String], [String], Int, FilePath)
files4Processment :: String
-> String
-> String
-> String
-> Int
-> [String]
-> IO
(GWritingSystemPRPLX, [(Char, Char)], CharPhoneticClassification,
SegmentRulesG, String, String, Concatenations, String, [String],
[String], Int, String)
files4Processment String
fileGWrSys String
controlFile String
segmentRulesFile String
concatenationsFileP Int
multiple [String]
args0 = do
[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]
let args00 :: [String]
args00
| Int
multiple Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
1 = (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
takeWhile (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"+m") [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 -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
dropWhile (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"-m") [String]
args0)
| Bool
otherwise = [String]
args0
!args1 :: [String]
args1 = (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (\String
xs -> Int -> String -> String
forall a. Int -> [a] -> [a]
take Int
2 String
xs String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"+g") [String]
args00
!numericArgs :: [String]
numericArgs = (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter ((Char -> Bool) -> String -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all Char -> Bool
isDigit) [String]
args1
!choices :: [String]
choices
| Int
multiple Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
1 = 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]) -> [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
"-m") ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ [String]
args0
| Bool
otherwise = 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
. Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
take Int
2 ([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]
filter (\String
xs -> Int -> String -> String
forall a. Int -> [a] -> [a]
take Int
2 String
xs String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
"+g") ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ [String]
args0
!numberI :: Int
numberI = Int -> Maybe Int -> Int
forall a. a -> Maybe a -> a
fromMaybe Int
1 (String -> Maybe Int
forall a. Read a => String -> Maybe a
readMaybe ([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
forall a b. (a -> b) -> a -> b
$ [String]
numericArgs)::Maybe Int)
!file :: String
file = [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
forall a b. (a -> b) -> a -> b
$ [String]
args0
(GWritingSystemPRPLX
wrs, [(Char, Char)]
ks, CharPhoneticClassification
arr, SegmentRulesG
gs, String
js, String
vs, Concatenations
ysss, String
xs) = String
-> String
-> String
-> String
-> (GWritingSystemPRPLX, [(Char, Char)],
CharPhoneticClassification, SegmentRulesG, String, String,
Concatenations, String)
innerProcessmentSimple String
gwrsCnts String
controlConts String
segmentData String
concatenationsFile
in (GWritingSystemPRPLX, [(Char, Char)], CharPhoneticClassification,
SegmentRulesG, String, String, Concatenations, String, [String],
[String], Int, String)
-> IO
(GWritingSystemPRPLX, [(Char, Char)], CharPhoneticClassification,
SegmentRulesG, String, String, Concatenations, String, [String],
[String], Int, String)
forall (m :: * -> *) a. Monad m => a -> m a
return (GWritingSystemPRPLX
wrs, [(Char, Char)]
ks, CharPhoneticClassification
arr, SegmentRulesG
gs, String
js, String
vs, Concatenations
ysss, String
xs, [String]
numericArgs, [String]
choices, Int
numberI, String
file)