42 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
-- | Basic color helpers for prettifying console output.
 | 
						|
 | 
						|
{-# LANGUAGE CPP #-}
 | 
						|
{-# LANGUAGE OverloadedStrings #-}
 | 
						|
 | 
						|
module Hledger.Utils.Color
 | 
						|
(
 | 
						|
  color,
 | 
						|
  bgColor,
 | 
						|
  colorB,
 | 
						|
  bgColorB,
 | 
						|
  Color(..),
 | 
						|
  ColorIntensity(..)
 | 
						|
)
 | 
						|
where
 | 
						|
 | 
						|
#if !(MIN_VERSION_base(4,11,0))
 | 
						|
import Data.Semigroup ((<>))
 | 
						|
#endif
 | 
						|
import qualified Data.Text.Lazy.Builder as TB
 | 
						|
import System.Console.ANSI
 | 
						|
import Hledger.Utils.Text (WideBuilder(..))
 | 
						|
 | 
						|
 | 
						|
-- | Wrap a string in ANSI codes to set and reset foreground colour.
 | 
						|
color :: ColorIntensity -> Color -> String -> String
 | 
						|
color int col s = setSGRCode [SetColor Foreground int col] ++ s ++ setSGRCode []
 | 
						|
 | 
						|
-- | Wrap a string in ANSI codes to set and reset background colour.
 | 
						|
bgColor :: ColorIntensity -> Color -> String -> String
 | 
						|
bgColor int col s = setSGRCode [SetColor Background int col] ++ s ++ setSGRCode []
 | 
						|
 | 
						|
-- | Wrap a WideBuilder in ANSI codes to set and reset foreground colour.
 | 
						|
colorB :: ColorIntensity -> Color -> WideBuilder -> WideBuilder
 | 
						|
colorB int col (WideBuilder s w) =
 | 
						|
    WideBuilder (TB.fromString (setSGRCode [SetColor Foreground int col]) <> s <> TB.fromString (setSGRCode [])) w
 | 
						|
 | 
						|
-- | Wrap a WideBuilder in ANSI codes to set and reset background colour.
 | 
						|
bgColorB :: ColorIntensity -> Color -> WideBuilder -> WideBuilder
 | 
						|
bgColorB int col (WideBuilder s w) =
 | 
						|
    WideBuilder (TB.fromString (setSGRCode [SetColor Background int col]) <> s <> TB.fromString (setSGRCode [])) w
 |