module Text.HTML.WraXML.Tree.HXT (tidy, format, fromHTMLString, fromHTMLStringMetaEncoding, errorAnnFromHTMLStringMetaEncoding, errorAnnFromHTMLStringOpt, ErrorMsg, getMetaHTTPHeaders, ) where import qualified Text.XML.HXT.DOM.TypeDefs as HXT -- import qualified Text.XML.HXT.DOM.XmlTreeFunctions as HXTTreeFunc import qualified Data.Tree.NTree.TypeDefs as HXTTree import qualified Text.XML.WraXML.Tree.HXT as WraHXT import qualified Text.HTML.WraXML.Tree as HtmlTree import qualified Text.XML.WraXML.Tree as XmlTree import qualified Text.XML.Basic.Name.LowerCase as NameLC import qualified Text.XML.Basic.Name as Name import qualified Text.XML.Basic.Format as Format -- needed for code copies from HXT at the of the file import Text.XML.HXT.DOM.XmlTree hiding (cmt, formatTree, ) import Text.XML.HXT.DOM.XmlState (XmlStateFilter, liftF, run', setSystemParams, setSysErrorHandler, getErrorMsg, errorMsgLogging, errorMsgToStderr, ) import Text.XML.HXT.Parser.XmlParser (parseXmlDocEncodingSpec, ) import Text.XML.HXT.Parser.XmlInput (guessDocEncoding, ) import Text.XML.HXT.Parser.XmlOutput (traceTree, traceSource, traceMsg, ) import Text.XML.HXT.Parser.HtmlParser (parseHtmlDoc, ) import Text.XML.HXT.Parser.HtmlParsec (isEmptyHtmlTag, ) import Text.XML.HXT.DOM.EditFilters (escapeXmlDoc, ) import Control.Monad (msum, ) import Data.Maybe (fromMaybe, ) {- | Tidy a piece of HTML code. & -> & < -> < unquoted tag attribute values: size=-1 -> size="-1" insert omitted closing tags -} tidy :: String -> IO String tidy input = -- escapeXmlDoc replaces < by < and so on -- XmlParsec.substXmlEntities similar to escapeXmlDoc ? fmap (($"") . formatTrees . (escapeXmlDoc .> getChildren)) (fromHTMLString input) -- * formatting {- | Like 'Text.XML.HXT.DOM.XmlTreeFunctions.xshow' but it shows empty tags the HTML way. E.g. it emits @
@ instead of @@, @