module Text.XML.WraXML.String.HXT where

import qualified Text.XML.HXT.DOM.TypeDefs as HXT
import qualified Data.Tree.NTree.TypeDefs  as HXTTree

import qualified Text.XML.WraXML.String  as XmlString
import qualified Text.XML.Basic.Character as XmlChar


toXmlString :: HXT.XmlTrees -> XmlString.T
toXmlString :: XmlTrees -> T
toXmlString = forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap XmlTree -> T
toXmlString'

toXmlString' :: HXT.XmlTree -> XmlString.T
toXmlString' :: XmlTree -> T
toXmlString' (HXTTree.NTree XNode
label XmlTrees
subTrees) =
   if forall (t :: * -> *) a. Foldable t => t a -> Bool
null XmlTrees
subTrees
     then
        case XNode
label of
           HXT.XText String
str -> String -> T
XmlString.fromString String
str
           HXT.XCharRef Int
ref -> [Int -> T
XmlChar.fromCharRef Int
ref]
           HXT.XEntityRef String
ref -> [String -> T
XmlChar.fromEntityRef String
ref]
           XNode
_ -> forall a. HasCallStack => String -> a
error String
"HXT: illegal part of HXT string"
     else forall a. HasCallStack => String -> a
error String
"HXT: parts of a string must not contain sub-strings"


fromXmlString :: XmlString.T -> HXT.XmlTrees
fromXmlString :: T -> XmlTrees
fromXmlString =
   forall a b. (a -> b) -> [a] -> [b]
map (forall a b c. (a -> b -> c) -> b -> a -> c
flip forall a. a -> NTrees a -> NTree a
HXTTree.NTree []) forall b c a. (b -> c) -> (a -> b) -> a -> c
.
   forall a. (String -> a) -> (Int -> a) -> (String -> a) -> T -> [a]
XmlChar.switchUnicodeRuns
      String -> XNode
HXT.XText
      Int -> XNode
HXT.XCharRef
      String -> XNode
HXT.XEntityRef