From 86e880f9787479e71a69d9a3c75064aa3d095a79 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Sun, 14 Feb 2016 22:28:16 +0000 Subject: Minor code cleanup --- server/src/Thermoprint/Server/Printer/Generic.hs | 29 ++++++++++++++++-------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/server/src/Thermoprint/Server/Printer/Generic.hs b/server/src/Thermoprint/Server/Printer/Generic.hs index 33172ef..f37be21 100644 --- a/server/src/Thermoprint/Server/Printer/Generic.hs +++ b/server/src/Thermoprint/Server/Printer/Generic.hs @@ -40,7 +40,7 @@ import Control.Monad.Catch import Data.Foldable -import Data.List (intersperse, genericReplicate, intercalate) +import Data.List (genericReplicate, intercalate) import Data.Int (Int64) @@ -78,16 +78,25 @@ escSequence = mapM_ pushWord8 . (esc:) initialize :: Render initialize = replicateM_ 2 $ escSequence [64] +newl :: Lazy.ByteString +newl = "\r\n" + +newls :: Integer -> Lazy.ByteString +newls i = mconcat $ genericReplicate i newl + finalize :: Render -- TODO: adjust this to produce proper padding -finalize = encode' "\n\n\n" +finalize = encode' $ newls 2 + +intersperse :: b -> (a -> b) -> Seq a -> Seq b +intersperse _ _ (viewl -> EmptyL) = Seq.empty +intersperse _ f (viewl -> x :< (viewl -> EmptyL)) = Seq.singleton $ f x +intersperse b f (viewl -> x :< xs) = f x <| b <| intersperse' b f xs -intersperse' :: b -> (a -> b) -> Seq a -> Seq b -intersperse' _ _ (viewl -> EmptyL) = Seq.empty -intersperse' _ f (viewl -> x :< (viewl -> EmptyL)) = Seq.singleton $ f x -intersperse' b f (viewl -> x :< xs) = f x <| b <| intersperse' b f xs +intersperse' :: Monad m => m b -> (a -> m b) -> Seq a -> m () +intersperse' b f = sequence_ . intersperse b f render :: Printout -> Render -render = sequence_ . intersperse' (encode' "\n\n") renderPar +render = intersperse' (encode' newl) renderPar renderPar :: Paragraph -> Render renderPar = mapM_ renderChunk @@ -96,6 +105,6 @@ renderPar = mapM_ renderChunk renderChunk (Cooked block) = renderBlock block renderBlock :: Block -> Render -renderBlock (VSpace n) = encode' $ genericReplicate n '\n' -renderBlock (NewlSep xs) = sequence_ intercalate (encode' "\n") . map renderBlock . toList $ xs -renderBlock (Line x) = undefined +renderBlock (VSpace n) = encode' $ newls n +renderBlock (NewlSep xs) = intersperse' (encode' newl) . fmap renderBlock $ xs +renderBlock (Line x) = undefined -- cgit v1.2.3