{-# OPTIONS_HADDOCK -show-extensions #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Phladiprelio.Ukrainian.PrepareText (
complexWords
, participleConc
, splitLines
, splitLinesN
, auxiliary1
, isPreposition
, isParticipleAppended
, isPrepended
, isConcatenated
, isSpC
, isUkrainianL
, concatenated2
, jottedConv
, jottedCnv
, prepareText
, prepareTextN
, growLinesN
, prepareGrowTextMN
, tuneLinesN
, prepareTuneTextMN
, aux4
) where
import Data.Bits (shiftR)
import GHC.Base
import Data.List
import CaseBi.Arr (getBFstLSorted')
import Data.List.InnToOut.Basic (mapI)
import Data.Char (isAlpha,toLower)
import GHC.Arr
import GHC.Num ((+))
prepareText :: String -> [String]
prepareText :: String -> [String]
prepareText = Int -> String -> [String]
prepareTextN Int
7
{-# INLINE prepareText #-}
complexWords :: [String] -> [String]
complexWords :: [String] -> [String]
complexWords wwss :: [String]
wwss@(String
xs:String
ys:String
zs:String
ts:[String]
xss) =
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstLSorted' (String
xsforall a. a -> [a] -> [a]
:[String] -> [String]
complexWords (String
ysforall a. a -> [a] -> [a]
:String
zsforall a. a -> [a] -> [a]
:String
tsforall a. a -> [a] -> [a]
:[String]
xss)) ([(String
"\1074",
if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1084\1110\1088\1091" Bool -> Bool -> Bool
&& String
zs forall a. Eq a => a -> a -> Bool
== String
"\1090\1086\1075\1086" Bool -> Bool -> Bool
&&
String
ts forall a. Eq a => a -> a -> Bool
== String
"\1103\1082" then String -> [String] -> [String]
auxiliary2Inner (String
xs forall a. Monoid a => a -> a -> a
`mappend` String
ys forall a. Monoid a => a -> a -> a
`mappend` String
zs forall a. Monoid a => a -> a -> a
`mappend` String
ts) [String]
xss else [String] -> [String]
auxiliary4 [String]
wwss),
(String
"\1076\1072\1088\1084\1072", if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1097\1086"
then [String] -> [String]
auxiliary3 [String]
wwss else [String] -> [String]
auxiliary4 [String]
wwss), (String
"\1076\1083\1103",
if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1090\1086\1075\1086" Bool -> Bool -> Bool
&& String
zs forall a. Eq a => a -> a -> Bool
== String
"\1097\1086\1073"
then String -> [String] -> [String]
auxiliary2Inner (String
xs forall a. Monoid a => a -> a -> a
`mappend` String
ys forall a. Monoid a => a -> a -> a
`mappend` String
zs forall a. Monoid a => a -> a -> a
`mappend` String
ts) [String]
xss
else [String] -> [String]
auxiliary4 [String]
wwss), (String
"\1079",
case String
ys of
String
"\1090\1080\1084" -> if String
zs forall a. Eq a => a -> a -> Bool
== String
"\1097\1086\1073"
then String -> [String] -> [String]
auxiliary2Inner (String
xs forall a. Monoid a => a -> a -> a
`mappend` String
ys forall a. Monoid a => a -> a -> a
`mappend` String
zs) (String
tsforall a. a -> [a] -> [a]
:[String]
xss)
else [String] -> [String]
auxiliary4 [String]
wwss
String
"\1090\1086\1075\1086" -> if String
zs forall a. Eq a => a -> a -> Bool
== String
"\1095\1072\1089\1091" Bool -> Bool -> Bool
&& String
ts forall a. Eq a => a -> a -> Bool
== String
"\1103\1082"
then String -> [String] -> [String]
auxiliary2Inner (String
xs forall a. Monoid a => a -> a -> a
`mappend` String
ys forall a. Monoid a => a -> a -> a
`mappend` String
zs forall a. Monoid a => a -> a -> a
`mappend` String
"\1081\1072\1082") [String]
xss
else [String] -> [String]
auxiliary4 [String]
wwss
String
_ -> [String] -> [String]
auxiliary4 [String]
wwss), (String
"\1079\1072\1083\1077\1078\1085\1086",
if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1074\1110\1076" then [String] -> [String]
auxiliary3 [String]
wwss else [String] -> [String]
auxiliary4 [String]
wwss),
(String
"\1079\1072\1084\1110\1089\1090\1100",
if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1090\1086\1075\1086" Bool -> Bool -> Bool
&& String
zs forall a. Eq a => a -> a -> Bool
== String
"\1097\1086\1073"
then String -> [String] -> [String]
auxiliary2Inner (String
xs forall a. Monoid a => a -> a -> a
`mappend` String
ys forall a. Monoid a => a -> a -> a
`mappend` String
zs) (String
tsforall a. a -> [a] -> [a]
:[String]
xss)
else [String] -> [String]
auxiliary4 [String]
wwss), (String
"\1087\1086\1087\1088\1080",
if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1090\1077" Bool -> Bool -> Bool
&& String
zs forall a. Eq a => a -> a -> Bool
== String
"\1097\1086" then String -> [String] -> [String]
auxiliary2Inner (String
xs forall a. Monoid a => a -> a -> a
`mappend` String
ys forall a. Monoid a => a -> a -> a
`mappend` String
zs) (String
tsforall a. a -> [a] -> [a]
:[String]
xss)
else [String] -> [String]
auxiliary4 [String]
wwss),(String
"\1085\1077\1079\1072\1083\1077\1078\1085\1086",
if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1074\1110\1076" then [String] -> [String]
auxiliary3 [String]
wwss else [String] -> [String]
auxiliary4 [String]
wwss),
(String
"\1085\1077\1079\1074\1072\1078\1072\1102\1095\1080", if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1085\1072" then
if String
zs forall a. Eq a => a -> a -> Bool
== String
"\1090\1077" Bool -> Bool -> Bool
&& String
ts forall a. Eq a => a -> a -> Bool
== String
"\1097\1086" then String -> [String] -> [String]
auxiliary2Inner (String
xs forall a. Monoid a => a -> a -> a
`mappend` String
ys forall a. Monoid a => a -> a -> a
`mappend` String
zs forall a. Monoid a => a -> a -> a
`mappend` String
ts) [String]
xss
else [String] -> [String]
auxiliary3 [String]
wwss else [String] -> [String]
auxiliary4 [String]
wwss),
(String
"\1087\1088\1080",
if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1094\1100\1086\1084\1091" then [String] -> [String]
auxiliary3 [String]
wwss
else [String] -> [String]
auxiliary4 [String]
wwss), (String
"\1087\1110\1089\1083\1103",
if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1090\1086\1075\1086" Bool -> Bool -> Bool
&& String
zs forall a. Eq a => a -> a -> Bool
== String
"\1103\1082" then String -> [String] -> [String]
auxiliary2Inner (String
xs forall a. Monoid a => a -> a -> a
`mappend` String
ys forall a. Monoid a => a -> a -> a
`mappend` String
zs) (String
tsforall a. a -> [a] -> [a]
:[String]
xss)
else [String] -> [String]
auxiliary4 [String]
wwss), (String
"\1090\1072\1082", if (String
ys forall a. Eq a => a -> a -> Bool
== String
"\1097\1086") Bool -> Bool -> Bool
|| (String
ys forall a. Eq a => a -> a -> Bool
== String
"\1103\1082")
then [String] -> [String]
auxiliary3 [String]
wwss else [String] -> [String]
auxiliary4 [String]
wwss),
(String
"\1090\1080\1084\1095\1072\1089\1086\1084", if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1103\1082"
then [String] -> [String]
auxiliary3 [String]
wwss else [String] -> [String]
auxiliary4 [String]
wwss),
(String
"\1090\1086\1084\1091", if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1103\1082" then String -> [String] -> [String]
auxiliary2Inner (String
xs forall a. Monoid a => a -> a -> a
`mappend` String
"\1081\1072\1082") (String
zsforall a. a -> [a] -> [a]
:String
tsforall a. a -> [a] -> [a]
:[String]
xss)
else [String] -> [String]
auxiliary4 [String]
wwss), (String
"\1091",
if (String
ys forall a. Eq a => a -> a -> Bool
== String
"\1079\1074'\1103\1079\1082\1091" Bool -> Bool -> Bool
|| String
ys forall a. Eq a => a -> a -> Bool
== String
"\1079\1074\x02BC\1103\1079\1082\1091") Bool -> Bool -> Bool
&& String
zs forall a. Eq a => a -> a -> Bool
== String
"\1079"
then String -> [String] -> [String]
auxiliary2Inner (String
xs forall a. Monoid a => a -> a -> a
`mappend` String
"\1079\1074\1081\1072\1079\1082\1091" forall a. Monoid a => a -> a -> a
`mappend` String
zs) (String
tsforall a. a -> [a] -> [a]
:[String]
xss)
else if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1084\1110\1088\1091" Bool -> Bool -> Bool
&& String
zs forall a. Eq a => a -> a -> Bool
== String
"\1090\1086\1075\1086" Bool -> Bool -> Bool
&& String
ts forall a. Eq a => a -> a -> Bool
== String
"\1103\1082"
then String -> [String] -> [String]
auxiliary2Inner (String
xs forall a. Monoid a => a -> a -> a
`mappend` String
ys forall a. Monoid a => a -> a -> a
`mappend` String
zs forall a. Monoid a => a -> a -> a
`mappend` String
ts) [String]
xss else [String] -> [String]
auxiliary4 [String]
wwss),
(String
"\1093\1086\1095", if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1073\1080" then [String] -> [String]
auxiliary3 [String]
wwss
else [String] -> [String]
auxiliary4 [String]
wwss), (String
"\1093\1086\1095\1072", if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1073"
then [String] -> [String]
auxiliary3 [String]
wwss else [String] -> [String]
auxiliary4 [String]
wwss),
(String
"\1095\1077\1088\1077\1079", if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1090\1077" Bool -> Bool -> Bool
&& String
zs forall a. Eq a => a -> a -> Bool
== String
"\1097\1086"
then String -> [String] -> [String]
auxiliary2Inner (String
xs forall a. Monoid a => a -> a -> a
`mappend` String
ys forall a. Monoid a => a -> a -> a
`mappend` String
zs) (String
tsforall a. a -> [a] -> [a]
:[String]
xss) else [String] -> [String]
auxiliary4 [String]
wwss)]) String
xs
complexWords wwss :: [String]
wwss@(String
xs:String
ys:String
zs:[String]
xss) =
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstLSorted' (String
xsforall a. a -> [a] -> [a]
:[String] -> [String]
complexWords [String
ys,String
zs]) ([(String
"\1076\1072\1088\1084\1072", if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1097\1086"
then [String] -> [String]
auxiliary3 [String]
wwss else [String] -> [String]
auxiliary4 [String]
wwss), (String
"\1079\1072\1083\1077\1078\1085\1086",
if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1074\1110\1076" then [String] -> [String]
auxiliary3 [String]
wwss else [String] -> [String]
auxiliary4 [String]
wwss),
(String
"\1085\1077\1079\1072\1083\1077\1078\1085\1086",
if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1074\1110\1076" then [String] -> [String]
auxiliary3 [String]
wwss else [String] -> [String]
auxiliary4 [String]
wwss),
(String
"\1087\1088\1080",
if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1094\1100\1086\1084\1091" then [String] -> [String]
auxiliary3 [String]
wwss
else [String] -> [String]
auxiliary4 [String]
wwss), (String
"\1090\1072\1082", if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1097\1086" Bool -> Bool -> Bool
|| String
ys forall a. Eq a => a -> a -> Bool
== String
"\1103\1082"
then [String] -> [String]
auxiliary3 [String]
wwss else [String] -> [String]
auxiliary4 [String]
wwss),
(String
"\1090\1080\1084\1095\1072\1089\1086\1084", if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1103\1082"
then [String] -> [String]
auxiliary3 [String]
wwss else [String] -> [String]
auxiliary4 [String]
wwss),
(String
"\1090\1086\1084\1091", if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1103\1082" then String -> [String] -> [String]
auxiliary2Inner (String
xs forall a. Monoid a => a -> a -> a
`mappend` String
"\1081\1072\1082") (String
zsforall a. a -> [a] -> [a]
:[String]
xss)
else [String] -> [String]
auxiliary4 [String]
wwss), (String
"\1093\1086\1095", if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1073\1080" then [String] -> [String]
auxiliary3 [String]
wwss
else [String] -> [String]
auxiliary4 [String]
wwss), (String
"\1093\1086\1095\1072", if String
ys forall a. Eq a => a -> a -> Bool
== String
"\1073"
then [String] -> [String]
auxiliary3 [String]
wwss else [String] -> [String]
auxiliary4 [String]
wwss)]) String
xs
complexWords [String
xs,String
ys]
| String
ys forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [String
"\1073",String
"\1073\1060",String
"\1078\1077",String
"\1078"] = [String
xs forall a. Monoid a => a -> a -> a
`mappend` String
ys]
| String
xs forall a. Eq a => a -> a -> Bool
== String
"\1076\1072\1088\1084\1072" Bool -> Bool -> Bool
&& String
ys forall a. Eq a => a -> a -> Bool
== String
"\1097\1086" = [String
xs forall a. Monoid a => a -> a -> a
`mappend` String
ys]
| Bool
otherwise = [String
xs,String
ys]
complexWords [String]
xss = [String]
xss
auxiliary2Inner :: String -> [String] -> [String]
auxiliary2Inner :: String -> [String] -> [String]
auxiliary2Inner String
ts (String
xs:String
ys:[String]
xss)
| ([String] -> [String]
concatenated2 forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> [String]
auxiliary1 forall a b. (a -> b) -> a -> b
$ [String
xs,String
ys]) forall a. Eq a => a -> a -> Bool
/= [String
xs,String
ys] = let ([String]
rs,[String]
ws) = forall a. Int -> [a] -> ([a], [a])
splitAt Int
1 ([String] -> [String]
concatenated2 forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> [String]
auxiliary1 forall a b. (a -> b) -> a -> b
$ [String
xs,String
ys]) in
(String
ts forall a. Monoid a => a -> a -> a
`mappend` forall a. [a] -> a
head [String]
rs)forall a. a -> [a] -> [a]
:[String] -> [String]
complexWords (forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[String]
ws,[String]
xss])
| Bool
otherwise = (String
ts forall a. Monoid a => a -> a -> a
`mappend` String
xs)forall a. a -> [a] -> [a]
:[String] -> [String]
complexWords (String
ysforall a. a -> [a] -> [a]
:[String]
xss)
auxiliary2Inner String
ts [String
xs] = [String
ts forall a. Monoid a => a -> a -> a
`mappend` String
xs]
auxiliary2Inner String
ts [String]
_ = [String
ts]
auxiliary3 :: [String] -> [String]
auxiliary3 :: [String] -> [String]
auxiliary3 (String
xs:String
ys:[String]
xss) = String -> [String] -> [String]
auxiliary2Inner (String
xs forall a. Monoid a => a -> a -> a
`mappend` String
ys) [String]
xss
auxiliary3 [String]
xss = [String]
xss
{-# INLINE auxiliary3 #-}
auxiliary4 :: [String] -> [String]
auxiliary4 :: [String] -> [String]
auxiliary4 (String
xs:[String]
xss) = String -> [String] -> [String]
auxiliary2Inner String
xs [String]
xss
auxiliary4 [String]
xss = [String]
xss
{-# INLINE auxiliary4 #-}
splitLines :: [String] -> [String]
splitLines :: [String] -> [String]
splitLines = Int -> [String] -> [String]
splitLinesN Int
7
{-# INLINE splitLines #-}
splitLinesN :: Int -> [String] -> [String]
splitLinesN :: Int -> [String] -> [String]
splitLinesN Int
n [String]
xss
| forall (t :: * -> *) a. Foldable t => t a -> Bool
null [String]
xss Bool -> Bool -> Bool
|| Int
n forall a. Ord a => a -> a -> Bool
<= Int
0 = []
| Bool
otherwise = forall a. (a -> Bool) -> (a -> [a]) -> [a] -> [a]
mapI (\String
xs -> forall a. Ord a => a -> a -> Ordering
compare (forall (t :: * -> *) a. Foldable t => t a -> Int
length forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String]
words forall a b. (a -> b) -> a -> b
$ String
xs) Int
n forall a. Eq a => a -> a -> Bool
== Ordering
GT) (\String
xs -> let yss :: [String]
yss = String -> [String]
words String
xs in
[String] -> [String]
splitLines forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map [String] -> String
unwords forall b c a. (b -> c) -> (a -> b) -> a -> c
. (\([String]
q,[String]
r) -> [[String]
q,[String]
r]) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Int -> [a] -> ([a], [a])
splitAt (forall a. Bits a => a -> Int -> a
shiftR (forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
yss) Int
1) forall a b. (a -> b) -> a -> b
$ [String]
yss) forall a b. (a -> b) -> a -> b
$ [String]
xss
prepareTextN :: Int -> String -> [String]
prepareTextN :: Int -> String -> [String]
prepareTextN Int
n = forall a. (a -> Bool) -> [a] -> [a]
filter (forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any Char -> Bool
isUkrainianL) forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> [String] -> [String]
splitLinesN Int
n forall b c a. (b -> c) -> (a -> b) -> a -> c
.
forall a b. (a -> b) -> [a] -> [b]
map ([String] -> String
unwords forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> [String]
concatenated2 forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> [String]
participleConc forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> [String]
auxiliary1 forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> [String]
complexWords forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String]
words forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
filter (\Char
t -> Char -> Bool
isAlpha Char
t Bool -> Bool -> Bool
|| Char -> Bool
isSpC Char
t)) forall b c a. (b -> c) -> (a -> b) -> a -> c
.
forall a. (a -> Bool) -> [a] -> [a]
filter (Bool -> Bool
not forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *) a. Foldable t => t a -> Bool
null) forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String]
lines
participleConc :: [String] -> [String]
participleConc :: [String] -> [String]
participleConc (String
xs:String
ys:String
zs:[String]
yss)
| String -> Bool
isParticipleAppended String
ys = if String -> Bool
isParticipleAppended String
zs then (String
xs forall a. Monoid a => a -> a -> a
`mappend` String
ys forall a. Monoid a => a -> a -> a
`mappend` String
zs)forall a. a -> [a] -> [a]
:[String] -> [String]
participleConc [String]
yss
else [String] -> [String]
participleConc (String
xs forall a. Monoid a => a -> a -> a
`mappend` String
ysforall a. a -> [a] -> [a]
:String
zsforall a. a -> [a] -> [a]
:[String]
yss)
| Bool
otherwise = String
xsforall a. a -> [a] -> [a]
:[String] -> [String]
participleConc (String
ysforall a. a -> [a] -> [a]
:String
zsforall a. a -> [a] -> [a]
:[String]
yss)
participleConc (String
xs:String
ys:[String]
yss)
| String -> Bool
isParticipleAppended String
ys = (String
xs forall a. Monoid a => a -> a -> a
`mappend` String
ys)forall a. a -> [a] -> [a]
:[String] -> [String]
participleConc [String]
yss
| Bool
otherwise = String
xsforall a. a -> [a] -> [a]
:[String] -> [String]
participleConc (String
ysforall a. a -> [a] -> [a]
:[String]
yss)
participleConc [String]
yss = [String]
yss
isParticipleAppended :: String -> Bool
isParticipleAppended :: String -> Bool
isParticipleAppended String
xs = String
xs forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [String
"\1073",String
"\1073\1080",String
"\1078\1077",String
"\1078"]
isPrepended :: String -> Bool
isPrepended :: String -> Bool
isPrepended String
xs
| String -> Bool
isParticipleAppended String
xs = Bool
True
| String -> Bool
isPreposition String
xs = Bool
True
| Bool
otherwise = String -> Bool
isConcatenated String
xs
jottedCnv :: String -> String
jottedCnv :: String -> String
jottedCnv String
xs = forall a. Int -> [a] -> [a]
drop Int
1 forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String
jottedConv forall a b. (a -> b) -> a -> b
$ Char
' 'forall a. a -> [a] -> [a]
:String
xs
auxiliary1 :: [String] -> [String]
auxiliary1 :: [String] -> [String]
auxiliary1 yss :: [String]
yss@(String
xs:String
zs:[String]
xss)
| String -> Bool
isParticipleAppended String
xs = String
xsforall a. a -> [a] -> [a]
:[String] -> [String]
auxiliary1 (String
zsforall a. a -> [a] -> [a]
:[String]
xss)
| String -> Bool
isPreposition String
xs Bool -> Bool -> Bool
|| String -> Bool
isConcatenated String
xs = [String] -> [String]
auxiliary1 (forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap String -> String
jottedCnv ([String]
tss forall a. Monoid a => a -> a -> a
`mappend` [String]
wss)forall a. a -> [a] -> [a]
:[String]
vss)
| Bool
otherwise = String
xsforall a. a -> [a] -> [a]
:[String] -> [String]
auxiliary1 (String
zsforall a. a -> [a] -> [a]
:[String]
xss)
where ([String]
tss,[String]
uss) = forall a. (a -> Bool) -> [a] -> ([a], [a])
span String -> Bool
isPrepended [String]
yss
([String]
wss,[String]
vss) = forall a. Int -> [a] -> ([a], [a])
splitAt Int
1 [String]
uss
auxiliary1 [String]
xss = [String]
xss
isPreposition :: String -> Bool
isPreposition :: String -> Bool
isPreposition String
ts =
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstLSorted' Bool
False
(forall a b. [a] -> [b] -> [(a, b)]
zip [String
"\1030\1079", String
"\1041\1077\1079", String
"\1041\1110\1083\1103", String
"\1042",
String
"\1042\1110\1076", String
"\1044\1083\1103", String
"\1044\1086", String
"\1047",
String
"\1047\1072", String
"\1047\1072\1088\1072\1076\1080", String
"\1047\1110",
String
"\1050", String
"\1050\1086\1083\1086", String
"\1050\1088\1110\1079\1100",
String
"\1050\1088\1110\1084", String
"\1052\1077\1078", String
"\1052\1077\1078\1080",
String
"\1052\1110\1078", String
"\1053\1072", String
"\1053\1072\1076", String
"\1054",
String
"\1054\1073", String
"\1054\1076", String
"\1054\1082\1088\1110\1084",
String
"\1055\1077\1088\1077\1076", String
"\1055\1086", String
"\1055\1088\1080",
String
"\1055\1088\1086", String
"\1055\1088\1086\1090\1080",
String
"\1055\1110\1076", String
"\1055\1110\1089\1083\1103",
String
"\1057\1077\1088\1077\1076", String
"\1057\1077\1088\1077\1076\1080",
String
"\1059", String
"\1063\1077\1088\1077\1079", String
"\1073\1077\1079",
String
"\1073\1110\1083\1103", String
"\1074", String
"\1074\1110\1076",
String
"\1076\1083\1103", String
"\1076\1086", String
"\1079", String
"\1079\1072",
String
"\1079\1072\1088\1072\1076\1080", String
"\1079\1110",
String
"\1082", String
"\1082\1086\1083\1086", String
"\1082\1088\1110\1079\1100",
String
"\1082\1088\1110\1084", String
"\1084\1077\1078", String
"\1084\1077\1078\1080",
String
"\1084\1110\1078", String
"\1085\1072", String
"\1085\1072\1076", String
"\1086",
String
"\1086\1073", String
"\1086\1076", String
"\1086\1082\1088\1110\1084",
String
"\1087\1077\1088\1077\1076", String
"\1087\1086", String
"\1087\1088\1080",
String
"\1087\1088\1086", String
"\1087\1088\1086\1090\1080", String
"\1087\1110\1076",
String
"\1087\1110\1089\1083\1103", String
"\1089\1077\1088\1077\1076",
String
"\1089\1077\1088\1077\1076\1080", String
"\1091",
String
"\1095\1077\1088\1077\1079", String
"\1110\1079"] forall a b. (a -> b) -> a -> b
$
forall a. Int -> a -> [a]
replicate Int
200 Bool
True) String
ts
{-# INLINE isPreposition #-}
isConcatenated :: String -> Bool
isConcatenated :: String -> Bool
isConcatenated String
ts
| forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
ts = Bool
False
| Bool
otherwise = forall a. Ord a => a -> a -> Ordering
compare (forall (t :: * -> *) a. Foldable t => t a -> Int
length String
ts) Int
2 forall a. Eq a => a -> a -> Bool
/= Ordering
GT Bool -> Bool -> Bool
&&
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstLSorted' Bool
True (forall a b. [a] -> [b] -> [(a, b)]
zip [String
"\1028", String
"\1042\1080", String
"\1052\1080", String
"\1058\1080", String
"\1058\1110",
String
"\1062\1110", String
"\1071", String
"\1074\1080", String
"\1084\1080", String
"\1090\1080", String
"\1090\1110",
String
"\1094\1110", String
"\1103", String
"\1108"] forall a b. (a -> b) -> a -> b
$ forall a. Int -> a -> [a]
replicate Int
14 Bool
False) String
ts Bool -> Bool -> Bool
&& (forall a. [a] -> a
head String
ts forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` String
"\1031\1111")
{-# INLINE isConcatenated #-}
concatenated2 :: [String] -> [String]
concatenated2 :: [String] -> [String]
concatenated2 (String
xs:String
ys:[String]
xss) =
forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstLSorted' (String
xsforall a. a -> [a] -> [a]
:[String] -> [String]
concatenated2 (String
ysforall a. a -> [a] -> [a]
:[String]
xss)) (forall a b. [a] -> [b] -> [(a, b)]
zip [String
"\1040\1073\1086",String
"\1040\1076\1078\1077",
String
"\1040\1083\1077",String
"\1040\1085\1110\1078",String
"\1041\1086\1076\1072\1081",
String
"\1041\1091\1094\1110\1084\1090\1086",String
"\1042\1078\1077",String
"\1042\1080\1082\1083\1102\1095\1085\1086",
String
"\1042\1083\1072\1089\1085\1077",String
"\1042\1090\1110\1084",String
"\1044\1072\1074\1072\1081",
String
"\1047\1072\1090\1077",String
"\1050\1086\1083\1080",String
"\1051\1077\1076\1074\1077",String
"\1051\1080\1096\1077",
String
"\1052\1072\1081\1078\1077",String
"\1052\1086\1074",String
"\1052\1086\1074\1073\1080",
String
"\1052\1086\1074\1073\1080\1090\1086",String
"\1053\1072\1074\1110\1090\1100",
String
"\1053\1072\1089\1082\1110\1083\1100\1082\1080",String
"\1053\1072\1095\1077",String
"\1053\1072\1095\1077\1073",
String
"\1053\1072\1095\1077\1073\1090\1086",String
"\1053\1077\1074\1078\1077",String
"\1053\1077\1084\1086\1074",
String
"\1053\1077\1084\1086\1074\1073\1080",String
"\1053\1077\1084\1086\1074\1073\1080\1090\1086",
String
"\1053\1077\1085\1072\1095\1077",String
"\1053\1077\1085\1072\1095\1077\1073\1090\1086",
String
"\1053\1077\1093\1072\1081",String
"\1053\1090\1078\1077",String
"\1053\1110\1073\1080",
String
"\1053\1110\1073\1080\1090\1086",String
"\1053\1110\1078",String
"\1054\1090\1086\1078",
String
"\1055\1088\1080\1090\1086\1084\1091",String
"\1055\1088\1080\1090\1110\1084",
String
"\1055\1088\1080\1095\1086\1084\1091",String
"\1055\1088\1080\1095\1110\1084",
String
"\1055\1088\1086\1090\1077",String
"\1057\1072\1084\1077",String
"\1057\1077\1073\1090\1086",
String
"\1058\1072\1082\1080",String
"\1058\1086\1073\1090\1086",String
"\1058\1110\1083\1100\1082\1080",
String
"\1061\1072\1081",String
"\1061\1086\1095",String
"\1061\1110\1073\1072",String
"\1062\1077\1073\1090\1086",
String
"\1065\1086\1073",String
"\1071\1082\1073\1080",String
"\1071\1082\1088\1072\1079",String
"\1071\1082\1097\1086",
String
"\1072\1073\1086",String
"\1072\1076\1078\1077",String
"\1072\1083\1077",String
"\1072\1085\1110\1078",
String
"\1073\1086\1076\1072\1081",String
"\1073\1091\1094\1110\1084\1090\1086",String
"\1074\1078\1077",
String
"\1074\1080\1082\1083\1102\1095\1085\1086",String
"\1074\1083\1072\1089\1085\1077",
String
"\1074\1090\1110\1084",String
"\1076\1072\1074\1072\1081",String
"\1079\1072\1090\1077",String
"\1082\1086\1083\1080",
String
"\1083\1077\1076\1074\1077",String
"\1083\1080\1096\1077",String
"\1084\1072\1081\1078\1077",String
"\1084\1086\1074",
String
"\1084\1086\1074\1073\1080",String
"\1084\1086\1074\1073\1080\1090\1086",String
"\1085\1072\1074\1110\1090\1100",
String
"\1085\1072\1089\1082\1110\1083\1100\1082\1080",String
"\1085\1072\1095\1077",String
"\1085\1072\1095\1077\1073",
String
"\1085\1072\1095\1077\1073\1090\1086",String
"\1085\1077\1074\1078\1077",String
"\1085\1077\1084\1086\1074",
String
"\1085\1077\1084\1086\1074\1073\1080",String
"\1085\1077\1084\1086\1074\1073\1080\1090\1086",
String
"\1085\1077\1085\1072\1095\1077",String
"\1085\1077\1085\1072\1095\1077\1073\1090\1086",
String
"\1085\1077\1093\1072\1081",String
"\1085\1110\1073\1080",String
"\1085\1110\1073\1080\1090\1086",
String
"\1085\1110\1078",String
"\1086\1090\1078\1077",String
"\1086\1090\1086\1078",String
"\1087\1088\1080\1090\1086\1084\1091",
String
"\1087\1088\1080\1090\1110\1084",String
"\1087\1088\1080\1095\1086\1084\1091",String
"\1087\1088\1080\1095\1110\1084",
String
"\1087\1088\1086\1090\1077",String
"\1089\1072\1084\1077",String
"\1089\1077\1073\1090\1086",String
"\1090\1072\1082\1080",
String
"\1090\1086\1073\1090\1086",String
"\1090\1110\1083\1100\1082\1080",String
"\1093\1072\1081",String
"\1093\1086\1095",
String
"\1093\1110\1073\1072",String
"\1094\1077\1073\1090\1086",String
"\1097\1086\1073",String
"\1103\1082\1073\1080",
String
"\1103\1082\1088\1072\1079",String
"\1103\1082\1097\1086"] forall a b. (a -> b) -> a -> b
$ forall a. Int -> a -> [a]
replicate Int
200 ((String
xs forall a. Monoid a => a -> a -> a
`mappend` String -> String
jottedCnv String
ys)forall a. a -> [a] -> [a]
:[String] -> [String]
concatenated2 [String]
xss)) String
xs
concatenated2 [String]
xss = [String]
xss
isSpC :: Char -> Bool
isSpC :: Char -> Bool
isSpC Char
x = Char
x forall a. Eq a => a -> a -> Bool
== Char
'\'' Bool -> Bool -> Bool
|| Char
x forall a. Eq a => a -> a -> Bool
== Char
' ' Bool -> Bool -> Bool
|| Char
x forall a. Eq a => a -> a -> Bool
== Char
'\x2019' Bool -> Bool -> Bool
|| Char
x forall a. Eq a => a -> a -> Bool
== Char
'\x02BC' Bool -> Bool -> Bool
|| Char
x forall a. Eq a => a -> a -> Bool
== Char
'-'
{-# INLINE isSpC #-}
jottedConv :: String -> String
jottedConv :: String -> String
jottedConv (Char
x:Char
y:String
xs)
| Char -> Bool
isSpC Char
x = Char
xforall a. a -> [a] -> [a]
:(forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstLSorted' (String -> String
jottedConv (Char
yforall a. a -> [a] -> [a]
:String
xs))
[(Char
'\1028', Char
'\1049'forall a. a -> [a] -> [a]
:Char
'\1077'forall a. a -> [a] -> [a]
:String -> String
jottedConv String
xs),
(Char
'\1031', Char
'\1049'forall a. a -> [a] -> [a]
:Char
'\1110'forall a. a -> [a] -> [a]
:String -> String
jottedConv String
xs),
(Char
'\1070', Char
'\1049'forall a. a -> [a] -> [a]
:Char
'\1091'forall a. a -> [a] -> [a]
:String -> String
jottedConv String
xs),
(Char
'\1071', Char
'\1049'forall a. a -> [a] -> [a]
:Char
'\1072'forall a. a -> [a] -> [a]
:String -> String
jottedConv String
xs),
(Char
'\1102', Char
'\1081'forall a. a -> [a] -> [a]
:Char
'\1091'forall a. a -> [a] -> [a]
:String -> String
jottedConv String
xs),
(Char
'\1103', Char
'\1081'forall a. a -> [a] -> [a]
:Char
'\1072'forall a. a -> [a] -> [a]
:String -> String
jottedConv String
xs),
(Char
'\1108', Char
'\1081'forall a. a -> [a] -> [a]
:Char
'\1077'forall a. a -> [a] -> [a]
:String -> String
jottedConv String
xs),
(Char
'\1111', Char
'\1081'forall a. a -> [a] -> [a]
:Char
'\1110'forall a. a -> [a] -> [a]
:String -> String
jottedConv String
xs)] Char
y)
| Bool
otherwise = Char
xforall a. a -> [a] -> [a]
:String -> String
jottedConv (Char
yforall a. a -> [a] -> [a]
:String
xs)
jottedConv String
xs = String
xs
aux4 :: String -> Char
aux4 :: String -> Char
aux4 String
xs
| String
xs forall a. Eq a => a -> a -> Bool
== String
"\1076\1078" = Char
'j'
| String
xs forall a. Eq a => a -> a -> Bool
== String
"\1076\1079" = Char
'z'
| String
xs forall a. Eq a => a -> a -> Bool
== String
"\1089\1100" = Char
's'
| String
xs forall a. Eq a => a -> a -> Bool
== String
"\1094\1100" = Char
'c'
| forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
xs = forall a. HasCallStack => String -> a
error String
"Phonetic.Languages.Ukrainian.PrepareText.aux4: Empty String. "
| Bool
otherwise = forall a. [a] -> a
head String
xs
isUkrainianL :: Char -> Bool
isUkrainianL :: Char -> Bool
isUkrainianL Char
y | (Char
y forall a. Ord a => a -> a -> Bool
>= Char
'\1040' Bool -> Bool -> Bool
&& Char
y forall a. Ord a => a -> a -> Bool
<= Char
'\1065') Bool -> Bool -> Bool
|| (Char
y forall a. Ord a => a -> a -> Bool
>= Char
'\1070' Bool -> Bool -> Bool
&& Char
y forall a. Ord a => a -> a -> Bool
<= Char
'\1097') = Bool
True
| Bool
otherwise = forall a b. Ord a => b -> [(a, b)] -> a -> b
getBFstLSorted' Bool
False (forall a b. (a -> b) -> [a] -> [b]
map (\Char
x -> (Char
x, Bool
True)) forall a b. (a -> b) -> a -> b
$ String
"\1028\1030\1031\1068\1100\1102\1103\1108\1110\1111\1168\1169\8217") Char
y
growLinesN :: Int -> [String] -> [String]
growLinesN :: Int -> [String] -> [String]
growLinesN Int
n [String]
xss
| forall (t :: * -> *) a. Foldable t => t a -> Bool
null [String]
xss Bool -> Bool -> Bool
|| Int
n forall a. Ord a => a -> a -> Bool
< Int
0 = []
| Bool
otherwise = [String] -> String
unwords [String]
yss forall a. a -> [a] -> [a]
: Int -> [String] -> [String]
growLinesN Int
n [String]
zss
where l :: Int
l = forall (t :: * -> *) a. Foldable t => t a -> Int
length forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
takeWhile (forall a. Ord a => a -> a -> Bool
<= Int
n) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> a -> a) -> [a] -> [a]
scanl1 forall a. Num a => a -> a -> a
(+) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map (forall (t :: * -> *) a. Foldable t => t a -> Int
length forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String]
words) forall a b. (a -> b) -> a -> b
$ [String]
xss
([String]
yss,[String]
zss) = forall a. Int -> [a] -> ([a], [a])
splitAt (forall a. Ord a => a -> a -> a
max Int
l Int
1) [String]
xss
prepareGrowTextMN
:: Int
-> Int
-> String
-> [String]
prepareGrowTextMN :: Int -> Int -> String -> [String]
prepareGrowTextMN Int
m Int
n = Int -> [String] -> [String]
growLinesN Int
m forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String -> [String]
prepareTextN Int
n
{-# INLINE prepareGrowTextMN #-}
tuneLinesN :: Int -> [String] -> [String]
tuneLinesN :: Int -> [String] -> [String]
tuneLinesN Int
n [String]
xss
| forall (t :: * -> *) a. Foldable t => t a -> Bool
null [String]
xss Bool -> Bool -> Bool
|| Int
n forall a. Ord a => a -> a -> Bool
< Int
0 = []
| Bool
otherwise =
let wss :: [String]
wss = String -> [String]
words forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> String
unwords forall a b. (a -> b) -> a -> b
$ [String]
xss
([String]
yss,[String]
zss) = forall a. Int -> [a] -> ([a], [a])
splitAt Int
n [String]
wss
in [String] -> String
unwords [String]
yss forall a. a -> [a] -> [a]
: Int -> [String] -> [String]
tuneLinesN Int
n [String]
zss
prepareTuneTextMN
:: Int
-> Int
-> String
-> [String]
prepareTuneTextMN :: Int -> Int -> String -> [String]
prepareTuneTextMN Int
m Int
n = Int -> [String] -> [String]
tuneLinesN Int
m forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String -> [String]
prepareTextN Int
n
{-# INLINE prepareTuneTextMN #-}