-- |
-- main namespace filter for propagation, checking, tracing and error handling
--
-- $Id: Namespace.hs,v 1.3 2005/01/06 10:48:07 hxml Exp $
--
module Text.XML.HXT.DOM.Namespace
    ( module Text.XML.HXT.DOM.Namespace
    , module Text.XML.HXT.DOM.NamespaceFilter
    )
where

import Text.XML.HXT.DOM.XmlTree
import Text.XML.HXT.DOM.XmlState
import Text.XML.HXT.DOM.NamespaceFilter

import Text.XML.HXT.Parser.XmlOutput
    ( traceTree
    , traceSource
    , traceMsg
    )

-- -----------------------------------------------------------------------------

-- |
-- propagate all namespace declarations, check namespace constraints and issue errors.
-- If no error was found, result is the unchanged input tree, else the root node \"\/\" with an empty document is returned.
--
-- see also : 'propagateNamespaces', 'validateNamespaces'

propagateAndValidateNamespaces	:: XmlStateFilter a
propagateAndValidateNamespaces
    = traceMsg 2 "propagating namespaces"
      .>>
      liftMf propagateNamespaces
      .>>
      traceTree
      .>>
      traceSource
      .>>
      traceMsg 2 "validating namespaces"
      .>>
      validate
    where
    validate	:: XmlStateFilter a
    validate t
	= let
	  errs = validateNamespaces t
	  in if null errs
	     then thisM t
	     else do
		  liftF this $$< errs
		  return (setStatus c_err "namespace propagation" t)
	  
-- -----------------------------------------------------------------------------