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