packages feed

tagsoup-ht-0.2: example/Validate.hs

{-
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