{-# OPTIONS_GHC -Wall #-} module Main where import ALON.Diff.HTML (normalizeLineEndings,normalizeHTMLTokens) import qualified Data.Text as T import Data.Text.Lazy (toStrict) import Data.Text.Lazy.Encoding (decodeUtf8) import qualified Data.ByteString.Lazy as L import System.IO (hPutStrLn, stderr) import System.IO.Error (IOError) import System.Exit (exitFailure) import Control.Exception (catch) import System.Environment (getArgs) import Text.HTML.Parser readUTF8File :: String -> IO T.Text readUTF8File filePath = L.readFile filePath `catch` errorHandler >>= return . toStrict . decodeUtf8 where errorHandler e = let _ = (e :: IOError) in hPutStrLn stderr ("Error opening HTML file " ++ filePath) >> exitFailure main :: IO () main = do args <- getArgs case args of (htmlFile:_) -> do htmlText <- readUTF8File htmlFile let htmlTextNormalizeLineEndings = normalizeLineEndings htmlText let htmlTokens = parseTokens htmlTextNormalizeLineEndings let normalizedHtmlTokens = normalizeHTMLTokens htmlTokens putStrLn $ show $ renderTokens normalizedHtmlTokens _ -> hPutStrLn stderr "Expected at least one command line parameter"