{-# 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
([Text] -> Text) -> (Text -> [Text]) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Text] -> [Text]
normalizeEndOfText
([Text] -> [Text]) -> (Text -> [Text]) -> Text -> [Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Mode -> [Text] -> [Text]
normalizeEmptyLines Mode
Skip
([Text] -> [Text]) -> (Text -> [Text]) -> Text -> [Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text -> Text) -> [Text] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map Text -> Text
Text.stripEnd
([Text] -> [Text]) -> (Text -> [Text]) -> Text -> [Text]
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
"" Text -> [Text] -> [Text]
forall a. a -> [a] -> [a]
: Mode -> [Text] -> [Text]
normalizeEmptyLines Mode
Skip [Text]
ls
normalizeEmptyLines Mode
_ (Text
l:[Text]
ls) = Text
l Text -> [Text] -> [Text]
forall a. a -> [a] -> [a]
: Mode -> [Text] -> [Text]
normalizeEmptyLines Mode
Keep [Text]
ls
normalizeEndOfText :: [Text] -> [Text]
normalizeEndOfText :: [Text] -> [Text]
normalizeEndOfText = [Text] -> [Text]
forall a. [a] -> [a]
reverse ([Text] -> [Text]) -> ([Text] -> [Text]) -> [Text] -> [Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text -> Bool) -> [Text] -> [Text]
forall a. (a -> Bool) -> [a] -> [a]
dropWhile Text -> Bool
Text.null ([Text] -> [Text]) -> ([Text] -> [Text]) -> [Text] -> [Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Text] -> [Text]
forall a. [a] -> [a]
reverse