module Text.HTML.WraXML.Element ( module Text.HTML.WraXML.Element, T, name_, attributes_, Elem.cons, Elem.name, Elem.attributes, Elem.checkName, Elem.format, ) where import Text.XML.WraXML.Element (T, name_, attributes_, ) import qualified Text.XML.WraXML.Element as Elem import qualified Text.XML.Basic.Name as Name import qualified Text.XML.WraXML.String as XmlString import qualified Text.HTML.Basic.Tag as Tag import qualified Text.HTML.Basic.Character as HtmlChar import qualified Text.HTML.Basic.String as HtmlString import Control.Monad.Trans.State (State, put, get, ) -- * decode decodeAdaptive :: (Name.Attribute name, Name.Tag name) => (XmlString.Encoding -> XmlString.Encoded -> String) -> T name [HtmlChar.T] -> State (HtmlString.Encoded -> String) (T name String) decodeAdaptive getDecoder elem0 = do decoder <- get let elem1 = fmap (HtmlString.decode decoder) elem0 maybe (return ()) (put . getDecoder) $ (Tag.maybeMetaEncoding (name_ elem1) (attributes_ elem1)) return elem1