module StringUtils where
--import Char(isAlpha,isAlphanum,isDigit)

expandTabs :: Int -> [Char] -> [Char]
expandTabs Int
n = Int -> [Char] -> [Char]
exp (Int
n::Int)
  where
    exp :: Int -> [Char] -> [Char]
exp Int
k [] = []
    exp Int
k (Char
'\t':[Char]
xs) = [Char
' '|Int
_<-[Int
1..Int
k]] [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Int -> [Char] -> [Char]
exp Int
n [Char]
xs
    exp Int
k (Char
x:[Char]
xs) = Char
xChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:Int -> [Char] -> [Char]
exp (if Int
kInt -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==Int
1 then Int
n else Int
kInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1) [Char]
xs

rmBS :: [Char] -> [Char]
rmBS [Char]
"" = [Char]
""
rmBS (Char
c:Char
'\b':[Char]
cs) = [Char] -> [Char]
rmBS [Char]
cs
rmBS (Char
c:[Char]
cs) = Char
cChar -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:[Char] -> [Char]
rmBS [Char]
cs

wrapLine :: Int -> [a] -> [[a]]
wrapLine Int
n [a]
xs =
    let first :: [a]
first = Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
take Int
n [a]
xs
        rest :: [a]
rest = Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
drop Int
n [a]
xs
    in  [a]
first [a] -> [[a]] -> [[a]]
forall a. a -> [a] -> [a]
: (if [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [a]
rest then [] else Int -> [a] -> [[a]]
wrapLine Int
n [a]
rest)