module XmlParser.NodeConsumerState
( NodeConsumerState,
new,
bumpOffset,
getOffset,
fetchNode,
lookupNamespace,
getNamespaceRegistry,
)
where
import qualified Text.XML as Xml
import qualified XmlParser.NamespaceRegistry as NamespaceRegistry
import XmlParser.Prelude
data NodeConsumerState
= NodeConsumerState
[Xml.Node]
Int
NamespaceRegistry.NamespaceRegistry
new :: [Xml.Node] -> NamespaceRegistry.NamespaceRegistry -> NodeConsumerState
new :: [Node] -> NamespaceRegistry -> NodeConsumerState
new [Node]
nodes NamespaceRegistry
nsReg = [Node] -> Int -> NamespaceRegistry -> NodeConsumerState
NodeConsumerState [Node]
nodes Int
0 NamespaceRegistry
nsReg
bumpOffset :: NodeConsumerState -> NodeConsumerState
bumpOffset :: NodeConsumerState -> NodeConsumerState
bumpOffset (NodeConsumerState [Node]
a Int
b NamespaceRegistry
c) = [Node] -> Int -> NamespaceRegistry -> NodeConsumerState
NodeConsumerState [Node]
a (Int -> Int
forall a. Enum a => a -> a
succ Int
b) NamespaceRegistry
c
getOffset :: NodeConsumerState -> Int
getOffset :: NodeConsumerState -> Int
getOffset (NodeConsumerState [Node]
_ Int
x NamespaceRegistry
_) = Int
x
fetchNode :: NodeConsumerState -> Maybe (Xml.Node, NodeConsumerState)
fetchNode :: NodeConsumerState -> Maybe (Node, NodeConsumerState)
fetchNode (NodeConsumerState [Node]
nodes Int
offset NamespaceRegistry
nsReg) =
case [Node]
nodes of
Node
nodesHead : [Node]
nodesTail -> (Node, NodeConsumerState) -> Maybe (Node, NodeConsumerState)
forall a. a -> Maybe a
Just (Node
nodesHead, [Node] -> Int -> NamespaceRegistry -> NodeConsumerState
NodeConsumerState [Node]
nodesTail Int
offset NamespaceRegistry
nsReg)
[Node]
_ -> Maybe (Node, NodeConsumerState)
forall a. Maybe a
Nothing
lookupNamespace :: Text -> NodeConsumerState -> Maybe Text
lookupNamespace :: Text -> NodeConsumerState -> Maybe Text
lookupNamespace Text
ns (NodeConsumerState [Node]
_ Int
_ NamespaceRegistry
nsReg) =
Text -> NamespaceRegistry -> Maybe Text
NamespaceRegistry.lookup Text
ns NamespaceRegistry
nsReg
getNamespaceRegistry :: NodeConsumerState -> NamespaceRegistry.NamespaceRegistry
getNamespaceRegistry :: NodeConsumerState -> NamespaceRegistry
getNamespaceRegistry (NodeConsumerState [Node]
_ Int
_ NamespaceRegistry
x) = NamespaceRegistry
x