{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, FunctionalDependencies #-}
module Text.XML.HXT.DOM.XmlNode
( module Text.XML.HXT.DOM.XmlNode
, module Data.Tree.Class
, module Data.Tree.NTree.TypeDefs
)
where
import Control.Monad
import Control.FlatSeq
import Data.Function ( on )
import Data.Maybe ( fromMaybe
, fromJust
)
import Data.Tree.Class
import Data.Tree.NTree.TypeDefs
import Text.XML.HXT.DOM.Interface
class XmlNode a where
isText :: a -> Bool
isBlob :: a -> Bool
isCharRef :: a -> Bool
isEntityRef :: a -> Bool
isCmt :: a -> Bool
isCdata :: a -> Bool
isPi :: a -> Bool
isElem :: a -> Bool
isRoot :: a -> Bool
isDTD :: a -> Bool
isAttr :: a -> Bool
isError :: a -> Bool
mkText :: String -> a
mkBlob :: Blob -> a
mkCharRef :: Int -> a
mkEntityRef :: String -> a
mkCmt :: String -> a
mkCdata :: String -> a
mkPi :: QName -> XmlTrees -> a
mkError :: Int -> String -> a
getText :: a -> Maybe String
getBlob :: a -> Maybe Blob
getCharRef :: a -> Maybe Int
getEntityRef :: a -> Maybe String
getCmt :: a -> Maybe String
getCdata :: a -> Maybe String
getPiName :: a -> Maybe QName
getPiContent :: a -> Maybe XmlTrees
getElemName :: a -> Maybe QName
getAttrl :: a -> Maybe XmlTrees
getDTDPart :: a -> Maybe DTDElem
getDTDAttrl :: a -> Maybe Attributes
getAttrName :: a -> Maybe QName
getErrorLevel :: a -> Maybe Int
getErrorMsg :: a -> Maybe String
getName :: a -> Maybe QName
getQualifiedName :: a -> Maybe String
getUniversalName :: a -> Maybe String
getUniversalUri :: a -> Maybe String
getLocalPart :: a -> Maybe String
getNamePrefix :: a -> Maybe String
getNamespaceUri :: a -> Maybe String
changeText :: (String -> String) -> a -> a
changeBlob :: (Blob -> Blob) -> a -> a
changeCmt :: (String -> String) -> a -> a
changeName :: (QName -> QName) -> a -> a
changeElemName :: (QName -> QName) -> a -> a
changeAttrl :: (XmlTrees -> XmlTrees) -> a -> a
changeAttrName :: (QName -> QName) -> a -> a
changePiName :: (QName -> QName) -> a -> a
changeDTDAttrl :: (Attributes -> Attributes) -> a -> a
setText :: String -> a -> a
setBlob :: Blob -> a -> a
setCmt :: String -> a -> a
setName :: QName -> a -> a
setElemName :: QName -> a -> a
setElemAttrl :: XmlTrees -> a -> a
setAttrName :: QName -> a -> a
setPiName :: QName -> a -> a
setDTDAttrl :: Attributes -> a -> a
getName a
n = a -> Maybe QName
forall a. XmlNode a => a -> Maybe QName
getElemName a
n Maybe QName -> Maybe QName -> Maybe QName
forall a. Maybe a -> Maybe a -> Maybe a
forall (m :: * -> *) a. MonadPlus m => m a -> m a -> m a
`mplus` a -> Maybe QName
forall a. XmlNode a => a -> Maybe QName
getAttrName a
n Maybe QName -> Maybe QName -> Maybe QName
forall a. Maybe a -> Maybe a -> Maybe a
forall (m :: * -> *) a. MonadPlus m => m a -> m a -> m a
`mplus` a -> Maybe QName
forall a. XmlNode a => a -> Maybe QName
getPiName a
n
getQualifiedName a
n = a -> Maybe QName
forall a. XmlNode a => a -> Maybe QName
getName a
n Maybe QName -> (QName -> Maybe String) -> Maybe String
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> Maybe String
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> Maybe String)
-> (QName -> String) -> QName -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QName -> String
qualifiedName
getUniversalName a
n = a -> Maybe QName
forall a. XmlNode a => a -> Maybe QName
getName a
n Maybe QName -> (QName -> Maybe String) -> Maybe String
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> Maybe String
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> Maybe String)
-> (QName -> String) -> QName -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QName -> String
universalName
getUniversalUri a
n = a -> Maybe QName
forall a. XmlNode a => a -> Maybe QName
getName a
n Maybe QName -> (QName -> Maybe String) -> Maybe String
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> Maybe String
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> Maybe String)
-> (QName -> String) -> QName -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QName -> String
universalUri
getLocalPart a
n = a -> Maybe QName
forall a. XmlNode a => a -> Maybe QName
getName a
n Maybe QName -> (QName -> Maybe String) -> Maybe String
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> Maybe String
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> Maybe String)
-> (QName -> String) -> QName -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QName -> String
localPart
getNamePrefix a
n = a -> Maybe QName
forall a. XmlNode a => a -> Maybe QName
getName a
n Maybe QName -> (QName -> Maybe String) -> Maybe String
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> Maybe String
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> Maybe String)
-> (QName -> String) -> QName -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QName -> String
namePrefix
getNamespaceUri a
n = a -> Maybe QName
forall a. XmlNode a => a -> Maybe QName
getName a
n Maybe QName -> (QName -> Maybe String) -> Maybe String
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> Maybe String
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> Maybe String)
-> (QName -> String) -> QName -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QName -> String
namespaceUri
setText = (String -> String) -> a -> a
forall a. XmlNode a => (String -> String) -> a -> a
changeText ((String -> String) -> a -> a)
-> (String -> String -> String) -> String -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> String
forall a b. a -> b -> a
const
setBlob = (Blob -> Blob) -> a -> a
forall a. XmlNode a => (Blob -> Blob) -> a -> a
changeBlob ((Blob -> Blob) -> a -> a)
-> (Blob -> Blob -> Blob) -> Blob -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Blob -> Blob -> Blob
forall a b. a -> b -> a
const
setCmt = (String -> String) -> a -> a
forall a. XmlNode a => (String -> String) -> a -> a
changeCmt ((String -> String) -> a -> a)
-> (String -> String -> String) -> String -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> String
forall a b. a -> b -> a
const
setName = (QName -> QName) -> a -> a
forall a. XmlNode a => (QName -> QName) -> a -> a
changeName ((QName -> QName) -> a -> a)
-> (QName -> QName -> QName) -> QName -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QName -> QName -> QName
forall a b. a -> b -> a
const
setElemName = (QName -> QName) -> a -> a
forall a. XmlNode a => (QName -> QName) -> a -> a
changeElemName ((QName -> QName) -> a -> a)
-> (QName -> QName -> QName) -> QName -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QName -> QName -> QName
forall a b. a -> b -> a
const
setElemAttrl = (XmlTrees -> XmlTrees) -> a -> a
forall a. XmlNode a => (XmlTrees -> XmlTrees) -> a -> a
changeAttrl ((XmlTrees -> XmlTrees) -> a -> a)
-> (XmlTrees -> XmlTrees -> XmlTrees) -> XmlTrees -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. XmlTrees -> XmlTrees -> XmlTrees
forall a b. a -> b -> a
const
setAttrName = (QName -> QName) -> a -> a
forall a. XmlNode a => (QName -> QName) -> a -> a
changeAttrName ((QName -> QName) -> a -> a)
-> (QName -> QName -> QName) -> QName -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QName -> QName -> QName
forall a b. a -> b -> a
const
setPiName = (QName -> QName) -> a -> a
forall a. XmlNode a => (QName -> QName) -> a -> a
changePiName ((QName -> QName) -> a -> a)
-> (QName -> QName -> QName) -> QName -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QName -> QName -> QName
forall a b. a -> b -> a
const
setDTDAttrl = (Attributes -> Attributes) -> a -> a
forall a. XmlNode a => (Attributes -> Attributes) -> a -> a
changeDTDAttrl ((Attributes -> Attributes) -> a -> a)
-> (Attributes -> Attributes -> Attributes) -> Attributes -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Attributes -> Attributes -> Attributes
forall a b. a -> b -> a
const
instance XmlNode XNode where
isText :: XNode -> Bool
isText (XText String
_) = Bool
True
isText (XBlob Blob
_) = Bool
True
isText XNode
_ = Bool
False
{-# INLINE isText #-}
isBlob :: XNode -> Bool
isBlob (XBlob Blob
_) = Bool
True
isBlob XNode
_ = Bool
False
{-# INLINE isBlob #-}
isCharRef :: XNode -> Bool
isCharRef (XCharRef Int
_) = Bool
True
isCharRef XNode
_ = Bool
False
{-# INLINE isCharRef #-}
isEntityRef :: XNode -> Bool
isEntityRef (XEntityRef String
_) = Bool
True
isEntityRef XNode
_ = Bool
False
{-# INLINE isEntityRef #-}
isCmt :: XNode -> Bool
isCmt (XCmt String
_) = Bool
True
isCmt XNode
_ = Bool
False
{-# INLINE isCmt #-}
isCdata :: XNode -> Bool
isCdata (XCdata String
_) = Bool
True
isCdata XNode
_ = Bool
False
{-# INLINE isCdata #-}
isPi :: XNode -> Bool
isPi (XPi QName
_ XmlTrees
_) = Bool
True
isPi XNode
_ = Bool
False
{-# INLINE isPi #-}
isElem :: XNode -> Bool
isElem (XTag QName
_ XmlTrees
_) = Bool
True
isElem XNode
_ = Bool
False
{-# INLINE isElem #-}
isRoot :: XNode -> Bool
isRoot XNode
t = XNode -> Bool
forall a. XmlNode a => a -> Bool
isElem XNode
t
Bool -> Bool -> Bool
&&
String -> Maybe String -> String
forall a. a -> Maybe a -> a
fromMaybe String
"" (XNode -> Maybe String
forall a. XmlNode a => a -> Maybe String
getQualifiedName XNode
t) String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
t_root
isDTD :: XNode -> Bool
isDTD (XDTD DTDElem
_ Attributes
_) = Bool
True
isDTD XNode
_ = Bool
False
{-# INLINE isDTD #-}
isAttr :: XNode -> Bool
isAttr (XAttr QName
_) = Bool
True
isAttr XNode
_ = Bool
False
{-# INLINE isAttr #-}
isError :: XNode -> Bool
isError (XError Int
_ String
_) = Bool
True
isError XNode
_ = Bool
False
{-# INLINE isError #-}
mkText :: String -> XNode
mkText = String -> XNode
XText
{-# INLINE mkText #-}
mkBlob :: Blob -> XNode
mkBlob = Blob -> XNode
XBlob
{-# INLINE mkBlob #-}
mkCharRef :: Int -> XNode
mkCharRef = Int -> XNode
XCharRef
{-# INLINE mkCharRef #-}
mkEntityRef :: String -> XNode
mkEntityRef = String -> XNode
XEntityRef
{-# INLINE mkEntityRef #-}
mkCmt :: String -> XNode
mkCmt = String -> XNode
XCmt
{-# INLINE mkCmt #-}
mkCdata :: String -> XNode
mkCdata = String -> XNode
XCdata
{-# INLINE mkCdata #-}
mkPi :: QName -> XmlTrees -> XNode
mkPi = QName -> XmlTrees -> XNode
XPi
{-# INLINE mkPi #-}
mkError :: Int -> String -> XNode
mkError = Int -> String -> XNode
XError
{-# INLINE mkError #-}
getText :: XNode -> Maybe String
getText (XText String
t) = String -> Maybe String
forall a. a -> Maybe a
Just String
t
getText (XBlob Blob
b) = String -> Maybe String
forall a. a -> Maybe a
Just (String -> Maybe String)
-> (Blob -> String) -> Blob -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Blob -> String
blobToString (Blob -> Maybe String) -> Blob -> Maybe String
forall a b. (a -> b) -> a -> b
$ Blob
b
getText XNode
_ = Maybe String
forall a. Maybe a
Nothing
{-# INLINE getText #-}
getBlob :: XNode -> Maybe Blob
getBlob (XBlob Blob
b) = Blob -> Maybe Blob
forall a. a -> Maybe a
Just Blob
b
getBlob XNode
_ = Maybe Blob
forall a. Maybe a
Nothing
{-# INLINE getBlob #-}
getCharRef :: XNode -> Maybe Int
getCharRef (XCharRef Int
c) = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
c
getCharRef XNode
_ = Maybe Int
forall a. Maybe a
Nothing
{-# INLINE getCharRef #-}
getEntityRef :: XNode -> Maybe String
getEntityRef (XEntityRef String
e) = String -> Maybe String
forall a. a -> Maybe a
Just String
e
getEntityRef XNode
_ = Maybe String
forall a. Maybe a
Nothing
{-# INLINE getEntityRef #-}
getCmt :: XNode -> Maybe String
getCmt (XCmt String
c) = String -> Maybe String
forall a. a -> Maybe a
Just String
c
getCmt XNode
_ = Maybe String
forall a. Maybe a
Nothing
{-# INLINE getCmt #-}
getCdata :: XNode -> Maybe String
getCdata (XCdata String
d) = String -> Maybe String
forall a. a -> Maybe a
Just String
d
getCdata XNode
_ = Maybe String
forall a. Maybe a
Nothing
{-# INLINE getCdata #-}
getPiName :: XNode -> Maybe QName
getPiName (XPi QName
n XmlTrees
_) = QName -> Maybe QName
forall a. a -> Maybe a
Just QName
n
getPiName XNode
_ = Maybe QName
forall a. Maybe a
Nothing
{-# INLINE getPiName #-}
getPiContent :: XNode -> Maybe XmlTrees
getPiContent (XPi QName
_ XmlTrees
c) = XmlTrees -> Maybe XmlTrees
forall a. a -> Maybe a
Just XmlTrees
c
getPiContent XNode
_ = Maybe XmlTrees
forall a. Maybe a
Nothing
{-# INLINE getPiContent #-}
getElemName :: XNode -> Maybe QName
getElemName (XTag QName
n XmlTrees
_) = QName -> Maybe QName
forall a. a -> Maybe a
Just QName
n
getElemName XNode
_ = Maybe QName
forall a. Maybe a
Nothing
{-# INLINE getElemName #-}
getAttrl :: XNode -> Maybe XmlTrees
getAttrl (XTag QName
_ XmlTrees
al) = XmlTrees -> Maybe XmlTrees
forall a. a -> Maybe a
Just XmlTrees
al
getAttrl (XPi QName
_ XmlTrees
al) = XmlTrees -> Maybe XmlTrees
forall a. a -> Maybe a
Just XmlTrees
al
getAttrl XNode
_ = Maybe XmlTrees
forall a. Maybe a
Nothing
{-# INLINE getAttrl #-}
getDTDPart :: XNode -> Maybe DTDElem
getDTDPart (XDTD DTDElem
p Attributes
_) = DTDElem -> Maybe DTDElem
forall a. a -> Maybe a
Just DTDElem
p
getDTDPart XNode
_ = Maybe DTDElem
forall a. Maybe a
Nothing
{-# INLINE getDTDPart #-}
getDTDAttrl :: XNode -> Maybe Attributes
getDTDAttrl (XDTD DTDElem
_ Attributes
al) = Attributes -> Maybe Attributes
forall a. a -> Maybe a
Just Attributes
al
getDTDAttrl XNode
_ = Maybe Attributes
forall a. Maybe a
Nothing
{-# INLINE getDTDAttrl #-}
getAttrName :: XNode -> Maybe QName
getAttrName (XAttr QName
n) = QName -> Maybe QName
forall a. a -> Maybe a
Just QName
n
getAttrName XNode
_ = Maybe QName
forall a. Maybe a
Nothing
{-# INLINE getAttrName #-}
getErrorLevel :: XNode -> Maybe Int
getErrorLevel (XError Int
l String
_) = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
l
getErrorLevel XNode
_ = Maybe Int
forall a. Maybe a
Nothing
{-# INLINE getErrorLevel #-}
getErrorMsg :: XNode -> Maybe String
getErrorMsg (XError Int
_ String
m) = String -> Maybe String
forall a. a -> Maybe a
Just String
m
getErrorMsg XNode
_ = Maybe String
forall a. Maybe a
Nothing
{-# INLINE getErrorMsg #-}
changeText :: (String -> String) -> XNode -> XNode
changeText String -> String
cf (XText String
t) = String -> XNode
XText (String -> XNode) -> (String -> String) -> String -> XNode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String
cf (String -> XNode) -> String -> XNode
forall a b. (a -> b) -> a -> b
$ String
t
changeText String -> String
cf (XBlob Blob
b) = String -> XNode
XText (String -> XNode) -> (Blob -> String) -> Blob -> XNode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String
cf (String -> String) -> (Blob -> String) -> Blob -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Blob -> String
blobToString (Blob -> XNode) -> Blob -> XNode
forall a b. (a -> b) -> a -> b
$ Blob
b
changeText String -> String
_ XNode
_ = String -> XNode
forall a. HasCallStack => String -> a
error String
"changeText undefined"
{-# INLINE changeText #-}
changeBlob :: (Blob -> Blob) -> XNode -> XNode
changeBlob Blob -> Blob
cf (XBlob Blob
b) = Blob -> XNode
XBlob (Blob -> XNode) -> (Blob -> Blob) -> Blob -> XNode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Blob -> Blob
cf (Blob -> XNode) -> Blob -> XNode
forall a b. (a -> b) -> a -> b
$ Blob
b
changeBlob Blob -> Blob
_ XNode
_ = String -> XNode
forall a. HasCallStack => String -> a
error String
"changeBlob undefined"
{-# INLINE changeBlob #-}
changeCmt :: (String -> String) -> XNode -> XNode
changeCmt String -> String
cf (XCmt String
c) = String -> XNode
XCmt (String -> XNode) -> (String -> String) -> String -> XNode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String
cf (String -> XNode) -> String -> XNode
forall a b. (a -> b) -> a -> b
$ String
c
changeCmt String -> String
_ XNode
_ = String -> XNode
forall a. HasCallStack => String -> a
error String
"changeCmt undefined"
{-# INLINE changeCmt #-}
changeName :: (QName -> QName) -> XNode -> XNode
changeName QName -> QName
cf (XTag QName
n XmlTrees
al) = QName -> XmlTrees -> XNode
XTag (QName -> QName
cf QName
n) XmlTrees
al
changeName QName -> QName
cf (XAttr QName
n) = QName -> XNode
XAttr (QName -> XNode) -> (QName -> QName) -> QName -> XNode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QName -> QName
cf (QName -> XNode) -> QName -> XNode
forall a b. (a -> b) -> a -> b
$ QName
n
changeName QName -> QName
cf (XPi QName
n XmlTrees
al) = QName -> XmlTrees -> XNode
XPi (QName -> QName
cf QName
n) XmlTrees
al
changeName QName -> QName
_ XNode
_ = String -> XNode
forall a. HasCallStack => String -> a
error String
"changeName undefined"
{-# INLINE changeName #-}
changeElemName :: (QName -> QName) -> XNode -> XNode
changeElemName QName -> QName
cf (XTag QName
n XmlTrees
al) = QName -> XmlTrees -> XNode
XTag (QName -> QName
cf QName
n) XmlTrees
al
changeElemName QName -> QName
_ XNode
_ = String -> XNode
forall a. HasCallStack => String -> a
error String
"changeElemName undefined"
{-# INLINE changeElemName #-}
changeAttrl :: (XmlTrees -> XmlTrees) -> XNode -> XNode
changeAttrl XmlTrees -> XmlTrees
cf (XTag QName
n XmlTrees
al) = QName -> XmlTrees -> XNode
XTag QName
n (XmlTrees -> XmlTrees
cf XmlTrees
al)
changeAttrl XmlTrees -> XmlTrees
cf (XPi QName
n XmlTrees
al) = QName -> XmlTrees -> XNode
XPi QName
n (XmlTrees -> XmlTrees
cf XmlTrees
al)
changeAttrl XmlTrees -> XmlTrees
_ XNode
_ = String -> XNode
forall a. HasCallStack => String -> a
error String
"changeAttrl undefined"
{-# INLINE changeAttrl #-}
changeAttrName :: (QName -> QName) -> XNode -> XNode
changeAttrName QName -> QName
cf (XAttr QName
n) = QName -> XNode
XAttr (QName -> XNode) -> (QName -> QName) -> QName -> XNode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QName -> QName
cf (QName -> XNode) -> QName -> XNode
forall a b. (a -> b) -> a -> b
$ QName
n
changeAttrName QName -> QName
_ XNode
_ = String -> XNode
forall a. HasCallStack => String -> a
error String
"changeAttrName undefined"
{-# INLINE changeAttrName #-}
changePiName :: (QName -> QName) -> XNode -> XNode
changePiName QName -> QName
cf (XPi QName
n XmlTrees
al) = QName -> XmlTrees -> XNode
XPi (QName -> QName
cf QName
n) XmlTrees
al
changePiName QName -> QName
_ XNode
_ = String -> XNode
forall a. HasCallStack => String -> a
error String
"changePiName undefined"
{-# INLINE changePiName #-}
changeDTDAttrl :: (Attributes -> Attributes) -> XNode -> XNode
changeDTDAttrl Attributes -> Attributes
cf (XDTD DTDElem
p Attributes
al) = DTDElem -> Attributes -> XNode
XDTD DTDElem
p (Attributes -> Attributes
cf Attributes
al)
changeDTDAttrl Attributes -> Attributes
_ XNode
_ = String -> XNode
forall a. HasCallStack => String -> a
error String
"changeDTDAttrl undefined"
{-# INLINE changeDTDAttrl #-}
mkElementNode :: QName -> XmlTrees -> XNode
mkElementNode :: QName -> XmlTrees -> XNode
mkElementNode = QName -> XmlTrees -> XNode
XTag
{-# INLINE mkElementNode #-}
mkAttrNode :: QName -> XNode
mkAttrNode :: QName -> XNode
mkAttrNode = QName -> XNode
XAttr
{-# INLINE mkAttrNode #-}
mkDTDNode :: DTDElem -> Attributes -> XNode
mkDTDNode :: DTDElem -> Attributes -> XNode
mkDTDNode = DTDElem -> Attributes -> XNode
XDTD
{-# INLINE mkDTDNode #-}
instance (XmlNode a, Tree t) => XmlNode (t a) where
isText :: t a -> Bool
isText = a -> Bool
forall a. XmlNode a => a -> Bool
isText (a -> Bool) -> (t a -> a) -> t a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE isText #-}
isBlob :: t a -> Bool
isBlob = a -> Bool
forall a. XmlNode a => a -> Bool
isBlob (a -> Bool) -> (t a -> a) -> t a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE isBlob #-}
isCharRef :: t a -> Bool
isCharRef = a -> Bool
forall a. XmlNode a => a -> Bool
isCharRef (a -> Bool) -> (t a -> a) -> t a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE isCharRef #-}
isEntityRef :: t a -> Bool
isEntityRef = a -> Bool
forall a. XmlNode a => a -> Bool
isEntityRef (a -> Bool) -> (t a -> a) -> t a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE isEntityRef #-}
isCmt :: t a -> Bool
isCmt = a -> Bool
forall a. XmlNode a => a -> Bool
isCmt (a -> Bool) -> (t a -> a) -> t a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE isCmt #-}
isCdata :: t a -> Bool
isCdata = a -> Bool
forall a. XmlNode a => a -> Bool
isCdata (a -> Bool) -> (t a -> a) -> t a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE isCdata #-}
isPi :: t a -> Bool
isPi = a -> Bool
forall a. XmlNode a => a -> Bool
isPi (a -> Bool) -> (t a -> a) -> t a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE isPi #-}
isElem :: t a -> Bool
isElem = a -> Bool
forall a. XmlNode a => a -> Bool
isElem (a -> Bool) -> (t a -> a) -> t a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE isElem #-}
isRoot :: t a -> Bool
isRoot = a -> Bool
forall a. XmlNode a => a -> Bool
isRoot (a -> Bool) -> (t a -> a) -> t a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE isRoot #-}
isDTD :: t a -> Bool
isDTD = a -> Bool
forall a. XmlNode a => a -> Bool
isDTD (a -> Bool) -> (t a -> a) -> t a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE isDTD #-}
isAttr :: t a -> Bool
isAttr = a -> Bool
forall a. XmlNode a => a -> Bool
isAttr (a -> Bool) -> (t a -> a) -> t a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE isAttr #-}
isError :: t a -> Bool
isError = a -> Bool
forall a. XmlNode a => a -> Bool
isError (a -> Bool) -> (t a -> a) -> t a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE isError #-}
mkText :: String -> t a
mkText = a -> t a
forall a. a -> t a
forall (t :: * -> *) a. Tree t => a -> t a
mkLeaf (a -> t a) -> (String -> a) -> String -> t a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> a
forall a. XmlNode a => String -> a
mkText
{-# INLINE mkText #-}
mkBlob :: Blob -> t a
mkBlob = a -> t a
forall a. a -> t a
forall (t :: * -> *) a. Tree t => a -> t a
mkLeaf (a -> t a) -> (Blob -> a) -> Blob -> t a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Blob -> a
forall a. XmlNode a => Blob -> a
mkBlob
{-# INLINE mkBlob #-}
mkCharRef :: Int -> t a
mkCharRef = a -> t a
forall a. a -> t a
forall (t :: * -> *) a. Tree t => a -> t a
mkLeaf (a -> t a) -> (Int -> a) -> Int -> t a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> a
forall a. XmlNode a => Int -> a
mkCharRef
{-# INLINE mkCharRef #-}
mkEntityRef :: String -> t a
mkEntityRef = a -> t a
forall a. a -> t a
forall (t :: * -> *) a. Tree t => a -> t a
mkLeaf (a -> t a) -> (String -> a) -> String -> t a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> a
forall a. XmlNode a => String -> a
mkEntityRef
{-# INLINE mkEntityRef #-}
mkCmt :: String -> t a
mkCmt = a -> t a
forall a. a -> t a
forall (t :: * -> *) a. Tree t => a -> t a
mkLeaf (a -> t a) -> (String -> a) -> String -> t a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> a
forall a. XmlNode a => String -> a
mkCmt
{-# INLINE mkCmt #-}
mkCdata :: String -> t a
mkCdata = a -> t a
forall a. a -> t a
forall (t :: * -> *) a. Tree t => a -> t a
mkLeaf (a -> t a) -> (String -> a) -> String -> t a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> a
forall a. XmlNode a => String -> a
mkCdata
{-# INLINE mkCdata #-}
mkPi :: QName -> XmlTrees -> t a
mkPi QName
n = a -> t a
forall a. a -> t a
forall (t :: * -> *) a. Tree t => a -> t a
mkLeaf (a -> t a) -> (XmlTrees -> a) -> XmlTrees -> t a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QName -> XmlTrees -> a
forall a. XmlNode a => QName -> XmlTrees -> a
mkPi QName
n
{-# INLINE mkPi #-}
mkError :: Int -> String -> t a
mkError Int
l = a -> t a
forall a. a -> t a
forall (t :: * -> *) a. Tree t => a -> t a
mkLeaf (a -> t a) -> (String -> a) -> String -> t a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String -> a
forall a. XmlNode a => Int -> String -> a
mkError Int
l
{-# INLINE mkError #-}
getText :: t a -> Maybe String
getText = a -> Maybe String
forall a. XmlNode a => a -> Maybe String
getText (a -> Maybe String) -> (t a -> a) -> t a -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE getText #-}
getBlob :: t a -> Maybe Blob
getBlob = a -> Maybe Blob
forall a. XmlNode a => a -> Maybe Blob
getBlob (a -> Maybe Blob) -> (t a -> a) -> t a -> Maybe Blob
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE getBlob #-}
getCharRef :: t a -> Maybe Int
getCharRef = a -> Maybe Int
forall a. XmlNode a => a -> Maybe Int
getCharRef (a -> Maybe Int) -> (t a -> a) -> t a -> Maybe Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE getCharRef #-}
getEntityRef :: t a -> Maybe String
getEntityRef = a -> Maybe String
forall a. XmlNode a => a -> Maybe String
getEntityRef (a -> Maybe String) -> (t a -> a) -> t a -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE getEntityRef #-}
getCmt :: t a -> Maybe String
getCmt = a -> Maybe String
forall a. XmlNode a => a -> Maybe String
getCmt (a -> Maybe String) -> (t a -> a) -> t a -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE getCmt #-}
getCdata :: t a -> Maybe String
getCdata = a -> Maybe String
forall a. XmlNode a => a -> Maybe String
getCdata (a -> Maybe String) -> (t a -> a) -> t a -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE getCdata #-}
getPiName :: t a -> Maybe QName
getPiName = a -> Maybe QName
forall a. XmlNode a => a -> Maybe QName
getPiName (a -> Maybe QName) -> (t a -> a) -> t a -> Maybe QName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE getPiName #-}
getPiContent :: t a -> Maybe XmlTrees
getPiContent = a -> Maybe XmlTrees
forall a. XmlNode a => a -> Maybe XmlTrees
getPiContent (a -> Maybe XmlTrees) -> (t a -> a) -> t a -> Maybe XmlTrees
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE getPiContent #-}
getElemName :: t a -> Maybe QName
getElemName = a -> Maybe QName
forall a. XmlNode a => a -> Maybe QName
getElemName (a -> Maybe QName) -> (t a -> a) -> t a -> Maybe QName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE getElemName #-}
getAttrl :: t a -> Maybe XmlTrees
getAttrl = a -> Maybe XmlTrees
forall a. XmlNode a => a -> Maybe XmlTrees
getAttrl (a -> Maybe XmlTrees) -> (t a -> a) -> t a -> Maybe XmlTrees
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE getAttrl #-}
getDTDPart :: t a -> Maybe DTDElem
getDTDPart = a -> Maybe DTDElem
forall a. XmlNode a => a -> Maybe DTDElem
getDTDPart (a -> Maybe DTDElem) -> (t a -> a) -> t a -> Maybe DTDElem
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE getDTDPart #-}
getDTDAttrl :: t a -> Maybe Attributes
getDTDAttrl = a -> Maybe Attributes
forall a. XmlNode a => a -> Maybe Attributes
getDTDAttrl (a -> Maybe Attributes) -> (t a -> a) -> t a -> Maybe Attributes
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE getDTDAttrl #-}
getAttrName :: t a -> Maybe QName
getAttrName = a -> Maybe QName
forall a. XmlNode a => a -> Maybe QName
getAttrName (a -> Maybe QName) -> (t a -> a) -> t a -> Maybe QName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE getAttrName #-}
getErrorLevel :: t a -> Maybe Int
getErrorLevel = a -> Maybe Int
forall a. XmlNode a => a -> Maybe Int
getErrorLevel (a -> Maybe Int) -> (t a -> a) -> t a -> Maybe Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE getErrorLevel #-}
getErrorMsg :: t a -> Maybe String
getErrorMsg = a -> Maybe String
forall a. XmlNode a => a -> Maybe String
getErrorMsg (a -> Maybe String) -> (t a -> a) -> t a -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t a -> a
forall a. t a -> a
forall (t :: * -> *) a. Tree t => t a -> a
getNode
{-# INLINE getErrorMsg #-}
changeText :: (String -> String) -> t a -> t a
changeText = (a -> a) -> t a -> t a
forall a. (a -> a) -> t a -> t a
forall (t :: * -> *) a. Tree t => (a -> a) -> t a -> t a
changeNode ((a -> a) -> t a -> t a)
-> ((String -> String) -> a -> a)
-> (String -> String)
-> t a
-> t a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> String) -> a -> a
forall a. XmlNode a => (String -> String) -> a -> a
changeText
{-# INLINE changeText #-}
changeBlob :: (Blob -> Blob) -> t a -> t a
changeBlob = (a -> a) -> t a -> t a
forall a. (a -> a) -> t a -> t a
forall (t :: * -> *) a. Tree t => (a -> a) -> t a -> t a
changeNode ((a -> a) -> t a -> t a)
-> ((Blob -> Blob) -> a -> a) -> (Blob -> Blob) -> t a -> t a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Blob -> Blob) -> a -> a
forall a. XmlNode a => (Blob -> Blob) -> a -> a
changeBlob
{-# INLINE changeBlob #-}
changeCmt :: (String -> String) -> t a -> t a
changeCmt = (a -> a) -> t a -> t a
forall a. (a -> a) -> t a -> t a
forall (t :: * -> *) a. Tree t => (a -> a) -> t a -> t a
changeNode ((a -> a) -> t a -> t a)
-> ((String -> String) -> a -> a)
-> (String -> String)
-> t a
-> t a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> String) -> a -> a
forall a. XmlNode a => (String -> String) -> a -> a
changeCmt
{-# INLINE changeCmt #-}
changeName :: (QName -> QName) -> t a -> t a
changeName = (a -> a) -> t a -> t a
forall a. (a -> a) -> t a -> t a
forall (t :: * -> *) a. Tree t => (a -> a) -> t a -> t a
changeNode ((a -> a) -> t a -> t a)
-> ((QName -> QName) -> a -> a) -> (QName -> QName) -> t a -> t a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (QName -> QName) -> a -> a
forall a. XmlNode a => (QName -> QName) -> a -> a
changeName
{-# INLINE changeName #-}
changeElemName :: (QName -> QName) -> t a -> t a
changeElemName = (a -> a) -> t a -> t a
forall a. (a -> a) -> t a -> t a
forall (t :: * -> *) a. Tree t => (a -> a) -> t a -> t a
changeNode ((a -> a) -> t a -> t a)
-> ((QName -> QName) -> a -> a) -> (QName -> QName) -> t a -> t a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (QName -> QName) -> a -> a
forall a. XmlNode a => (QName -> QName) -> a -> a
changeElemName
{-# INLINE changeElemName #-}
changeAttrl :: (XmlTrees -> XmlTrees) -> t a -> t a
changeAttrl = (a -> a) -> t a -> t a
forall a. (a -> a) -> t a -> t a
forall (t :: * -> *) a. Tree t => (a -> a) -> t a -> t a
changeNode ((a -> a) -> t a -> t a)
-> ((XmlTrees -> XmlTrees) -> a -> a)
-> (XmlTrees -> XmlTrees)
-> t a
-> t a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (XmlTrees -> XmlTrees) -> a -> a
forall a. XmlNode a => (XmlTrees -> XmlTrees) -> a -> a
changeAttrl
{-# INLINE changeAttrl #-}
changeAttrName :: (QName -> QName) -> t a -> t a
changeAttrName = (a -> a) -> t a -> t a
forall a. (a -> a) -> t a -> t a
forall (t :: * -> *) a. Tree t => (a -> a) -> t a -> t a
changeNode ((a -> a) -> t a -> t a)
-> ((QName -> QName) -> a -> a) -> (QName -> QName) -> t a -> t a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (QName -> QName) -> a -> a
forall a. XmlNode a => (QName -> QName) -> a -> a
changeAttrName
{-# INLINE changeAttrName #-}
changePiName :: (QName -> QName) -> t a -> t a
changePiName = (a -> a) -> t a -> t a
forall a. (a -> a) -> t a -> t a
forall (t :: * -> *) a. Tree t => (a -> a) -> t a -> t a
changeNode ((a -> a) -> t a -> t a)
-> ((QName -> QName) -> a -> a) -> (QName -> QName) -> t a -> t a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (QName -> QName) -> a -> a
forall a. XmlNode a => (QName -> QName) -> a -> a
changePiName
{-# INLINE changePiName #-}
changeDTDAttrl :: (Attributes -> Attributes) -> t a -> t a
changeDTDAttrl = (a -> a) -> t a -> t a
forall a. (a -> a) -> t a -> t a
forall (t :: * -> *) a. Tree t => (a -> a) -> t a -> t a
changeNode ((a -> a) -> t a -> t a)
-> ((Attributes -> Attributes) -> a -> a)
-> (Attributes -> Attributes)
-> t a
-> t a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Attributes -> Attributes) -> a -> a
forall a. XmlNode a => (Attributes -> Attributes) -> a -> a
changeDTDAttrl
{-# INLINE changeDTDAttrl #-}
mkElement :: QName -> XmlTrees -> XmlTrees -> XmlTree
mkElement :: QName -> XmlTrees -> XmlTrees -> XmlTree
mkElement QName
n XmlTrees
al = XNode -> XmlTrees -> XmlTree
forall a. a -> [NTree a] -> NTree a
forall (t :: * -> *) a. Tree t => a -> [t a] -> t a
mkTree (QName -> XmlTrees -> XNode
mkElementNode QName
n XmlTrees
al)
{-# INLINE mkElement #-}
mkRoot :: XmlTrees -> XmlTrees -> XmlTree
mkRoot :: XmlTrees -> XmlTrees -> XmlTree
mkRoot XmlTrees
al = XNode -> XmlTrees -> XmlTree
forall a. a -> [NTree a] -> NTree a
forall (t :: * -> *) a. Tree t => a -> [t a] -> t a
mkTree (QName -> XmlTrees -> XNode
mkElementNode (String -> QName
mkName String
t_root) XmlTrees
al)
mkAttr :: QName -> XmlTrees -> XmlTree
mkAttr :: QName -> XmlTrees -> XmlTree
mkAttr QName
n = XNode -> XmlTrees -> XmlTree
forall a. a -> [NTree a] -> NTree a
forall (t :: * -> *) a. Tree t => a -> [t a] -> t a
mkTree (QName -> XNode
mkAttrNode QName
n)
{-# INLINE mkAttr #-}
mkDTDElem :: DTDElem -> Attributes -> XmlTrees -> XmlTree
mkDTDElem :: DTDElem -> Attributes -> XmlTrees -> XmlTree
mkDTDElem DTDElem
e Attributes
al = XNode -> XmlTrees -> XmlTree
forall a. a -> [NTree a] -> NTree a
forall (t :: * -> *) a. Tree t => a -> [t a] -> t a
mkTree (DTDElem -> Attributes -> XNode
mkDTDNode DTDElem
e Attributes
al)
addAttr :: XmlTree -> XmlTrees -> XmlTrees
addAttr :: XmlTree -> XmlTrees -> XmlTrees
addAttr XmlTree
a XmlTrees
al
| XmlTree -> Bool
forall a. XmlNode a => a -> Bool
isAttr XmlTree
a = XmlTrees -> XmlTrees
add XmlTrees
al
| Bool
otherwise = XmlTrees
al
where
an :: String
an = (QName -> String
qualifiedName (QName -> String) -> (XmlTree -> QName) -> XmlTree -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe QName -> QName
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe QName -> QName)
-> (XmlTree -> Maybe QName) -> XmlTree -> QName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. XmlTree -> Maybe QName
forall a. XmlNode a => a -> Maybe QName
getAttrName) XmlTree
a
add :: XmlTrees -> XmlTrees
add []
= [XmlTree
a]
add (XmlTree
a1:XmlTrees
al1)
| XmlTree -> Bool
forall a. XmlNode a => a -> Bool
isAttr XmlTree
a1
Bool -> Bool -> Bool
&&
(QName -> String
qualifiedName (QName -> String) -> (XmlTree -> QName) -> XmlTree -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe QName -> QName
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe QName -> QName)
-> (XmlTree -> Maybe QName) -> XmlTree -> QName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. XmlTree -> Maybe QName
forall a. XmlNode a => a -> Maybe QName
getAttrName) XmlTree
a1 String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
an
= XmlTree
a XmlTree -> XmlTrees -> XmlTrees
forall a. a -> [a] -> [a]
: XmlTrees
al1
| Bool
otherwise
= XmlTree
a1 XmlTree -> XmlTrees -> XmlTrees
forall a. a -> [a] -> [a]
: XmlTrees -> XmlTrees
add XmlTrees
al1
mergeAttrl :: XmlTrees -> XmlTrees -> XmlTrees
mergeAttrl :: XmlTrees -> XmlTrees -> XmlTrees
mergeAttrl = (XmlTree -> XmlTrees -> XmlTrees)
-> XmlTrees -> XmlTrees -> XmlTrees
forall a b. (a -> b -> b) -> b -> [a] -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr XmlTree -> XmlTrees -> XmlTrees
addAttr
mkElement' :: QName -> XmlTrees -> XmlTrees -> XmlTree
mkElement' :: QName -> XmlTrees -> XmlTrees -> XmlTree
mkElement' QName
n XmlTrees
al XmlTrees
cl = XmlTree -> XmlTree
forall a. a -> a
id (XmlTree -> XmlTree) -> XmlTree -> XmlTree
forall a b. WNFData a => (a -> b) -> a -> b
$!! QName -> XmlTrees -> XmlTrees -> XmlTree
mkElement QName
n XmlTrees
al XmlTrees
cl
{-# INLINE mkElement' #-}
mkRoot' :: XmlTrees -> XmlTrees -> XmlTree
mkRoot' :: XmlTrees -> XmlTrees -> XmlTree
mkRoot' XmlTrees
al XmlTrees
cl = XmlTree -> XmlTree
forall a. a -> a
id (XmlTree -> XmlTree) -> XmlTree -> XmlTree
forall a b. WNFData a => (a -> b) -> a -> b
$!! XmlTrees -> XmlTrees -> XmlTree
mkRoot XmlTrees
al XmlTrees
cl
{-# INLINE mkRoot' #-}
mkAttr' :: QName -> XmlTrees -> XmlTree
mkAttr' :: QName -> XmlTrees -> XmlTree
mkAttr' QName
n XmlTrees
av = XmlTree -> XmlTree
forall a. a -> a
id (XmlTree -> XmlTree) -> XmlTree -> XmlTree
forall a b. WNFData a => (a -> b) -> a -> b
$!! QName -> XmlTrees -> XmlTree
mkAttr QName
n XmlTrees
av
{-# INLINE mkAttr' #-}
mkText' :: String -> XmlTree
mkText' :: String -> XmlTree
mkText' String
t = XmlTree -> XmlTree
forall a. a -> a
id (XmlTree -> XmlTree) -> XmlTree -> XmlTree
forall a b. WNFData a => (a -> b) -> a -> b
$!! String -> XmlTree
forall a. XmlNode a => String -> a
mkText String
t
{-# INLINE mkText' #-}
mkCharRef' :: Int -> XmlTree
mkCharRef' :: Int -> XmlTree
mkCharRef' Int
i = XmlTree -> XmlTree
forall a. a -> a
id (XmlTree -> XmlTree) -> XmlTree -> XmlTree
forall a b. WNFData a => (a -> b) -> a -> b
$!! Int -> XmlTree
forall a. XmlNode a => Int -> a
mkCharRef Int
i
{-# INLINE mkCharRef' #-}
mkEntityRef' :: String -> XmlTree
mkEntityRef' :: String -> XmlTree
mkEntityRef' String
n = XmlTree -> XmlTree
forall a. a -> a
id (XmlTree -> XmlTree) -> XmlTree -> XmlTree
forall a b. WNFData a => (a -> b) -> a -> b
$!! String -> XmlTree
forall a. XmlNode a => String -> a
mkEntityRef String
n
{-# INLINE mkEntityRef' #-}
mkCmt' :: String -> XmlTree
mkCmt' :: String -> XmlTree
mkCmt' String
c = XmlTree -> XmlTree
forall a. a -> a
id (XmlTree -> XmlTree) -> XmlTree -> XmlTree
forall a b. WNFData a => (a -> b) -> a -> b
$!! String -> XmlTree
forall a. XmlNode a => String -> a
mkCmt String
c
{-# INLINE mkCmt' #-}
mkCdata' :: String -> XmlTree
mkCdata' :: String -> XmlTree
mkCdata' String
d = XmlTree -> XmlTree
forall a. a -> a
id (XmlTree -> XmlTree) -> XmlTree -> XmlTree
forall a b. WNFData a => (a -> b) -> a -> b
$!! String -> XmlTree
forall a. XmlNode a => String -> a
mkCdata String
d
{-# INLINE mkCdata' #-}
mkPi' :: QName -> XmlTrees -> XmlTree
mkPi' :: QName -> XmlTrees -> XmlTree
mkPi' QName
n XmlTrees
v = XmlTree -> XmlTree
forall a. a -> a
id (XmlTree -> XmlTree) -> XmlTree -> XmlTree
forall a b. WNFData a => (a -> b) -> a -> b
$!! QName -> XmlTrees -> XmlTree
forall a. XmlNode a => QName -> XmlTrees -> a
mkPi QName
n XmlTrees
v
{-# INLINE mkPi' #-}
mkError' :: Int -> String -> XmlTree
mkError' :: Int -> String -> XmlTree
mkError' Int
l String
m = XmlTree -> XmlTree
forall a. a -> a
id (XmlTree -> XmlTree) -> XmlTree -> XmlTree
forall a b. WNFData a => (a -> b) -> a -> b
$!! Int -> String -> XmlTree
forall a. XmlNode a => Int -> String -> a
mkError Int
l String
m
{-# INLINE mkError' #-}
mkDTDElem' :: DTDElem -> Attributes -> XmlTrees -> XmlTree
mkDTDElem' :: DTDElem -> Attributes -> XmlTrees -> XmlTree
mkDTDElem' DTDElem
e Attributes
al XmlTrees
cl = XmlTree -> XmlTree
forall a. a -> a
id (XmlTree -> XmlTree) -> XmlTree -> XmlTree
forall a b. WNFData a => (a -> b) -> a -> b
$!! DTDElem -> Attributes -> XmlTrees -> XmlTree
mkDTDElem DTDElem
e Attributes
al XmlTrees
cl
{-# INLINE mkDTDElem' #-}
toText :: XmlTree -> XmlTree
toText :: XmlTree -> XmlTree
toText XmlTree
t
| XmlTree -> Bool
forall a. XmlNode a => a -> Bool
isCharRef XmlTree
t
= String -> XmlTree
forall a. XmlNode a => String -> a
mkText
(String -> XmlTree) -> (XmlTree -> String) -> XmlTree -> XmlTree
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> String -> String
forall a. a -> [a] -> [a]
:[]) (Char -> String) -> (XmlTree -> Char) -> XmlTree -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Char
forall a. Enum a => Int -> a
toEnum
(Int -> Char) -> (XmlTree -> Int) -> XmlTree -> Char
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe Int -> Int
forall a. HasCallStack => Maybe a -> a
fromJust
(Maybe Int -> Int) -> (XmlTree -> Maybe Int) -> XmlTree -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. XmlTree -> Maybe Int
forall a. XmlNode a => a -> Maybe Int
getCharRef
(XmlTree -> XmlTree) -> XmlTree -> XmlTree
forall a b. (a -> b) -> a -> b
$ XmlTree
t
| XmlTree -> Bool
forall a. XmlNode a => a -> Bool
isCdata XmlTree
t
= String -> XmlTree
forall a. XmlNode a => String -> a
mkText
(String -> XmlTree) -> (XmlTree -> String) -> XmlTree -> XmlTree
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe String -> String
forall a. HasCallStack => Maybe a -> a
fromJust
(Maybe String -> String)
-> (XmlTree -> Maybe String) -> XmlTree -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. XmlTree -> Maybe String
forall a. XmlNode a => a -> Maybe String
getCdata
(XmlTree -> XmlTree) -> XmlTree -> XmlTree
forall a b. (a -> b) -> a -> b
$ XmlTree
t
| Bool
otherwise
= XmlTree
t
concText :: XmlTree -> XmlTree -> XmlTrees
concText :: XmlTree -> XmlTree -> XmlTrees
concText XmlTree
t1 XmlTree
t2
| XmlTree -> Bool
forall a. XmlNode a => a -> Bool
isText XmlTree
t1 Bool -> Bool -> Bool
&& XmlTree -> Bool
forall a. XmlNode a => a -> Bool
isText XmlTree
t2
= (XmlTree -> XmlTrees -> XmlTrees
forall a. a -> [a] -> [a]
:[]) (XmlTree -> XmlTrees) -> (String -> XmlTree) -> String -> XmlTrees
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> XmlTree
forall a. XmlNode a => String -> a
mkText (String -> XmlTrees) -> String -> XmlTrees
forall a b. (a -> b) -> a -> b
$ Maybe String -> String
forall a. HasCallStack => Maybe a -> a
fromJust (XmlTree -> Maybe String
forall a. XmlNode a => a -> Maybe String
getText XmlTree
t1) String -> String -> String
forall a. [a] -> [a] -> [a]
++ Maybe String -> String
forall a. HasCallStack => Maybe a -> a
fromJust (XmlTree -> Maybe String
forall a. XmlNode a => a -> Maybe String
getText XmlTree
t2)
| Bool
otherwise
= [XmlTree
t1, XmlTree
t2]
mergeText :: XmlTree -> XmlTree -> XmlTrees
mergeText :: XmlTree -> XmlTree -> XmlTrees
mergeText
= XmlTree -> XmlTree -> XmlTrees
concText (XmlTree -> XmlTree -> XmlTrees)
-> (XmlTree -> XmlTree) -> XmlTree -> XmlTree -> XmlTrees
forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
`on` XmlTree -> XmlTree
toText