{- Example program for TagSoup. Detects basic syntax errors like isolated ampersands and unquoted attribute values. -} module Main where import Text.HTML.TagSoup.HT.Parser import qualified Text.HTML.TagSoup.HT.Position as Position import qualified Text.HTML.TagSoup.HT.PositionTag as PosTag import qualified Text.HTML.TagSoup.HT.Tag as Tag import System.Environment (getArgs) import Data.Maybe (mapMaybe) validate :: FilePath -> String -> String validate fileName input = let tags :: [PosTag.T Char] tags = runSoupWithPositionsName fileName input warnings = mapMaybe (\(pos,tag) -> fmap ((,) pos) $ Tag.maybeWarning tag) tags in unlines $ map (\(pos,msg) -> Position.toReportText pos ++ " " ++ msg) warnings validateIO :: FilePath -> IO () validateIO fileName = do text <- readFile fileName putStrLn (validate fileName text) main :: IO () main = mapM_ validateIO =<< getArgs