-- ASCIIArmor/Utils.hs: OpenPGP (RFC4880) ASCII armor implementation -- Copyright © 2012 Clint Adams -- This software is released under the terms of the Expat license. -- (See the LICENSE file). module Codec.Encryption.OpenPGP.ASCIIArmor.Utils ( crlfUnlines , crlfUnlinesLazy ) where import Data.ByteString (ByteString) import qualified Data.ByteString as B import qualified Data.ByteString.Char8 as BC8 import qualified Data.ByteString.Lazy as BL import qualified Data.ByteString.Lazy.Char8 as BLC8 import Data.List (intersperse) import Data.Char (isSpace) removeTrailingSpaces :: ByteString -> ByteString removeTrailingSpaces bs = fst $ BC8.spanEnd isSpace bs toLast :: (a -> a) -> [a] -> [a] toLast _ [] = [] toLast f [x] = [f x] toLast f (x:xs) = x : toLast f xs removeTrailingSpacesLazy :: BL.ByteString -> BL.ByteString removeTrailingSpacesLazy bs = BL.fromChunks $ toLast removeTrailingSpaces $ BL.toChunks bs crlfUnlines :: [ByteString] -> ByteString crlfUnlines [] = B.empty crlfUnlines ss = B.concat $ intersperse (BC8.pack "\r\n") $ map removeTrailingSpaces ss crlfUnlinesLazy :: [BL.ByteString] -> BL.ByteString crlfUnlinesLazy [] = BL.empty crlfUnlinesLazy ss = BL.concat $ intersperse (BLC8.pack "\r\n") $ map removeTrailingSpacesLazy ss