{-# LANGUAGE DeriveDataTypeable #-}
module Text.XML.HXT.DOM.TypeDefs
( module Data.AssocList
, module Text.XML.HXT.DOM.TypeDefs
, module Text.XML.HXT.DOM.QualifiedName
)
where
import Control.DeepSeq
import Control.FlatSeq
import Data.AssocList
import Data.Binary
import qualified Data.ByteString.Lazy as BS
import qualified Data.ByteString.Lazy.Char8 as CS
import Data.Tree.NTree.TypeDefs
import Data.Tree.NTree.Zipper.TypeDefs
import Data.Typeable
import Text.XML.HXT.DOM.QualifiedName
type XmlTree = NTree XNode
type XmlTrees = NTrees XNode
type XmlNavTree = NTZipper XNode
type XmlNavTrees = [NTZipper XNode]
data XNode = XText String
| XBlob Blob
| XCharRef Int
| XEntityRef String
| XCmt String
| XCdata String
| XPi QName XmlTrees
| XTag QName XmlTrees
| XDTD DTDElem Attributes
| XAttr QName
| XError Int String
deriving (XNode -> XNode -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: XNode -> XNode -> Bool
$c/= :: XNode -> XNode -> Bool
== :: XNode -> XNode -> Bool
$c== :: XNode -> XNode -> Bool
Eq, Int -> XNode -> ShowS
[XNode] -> ShowS
XNode -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [XNode] -> ShowS
$cshowList :: [XNode] -> ShowS
show :: XNode -> String
$cshow :: XNode -> String
showsPrec :: Int -> XNode -> ShowS
$cshowsPrec :: Int -> XNode -> ShowS
Show, Typeable)
instance NFData XNode where
rnf :: XNode -> ()
rnf (XText String
s) = forall a. NFData a => a -> ()
rnf String
s
rnf (XTag QName
qn XmlTrees
cs) = forall a. NFData a => a -> ()
rnf QName
qn seq :: forall a b. a -> b -> b
`seq` forall a. NFData a => a -> ()
rnf XmlTrees
cs
rnf (XAttr QName
qn) = forall a. NFData a => a -> ()
rnf QName
qn
rnf (XCharRef Int
i) = forall a. NFData a => a -> ()
rnf Int
i
rnf (XEntityRef String
n) = forall a. NFData a => a -> ()
rnf String
n
rnf (XCmt String
c) = forall a. NFData a => a -> ()
rnf String
c
rnf (XCdata String
s) = forall a. NFData a => a -> ()
rnf String
s
rnf (XPi QName
qn XmlTrees
ts) = forall a. NFData a => a -> ()
rnf QName
qn seq :: forall a b. a -> b -> b
`seq` forall a. NFData a => a -> ()
rnf XmlTrees
ts
rnf (XDTD DTDElem
de Attributes
al) = forall a. NFData a => a -> ()
rnf DTDElem
de seq :: forall a b. a -> b -> b
`seq` forall a. NFData a => a -> ()
rnf Attributes
al
rnf (XBlob Blob
b) = Blob -> Int64
BS.length Blob
b seq :: forall a b. a -> b -> b
`seq` ()
rnf (XError Int
n String
e) = forall a. NFData a => a -> ()
rnf Int
n seq :: forall a b. a -> b -> b
`seq` forall a. NFData a => a -> ()
rnf String
e
instance WNFData XNode where
rwnf :: XNode -> ()
rwnf (XText String
s) = forall a. WNFData a => a -> ()
rwnf String
s
rwnf (XTag QName
qn XmlTrees
cs) = forall a. WNFData a => a -> ()
rwnf QName
qn seq :: forall a b. a -> b -> b
`seq` forall a. WNFData a => a -> ()
rwnf XmlTrees
cs
rwnf (XAttr QName
qn) = forall a. WNFData a => a -> ()
rwnf QName
qn
rwnf (XCharRef Int
i) = Int
i seq :: forall a b. a -> b -> b
`seq` ()
rwnf (XEntityRef String
n) = forall a. WNFData a => a -> ()
rwnf String
n
rwnf (XCmt String
c) = forall a. WNFData a => a -> ()
rwnf String
c
rwnf (XCdata String
s) = forall a. WNFData a => a -> ()
rwnf String
s
rwnf (XPi QName
qn XmlTrees
ts) = forall a. WNFData a => a -> ()
rwnf QName
qn seq :: forall a b. a -> b -> b
`seq` forall a. WNFData a => a -> ()
rwnf XmlTrees
ts
rwnf (XDTD DTDElem
de Attributes
al) = forall a. WNFData a => a -> ()
rwnf DTDElem
de seq :: forall a b. a -> b -> b
`seq` Attributes -> ()
rwnfAttributes Attributes
al
rwnf (XBlob Blob
_b) = ()
rwnf (XError Int
n String
e) = Int
n seq :: forall a b. a -> b -> b
`seq` forall a. WNFData a => a -> ()
rwnf String
e
rwnfAttributes :: Attributes -> ()
rwnfAttributes :: Attributes -> ()
rwnfAttributes [] = ()
rwnfAttributes ((String
k, String
v) : Attributes
as) = forall a. WNFData a => a -> ()
rwnf String
k seq :: forall a b. a -> b -> b
`seq` forall a. WNFData a => a -> ()
rwnf String
v seq :: forall a b. a -> b -> b
`seq` Attributes -> ()
rwnfAttributes Attributes
as
instance Binary XNode where
put :: XNode -> Put
put (XText String
s) = forall t. Binary t => t -> Put
put ( Word8
0::Word8) forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall t. Binary t => t -> Put
put String
s
put (XTag QName
qn XmlTrees
cs) = forall t. Binary t => t -> Put
put ( Word8
6::Word8) forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall t. Binary t => t -> Put
put QName
qn forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall t. Binary t => t -> Put
put XmlTrees
cs
put (XAttr QName
qn) = forall t. Binary t => t -> Put
put ( Word8
8::Word8) forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall t. Binary t => t -> Put
put QName
qn
put (XCharRef Int
i) = forall t. Binary t => t -> Put
put ( Word8
1::Word8) forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall t. Binary t => t -> Put
put Int
i
put (XEntityRef String
n) = forall t. Binary t => t -> Put
put ( Word8
2::Word8) forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall t. Binary t => t -> Put
put String
n
put (XCmt String
c) = forall t. Binary t => t -> Put
put ( Word8
3::Word8) forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall t. Binary t => t -> Put
put String
c
put (XCdata String
s) = forall t. Binary t => t -> Put
put ( Word8
4::Word8) forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall t. Binary t => t -> Put
put String
s
put (XPi QName
qn XmlTrees
ts) = forall t. Binary t => t -> Put
put ( Word8
5::Word8) forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall t. Binary t => t -> Put
put QName
qn forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall t. Binary t => t -> Put
put XmlTrees
ts
put (XDTD DTDElem
de Attributes
al) = forall t. Binary t => t -> Put
put ( Word8
7::Word8) forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall t. Binary t => t -> Put
put DTDElem
de forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall t. Binary t => t -> Put
put Attributes
al
put (XError Int
n String
e) = forall t. Binary t => t -> Put
put ( Word8
9::Word8) forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall t. Binary t => t -> Put
put Int
n forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall t. Binary t => t -> Put
put String
e
put (XBlob Blob
b) = forall t. Binary t => t -> Put
put (Word8
10::Word8) forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall t. Binary t => t -> Put
put Blob
b
get :: Get XNode
get = do
Word8
tag <- Get Word8
getWord8
case Word8
tag of
Word8
0 -> forall t. Binary t => Get t
get forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> XNode
XText
Word8
1 -> forall t. Binary t => Get t
get forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> XNode
XCharRef
Word8
2 -> forall t. Binary t => Get t
get forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> XNode
XEntityRef
Word8
3 -> forall t. Binary t => Get t
get forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> XNode
XCmt
Word8
4 -> forall t. Binary t => Get t
get forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> XNode
XCdata
Word8
5 -> do
QName
qn <- forall t. Binary t => Get t
get
forall t. Binary t => Get t
get forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. QName -> XmlTrees -> XNode
XPi QName
qn
Word8
6 -> do
QName
qn <- forall t. Binary t => Get t
get
forall t. Binary t => Get t
get forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. QName -> XmlTrees -> XNode
XTag QName
qn
Word8
7 -> do
DTDElem
de <- forall t. Binary t => Get t
get
forall t. Binary t => Get t
get forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. DTDElem -> Attributes -> XNode
XDTD DTDElem
de
Word8
8 -> forall t. Binary t => Get t
get forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. QName -> XNode
XAttr
Word8
9 -> do
Int
n <- forall t. Binary t => Get t
get
forall t. Binary t => Get t
get forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String -> XNode
XError Int
n
Word8
10 -> forall t. Binary t => Get t
get forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. Blob -> XNode
XBlob
Word8
_ -> forall a. HasCallStack => String -> a
error String
"XNode.get: error while decoding XNode"
data DTDElem = DOCTYPE
| ELEMENT
| CONTENT
| ATTLIST
| ENTITY
| PENTITY
| NOTATION
| CONDSECT
| NAME
| PEREF
deriving (DTDElem -> DTDElem -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DTDElem -> DTDElem -> Bool
$c/= :: DTDElem -> DTDElem -> Bool
== :: DTDElem -> DTDElem -> Bool
$c== :: DTDElem -> DTDElem -> Bool
Eq, Eq DTDElem
DTDElem -> DTDElem -> Bool
DTDElem -> DTDElem -> Ordering
DTDElem -> DTDElem -> DTDElem
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: DTDElem -> DTDElem -> DTDElem
$cmin :: DTDElem -> DTDElem -> DTDElem
max :: DTDElem -> DTDElem -> DTDElem
$cmax :: DTDElem -> DTDElem -> DTDElem
>= :: DTDElem -> DTDElem -> Bool
$c>= :: DTDElem -> DTDElem -> Bool
> :: DTDElem -> DTDElem -> Bool
$c> :: DTDElem -> DTDElem -> Bool
<= :: DTDElem -> DTDElem -> Bool
$c<= :: DTDElem -> DTDElem -> Bool
< :: DTDElem -> DTDElem -> Bool
$c< :: DTDElem -> DTDElem -> Bool
compare :: DTDElem -> DTDElem -> Ordering
$ccompare :: DTDElem -> DTDElem -> Ordering
Ord, Int -> DTDElem
DTDElem -> Int
DTDElem -> [DTDElem]
DTDElem -> DTDElem
DTDElem -> DTDElem -> [DTDElem]
DTDElem -> DTDElem -> DTDElem -> [DTDElem]
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: DTDElem -> DTDElem -> DTDElem -> [DTDElem]
$cenumFromThenTo :: DTDElem -> DTDElem -> DTDElem -> [DTDElem]
enumFromTo :: DTDElem -> DTDElem -> [DTDElem]
$cenumFromTo :: DTDElem -> DTDElem -> [DTDElem]
enumFromThen :: DTDElem -> DTDElem -> [DTDElem]
$cenumFromThen :: DTDElem -> DTDElem -> [DTDElem]
enumFrom :: DTDElem -> [DTDElem]
$cenumFrom :: DTDElem -> [DTDElem]
fromEnum :: DTDElem -> Int
$cfromEnum :: DTDElem -> Int
toEnum :: Int -> DTDElem
$ctoEnum :: Int -> DTDElem
pred :: DTDElem -> DTDElem
$cpred :: DTDElem -> DTDElem
succ :: DTDElem -> DTDElem
$csucc :: DTDElem -> DTDElem
Enum, Int -> DTDElem -> ShowS
[DTDElem] -> ShowS
DTDElem -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DTDElem] -> ShowS
$cshowList :: [DTDElem] -> ShowS
show :: DTDElem -> String
$cshow :: DTDElem -> String
showsPrec :: Int -> DTDElem -> ShowS
$cshowsPrec :: Int -> DTDElem -> ShowS
Show, ReadPrec [DTDElem]
ReadPrec DTDElem
Int -> ReadS DTDElem
ReadS [DTDElem]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DTDElem]
$creadListPrec :: ReadPrec [DTDElem]
readPrec :: ReadPrec DTDElem
$creadPrec :: ReadPrec DTDElem
readList :: ReadS [DTDElem]
$creadList :: ReadS [DTDElem]
readsPrec :: Int -> ReadS DTDElem
$creadsPrec :: Int -> ReadS DTDElem
Read, Typeable)
instance NFData DTDElem
where rnf :: DTDElem -> ()
rnf DTDElem
x = seq :: forall a b. a -> b -> b
seq DTDElem
x ()
instance WNFData DTDElem
instance Binary DTDElem where
put :: DTDElem -> Put
put DTDElem
de = forall t. Binary t => t -> Put
put ((forall a. Enum a => Int -> a
toEnum forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Enum a => a -> Int
fromEnum forall a b. (a -> b) -> a -> b
$ DTDElem
de)::Word8)
get :: Get DTDElem
get = do Word8
tag <- Get Word8
getWord8
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$! (forall a. Enum a => Int -> a
toEnum forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Enum a => a -> Int
fromEnum forall a b. (a -> b) -> a -> b
$ Word8
tag)
type Blob = BS.ByteString
blobToString :: Blob -> String
blobToString :: Blob -> String
blobToString = Blob -> String
CS.unpack
{-# INLINE blobToString #-}
stringToBlob :: String -> Blob
stringToBlob :: String -> Blob
stringToBlob = String -> Blob
CS.pack
{-# INLINE stringToBlob #-}
type Attributes = AssocList String String
c_ok :: Int
c_ok :: Int
c_ok = Int
0
c_warn :: Int
c_warn :: Int
c_warn = Int
c_ok forall a. Num a => a -> a -> a
+ Int
1
c_err :: Int
c_err :: Int
c_err = Int
c_warn forall a. Num a => a -> a -> a
+ Int
1
c_fatal :: Int
c_fatal :: Int
c_fatal = Int
c_err forall a. Num a => a -> a -> a
+ Int
1
data XmlNodeSet = XNS { XmlNodeSet -> Bool
thisNode :: Bool
, XmlNodeSet -> [QName]
attrNodes :: [QName]
, XmlNodeSet -> ChildNodes
childNodes :: ChildNodes
}
deriving (XmlNodeSet -> XmlNodeSet -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: XmlNodeSet -> XmlNodeSet -> Bool
$c/= :: XmlNodeSet -> XmlNodeSet -> Bool
== :: XmlNodeSet -> XmlNodeSet -> Bool
$c== :: XmlNodeSet -> XmlNodeSet -> Bool
Eq, Int -> XmlNodeSet -> ShowS
[XmlNodeSet] -> ShowS
XmlNodeSet -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [XmlNodeSet] -> ShowS
$cshowList :: [XmlNodeSet] -> ShowS
show :: XmlNodeSet -> String
$cshow :: XmlNodeSet -> String
showsPrec :: Int -> XmlNodeSet -> ShowS
$cshowsPrec :: Int -> XmlNodeSet -> ShowS
Show, Typeable)
type ChildNodes = [(Int, XmlNodeSet)]