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 @
@,
@