import Data.Maybe
import System.IO
import System.Environment
import Text.HTML.TagStream
import Data.ByteString (ByteString)
import qualified Data.ByteString.Char8 as S
import System.Console.ANSI
import qualified Data.Enumerator as E
import qualified Data.Enumerator.Binary as E
import qualified Data.Enumerator.List as EL
color :: Color -> ByteString -> ByteString
color c s = S.concat [ S.pack $ setSGRCode [SetColor Foreground Dull c]
, s
, S.pack $ setSGRCode [SetColor Foreground Dull White]
]
hightlightStream :: Monad m => E.Enumeratee Token ByteString m b
hightlightStream = EL.map (showToken (color Red))
main :: IO ()
main = do
args <- getArgs
filename <- maybe (fail "pass file path") return (listToMaybe args)
let enum = (E.enumFile filename E.$= tokenStream) E.$= hightlightStream
E.run_ $ enum E.$$ E.iterHandle stdout