{-# LANGUAGE NoImplicitPrelude, BangPatterns #-}
module Phladiprelio.General.Simple where
import GHC.Base
import GHC.Enum (fromEnum,toEnum)
import GHC.Real (fromIntegral,(/),quot,rem,quotRem)
import Text.Show (Show(..))
import Phladiprelio.General.PrepareText
import Phladiprelio.General.Syllables
import Phladiprelio.General.Base
import System.Environment (getArgs)
import GHC.Num ((+),(-),(*),Integer)
import Text.Read (readMaybe)
import System.IO (putStrLn, FilePath,stdout,universalNewlineMode,hSetNewlineMode,getLine,appendFile,readFile)
import Rhythmicity.MarkerSeqs hiding (id)
import Rhythmicity.BasicF
import Data.List hiding (foldr)
import Data.Maybe (fromMaybe, mapMaybe, catMaybes,isNothing,fromJust)
import Data.Tuple (fst,snd)
import Data.Char (isDigit,isAlpha)
import CLI.Arguments
import CLI.Arguments.Get
import CLI.Arguments.Parsing
import GHC.Int (Int8)
import Data.Ord (comparing)
import Phladiprelio.PermutationsRepresent
import Phladiprelio.ConstraintsEncoded
import Phladiprelio.PermutationsArr
import Phladiprelio.StrictVG
import Numeric (showFFloat)
import Phladiprelio.Halfsplit
import System.Directory (doesFileExist,readable,writable,getPermissions,Permissions(..))
import Data.ReversedScientific
import Control.Concurrent.Async (mapConcurrently)
import Phladiprelio.Tests
import Phladiprelio.General.Datatype (readBasic3, readBasic4, readBasic1G)
import Phladiprelio.UniquenessPeriodsG
generalF
:: String
-> (String -> String)
-> (String, String)
-> Int
-> GWritingSystemPRPLX
-> [(Char,Char)]
-> CharPhoneticClassification
-> SegmentRulesG
-> String
-> String
-> ([[[PRS]]] -> [[Double]])
-> Int
-> HashCorrections
-> (Int8,[Int8])
-> Bool
-> Int
-> Bool
-> Int8
-> (FilePath, Int)
-> Bool
-> String
-> [String]
-> IO [String]
generalF :: String
-> (String -> String)
-> (String, String)
-> GQtyArgs
-> GWritingSystemPRPLX
-> [(Char, Char)]
-> CharPhoneticClassification
-> SegmentRulesG
-> String
-> String
-> ([[[PRS]]] -> [[Double]])
-> GQtyArgs
-> HashCorrections
-> (Int8, [Int8])
-> Bool
-> GQtyArgs
-> Bool
-> Int8
-> (String, GQtyArgs)
-> Bool
-> String
-> [String]
-> IO [String]
generalF String
selStr String -> String
selFun (String
prestr,String
poststr) GQtyArgs
lineNmb GWritingSystemPRPLX
wrs [(Char, Char)]
ks CharPhoneticClassification
arr SegmentRulesG
gs String
us String
vs [[[PRS]]] -> [[Double]]
h GQtyArgs
numTest HashCorrections
hc (Int8
grps,[Int8]
mxms) Bool
descending GQtyArgs
hashStep Bool
emptyline Int8
splitting (String
fs, GQtyArgs
code) Bool
concurrently String
initstr [String]
universalSet
| [String] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [String]
universalSet = let strOutput :: [String]
strOutput = [String
"You have specified the data and constraints on it that lead to no further possible options.", String
"Please, specify another data and constraints."] in (String -> IO ()) -> [String] -> IO [()]
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM String -> IO ()
putStrLn [String]
strOutput IO [()] -> IO [String] -> IO [String]
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [String] -> IO [String]
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return [String]
strOutput
| [String] -> GQtyArgs
forall a. [a] -> GQtyArgs
forall (t :: * -> *) a. Foldable t => t a -> GQtyArgs
length [String]
universalSet GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
1 = (String -> IO ()) -> [String] -> IO [()]
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM String -> IO ()
putStrLn [String]
universalSet IO [()] -> IO [String] -> IO [String]
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [String] -> IO [String]
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return [String]
universalSet
| Bool
otherwise = do
let syllN :: GQtyArgs
syllN = GWritingSystemPRPLX
-> CharPhoneticClassification
-> String
-> String
-> String
-> GQtyArgs
countSyll GWritingSystemPRPLX
wrs CharPhoneticClassification
arr String
us String
vs String
initstr
f :: Int8 -> [Int8] -> String -> Integer
f Int8
grps [Int8]
mxms
| String -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
selStr = [Integer] -> Integer
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum ([Integer] -> Integer)
-> (String -> [Integer]) -> String -> Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GQtyArgs
-> HashCorrections -> Int8 -> [Int8] -> [Double] -> [Integer]
forall a.
Ord a =>
GQtyArgs -> HashCorrections -> Int8 -> [Int8] -> [a] -> [Integer]
countHashes2G GQtyArgs
hashStep HashCorrections
hc Int8
grps [Int8]
mxms ([Double] -> [Integer])
-> (String -> [Double]) -> String -> [Integer]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> [[Double]])
-> ([[Double]] -> [Double]) -> String -> [Double]
forall {a}.
(String -> [a]) -> ([a] -> [Double]) -> String -> [Double]
readBasic3 ([[[PRS]]] -> [[Double]]
h ([[[PRS]]] -> [[Double]])
-> (String -> [[[PRS]]]) -> String -> [[Double]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GWritingSystemPRPLX
-> [(Char, Char)]
-> CharPhoneticClassification
-> SegmentRulesG
-> String
-> String
-> String
-> [[[PRS]]]
createSyllablesPL GWritingSystemPRPLX
wrs [(Char, Char)]
ks CharPhoneticClassification
arr SegmentRulesG
gs String
us String
vs) ([[Double]] -> [Double]
forall a. Monoid a => [a] -> a
mconcat)
| Bool
otherwise = Int16 -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int16 -> Integer) -> (String -> Int16) -> String -> Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> String -> Int16
forall (t1 :: * -> *) (t2 :: * -> *) (t3 :: * -> *) a.
(Foldable t1, Foldable t2, Foldable t3, Ord a) =>
t3 a -> t1 a -> t2 a -> Int16
diverse2GGL ((String -> String) -> String -> String
selectSounds String -> String
selFun String
selStr) (String
us String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
vs) (String -> Int16) -> (String -> String) -> String -> Int16
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PhoneticsRepresentationPLX -> String)
-> [PhoneticsRepresentationPLX] -> String
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap PhoneticsRepresentationPLX -> String
string1 ([PhoneticsRepresentationPLX] -> String)
-> (String -> [PhoneticsRepresentationPLX]) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GWritingSystemPRPLX -> String -> [PhoneticsRepresentationPLX]
stringToXG GWritingSystemPRPLX
wrs (String -> [PhoneticsRepresentationPLX])
-> (String -> String) -> String -> [PhoneticsRepresentationPLX]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
filter (\Char
c -> Bool -> Bool
not (Char -> Bool
isDigit Char
c) Bool -> Bool -> Bool
&& Char
c Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
/= Char
'_')
Handle -> NewlineMode -> IO ()
hSetNewlineMode Handle
stdout NewlineMode
universalNewlineMode
if GQtyArgs
numTest GQtyArgs -> GQtyArgs -> Bool
forall a. Ord a => a -> a -> Bool
>= GQtyArgs
0 Bool -> Bool -> Bool
&& GQtyArgs
numTest GQtyArgs -> GQtyArgs -> Bool
forall a. Ord a => a -> a -> Bool
<= GQtyArgs
179 Bool -> Bool -> Bool
&& GQtyArgs
numTest GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
/= GQtyArgs
1 then do
String -> IO ()
putStrLn String
"Feet Val Stat Proxim"
(if Bool
concurrently then ((Int8, [Int8]) -> IO String) -> [(Int8, [Int8])] -> IO [String]
forall (t :: * -> *) a b.
Traversable t =>
(a -> IO b) -> t a -> IO (t b)
mapConcurrently else ((Int8, [Int8]) -> IO String) -> [(Int8, [Int8])] -> IO [String]
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM)
(\(Int8
q,[Int8]
qs) -> let m :: GQtyArgs
m = GQtyArgs -> (Int8, [Int8]) -> GQtyArgs
stat1 GQtyArgs
syllN (Int8
q,[Int8]
qs)
(String
min1,String
max1) = (String -> String -> Ordering) -> [String] -> (String, String)
forall a. Ord a => (a -> a -> Ordering) -> [a] -> (a, a)
minMax11ByCList ((String -> Integer) -> String -> String -> Ordering
forall a b. Ord a => (b -> a) -> b -> b -> Ordering
comparing (Int8 -> [Int8] -> String -> Integer
f Int8
q [Int8]
qs)) [String]
universalSet
mx :: Integer
mx = Int8 -> [Int8] -> String -> Integer
f Int8
q [Int8]
qs String
max1
strTest :: String
strTest = (GQtyArgs -> String
forall a. Show a => a -> String
show (Int8 -> GQtyArgs
forall a. Enum a => a -> GQtyArgs
fromEnum Int8
q) String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
" | " String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` Integer -> String
forall a. Show a => a -> String
show Integer
mx String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
" " String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` GQtyArgs -> String
forall a. Show a => a -> String
show GQtyArgs
m String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
" -> " String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` Maybe GQtyArgs -> Double -> String -> String
forall a. RealFloat a => Maybe GQtyArgs -> a -> String -> String
showFFloat (GQtyArgs -> Maybe GQtyArgs
forall a. a -> Maybe a
Just GQtyArgs
3) (Double
100 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Integer -> Double
forall a b. (Integral a, Num b) => a -> b
fromIntegral Integer
mx Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ GQtyArgs -> Double
forall a b. (Integral a, Num b) => a -> b
fromIntegral GQtyArgs
m) String
"%" String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` (if GQtyArgs -> GQtyArgs -> GQtyArgs
forall a. Integral a => a -> a -> a
rem GQtyArgs
numTest GQtyArgs
10 GQtyArgs -> GQtyArgs -> Bool
forall a. Ord a => a -> a -> Bool
>= GQtyArgs
4
then let min1 :: String
min1 = (String -> String -> Ordering) -> [String] -> String
forall (t :: * -> *) a.
Foldable t =>
(a -> a -> Ordering) -> t a -> a
minimumBy ((String -> Integer) -> String -> String -> Ordering
forall a b. Ord a => (b -> a) -> b -> b -> Ordering
comparing (Int8 -> [Int8] -> String -> Integer
f Int8
q [Int8]
qs)) [String]
universalSet in (String
"\n" String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
min1 String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
"\n" String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
max1 String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
"\n")
else String
"")) in String -> IO ()
putStrLn String
strTest IO () -> IO String -> IO String
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> IO String
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return String
strTest) ([(Int8, [Int8])] -> IO [String])
-> ([[Int8]] -> [(Int8, [Int8])]) -> [[Int8]] -> IO [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Int8] -> [[Int8]] -> [(Int8, [Int8])]
forall a b. [a] -> [b] -> [(a, b)]
zip (GQtyArgs -> [Int8]
sel2 GQtyArgs
numTest) ([[Int8]] -> IO [String]) -> [[Int8]] -> IO [String]
forall a b. (a -> b) -> a -> b
$ (GQtyArgs -> [[Int8]]
sel GQtyArgs
numTest)
else let sRepresent :: [PhladiprelioGen]
sRepresent = (GQtyArgs -> (Integer, String) -> PhladiprelioGen)
-> [GQtyArgs] -> [(Integer, String)] -> [PhladiprelioGen]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\GQtyArgs
k (Integer
x, String
ys) -> GQtyArgs -> Integer -> String -> PhladiprelioGen
S GQtyArgs
k Integer
x String
ys) [GQtyArgs
1..] ([(Integer, String)] -> [PhladiprelioGen])
-> ([String] -> [(Integer, String)])
-> [String]
-> [PhladiprelioGen]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
(let h1 :: (Integer, b) -> (Integer, b)
h1 = if Bool
descending then (\(Integer
u,b
w) -> ((-Integer
1)Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
*Integer
u,b
w)) else (Integer, b) -> (Integer, b)
forall a. a -> a
id in ((Integer, String) -> (Integer, String))
-> [(Integer, String)] -> [(Integer, String)]
forall b a. Ord b => (a -> b) -> [a] -> [a]
sortOn (Integer, String) -> (Integer, String)
forall {b}. (Integer, b) -> (Integer, b)
h1) ([(Integer, String)] -> [(Integer, String)])
-> ([String] -> [(Integer, String)])
-> [String]
-> [(Integer, String)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> (Integer, String)) -> [String] -> [(Integer, String)]
forall a b. (a -> b) -> [a] -> [b]
map (\String
xss -> (Int8 -> [Int8] -> String -> Integer
f Int8
grps [Int8]
mxms String
xss, String
xss)) ([String] -> [PhladiprelioGen]) -> [String] -> [PhladiprelioGen]
forall a b. (a -> b) -> a -> b
$ [String]
universalSet
strOutput :: [String]
strOutput = (String -> [String] -> [String]
forall a. a -> [a] -> [a]
:[]) (String -> [String])
-> ([PhladiprelioGen] -> String) -> [PhladiprelioGen] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PhladiprelioGen -> Integer) -> Int8 -> [PhladiprelioGen] -> String
forall a b. (Show a, Eq b) => (a -> b) -> Int8 -> [a] -> String
halfsplit (\(S GQtyArgs
_ Integer
y String
_) -> Integer
y) (Int8 -> Int8
forall {a}. Integral a => a -> a
jjj Int8
splitting) ([PhladiprelioGen] -> [String]) -> [PhladiprelioGen] -> [String]
forall a b. (a -> b) -> a -> b
$ [PhladiprelioGen]
sRepresent
in do
[()]
_ <- (String -> IO ()) -> [String] -> IO [()]
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM String -> IO ()
putStrLn [String]
strOutput
let l1 :: GQtyArgs
l1 = [PhladiprelioGen] -> GQtyArgs
forall a. [a] -> GQtyArgs
forall (t :: * -> *) a. Foldable t => t a -> GQtyArgs
length [PhladiprelioGen]
sRepresent
if GQtyArgs
code GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== -GQtyArgs
1
then if GQtyArgs
lineNmb GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== -GQtyArgs
1 then [String] -> IO [String]
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return [String]
strOutput
else do
String -> String -> GQtyArgs -> [String] -> IO ()
print23 String
prestr String
poststr GQtyArgs
1 [String
initstr]
[String] -> IO [String]
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return [String]
strOutput
else do
String -> String -> GQtyArgs -> [String] -> IO ()
print23 String
prestr String
poststr GQtyArgs
1 [String
initstr]
GQtyArgs -> IO GQtyArgs
parseLineNumber GQtyArgs
l1 IO GQtyArgs -> (GQtyArgs -> IO [String]) -> IO [String]
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \GQtyArgs
num -> do
Permissions
permiss <- String -> IO Permissions
getPermissions String
fs
let writ :: Bool
writ = Permissions -> Bool
writable Permissions
permiss
readab :: Bool
readab = Permissions -> Bool
readable Permissions
permiss
if Bool
writ Bool -> Bool -> Bool
&& Bool
readab then do
if String -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
selStr then do
let lineOption :: PhladiprelioGen
lineOption = [PhladiprelioGen] -> PhladiprelioGen
forall a. HasCallStack => [a] -> a
head ([PhladiprelioGen] -> PhladiprelioGen)
-> ([PhladiprelioGen] -> [PhladiprelioGen])
-> [PhladiprelioGen]
-> PhladiprelioGen
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PhladiprelioGen -> Bool) -> [PhladiprelioGen] -> [PhladiprelioGen]
forall a. (a -> Bool) -> [a] -> [a]
filter (\(S GQtyArgs
k Integer
_ String
ts) -> GQtyArgs
k GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
num) ([PhladiprelioGen] -> PhladiprelioGen)
-> [PhladiprelioGen] -> PhladiprelioGen
forall a b. (a -> b) -> a -> b
$ [PhladiprelioGen]
sRepresent
textP :: String
textP = (\(S GQtyArgs
_ Integer
_ String
ts) -> String
ts) PhladiprelioGen
lineOption
sylls :: [[[PRS]]]
sylls = GWritingSystemPRPLX
-> [(Char, Char)]
-> CharPhoneticClassification
-> SegmentRulesG
-> String
-> String
-> String
-> [[[PRS]]]
createSyllablesPL GWritingSystemPRPLX
wrs [(Char, Char)]
ks CharPhoneticClassification
arr SegmentRulesG
gs String
us String
vs String
textP
if GQtyArgs
code GQtyArgs -> GQtyArgs -> Bool
forall a. Ord a => a -> a -> Bool
>= GQtyArgs
10 Bool -> Bool -> Bool
&& GQtyArgs
code GQtyArgs -> GQtyArgs -> Bool
forall a. Ord a => a -> a -> Bool
<= GQtyArgs
19 Bool -> Bool -> Bool
&& Int8
grps Int8 -> Int8 -> Bool
forall a. Eq a => a -> a -> Bool
== Int8
2
then do
let qqs :: [(String, Double)]
qqs = (String -> [[Double]])
-> ([[Double]] -> [Double])
-> (String -> [[PRS]])
-> ([[PRS]] -> [String])
-> [Read2]
-> [(String, Double)]
forall {a} {b}.
(String -> [a])
-> ([a] -> [Double])
-> (String -> [b])
-> ([b] -> [String])
-> [Read2]
-> [(String, Double)]
readBasic4 ([[[PRS]]] -> [[Double]]
h ([[[PRS]]] -> [[Double]])
-> (String -> [[[PRS]]]) -> String -> [[Double]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GWritingSystemPRPLX
-> [(Char, Char)]
-> CharPhoneticClassification
-> SegmentRulesG
-> String
-> String
-> String
-> [[[PRS]]]
createSyllablesPL GWritingSystemPRPLX
wrs [(Char, Char)]
ks CharPhoneticClassification
arr SegmentRulesG
gs String
us String
vs) ([[Double]] -> [Double]
forall a. Monoid a => [a] -> a
mconcat) ([[[PRS]]] -> [[PRS]]
forall a. Monoid a => [a] -> a
mconcat ([[[PRS]]] -> [[PRS]])
-> (String -> [[[PRS]]]) -> String -> [[PRS]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GWritingSystemPRPLX
-> [(Char, Char)]
-> CharPhoneticClassification
-> SegmentRulesG
-> String
-> String
-> String
-> [[[PRS]]]
createSyllablesPL GWritingSystemPRPLX
wrs [(Char, Char)]
ks CharPhoneticClassification
arr SegmentRulesG
gs String
us String
vs) (([PRS] -> String) -> [[PRS]] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map ((PRS -> Char) -> [PRS] -> String
forall a b. (a -> b) -> [a] -> [b]
map PRS -> Char
charS)) ([Read2] -> [(String, Double)])
-> (String -> [Read2]) -> String -> [(String, Double)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [Read2]
readBasic1G (String -> [(String, Double)]) -> String -> [(String, Double)]
forall a b. (a -> b) -> a -> b
$ String
textP
(String
breaks,[Integer]
rs) = [(String, Double)] -> (String, [Integer])
showZerosFor2PeriodMusic [(String, Double)]
qqs
String -> IO ()
putStrLn String
textP
String -> IO ()
putStrLn String
breaks
String -> IO ()
putStrLn (String -> IO ()) -> ([Integer] -> String) -> [Integer] -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Integer] -> String
forall a. Show a => a -> String
show ([Integer] -> IO ()) -> [Integer] -> IO ()
forall a b. (a -> b) -> a -> b
$ [Integer]
rs
String -> String -> IO ()
appendFile String
fs ((if GQtyArgs
code GQtyArgs -> GQtyArgs -> Bool
forall a. Ord a => a -> a -> Bool
>= GQtyArgs
15 then ([Integer] -> String
forall a. Show a => a -> String
show [Integer]
rs String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
"\n" String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
breaks String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
"\n") else String
"") String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` PhladiprelioGen -> GQtyArgs -> String
outputSel PhladiprelioGen
lineOption GQtyArgs
code)
else String -> String -> IO ()
appendFile String
fs (PhladiprelioGen -> GQtyArgs -> String
outputSel PhladiprelioGen
lineOption GQtyArgs
code)
else do
let lineOption :: PhladiprelioGen
lineOption = [PhladiprelioGen] -> PhladiprelioGen
forall a. HasCallStack => [a] -> a
head ([PhladiprelioGen] -> PhladiprelioGen)
-> ([PhladiprelioGen] -> [PhladiprelioGen])
-> [PhladiprelioGen]
-> PhladiprelioGen
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PhladiprelioGen -> Bool) -> [PhladiprelioGen] -> [PhladiprelioGen]
forall a. (a -> Bool) -> [a] -> [a]
filter (\(S GQtyArgs
k Integer
_ String
ts) -> GQtyArgs
k GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
num) ([PhladiprelioGen] -> PhladiprelioGen)
-> [PhladiprelioGen] -> PhladiprelioGen
forall a b. (a -> b) -> a -> b
$ [PhladiprelioGen]
sRepresent
String -> String -> IO ()
appendFile String
fs (PhladiprelioGen -> GQtyArgs -> String
outputSel PhladiprelioGen
lineOption GQtyArgs
code)
else String -> IO ()
forall a. HasCallStack => String -> a
error String
"The specified file cannot be used for appending the text! Please, specify another file!"
[String] -> IO [String]
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return []
where jjj :: a -> a
jjj a
kk = let (a
q1,a
r1) = a -> a -> (a, a)
forall a. Integral a => a -> a -> (a, a)
quotRem a
kk (if a
kk a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< a
0 then -a
10 else a
10) in a -> a -> Bool -> a
forall {a}. (Num a, Ord a) => a -> a -> Bool -> a
jjj' a
q1 a
r1 Bool
emptyline
jjj' :: a -> a -> Bool -> a
jjj' a
q1 a
r1 Bool
emptyline
| a
r1 a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== (-a
1) Bool -> Bool -> Bool
|| a
r1 a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== (-a
3) = -a
10a -> a -> a
forall a. Num a => a -> a -> a
*a
q1 a -> a -> a
forall a. Num a => a -> a -> a
+ (if Bool
emptyline then -a
5 else a
r1)
| a
r1 a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
1 Bool -> Bool -> Bool
|| a
r1 a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
3 = a
10a -> a -> a
forall a. Num a => a -> a -> a
*a
q1 a -> a -> a
forall a. Num a => a -> a -> a
+ (if Bool
emptyline then a
5 else a
r1)
| a
r1 a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< a
0 = -a
10a -> a -> a
forall a. Num a => a -> a -> a
*a
q1 a -> a -> a
forall a. Num a => a -> a -> a
+ (if Bool
emptyline then -a
4 else a
r1)
| Bool
otherwise = a
10a -> a -> a
forall a. Num a => a -> a -> a
*a
q1 a -> a -> a
forall a. Num a => a -> a -> a
+ (if Bool
emptyline then a
4 else a
r1)
data PhladiprelioGen = S Int Integer String deriving PhladiprelioGen -> PhladiprelioGen -> Bool
(PhladiprelioGen -> PhladiprelioGen -> Bool)
-> (PhladiprelioGen -> PhladiprelioGen -> Bool)
-> Eq PhladiprelioGen
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhladiprelioGen -> PhladiprelioGen -> Bool
== :: PhladiprelioGen -> PhladiprelioGen -> Bool
$c/= :: PhladiprelioGen -> PhladiprelioGen -> Bool
/= :: PhladiprelioGen -> PhladiprelioGen -> Bool
Eq
instance Show PhladiprelioGen where
show :: PhladiprelioGen -> String
show (S GQtyArgs
i Integer
j String
xs) = GQtyArgs -> Integer -> String
showBignum GQtyArgs
7 Integer
j String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
" " String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
xs String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
" " String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` GQtyArgs -> GQtyArgs -> String
forall a. Show a => GQtyArgs -> a -> String
showWithSpaces GQtyArgs
4 GQtyArgs
i
countSyll
:: GWritingSystemPRPLX
-> CharPhoneticClassification
-> String
-> String
-> String
-> Int
countSyll :: GWritingSystemPRPLX
-> CharPhoneticClassification
-> String
-> String
-> String
-> GQtyArgs
countSyll GWritingSystemPRPLX
wrs CharPhoneticClassification
arr String
us String
vs String
xs = Integer -> GQtyArgs
forall a. Enum a => a -> GQtyArgs
fromEnum (Integer -> GQtyArgs) -> (String -> Integer) -> String -> GQtyArgs
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PRS -> Integer -> Integer) -> Integer -> [PRS] -> Integer
forall a b. (a -> b -> b) -> b -> [a] -> b
foldr (\PRS
x Integer
y -> if PRS -> Bool
createsSyllable PRS
x then Integer
y Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
+ Integer
1 else Integer
y) Integer
0 ([PRS] -> Integer) -> (String -> [PRS]) -> String -> Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> [PRS]) -> [String] -> [PRS]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap (CharPhoneticClassification -> String -> [PRS]
str2PRSs CharPhoneticClassification
arr) ([String] -> [PRS]) -> (String -> [String]) -> String -> [PRS]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String]
words1 (String -> [String]) -> (String -> String) -> String -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Maybe Char) -> String -> String
forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe Char -> Maybe Char
g (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PhoneticsRepresentationPLX -> String)
-> [PhoneticsRepresentationPLX] -> String
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap PhoneticsRepresentationPLX -> String
string1 ([PhoneticsRepresentationPLX] -> String)
-> (String -> [PhoneticsRepresentationPLX]) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GWritingSystemPRPLX -> String -> [PhoneticsRepresentationPLX]
stringToXG GWritingSystemPRPLX
wrs (String -> GQtyArgs) -> String -> GQtyArgs
forall a b. (a -> b) -> a -> b
$ String
xs
where g :: Char -> Maybe Char
g :: Char -> Maybe Char
g Char
x
| Char
x Char -> String -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` String
us = Maybe Char
forall a. Maybe a
Nothing
| Char
x Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` String
vs = Char -> Maybe Char
forall a. a -> Maybe a
Just Char
x
| Bool
otherwise = Char -> Maybe Char
forall a. a -> Maybe a
Just Char
' '
words1 :: String -> [String]
words1 String
xs = if String -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
ts then [] else String
w String -> [String] -> [String]
forall a. a -> [a] -> [a]
: String -> [String]
words1 String
s''
where ts :: String
ts = (Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
dropWhile (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
' ') String
xs
(String
w, String
s'') = (Char -> Bool) -> String -> (String, String)
forall a. (a -> Bool) -> [a] -> ([a], [a])
break (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
' ') String
ts
{-# NOINLINE words1 #-}
stat1 :: Int -> (Int8,[Int8]) -> Int
stat1 :: GQtyArgs -> (Int8, [Int8]) -> GQtyArgs
stat1 GQtyArgs
n (Int8
k, [Int8]
ks) = (GQtyArgs, GQtyArgs) -> GQtyArgs
forall a b. (a, b) -> a
fst (GQtyArgs
n GQtyArgs -> GQtyArgs -> (GQtyArgs, GQtyArgs)
`quotRemInt` Int8 -> GQtyArgs
forall a. Enum a => a -> GQtyArgs
fromEnum Int8
k) GQtyArgs -> GQtyArgs -> GQtyArgs
forall a. Num a => a -> a -> a
* [Int8] -> GQtyArgs
forall a. [a] -> GQtyArgs
forall (t :: * -> *) a. Foldable t => t a -> GQtyArgs
length [Int8]
ks
outputSel :: PhladiprelioGen -> Int -> String
outputSel :: PhladiprelioGen -> GQtyArgs -> String
outputSel (S GQtyArgs
x1 Integer
y1 String
ts) GQtyArgs
code
| GQtyArgs
code GQtyArgs -> GQtyArgs -> Bool
forall a. Ord a => a -> a -> Bool
< GQtyArgs
0 = []
| GQtyArgs
code GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
1 Bool -> Bool -> Bool
|| GQtyArgs
code GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
11 Bool -> Bool -> Bool
|| GQtyArgs
code GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
16 = String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate String
" " [GQtyArgs -> String
forall a. Show a => a -> String
show GQtyArgs
x1, String
ts] String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
"\n"
| GQtyArgs
code GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
2 Bool -> Bool -> Bool
|| GQtyArgs
code GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
12 Bool -> Bool -> Bool
|| GQtyArgs
code GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
17 = String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate String
" " [Integer -> String
forall a. Show a => a -> String
show Integer
y1, String
ts] String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
"\n"
| GQtyArgs
code GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
3 Bool -> Bool -> Bool
|| GQtyArgs
code GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
13 Bool -> Bool -> Bool
|| GQtyArgs
code GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
18 = String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate String
" " [GQtyArgs -> String
forall a. Show a => a -> String
show GQtyArgs
x1, String
ts, Integer -> String
forall a. Show a => a -> String
show Integer
y1] String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
"\n"
| GQtyArgs
code GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
4 Bool -> Bool -> Bool
|| GQtyArgs
code GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
14 Bool -> Bool -> Bool
|| GQtyArgs
code GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
19 = String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate String
" " [GQtyArgs -> String
forall a. Show a => a -> String
show GQtyArgs
x1, Integer -> String
forall a. Show a => a -> String
show Integer
y1] String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
"\n"
| Bool
otherwise = String
ts String -> String -> String
forall a. Monoid a => a -> a -> a
`mappend` String
"\n"
parseLineNumber :: Int -> IO Int
parseLineNumber :: GQtyArgs -> IO GQtyArgs
parseLineNumber GQtyArgs
l1 = do
String -> IO ()
putStrLn String
"Please, specify the number of the option to be written to the file specified: "
String
number <- IO String
getLine
let num :: Maybe GQtyArgs
num = String -> Maybe GQtyArgs
forall a. Read a => String -> Maybe a
readMaybe ((Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
filter Char -> Bool
isDigit String
number)::Maybe Int
if Maybe GQtyArgs -> Bool
forall a. Maybe a -> Bool
isNothing Maybe GQtyArgs
num Bool -> Bool -> Bool
|| Maybe GQtyArgs
num Maybe GQtyArgs -> Maybe GQtyArgs -> Bool
forall a. Ord a => a -> a -> Bool
> GQtyArgs -> Maybe GQtyArgs
forall a. a -> Maybe a
Just GQtyArgs
l1 Bool -> Bool -> Bool
|| Maybe GQtyArgs
num Maybe GQtyArgs -> Maybe GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs -> Maybe GQtyArgs
forall a. a -> Maybe a
Just GQtyArgs
0
then GQtyArgs -> IO GQtyArgs
parseLineNumber GQtyArgs
l1
else GQtyArgs -> IO GQtyArgs
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (GQtyArgs -> IO GQtyArgs)
-> (Maybe GQtyArgs -> GQtyArgs) -> Maybe GQtyArgs -> IO GQtyArgs
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe GQtyArgs -> GQtyArgs
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe GQtyArgs -> IO GQtyArgs) -> Maybe GQtyArgs -> IO GQtyArgs
forall a b. (a -> b) -> a -> b
$ Maybe GQtyArgs
num
argsProcessing
:: [[String]]
-> [[String]]
-> String
-> IO (String, String, String, Int, Bool, Int8, FilePath, Int, Bool, String, [String])
argsProcessing :: [[String]]
-> [[String]]
-> String
-> IO
(String, String, String, GQtyArgs, Bool, Int8, String, GQtyArgs,
Bool, String, [String])
argsProcessing [[String]]
ysss [[String]]
zsss String
xs = do
[String]
args0 <- IO [String]
getArgs
let (Args
argsC, [String]
args) = (Char, Char) -> CLSpecifications -> [String] -> (Args, [String])
takeCs1R (Char
'+',Char
'-') CLSpecifications
cSpecs [String]
args0
(Args
argsB, [String]
args11) = CLSpecifications -> [String] -> (Args, [String])
takeBsR CLSpecifications
bSpecs [String]
args
prepare :: Bool
prepare = (String -> Bool) -> [String] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"-p") [String]
args11
emptyline :: Bool
emptyline = (String -> Bool) -> [String] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"+l") [String]
args11
splitting :: Int8
splitting = Int8 -> Maybe Int8 -> Int8
forall a. a -> Maybe a -> a
fromMaybe Int8
50 (String -> Maybe Int8
forall a. Read a => String -> Maybe a
readMaybe ([String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([String] -> String) -> (Args -> [String]) -> Args -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Args -> [String]
forall (t :: * -> *).
Foldable t =>
String -> t Arguments -> [String]
getB String
"+w" (Args -> String) -> Args -> String
forall a b. (a -> b) -> a -> b
$ Args
argsB)::Maybe Int8)
concurrently :: Bool
concurrently = (String -> Bool) -> [String] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"-C") [String]
args11
selStr :: String
selStr = [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([String] -> String) -> (Args -> [String]) -> Args -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Args -> [String]
forall (t :: * -> *).
Foldable t =>
String -> t Arguments -> [String]
getB String
"+ul" (Args -> String) -> Args -> String
forall a b. (a -> b) -> a -> b
$ Args
argsB
filedata :: [String]
filedata = String -> Args -> [String]
forall (t :: * -> *).
Foldable t =>
String -> t Arguments -> [String]
getB String
"+f" Args
argsB
multiline2 :: [String]
multiline2 = String -> Args -> [String]
forall (t :: * -> *).
Foldable t =>
String -> t Arguments -> [String]
getB String
"+m" Args
argsB
(String
fileread,GQtyArgs
lineNmb)
| [String] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [String]
multiline2 = (String
"",-GQtyArgs
1)
| [String] -> GQtyArgs
forall a. [a] -> GQtyArgs
forall (t :: * -> *) a. Foldable t => t a -> GQtyArgs
length [String]
multiline2 GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
2 = ([String] -> String
forall a. HasCallStack => [a] -> a
head [String]
multiline2, GQtyArgs -> Maybe GQtyArgs -> GQtyArgs
forall a. a -> Maybe a -> a
fromMaybe GQtyArgs
1 (String -> Maybe GQtyArgs
forall a. Read a => String -> Maybe a
readMaybe ([String] -> String
forall a. HasCallStack => [a] -> a
last [String]
multiline2)::Maybe Int))
| Bool
otherwise = ([String] -> String
forall a. HasCallStack => [a] -> a
head [String]
multiline2, GQtyArgs
1)
([String]
arg3s,String
prestr,String
poststr) <- do
if GQtyArgs
lineNmb GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
/= -GQtyArgs
1 then do
String
txtFromFile <- String -> IO String
readFile String
fileread
let lns :: [String]
lns = String -> [String]
lines String
txtFromFile
ln0 :: GQtyArgs
ln0 = GQtyArgs -> GQtyArgs -> GQtyArgs
forall a. Ord a => a -> a -> a
max GQtyArgs
1 (GQtyArgs -> GQtyArgs -> GQtyArgs
forall a. Ord a => a -> a -> a
min GQtyArgs
lineNmb ([String] -> GQtyArgs
forall a. [a] -> GQtyArgs
forall (t :: * -> *) a. Foldable t => t a -> GQtyArgs
length [String]
lns))
ln_1 :: GQtyArgs
ln_1
| GQtyArgs
ln0 GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
1 = GQtyArgs
0
| Bool
otherwise = GQtyArgs
ln0 GQtyArgs -> GQtyArgs -> GQtyArgs
forall a. Num a => a -> a -> a
- GQtyArgs
1
ln1 :: GQtyArgs
ln1
| GQtyArgs
ln0 GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== [String] -> GQtyArgs
forall a. [a] -> GQtyArgs
forall (t :: * -> *) a. Foldable t => t a -> GQtyArgs
length [String]
lns = GQtyArgs
0
| Bool
otherwise = GQtyArgs
ln0 GQtyArgs -> GQtyArgs -> GQtyArgs
forall a. Num a => a -> a -> a
+ GQtyArgs
1
lineF :: String
lineF = [String]
lns [String] -> GQtyArgs -> String
forall a. HasCallStack => [a] -> GQtyArgs -> a
!! (GQtyArgs
ln0 GQtyArgs -> GQtyArgs -> GQtyArgs
forall a. Num a => a -> a -> a
- GQtyArgs
1)
line_1F :: String
line_1F
| GQtyArgs
ln_1 GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
0 = []
| Bool
otherwise = [String]
lns [String] -> GQtyArgs -> String
forall a. HasCallStack => [a] -> GQtyArgs -> a
!! (GQtyArgs
ln_1 GQtyArgs -> GQtyArgs -> GQtyArgs
forall a. Num a => a -> a -> a
- GQtyArgs
1)
line1F :: String
line1F
| GQtyArgs
ln1 GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
0 = []
| Bool
otherwise = [String]
lns [String] -> GQtyArgs -> String
forall a. HasCallStack => [a] -> GQtyArgs -> a
!! (GQtyArgs
ln1 GQtyArgs -> GQtyArgs -> GQtyArgs
forall a. Num a => a -> a -> a
- GQtyArgs
1)
([String], String, String) -> IO ([String], String, String)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (([String], String, String) -> IO ([String], String, String))
-> ([String], String, String) -> IO ([String], String, String)
forall a b. (a -> b) -> a -> b
$ (String -> [String]
words String
lineF, String
line_1F,String
line1F)
else ([String], String, String) -> IO ([String], String, String)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ([String]
args11, [], [])
let (String
filesave,GQtyArgs
codesave)
| [String] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [String]
filedata = (String
"",-GQtyArgs
1)
| [String] -> GQtyArgs
forall a. [a] -> GQtyArgs
forall (t :: * -> *) a. Foldable t => t a -> GQtyArgs
length [String]
filedata GQtyArgs -> GQtyArgs -> Bool
forall a. Eq a => a -> a -> Bool
== GQtyArgs
2 = ([String] -> String
forall a. HasCallStack => [a] -> a
head [String]
filedata, GQtyArgs -> Maybe GQtyArgs -> GQtyArgs
forall a. a -> Maybe a -> a
fromMaybe GQtyArgs
0 (String -> Maybe GQtyArgs
forall a. Read a => String -> Maybe a
readMaybe ([String] -> String
forall a. HasCallStack => [a] -> a
last [String]
filedata)::Maybe Int))
| Bool
otherwise = ([String] -> String
forall a. HasCallStack => [a] -> a
head [String]
filedata,GQtyArgs
0)
ll :: [String]
ll = let maxWordsNum :: GQtyArgs
maxWordsNum = (if (String -> Bool) -> [String] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"+x") [String]
arg3s then GQtyArgs
9 else GQtyArgs
7) in GQtyArgs -> [String] -> [String]
forall a. GQtyArgs -> [a] -> [a]
take GQtyArgs
maxWordsNum ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (if Bool
prepare then [String] -> [String]
forall a. a -> a
id else String -> [String]
words (String -> [String])
-> ([String] -> String) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> String
forall a. Monoid a => [a] -> a
mconcat ([String] -> String)
-> ([String] -> [String]) -> [String] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GQtyArgs
-> [[String]] -> [[String]] -> String -> String -> [String]
prepareTextN GQtyArgs
maxWordsNum [[String]]
ysss [[String]]
zsss String
xs (String -> [String])
-> ([String] -> String) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> String
unwords) ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ [String]
arg3s
l :: GQtyArgs
l = [String] -> GQtyArgs
forall a. [a] -> GQtyArgs
forall (t :: * -> *) a. Foldable t => t a -> GQtyArgs
length [String]
ll
argCs :: [EncodedCnstrs]
argCs = [Maybe EncodedCnstrs] -> [EncodedCnstrs]
forall a. [Maybe a] -> [a]
catMaybes ((String -> Maybe EncodedCnstrs)
-> [String] -> [Maybe EncodedCnstrs]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (GQtyArgs -> String -> Maybe EncodedCnstrs
readMaybeECG GQtyArgs
l) ([String] -> [Maybe EncodedCnstrs])
-> (Args -> [String]) -> Args -> [Maybe EncodedCnstrs]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Args -> [String]
forall (t :: * -> *).
Foldable t =>
String -> t Arguments -> [String]
getC String
"+a" (Args -> [Maybe EncodedCnstrs]) -> Args -> [Maybe EncodedCnstrs]
forall a b. (a -> b) -> a -> b
$ Args
argsC)
argCBs :: String
argCBs = [String] -> String
unwords ([String] -> String) -> (Args -> [String]) -> Args -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Args -> [String]
forall (t :: * -> *).
Foldable t =>
String -> t Arguments -> [String]
getC String
"+b" (Args -> String) -> Args -> String
forall a b. (a -> b) -> a -> b
$ Args
argsC
!perms :: [Array GQtyArgs GQtyArgs]
perms
| Bool -> Bool
not (String -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
argCBs) = GQtyArgs
-> String -> [Array GQtyArgs GQtyArgs] -> [Array GQtyArgs GQtyArgs]
filterGeneralConv GQtyArgs
l String
argCBs ([Array GQtyArgs GQtyArgs] -> [Array GQtyArgs GQtyArgs])
-> (GQtyArgs -> [Array GQtyArgs GQtyArgs])
-> GQtyArgs
-> [Array GQtyArgs GQtyArgs]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GQtyArgs -> [Array GQtyArgs GQtyArgs]
genPermutationsL (GQtyArgs -> [Array GQtyArgs GQtyArgs])
-> GQtyArgs -> [Array GQtyArgs GQtyArgs]
forall a b. (a -> b) -> a -> b
$ GQtyArgs
l
| [EncodedCnstrs] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [EncodedCnstrs]
argCs = GQtyArgs -> [Array GQtyArgs GQtyArgs]
genPermutationsL GQtyArgs
l
| Bool
otherwise = [EncodedCnstrs]
-> [Array GQtyArgs GQtyArgs] -> [Array GQtyArgs GQtyArgs]
forall (t :: * -> *).
(InsertLeft t (Array GQtyArgs GQtyArgs),
Monoid (t (Array GQtyArgs GQtyArgs))) =>
[EncodedCnstrs]
-> t (Array GQtyArgs GQtyArgs) -> t (Array GQtyArgs GQtyArgs)
decodeLConstraints [EncodedCnstrs]
argCs ([Array GQtyArgs GQtyArgs] -> [Array GQtyArgs GQtyArgs])
-> (GQtyArgs -> [Array GQtyArgs GQtyArgs])
-> GQtyArgs
-> [Array GQtyArgs GQtyArgs]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GQtyArgs -> [Array GQtyArgs GQtyArgs]
genPermutationsL (GQtyArgs -> [Array GQtyArgs GQtyArgs])
-> GQtyArgs -> [Array GQtyArgs GQtyArgs]
forall a b. (a -> b) -> a -> b
$ GQtyArgs
l
basiclineoption :: String
basiclineoption = [String] -> String
unwords [String]
arg3s
variants1 :: [String]
variants1 = Char
-> (String -> String)
-> ([String] -> [String])
-> (String -> String)
-> [Array GQtyArgs GQtyArgs]
-> [String]
-> [String]
forall a (t :: * -> *).
(Eq a, Foldable t, InsertLeft t a, Monoid (t a),
Monoid (t (t a))) =>
a
-> (t a -> [a])
-> (t (t a) -> [[a]])
-> ([a] -> t a)
-> [Array GQtyArgs GQtyArgs]
-> t (t a)
-> [t a]
uniquenessVariants2GNBL Char
' ' String -> String
forall a. a -> a
id [String] -> [String]
forall a. a -> a
id String -> String
forall a. a -> a
id [Array GQtyArgs GQtyArgs]
perms [String]
ll
(String, String, String, GQtyArgs, Bool, Int8, String, GQtyArgs,
Bool, String, [String])
-> IO
(String, String, String, GQtyArgs, Bool, Int8, String, GQtyArgs,
Bool, String, [String])
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (String
selStr, String
prestr, String
poststr, GQtyArgs
lineNmb, Bool
emptyline, Int8
splitting, String
filesave, GQtyArgs
codesave, Bool
concurrently, String
basiclineoption, [String]
variants1)
processingF
:: (String -> String)
-> GWritingSystemPRPLX
-> [(Char,Char)]
-> CharPhoneticClassification
-> SegmentRulesG
-> String
-> String
-> ([[[PRS]]] -> [[Double]])
-> Int
-> HashCorrections
-> (Int8,[Int8])
-> [[String]]
-> [[String]]
-> Bool
-> Int
-> String
-> IO ()
processingF :: (String -> String)
-> GWritingSystemPRPLX
-> [(Char, Char)]
-> CharPhoneticClassification
-> SegmentRulesG
-> String
-> String
-> ([[[PRS]]] -> [[Double]])
-> GQtyArgs
-> HashCorrections
-> (Int8, [Int8])
-> [[String]]
-> [[String]]
-> Bool
-> GQtyArgs
-> String
-> IO ()
processingF String -> String
selFun GWritingSystemPRPLX
wrs [(Char, Char)]
ks CharPhoneticClassification
arr SegmentRulesG
gs String
us String
vs [[[PRS]]] -> [[Double]]
h GQtyArgs
numTest HashCorrections
hc (Int8
grps,[Int8]
mxms) [[String]]
ysss [[String]]
zsss Bool
descending GQtyArgs
hashStep String
xs = [[String]]
-> [[String]]
-> String
-> IO
(String, String, String, GQtyArgs, Bool, Int8, String, GQtyArgs,
Bool, String, [String])
argsProcessing [[String]]
ysss [[String]]
zsss String
xs IO
(String, String, String, GQtyArgs, Bool, Int8, String, GQtyArgs,
Bool, String, [String])
-> ((String, String, String, GQtyArgs, Bool, Int8, String,
GQtyArgs, Bool, String, [String])
-> IO ())
-> IO ()
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \(String
selStr, String
prestr, String
poststr, GQtyArgs
lineNmb, Bool
emptyline, Int8
splitting, String
filesave, GQtyArgs
codesave, Bool
concurrently, String
basiclineoption, [String]
variants1) -> String
-> (String -> String)
-> (String, String)
-> GQtyArgs
-> GWritingSystemPRPLX
-> [(Char, Char)]
-> CharPhoneticClassification
-> SegmentRulesG
-> String
-> String
-> ([[[PRS]]] -> [[Double]])
-> GQtyArgs
-> HashCorrections
-> (Int8, [Int8])
-> Bool
-> GQtyArgs
-> Bool
-> Int8
-> (String, GQtyArgs)
-> Bool
-> String
-> [String]
-> IO [String]
generalF String
selStr String -> String
selFun (String
prestr,String
poststr) GQtyArgs
lineNmb GWritingSystemPRPLX
wrs [(Char, Char)]
ks CharPhoneticClassification
arr SegmentRulesG
gs String
us String
vs [[[PRS]]] -> [[Double]]
h GQtyArgs
numTest HashCorrections
hc (Int8
grps,[Int8]
mxms) Bool
descending GQtyArgs
hashStep Bool
emptyline Int8
splitting (String
filesave, GQtyArgs
codesave) Bool
concurrently String
basiclineoption [String]
variants1 IO [String] -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
{-# INLINE processingF #-}
cSpecs :: CLSpecifications
cSpecs :: CLSpecifications
cSpecs = [String] -> [GQtyArgs] -> CLSpecifications
forall a b. [a] -> [b] -> [(a, b)]
zip [String
"+a",String
"+b"] ([GQtyArgs] -> CLSpecifications)
-> ([GQtyArgs] -> [GQtyArgs]) -> [GQtyArgs] -> CLSpecifications
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [GQtyArgs] -> [GQtyArgs]
forall a. HasCallStack => [a] -> [a]
cycle ([GQtyArgs] -> CLSpecifications) -> [GQtyArgs] -> CLSpecifications
forall a b. (a -> b) -> a -> b
$ [-GQtyArgs
1]
bSpecs :: CLSpecifications
bSpecs :: CLSpecifications
bSpecs = [(String
"+f",GQtyArgs
2),(String
"+m",GQtyArgs
2),(String
"+ul",GQtyArgs
1),(String
"+w",GQtyArgs
1)]
selectSounds
:: (String -> String)
-> String
-> String
selectSounds :: (String -> String) -> String -> String
selectSounds String -> String
g String
xs = String -> String
forall {a}. Eq a => [a] -> [a]
f (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. 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) -> [String] -> String
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap String -> String
g ([String] -> String) -> (String -> [String]) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String]
words (String -> [String]) -> (String -> String) -> String -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
map (\Char
c -> if Char
c Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'.' then Char
' ' else Char
c) (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ String
us
where (String
ts,String
us) = (Char -> Bool) -> String -> (String, String)
forall a. (a -> Bool) -> [a] -> ([a], [a])
break (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'.') (String -> (String, String))
-> (String -> String) -> String -> (String, String)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
filter (\Char
c -> Char
c Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
/= Char
'H' Bool -> Bool -> Bool
&& Char
c Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
/= Char
'G') (String -> (String, String)) -> String -> (String, String)
forall a b. (a -> b) -> a -> b
$ String
xs
f :: [a] -> [a]
f (a
x:ts :: [a]
ts@(a
y:[a]
xs))
| a
x a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
y = [a] -> [a]
f [a]
ts
| Bool
otherwise = a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a] -> [a]
f [a]
ts
f [a]
xs = [a]
xs