36 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
| -- | Basic color helpers for prettifying console output.
 | |
| 
 | |
| module Hledger.Utils.Color
 | |
| (
 | |
|   color,
 | |
|   bgColor,
 | |
|   colorB,
 | |
|   bgColorB,
 | |
|   Color(..),
 | |
|   ColorIntensity(..)
 | |
| )
 | |
| where
 | |
| 
 | |
| 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
 |