packages feed

phladiprelio-ukrainian-simple-0.1.0.0: app/Main.hs

{-# LANGUAGE NoImplicitPrelude #-}

module Main where

import GHC.Base
import GHC.Num ((-))
import Text.Show (show)
import Text.Read (readMaybe)
import System.IO (putStrLn, FilePath)
import Rhythmicity.MarkerSeqs hiding (id) 
import Rhythmicity.BasicF 
import Data.List
import Data.Maybe (fromMaybe) 
import Data.Tuple (fst,snd)
import Phladiprelio.Ukrainian.PrepareText 
import Phladiprelio.Ukrainian.Syllable 
import Phladiprelio.Ukrainian.SyllableDouble 
import System.Environment (getArgs)
import GHC.Int (Int8)
import CLI.Arguments
import CLI.Arguments.Get
import CLI.Arguments.Parsing
import Phladiprelio.Ukrainian.ReadDurations

generalF :: FilePath -> HashCorrections -> (Int8,[Int8]) -> Int -> String -> IO [()]
generalF file hc (grps,mxms) k rs = do
   syllableDurationsDs <- readSyllableDurations file
   mapM (\(x,y) -> putStrLn (show x `mappend` (' ':y)))  . sortOn id . map ((\xss -> (f syllableDurationsDs xss, xss)) . unwords) . permutations . words $ rs
     where f syllableDurationsDs = sum . countHashesG hc grps mxms . mconcat . 
                (if null file then case k of { 1 -> syllableDurationsD; 2 -> syllableDurationsD2; 3 -> syllableDurationsD3; 4 -> syllableDurationsD4} 
                         else  if length syllableDurationsDs >= k then syllableDurationsDs !! (k - 1) else syllableDurationsD2) . createSyllablesUkrS

main :: IO ()
main = do
  args <- getArgs
  let (argsB, arg2s) = takeBsR bSpecs args
      fileDu = concat . getB "+d" $ argsB
      sylD = let k = snd (fromMaybe 2 (readMaybe (concat . getB "+s" $ argsB)::Maybe Int) `quotRemInt` 4) in if k == 0 then 4 else k
      hc = readHashCorrections . concat . getB "+h" $ argsB
      grpp = grouppingR . concat . getB "+r" $ argsB
      str1 = unwords . take 7 . words . mconcat . prepareText . unwords $ arg2s
  generalF fileDu hc grpp sylD str1 >> return ()

bSpecs :: CLSpecifications
bSpecs = zip ["+d","+h","+r","+s"] . cycle $ [1]