module XmlParser.ElementDestructionState
( ElementDestructionContext (..),
ElementDestructionState,
new,
resolveAttributeNames,
resolveChildNames,
)
where
import qualified Text.XML as Xml
import qualified XmlParser.NameMap as NameMap
import qualified XmlParser.NamespaceRegistry as NamespaceRegistry
import XmlParser.Prelude
data ElementDestructionContext
= ElementDestructionContext
NamespaceRegistry.NamespaceRegistry
Xml.Element
data ElementDestructionState
= ElementDestructionState
(Maybe (NameMap.NameMap Text))
(Maybe (NameMap.NameMap Xml.Element))
new :: ElementDestructionState
new :: ElementDestructionState
new = Maybe (NameMap Text)
-> Maybe (NameMap Element) -> ElementDestructionState
ElementDestructionState Maybe (NameMap Text)
forall a. Maybe a
Nothing Maybe (NameMap Element)
forall a. Maybe a
Nothing
resolveAttributeNames :: ElementDestructionContext -> ElementDestructionState -> (NameMap.NameMap Text, ElementDestructionState)
resolveAttributeNames :: ElementDestructionContext
-> ElementDestructionState
-> (NameMap Text, ElementDestructionState)
resolveAttributeNames
(ElementDestructionContext NamespaceRegistry
nreg (Xml.Element Name
_ Map Name Text
attributes [Node]
_))
(ElementDestructionState Maybe (NameMap Text)
attributeByNameMap Maybe (NameMap Element)
childByNameMap) =
let resolvedAttributeByNameMap :: NameMap Text
resolvedAttributeByNameMap = NameMap Text -> Maybe (NameMap Text) -> NameMap Text
forall a. a -> Maybe a -> a
fromMaybe (NamespaceRegistry -> Map Name Text -> NameMap Text
NameMap.fromAttributes NamespaceRegistry
nreg Map Name Text
attributes) Maybe (NameMap Text)
attributeByNameMap
in (NameMap Text
resolvedAttributeByNameMap, Maybe (NameMap Text)
-> Maybe (NameMap Element) -> ElementDestructionState
ElementDestructionState (NameMap Text -> Maybe (NameMap Text)
forall a. a -> Maybe a
Just NameMap Text
resolvedAttributeByNameMap) Maybe (NameMap Element)
childByNameMap)
resolveChildNames :: ElementDestructionContext -> ElementDestructionState -> (NameMap.NameMap Xml.Element, ElementDestructionState)
resolveChildNames :: ElementDestructionContext
-> ElementDestructionState
-> (NameMap Element, ElementDestructionState)
resolveChildNames
(ElementDestructionContext NamespaceRegistry
nreg (Xml.Element Name
_ Map Name Text
_ [Node]
nodes))
(ElementDestructionState Maybe (NameMap Text)
attributeByNameMap Maybe (NameMap Element)
childByNameMap) =
let resolvedChildByNameMap :: NameMap Element
resolvedChildByNameMap = NameMap Element -> Maybe (NameMap Element) -> NameMap Element
forall a. a -> Maybe a -> a
fromMaybe (NamespaceRegistry -> [Node] -> NameMap Element
NameMap.fromNodes NamespaceRegistry
nreg [Node]
nodes) Maybe (NameMap Element)
childByNameMap
in (NameMap Element
resolvedChildByNameMap, Maybe (NameMap Text)
-> Maybe (NameMap Element) -> ElementDestructionState
ElementDestructionState Maybe (NameMap Text)
attributeByNameMap (NameMap Element -> Maybe (NameMap Element)
forall a. a -> Maybe a
Just NameMap Element
resolvedChildByNameMap))