module Text.Format.Colored (

	colored, coloredLine,

	hColored, hColoredLine

	) where



import Prelude.Unicode



import Data.Maybe (mapMaybe)

import System.Console.ANSI

import System.IO



import Text.Format



colored  Formatted  IO ()

colored = hColored stdout



coloredLine  Formatted  IO ()

coloredLine = hColoredLine stdout



hColored  Handle  Formatted  IO ()

hColored h (Formatted fs) = mapM_ go fs >> hSetSGR h [] where

	go (FormattedPart flags v) = setFlags flags >> hPutStr h v >> hSetSGR h []

	setFlags = hSetSGR h  mapMaybe toSGR

	toSGR "bold" = Just $ SetConsoleIntensity BoldIntensity

	toSGR "italic" = Just $ SetItalicized True

	toSGR "undelined" = Just $ SetUnderlining SingleUnderline

	toSGR "black" = Just $ SetColor Foreground Vivid Black

	toSGR "red" = Just $ SetColor Foreground Vivid Red

	toSGR "green" = Just $ SetColor Foreground Vivid Green

	toSGR "yellow" = Just $ SetColor Foreground Vivid Yellow

	toSGR "blue" = Just $ SetColor Foreground Vivid Blue

	toSGR "magenta" = Just $ SetColor Foreground Vivid Magenta

	toSGR "cyan" = Just $ SetColor Foreground Vivid Cyan

	toSGR "white" = Just $ SetColor Foreground Vivid White

	toSGR "darkgray" = Just $ SetColor Foreground Dull Black

	toSGR "darkred" = Just $ SetColor Foreground Dull Red

	toSGR "darkgreen" = Just $ SetColor Foreground Dull Green

	toSGR "darkyellow" = Just $ SetColor Foreground Dull Yellow

	toSGR "darkblue" = Just $ SetColor Foreground Dull Blue

	toSGR "darkmagenta" = Just $ SetColor Foreground Dull Magenta

	toSGR "darkcyan" = Just $ SetColor Foreground Dull Cyan

	toSGR "gray" = Just $ SetColor Foreground Dull White

	toSGR "bg/black" = Just $ SetColor Background Vivid Black

	toSGR "bg/red" = Just $ SetColor Background Vivid Red

	toSGR "bg/green" = Just $ SetColor Background Vivid Green

	toSGR "bg/yellow" = Just $ SetColor Background Vivid Yellow

	toSGR "bg/blue" = Just $ SetColor Background Vivid Blue

	toSGR "bg/magenta" = Just $ SetColor Background Vivid Magenta

	toSGR "bg/cyan" = Just $ SetColor Background Vivid Cyan

	toSGR "bg/white" = Just $ SetColor Background Vivid White

	toSGR "bg/darkgray" = Just $ SetColor Background Dull Black

	toSGR "bg/darkred" = Just $ SetColor Background Dull Red

	toSGR "bg/darkgreen" = Just $ SetColor Background Dull Green

	toSGR "bg/darkyellow" = Just $ SetColor Background Dull Yellow

	toSGR "bg/darkblue" = Just $ SetColor Background Dull Blue

	toSGR "bg/darkmagenta" = Just $ SetColor Background Dull Magenta

	toSGR "bg/darkcyan" = Just $ SetColor Background Dull Cyan

	toSGR "bg/gray" = Just $ SetColor Background Dull White

	toSGR _ = Nothing



hColoredLine  Handle  Formatted  IO ()

hColoredLine h f = hColored h f >> hPutStrLn h ""