{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module OpenSuse.StripSpace ( stripSpace ) where
import OpenSuse.Prelude
import qualified Data.Text as Text
stripSpace :: Text -> Text
stripSpace :: Text -> Text
stripSpace = [Text] -> Text
Text.unlines
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Text] -> [Text]
normalizeEndOfText
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Mode -> [Text] -> [Text]
normalizeEmptyLines Mode
Skip
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map Text -> Text
Text.stripEnd
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> [Text]
Text.lines
data Mode = Skip | Keep
normalizeEmptyLines :: Mode -> [Text] -> [Text]
normalizeEmptyLines :: Mode -> [Text] -> [Text]
normalizeEmptyLines Mode
_ [] = []
normalizeEmptyLines Mode
Skip (Text
"":[Text]
ls) = Mode -> [Text] -> [Text]
normalizeEmptyLines Mode
Skip [Text]
ls
normalizeEmptyLines Mode
Keep (Text
"":[Text]
ls) = Text
"" forall a. a -> [a] -> [a]
: Mode -> [Text] -> [Text]
normalizeEmptyLines Mode
Skip [Text]
ls
normalizeEmptyLines Mode
_ (Text
l:[Text]
ls) = Text
l forall a. a -> [a] -> [a]
: Mode -> [Text] -> [Text]
normalizeEmptyLines Mode
Keep [Text]
ls
normalizeEndOfText :: [Text] -> [Text]
normalizeEndOfText :: [Text] -> [Text]
normalizeEndOfText = forall a. [a] -> [a]
reverse forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
dropWhile Text -> Bool
Text.null forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. [a] -> [a]
reverse