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 forall a. Maybe a
Nothing 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 = 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 (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 = 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 (forall a. a -> Maybe a
Just NameMap Element
resolvedChildByNameMap))