packages feed

aftovolio 0.7.1.0 → 0.8.0.0

raw patch · 7 files changed

+118/−70 lines, 7 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Aftovolio.Halfsplit: noChangeF :: Bool -> ([a] -> [a]) -> [a] -> [a]
+ Aftovolio.Halfsplit: noChangeReverse :: Bool -> [a] -> [a]
+ Aftovolio.Halfsplit: showFiltering :: Show a => Bool -> a -> String
+ Aftovolio.Halfsplit: showWithSpacesBefore :: String -> [String] -> [String] -> [String]
+ Aftovolio.Halfsplit: splitTwo :: (Show a, Eq b) => Bool -> Bool -> Int -> (a -> b) -> [a] -> ([String], [String])
+ Aftovolio.Halfsplit: splitTwoBasic :: Show a => Bool -> Bool -> Int -> [a] -> ([String], [String])

Files

Aftovolio/General/Simple.hs view
@@ -29,6 +29,7 @@ import Data.ChooseLine2 import Data.List hiding (foldr, null) import qualified Data.List as L (null,lines)+import Data.Lists.FLines (newLineEnding) import Data.Maybe (catMaybes, fromJust, fromMaybe, isNothing, mapMaybe) import Data.MinMax1 (minMax11By) import Data.Ord (Down (..), comparing)@@ -246,7 +247,7 @@             `mappend` " "             `mappend` xs             `mappend` "  "-            `mappend` showWithSpaces 4 i+            `mappend` showWithSpaces 6 i -- changed for +x command line option  instance NFData AftovolioGen @@ -297,14 +298,14 @@ outputSel (S x1 y1 ts) code     | code < 0 = []     | code == 1 || code == 11 || code == 16 =-        intercalate " " [show x1, ts] `mappend` "\n"+        intercalate " " [show x1, ts] `mappend` newLineEnding     | code == 2 || code == 12 || code == 17 =-        intercalate " " [show y1, ts] `mappend` "\n"+        intercalate " " [show y1, ts] `mappend` newLineEnding     | code == 3 || code == 13 || code == 18 =-        intercalate " " [show x1, ts, show y1] `mappend` "\n"+        intercalate " " [show x1, ts, show y1] `mappend` newLineEnding     | code == 4 || code == 14 || code == 19 =-        intercalate " " [show x1, show y1] `mappend` "\n"-    | otherwise = ts `mappend` "\n"+        intercalate " " [show x1, show y1] `mappend` newLineEnding+    | otherwise = ts `mappend` newLineEnding  parseLineNumber :: Int -> IO Int parseLineNumber l1 = do@@ -652,11 +653,11 @@                         `mappend` showFFloat (Just 3) (100 * fromIntegral mx / fromIntegral m) "%"                         `mappend` ( if rem numTest 10 >= 4                                         then -                                            ( "\n"+                                            ( newLineEnding                                                 `mappend` (if filtering then removeChangesOfDurations else id) min1-                                                `mappend` "\n"+                                                `mappend` newLineEnding                                                 `mappend` (if filtering then removeChangesOfDurations else id) max1-                                                `mappend` "\n"+                                                `mappend` newLineEnding                                             )                                         else ""                                   )@@ -693,9 +694,9 @@     IO () outputWithFile h writingSystem allophones arrCharClassification segmentRules basicSpaces additionalDelims selStr compards sRepresent code grps fs num     | mBool && code >= 10 && code <= 19 && grps == 2 =-        putStrLn (mconcat [textP, "\n", breaks, "\n", show rs])+        putStrLn (mconcat [textP, newLineEnding, breaks, newLineEnding, show rs])             >> appendF-                ( (if code >= 15 then mconcat [show rs, "\n", breaks, "\n"] else "")+                ( (if code >= 15 then mconcat [show rs, newLineEnding, breaks, newLineEnding] else "")                     `mappend` outputS                 )     | otherwise = appendF outputS
Aftovolio/Halfsplit.hs view
@@ -3,7 +3,7 @@  {- | Module      :  Aftovolio.Halfsplit-Copyright   :  (c) OleksandrZhabenko 2023+Copyright   :  (c) OleksandrZhabenko 2023, 2025 License     :  MIT Stability   :  Experimental Maintainer  :  oleksandr.zhabenko@yahoo.com@@ -12,17 +12,18 @@  import Data.Char (isDigit) import Data.List hiding (foldr)+import Data.Lists.FLines (newLineEnding) import Data.Tuple (fst) import GHC.Base import GHC.Enum (fromEnum) import GHC.Int (Int8) import GHC.Num (abs, (+), (-))-import GHC.Real (quot, quotRem)+import GHC.Real (quot, quotRem, odd) import System.IO (getLine, putStr, putStrLn) import Text.Read (readMaybe) import Data.Maybe (Maybe,fromMaybe) import Text.Show (Show (..))-import Debug.Trace+--import Debug.Trace  -- | Converts the data that is an instance of 'Show' typeclass to be printed in two-column way. halfsplit ::@@ -44,7 +45,7 @@     (a -> b) ->     -- | Whether to filter out all groups of \'={digits}\' from the lines.     Bool ->-    -- | Additional 'String' added to every line before the \"\\n\" character.+    -- | Additional 'String' added to every line before the newline character.     String ->     Int8 ->     [a] ->@@ -53,45 +54,77 @@     | null xs = []     | otherwise =         let (n, rr2) = quotRem (fromEnum m) (if m < 0 then -10 else 10)-            r =-                case abs rr2 of-                    1 ->-                        let us = reverse ts-                         in ((if rrr == 0 then id else (replicate l0 ' ' :)) $ map show ys, map show us)-                    2 -> (reverse y10s, t10s)-                    3 -> (y10s, reverse t10s)-                    4 -> (reverse y20s, t20s)-                    5 -> (y20s, reverse t20s)-                    _ ->-                        let us = reverse ys-                         in ((if rrr == 0 then id else (replicate l0 ' ' :)) $ map show us, map show ts)-         in (if filtering then removeChangesOfDurations else id) $-                ((\(rs, qs) -> mergePartsLine n (appendstr `mappend` "\n") rs qs) r)+            rr3 = abs rr2+            noChange = odd rr3+            l0 = length . showFiltering filtering . head $ xs -- For empty lines+            r +              | rr3 > 1 && rr3 < 6 = (noChangeReverse noChange ws, noChangeReverse (not noChange) w2s)+              | otherwise = splitTwoBasic filtering (rr3 == 1) l0 xs+                 where (ws,w2s) = splitTwo filtering (rr3 > 3) l0 g xs+         in ((\(rs, qs) -> mergePartsLine n (appendstr `mappend` newLineEnding) rs qs) r)                     `mappend` appendstr++showFiltering +  :: (Show a) +  => Bool+  -> a+  -> String+showFiltering filtering = (if filtering then removeChangesOfDurations else id) . show+{-# INLINE showFiltering #-}  ++splitTwoBasic +  :: (Show a) => Bool+  -> Bool+  -> Int +  -> [a]+  -> ([String],[String])+splitTwoBasic filtering first l0 xs = ((if rrr == 0 then id else (replicate l0 ' ' :)) . map (showFiltering filtering) . noChangeReverse first $ ys, map (showFiltering filtering) . noChangeReverse (not first) $ ts)   where     (ys, ts) = splitAt l xs -- Is used for basic splitting     (l, rrr) = length xs `quotRem` 2 -- For basic splitting-    l0 = length . show . head $ xs  -- For all cases for a whitespace placeholder-    rss = map (map show) . groupBy (\x y -> g x == g y) $ xs -- For basic groupping+{-# INLINABLE splitTwoBasic #-}++noChangeF +  :: Bool+  -> ([a] -> [a])+  -> [a]+  -> [a]+noChangeF nochange f xs = if nochange then xs else f xs+{-# INLINE noChangeF #-}+    +noChangeReverse +  :: Bool +  -> [a]+  -> [a]+noChangeReverse nochange = noChangeF nochange (reverse)+{-# INLINE noChangeReverse #-}++splitTwo +  :: (Show a, Eq b) +  -- | Whether to filter out all groups of \'={digits}\' from the lines.+  => Bool+  -> Bool+  -> Int+  -> (a -> b) +  -> [a] +  -> ([String],[String])+splitTwo filtering emptyline l0 g xs = (y10s, t10s) +  where+    rss = (if emptyline then intersperse [""] else id) . map (map (showFiltering filtering)) . groupBy (\x y -> g x == g y) $ xs     (l2, r20) = (sum . map length $ rss) `quotRem` 2     (y100s, t10s) = splitAt l2 . concat $ rss     y10s          | r20 == 0 = y100s-        | otherwise = replicate l0 ' ' : y100s-    r1ss = intersperse [replicate l0 ' '] rss -- For groupping with empty lines-    (l3, r30) = (sum . map length $ r1ss) `quotRem` 2-    (y200s, t20s) = splitAt l3 . concat $ r1ss-    y20s-        | r30 == 0 = y200s-        | otherwise = replicate l0 ' ' : y200s- +        | otherwise = "": y100s+{-# INLINABLE splitTwo #-}+ -- | A generalized version of 'halfsplit3G' with the possibility to prepend and append strings to it. These 'String's are not filtered out for the groups of \'={digits}\' from the prepending and appending 'String's. halfsplit2G ::     (Show a, Eq b) =>     (a -> b) ->     -- | Whether to filter out all groups of \'={digits}\' from the lines.     Bool ->-    -- | Additional 'String' added to every line before the \"\\n\" character.+    -- | Additional 'String' added to every line before the newline character.     String ->     -- | A 'String' that is prepended to the 'halfsplit1G' result.     String ->@@ -101,21 +134,19 @@     [a] ->     String halfsplit2G g filtering appendstr prestr poststr m xs = prestr `mappend` halfsplit1G g filtering appendstr m xs `mappend` poststr-{-# INLINEABLE halfsplit2G #-}+{-# INLINABLE halfsplit2G #-} --- | Filters out all groups of \'={digits}\' from the 'String'+-- | Filters out all groups of \"={digits}\" and \"_{digits}\" from the 'String' removeChangesOfDurations :: String -> String removeChangesOfDurations ('=' : xs) = removeChangesOfDurations (dropWhile isDigit xs)+removeChangesOfDurations ('_' : xs) = removeChangesOfDurations (dropWhile isDigit xs) -- added since aftovolio-0.8.0.0 removeChangesOfDurations (x : xs) = x : removeChangesOfDurations xs removeChangesOfDurations _ = []  mergePartsLine :: Int -> String -> [String] -> [String] -> String mergePartsLine n newlined xs ys =     intercalate newlined-        . zipWith-            (\x y -> x `mappend` (replicate n (if n < 0 then '\t' else ' ')) `mappend` y)-            xs $-        ys+        .  showWithSpacesBefore (replicate n (if n < 0 then '\t' else ' ')) xs $ ys  splitGroups :: Int -> [[a]] -> ([[a]], [[a]], Int) splitGroups l tss = foldr h ([], [], 0) tss@@ -131,6 +162,18 @@   where     xs = show x     l = length xs++showWithSpacesBefore +  :: String +  -> [String] +  -> [String] +  -> [String]+showWithSpacesBefore inserts (ts:xs:xss) (us:ys:yss) +  | null xs = ws : (replicate (length ts) ' ' `mappend` inserts `mappend` ys) : showWithSpacesBefore inserts xss yss+  | otherwise = ws : showWithSpacesBefore inserts (xs:xss) (ys:yss)+    where ws = ts `mappend` inserts `mappend` us+showWithSpacesBefore inserts [xs] (ys:_) = [(if null xs then replicate (length ys) ' ' else xs) `mappend` inserts `mappend` ys]+showWithSpacesBefore inserts _ _ = []  print23 :: Bool -> String -> String -> Int -> [String] -> IO () print23 filtering prestr poststr n xss = do
Aftovolio/Ukrainian/IO.hs view
@@ -24,6 +24,7 @@ import Data.Foldable (mapM_) import Data.List hiding (foldr, null) import qualified Data.List as L (null)+import Data.Lists.FLines (newLineEnding) import Data.Maybe (fromJust, fromMaybe, isNothing) import Data.MinMax1 import Data.Ord (Down (..), comparing)@@ -263,7 +264,7 @@             `mappend` " "             `mappend` xs             `mappend` "  "-            `mappend` showWithSpaces 4 i+            `mappend` showWithSpaces 6 i -- changed for +x command line option  countSyll :: String -> Int countSyll xs =@@ -298,14 +299,14 @@ outputSel (S x1 y1 ts) code     | code < 0 = []     | code == 1 || code == 11 || code == 16 =-        intercalate " " [show x1, ts] `mappend` "\n"+        intercalate " " [show x1, ts] `mappend` newLineEnding     | code == 2 || code == 12 || code == 17 =-        intercalate " " [show y1, ts] `mappend` "\n"+        intercalate " " [show y1, ts] `mappend` newLineEnding     | code == 3 || code == 13 || code == 18 =-        intercalate " " [show x1, ts, show y1] `mappend` "\n"+        intercalate " " [show x1, ts, show y1] `mappend` newLineEnding     | code == 4 || code == 14 || code == 19 =-        intercalate " " [show x1, show y1] `mappend` "\n"-    | otherwise = ts `mappend` "\n"+        intercalate " " [show x1, show y1] `mappend` newLineEnding+    | otherwise = ts `mappend` newLineEnding  parseLineNumber :: Int -> IO Int parseLineNumber l1 = do@@ -458,11 +459,11 @@                         `mappend` showFFloat (Just 3) (100 * fromIntegral mx / fromIntegral m) "%"                         `mappend` ( if rem numTest 10 >= 4                                         then-                                            ( "\n"+                                            ( newLineEnding                                                 `mappend` (if filtering then removeChangesOfDurations else id) min1-                                                `mappend` "\n"+                                                `mappend` newLineEnding                                                 `mappend` (if filtering then removeChangesOfDurations else id) max1-                                                `mappend` "\n"+                                                `mappend` newLineEnding                                             )                                         else ""                                   )@@ -491,9 +492,9 @@     IO () outputWithFile selStr compards sRepresent file syllableDurationsDs code grps k fs num     | mBool && code >= 10 && code <= 19 && grps == 2 =-        putStrLn (mconcat [textP, "\n", breaks, "\n", show rs])+        putStrLn (mconcat [textP, newLineEnding, breaks, newLineEnding, show rs])             >> appendF-                ( (if code >= 15 then mconcat [show rs, "\n", breaks, "\n"] else "")+                ( (if code >= 15 then mconcat [show rs, newLineEnding, breaks, newLineEnding] else "")                     `mappend` outputS                 )     | otherwise = appendF outputS
CHANGELOG.md view
@@ -60,3 +60,6 @@  * Seventh version revised A. Changed the name of the one of the Main.hs files so that to avoid duplications on Stackage. Added possibility to filter out the music information in the text in the music mode using "-m" command line argument for unconcatUkr executable. +## 0.8.0.0 -- 2025-05-28++* Eighth version. Fixed issue with printing of the output for many cases related to formatting of the lines for the second column. Refactored Aftovolio.Halflsplit module, added new funcions to ease reading and testing of the code. Changed the behaviour of -e command line option, so that now it suppresses printing all music mode notation in the form of '={digits}' or '_{digits}'. 
README.md view
@@ -113,9 +113,9 @@  ## Ability to use your own durations of representations of sounds or phonetic phenomena -The programs offer four different sets of phonetic representations by default but it is possible to set your own durations. To do this, specify them as numbers of type 'Word8' (that can be obtained from the 'Double' values from the convex hull envelope method above or from some analogous procedure by the function [zippedDouble2Word8](https://hackage.haskell.org/package/aftovolio-0.6.2.0/docs/src/Aftovolio.General.Datatype3.html#zippedDouble2Word8), see documentation for the [module](https://hackage.haskell.org/package/aftovolio-0.6.2.0/docs/src/Aftovolio.General.Datatype3.html)) in the file in the order defined as follows:+The programs offer four different sets of phonetic representations by default but it is possible to set your own durations. To do this, specify them as numbers of type 'Word8' (that can be obtained from the 'Double' values from the convex hull envelope method above or from some analogous procedure by the function [zippedDouble2Word8](https://hackage.haskell.org/package/aftovolio-0.8.0.0/docs/src/Aftovolio.General.Datatype3.html#zippedDouble2Word8), see documentation for the [module](https://hackage.haskell.org/package/aftovolio-0.8.0.0/docs/src/Aftovolio.General.Datatype3.html)) in the file in the order defined as follows: -where the specified values in the list refer to the [phonetic representations](https://hackage.haskell.org/package/aftovolio-0.6.2.0/docs/src/Aftovolio.Ukrainian.Syllable.html#showS8) from the module Aftovolio.Ukrainian.Syllable. The last column is 8-bit integers (GHC.Int.Int8), which represent these sounds in the new modules.+where the specified values in the list refer to the [phonetic representations](https://hackage.haskell.org/package/aftovolio-0.8.0.0/docs/src/Aftovolio.Ukrainian.Syllable.html#showS8) from the module Aftovolio.Ukrainian.Syllable. The last column is 8-bit integers (GHC.Int.Int8), which represent these sounds in the new modules.  If you want to specify several such sets (up to 9 inclusive), you can specify '\*' or several such characters from a new line, and then from the next line there will be a new set of values. @@ -375,7 +375,7 @@   as the element with the maximum value (the "-e" command line argument suppresses output of "={digits}" for better readability). The second line is changed because of the last syllable in the first line that is redundant as for the iambic meter. -You can easily paste the =133 group into the text in many editors or on the command line directly.+You can easily paste the =133 group into thethe last one groups since the version 0.8.0.0 text in many editors or on the command line directly.  ## Conclusions @@ -439,7 +439,7 @@  - +di   — if present implies the "differentiation" mode of computation for the comparing options with the line in +l2\.\.\.-l2 or +ln\.\.\.-ln groups of command line arguments. Is useful mostly in case of the line to compare with has approximately the same number of syllables as the option lines. -- -e   — if present suppresses the printing of "={digits}" in the line option to the screen. Is used for better readability, often with +di.+- -e   — if present suppresses the printing of "={digits}" and \"\_{digits}\" (the last one groups since the version 0.8.0.0) in the line option to the screen. Is used for better readability, often with +di.  - +q   — if present with +l2 \.\.\. -l2 group of arguments then the next argument is a power of 10 which the distance between line option and the predefined line is quoted by. The default one is 0 (that means no change). You can specify not less than 0 and not greater than 4. Otherwise, these limit numbers are used instead. The greater value here leads to more groupped options output. @@ -447,10 +447,10 @@  - +r   — afterwards are several unique digits not greater than 8 in the descending order — the first one is the length of the group of syllables to be considered as a period, the rest — positions of the maximums and minimums. Example: "543" means that the line is split into groups of 5 syllables starting from the beginning, then the positions of the most maximum (4 = 5 - 1) and the next (smaller) maximum (3 = 4 - 1). If there are no duplicated values then the lowest possible value here is 0, that corresponds to the lowest minimum. If there are duplicates then the lowest value here is the number of the groups of duplicates, e. g. in the sequence 1,6,3,3,4,4,5 that is one group there are two groups of duplicates — with 3 and 4 — and, therefore, the corresponding data after +r should be 7\.\.\.2. The values less than the lowest minimum are neglected. -- +c   — see explanation at [the link](https://hackage.haskell.org/package/rhythmic-sequences-0.8.0.0/docs/src/Rhythmicity.MarkerSeqs.html#HashCorrections). Some preliminary tests show that theee corrections influence the result but not drastically, they can lead to changes in groupping and order, but mostly leave the structure similar. This shows that the algorithms used are more stable for such changes.+- +c   — see explanation at [the link](https://hackage.haskell.org/package/rhythmic-sequences-0.8.0.0/docs/src/Rhythmicity.MarkerSeqs.html#HashCorrections). Some preliminary tests show that these corrections influence the result but not drastically, they can lead to changes in groupping and order, but mostly leave the structure similar. This shows that the algorithms used are more stable for such changes.  - -t   — and afterwards the number in the range [0..179]  (with some exceptions) showing the test for 'smoothness' (to be more accurate - absence or presence of some irregularities that influences the prosody) to be run - you can see a list of possible values for the parameter here at the link:-[link1](https://hackage.haskell.org/package/aftovolio-0.6.2.0/docs/src/Aftovolio.Tests.html#sel). For ideas of actual usage of the tests, see the documentation above.+[link1](https://hackage.haskell.org/package/aftovolio-0.8.0.0/docs/src/Aftovolio.Tests.html#sel). For ideas of actual usage of the tests, see the documentation above.  - -C   — If specified with +RTS -N -RTS rtsoptions for the multicore computers with -t option then it can speed up the full computation of the all tests using more resources. Uses asynchcronous concurrent threads in computation. This groups (-C and rtsoptions) can be specified in any position as command line groups of arguments. The output is in this case not sorted in the order of 2,3,4,5,6,7, but can vary depending on your CPU configurations and states and / or some other factors. 
aftovolio.cabal view
@@ -1,6 +1,6 @@ cabal-version:      2.4 name:               aftovolio-version:            0.7.1.0+version:            0.8.0.0  -- A short (one-line) description of the package. synopsis:           An AFTOVolio implementation for creating texts with special phonetic / prosodic properties.
src/Main.hs view
@@ -170,23 +170,23 @@   | xs == "l" = putStrLn "+l \t— if specified then the output for one property (no tests) contains empty lines between the groups of the line option with the same value of property. \n"   | xs == "w" = putStrLn "+w \t— if specified with the next Int8 number then the splitting of the output for non-testing options is used. Is used when no \"-t\" argument is given. The output is split into two columns to improve overall experience. The parameter after the \"+w\" is divided by 10 (-10 for negative numbers) to obtain the quotient and remainder (Int8 numbers). The quotient specifies the number of spaces or tabular characters to be used between columns (if the parameter is positive then the spaces are used, otherwise tabular characters). The remainder specifies the option of displaying. If the absolute value of the remainder (the last digit of the parameter) is 1 then the output in the second column is reversed; if it is in the range [2..5] then the output is groupped by the estimation values: if it is 2 then the first column is reversed; if it is 3 then the second column is reversed; if it is 4 then like 2 but additionally the empty line is added between the groups; if it is 5 then like for 3 and additionally the empty line is added between the groups. Otherwise, the second column is reversed. The rules are rather complex, but you can give a try to any number (Int8, [129..128] in the fullscreen terminal). The default value is 54 that corresponds to some reasonable layout.\n"   | xs == "s" = putStrLn "+s \t— the next is the digit from 1 to 4 included. The default one is 2. Influences the result in the case of +d parameter is not given. \n"-  | xs == "d" = putStrLn "+d \t— if present, then afterwards should be a FilePath to the file with new durations of the Ukrainian AFTOVolio representations. They can be obtained using the information from the section on durations in the REEDME.md file by the following link: \nhttps://hackage.haskell.org/package/aftovolio-0.6.2.0/src/README.md\n"+  | xs == "d" = putStrLn "+d \t— if present, then afterwards should be a FilePath to the file with new durations of the Ukrainian AFTOVolio representations. They can be obtained using the information from the section on durations in the REEDME.md file by the following link: \nhttps://hackage.haskell.org/package/aftovolio-0.8.0.0/src/README.md\n"   | xs == "p" = putStrLn "-p \t— if present the minimal grammar transformations (appending and prepending the dependent parts) are not applied. Can be useful also if the text is analyzed as a Ukrainian transcription of text in some other language.\n"   | xs == "f" = putStrLn "+f \t— if present with two arguments specifies the file to which the output information should be appended and the mode of appending (which parts to write). The default value if the secodnd parameter is 0 or not element of [1,2,3,4,10,11,12,13,14,15,16,17,18,19] is just the resulting String option. If the second parameter is 1 then the sequential number and the text are written; if it is 2 then the estimation value and the string are written; if it is 3 then the full information is written i. e. number, string and estimation; if it is 4 then the number and estimation (no string).\nThe second arguments greater or equal to 10 take effect only if the meter consists of two syllables (in case of \"+r 21\" command line options given). If it is 10 in such a case then before appending the line option itself to the given file there is hashes information for this line option displayed. If it is 11 — the same hashes information is displayed before processing as for 1. If it is 12 — the same hashes information is displayed before processing as for 2 and so on for 13, 14. If it is 15 up to 19 — it is analogically to the the 10–14 but the hashes information is not only printed on the screen, but appended to the file specified. These values are intended to test the interesting hypothesis about where the pauses can occur. For more information on the hypothesis, see: \n https://www.academia.edu/105067761/Why_some_lines_are_easy_to_pronounce_and_others_are_not_or_prosodic_unpredictability_as_a_characteristic_of_text\n"   | xs == "nm" = putStrLn "+nm ... -nm \t— if specified in the modes without tests and file single line output changes the output so that just the lines with the specified Int numbers are displayed in the order of the specified numbers. Please, delimit the numbers with spaces. To specify some range, use just dash as here: \'34-250\' meaning that lines with numbers between 34 and 250 inclusively will be displayed. Music mode additional information is displayed as well here.\n"   | xs == "dc" = putStrLn "+dc \t— if specified with two further arguments then the first one can be 1 or something  else. If it is 1 then additionally to every line as usual there is printed also <br> html tag at the end of the line for the two-columns output. Otherwise, nothing is added to each line. The second argument further is a FilePath to the writable existing file or to the new file that will be located in the writable by the user directory. The two-column output will be additionally written to this file if it is possible, otherwise the program will end with an exception.\n"-  | xs == "a" = putStrLn "+a ... -a \t— if present contains a group of constraints for AFTOVolio. For more information, see: \nhttps://hackage.haskell.org/package/aftovolio-0.6.2.0/src/README.md in English or in Ukrainian: \nhttps://oleksandr-zhabenko.github.io/uk/rhythmicity/PhLADiPreLiO.Ukr.21.html#%D0%BE%D0%B1%D0%BC%D0%B5%D0%B6%D0%B5%D0%BD%D0%BD%D1%8F-constraints\n"-  | xs == "b" = putStrLn "+b ... -b \t— if present takes precedence over those ones in the +a ... -a group (the latter ones have no effect). A group of constraints for AFTOVolio using some boolean-based algebra. If you use parentheses there, please, use quotation of the whole expression between the +b and -b (otherwise there will be issues with the shell or command line interpreter related to parentheses). For example, on Linux bash or Windows PowerShell: +b \'P45(A345 B32)\' -b. If you use another command line environment or interpreter, please, refer to the documentation for your case about the quotation and quotes. For more information, see: \nhttps://hackage.haskell.org/package/aftovolio-0.6.2.0/src/README.md in English or: \nhttps://oleksandr-zhabenko.github.io/uk/rhythmicity/phladiprelioUkr.7.pdf in Ukrainian.\n"+  | xs == "a" = putStrLn "+a ... -a \t— if present contains a group of constraints for AFTOVolio. For more information, see: \nhttps://hackage.haskell.org/package/aftovolio-0.8.0.0/src/README.md in English or in Ukrainian: \nhttps://oleksandr-zhabenko.github.io/uk/rhythmicity/PhLADiPreLiO.Ukr.21.html#%D0%BE%D0%B1%D0%BC%D0%B5%D0%B6%D0%B5%D0%BD%D0%BD%D1%8F-constraints\n"+  | xs == "b" = putStrLn "+b ... -b \t— if present takes precedence over those ones in the +a ... -a group (the latter ones have no effect). A group of constraints for AFTOVolio using some boolean-based algebra. If you use parentheses there, please, use quotation of the whole expression between the +b and -b (otherwise there will be issues with the shell or command line interpreter related to parentheses). For example, on Linux bash or Windows PowerShell: +b \'P45(A345 B32)\' -b. If you use another command line environment or interpreter, please, refer to the documentation for your case about the quotation and quotes. For more information, see: \nhttps://hackage.haskell.org/package/aftovolio-0.8.0.0/src/README.md in English or: \nhttps://oleksandr-zhabenko.github.io/uk/rhythmicity/phladiprelioUkr.7.pdf in Ukrainian.\n"   | xs == "P" = putStrLn "+P \t— if specified with the following non-negative Int from 0 to 3 including then specifies the general type of permutations of the words and their concatenations. +P 0 corresponds the full set of all possible permutations (the default behaviour, also in case of no specification at all), +P 1 corresponds to the set of permutations, where just one word can change its position (the elementary, the least possible permutation), +P 2 corresponds to the set of permutations, where two words can be swapped one with another, +P 3 corresponds to the set of permutations, where no more than two words can change their positions, including the cases of no changes at all and just one word changes its position. All, except +P 0 provide less permutations in general and are quicker to be computed and displayed. This one is more useful in case of extended sets of words, e. g. when there are 8 or 9 words in the line."   | xs == "l2" = putStrLn "+l2 ... -l2 \t— if present and has inside Ukrainian text then the line options are compared with it using the idea of lists similarity. The greater values correspond to the less similar and more different lines. Has no effect with +dc group of command line arguments. Has precedence over +t, +r, +k, +c etc. groups of command line options so that these latter ones have no effect when +l2 ... -l2 is present.\n"   | xs == "ln" = putStrLn "+ln ... -ln \t— if present and has inside a sequence of Word8 values i. e. positive integer numbers less than 256 then the line options are compared with it using the idea of lists similarity. The greater values correspond to the less similar and more different lines. Has no effect with +dc group of command line arguments. Has precedence over +t, +r, +k, +c etc. groups of command line options so that these latter ones have no effect when +ln ... -ln is present.\n"   | xs == "di" = putStrLn "+di \t— if present implies the \"differentiation\" mode of computation for the comparing options with the line in +l2 or +ln groups of command line arguments. Is useful mostly in case of the line to compare with has approximately the same number of syllables as the option lines."-  | xs == "e" = putStrLn "-e \t— if present suppresses the printing of \"={digits}\" in the line option to the screen. Is used for better readability, often with \"+di\"."+  | xs == "e" = putStrLn "-e \t— if present suppresses the printing of \"={digits}\" and \"_{digits}\" (the last one groups since the version 0.8.0.0) in the line option to the screen. Is used for better readability, often with \"+di\"."   | xs == "q" = putStrLn "+q \t— if present with +l2 ... -l2 group of arguments then the next argument is a power of 10 which the distance between line option and the predefined line is quoted by. The default one is 0 (that means no change). You can specify not less than 0 and not greater than 4. Otherwise, these limit numbers are used instead. The greater value here leads to more groupped options output.\n"   | xs == "ul" = putStrLn "+ul \t— afterwards there is a string that encodes which sounds are used for diversity property evaluation. If used, then +r group has no meaning and is not used. Unlike in the link, the argument \"1\" means computing the property for all the sound representations included (for all of the present representations, so the value is maximal between all other strings instead of \"1\"). For more information, see: https://oleksandr-zhabenko.github.io/uk/rhythmicity/PhLADiPreLiO.Eng.21.html#types\n"   | xs == "r" = putStrLn "+r \t— afterwards are several unique digits not greater than 8 in the descending order — the first one is the length of the group of syllables to be considered as a period, the rest — positions of the maximums and minimums. Example: \"543\" means that the line is split into groups of 5 syllables starting from the beginning, then the positions of the most maximum (4 = 5 - 1) and the next (smaller) maximum (3 = 4 - 1). If there are no duplicated values then the lowest possible value here is 0, that corresponds to the lowest minimum. If there are duplicates then the lowest value here is the number of the groups of duplicates, e. g. in the sequence 1,6,3,3,4,4,5 that is one group there are two groups of duplicates — with 3 and 4 — and, therefore, the corresponding data after +r should be 7...2. The values less than the lowest minimum are neglected.\n"-  | xs == "c" = putStrLn "+c \t— see explanation at the link: https://hackage.haskell.org/package/rhythmic-sequences-0.8.0.0/docs/src/Rhythmicity.MarkerSeqs.html#HashCorrections Some preliminary tests show that theee corrections influence the result but not drastically, they can lead to changes in groupping and order, but mostly leave the structure similar. This shows that the algorithms used are more stable for such changes.\n"-  | xs == "t" = putStrLn "-t \t— and afterwards the number in the range [0..179] (with some exceptions) showing the test for \'smoothness\' (to be more accurate - absence or presence of some irregularities that influences the prosody) to be run - you can see a list of possible values for the parameter here at the link: \nhttps://hackage.haskell.org/package/aftovolio-0.6.2.0/docs/src/Aftovolio.Tests.html#sel. \nFor ideas of actual usage of the tests, see the documentation by the links: https://www.academia.edu/105067723/%D0%A7%D0%BE%D0%BC%D1%83_%D0%B4%D0%B5%D1%8F%D0%BA%D1%96_%D1%80%D1%8F%D0%B4%D0%BA%D0%B8_%D0%BB%D0%B5%D0%B3%D0%BA%D0%BE_%D0%B2%D0%B8%D0%BC%D0%BE%D0%B2%D0%BB%D1%8F%D1%82%D0%B8_%D0%B0_%D1%96%D0%BD%D1%88%D1%96_%D0%BD%D1%96_%D0%B0%D0%B1%D0%BE_%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B4%D0%B8%D1%87%D0%BD%D0%B0_%D0%BD%D0%B5%D1%81%D0%BF%D1%80%D0%BE%D0%B3%D0%BD%D0%BE%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D1%96%D1%81%D1%82%D1%8C_%D1%8F%D0%BA_%D1%85%D0%B0%D1%80%D0%B0%D0%BA%D1%82%D0%B5%D1%80%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83?source=swp_share and https://hackage.haskell.org/package/aftovolio-0.6.2.0/src/README.md\n"+  | xs == "c" = putStrLn "+c \t— see explanation at the link: https://hackage.haskell.org/package/rhythmic-sequences-0.8.0.0/docs/src/Rhythmicity.MarkerSeqs.html#HashCorrections Some preliminary tests show that these corrections influence the result but not drastically, they can lead to changes in groupping and order, but mostly leave the structure similar. This shows that the algorithms used are more stable for such changes.\n"+  | xs == "t" = putStrLn "-t \t— and afterwards the number in the range [0..179] (with some exceptions) showing the test for \'smoothness\' (to be more accurate - absence or presence of some irregularities that influences the prosody) to be run - you can see a list of possible values for the parameter here at the link: \nhttps://hackage.haskell.org/package/aftovolio-0.8.0.0/docs/src/Aftovolio.Tests.html#sel. \nFor ideas of actual usage of the tests, see the documentation by the links: https://www.academia.edu/105067723/%D0%A7%D0%BE%D0%BC%D1%83_%D0%B4%D0%B5%D1%8F%D0%BA%D1%96_%D1%80%D1%8F%D0%B4%D0%BA%D0%B8_%D0%BB%D0%B5%D0%B3%D0%BA%D0%BE_%D0%B2%D0%B8%D0%BC%D0%BE%D0%B2%D0%BB%D1%8F%D1%82%D0%B8_%D0%B0_%D1%96%D0%BD%D1%88%D1%96_%D0%BD%D1%96_%D0%B0%D0%B1%D0%BE_%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B4%D0%B8%D1%87%D0%BD%D0%B0_%D0%BD%D0%B5%D1%81%D0%BF%D1%80%D0%BE%D0%B3%D0%BD%D0%BE%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D1%96%D1%81%D1%82%D1%8C_%D1%8F%D0%BA_%D1%85%D0%B0%D1%80%D0%B0%D0%BA%D1%82%D0%B5%D1%80%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83?source=swp_share and https://hackage.haskell.org/package/aftovolio-0.8.0.0/src/README.md\n"   | xs == "C" = putStrLn "-C \t— If specified with +RTS -N -RTS rtsoptions for the multicore computers with -t option then it can speed up the full computation of the all tests using more resources. Uses asynchcronous concurrent threads in computation. This groups (-C and rtsoptions) can be specified in any position as command line groups of arguments. The output is in this case not sorted in the order of 2,3,4,5,6,7, but can vary depending on your CPU configurations and states and / or some other factors.\n"   | xs == "k" = putStrLn "+k \t— and then the number greater than 2 (better, greater than 12, the default value if not specified is 20). The greater value leads to greater numbers. The number less than some infimum here leads to wiping of some information from the result and, therefore, probably is not the desired behaviour. For most cases the default value is just enough sensible, but you can give it a try for other values.\n"   | xs == "x" = putStrLn "+x \t— If specified with the further natural number then means that instead of maximum 7 words or their concatenations that can be analysed together as a line there will be taken the specified number here or 9 if the number is greater than 8. More words leads to more computations, therefore, please, use with this caution in mind. It can be useful mostly for the cases with the additional constraints specified (+a ... -a or +b ... -b groups, see above).\n"