tagsoup-ht-0.3: 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.XML.Basic.Position as Position
import qualified Text.HTML.TagSoup.HT.PositionTag as PosTag
import qualified Text.HTML.TagSoup.HT.Tag as Tag
import qualified Text.XML.Basic.Name.MixedCase as Name
import System.Environment (getArgs)
import Data.Maybe (mapMaybe)
validate :: FilePath -> String -> String
validate fileName input =
let tags :: [PosTag.T Name.T String]
tags = runSoupWithPositionsName fileName input
warnings =
mapMaybe
(\(PosTag.Cons pos tag) ->
fmap (\msg -> Position.toReportText pos ++ " " ++ msg) $
Tag.maybeWarning tag)
tags
in unlines warnings
validateIO :: FilePath -> IO ()
validateIO fileName =
putStrLn . validate fileName =<< readFile fileName
main :: IO ()
main = mapM_ validateIO =<< getArgs