string-interpreter-0.8.0.0: Interpreter/ArgsConversion.hs
{-# LANGUAGE NoImplicitPrelude #-}
-- |
-- Module : Interpreter.ArgsConversion
-- Copyright : (c) OleksandrZhabenko 2020-2023
-- License : MIT
-- Stability : Experimental
-- Maintainer : oleksandr.zhabenko@yahoo.com
--
-- Prints the rearrangements with the \"property\" information for the Ukrainian language text.
{-# OPTIONS_GHC -threaded -rtsopts #-}
module Interpreter.ArgsConversion where
import GHC.Base
import Data.Tuple
import GHC.List
import Data.List (words)
import GHC.Num
import GHC.Real (rem)
import Phladiprelio.Coeffs
import Interpreter.StringConversion (readFileIfAny)
import Data.Maybe (fromMaybe)
import Text.Read (readMaybe)
import CLI.Arguments
import CLI.Arguments.Parsing
import CLI.Arguments.Get
import Phladiprelio.PermutationsRepresent
argsConversion :: String -> ([Char], PermutationsType, Bool, Bool, [String], Coeffs2, Coeffs2, [String], Bool, Bool, Int, Int)
argsConversion xs =
let args50 = words xs
(cfWX,args501) = takeBsR [("+x",1)] args50
coeffsWX = readCF . concat . getB "+x" $ cfWX -- The line argument that starts with \"+x\".
(argsA,argsB,argsC1,argss) = args2Args31R fstCharsMA specs1 args501
pairwisePermutations = bTransform2Perms . getB "+p" $ argsB
fileDu = concat . getB "+d" $ argsB -- Whether to use the own PhoPaaW weights (durations) from the file specified here. Is used only in @phonetic-languages-simplified-examples-array@ package
lstW = listA ["+b","+bl"] argsA -- If one of the line options is \"+b\" or \"+bl\" then the last word of the line will remain the last one.
jstL0 = listA ["+l","+bl"] argsA -- If one of the line options is \"+l\" or \"+bl\" then the program outputs just lines without metrices values.
nativeUkrainian = oneA "+u" argsA -- If one of the line options is \"+u\" then the informational messages are printed in Ukrainian, otherwise (the default behaviour) they are in English.
-- Is used only in @phonetic-languages-simplified-examples-array@ package.
verbose0 = concat . getB "+v" $ argsB -- ^ Whether to use more verbose output
verbose = abs (fromMaybe 0 (readMaybe verbose0::Maybe Int) `rem` 4)
syllables = oneB "+s" argsB -- Whether to use syllable durations, up to 9 different sets.
syllablesVs = max 1 . fromMaybe 1 $ (readMaybe (concat . getB "+s" $ argsB)::Maybe Int) -- Number of sets of syllable durations to be used
args0 = snd . takeAsR aSpecs . snd . takeBsR [("+d",1)] $ args501
args = snd . takeCs1R fstCharsMA [("+m",-1)] $ argss
coeffs = readCF . concat . take 1 $ args -- The first line argument.
in (fileDu,pairwisePermutations,nativeUkrainian,jstL0,args0,coeffs,coeffsWX,args,lstW,syllables,syllablesVs,verbose)
aSpecs :: CLSpecifications
aSpecs = zip ["+b","+l","+bl","+u"] . cycle $ [0]
aSpcs :: [String] -> Args
aSpcs = fst . takeAsR aSpecs
cSpecs1MA :: CLSpecifications
cSpecs1MA = [("+m",-1)]
fstCharsMA :: FirstChars
fstCharsMA = ('+','-')
bSpecs :: CLSpecifications
bSpecs = zip ["+d","+p","+s","+v"] . cycle $ [1]
bSpcs :: [String] -> Args
bSpcs = fst . takeBsR bSpecs
specs1 :: CLSpecifications
specs1 = aSpecs `mappend` bSpecs `mappend` cSpecs1MA