monky-2.0.0.0: Monky/Outputs/Utf8.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE EmptyDataDecls #-}
{-|
Module : Monky.Outputs.Utf8
Description : Output module for utf8
Maintainer : ongy
Stability : testing
Portability : Linux
This module provides the output generation for utf8 outputs
-}
module Monky.Outputs.Utf8
( Utf8Output
, getUtf8Out
)
where
import System.IO (hFlush, stdout)
import Monky.Modules
import qualified Data.Text.IO as T
-- |The output handle for a utf8 pipe
data Utf8Output = Utf8Output
barChar :: Int -> Char
barChar i
| i < (100 `div` 8) = '▁'
| i < (100 `div` 4) = '▂'
| i < (100 `div` 8 * 3) = '▃'
| i < (100 `div` 2) = '▄'
| i < (100 `div` 8 * 5) = '▅'
| i < (100 `div` 4 * 3) = '▆'
| i < (100 `div` 8 * 7) = '▇'
| otherwise = '█'
hBarChar :: Int -> Char
hBarChar i
| i < (100 `div` 8) = '▏'
| i < (100 `div` 4) = '▎'
| i < (100 `div` 8 * 3) = '▍'
| i < (100 `div` 2) = '▌'
| i < (100 `div` 8 * 5) = '▋'
| i < (100 `div` 4 * 3) = '▊'
| i < (100 `div` 8 * 7) = '▉'
| otherwise = '█'
doOut :: MonkyOut -> IO ()
doOut (MonkyPlain t) = T.putStr t
doOut (MonkyImage _ c) = putChar c -- Images are not supported :(
doOut (MonkyBar p) = putChar (barChar p)
doOut (MonkyHBar p) = do
putStr $ replicate (p `div` 10) '█'
putChar $ hBarChar (p `mod` 10 * 10)
doOut (MonkyColor _ o) = doOut o
doSegment :: [MonkyOut] -> IO ()
doSegment = mapM_ doOut
instance MonkyOutput Utf8Output 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 utf8 formatting
getUtf8Out :: IO Utf8Output
getUtf8Out = return Utf8Output