diff --git a/HighlightText.hs b/HighlightText.hs
new file mode 100644
--- /dev/null
+++ b/HighlightText.hs
@@ -0,0 +1,40 @@
+import System.IO
+import System.Environment
+import System.Console.ANSI
+
+import Data.Maybe
+import Data.Text (Text)
+import qualified Data.Text as T
+import Data.Text.Encoding (decodeUtf8With)
+import Data.Text.Encoding.Error (lenientDecode)
+import qualified Data.Text.Lazy as L
+import qualified Data.Text.Lazy.Encoding as L
+import Data.Text.Lazy.Internal (defaultChunkSize)
+import Data.Text.Lazy.Builder (toLazyTextWith)
+
+import qualified Data.Conduit.Blaze as B
+import qualified Blaze.ByteString.Builder as B
+import qualified Blaze.ByteString.Builder.Char8 as B
+import qualified Data.Conduit as C
+import qualified Data.Conduit.Binary as CB
+import qualified Data.Conduit.List as CL
+
+import qualified Text.HTML.TagStream.Text as T
+
+color :: Color -> Text -> Text
+color c s = T.concat [ T.pack $ setSGRCode [SetColor Foreground Dull c]
+                     , s
+                     , T.pack $ setSGRCode [SetColor Foreground Dull White]
+                     ]
+
+main :: IO ()
+main = do
+    args <- getArgs
+    filename <- maybe (fail "Highlight file") return (listToMaybe args)
+    C.runResourceT $
+        CB.sourceFile filename
+        C.$= CL.map (decodeUtf8With lenientDecode)
+        C.$= T.tokenStream
+        C.$= CL.map (B.fromLazyByteString . L.encodeUtf8 . (toLazyTextWith defaultChunkSize) . T.showToken (color Red))
+        C.$= B.builderToByteString
+        C.$$ CB.sinkHandle stdout
diff --git a/ParseText.hs b/ParseText.hs
new file mode 100644
--- /dev/null
+++ b/ParseText.hs
@@ -0,0 +1,19 @@
+import Data.Maybe
+import System.Environment
+import qualified Text.HTML.TagStream.Text as T
+import Data.Text.Encoding (decodeUtf8With)
+import Data.Text.Encoding.Error (lenientDecode)
+import qualified Data.Conduit as C
+import qualified Data.Conduit.Binary as C
+import qualified Data.Conduit.List as CL
+
+main :: IO ()
+main = do
+    args <- getArgs
+    filename <- maybe (fail "pass file path") return (listToMaybe args)
+    _ <- C.runResourceT $
+           C.sourceFile filename
+           C.$= CL.map (decodeUtf8With lenientDecode)
+           C.$= T.tokenStream
+           C.$$ CL.consume
+    return ()
diff --git a/tagstream-conduit.cabal b/tagstream-conduit.cabal
--- a/tagstream-conduit.cabal
+++ b/tagstream-conduit.cabal
@@ -1,5 +1,5 @@
 Name:                tagstream-conduit
-Version:             0.5.0
+Version:             0.5.1
 Synopsis:            streamlined html tag parser
 Description:
     Tag-stream is a library for parsing HTML//XML to a token stream.
@@ -17,6 +17,8 @@
 Extra-source-files:    tests/Tests.hs
                      , Highlight.hs
                      , Parse.hs
+                     , HighlightText.hs
+                     , ParseText.hs
 Cabal-version:       >=1.8
 
 source-repository head
