module FunnyPrint ( funnyPrint
, prompt
, prompt2 ) where
import IPPrint ( pshow )
import Language.Haskell.HsColour.Output ( TerminalType(..) )
import Language.Haskell.HsColour.Colourise ( Colour(..)
, Highlight(..)
, defaultColourPrefs
)
import Language.Haskell.HsColour ( ColourPrefs(..)
, Output(TTYg)
, hscolour
)
import Language.Haskell.HsColour.ANSI ( highlightOnG
, highlightOff )
terminal :: TerminalType
terminal = XTerm256Compatible
black :: Highlight
black = Foreground Black
red :: Highlight
red = Foreground Red
green :: Highlight
green = Foreground Green
yellow :: Highlight
yellow = Foreground Yellow
blue :: Highlight
blue = Foreground Blue
cyan :: Highlight
cyan = Foreground Cyan
bold :: Highlight
bold = Bold
funnyPrint :: (Show a) => a
-> IO ()
funnyPrint = putStrLn . colorize . con . pshow
where
con :: String -> String
con [] = []
con li@(x:xs) | x == '\"' = '\"':str ++ "\"" ++ (con rest)
| x == '\'' = '\'':chr:'\'':(con rest')
| otherwise = x:con xs
where
(str, rest):_ = reads li :: [(String, String)]
(chr, rest'):_ = reads li :: [(Char, String)]
prefs = TTYg terminal
colorize = hscolour prefs colours False False "" False
colours = defaultColourPrefs { conid = [ yellow, bold ]
, conop = [ yellow ]
, string = [ green ]
, char = [ cyan ]
, number = [ red, bold ]
, layout = [ black ]
, keyglyph = [ black ]
}
mark :: Highlight -> String
mark h = highlightOnG terminal [h, bold]
prompt :: String
-> String
-> String
-> String
prompt m t s = mark yellow
++ m
++ mark green
++ t
++ mark blue
++ s
++ highlightOff
prompt2 :: String
-> String
-> String
-> String
prompt2 m t s = mark yellow
++ m
++ mark green
++ t
++ mark red
++ s
++ highlightOff