module Text.HTML.TagSoup.HT.ParserNM (
runSoup,
) where
import qualified Text.HTML.TagSoup as TagSoup
import qualified Text.HTML.TagSoup.HT.Tag as Custom
import qualified Text.HTML.TagSoup.HT.PositionTag as PosTag
import qualified Text.HTML.TagSoup.HT.Parser as Parser
import qualified Text.HTML.TagSoup.HT.Position as Position
import Data.Accessor.Basic ((^.), )
runSoup :: String -> [TagSoup.Tag]
runSoup =
concatMap convertTag . Parser.runSoupWithPositions
convertTag :: PosTag.T Char -> [TagSoup.Tag]
convertTag (pos,tag) =
TagSoup.TagPosition (pos ^. Position.row) (pos ^. Position.column) :
(case tag of
Custom.Open name attrs -> TagSoup.TagOpen name attrs
Custom.Close name -> TagSoup.TagClose name
Custom.Text text -> TagSoup.TagText text
Custom.Comment text -> TagSoup.TagComment text
Custom.Special name content
-> TagSoup.TagOpen ('!':name) [("",content)]
Custom.Processing name p
-> TagSoup.TagOpen ('?':name) $
case p of
Custom.KnownProcessing attrs -> attrs
Custom.UnknownProcessing content -> [("",content)]
Custom.Warning text -> TagSoup.TagWarning text) :
[]