packages feed

tag-stream-0.1.0: Highlight.hs

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