{-# 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]