monky-2.0.0.0: Monky/Outputs/Ascii.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE EmptyDataDecls #-}
{-|
Module : Monky.Outputs.Ascii
Description : Output module for Ascii
Maintainer : ongy
Stability : testing
Portability : Linux
This module provides the output generation for ascii outputs
-}
module Monky.Outputs.Ascii
( AsciiOutput
, getAsciiOut
)
where
import System.IO (hFlush, stdout)
import Monky.Modules
import qualified Data.Text.IO as T
-- |The output handle for a ascii pipe
data AsciiOutput = AsciiOutput
doOut :: MonkyOut -> IO ()
doOut (MonkyPlain t) = T.putStr t
doOut (MonkyImage _ _) = return () -- Images are not supported :(
doOut (MonkyBar p) = putStr (show p) >> putChar '%'
doOut (MonkyHBar p) = putStr $ show p
doOut (MonkyColor _ o) = doOut o
doSegment :: [MonkyOut] -> IO ()
doSegment = mapM_ doOut
instance MonkyOutput AsciiOutput where
doLine _ [] = error "Why are you calling doLine without any modules? I don't think your config makes sense"
doLine _ [x] = do
doSegment x
putStr "\n"
hFlush stdout
doLine h (x:xs) = do
doSegment x
putStr " | "
doLine h xs
-- |Get an output handle for ascii formatting
getAsciiOut :: IO AsciiOutput
getAsciiOut = return AsciiOutput