diff --git a/LICENCE b/LICENCE
new file mode 100644
--- /dev/null
+++ b/LICENCE
@@ -0,0 +1,9 @@
+The MIT License
+
+Copyright (c) 2005 Uwe Schmidt, Martin Schmidt, Torben Kuseler
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Makefile b/Makefile
new file mode 100644
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,139 @@
+include Version.mk
+
+HXT_HOME	= .
+
+DIST		= $(DIST_NAME)
+DIST_TAR	= $(DIST_NAME).tar.gz
+DIST_FILES	= Makefile Version.mk README LICENCE Setup.lhs $(SOFTWARE).cabal
+
+SETUP		= Setup.lhs
+
+VERSIONTAG	= $(DIST_NAME)
+PUBDATE		:= $(shell date +%Y-%m-%d)
+
+EDIT_VERSION	= sed 's/%DISTFILE%/$(DIST_NAME)/g' \
+		| sed 's/%VERSION%/$(VERSION)/g' \
+		| sed 's/%PUBDATE%/$(PUBDATE)/g'
+
+HSCOLOUR	= HsColour
+HSCOLOUR_CSS	= doc/hscolour.css
+
+# --------------------------------------------------
+
+all		:
+		$(MAKE) -C src all
+		$(MAKE)        $(SOFTWARE).cabal
+		$(MAKE)        allexamples
+
+allexamples	:
+		$(MAKE) -C examples all
+
+test		:
+		$(MAKE) -C examples test
+
+# ------------------------------------------------------------
+
+cabal		:
+		$(MAKE) cabal_configure cabal_build cabal_doc cabal_install
+
+cabal_configure :
+		runhaskell $(SETUP) configure
+
+cabal_doc	:
+		$(HSCOLOUR) -print-css > $(HSCOLOUR)
+		runhaskell $(SETUP) haddock --hyperlink-source --hscolour-css=$(HSCOLOUR)
+		rm -f $(HSCOLOUR)
+
+cabal_build	:
+		runhaskell $(SETUP) build
+
+cabal_install	:
+		sudo runhaskell $(SETUP) install
+
+# ------------------------------------------------------------
+
+$(SOFTWARE).cabal	: src/$(SOFTWARE)-package.hs src/Makefile Makefile
+		$(MAKE) -C src ../$(SOFTWARE).cabal
+
+DOC_HXT		= $(DIST)/doc/$(SOFTWARE)
+
+doc		: $(SOFTWARE).cabal
+		$(MAKE) cabal_configure cabal_doc
+		[ -d $(DOC_HXT) ] || mkdir -p $(DOC_HXT)
+		( cd dist/doc/html/$(SOFTWARE) ; tar cf - . ) | ( cd $(DOC_HXT) ; tar xf - )
+
+dist		: all doc
+		[ -d $(DIST) ] || mkdir -p $(DIST)
+		$(MAKE) -C src      dist
+		$(MAKE) -C examples dist
+		cp $(DIST_FILES) $(DIST)
+
+tarball		: dist
+		tar -zcvf $(DIST_TAR) $(DIST)
+
+# ------------------------------------------------------------
+
+clean		:
+		$(MAKE) -C src      clean
+		$(MAKE) -C examples clean
+		rm -rf $(DIST) $(DIST_TAR) $(SOFTWARE).cabal .setup-config .installed-pkg-config dist
+
+# ------------------------------------------------------------
+
+tag		:
+		darcs tag $(VERSIONTAG) .
+
+install		:
+		$(MAKE) -C src install
+
+uninstall		:
+		$(MAKE) -C src uninstall
+
+DISTDATE	= $(shell date -r $(DIST_TAR) +%Y-%m-%d.%R)
+
+distcopy	: $(DIST_TAR)
+		scp $(DIST_TAR) hxt@darcs.fh-wedel.de:/home/hxt/$(SOFTWARE)/$(SOFTWARE)-head-$(DISTDATE).tar.gz
+
+# --------------------------------------------------
+
+.PHONY		: all doc test dist clean tag install uninstall tarball webpage cleanwebpage
+
+# --------------------------------------------------
+
+# Create webpage directory for distribution
+
+WEBHOME		= ../../../fh/public_html/HXmlToolbox
+
+webpage		: tarball
+		[ -d $(WEBHOME) ] || exit 1
+		[ -d $(WEBHOME)/hdoc-filter ] || mkdir -p $(WEBHOME)/hdoc-filter
+		cp -r dist/doc/html/$(SOFTWARE)/* $(WEBHOME)/hdoc-filter
+		cp $(DIST_TAR) $(WEBHOME)
+
+# --------------------------------------------------
+
+# make a clean installation from distribution tar
+
+PROD_DIR	= ~/tmp
+INSTALL		= echo now run: "(" cd $(PROD_DIR)/$(DIST) ";" 
+INSTEND		= ")"
+
+distbuild	: tarball
+		( [ -f $(DIST_TAR) ] || exit 1 \
+		; cp -f $(DIST_TAR) $(PROD_DIR) || exit 1 \
+		; cd $(PROD_DIR) || exit 1 \
+		; rm -rf $(DIST) \
+		; tar xvzf $(DIST_TAR) \
+		; cd $(DIST) || exit 1 \
+		; runhaskell $(SETUP) configure || exit 1 \
+		; runhaskell $(SETUP) build || exit 1 \
+		; $(INSTALL) sudo runhaskell $(SETUP) install $(INSTEND) \
+		)
+
+distinstall	:
+		$(MAKE) distbuild INSTALL="" INSTEND=""
+
+# --------------------------------------------------
+#
+
+# end Makefile
diff --git a/README b/README
new file mode 100644
--- /dev/null
+++ b/README
@@ -0,0 +1,22 @@
+$Id: README,v 1.25 2006/11/15 18:29:08 hxml Exp $
+
+The Haskell XML Toolbox is a collection of tools for processing XML with
+Haskell.
+
+The Haskell XML Toolbox is available from:
+    http://www.fh-wedel.de/~si/HXmlToolbox/
+
+Detailed information about the features, changes, requirements, installation and documentation
+is available from that web page.
+
+This is the "old" approach with the filters like in HaXmL.
+The package name for these modules is "hxt-filter".
+It requires the "hxt" package to be installed.
+For new projects we strongly recomend the
+library based on arrows (package "hxt").
+
+Good luck,
+
+Uwe Schmidt
+
+(uwe@fh-wedel.de)
diff --git a/Setup.lhs b/Setup.lhs
new file mode 100644
--- /dev/null
+++ b/Setup.lhs
@@ -0,0 +1,8 @@
+#!/usr/bin/runhaskell
+
+> module Main where
+
+> import Distribution.Simple
+
+> main :: IO ()
+> main = defaultMain
diff --git a/Version.mk b/Version.mk
new file mode 100644
--- /dev/null
+++ b/Version.mk
@@ -0,0 +1,7 @@
+# Version.mk
+# Version numbering for HXT filter package
+
+SOFTWARE	= hxt-filter
+VERSION		= 8.0.0
+LASTVERSION	= 7.5
+DIST_NAME	= $(SOFTWARE)-$(VERSION)
diff --git a/doc/hxt-filter/Control-Monad-MonadStateIO.html b/doc/hxt-filter/Control-Monad-MonadStateIO.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Control-Monad-MonadStateIO.html
@@ -0,0 +1,469 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Control.Monad.MonadStateIO</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Control-Monad-MonadStateIO.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Control.Monad.MonadStateIO</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>general usefull state monad for a local state and IO
+</P
+><P
+>This module is used for threading a state and io actions
+ through a computation.
+ Here the monad is constructed by hand.
+ It could easily be refactored with the use of the monad transformer library.
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>newtype</SPAN
+> <A HREF="#t%3AStateIO"
+>StateIO</A
+> state res = <A HREF="#v%3ASTIO"
+>STIO</A
+> {<TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="recfield"
+><A HREF="#v%3Atrans"
+>trans</A
+> :: (state -&gt; IO (res, state))</TD
+></TR
+></TABLE
+>}</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Aio"
+>io</A
+> :: IO a -&gt; <A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>StateIO</A
+> state a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AtrcState"
+>trcState</A
+> :: (state -&gt; String) -&gt; <A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>StateIO</A
+> state ()</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AchangeState"
+>changeState</A
+> :: (state -&gt; state) -&gt; <A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>StateIO</A
+> state state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AsetState"
+>setState</A
+> :: state -&gt; <A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>StateIO</A
+> state state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetState"
+>getState</A
+> :: <A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>StateIO</A
+> state state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Arun"
+>run</A
+> :: state -&gt; <A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>StateIO</A
+> state res -&gt; IO res</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><SPAN CLASS="keyword"
+>newtype</SPAN
+> <A NAME="t%3AStateIO"
+></A
+><B
+>StateIO</B
+> state res</TD
+><TD CLASS="declbut"
+><A HREF="src/Control-Monad-MonadStateIO.html#StateIO"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="section4"
+>Constructors</TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="5" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+><A NAME="v%3ASTIO"
+></A
+><B
+>STIO</B
+></TD
+><TD CLASS="rdoc"
+></TD
+></TR
+><TR
+><TD CLASS="body" COLSPAN="2"
+><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+><A NAME="v%3Atrans"
+></A
+><B
+>trans</B
+> :: (state -&gt; IO (res, state))</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section4"
+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:StateIO')" ALT="show/hide"
+> Instances</TD
+></TR
+><TR
+><TD CLASS="body"
+><DIV ID="i:StateIO" STYLE="display:block;"
+><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+>Monad (<A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>StateIO</A
+> state)</TD
+></TR
+></TABLE
+></DIV
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Aio"
+></A
+><B
+>io</B
+> :: IO a -&gt; <A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>StateIO</A
+> state a</TD
+><TD CLASS="declbut"
+><A HREF="src/Control-Monad-MonadStateIO.html#io"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>lift IO command to <TT
+><A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>StateIO</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AtrcState"
+></A
+><B
+>trcState</B
+> :: (state -&gt; String) -&gt; <A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>StateIO</A
+> state ()</TD
+><TD CLASS="declbut"
+><A HREF="src/Control-Monad-MonadStateIO.html#trcState"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>state inspection command: a &quot;show&quot;-like function is applied to the state
+ and the result is written to stderr.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AchangeState"
+></A
+><B
+>changeState</B
+> :: (state -&gt; state) -&gt; <A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>StateIO</A
+> state state</TD
+><TD CLASS="declbut"
+><A HREF="src/Control-Monad-MonadStateIO.html#changeState"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>change the state with a given function and return the new state
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AsetState"
+></A
+><B
+>setState</B
+> :: state -&gt; <A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>StateIO</A
+> state state</TD
+><TD CLASS="declbut"
+><A HREF="src/Control-Monad-MonadStateIO.html#setState"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>set the state
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetState"
+></A
+><B
+>getState</B
+> :: <A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>StateIO</A
+> state state</TD
+><TD CLASS="declbut"
+><A HREF="src/Control-Monad-MonadStateIO.html#getState"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>read the state
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Arun"
+></A
+><B
+>run</B
+> :: state -&gt; <A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>StateIO</A
+> state res -&gt; IO res</TD
+><TD CLASS="declbut"
+><A HREF="src/Control-Monad-MonadStateIO.html#run"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>run a <TT
+><A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>StateIO</A
+></TT
+> command with an initial state
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-DOM-EditFilters.html b/doc/hxt-filter/Text-XML-HXT-DOM-EditFilters.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-DOM-EditFilters.html
@@ -0,0 +1,1455 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.DOM.EditFilters</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.DOM.EditFilters</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+>XML editing filters
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AcanonicalizeTree"
+>canonicalizeTree</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AcanonicalizeAllNodes"
+>canonicalizeAllNodes</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AcanonicalizeForXPath"
+>canonicalizeForXPath</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AcollapseXText"
+>collapseXText</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AcollapseAllXText"
+>collapseAllXText</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AindentDoc"
+>indentDoc</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AremoveWhiteSpace"
+>removeWhiteSpace</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AremoveAllWhiteSpace"
+>removeAllWhiteSpace</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AremoveDocWhiteSpace"
+>removeDocWhiteSpace</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AremoveComment"
+>removeComment</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AremoveAllComment"
+>removeAllComment</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AtransfCdata"
+>transfCdata</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AtransfAllCdata"
+>transfAllCdata</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AtransfCdataEscaped"
+>transfCdataEscaped</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AtransfAllCdataEscaped"
+>transfAllCdataEscaped</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AtransfCharRef"
+>transfCharRef</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AtransfAllCharRef"
+>transfAllCharRef</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AescapeXmlDoc"
+>escapeXmlDoc</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AescapeXmlText"
+>escapeXmlText</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AescapeXmlAttrValue"
+>escapeXmlAttrValue</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AunparseXmlDoc"
+>unparseXmlDoc</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AnumberLinesInXmlDoc"
+>numberLinesInXmlDoc</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AnumberLines"
+>numberLines</A
+> :: String -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AtreeRepOfXmlDoc"
+>treeRepOfXmlDoc</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AhaskellRepOfXmlDoc"
+>haskellRepOfXmlDoc</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AaddHeadlineToXmlDoc"
+>addHeadlineToXmlDoc</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AaddXmlPiToDoc"
+>addXmlPiToDoc</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AcanonicalizeTree"
+></A
+><B
+>canonicalizeTree</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#canonicalizeTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Applies some <A HREF="Canonical XML.html"
+>Canonical XML</A
+> rules to the nodes of a tree.
+</P
+><P
+>The rule differ slightly for canonical XML and XPath in handling of comments
+</P
+><P
+>Note: This is not the whole canonicalization as it is specified by the W3C
+ Recommendation. Adding attribute defaults or sorting attributes in lexicographic
+ order is done by the <TT
+>transform</TT
+> function of module <TT
+>Text.XML.HXT.Validator.Validation</TT
+>.
+ Replacing entities or line feed normalization is done by the parser.
+</P
+><P
+>Not implemented yet:
+</P
+><UL
+><LI
+> Whitespace within start and end tags is normalized
+</LI
+><LI
+> Special characters in attribute values and character content are replaced by character references
+</LI
+></UL
+><P
+>see <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AcanonicalizeAllNodes"
+>canonicalizeAllNodes</A
+></TT
+> and <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AcanonicalizeForXPath"
+>canonicalizeForXPath</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AcanonicalizeAllNodes"
+></A
+><B
+>canonicalizeAllNodes</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#canonicalizeAllNodes"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>canonicalize tree and remove comments and &lt;?xml ... ?&gt; declarations
+</P
+><P
+>see <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AcanonicalizeTree"
+>canonicalizeTree</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AcanonicalizeForXPath"
+></A
+><B
+>canonicalizeForXPath</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#canonicalizeForXPath"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Canonicalize a tree for XPath
+ Comment nodes are not removed
+</P
+><P
+>see <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AcanonicalizeTree"
+>canonicalizeTree</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AcollapseXText"
+></A
+><B
+>collapseXText</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#collapseXText"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>Collects sequences of child XText nodes into one XText node.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AcollapseAllXText"
+></A
+><B
+>collapseAllXText</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#collapseAllXText"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Applies collapseXText recursively.
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AcollapseXText"
+>collapseXText</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AindentDoc"
+></A
+><B
+>indentDoc</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#indentDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>filter for indenting a document tree for pretty printing.
+</P
+><P
+>the tree is traversed for inserting whitespace for tag indentation.
+</P
+><P
+>whitespace is only inserted or changed at places, where it isn't significant,
+ is's not inserted between tags and text containing non whitespace chars.
+</P
+><P
+>whitespace is only inserted or changed at places, where it's not significant.
+ preserving whitespace may be controlled in a document tree
+ by a tag attribute <TT
+>xml:space</TT
+>
+</P
+><P
+>allowed values for this attribute are <TT
+>default | preserve</TT
+>.
+</P
+><P
+>input is a complete document tree.
+ result the semantically equivalent formatted tree.
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AremoveDocWhiteSpace"
+>removeDocWhiteSpace</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AremoveWhiteSpace"
+></A
+><B
+>removeWhiteSpace</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#removeWhiteSpace"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>simple filter for removing whitespace.
+</P
+><P
+>no check on sigificant whitespace is done.
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AremoveAllWhiteSpace"
+>removeAllWhiteSpace</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AremoveDocWhiteSpace"
+>removeDocWhiteSpace</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AremoveAllWhiteSpace"
+></A
+><B
+>removeAllWhiteSpace</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#removeAllWhiteSpace"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>simple recursive filter for removing all whitespace.
+</P
+><P
+>removes all text nodes in a tree that consist only of whitespace.
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AremoveWhiteSpace"
+>removeWhiteSpace</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AremoveDocWhiteSpace"
+>removeDocWhiteSpace</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AremoveDocWhiteSpace"
+></A
+><B
+>removeDocWhiteSpace</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#removeDocWhiteSpace"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>filter for removing all not significant whitespace.
+</P
+><P
+>the tree traversed for removing whitespace between tags,
+ that was inserted for indentation and readability.
+ whitespace is only removed at places, where it's not significat
+ preserving whitespace may be controlled in a document tree
+ by a tag attribute <TT
+>xml:space</TT
+>
+</P
+><P
+>allowed values for this attribute are <TT
+>default | preserve</TT
+>
+</P
+><P
+>input is root node of the document to be cleaned up
+ output the semantically equivalent simplified tree
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AindentDoc"
+>indentDoc</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AremoveAllWhiteSpace"
+>removeAllWhiteSpace</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AremoveComment"
+></A
+><B
+>removeComment</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#removeComment"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>remove Comments
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AremoveAllComment"
+></A
+><B
+>removeAllComment</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#removeAllComment"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>remove all Comments recursively
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AtransfCdata"
+></A
+><B
+>transfCdata</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#transfCdata"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>converts CDATA section in normal text sections
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AtransfAllCdata"
+></A
+><B
+>transfAllCdata</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#transfAllCdata"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>converts CDATA sections in whole document tree
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AtransfCdataEscaped"
+></A
+><B
+>transfCdataEscaped</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#transfCdataEscaped"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>converts CDATA section in normal text nodes
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AtransfAllCdataEscaped"
+></A
+><B
+>transfAllCdataEscaped</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#transfAllCdataEscaped"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>converts CDATA sections in whole document tree into normal text nodes
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AtransfCharRef"
+></A
+><B
+>transfCharRef</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#transfCharRef"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>converts character references to normal text
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AtransfAllCharRef"
+></A
+><B
+>transfAllCharRef</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#transfAllCharRef"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>recursively converts all character references to normal text
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AescapeXmlDoc"
+></A
+><B
+>escapeXmlDoc</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#escapeXmlDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>convert the special XML chars &quot;, &lt;, &gt;, &amp; and ' in a document to char references,
+ attribute values are converted with <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AescapeXmlAttrValue"
+>escapeXmlAttrValue</A
+></TT
+>
+</P
+><P
+>see also: <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AescapeXmlText"
+>escapeXmlText</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AescapeXmlAttrValue"
+>escapeXmlAttrValue</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AescapeXmlText"
+></A
+><B
+>escapeXmlText</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#escapeXmlText"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>convert the special XML chars in a text or comment node
+ into character references
+</P
+><P
+>see also <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AescapeXmlDoc"
+>escapeXmlDoc</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AescapeXmlAttrValue"
+></A
+><B
+>escapeXmlAttrValue</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#escapeXmlAttrValue"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>convert the special XML chars in an attribute value into
+ charachter references. Not only the XML specials but also \n, \r and \t are converted
+</P
+><P
+>see also: <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AescapeXmlDoc"
+>escapeXmlDoc</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AescapeXmlText"
+>escapeXmlText</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AunparseXmlDoc"
+></A
+><B
+>unparseXmlDoc</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#unparseXmlDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>convert a document tree into an output string representation
+ with respect to the output encoding.
+</P
+><P
+>The children of the document root are stubstituted by
+ a single text node for the text representation of the document.
+</P
+><P
+>Encoding of the document is performed with respect
+ to the <TT
+>output-encoding</TT
+> attribute in the root node, or if not present,
+ of the <TT
+>encoding</TT
+> attribute for the original input encoding.
+ If the encoding is not specified or not supported, UTF-8 is taken.
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AnumberLinesInXmlDoc"
+></A
+><B
+>numberLinesInXmlDoc</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#numberLinesInXmlDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>convert a document into a text and add line numbers to the text representation.
+</P
+><P
+>Result is a root node with a single text node as child.
+ Useful for debugging and trace output.
+ see also : <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AhaskellRepOfXmlDoc"
+>haskellRepOfXmlDoc</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AtreeRepOfXmlDoc"
+>treeRepOfXmlDoc</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AnumberLines"
+></A
+><B
+>numberLines</B
+> :: String -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#numberLines"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AtreeRepOfXmlDoc"
+></A
+><B
+>treeRepOfXmlDoc</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#treeRepOfXmlDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>convert a document into a text representation in tree form.
+</P
+><P
+>Useful for debugging and trace output.
+ see also : <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AhaskellRepOfXmlDoc"
+>haskellRepOfXmlDoc</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AnumberLinesInXmlDoc"
+>numberLinesInXmlDoc</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AhaskellRepOfXmlDoc"
+></A
+><B
+>haskellRepOfXmlDoc</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#haskellRepOfXmlDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>convert a document into a Haskell representation (with show).
+</P
+><P
+>Useful for debugging and trace output.
+ see also : <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AtreeRepOfXmlDoc"
+>treeRepOfXmlDoc</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AnumberLinesInXmlDoc"
+>numberLinesInXmlDoc</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AaddHeadlineToXmlDoc"
+></A
+><B
+>addHeadlineToXmlDoc</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#addHeadlineToXmlDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AaddXmlPiToDoc"
+></A
+><B
+>addXmlPiToDoc</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-EditFilters.html#addXmlPiToDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-DOM-Namespace.html b/doc/hxt-filter/Text-XML-HXT-DOM-Namespace.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-DOM-Namespace.html
@@ -0,0 +1,174 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.DOM.Namespace</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-DOM-Namespace.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.DOM.Namespace</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+>main namespace filter for propagation, checking, tracing and error handling
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3ApropagateAndValidateNamespaces"
+>propagateAndValidateNamespaces</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-DOM-NamespaceFilter.html"
+>Text.XML.HXT.DOM.NamespaceFilter</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3ApropagateAndValidateNamespaces"
+></A
+><B
+>propagateAndValidateNamespaces</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-Namespace.html#propagateAndValidateNamespaces"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>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 &quot;/&quot; with an empty document is returned.
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-NamespaceFilter.html#v%3ApropagateNamespaces"
+>propagateNamespaces</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-NamespaceFilter.html#v%3AvalidateNamespaces"
+>validateNamespaces</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-DOM-NamespaceFilter.html"
+>Text.XML.HXT.DOM.NamespaceFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-DOM-NamespaceFilter.html b/doc/hxt-filter/Text-XML-HXT-DOM-NamespaceFilter.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-DOM-NamespaceFilter.html
@@ -0,0 +1,454 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.DOM.NamespaceFilter</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-DOM-NamespaceFilter.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.DOM.NamespaceFilter</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Namespace filter
+</P
+><P
+>Namespaces are processed with two main filter, <TT
+><A HREF="Text-XML-HXT-DOM-NamespaceFilter.html#v%3ApropagateNamespaces"
+>propagateNamespaces</A
+></TT
+>
+ and <TT
+><A HREF="Text-XML-HXT-DOM-NamespaceFilter.html#v%3AvalidateNamespaces"
+>validateNamespaces</A
+></TT
+>.
+</P
+><P
+><TT
+><A HREF="Text-XML-HXT-DOM-NamespaceFilter.html#v%3ApropagateNamespaces"
+>propagateNamespaces</A
+></TT
+> takes a XML tree and
+ attaches extra namespace info at every tag name and attribute name.
+ So after processing a tree with <TT
+><A HREF="Text-XML-HXT-DOM-NamespaceFilter.html#v%3ApropagateNamespaces"
+>propagateNamespaces</A
+></TT
+>, the access functions
+ <A HREF="namespaceOf.html"
+>namespaceOf</A
+> and <A HREF="universalNameOf.html"
+>universalNameOf</A
+> deliver the associated namespace (or &quot;&quot;)
+ for tag names and attribute names.
+</P
+><P
+><TT
+><A HREF="Text-XML-HXT-DOM-NamespaceFilter.html#v%3AvalidateNamespaces"
+>validateNamespaces</A
+></TT
+> checks whether names are wellformed related to the XML namespace definition.
+ whether a legal namespace is declared for all prefixes, and whether attribute names are unique
+ related to universal names.
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+> <A HREF="#t%3ANamespaceTable"
+>NamespaceTable</A
+> = <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3ANsEnv"
+>NsEnv</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3ApropagateNamespaces"
+>propagateNamespaces</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3ApropagateNamespaceEnv"
+>propagateNamespaceEnv</A
+> :: <A HREF="Text-XML-HXT-DOM-NamespaceFilter.html#t%3ANamespaceTable"
+>NamespaceTable</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AvalidateNamespaces"
+>validateNamespaces</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Avalidate1Namespaces"
+>validate1Namespaces</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisNamespaceDecl"
+>isNamespaceDecl</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-NamespacePredicates.html"
+>Text.XML.HXT.DOM.NamespacePredicates</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><SPAN CLASS="keyword"
+>type</SPAN
+> <A NAME="t%3ANamespaceTable"
+></A
+><B
+>NamespaceTable</B
+> = <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3ANsEnv"
+>NsEnv</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-NamespaceFilter.html#NamespaceTable"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>Type for the namespace association list, used when propagating namespaces by
+ modifying the <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-QualifiedName.html#t%3AQName"
+>QName</A
+></TT
+> values in a tree
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3ApropagateNamespaces"
+></A
+><B
+>propagateNamespaces</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-NamespaceFilter.html#propagateNamespaces"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>propagate all namespace declarations &quot;xmlns:ns=...&quot; to all
+ tag and attribute nodes of a document.
+</P
+><P
+>This filter does not check for illegal use of namespaces.
+ The real work is done by <TT
+><A HREF="Text-XML-HXT-DOM-NamespaceFilter.html#v%3ApropagateNamespaceEnv"
+>propagateNamespaceEnv</A
+></TT
+>.
+</P
+><P
+>The filter may be applied repeatedly if neccessary.
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3ApropagateNamespaceEnv"
+></A
+><B
+>propagateNamespaceEnv</B
+> :: <A HREF="Text-XML-HXT-DOM-NamespaceFilter.html#t%3ANamespaceTable"
+>NamespaceTable</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-NamespaceFilter.html#propagateNamespaceEnv"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>attaches the namespace info given by the namespace table
+ to a tag node and its attributes and children.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AvalidateNamespaces"
+></A
+><B
+>validateNamespaces</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-NamespaceFilter.html#validateNamespaces"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>validate the namespace constraints in a whole tree.
+ result is the list of errors concerning namespaces.
+ Work is done by applying <TT
+><A HREF="Text-XML-HXT-DOM-NamespaceFilter.html#v%3Avalidate1Namespaces"
+>validate1Namespaces</A
+></TT
+> to all nodes.
+ Predicates <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-NamespacePredicates.html#v%3AisWellformedQName"
+>isWellformedQName</A
+></TT
+>, <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-NamespacePredicates.html#v%3AisWellformedQualifiedName"
+>isWellformedQualifiedName</A
+></TT
+>, <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-NamespacePredicates.html#v%3AisDeclaredNamespace"
+>isDeclaredNamespace</A
+></TT
+>
+ and <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-NamespacePredicates.html#v%3AisWellformedNSDecl"
+>isWellformedNSDecl</A
+></TT
+> are applied to the appropriate tags and attributes.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Avalidate1Namespaces"
+></A
+><B
+>validate1Namespaces</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-NamespaceFilter.html#validate1Namespaces"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>a single node for namespace constrains.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisNamespaceDecl"
+></A
+><B
+>isNamespaceDecl</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-NamespaceFilter.html#isNamespaceDecl"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-NamespacePredicates.html"
+>Text.XML.HXT.DOM.NamespacePredicates</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-DOM-XmlState.html b/doc/hxt-filter/Text-XML-HXT-DOM-XmlState.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-DOM-XmlState.html
@@ -0,0 +1,2994 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.DOM.XmlState</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.DOM.XmlState</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>This module provides a Monad for an internal state and IO commands.
+ The state consists of two parts, the user state and the system state
+ user state ist a type parameter, the system state is a list
+ name-value pair. If the user state is not needed, the type parameter
+ can be instantiated with <TT
+>()</TT
+>.
+</P
+><P
+>Furthermore there are types for Xml filter working on this monad
+ and functions for manipulating the state components
+ and for lifting i/o commands and XmlFilter to monad filters.
+</P
+><P
+>Error reporting functions are also located in this module.
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>data</SPAN
+> <A HREF="#t%3ASysState"
+>SysState</A
+>  = <A HREF="#v%3ASysState"
+>SysState</A
+> {<TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="recfield"
+><A HREF="#v%3AsysStateAttrs"
+>sysStateAttrs</A
+> :: !<A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysStateAttrs"
+>SysStateAttrs</A
+></TD
+></TR
+><TR
+><TD CLASS="recfield"
+><A HREF="#v%3AsysStateErrorHandler"
+>sysStateErrorHandler</A
+> :: !(<A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> ())</TD
+></TR
+></TABLE
+>}</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+> <A HREF="#t%3ASysStateAttrs"
+>SysStateAttrs</A
+> = <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Data-AssocList.html#t%3AAssocList"
+>AssocList</A
+> String <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>data</SPAN
+> <A HREF="#t%3AXmlState"
+>XmlState</A
+> state = <A HREF="#v%3AXmlState"
+>XmlState</A
+> {<TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="recfield"
+><A HREF="#v%3AsysState"
+>sysState</A
+> :: !<A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+></TD
+></TR
+><TR
+><TD CLASS="recfield"
+><A HREF="#v%3AuserState"
+>userState</A
+> :: !state</TD
+></TR
+></TABLE
+>}</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+> <A HREF="#t%3AXState"
+>XState</A
+> state res = <A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>StateIO</A
+> (<A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlState"
+>XmlState</A
+> state) res</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+> <A HREF="#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state = <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AchangeState"
+>changeState</A
+> :: (state -&gt; state) -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AsetState"
+>setState</A
+> :: state -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetState"
+>getState</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AchangeSysState"
+>changeSysState</A
+> :: (<A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+>) -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AsetSysState"
+>setSysState</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetSysState"
+>getSysState</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AinitialSysState"
+>initialSysState</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AchangeSysStateAttrs"
+>changeSysStateAttrs</A
+> :: (<A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysStateAttrs"
+>SysStateAttrs</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysStateAttrs"
+>SysStateAttrs</A
+>) -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AsetSysErrorHandler"
+>setSysErrorHandler</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> () -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetSysErrorHandler"
+>getSysErrorHandler</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state (<A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> ())</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AsetSysParamTree"
+>setSysParamTree</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AsetSysParam"
+>setSysParam</A
+> :: String -&gt; String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AsetSysParamInt"
+>setSysParamInt</A
+> :: String -&gt; Int -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AsetSystemParams"
+>setSystemParams</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetSysParamTree"
+>getSysParamTree</A
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetSysParam"
+>getSysParam</A
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetSysParamWithDefault"
+>getSysParamWithDefault</A
+> :: String -&gt; String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetSysParamInt"
+>getSysParamInt</A
+> :: String -&gt; Int -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state Int</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Arun0"
+>run0</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlState"
+>XmlState</A
+> state -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state res -&gt; IO (res, <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlState"
+>XmlState</A
+> state)</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Arun"
+>run</A
+> :: state -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state res -&gt; IO res</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Arun%27"
+>run'</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> () res -&gt; IO res</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Achain%27"
+>chain'</A
+> :: state1 -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state1 res -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state0 (res, state1)</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Achain"
+>chain</A
+> :: state1 -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state1 res -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state0 res</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AliftF"
+>liftF</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Aio"
+>io</A
+> :: IO a -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AsetTraceLevel"
+>setTraceLevel</A
+> :: Int -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetTraceLevel"
+>getTraceLevel</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state Int</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AtraceCmd"
+>traceCmd</A
+> :: Int -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state a -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Atrace"
+>trace</A
+> :: Int -&gt; String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AtraceState"
+>traceState</A
+> :: Int -&gt; (state -&gt; String) -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AclearStatus"
+>clearStatus</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AissueError"
+>issueError</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AerrorMsgHandler"
+>errorMsgHandler</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AsetErrorMsgLevel"
+>setErrorMsgLevel</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AerrorMsgToStderr"
+>errorMsgToStderr</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AerrorMsgLogging"
+>errorMsgLogging</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AerrorMsgLoggingAndToStderr"
+>errorMsgLoggingAndToStderr</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetErrorMsg"
+>getErrorMsg</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AerrClass"
+>errClass</A
+> :: Int -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AissueWarn"
+>issueWarn</A
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AissueErr"
+>issueErr</A
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AissueFatal"
+>issueFatal</A
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AaddFatal"
+>addFatal</A
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AcheckStatus"
+>checkStatus</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AsetStatus"
+>setStatus</A
+> :: Int -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AstatusOk"
+>statusOk</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AcheckResult"
+>checkResult</A
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AprocessAttrM"
+>processAttrM</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><SPAN CLASS="keyword"
+>data</SPAN
+> <A NAME="t%3ASysState"
+></A
+><B
+>SysState</B
+> </TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#SysState"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="ndoc"
+>The internal system state consists of a list of name-value pairs
+ of type <TT
+>(String, XmlTrees)</TT
+>, so arbitrary lists of trees can be stored.
+ For options, often only strings are used as values, so a set of access
+ functions with string values is available
+ The error handling method can be controlled by an error handler filter,
+ the default filter issues the errors on stderr
+</TD
+></TR
+><TR
+><TD CLASS="section4"
+>Constructors</TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="5" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+><A NAME="v%3ASysState"
+></A
+><B
+>SysState</B
+></TD
+><TD CLASS="rdoc"
+></TD
+></TR
+><TR
+><TD CLASS="body" COLSPAN="2"
+><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+><A NAME="v%3AsysStateAttrs"
+></A
+><B
+>sysStateAttrs</B
+> :: !<A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysStateAttrs"
+>SysStateAttrs</A
+></TD
+><TD CLASS="rdoc"
+></TD
+></TR
+><TR
+><TD CLASS="arg"
+><A NAME="v%3AsysStateErrorHandler"
+></A
+><B
+>sysStateErrorHandler</B
+> :: !(<A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> ())</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><SPAN CLASS="keyword"
+>type</SPAN
+> <A NAME="t%3ASysStateAttrs"
+></A
+><B
+>SysStateAttrs</B
+> = <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Data-AssocList.html#t%3AAssocList"
+>AssocList</A
+> String <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#SysStateAttrs"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><SPAN CLASS="keyword"
+>data</SPAN
+> <A NAME="t%3AXmlState"
+></A
+><B
+>XmlState</B
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#XmlState"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="ndoc"
+>The State has a system and a user part
+ the user state is a type parameter
+</TD
+></TR
+><TR
+><TD CLASS="section4"
+>Constructors</TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="5" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+><A NAME="v%3AXmlState"
+></A
+><B
+>XmlState</B
+></TD
+><TD CLASS="rdoc"
+></TD
+></TR
+><TR
+><TD CLASS="body" COLSPAN="2"
+><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+><A NAME="v%3AsysState"
+></A
+><B
+>sysState</B
+> :: !<A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+></TD
+><TD CLASS="rdoc"
+></TD
+></TR
+><TR
+><TD CLASS="arg"
+><A NAME="v%3AuserState"
+></A
+><B
+>userState</B
+> :: !state</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><SPAN CLASS="keyword"
+>type</SPAN
+> <A NAME="t%3AXState"
+></A
+><B
+>XState</B
+> state res = <A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>StateIO</A
+> (<A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlState"
+>XmlState</A
+> state) res</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#XState"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>The monad type for commands. It is an instance of <A HREF="StateIO.html"
+>StateIO</A
+> from the
+ general module <A HREF="Control-Monad-MonadStateIO.html"
+>Control.Monad.MonadStateIO</A
+>.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><SPAN CLASS="keyword"
+>type</SPAN
+> <A NAME="t%3AXmlStateFilter"
+></A
+><B
+>XmlStateFilter</B
+> state = <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#XmlStateFilter"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>The <A HREF="XmlFilter.html"
+>XmlFilter</A
+> type for filters working on a state
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AchangeState"
+></A
+><B
+>changeState</B
+> :: (state -&gt; state) -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#changeState"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>change the user state
+</P
+><UL
+><LI
+> 1.parameter fct :  the user state change function
+</LI
+><LI
+> returns : the new state
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AsetState"
+></A
+><B
+>setState</B
+> :: state -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#setState"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>set the user state.
+</P
+><UL
+><LI
+> 1.parameter s :  the new state
+</LI
+><LI
+> returns : the new state
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetState"
+></A
+><B
+>getState</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#getState"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>read the user state
+</P
+><UL
+><LI
+> returns : the current state
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AchangeSysState"
+></A
+><B
+>changeSysState</B
+> :: (<A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+>) -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#changeSysState"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>change the system part of the state.
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AchangeState"
+>changeState</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AsetSysState"
+></A
+><B
+>setSysState</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#setSysState"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>set the system part of the state.
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsetState"
+>setState</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetSysState"
+></A
+><B
+>getSysState</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#getSysState"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>read the system part of the state.
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AgetState"
+>getState</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AinitialSysState"
+></A
+><B
+>initialSysState</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#initialSysState"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>the initial system state
+</P
+><P
+>an empty list of attribute value pairs
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AchangeSysStateAttrs"
+></A
+><B
+>changeSysStateAttrs</B
+> :: (<A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysStateAttrs"
+>SysStateAttrs</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysStateAttrs"
+>SysStateAttrs</A
+>) -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>SysState</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#changeSysStateAttrs"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>change the attributes in the system state
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AsetSysErrorHandler"
+></A
+><B
+>setSysErrorHandler</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> () -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#setSysErrorHandler"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>set the error message handler
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetSysErrorHandler"
+></A
+><B
+>getSysErrorHandler</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state (<A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> ())</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#getSysErrorHandler"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>get the error handler
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AsetSysParamTree"
+></A
+><B
+>setSysParamTree</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#setSysParamTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>set or change a single system parameter.
+</P
+><UL
+><LI
+> 1.parameter name :  the name of the parameter
+</LI
+><LI
+> 2.parameter value :  the list of associated trees
+</LI
+><LI
+> returns : nothing
+</LI
+></UL
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsetSysParam"
+>setSysParam</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsetSysParamInt"
+>setSysParamInt</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AsetSysParam"
+></A
+><B
+>setSysParam</B
+> :: String -&gt; String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#setSysParam"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>set or change a single system parameter of type string.
+</P
+><UL
+><LI
+> 1.parameter name :  the name of the parameter
+</LI
+><LI
+> 2.parameter value :  the (new) string value
+</LI
+><LI
+> returns : nothing
+</LI
+></UL
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsetSysParamTree"
+>setSysParamTree</A
+></TT
+>, setSysParamInt
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AsetSysParamInt"
+></A
+><B
+>setSysParamInt</B
+> :: String -&gt; Int -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#setSysParamInt"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>set or change a single integer type system parameter
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsetSysParam"
+>setSysParam</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AsetSystemParams"
+></A
+><B
+>setSystemParams</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#setSystemParams"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>add (or change) all attributes of the document root to the system state
+     - returns : this
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetSysParamTree"
+></A
+><B
+>getSysParamTree</B
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#getSysParamTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>read a system parameter
+</P
+><UL
+><LI
+> 1.parameter name :  the name of the parameter
+</LI
+><LI
+> returns : the list of tres associated with the key, or the empty list for unknown parameters
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetSysParam"
+></A
+><B
+>getSysParam</B
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#getSysParam"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>read a system string parameter
+</P
+><UL
+><LI
+> 1.parameter name :  the name of the parameter
+</LI
+><LI
+> returns : the value, or the empty string for unknown parameters
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetSysParamWithDefault"
+></A
+><B
+>getSysParamWithDefault</B
+> :: String -&gt; String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#getSysParamWithDefault"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>read a system parameter or return a default value
+</P
+><UL
+><LI
+> 1.parameter name :  the name of the parameter
+</LI
+><LI
+> 2.parameter default :  the default value
+</LI
+><LI
+> returns : the value if found, else the default
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetSysParamInt"
+></A
+><B
+>getSysParamInt</B
+> :: String -&gt; Int -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state Int</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#getSysParamInt"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>read an integer system parameter
+</P
+><UL
+><LI
+> 1.parameter name : 
+</LI
+><LI
+> 2.parameter default : 
+</LI
+></UL
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AgetSysParamWithDefault"
+>getSysParamWithDefault</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Arun0"
+></A
+><B
+>run0</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlState"
+>XmlState</A
+> state -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state res -&gt; IO (res, <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlState"
+>XmlState</A
+> state)</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#run0"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>exec a XState command with initial state.
+</P
+><UL
+><LI
+> 1.parameter initalState :  the inital user state
+</LI
+><LI
+> 2.parameter cmd :  the command
+</LI
+><LI
+> returns : the i/o command with result and user state
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Arun"
+></A
+><B
+>run</B
+> :: state -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state res -&gt; IO res</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#run"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>exec a XState command with initial user state.
+ ignore final user state.
+ like run0, but ignore the resulting user state
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Arun%27"
+></A
+><B
+>run'</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> () res -&gt; IO res</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#run%27"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>exec a XState command in th IO monad.
+ like run with the empty state ().
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Achain%27"
+></A
+><B
+>chain'</B
+> :: state1 -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state1 res -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state0 (res, state1)</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#chain%27"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>run a command in a new user state.
+ chain the system state part,
+ init new system state with the current one, run the command and
+ update the old system state with the resulting new system state
+</P
+><UL
+><LI
+> 1.parameter initialUserState :  the initial user state
+</LI
+><LI
+> 2.parameter cmd :  the command
+</LI
+><LI
+> returns : the result of executing cmd and the final state
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Achain"
+></A
+><B
+>chain</B
+> :: state1 -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state1 res -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state0 res</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#chain"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>like chain' but forget the final user state
+</P
+><UL
+><LI
+> 1.parameter initialUserState :  the initial user state
+</LI
+><LI
+> 2.parameter cmd :  the command
+</LI
+><LI
+> returns : only the result of executing cmd
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AliftF"
+></A
+><B
+>liftF</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#liftF"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>lift a XmlFilter to a XmlStateFilter filter
+ issue all error nodes as error messages
+ and remove the error nodes from the result
+</P
+><UL
+><LI
+> 1.parameter f :  the filter
+</LI
+><LI
+> returns : the filter running in the state monad
+</LI
+></UL
+><P
+>all errors are filtered from the result and issued on stderr
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Aio"
+></A
+><B
+>io</B
+> :: IO a -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#io"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>lift an I/O command
+</P
+><UL
+><LI
+> 1.parameter cmd :  the i/o command
+</LI
+><LI
+> returns : the i/o command lifted to the XML state monad
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AsetTraceLevel"
+></A
+><B
+>setTraceLevel</B
+> :: Int -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#setTraceLevel"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>set the trace level.
+</P
+><P
+>convention:
+</P
+><P
+>0: no trace output (default)
+</P
+><P
+>1: trace important computation steps, e.g. accessing a document
+</P
+><P
+>2: trace small computation steps
+</P
+><P
+>3: output an intermediate result XmlTree in XML source format
+</P
+><P
+>4: output an intermediate result XmlTree in tree representation
+</P
+><UL
+><LI
+> 1.parameter level :  the trace level
+</LI
+><LI
+> returns : nothing
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetTraceLevel"
+></A
+><B
+>getTraceLevel</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state Int</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#getTraceLevel"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>get the current trace level.
+</P
+><UL
+><LI
+> returns : the current trace level
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AtraceCmd"
+></A
+><B
+>traceCmd</B
+> :: Int -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state a -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#traceCmd"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>trace output for arbitray commands.
+</P
+><UL
+><LI
+> 1.parameter level :  the trace level,
+			  for which the command will be execuded
+			  if level &lt;= current trace level
+</LI
+><LI
+> 2.parameter cmd :  the command to be executed
+</LI
+><LI
+> returns : nothing
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Atrace"
+></A
+><B
+>trace</B
+> :: Int -&gt; String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#trace"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>trace output function for simple text.
+</P
+><UL
+><LI
+> 1.parameter level :  like in traceCmd
+</LI
+><LI
+> 2.parameter str :  the test
+</LI
+><LI
+> returns : nothing
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AtraceState"
+></A
+><B
+>traceState</B
+> :: Int -&gt; (state -&gt; String) -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#traceState"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>trace output of the user part of the program state.
+</P
+><UL
+><LI
+> 1.parameter level :  like in traceCmd
+</LI
+><LI
+> 2.parameter showFct :  the toString function
+</LI
+><LI
+> returns : nothing
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AclearStatus"
+></A
+><B
+>clearStatus</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#clearStatus"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>filter to reset the state attribute <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_status"
+>a_status</A
+></TT
+>
+    - returns : this
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AissueError"
+></A
+><B
+>issueError</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#issueError"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>report an error message.
+</P
+><UL
+><LI
+> returns : if the input tree n represents an error, <TT
+>res = []</TT
+>
+		  and the error is processed by the errror handler filter (default: error is issued on stderr)
+		  else <TT
+>res = [n]</TT
+>
+</LI
+></UL
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AissueErr"
+>issueErr</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AerrorMsgHandler"
+></A
+><B
+>errorMsgHandler</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#errorMsgHandler"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AsetErrorMsgLevel"
+></A
+><B
+>setErrorMsgLevel</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#setErrorMsgLevel"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>set the error level in system state
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AerrorMsgToStderr"
+></A
+><B
+>errorMsgToStderr</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#errorMsgToStderr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>default error handler for writing errors to stderr
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AerrorMsgLogging"
+></A
+><B
+>errorMsgLogging</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#errorMsgLogging"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>error message handler for collecting all error messages
+ all messages are stored under attribute <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_error_log"
+>a_error_log</A
+></TT
+>
+ they can be read with <TT
+>getSysParamTree a_error_log</TT
+> or by
+ applying the filter <TT
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AgetErrorMsg"
+>getErrorMsg</A
+></TT
+> to the root node
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AerrorMsgLoggingAndToStderr"
+></A
+><B
+>errorMsgLoggingAndToStderr</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#errorMsgLoggingAndToStderr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetErrorMsg"
+></A
+><B
+>getErrorMsg</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#getErrorMsg"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>the filter for reading all collected error mesages
+</P
+><P
+>result is the list of error messages, the input tree is ignored
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AerrClass"
+></A
+><B
+>errClass</B
+> :: Int -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#errClass"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>error level translation
+ <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#v%3Ac_warn"
+>c_warn</A
+></TT
+> (1) : warning,
+ <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#v%3Ac_err"
+>c_err</A
+></TT
+> (2): error (e.g. parse error, validation error, ...),
+ <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#v%3Ac_fatal"
+>c_fatal</A
+></TT
+> (3) : fatal error (document access error, internal error, ...)
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AissueWarn"
+></A
+><B
+>issueWarn</B
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#issueWarn"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>short cut for issuing a warning
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AissueError"
+>issueError</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AissueErr"
+>issueErr</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AissueErr"
+></A
+><B
+>issueErr</B
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#issueErr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>short cut for issuing an error
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AissueError"
+>issueError</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AissueFatal"
+></A
+><B
+>issueFatal</B
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#issueFatal"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>short cut for issuing a fatal error
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AissueError"
+>issueError</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AissueErr"
+>issueErr</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AaddFatal"
+></A
+><B
+>addFatal</B
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#addFatal"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AcheckStatus"
+></A
+><B
+>checkStatus</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#checkStatus"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>checks the value of the attribute <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_status"
+>a_status</A
+></TT
+> in a document root.
+ if it contains a value greater or equal to <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#v%3Ac_err"
+>c_err</A
+></TT
+>, an error with error message
+ stored in attribute <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_module"
+>a_module</A
+></TT
+> is issued and the filter acts as the <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Data-Tree-NTree-Filter.html#v%3AnoneM"
+>noneM</A
+></TT
+> filter
+ else its the <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Data-Tree-NTree-Filter.html#v%3AthisM"
+>thisM</A
+></TT
+> filter
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AsetStatus"
+></A
+><B
+>setStatus</B
+> :: Int -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#setStatus"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>add the error level and the module where the error occured
+ to the attributes of a document root node and remove the children when level is greater or equal to <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#v%3Ac_err"
+>c_err</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AstatusOk"
+></A
+><B
+>statusOk</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#statusOk"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>check whether tree is a document root and the status attribute has a value less than <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#v%3Ac_err"
+>c_err</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AcheckResult"
+></A
+><B
+>checkResult</B
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#checkResult"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>check whether the error level attribute in the system state
+ is set to error, in this case the children of the document root are
+ removed and error info is added as attributes with <TT
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsetStatus"
+>setStatus</A
+></TT
+>
+ else nothing is changed
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AprocessAttrM"
+></A
+><B
+>processAttrM</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlState.html#processAttrM"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>monadic filter for processing the attribute list of a tag.
+ for other trees this filter acts like <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Data-Tree-NTree-Filter.html#v%3AnoneM"
+>noneM</A
+></TT
+>
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AprocessAttr"
+>processAttr</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AprocessAttrl"
+>processAttrl</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-DOM-XmlTree.html b/doc/hxt-filter/Text-XML-HXT-DOM-XmlTree.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-DOM-XmlTree.html
@@ -0,0 +1,130 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.DOM.XmlTree</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTree.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.DOM.XmlTree</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+>This helper module exports elements from the basic libraries:
+ XmlTreeTypes, XmlKeywords, XNodeFunctions, XmlTreeFunctions and XmlTreeFilter
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html"
+>Text.XML.HXT.DOM.XmlTreeTypes</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html"
+>Text.XML.HXT.DOM.XmlKeywords</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-DOM-XmlTreeFilter.html b/doc/hxt-filter/Text-XML-HXT-DOM-XmlTreeFilter.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-DOM-XmlTreeFilter.html
@@ -0,0 +1,5470 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.DOM.XmlTreeFilter</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.DOM.XmlTreeFilter</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+>basic XmlTree filter
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisRoot"
+>isRoot</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisTag"
+>isTag</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisNsTag"
+>isNsTag</A
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AhasLocalPart"
+>hasLocalPart</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AhasPrefix"
+>hasPrefix</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AhasNamespace"
+>hasNamespace</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisOfTag"
+>isOfTag</A
+> :: (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3ATagName"
+>TagName</A
+> -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AhasAttr"
+>hasAttr</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AhasNsAttr"
+>hasNsAttr</A
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AhasValue"
+>hasValue</A
+> :: String -&gt; (String -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisPi"
+>isPi</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXmlPi"
+>isXmlPi</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisOfPi"
+>isOfPi</A
+> :: (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3ATagName"
+>TagName</A
+> -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXCdata"
+>isXCdata</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXCharRef"
+>isXCharRef</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXCmt"
+>isXCmt</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXDTD"
+>isXDTD</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXEntityRef"
+>isXEntityRef</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXError"
+>isXError</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXPi"
+>isXPi</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXTag"
+>isXTag</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXAttr"
+>isXAttr</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisAttr"
+>isAttr</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisNsAttr"
+>isNsAttr</A
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisOfAttr"
+>isOfAttr</A
+> :: (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AAttrName"
+>AttrName</A
+> -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXText"
+>isXText</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisText"
+>isText</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisOfText"
+>isOfText</A
+> :: (String -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisWhiteSpace"
+>isWhiteSpace</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisDoctype"
+>isDoctype</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisAttlist"
+>isAttlist</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisElement"
+>isElement</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisEntity"
+>isEntity</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisPeRef"
+>isPeRef</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisDTDName"
+>isDTDName</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisCondSect"
+>isCondSect</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisParameterEntity"
+>isParameterEntity</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisNotation"
+>isNotation</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisDefaultAttrKind"
+>isDefaultAttrKind</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisEnumAttrType"
+>isEnumAttrType</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisFixedAttrKind"
+>isFixedAttrKind</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisIdAttrType"
+>isIdAttrType</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisIdRefAttrType"
+>isIdRefAttrType</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisNotationAttrType"
+>isNotationAttrType</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisRequiredAttrKind"
+>isRequiredAttrKind</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisAttlistParameterEntity"
+>isAttlistParameterEntity</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisEmptyElement"
+>isEmptyElement</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisMixedContentElement"
+>isMixedContentElement</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisElemWithContent"
+>isElemWithContent</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisAttlistOfElement"
+>isAttlistOfElement</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisElemContentParamEntity"
+>isElemContentParamEntity</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisUnparsedEntity"
+>isUnparsedEntity</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisExternalParameterEntity"
+>isExternalParameterEntity</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisInternalParameterEntity"
+>isInternalParameterEntity</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisWarning"
+>isWarning</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisError"
+>isError</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisFatalError"
+>isFatalError</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXTag"
+>mkXTag</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkQTag"
+>mkQTag</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-QualifiedName.html#t%3AQName"
+>QName</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXNsTag"
+>mkXNsTag</A
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXAttr"
+>mkXAttr</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkQAttr"
+>mkQAttr</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-QualifiedName.html#t%3AQName"
+>QName</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXNsAttr"
+>mkXNsAttr</A
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXText"
+>mkXText</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXCharRef"
+>mkXCharRef</A
+> :: Int -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXEntityRef"
+>mkXEntityRef</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXCmt"
+>mkXCmt</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXDTD"
+>mkXDTD</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3ADTDElem"
+>DTDElem</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXCdata"
+>mkXCdata</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXPi"
+>mkXPi</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXError"
+>mkXError</A
+> :: Int -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetName"
+>getName</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetAttrl"
+>getAttrl</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetValue"
+>getValue</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetNsValue"
+>getNsValue</A
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetDTDValue"
+>getDTDValue</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetXCmt"
+>getXCmt</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetXCdata"
+>getXCdata</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AreplaceQName"
+>replaceQName</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmodifyText"
+>modifyText</A
+> :: (String -&gt; String) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmodifyQName"
+>modifyQName</A
+> :: (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3ATagName"
+>TagName</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3ATagName"
+>TagName</A
+>) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AprocessAttrl"
+>processAttrl</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlSFilter"
+>XmlSFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AprocessAttr"
+>processAttr</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AreplaceAttrl"
+>replaceAttrl</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Adel1Attr"
+>del1Attr</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Aadd1Attr"
+>add1Attr</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AaddAttrl"
+>addAttrl</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AaddAttr"
+>addAttr</A
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AaddAttrInt"
+>addAttrInt</A
+> :: String -&gt; Int -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmodifyAttr"
+>modifyAttr</A
+> :: String -&gt; (String -&gt; String) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AaddDTDAttr"
+>addDTDAttr</A
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3A%2B%3D"
+>(+=)</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3A%2B%2B%3D"
+>(++=)</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AvalueOf"
+>valueOf</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AintValueOf"
+>intValueOf</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; Int</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Atag"
+>tag</A
+> :: String -&gt; [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Astag"
+>stag</A
+> :: String -&gt; [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Aatag"
+>atag</A
+> :: String -&gt; [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Aetag"
+>etag</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Aqetag"
+>qetag</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-QualifiedName.html#t%3AQName"
+>QName</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Aqtag"
+>qtag</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-QualifiedName.html#t%3AQName"
+>QName</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3ArootTag"
+>rootTag</A
+> :: [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Aattr"
+>attr</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Aqattr"
+>qattr</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-QualifiedName.html#t%3AQName"
+>QName</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Asattr"
+>sattr</A
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Atxt"
+>txt</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Acmt"
+>cmt</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Aspi"
+>spi</A
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Acdata"
+>cdata</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Adtd"
+>dtd</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3ADTDElem"
+>DTDElem</A
+> -&gt; [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Awarn"
+>warn</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Aerr"
+>err</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Afatal"
+>fatal</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AhasOption"
+>hasOption</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisRoot"
+></A
+><B
+>isRoot</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isRoot"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a document root node.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisTag"
+></A
+><B
+>isTag</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isTag"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>test whether the root of a tree contains a tag node.
+</P
+><P
+>see also: <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisNsTag"
+>isNsTag</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisNsTag"
+></A
+><B
+>isNsTag</B
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isNsTag"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>namespace aware test whether the root of a tree contains a tag node. Parameters are the local part and namespace.
+ Only usable after namespace propagation.
+</P
+><P
+>see also: <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisTag"
+>isTag</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AhasLocalPart"
+></A
+><B
+>hasLocalPart</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#hasLocalPart"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree has a given local name
+ see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AhasNamespace"
+>hasNamespace</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AhasPrefix"
+>hasPrefix</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisTag"
+>isTag</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisAttr"
+>isAttr</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AhasPrefix"
+></A
+><B
+>hasPrefix</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#hasPrefix"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree has a given prefix name
+ see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AhasNamespace"
+>hasNamespace</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AhasLocalPart"
+>hasLocalPart</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisTag"
+>isTag</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisAttr"
+>isAttr</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AhasNamespace"
+></A
+><B
+>hasNamespace</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#hasNamespace"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree belongs to a given namespace
+ see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisTag"
+>isTag</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisAttr"
+>isAttr</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AhasLocalPart"
+>hasLocalPart</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AhasPrefix"
+>hasPrefix</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisOfTag"
+></A
+><B
+>isOfTag</B
+> :: (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3ATagName"
+>TagName</A
+> -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isOfTag"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a tag node with a special name.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AhasAttr"
+></A
+><B
+>hasAttr</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#hasAttr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>test whether the node of a tree is a XTag node or a XPi node with an attibute of a specific name
+</P
+><P
+>see also: <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisAttr"
+>isAttr</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AhasNsAttr"
+>hasNsAttr</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AhasNsAttr"
+></A
+><B
+>hasNsAttr</B
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#hasNsAttr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>test whether the tree is a XTag node with an attibute of a specific local name and namespace uri
+</P
+><P
+>see also: <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AhasAttr"
+>hasAttr</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisNsAttr"
+>isNsAttr</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AhasValue"
+></A
+><B
+>hasValue</B
+> :: String -&gt; (String -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#hasValue"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>test whether the given node is a XTag node or a XPI node with an attribute with a value with a specific property.
+ In case of a match, the attribute value represented by a text node is returned as single element list,
+ else the empty list is the result.
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AgetValue"
+>getValue</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisPi"
+></A
+><B
+>isPi</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isPi"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the tree is a processing instruction with a given name.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXmlPi"
+></A
+><B
+>isXmlPi</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isXmlPi"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the tree is a &lt;?xml ... ?&gt; declaration
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisOfPi"
+></A
+><B
+>isOfPi</B
+> :: (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3ATagName"
+>TagName</A
+> -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isOfPi"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a processing instruction of a special name.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXCdata"
+></A
+><B
+>isXCdata</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isXCdata"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a CDATA node.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXCharRef"
+></A
+><B
+>isXCharRef</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isXCharRef"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a character reference node.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXCmt"
+></A
+><B
+>isXCmt</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isXCmt"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a comment node.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXDTD"
+></A
+><B
+>isXDTD</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isXDTD"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a DTD part.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXEntityRef"
+></A
+><B
+>isXEntityRef</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isXEntityRef"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains an entity reference node.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXError"
+></A
+><B
+>isXError</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isXError"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains an error node.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXPi"
+></A
+><B
+>isXPi</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isXPi"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a processing instruction node.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXTag"
+></A
+><B
+>isXTag</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isXTag"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a tag node.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXAttr"
+></A
+><B
+>isXAttr</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isXAttr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains an attribute node.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisAttr"
+></A
+><B
+>isAttr</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isAttr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree is an attribute node for a given attribute name
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisNsAttr"
+></A
+><B
+>isNsAttr</B
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isNsAttr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>namespace aware test whether the tree contains an attribute node. Parameters are the local part of the atribute name and the namespace.
+ Only usable after namespace propagation.
+</P
+><P
+>see also: <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisNsTag"
+>isNsTag</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisAttr"
+>isAttr</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AhasNsAttr"
+>hasNsAttr</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisOfAttr"
+></A
+><B
+>isOfAttr</B
+> :: (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AAttrName"
+>AttrName</A
+> -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isOfAttr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>general test for an attribute name
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXText"
+></A
+><B
+>isXText</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isXText"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a text node.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisText"
+></A
+><B
+>isText</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isText"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a special text.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisOfText"
+></A
+><B
+>isOfText</B
+> :: (String -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isOfText"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a text node with a special property
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisWhiteSpace"
+></A
+><B
+>isWhiteSpace</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isWhiteSpace"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a text node only with whitespace.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisDoctype"
+></A
+><B
+>isDoctype</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isDoctype"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a DOCTYPE DTD part.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisAttlist"
+></A
+><B
+>isAttlist</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isAttlist"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains an ATTLIST DTD part.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisElement"
+></A
+><B
+>isElement</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isElement"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains an ELEMENT DTD part.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisEntity"
+></A
+><B
+>isEntity</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isEntity"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains an ENTITY DTD part.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisPeRef"
+></A
+><B
+>isPeRef</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isPeRef"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a parameter ENTITY reference.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisDTDName"
+></A
+><B
+>isDTDName</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isDTDName"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a DTD name part.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisCondSect"
+></A
+><B
+>isCondSect</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isCondSect"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a conditional section DTD part.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisParameterEntity"
+></A
+><B
+>isParameterEntity</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isParameterEntity"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a parameter entity declaration.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisNotation"
+></A
+><B
+>isNotation</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isNotation"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains a NOTATION DTD part.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisDefaultAttrKind"
+></A
+><B
+>isDefaultAttrKind</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isDefaultAttrKind"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisEnumAttrType"
+></A
+><B
+>isEnumAttrType</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isEnumAttrType"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisFixedAttrKind"
+></A
+><B
+>isFixedAttrKind</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isFixedAttrKind"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisIdAttrType"
+></A
+><B
+>isIdAttrType</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isIdAttrType"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisIdRefAttrType"
+></A
+><B
+>isIdRefAttrType</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isIdRefAttrType"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisNotationAttrType"
+></A
+><B
+>isNotationAttrType</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isNotationAttrType"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisRequiredAttrKind"
+></A
+><B
+>isRequiredAttrKind</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isRequiredAttrKind"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisAttlistParameterEntity"
+></A
+><B
+>isAttlistParameterEntity</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isAttlistParameterEntity"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisEmptyElement"
+></A
+><B
+>isEmptyElement</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isEmptyElement"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisMixedContentElement"
+></A
+><B
+>isMixedContentElement</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isMixedContentElement"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisElemWithContent"
+></A
+><B
+>isElemWithContent</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isElemWithContent"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisAttlistOfElement"
+></A
+><B
+>isAttlistOfElement</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isAttlistOfElement"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisElemContentParamEntity"
+></A
+><B
+>isElemContentParamEntity</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isElemContentParamEntity"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisUnparsedEntity"
+></A
+><B
+>isUnparsedEntity</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isUnparsedEntity"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisExternalParameterEntity"
+></A
+><B
+>isExternalParameterEntity</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isExternalParameterEntity"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisInternalParameterEntity"
+></A
+><B
+>isInternalParameterEntity</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isInternalParameterEntity"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisWarning"
+></A
+><B
+>isWarning</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isWarning"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains an error node for a warning.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisError"
+></A
+><B
+>isError</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isError"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains an error node for an error.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisFatalError"
+></A
+><B
+>isFatalError</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#isFatalError"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test whether the root of a tree contains an error node for a fatal error.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXTag"
+></A
+><B
+>mkXTag</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#mkXTag"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>constructor filter for a tag node.
+ a new tree is constructed.
+ the attributes and the children are computed by applying the aproprate filter to the input tree
+</P
+><UL
+><LI
+> 1.parameter n :  the tag name
+</LI
+><LI
+> 2.parameter af :  the filter for the attribute list
+</LI
+><LI
+> 3.parameter cf :  the filter for the children
+</LI
+><LI
+> returns : the constructor filter
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkQTag"
+></A
+><B
+>mkQTag</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-QualifiedName.html#t%3AQName"
+>QName</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#mkQTag"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>Version with qualified names of <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXTag"
+>mkXTag</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXNsTag"
+></A
+><B
+>mkXNsTag</B
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#mkXNsTag"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>constructor filter for a tag node.
+ a new tree is constructed.
+ the attributes and the children are computed by applying the aproprate filter to the input tree
+</P
+><UL
+><LI
+> 1.parameter n :  the tag name in form of prefix:localpart
+</LI
+><LI
+> 2.parameter ns:   the namespace uri
+</LI
+><LI
+> 3.parameter af :  the filter for the attribute list
+</LI
+><LI
+> 4.parameter cf :  the filter for the children
+</LI
+><LI
+> returns : the constructor filter
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXAttr"
+></A
+><B
+>mkXAttr</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#mkXAttr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>filter for attribute construction.
+ a new tree with attribute name and a value computed by a filter
+ is build.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkQAttr"
+></A
+><B
+>mkQAttr</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-QualifiedName.html#t%3AQName"
+>QName</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#mkQAttr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>Qualified version <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXAttr"
+>mkXAttr</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXNsAttr"
+></A
+><B
+>mkXNsAttr</B
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#mkXNsAttr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>filter for attribute construction.
+ a new tree with attribute name and namespace and a value computed by a filter
+ is build.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXText"
+></A
+><B
+>mkXText</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#mkXText"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>constructor filter for a text node.
+ a new tree is constructed.
+ the input tree is ignored.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXCharRef"
+></A
+><B
+>mkXCharRef</B
+> :: Int -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#mkXCharRef"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>constructor filter for a character reference node.
+ a new tree is constructed.
+ the input tree is ignored.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXEntityRef"
+></A
+><B
+>mkXEntityRef</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#mkXEntityRef"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>constructor filter for an entity reference node.
+ a new tree is constructed.
+ the input tree is ignored.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXCmt"
+></A
+><B
+>mkXCmt</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#mkXCmt"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>constructor filter for a comment node.
+ a new tree is constructed.
+ the xml string representation of the filter result
+ forms the comment
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXDTD"
+></A
+><B
+>mkXDTD</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3ADTDElem"
+>DTDElem</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#mkXDTD"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>constructor filter for a DTD part.
+ a new tree is constructed.
+ the input tree is ignored.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXCdata"
+></A
+><B
+>mkXCdata</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#mkXCdata"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>constructor filter for a CDATA section node.
+ a new tree is constructed.
+ the input tree is ignored.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXPi"
+></A
+><B
+>mkXPi</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#mkXPi"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>constructor filter for a processing instruction
+ a new tree is constructed from the text representation
+ of the input tree
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXError"
+></A
+><B
+>mkXError</B
+> :: Int -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#mkXError"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>constructor filter for an error message node.
+ a new tree is constructed.
+ the input tree is ignored.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetName"
+></A
+><B
+>getName</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#getName"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>filter for selecting the name of a tag node, an attribute node or a pi node.
+ Result of the filter is a single element list with a text node or the empty list
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetAttrl"
+></A
+><B
+>getAttrl</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#getAttrl"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>filter for selecting the attibute list
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetValue"
+></A
+><B
+>getValue</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#getValue"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>filter for selecting the value of an attribute in a tag node.
+ Result of the filter is a single element list with a text node or the empty list
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AhasValue"
+>hasValue</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AgetNsValue"
+>getNsValue</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetNsValue"
+></A
+><B
+>getNsValue</B
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#getNsValue"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>filter for selecting the value of an attribute with namespace in a tag node.
+ Result of the filter is a single element list with a text node or the empty list
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AgetValue"
+>getValue</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisNsAttr"
+>isNsAttr</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetDTDValue"
+></A
+><B
+>getDTDValue</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#getDTDValue"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>filter for selecting an attribute of a DTD node.
+ Result of the filter is a single element list with a text node or the empty list
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetXCmt"
+></A
+><B
+>getXCmt</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#getXCmt"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>filter for selecting content of a comment.
+ Result of the filter is a single element list with a text node or the empty list
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetXCdata"
+></A
+><B
+>getXCdata</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#getXCdata"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>filter for selecting the CDATA content.
+ Result of the filter is a single element list with a text node or the empty list
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AreplaceQName"
+></A
+><B
+>replaceQName</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#replaceQName"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>edit filter for changing the name of a tag node, an attribute or a pi.
+ result of the filter is a single element list with a tag node or the empty list
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmodifyText"
+></A
+><B
+>modifyText</B
+> :: (String -&gt; String) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#modifyText"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>edit filter for changing the text of a text node.
+ result of the filter is a single element list with a text node or the empty list
+</P
+><P
+>example for editing all text nodes of a tree with an edit function <TT
+>f</TT
+>:
+</P
+><PRE
+>processBottomUp (modifyText f `when` isXText)</PRE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmodifyQName"
+></A
+><B
+>modifyQName</B
+> :: (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3ATagName"
+>TagName</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3ATagName"
+>TagName</A
+>) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#modifyQName"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>edit filter for changing the name of a tag node.
+ result of the filter is a single element list with a text node or the empty list
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AprocessAttrl"
+></A
+><B
+>processAttrl</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlSFilter"
+>XmlSFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#processAttrl"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>process the attribute list of a tag node with a tree list filter.
+ for other trees this filter acts like <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Data-Tree-NTree-Filter.html#v%3Anone"
+>none</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AprocessAttr"
+></A
+><B
+>processAttr</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#processAttr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>elementwise processing of the attributes of a tag.
+ for other trees this filter acts like <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Data-Tree-NTree-Filter.html#v%3Anone"
+>none</A
+></TT
+>
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AprocessAttrl"
+>processAttrl</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AreplaceAttrl"
+></A
+><B
+>replaceAttrl</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#replaceAttrl"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>replace an attribute list
+ to be renamed when replaceAttrl is eliminated
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Adel1Attr"
+></A
+><B
+>del1Attr</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#del1Attr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>delete an attribute from the attribute list of a tag tree
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Aadd1Attr"
+></A
+><B
+>add1Attr</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#add1Attr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>add an attribute to the attribute list of a tag.
+ If the attribute already exists, it's substituted,
+</P
+><P
+>see also: <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Asattr"
+>sattr</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3A%2B%3D"
+>+=</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AaddAttrl"
+></A
+><B
+>addAttrl</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#addAttrl"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>adds an attribute list computed by a filter, uses <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aadd1Attr"
+>add1Attr</A
+></TT
+>.
+</P
+><P
+>see also: <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3A%2B%3D"
+>+=</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AaddAttr"
+></A
+><B
+>addAttr</B
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#addAttr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>add or change an attribute with a given string as value for a XTag or XPi tree,
+ uses <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aadd1Attr"
+>add1Attr</A
+></TT
+>.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AaddAttrInt"
+></A
+><B
+>addAttrInt</B
+> :: String -&gt; Int -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#addAttrInt"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>add or change an attribute with an Int value.
+ uses <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AaddAttr"
+>addAttr</A
+></TT
+>.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmodifyAttr"
+></A
+><B
+>modifyAttr</B
+> :: String -&gt; (String -&gt; String) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#modifyAttr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>edit filter for changing the value of an attribute in a tag node.
+ result of the filter is a single element list with the tag node or the empty list.
+</P
+><UL
+><LI
+> 1.parameter n :  the name of the attribute
+</LI
+><LI
+> 2.parameter f :  the edit function for the attribute value
+</LI
+><LI
+> returns : the edit filter
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AaddDTDAttr"
+></A
+><B
+>addDTDAttr</B
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#addDTDAttr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>add or change an attribute of a DTD tree
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3A%2B%3D"
+></A
+><B
+>(+=)</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#%2B%3D"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>convenient function for tag node tree construction
+</P
+><P
+>infixl 7
+</P
+><P
+>filter combinator for tag tree constrcution
+ take a 1. filter for computing a tag node tree (or a whole list of tag node trees)
+ then add all trees computed by the 2. filter to the attribute list when they represent attributes
+ else append them to the list of children.
+</P
+><P
+>if the 1. filter computes a list of tag nodes, the results of the 2. filter are added to all trees
+</P
+><P
+>example: <TT
+> etag &quot;a&quot; += sattr &quot;href&quot; &quot;#42&quot; += txt &quot;the answer&quot; </TT
+>
+ gives the tree <TT
+> &lt;a href=&quot;#42&quot;&gt;the answer&lt;/a&gt; </TT
+>
+</P
+><P
+>example: <TT
+> ( etag &quot;a&quot; +++ etag &quot;b&quot; ) += sattr &quot;x&quot; &quot;42&quot; </TT
+>
+ gives the tree <TT
+> &lt;a x=&quot;42&quot;/&gt;&lt;b x=&quot;42&quot;/&gt; </TT
+>
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aetag"
+>etag</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Atag"
+>tag</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aadd1Attr"
+>add1Attr</A
+></TT
+>, <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Data-Tree-NTree-Filter.html#v%3AmodifyChildren"
+>modifyChildren</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3A%2B%2B%3D"
+>++=</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3A%2B%2B%3D"
+></A
+><B
+>(++=)</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#%2B%2B%3D"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>convenient filter function adding a whole list of trees, just for not writing to many ( ... ).
+</P
+><P
+>infixl 7
+</P
+><PRE
+> f ++= gl  == f += cat gl </PRE
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3A%2B%3D"
+>+=</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AvalueOf"
+></A
+><B
+>valueOf</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#valueOf"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>combination of <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AgetValue"
+>getValue</A
+></TT
+> and conversion into a String
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AintValueOf"
+></A
+><B
+>intValueOf</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; Int</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#intValueOf"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>combination of <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AgetValue"
+>getValue</A
+></TT
+> and conversion to a Int
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Atag"
+></A
+><B
+>tag</B
+> :: String -&gt; [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#tag"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>variant of mkXTag with a list of filters for the attributes and a list of filters for the children.
+ this variant leads to a more readable source for a complicated construction filter
+ than the simple solution with a combination of <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXTag"
+>mkXTag</A
+></TT
+> and <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Data-Tree-NTree-Filter.html#v%3Acat"
+>cat</A
+></TT
+>.
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXTag"
+>mkXTag</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Astag"
+>stag</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aetag"
+>etag</A
+></TT
+>, <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Data-Tree-NTree-Filter.html#v%3Acat"
+>cat</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3A%2B%3D"
+>+=</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Astag"
+></A
+><B
+>stag</B
+> :: String -&gt; [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#stag"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>variant of tag, useful for tags without attributes and with a list of filters for
+ constructing the children
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXTag"
+>mkXTag</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Atag"
+>tag</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aetag"
+>etag</A
+></TT
+>, <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Data-Tree-NTree-Filter.html#v%3Acat"
+>cat</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3A%2B%3D"
+>+=</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Aatag"
+></A
+><B
+>atag</B
+> :: String -&gt; [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#atag"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>variant of tag, useful for tags with attributes but without children
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXTag"
+>mkXTag</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Atag"
+>tag</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Astag"
+>stag</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aetag"
+>etag</A
+></TT
+>, <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Data-Tree-NTree-Filter.html#v%3Acat"
+>cat</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Aetag"
+></A
+><B
+>etag</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#etag"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Short cut for empty tags without attributes
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Atag"
+>tag</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aatag"
+>atag</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Astag"
+>stag</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXTag"
+>mkXTag</A
+></TT
+> and <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3A%2B%3D"
+>+=</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Aqetag"
+></A
+><B
+>qetag</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-QualifiedName.html#t%3AQName"
+>QName</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#qetag"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>Qualified version of etag
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Aqtag"
+></A
+><B
+>qtag</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-QualifiedName.html#t%3AQName"
+>QName</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#qtag"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>Alias for mkQTag
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3ArootTag"
+></A
+><B
+>rootTag</B
+> :: [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#rootTag"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>filter for creating a document root node with a list of filters for the attributes and a list of filters for the document.
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Atag"
+>tag</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Aattr"
+></A
+><B
+>attr</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#attr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>Alias for <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXAttr"
+>mkXAttr</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Aqattr"
+></A
+><B
+>qattr</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-QualifiedName.html#t%3AQName"
+>QName</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#qattr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>Alias for mkQAttr
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Asattr"
+></A
+><B
+>sattr</B
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#sattr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>short cut for attribute construction with string constants
+</P
+><P
+>set also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aattr"
+>attr</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXAttr"
+>mkXAttr</A
+></TT
+> and <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXText"
+>mkXText</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Atxt"
+></A
+><B
+>txt</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#txt"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>short cut for <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXText"
+>mkXText</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Acmt"
+></A
+><B
+>cmt</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#cmt"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>short cut for simple comment
+ the input tree is ignored
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXCmt"
+>mkXCmt</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Aspi"
+></A
+><B
+>spi</B
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#spi"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>short cut for generating simple processing instructions (spi)
+ the input tree is ignored
+</P
+><P
+><TT
+>spi &quot;xyz&quot; &quot;abc&quot;</TT
+> is equal to <TT
+>mkXPi &quot;xyz&quot; (txt &quot;abc&quot;)</TT
+>
+ (the name pi is already used in prelude)
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Acdata"
+></A
+><B
+>cdata</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#cdata"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>short cut for generating simple cdata sections,
+ the input tree is ignored
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Adtd"
+></A
+><B
+>dtd</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3ADTDElem"
+>DTDElem</A
+> -&gt; [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; [<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+>] -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#dtd"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>DTD part generation with filter for attributes and children
+ see also: <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXDTDTree"
+>mkXDTDTree</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Awarn"
+></A
+><B
+>warn</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#warn"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>short cut for mkXError c_warn.
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXError"
+>mkXError</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Aerr"
+></A
+><B
+>err</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#err"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>short cut for mkXError c_fatal.
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXError"
+>mkXError</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Afatal"
+></A
+><B
+>fatal</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#fatal"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>short cut for mkXError c_fatal.
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXError"
+>mkXError</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AhasOption"
+></A
+><B
+>hasOption</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFilter.html#hasOption"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>check whether an option is set
+</P
+><P
+>reads the value of an attribute, usually applied to a document root node,
+ and checks if the value represents True. The following strings are interpreted
+ as true: &quot;1&quot;, &quot;True&quot;, &quot;true&quot;, &quot;yes&quot;, &quot;Yes&quot;.
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-DOM-XmlTreeFunctions.html b/doc/hxt-filter/Text-XML-HXT-DOM-XmlTreeFunctions.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-DOM-XmlTreeFunctions.html
@@ -0,0 +1,3190 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.DOM.XmlTreeFunctions</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.DOM.XmlTreeFunctions</FONT
+></TD
+><TD ALIGN="right"
+><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="infohead"
+>Portability</TD
+><TD CLASS="infoval"
+>portable</TD
+></TR
+><TR
+><TD CLASS="infohead"
+>Stability</TD
+><TD CLASS="infoval"
+>stable</TD
+></TR
+><TR
+><TD CLASS="infohead"
+>Maintainer</TD
+><TD CLASS="infoval"
+>Uwe Schmidt (uwe@fh-wedel.de)</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+>Basic XmlTree functions
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXCdataNode"
+>isXCdataNode</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXCharRefNode"
+>isXCharRefNode</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXCmtNode"
+>isXCmtNode</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXDTDNode"
+>isXDTDNode</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXAttrNode"
+>isXAttrNode</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXEntityRefNode"
+>isXEntityRefNode</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXErrorNode"
+>isXErrorNode</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXPiNode"
+>isXPiNode</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXTagNode"
+>isXTagNode</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisXTextNode"
+>isXTextNode</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisRootNode"
+>isRootNode</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisTagNode"
+>isTagNode</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisOfTagNode"
+>isOfTagNode</A
+> :: (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3ATagName"
+>TagName</A
+> -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisAttrNode"
+>isAttrNode</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisOfAttrNode"
+>isOfAttrNode</A
+> :: (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AAttrName"
+>AttrName</A
+> -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisTextNode"
+>isTextNode</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisOfTextNode"
+>isOfTextNode</A
+> :: (String -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisPiNode"
+>isPiNode</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisOfPiNode"
+>isOfPiNode</A
+> :: (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3ATagName"
+>TagName</A
+> -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisDTDElemNode"
+>isDTDElemNode</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3ADTDElem"
+>DTDElem</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisErrorNode"
+>isErrorNode</A
+> :: Int -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AtextOfXNode"
+>textOfXNode</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXTagTree"
+>mkXTagTree</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkQTagTree"
+>mkQTagTree</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-QualifiedName.html#t%3AQName"
+>QName</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXNsTagTree"
+>mkXNsTagTree</A
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AnewRoot"
+>newRoot</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AemptyRoot"
+>emptyRoot</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AnewDocument"
+>newDocument</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AnewDocument%27"
+>newDocument'</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkRootTree"
+>mkRootTree</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXTextTree"
+>mkXTextTree</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXCharRefTree"
+>mkXCharRefTree</A
+> :: Int -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXEntityRefTree"
+>mkXEntityRefTree</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXCmtTree"
+>mkXCmtTree</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXDTDTree"
+>mkXDTDTree</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3ADTDElem"
+>DTDElem</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXAttrTree"
+>mkXAttrTree</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkQAttrTree"
+>mkQAttrTree</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-QualifiedName.html#t%3AQName"
+>QName</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXNsAttrTree"
+>mkXNsAttrTree</A
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXPERefTree"
+>mkXPERefTree</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXPiTree"
+>mkXPiTree</A
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXmlDeclTree"
+>mkXmlDeclTree</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXCdataTree"
+>mkXCdataTree</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmkXErrorTree"
+>mkXErrorTree</A
+> :: Int -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AmaybeString2XText"
+>maybeString2XText</A
+> :: Maybe String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AshowXText"
+>showXText</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AshowXCharRef"
+>showXCharRef</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AshowXEntityRef"
+>showXEntityRef</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AshowXErrors"
+>showXErrors</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AxmlTreesToString"
+>xmlTreesToString</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AxmlTreesToText"
+>xmlTreesToText</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlSFilter"
+>XmlSFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AxmlContentModelToString"
+>xmlContentModelToString</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AnameOf"
+>nameOf</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AlocalPartOf"
+>localPartOf</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AnamespaceOf"
+>namespaceOf</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AprefixOf"
+>prefixOf</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AuniversalNameOf"
+>universalNameOf</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AattrlOfDTD"
+>attrlOfDTD</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AvalueOfDTD"
+>valueOfDTD</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AofDTDequals"
+>ofDTDequals</A
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Axcmt"
+>xcmt</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Axerr"
+>xerr</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Axwarn"
+>xwarn</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Axtext"
+>xtext</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Axtag"
+>xtag</A
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Axattr"
+>xattr</A
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AtoTreel"
+>toTreel</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Data-AssocList.html#t%3AAssocList"
+>AssocList</A
+> String <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AtoAttrl"
+>toAttrl</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AfromTreel"
+>fromTreel</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Data-AssocList.html#t%3AAssocList"
+>AssocList</A
+> String <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AfromAttrl"
+>fromAttrl</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-ShowXml.html"
+>Text.XML.HXT.DOM.ShowXml</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXCdataNode"
+></A
+><B
+>isXCdataNode</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isXCdataNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXCharRefNode"
+></A
+><B
+>isXCharRefNode</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isXCharRefNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXCmtNode"
+></A
+><B
+>isXCmtNode</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isXCmtNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXDTDNode"
+></A
+><B
+>isXDTDNode</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isXDTDNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXAttrNode"
+></A
+><B
+>isXAttrNode</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isXAttrNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXEntityRefNode"
+></A
+><B
+>isXEntityRefNode</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isXEntityRefNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXErrorNode"
+></A
+><B
+>isXErrorNode</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isXErrorNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXPiNode"
+></A
+><B
+>isXPiNode</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isXPiNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXTagNode"
+></A
+><B
+>isXTagNode</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isXTagNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisXTextNode"
+></A
+><B
+>isXTextNode</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isXTextNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisRootNode"
+></A
+><B
+>isRootNode</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isRootNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisTagNode"
+></A
+><B
+>isTagNode</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isTagNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisOfTagNode"
+></A
+><B
+>isOfTagNode</B
+> :: (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3ATagName"
+>TagName</A
+> -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isOfTagNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisAttrNode"
+></A
+><B
+>isAttrNode</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isAttrNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisOfAttrNode"
+></A
+><B
+>isOfAttrNode</B
+> :: (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AAttrName"
+>AttrName</A
+> -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isOfAttrNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisTextNode"
+></A
+><B
+>isTextNode</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isTextNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisOfTextNode"
+></A
+><B
+>isOfTextNode</B
+> :: (String -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isOfTextNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisPiNode"
+></A
+><B
+>isPiNode</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isPiNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisOfPiNode"
+></A
+><B
+>isOfPiNode</B
+> :: (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3ATagName"
+>TagName</A
+> -&gt; Bool) -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isOfPiNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisDTDElemNode"
+></A
+><B
+>isDTDElemNode</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3ADTDElem"
+>DTDElem</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isDTDElemNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisErrorNode"
+></A
+><B
+>isErrorNode</B
+> :: Int -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#isErrorNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AtextOfXNode"
+></A
+><B
+>textOfXNode</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXNode"
+>XNode</A
+> -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#textOfXNode"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXTagTree"
+></A
+><B
+>mkXTagTree</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#mkXTagTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Create a tree with a tag node.
+</P
+><UL
+><LI
+> 1.parameter n :  the name of the tag
+</LI
+><LI
+> 2.parameter al :  the tag attribte list
+</LI
+><LI
+> 3.parameter cs :  the list of children
+</LI
+><LI
+> returns : the new tree
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkQTagTree"
+></A
+><B
+>mkQTagTree</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-QualifiedName.html#t%3AQName"
+>QName</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#mkQTagTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>Version with qualified name of <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXTagTree"
+>mkXTagTree</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXNsTagTree"
+></A
+><B
+>mkXNsTagTree</B
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#mkXNsTagTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>create a tree with a namespace aware tag node.
+</P
+><UL
+><LI
+> 1.parameter n :  the prefix:localpart of the tag
+</LI
+><LI
+> 2.parameter ns:  the namespace uri
+</LI
+><LI
+> 3.parameter al :  the tag attribte list
+</LI
+><LI
+> 4.parameter cs :  the list of children
+</LI
+><LI
+> returns : the new tree
+</LI
+></UL
+><P
+>see also: <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXTagTree"
+>mkXTagTree</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AnewRoot"
+></A
+><B
+>newRoot</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#newRoot"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>creates a new document tree with empty contents.
+</P
+><UL
+><LI
+> 1.parameter al : the attribute list for the root node
+</LI
+></UL
+><P
+>returns a single node tree with tag name &quot;/&quot; indicating a root and
+ with empty list of children
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AemptyRoot"
+>emptyRoot</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AemptyRoot"
+></A
+><B
+>emptyRoot</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#emptyRoot"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>the empty document tree
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AnewRoot"
+>newRoot</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AnewDocument"
+></A
+><B
+>newDocument</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#newDocument"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>create a new empty document with source name as parameter
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AnewDocument%27"
+></A
+><B
+>newDocument'</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#newDocument%27"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>create a new empty document with a list of attributes for source location and options
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AnewDocument"
+>newDocument</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkRootTree"
+></A
+><B
+>mkRootTree</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#mkRootTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>create a document root tree.
+</P
+><UL
+><LI
+> 1.parameter al :  the attribute list for the root. This list must contain at
+		  least an attribute &quot;source&quot; that contains the URI of the document to be processed
+</LI
+><LI
+> 2.parameter cs :  the list for the document content
+</LI
+><LI
+> returns : the document root
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXTextTree"
+></A
+><B
+>mkXTextTree</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#mkXTextTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>create a leaf for a text element.
+</P
+><UL
+><LI
+> 1.parameter txt :  the text
+</LI
+><LI
+> returns : the tree with the single node containing the text
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXCharRefTree"
+></A
+><B
+>mkXCharRefTree</B
+> :: Int -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#mkXCharRefTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>create a leaf for a char reference.
+</P
+><UL
+><LI
+> 1.parameter i :  the integer representing the Unicode char
+</LI
+><LI
+> returns : the tree with the single node containing the char reference
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXEntityRefTree"
+></A
+><B
+>mkXEntityRefTree</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#mkXEntityRefTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>create a leaf for an entity reference.
+</P
+><UL
+><LI
+> 1.parameter n :  the name of the entity reference
+</LI
+><LI
+> returns : the tree with the single node containing the entity reference
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXCmtTree"
+></A
+><B
+>mkXCmtTree</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#mkXCmtTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>create a leaf for a comment,
+</P
+><UL
+><LI
+> 1.parameter c :  the comment text
+</LI
+><LI
+> returns : the tree with the single node containing the comment
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXDTDTree"
+></A
+><B
+>mkXDTDTree</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3ADTDElem"
+>DTDElem</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#mkXDTDTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>create a tree for a part of a DTD
+</P
+><UL
+><LI
+> 1.parameter d :  the type of the DTD part
+</LI
+><LI
+> 2.parameter al :  the attribute list for the DTD part
+</LI
+><LI
+> 3.parameter ds :  the possibly empty list of components for the DTD part
+</LI
+><LI
+> returns : the tree with the composed DTD part
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXAttrTree"
+></A
+><B
+>mkXAttrTree</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#mkXAttrTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>create an attribute tree as part of a tag attribute list of tag nodes
+</P
+><UL
+><LI
+> 1.parameter al : the attribute name
+</LI
+><LI
+> 2.parameter av : the attribute value as tree list, usually containing a single text node
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkQAttrTree"
+></A
+><B
+>mkQAttrTree</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-QualifiedName.html#t%3AQName"
+>QName</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#mkQAttrTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>Qualified version of <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXAttrTree"
+>mkXAttrTree</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXNsAttrTree"
+></A
+><B
+>mkXNsAttrTree</B
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#mkXNsAttrTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>create an attribute tree with a namespace
+</P
+><UL
+><LI
+> 1.parameter al : the attribute name
+</LI
+><LI
+> 2.parameter ns : namespace uri
+</LI
+><LI
+> 3.parameter av : the attribute value as tree list, usually containing a single text node
+</LI
+></UL
+><P
+>see also: <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXAttrTree"
+>mkXAttrTree</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXNsTagTree"
+>mkXNsTagTree</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXPERefTree"
+></A
+><B
+>mkXPERefTree</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#mkXPERefTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>create a parameter entity reference DTD part.
+</P
+><UL
+><LI
+> 1.parameter ref :  the name of the reference
+</LI
+><LI
+> returns : the DTD part for a PERef
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXPiTree"
+></A
+><B
+>mkXPiTree</B
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#mkXPiTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>create a processing instruction tree.
+</P
+><UL
+><LI
+> 1.parameter n :  the name of the PI
+</LI
+><LI
+> 2.parameter str :  the content of a PI
+</LI
+><LI
+> returns : the processing instruction tree with a single attribute &quot;value&quot;
+      with the str parameter as attribute value, with <TT
+>valueOf a_value</TT
+> applied to the result tree
+      the content of the PI can be selected
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXmlDeclTree"
+></A
+><B
+>mkXmlDeclTree</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#mkXmlDeclTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>create xml declaration
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXCdataTree"
+></A
+><B
+>mkXCdataTree</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#mkXCdataTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>create a CDATA section tree.
+</P
+><UL
+><LI
+> 1.parameter s :  the content of the CDATA section
+</LI
+><LI
+> returns : the tree for the CDATA section
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmkXErrorTree"
+></A
+><B
+>mkXErrorTree</B
+> :: Int -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#mkXErrorTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>create an error tree.
+</P
+><UL
+><LI
+> 1.parameter l :  the level of the error (warning, error fatal)
+</LI
+><LI
+> 2.parameter msg :  the error message
+</LI
+><LI
+> 3.parameter cs :  the context, where the error was detected
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AmaybeString2XText"
+></A
+><B
+>maybeString2XText</B
+> :: Maybe String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#maybeString2XText"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AshowXText"
+></A
+><B
+>showXText</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#showXText"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AshowXCharRef"
+></A
+><B
+>showXCharRef</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#showXCharRef"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AshowXEntityRef"
+></A
+><B
+>showXEntityRef</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#showXEntityRef"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AshowXErrors"
+></A
+><B
+>showXErrors</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#showXErrors"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AxmlTreesToString"
+></A
+><B
+>xmlTreesToString</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#xmlTreesToString"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>old name for <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-ShowXml.html#v%3Axshow"
+>xshow</A
+></TT
+> (deprecated)
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AxmlTreesToText"
+></A
+><B
+>xmlTreesToText</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlSFilter"
+>XmlSFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#xmlTreesToText"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>conversion of a filter result into a text node
+</P
+><P
+>see also : <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-ShowXml.html#v%3Axshow"
+>xshow</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AxmlContentModelToString"
+></A
+><B
+>xmlContentModelToString</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#xmlContentModelToString"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AnameOf"
+></A
+><B
+>nameOf</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#nameOf"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>select the name of a node. For tags, attributes and pi's the name string
+ is returned, else the empty string.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AlocalPartOf"
+></A
+><B
+>localPartOf</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#localPartOf"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>select the local part of a name of a node. For tags, attributes the name string
+ is returned, for pi's the whole name, else the empty string.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AnamespaceOf"
+></A
+><B
+>namespaceOf</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#namespaceOf"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>select the namespace URI of a tag or an attribute tree, else the empty string is returned
+ see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AnameOf"
+>nameOf</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AprefixOf"
+></A
+><B
+>prefixOf</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#prefixOf"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>select the namespace prefix of a tag or an attribute tree, else the empty string is returned
+ see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AnameOf"
+>nameOf</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AlocalPartOf"
+>localPartOf</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AuniversalNameOf"
+></A
+><B
+>universalNameOf</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#universalNameOf"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>select the universal name (namespace uri ++ localPart) of a tag or an attribute tree, else the empty string is returned
+ see also : <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AnameOf"
+>nameOf</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AnamespaceOf"
+>namespaceOf</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AattrlOfDTD"
+></A
+><B
+>attrlOfDTD</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#attrlOfDTD"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>select the attributes of a dtd tree
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AvalueOfDTD"
+></A
+><B
+>valueOfDTD</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#valueOfDTD"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>select a special attribute of a DTD part
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AofDTDequals"
+></A
+><B
+>ofDTDequals</B
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#ofDTDequals"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>test an attribute of a DTD part
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Axcmt"
+></A
+><B
+>xcmt</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#xcmt"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Axerr"
+></A
+><B
+>xerr</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#xerr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Axwarn"
+></A
+><B
+>xwarn</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#xwarn"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Axtext"
+></A
+><B
+>xtext</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#xtext"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Axtag"
+></A
+><B
+>xtag</B
+> :: String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#xtag"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Axattr"
+></A
+><B
+>xattr</B
+> :: String -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#xattr"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AtoTreel"
+></A
+><B
+>toTreel</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Data-AssocList.html#t%3AAssocList"
+>AssocList</A
+> String <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#toTreel"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AtoAttrl"
+></A
+><B
+>toAttrl</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#toAttrl"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AfromTreel"
+></A
+><B
+>fromTreel</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Data-AssocList.html#t%3AAssocList"
+>AssocList</A
+> String <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#fromTreel"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AfromAttrl"
+></A
+><B
+>fromAttrl</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-DOM-XmlTreeFunctions.html#fromAttrl"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-ShowXml.html"
+>Text.XML.HXT.DOM.ShowXml</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-DOM.html b/doc/hxt-filter/Text-XML-HXT-DOM.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-DOM.html
@@ -0,0 +1,154 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.DOM</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-DOM.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.DOM</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>DOM data types and functions
+</P
+><P
+>export of all basic datatypes and functions of the toolbox DOM.
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-DOM-XmlTree.html"
+>Text.XML.HXT.DOM.XmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-DOM-XmlState.html"
+>Text.XML.HXT.DOM.XmlState</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-DOM-EditFilters.html"
+>Text.XML.HXT.DOM.EditFilters</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-FormatXmlTree.html"
+>Text.XML.HXT.DOM.FormatXmlTree</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-DOM-Namespace.html"
+>Text.XML.HXT.DOM.Namespace</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlOptions.html"
+>Text.XML.HXT.DOM.XmlOptions</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Parser-DTDProcessing.html b/doc/hxt-filter/Text-XML-HXT-Parser-DTDProcessing.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Parser-DTDProcessing.html
@@ -0,0 +1,351 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Parser.DTDProcessing</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Parser-DTDProcessing.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Parser.DTDProcessing</FONT
+></TD
+><TD ALIGN="right"
+><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="infohead"
+>Portability</TD
+><TD CLASS="infoval"
+>portable</TD
+></TR
+><TR
+><TD CLASS="infohead"
+>Stability</TD
+><TD CLASS="infoval"
+>experimental</TD
+></TR
+><TR
+><TD CLASS="infohead"
+>Maintainer</TD
+><TD CLASS="infoval"
+>Uwe Schmidt (uwe@fh-wedel.de)</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+>DTD processing function for
+   including external parts of a DTD
+   parameter entity substitution and general entity substitution
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetWellformedDoc"
+>getWellformedDoc</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AcheckWellformedDoc"
+>checkWellformedDoc</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AprocessDTD"
+>processDTD</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AprocessGeneralEntities"
+>processGeneralEntities</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetWellformedDoc"
+></A
+><B
+>getWellformedDoc</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-DTDProcessing.html#getWellformedDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>monadic filter for reading, parsing and checking a wellformed document.
+ the input tree must consist of a root node with a source attribute
+ in its attribute list.
+</P
+><P
+>All attributes from the document root are copied into the system state,
+ and may be queried by the monadic filters, e.g. trace options.
+</P
+><P
+>Result is the single element list containing the well-formed document tree
+ or, in case of errors, the document root with an empty list as children
+ and attributes <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_status"
+>a_status</A
+></TT
+> and <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_module"
+>a_module</A
+></TT
+> for error level and the module,
+ where the error occured.
+</P
+><P
+>this is a shortcut for <TT
+><A HREF="Text-XML-HXT-Parser-XmlInput.html#v%3AgetXmlContents"
+>getXmlContents</A
+></TT
+> .&gt;&gt; <TT
+><A HREF="Text-XML-HXT-Parser-DTDProcessing.html#v%3AcheckWellformedDoc"
+>checkWellformedDoc</A
+></TT
+>
+</P
+><P
+>example for a main program:
+</P
+><PRE
+>
+ main =
+   run' $
+   do
+   res  &lt;- getWellformedDoc $ newDocument &quot;myfile.xml&quot;
+   ...
+ </PRE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AcheckWellformedDoc"
+></A
+><B
+>checkWellformedDoc</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-DTDProcessing.html#checkWellformedDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>parses a text node with <TT
+><A HREF="Text-XML-HXT-Parser-XmlParser.html#v%3AparseXmlDoc"
+>parseXmlDoc</A
+></TT
+>, processes the DTD and general entities
+ and transforms all char references into characters
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AprocessDTD"
+></A
+><B
+>processDTD</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-DTDProcessing.html#processDTD"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>a filter for DTD processing
+</P
+><P
+>inclusion of external parts of DTD,
+ parameter entity substitution
+ conditional section evaluation
+</P
+><P
+>input tree must represent a complete document including root node
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AprocessGeneralEntities"
+></A
+><B
+>processGeneralEntities</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-DTDProcessing.html#processGeneralEntities"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>substitution of general entities
+</P
+><P
+>input: a complete document tree including root node
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Parser-DefaultURI.html b/doc/hxt-filter/Text-XML-HXT-Parser-DefaultURI.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Parser-DefaultURI.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Parser.DefaultURI</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Parser-DefaultURI.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Parser.DefaultURI</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AsetDefaultURI"
+></A
+><B
+>setDefaultURI</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-DefaultURI.html#setDefaultURI"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Parser-HtmlParser.html b/doc/hxt-filter/Text-XML-HXT-Parser-HtmlParser.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Parser-HtmlParser.html
@@ -0,0 +1,366 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Parser.HtmlParser</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Parser-HtmlParser.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Parser.HtmlParser</FONT
+></TD
+><TD ALIGN="right"
+><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="infohead"
+>Portability</TD
+><TD CLASS="infoval"
+>portable</TD
+></TR
+><TR
+><TD CLASS="infohead"
+>Stability</TD
+><TD CLASS="infoval"
+>stable</TD
+></TR
+><TR
+><TD CLASS="infohead"
+>Maintainer</TD
+><TD CLASS="infoval"
+>Uwe Schmidt (uwe@fh-wedel.de)</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>This parser tries to interprete everything as HTML
+   no errors are emitted during parsing. If something looks
+   weired, warning messages are inserted in the document tree.
+</P
+><P
+>Module contains state filter for easy parsing and error handling
+   real work is done in <TT
+><A HREF="Text-XML-HXT-Parser.html#t%3AHtmlParsec"
+>HtmlParsec</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetHtmlDoc"
+>getHtmlDoc</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AparseHtmlDoc"
+>parseHtmlDoc</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3ArunHtmlParser"
+>runHtmlParser</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AsubstHtmlEntities"
+>substHtmlEntities</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-Parser-HtmlParsec.html"
+>Text.XML.HXT.Parser.HtmlParsec</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetHtmlDoc"
+></A
+><B
+>getHtmlDoc</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-HtmlParser.html#getHtmlDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>read a document and parse it with <TT
+><A HREF="Text-XML-HXT-Parser-HtmlParser.html#v%3AparseHtmlDoc"
+>parseHtmlDoc</A
+></TT
+>. The main entry point of this module
+</P
+><P
+>The input tree must be a root tree like in '	Text.XML.HXT.Parser.MainFunctions.getXmlDoc'. The content is read with <TT
+><A HREF="Text-XML-HXT-Parser-XmlInput.html#v%3AgetXmlContents"
+>getXmlContents</A
+></TT
+>,
+ is parsed with <TT
+><A HREF="Text-XML-HXT-Parser-HtmlParser.html#v%3AparseHtmlDoc"
+>parseHtmlDoc</A
+></TT
+> and canonicalized (char refs are substituted in content and attributes,
+ but comment is preserved)
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-Parser-DTDProcessing.html#v%3AgetWellformedDoc"
+>getWellformedDoc</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AparseHtmlDoc"
+></A
+><B
+>parseHtmlDoc</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-HtmlParser.html#parseHtmlDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>The HTML parsing filter
+</P
+><P
+>The input is parsed with <TT
+><A HREF="Text-XML-HXT-Parser-HtmlParser.html#v%3ArunHtmlParser"
+>runHtmlParser</A
+></TT
+>, everything is interpreted as HTML,
+ if errors ocuur, the parser will try to do some meaningfull action and continues
+ parsing. Afterwards the entitiy references for defined for XHTML are resovled,
+ any unresolved reference is transformed into plain text.
+</P
+><P
+>Error messages
+ during parsing and entity resolving are added as warning nodes into the resulting tree.
+</P
+><P
+>The warnings are issued, if the 1. parameter noWarnings is set to True,
+ afterwards all are removed from the resulting tree.
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3ArunHtmlParser"
+></A
+><B
+>runHtmlParser</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-HtmlParser.html#runHtmlParser"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>The pure HTML parser, usually called via <TT
+><A HREF="Text-XML-HXT-Parser-HtmlParser.html#v%3AparseHtmlDoc"
+>parseHtmlDoc</A
+></TT
+>.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AsubstHtmlEntities"
+></A
+><B
+>substHtmlEntities</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-HtmlParser.html#substHtmlEntities"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-Parser-HtmlParsec.html"
+>Text.XML.HXT.Parser.HtmlParsec</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Parser-MainFunctions.html b/doc/hxt-filter/Text-XML-HXT-Parser-MainFunctions.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Parser-MainFunctions.html
@@ -0,0 +1,736 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Parser.MainFunctions</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Parser-MainFunctions.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Parser.MainFunctions</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Simple parse functions.
+</P
+><P
+>the main building blocks for an application.
+ this module exports complex filters and functions for
+ common tasks for input and parsing, output and option handling.
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetXmlDocument"
+>getXmlDocument</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+> -&gt; String -&gt; IO (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+>, <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+>, Int)</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AputXmlDocument"
+>putXmlDocument</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+> -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; IO (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+>, Int)</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AparseDocument"
+>parseDocument</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AwriteDocument"
+>writeDocument</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetXmlDocument"
+></A
+><B
+>getXmlDocument</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+> -&gt; String -&gt; IO (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+>, <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+>, Int)</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-MainFunctions.html#getXmlDocument"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>convenient function for reading a XML document without
+ dealing with state monads, error messages collection and other details
+</P
+><P
+>getXmlDocument calls <TT
+><A HREF="Text-XML-HXT-Parser-MainFunctions.html#v%3AparseDocument"
+>parseDocument</A
+></TT
+> with the list of parsing options
+ and an url or filename as document source.
+</P
+><P
+>result is a triple
+</P
+><UL
+><LI
+> the resulting document tree with a root node containing all
+   meta info about the document (options, status info, http header, ...)
+</LI
+><LI
+> the list of errors and warnings
+</LI
+><LI
+> the error level: one of <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#v%3Ac_ok"
+>c_ok</A
+></TT
+>, <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#v%3Ac_warn"
+>c_warn</A
+></TT
+>, <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#v%3Ac_err"
+>c_err</A
+></TT
+>, <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#v%3Ac_fatal"
+>c_fatal</A
+></TT
+>
+</LI
+></UL
+><P
+>example for input (see also example in <TT
+><A HREF="Text-XML-HXT-Parser-MainFunctions.html#v%3AputXmlDocument"
+>putXmlDocument</A
+></TT
+> and example in <TT
+><A HREF="Text-XML-HXT-Parser-MainFunctions.html#v%3AwriteDocument"
+>writeDocument</A
+></TT
+>)
+</P
+><PRE
+> main :: IO ()
+ main
+   = do
+     (res, errs, rc) &lt;- getXmlDocument [] &quot;test.xml&quot;
+     if rc &gt;= c_err
+       then issueErrors errs
+       else processTree res
+
+ issueErrors :: XmlTrees -&gt; IO ()
+
+ processTree :: XmlTree  -&gt; IO ()
+</PRE
+><P
+>for options see <TT
+><A HREF="Text-XML-HXT-Parser-MainFunctions.html#v%3AparseDocument"
+>parseDocument</A
+></TT
+>, <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_collect_errors"
+>a_collect_errors</A
+></TT
+> is set implicitly
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AputXmlDocument"
+></A
+><B
+>putXmlDocument</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+> -&gt; String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; IO (<A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+>, Int)</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-MainFunctions.html#putXmlDocument"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>the inverse operation to <TT
+><A HREF="Text-XML-HXT-Parser-MainFunctions.html#v%3AgetXmlDocument"
+>getXmlDocument</A
+></TT
+>
+</P
+><P
+>writes a complete document tree to a file, writing can be
+ controlled by options, the real work is done with filter <TT
+><A HREF="Text-XML-HXT-Parser-MainFunctions.html#v%3AwriteDocument"
+>writeDocument</A
+></TT
+>.
+ useful options are the options of <TT
+><A HREF="Text-XML-HXT-Parser-MainFunctions.html#v%3AwriteDocument"
+>writeDocument</A
+></TT
+>.
+</P
+><P
+>result is a pair: 1.part is a list of error messages, 2. part is the return code,
+ the status info of the write filter
+</P
+><P
+>this filter is useful, when processing XML in an arbitray context in the IO monad
+</P
+><P
+>an example main program for such an application is:
+</P
+><PRE
+> main :: IO ()
+ main
+   = do
+     (input, readErrs, rc) &lt;- getXmlDocument [...] &quot;test.xml&quot;
+     if rc &gt;= c_err
+       then issueErrors readErrs
+       else processTree input
+
+ processTree :: XmlTree -&gt; IO ()
+ processTree t
+   = let res = computeNewTree input
+     in do
+        (writeErrs, rc2) &lt;- putXmlDocument [...] &quot;out.xml&quot; res
+        if rc2 &gt;= c_err
+          then issueErrors writeErrs
+          else return ()
+
+ issueErrors :: XmlTrees -&gt; IO ()
+
+ computeNewTree :: XmlTree -&gt; XmlTree
+</PRE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AparseDocument"
+></A
+><B
+>parseDocument</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-MainFunctions.html#parseDocument"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>the main parsing filter
+</P
+><P
+>this filter can be configured by an option list, a list of
+ option name, option value pairs.
+ the input tree must be a possibly empty document root tree.
+ all the options are stored as attributes in this root node to control processing.
+</P
+><P
+>available options:
+</P
+><UL
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_parse_html"
+>a_parse_html</A
+></TT
+>: use HTML parser, else use XML parser (default)
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_validate"
+>a_validate</A
+></TT
+> : validate document (default), else skip validation
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_check_namespaces"
+>a_check_namespaces</A
+></TT
+> : check namespaces, else skip namespace processing (default)
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_canonicalize"
+>a_canonicalize</A
+></TT
+> : canonicalize document (default), else skip canonicalization
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_preserve_comment"
+>a_preserve_comment</A
+></TT
+> : preserve comments during canonicalization, else remove comments (default)
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_remove_whitespace"
+>a_remove_whitespace</A
+></TT
+> : remove all whitespace, used for document indentation, else skip this step (default)
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_indent"
+>a_indent</A
+></TT
+> : indent document by inserting whitespace, else skip this step (default)
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_issue_warnings"
+>a_issue_warnings</A
+></TT
+> : issue warnings, when parsing HTML (default), else ignore HTML parser warnings
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_issue_errors"
+>a_issue_errors</A
+></TT
+> : issue all error messages on stderr (default), or ignore all error messages
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_collect_errors"
+>a_collect_errors</A
+></TT
+> : all error messages are collected during processing and appended to the result document
+ 			  for further processing within the calling modules
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_trace"
+>a_trace</A
+></TT
+> : trace level: values: 0 -4
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_proxy"
+>a_proxy</A
+></TT
+> : proxy for http access, e.g. www-cache:3128
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_use_curl"
+>a_use_curl</A
+></TT
+> : for http access via external programm curl, default is native HTTP access
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_options_curl"
+>a_options_curl</A
+></TT
+> : more options for external program curl
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_source"
+>a_source</A
+></TT
+> : the document source url
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_encoding"
+>a_encoding</A
+></TT
+> : default document encoding (<TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Autf8"
+>utf8</A
+></TT
+>, <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3AisoLatin1"
+>isoLatin1</A
+></TT
+>, <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3AusAscii"
+>usAscii</A
+></TT
+>, ...)
+</LI
+></UL
+><P
+>examples:
+</P
+><PRE
+> parseDocument [ (a_source,   &quot;test.xml&quot;)
+               , (a_validate, &quot;0&quot;)
+               , (a_encoding, isoLatin1)
+               ] emptyRoot
+</PRE
+><P
+>reads document &quot;test.xml&quot; without validation and default encoding <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3AisoLatin1"
+>isoLatin1</A
+></TT
+>
+</P
+><PRE
+> parseDocument [ (a_source,         &quot;http://www.haskell.org/&quot;)
+               , (a_parse_html,     &quot;1&quot;)
+               , (a_proxy,          &quot;www-cache:3128&quot;)
+               , (a_curl,           &quot;1&quot;)
+               , (a_issue_warnings, &quot;0&quot;)
+               ] emptyRoot
+</PRE
+><P
+>reads Haskell homepage with HTML parser ignoring any warnings and with http access via external program curl and proxy &quot;www-cache&quot; at port 3128
+</P
+><PRE
+> parseDocument [ (a_source,            &quot;http://www.w3c.org/&quot;)
+               , (a_parse_html,        &quot;0&quot;)                       -- default
+               , (a_validate,          &quot;1&quot;)                       -- default
+               , (a_check_namespace,   &quot;1&quot;)
+               , (a_remove_whitespace, &quot;1&quot;)
+               , (a_trace,             &quot;2&quot;)
+               ] emptyRoot
+</PRE
+><P
+>read w3c home page, validate and chech namespaces, remove whitespace between tags, trace activities with level 2
+</P
+><PRE
+> parseDocument [ (a_source,   &quot;test.xml&quot;)
+               , (a_validate,        &quot;1&quot;)
+               , (a_check_namespace, &quot;1&quot;)
+               , (a_collect_errors,  &quot;1&quot;)
+               , (a_issue_errors,    &quot;0&quot;)
+               ] emptyRoot
+</PRE
+><P
+>reads file &quot;test.xml&quot;, validates it, checks namespaces, does not issue any erros
+ but collects errors and appends the list of errors to the single element list for the document.
+ this enables the calling application to define own error handlers.
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AwriteDocument"
+></A
+><B
+>writeDocument</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
+>Attributes</A
+> -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-MainFunctions.html#writeDocument"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>the main filter for writing documents
+</P
+><P
+>this filter can be configured by an option list like <TT
+><A HREF="Text-XML-HXT-Parser-MainFunctions.html#v%3AgetXmlDocument"
+>getXmlDocument</A
+></TT
+>
+</P
+><P
+>available options are
+</P
+><UL
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_indent"
+>a_indent</A
+></TT
+> : indent document for readability, (default: no indentation)
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_remove_whitespace"
+>a_remove_whitespace</A
+></TT
+> : remove all redundant whitespace for shorten text (default: no removal)
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_output_file"
+>a_output_file</A
+></TT
+> : destination file for document, default is &quot;-&quot; for stdout
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_output_encoding"
+>a_output_encoding</A
+></TT
+> : encoding of document, default is <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_encoding"
+>a_encoding</A
+></TT
+> or <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Autf8"
+>utf8</A
+></TT
+>
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_output_xml"
+>a_output_xml</A
+></TT
+> : (default) issue XML: quote special XML chars &gt;,&lt;,&quot;,',&amp;
+                    add XML processing instruction
+                    and encode document with respect to <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_output_encoding"
+>a_output_encoding</A
+></TT
+>,
+                    if explizitly switched of, the plain text is issued, this is useful
+                    for non XML output, e.g. generated Haskell code, LaTex, Java, ...
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_show_tree"
+>a_show_tree</A
+></TT
+> : show tree representation of document (for debugging)
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_show_haskell"
+>a_show_haskell</A
+></TT
+> : show Haskell representaion of document (for debugging)
+</LI
+><LI
+> <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_issue_errors"
+>a_issue_errors</A
+></TT
+>, <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_collect_errors"
+>a_collect_errors</A
+></TT
+> : see <TT
+><A HREF="Text-XML-HXT-Parser-MainFunctions.html#v%3AparseDocument"
+>parseDocument</A
+></TT
+>
+</LI
+></UL
+><P
+>a typical main program running in the XmlState monad
+  has the following structure:
+</P
+><PRE
+>
+ main :: IO ()
+ main
+     = do
+       argv &lt;- getArgs                                              -- get the commandline arguments
+       (inp, outp, options) &lt;- cmdlineOpts argv                     -- and evaluate them, return a key-value list
+                                                                    -- and input and output
+       res  &lt;- run' $ application inp outp options $ emptyRoot      -- run the application
+ 
+       exitWith (if null res
+                 then ExitFailure (-1)
+                 else exitSuccess
+                )
+
+ application :: String -&gt; String -&gt; Attributes -&gt; XmlStateFilter ()
+ application inp outp al
+   = parseDocument (al ++ [(a_source, inp)])                        -- set options and source
+     .&gt;&gt;                                                            -- and parse document
+     processDocument                                                -- the hard work
+     .&gt;&gt;
+     writeDocument [(a_output_file, outp)]                          -- issue results
+     .&gt;&gt;
+     checkStatus                                                    -- check errors
+
+</PRE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Parser-ProtocolHandler.html b/doc/hxt-filter/Text-XML-HXT-Parser-ProtocolHandler.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Parser-ProtocolHandler.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Parser.ProtocolHandler</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Parser-ProtocolHandler.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Parser.ProtocolHandler</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetProtocolHandler"
+></A
+><B
+>getProtocolHandler</B
+> :: String -&gt; URI -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-ProtocolHandler.html#getProtocolHandler"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Parser-ProtocolHandlerFile.html b/doc/hxt-filter/Text-XML-HXT-Parser-ProtocolHandlerFile.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Parser-ProtocolHandlerFile.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Parser.ProtocolHandlerFile</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Parser-ProtocolHandlerFile.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Parser.ProtocolHandlerFile</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetFileContents"
+></A
+><B
+>getFileContents</B
+> :: URI -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-ProtocolHandlerFile.html#getFileContents"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Parser-ProtocolHandlerHttpCurl.html b/doc/hxt-filter/Text-XML-HXT-Parser-ProtocolHandlerHttpCurl.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Parser-ProtocolHandlerHttpCurl.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Parser.ProtocolHandlerHttpCurl</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Parser-ProtocolHandlerHttpCurl.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Parser.ProtocolHandlerHttpCurl</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetHttpContentsWithCurl"
+></A
+><B
+>getHttpContentsWithCurl</B
+> :: URI -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-ProtocolHandlerHttpCurl.html#getHttpContentsWithCurl"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Parser-ProtocolHandlerHttpNative.html b/doc/hxt-filter/Text-XML-HXT-Parser-ProtocolHandlerHttpNative.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Parser-ProtocolHandlerHttpNative.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Parser.ProtocolHandlerHttpNative</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Parser-ProtocolHandlerHttpNative.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Parser.ProtocolHandlerHttpNative</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetHttpContentsWithHttp"
+></A
+><B
+>getHttpContentsWithHttp</B
+> :: URI -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-ProtocolHandlerHttpNative.html#getHttpContentsWithHttp"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Parser-ProtocolHandlerHttpNativeOrCurl.html b/doc/hxt-filter/Text-XML-HXT-Parser-ProtocolHandlerHttpNativeOrCurl.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Parser-ProtocolHandlerHttpNativeOrCurl.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Parser.ProtocolHandlerHttpNativeOrCurl</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Parser-ProtocolHandlerHttpNativeOrCurl.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Parser.ProtocolHandlerHttpNativeOrCurl</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetHttpContentsNativeOrWithCurl"
+></A
+><B
+>getHttpContentsNativeOrWithCurl</B
+> :: URI -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-ProtocolHandlerHttpNativeOrCurl.html#getHttpContentsNativeOrWithCurl"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Parser-XmlInput.html b/doc/hxt-filter/Text-XML-HXT-Parser-XmlInput.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Parser-XmlInput.html
@@ -0,0 +1,636 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Parser.XmlInput</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlInput.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Parser.XmlInput</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetXmlContents"
+>getXmlContents</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetXmlEntityContents"
+>getXmlEntityContents</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetUrlContents"
+>getUrlContents</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetContentLength"
+>getContentLength</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AguessDocEncoding"
+>guessDocEncoding</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3ArunInLocalURIContext"
+>runInLocalURIContext</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3ArunInNewURIContext"
+>runInNewURIContext</A
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetBaseURI"
+>getBaseURI</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AsetBaseURI"
+>setBaseURI</A
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetAbsolutURI"
+>getAbsolutURI</A
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AisStandaloneDocument"
+>isStandaloneDocument</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state Bool</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetXmlContents"
+></A
+><B
+>getXmlContents</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlInput.html#getXmlContents"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>filter for reading the content of a XML document
+</P
+><P
+>input is a root node with the source as an attibute
+ the text is read, the encoding scheme is parsed and selected
+ and the input is translated into the internal UTF-8 string representation
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetXmlEntityContents"
+></A
+><B
+>getXmlEntityContents</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlInput.html#getXmlEntityContents"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>filter for reading the content of an external XML entity
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-Parser-XmlInput.html#v%3AgetXmlContents"
+>getXmlContents</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetUrlContents"
+></A
+><B
+>getUrlContents</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlInput.html#getUrlContents"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>the hard io operations
+</P
+><P
+>for reading a file or accessing a document via http
+ input must be a root node with a <TT
+>source</TT
+> attribute specifying the URI
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetContentLength"
+></A
+><B
+>getContentLength</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlInput.html#getContentLength"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>compute the length of the data for a document read previously
+ by a call of 'getUrlContents. The result is stored as an attribute
+ value in the document root node. the attribute name is <TT
+><A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_contentLength"
+>a_contentLength</A
+></TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AguessDocEncoding"
+></A
+><B
+>guessDocEncoding</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlInput.html#guessDocEncoding"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>guessEncoding uses encoding attribute and content
+ to determine the encoding scheme.
+</P
+><P
+>it's assumed that an encoding spec has been tried to parse before guessing the encoding.
+</P
+><P
+>UTF-8 is the default encoding
+</P
+><P
+>other supported encodings are ISO-8859-1 (also known as ISO-Latin-1),
+ US-ASCII, UTF-16 or ISO-10646-UCS-2, UTF-16BE, UTF-16LE
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3ArunInLocalURIContext"
+></A
+><B
+>runInLocalURIContext</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlInput.html#runInLocalURIContext"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>filter command for saving and restoring
+ the base URI
+</P
+><UL
+><LI
+> 1.parameter f :  the filter that possible changes the base URI
+</LI
+><LI
+> returns : a filter with the same effect as f, that restores the base URI after application of f
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3ArunInNewURIContext"
+></A
+><B
+>runInNewURIContext</B
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlInput.html#runInNewURIContext"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>filter command for running an action in a new URI context
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetBaseURI"
+></A
+><B
+>getBaseURI</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlInput.html#getBaseURI"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>read the current base URI
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-Parser-XmlInput.html#v%3AsetBaseURI"
+>setBaseURI</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AsetBaseURI"
+></A
+><B
+>setBaseURI</B
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state ()</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlInput.html#setBaseURI"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>set the base URI, all other URIs are handled relative to this base URI
+</P
+><P
+>the default base URI is <TT
+>file:///&lt;current-working-dir&gt;/</TT
+>
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-Parser-XmlInput.html#v%3AgetBaseURI"
+>getBaseURI</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetAbsolutURI"
+></A
+><B
+>getAbsolutURI</B
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlInput.html#getAbsolutURI"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>transform an URI into an absolut URI using the current base URI
+</P
+><UL
+><LI
+> 1.parameter uri :  the URI as string
+</LI
+><LI
+> returns : the absolut URI as string or &quot;&quot; in case of an error
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AisStandaloneDocument"
+></A
+><B
+>isStandaloneDocument</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>XState</A
+> state Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlInput.html#isStandaloneDocument"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>predicate for testing the standalone document attribute
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Parser-XmlOutput.html b/doc/hxt-filter/Text-XML-HXT-Parser-XmlOutput.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Parser-XmlOutput.html
@@ -0,0 +1,555 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Parser.XmlOutput</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlOutput.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Parser.XmlOutput</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+>output functions
+ implemented as filer
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AputXmlDoc"
+>putXmlDoc</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AputXmlDocToFile"
+>putXmlDocToFile</A
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AputXmlTree"
+>putXmlTree</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AputXmlSource"
+>putXmlSource</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AhPutXmlDoc"
+>hPutXmlDoc</A
+> :: Handle -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AhPutXmlTree"
+>hPutXmlTree</A
+> :: Handle -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AhPutXmlSource"
+>hPutXmlSource</A
+> :: Handle -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AtraceF"
+>traceF</A
+> :: Int -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AtraceMsg"
+>traceMsg</A
+> :: Int -&gt; String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AtraceTree"
+>traceTree</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AtraceSource"
+>traceSource</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AputXmlDoc"
+></A
+><B
+>putXmlDoc</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlOutput.html#putXmlDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>document output for standard output
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-Parser-XmlOutput.html#v%3AhPutXmlDoc"
+>hPutXmlDoc</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AputXmlDocToFile"
+></A
+><B
+>putXmlDocToFile</B
+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlOutput.html#putXmlDocToFile"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>document output on a given file name
+</P
+><P
+>Result is the input document
+</P
+><P
+>see also : <TT
+><A HREF="Text-XML-HXT-Parser-XmlOutput.html#v%3AhPutXmlDoc"
+>hPutXmlDoc</A
+></TT
+>, <TT
+><A HREF="Text-XML-HXT-Parser-XmlOutput.html#v%3AputXmlDoc"
+>putXmlDoc</A
+></TT
+>
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AputXmlTree"
+></A
+><B
+>putXmlTree</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlOutput.html#putXmlTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AputXmlSource"
+></A
+><B
+>putXmlSource</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlOutput.html#putXmlSource"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AhPutXmlDoc"
+></A
+><B
+>hPutXmlDoc</B
+> :: Handle -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlOutput.html#hPutXmlDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>document output for arbitrary files.
+</P
+><P
+>Result is the input document
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AhPutXmlTree"
+></A
+><B
+>hPutXmlTree</B
+> :: Handle -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlOutput.html#hPutXmlTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>output of tree representation for trace
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AhPutXmlSource"
+></A
+><B
+>hPutXmlSource</B
+> :: Handle -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlOutput.html#hPutXmlSource"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>output of text representation for trace
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AtraceF"
+></A
+><B
+>traceF</B
+> :: Int -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlOutput.html#traceF"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AtraceMsg"
+></A
+><B
+>traceMsg</B
+> :: Int -&gt; String -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlOutput.html#traceMsg"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AtraceTree"
+></A
+><B
+>traceTree</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlOutput.html#traceTree"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AtraceSource"
+></A
+><B
+>traceSource</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlOutput.html#traceSource"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Parser-XmlParser.html b/doc/hxt-filter/Text-XML-HXT-Parser-XmlParser.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Parser-XmlParser.html
@@ -0,0 +1,224 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Parser.XmlParser</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlParser.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Parser.XmlParser</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+>Xml Parser: the main parse filter 
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+>module <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-Parser-XmlParsec.html"
+>Text.XML.HXT.Parser.XmlParsec</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-Parser-XmlTokenParser.html"
+>Text.XML.HXT.Parser.XmlTokenParser</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AparseXmlDoc"
+>parseXmlDoc</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AsubstXmlEntities"
+>substXmlEntities</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-Parser-XmlParsec.html"
+>Text.XML.HXT.Parser.XmlParsec</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-Parser-XmlTokenParser.html"
+>Text.XML.HXT.Parser.XmlTokenParser</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AparseXmlDoc"
+></A
+><B
+>parseXmlDoc</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlParser.html#parseXmlDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>The monadic parser for a whole document.
+ input must be a root node with a single text child.
+ Error messages are issued and global error state is set.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AsubstXmlEntities"
+></A
+><B
+>substXmlEntities</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Parser-XmlParser.html#substXmlEntities"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>Filter for substitution of all occurences of the predefined XML entites quot, amp, lt, gt, apos
+ by equivalent character references
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Parser.html b/doc/hxt-filter/Text-XML-HXT-Parser.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Parser.html
@@ -0,0 +1,178 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Parser</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Parser.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Parser</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Simple parse functions.
+</P
+><P
+>the <A HREF="main.html"
+>main</A
+> building blocks for an application.
+ this module exports all important functions for parsing, validating and transforming XML.
+ it also exports all basic datatypes and functions of the toolbox.
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-DOM.html"
+>Text.XML.HXT.DOM</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-Parser-XmlParser.html"
+>Text.XML.HXT.Parser.XmlParser</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-Parser-HtmlParser.html"
+>Text.XML.HXT.Parser.HtmlParser</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-Parser-XmlInput.html"
+>Text.XML.HXT.Parser.XmlInput</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-Parser-XmlOutput.html"
+>Text.XML.HXT.Parser.XmlOutput</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-Parser-DTDProcessing.html"
+>Text.XML.HXT.Parser.DTDProcessing</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-Parser-MainFunctions.html"
+>Text.XML.HXT.Parser.MainFunctions</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-Validator-Validation.html"
+>Text.XML.HXT.Validator.Validation</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Validator-AttributeValueValidation.html b/doc/hxt-filter/Text-XML-HXT-Validator-AttributeValueValidation.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Validator-AttributeValueValidation.html
@@ -0,0 +1,220 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Validator.AttributeValueValidation</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Validator-AttributeValueValidation.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Validator.AttributeValueValidation</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+>This module provides functions for validating attributes.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AcheckAttributeValue"
+>checkAttributeValue</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AnormalizeAttributeValue"
+>normalizeAttributeValue</A
+> :: Maybe <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String -&gt; String</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AcheckAttributeValue"
+></A
+><B
+>checkAttributeValue</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-AttributeValueValidation.html#checkAttributeValue"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Checks if the attribute value meets the lexical constraints of its type.
+</P
+><UL
+><LI
+> 1.parameter dtdPart :  the children of the <TT
+>DOCTYPE</TT
+> node
+</LI
+><LI
+> 2.parameter attrDecl :  the declaration of the attribute from the DTD
+</LI
+><LI
+> returns : a function which takes an element (XTag or XDTD ATTLIST),
+                    checks if the attribute value meets the lexical constraints
+                    of its type and returns a list of errors
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AnormalizeAttributeValue"
+></A
+><B
+>normalizeAttributeValue</B
+> :: Maybe <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; String -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-AttributeValueValidation.html#normalizeAttributeValue"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Normalizes an attribute value with respect to its type. (3.3.3 / p.29 in Spec)
+</P
+><UL
+><LI
+> 1.parameter attrDecl :  the declaration of the attribute from the DTD. Expected
+                   is a list. If the list is empty, no declaration exists.
+</LI
+><LI
+> 2.parameter value :  the attribute value to be normalized
+</LI
+><LI
+> returns : the normalized value
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Validator-DTDValidation.html b/doc/hxt-filter/Text-XML-HXT-Validator-DTDValidation.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Validator-DTDValidation.html
@@ -0,0 +1,199 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Validator.DTDValidation</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Validator-DTDValidation.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Validator.DTDValidation</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+>This module provides functions for validating the DTD of XML documents
+ represented as XmlTree.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AremoveDoublicateDefs"
+>removeDoublicateDefs</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AvalidateDTD"
+>validateDTD</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AremoveDoublicateDefs"
+></A
+><B
+>removeDoublicateDefs</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-DTDValidation.html#removeDoublicateDefs"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Removes doublicate declarations from the DTD, which first declaration is
+ binding. This is the case for ATTLIST and ENTITY declarations.
+</P
+><UL
+><LI
+> returns : A function that replaces the children of DOCTYPE nodes by a list
+               where all multiple declarations are removed.
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AvalidateDTD"
+></A
+><B
+>validateDTD</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-DTDValidation.html#validateDTD"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Validate a DTD.
+</P
+><UL
+><LI
+> returns : a functions which takes the DTD subset of the XmlTree, checks
+                  if the DTD is valid and returns a list of errors
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Validator-DocTransformation.html b/doc/hxt-filter/Text-XML-HXT-Validator-DocTransformation.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Validator-DocTransformation.html
@@ -0,0 +1,164 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Validator.DocTransformation</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Validator-DocTransformation.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Validator.DocTransformation</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+>This module provides functions for transforming XML documents represented as
+ XmlTree with respect to its DTD.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Atransform"
+>transform</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Atransform"
+></A
+><B
+>transform</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-DocTransformation.html#transform"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>filter for transforming the document.
+</P
+><UL
+><LI
+> 1.parameter dtdPart :  the DTD subset (Node <TT
+>DOCTYPE</TT
+>) of the XmlTree
+</LI
+><LI
+> 2.parameter doc :  the document subset of the XmlTree
+</LI
+><LI
+> returns : a list of errors
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Validator-DocValidation.html b/doc/hxt-filter/Text-XML-HXT-Validator-DocValidation.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Validator-DocValidation.html
@@ -0,0 +1,164 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Validator.DocValidation</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Validator-DocValidation.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Validator.DocValidation</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+>This module provides functions for validating XML Documents represented as
+ XmlTree.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AvalidateDoc"
+>validateDoc</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AvalidateDoc"
+></A
+><B
+>validateDoc</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-DocValidation.html#validateDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Validate a document.
+</P
+><UL
+><LI
+> 1.parameter dtdPart :  the DTD subset (Node <TT
+>DOCTYPE</TT
+>) of the XmlTree
+</LI
+><LI
+> 2.parameter doc :  the document subset of the XmlTree
+</LI
+><LI
+> returns : a list of errors
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Validator-IdValidation.html b/doc/hxt-filter/Text-XML-HXT-Validator-IdValidation.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Validator-IdValidation.html
@@ -0,0 +1,167 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Validator.IdValidation</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Validator-IdValidation.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Validator.IdValidation</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+>This module provides functions for checking special ID<EM
+>IDREF</EM
+>IDREFS constraints.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AvalidateIds"
+>validateIds</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AvalidateIds"
+></A
+><B
+>validateIds</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
+>XmlTree</A
+> -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-IdValidation.html#validateIds"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Perform the validation of the ID<EM
+>IDREF</EM
+>IDREFS constraints.
+</P
+><UL
+><LI
+> 1.parameter dtdPart :  the DTD subset (Node <TT
+>DOCTYPE</TT
+>) of the XmlTree
+</LI
+><LI
+> 2.parameter doc :  the document subset of the XmlTree
+</LI
+><LI
+> returns : a list of errors
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Validator-RE.html b/doc/hxt-filter/Text-XML-HXT-Validator-RE.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Validator-RE.html
@@ -0,0 +1,1104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Validator.RE</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Validator-RE.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Validator.RE</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>A module for regular expression matching based on derivatives of regular expressions.
+</P
+><P
+>The code was taken from Joe English (<A HREF="http://www.flightlab.com/~joe/sgml/validate.html"
+>http://www.flightlab.com/~joe/sgml/validate.html</A
+>).
+ Tested and extended by Martin Schmidt.
+</P
+><P
+>Further references for the algorithm:
+</P
+><P
+>Janusz A. Brzozowski.
+</P
+><P
+>Derivatives of Regular Expressions. Journal of the ACM, Volume 11, Issue 4, 1964. 
+</P
+><P
+>Mark Hopkins.
+</P
+><P
+>Regular Expression Package. Posted to comp.compilers, 1994.
+      Available per FTP at <A HREF="ftp://iecc.com/pub/file/regex.tar.gz"
+>ftp://iecc.com/pub/file/regex.tar.gz</A
+>.
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>data</SPAN
+> <A HREF="#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+>= <A HREF="#v%3ARE_ZERO"
+>RE_ZERO</A
+> String</TD
+></TR
+><TR
+><TD CLASS="decl"
+>| <A HREF="#v%3ARE_UNIT"
+>RE_UNIT</A
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>| <A HREF="#v%3ARE_SYM"
+>RE_SYM</A
+> a</TD
+></TR
+><TR
+><TD CLASS="decl"
+>| <A HREF="#v%3ARE_DOT"
+>RE_DOT</A
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>| <A HREF="#v%3ARE_REP"
+>RE_REP</A
+> (<A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a)</TD
+></TR
+><TR
+><TD CLASS="decl"
+>| <A HREF="#v%3ARE_PLUS"
+>RE_PLUS</A
+> (<A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a)</TD
+></TR
+><TR
+><TD CLASS="decl"
+>| <A HREF="#v%3ARE_OPT"
+>RE_OPT</A
+> (<A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a)</TD
+></TR
+><TR
+><TD CLASS="decl"
+>| <A HREF="#v%3ARE_SEQ"
+>RE_SEQ</A
+> (<A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a) (<A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a)</TD
+></TR
+><TR
+><TD CLASS="decl"
+>| <A HREF="#v%3ARE_ALT"
+>RE_ALT</A
+> (<A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a) (<A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a)</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_unit"
+>re_unit</A
+> :: <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_zero"
+>re_zero</A
+> :: String -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_sym"
+>re_sym</A
+> :: a -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_rep"
+>re_rep</A
+> :: <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_plus"
+>re_plus</A
+> :: <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_opt"
+>re_opt</A
+> :: <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_seq"
+>re_seq</A
+> :: <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_alt"
+>re_alt</A
+> :: <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_dot"
+>re_dot</A
+> :: <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AcheckRE"
+>checkRE</A
+> :: Show a =&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Amatches"
+>matches</A
+> :: (Eq a, Show a) =&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; [a] -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Anullable"
+>nullable</A
+> :: Show a =&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; Bool</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AprintRE"
+>printRE</A
+> :: Show a =&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; String</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><SPAN CLASS="keyword"
+>data</SPAN
+> <A NAME="t%3ARE"
+></A
+><B
+>RE</B
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-RE.html#RE"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="ndoc"
+>Data type for regular expressions.
+</TD
+></TR
+><TR
+><TD CLASS="section4"
+>Constructors</TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+><A NAME="v%3ARE_ZERO"
+></A
+><B
+>RE_ZERO</B
+> String</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+><TR
+><TD CLASS="arg"
+><A NAME="v%3ARE_UNIT"
+></A
+><B
+>RE_UNIT</B
+></TD
+><TD CLASS="rdoc"
+></TD
+></TR
+><TR
+><TD CLASS="arg"
+><A NAME="v%3ARE_SYM"
+></A
+><B
+>RE_SYM</B
+> a</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+><TR
+><TD CLASS="arg"
+><A NAME="v%3ARE_DOT"
+></A
+><B
+>RE_DOT</B
+></TD
+><TD CLASS="rdoc"
+></TD
+></TR
+><TR
+><TD CLASS="arg"
+><A NAME="v%3ARE_REP"
+></A
+><B
+>RE_REP</B
+> (<A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a)</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+><TR
+><TD CLASS="arg"
+><A NAME="v%3ARE_PLUS"
+></A
+><B
+>RE_PLUS</B
+> (<A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a)</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+><TR
+><TD CLASS="arg"
+><A NAME="v%3ARE_OPT"
+></A
+><B
+>RE_OPT</B
+> (<A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a)</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+><TR
+><TD CLASS="arg"
+><A NAME="v%3ARE_SEQ"
+></A
+><B
+>RE_SEQ</B
+> (<A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a) (<A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a)</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+><TR
+><TD CLASS="arg"
+><A NAME="v%3ARE_ALT"
+></A
+><B
+>RE_ALT</B
+> (<A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a) (<A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a)</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section4"
+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:RE')" ALT="show/hide"
+> Instances</TD
+></TR
+><TR
+><TD CLASS="body"
+><DIV ID="i:RE" STYLE="display:block;"
+><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+>Eq a =&gt; Eq (<A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a)</TD
+></TR
+><TR
+><TD CLASS="decl"
+>Show a =&gt; Show (<A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a)</TD
+></TR
+></TABLE
+></DIV
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_unit"
+></A
+><B
+>re_unit</B
+> :: <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-RE.html#re_unit"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs a regular expression for an empty sequence.
+</P
+><UL
+><LI
+> returns : regular expression for an empty sequence
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_zero"
+></A
+><B
+>re_zero</B
+> :: String -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-RE.html#re_zero"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs a regular expression for an empty set.
+</P
+><UL
+><LI
+> 1.parameter errMsg :  error message
+</LI
+><LI
+> returns : regular expression for an empty set
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_sym"
+></A
+><B
+>re_sym</B
+> :: a -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-RE.html#re_sym"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs a regular expression for accepting a symbol
+</P
+><UL
+><LI
+> 1.parameter sym :  the symbol to be accepted
+</LI
+><LI
+> returns : regular expression for accepting a symbol
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_rep"
+></A
+><B
+>re_rep</B
+> :: <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-RE.html#re_rep"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs an optional repetition (*) of a regular expression
+</P
+><UL
+><LI
+> 1.parameter re_a :  regular expression to be repeted
+</LI
+><LI
+> returns : new regular expression
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_plus"
+></A
+><B
+>re_plus</B
+> :: <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-RE.html#re_plus"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs a repetition (+) of a regular expression
+</P
+><UL
+><LI
+> 1.parameter re_a :  regular expression to be repeted
+</LI
+><LI
+> returns : new regular expression
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_opt"
+></A
+><B
+>re_opt</B
+> :: <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-RE.html#re_opt"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs an option (?) of a regular expression
+</P
+><UL
+><LI
+> 1.parameter re_a :  regular expression to be optional
+</LI
+><LI
+> returns : new regular expression
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_seq"
+></A
+><B
+>re_seq</B
+> :: <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-RE.html#re_seq"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs a sequence (,) of two regular expressions
+</P
+><UL
+><LI
+> 1.parameter re_a :  first regular expression in sequence
+</LI
+><LI
+> 2.parameter re_b :  second regular expression in sequence
+</LI
+><LI
+> returns : new regular expression
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_alt"
+></A
+><B
+>re_alt</B
+> :: <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-RE.html#re_alt"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs an alternative (|) of two regular expressions
+</P
+><UL
+><LI
+> 1.parameter re_a :  first regular expression of alternative
+</LI
+><LI
+> 2.parameter re_b :  second regular expression of alternative
+</LI
+><LI
+> returns : new regular expression
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_dot"
+></A
+><B
+>re_dot</B
+> :: <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-RE.html#re_dot"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs a regular expression for accepting any singel symbol
+</P
+><UL
+><LI
+> returns : regular expression for accepting any singel symbol
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AcheckRE"
+></A
+><B
+>checkRE</B
+> :: Show a =&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-RE.html#checkRE"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Checks if an input matched a regular expression. The function should be
+ called after matches.
+</P
+><P
+>Was the sentence used in <TT
+>matches</TT
+> in the language of the regular expression?
+ -&gt; matches e s == s `in` L(e)?
+</P
+><UL
+><LI
+> 1.parameter re :  the derived regular expression
+</LI
+><LI
+> returns : empty String if input matched the regular expression, otherwise
+               an error message is returned
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Amatches"
+></A
+><B
+>matches</B
+> :: (Eq a, Show a) =&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; [a] -&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-RE.html#matches"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Derives a regular expression with respect to a sentence.
+</P
+><UL
+><LI
+> 1.parameter re :  regular expression
+</LI
+><LI
+> 2.parameter s :  sentence to which the regular expression is applied
+</LI
+><LI
+> returns : the derived regular expression
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Anullable"
+></A
+><B
+>nullable</B
+> :: Show a =&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; Bool</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-RE.html#nullable"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Checks if a regular expression matches the empty sequence.
+</P
+><P
+>nullable e == [] `in` L(e)
+</P
+><P
+>This check indicates if a regular expression fits to a sentence or not.
+</P
+><UL
+><LI
+> 1.parameter re :  regular expression to be checked
+</LI
+><LI
+> returns : true if regular expression matches the empty sequence,
+                otherwise false
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AprintRE"
+></A
+><B
+>printRE</B
+> :: Show a =&gt; <A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>RE</A
+> a -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-RE.html#printRE"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs a string representation of a regular expression.
+</P
+><UL
+><LI
+> 1.parameter re :  a regular expression
+</LI
+><LI
+> returns : the string representation of the regular expression
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Validator-Validation.html b/doc/hxt-filter/Text-XML-HXT-Validator-Validation.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Validator-Validation.html
@@ -0,0 +1,184 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Validator.Validation</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Validator-Validation.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Validator.Validation</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>This module provides a state filter as a main function for validating XML documents.
+</P
+><P
+>The real validation is done with pure filters from module <TT
+><A HREF="Text-XML-HXT-Validator.html#t%3AValidationFilter"
+>ValidationFilter</A
+></TT
+>
+</P
+><P
+>Author : .\artin Schmidt
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetValidatedDoc"
+>getValidatedDoc</A
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-Validator-ValidationFilter.html"
+>Text.XML.HXT.Validator.ValidationFilter</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetValidatedDoc"
+></A
+><B
+>getValidatedDoc</B
+> :: <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>XmlStateFilter</A
+> state</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-Validation.html#getValidatedDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>monadic filter for validating and transforming a wellformed document.
+</P
+><P
+>the <A HREF="main.html"
+>main</A
+> function for validation.
+</P
+><P
+>the input tree must consist of a root node with a complete document and DTD.
+ Result is the single element list containing same tree but tranformed with respect to the DTD,
+ or, in case of errors, the root with an empty list of children
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Text-XML-HXT-Validator-ValidationFilter.html"
+>Text.XML.HXT.Validator.ValidationFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Validator-ValidationFilter.html b/doc/hxt-filter/Text-XML-HXT-Validator-ValidationFilter.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Validator-ValidationFilter.html
@@ -0,0 +1,387 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Validator.ValidationFilter</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Validator-ValidationFilter.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Validator.ValidationFilter</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+>This module provides functions for validating XML documents represented as
+ XmlTree.
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AgetDTDSubset"
+>getDTDSubset</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Avalidate"
+>validate</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AvalidateDTD"
+>validateDTD</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AvalidateDoc"
+>validateDoc</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AremoveDoublicateDefs"
+>removeDoublicateDefs</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Atransform"
+>transform</A
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AgetDTDSubset"
+></A
+><B
+>getDTDSubset</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-ValidationFilter.html#getDTDSubset"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Avalidate"
+></A
+><B
+>validate</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-ValidationFilter.html#validate"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Main validation filter. Check if the DTD and the document are valid.
+</P
+><UL
+><LI
+> returns : a function which expects a complete document as XmlTree input
+                     and returns a list of all errors found.
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AvalidateDTD"
+></A
+><B
+>validateDTD</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-ValidationFilter.html#validateDTD"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Check if the DTD is valid.
+</P
+><UL
+><LI
+> returns : a function which expects an XmlTree from the parser as input
+                     and returns a list of all errors found in the DTD.
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AvalidateDoc"
+></A
+><B
+>validateDoc</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-ValidationFilter.html#validateDoc"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Check if the document corresponds to the given DTD.
+</P
+><UL
+><LI
+> returns : a function which expects a complete document as XmlTree input
+                     and returns a list of all errors found in the content part.
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AremoveDoublicateDefs"
+></A
+><B
+>removeDoublicateDefs</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-ValidationFilter.html#removeDoublicateDefs"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Removes doublicate declarations from the DTD which first declaration is
+ binding. This is the case for ATTLIST and ENTITY declarations.
+</P
+><UL
+><LI
+> returns : A function that replaces the children of DOCTYPE nodes by a list
+               where all multiple declarations are removed.
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Atransform"
+></A
+><B
+>transform</B
+> :: <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-XmlTreeTypes.html#t%3AXmlFilter"
+>XmlFilter</A
+></TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-ValidationFilter.html#transform"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>filter for transforming a document with respect to the given DTD.
+</P
+><P
+>Validating parsers
+ are expected to  normalize attribute values and add default values.
+ This function should be called after a successful validation.
+</P
+><UL
+><LI
+> returns : a function which expects a complete XML document tree
+                and returns the transformed XmlTree
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/Text-XML-HXT-Validator-XmlRE.html b/doc/hxt-filter/Text-XML-HXT-Validator-XmlRE.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/Text-XML-HXT-Validator-XmlRE.html
@@ -0,0 +1,838 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Text.XML.HXT.Validator.XmlRE</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="src/Text-XML-HXT-Validator-XmlRE.html"
+>Source code</A
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Text.XML.HXT.Validator.XmlRE</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>A module for regular expression matching, adapted for XML DTDs.
+</P
+><P
+>This module is based on the module RE.
+</P
+><P
+>Author .\artin Schmidt
+</P
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>data</SPAN
+> <A HREF="#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AcheckRE"
+>checkRE</A
+> :: Show a =&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Amatches"
+>matches</A
+> :: <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AprintRE"
+>printRE</A
+> :: Show a =&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_unit"
+>re_unit</A
+> :: <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_zero"
+>re_zero</A
+> :: String -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_sym"
+>re_sym</A
+> :: a -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_rep"
+>re_rep</A
+> :: <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_plus"
+>re_plus</A
+> :: <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_opt"
+>re_opt</A
+> :: <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_seq"
+>re_seq</A
+> :: <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_alt"
+>re_alt</A
+> :: <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Are_dot"
+>re_dot</A
+> :: <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><SPAN CLASS="keyword"
+>data</SPAN
+> <A NAME="t%3ARE"
+></A
+><B
+>RE</B
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-XmlRE.html#RE"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="ndoc"
+>Data type for regular expressions.
+</TD
+></TR
+><TR
+><TD CLASS="section4"
+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:RE')" ALT="show/hide"
+> Instances</TD
+></TR
+><TR
+><TD CLASS="body"
+><DIV ID="i:RE" STYLE="display:block;"
+><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+>Eq a =&gt; Eq (<A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a)</TD
+></TR
+><TR
+><TD CLASS="decl"
+>Show a =&gt; Show (<A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a)</TD
+></TR
+></TABLE
+></DIV
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AcheckRE"
+></A
+><B
+>checkRE</B
+> :: Show a =&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-XmlRE.html#checkRE"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Checks if an input matched a regular expression. The function should be
+ called after matches.
+</P
+><P
+>Was the sentence used in <TT
+>matches</TT
+> in the language of the regular expression?
+ -&gt; matches e s == s `in` L(e)?
+</P
+><UL
+><LI
+> 1.parameter re :  the derived regular expression
+</LI
+><LI
+> returns : empty String if input matched the regular expression, otherwise
+               an error message is returned
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Amatches"
+></A
+><B
+>matches</B
+> :: <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> String -&gt; <A HREF="/usr/local/share/doc/hxt-8.0.0/html/Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTrees"
+>XmlTrees</A
+> -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-XmlRE.html#matches"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Derives a regular expression with respect to a list of elements.
+</P
+><UL
+><LI
+> 1.parameter re :  regular expression
+</LI
+><LI
+> 2.parameter list :  list of elements to which the regular expression is applied
+</LI
+><LI
+> returns : the derived regular expression
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AprintRE"
+></A
+><B
+>printRE</B
+> :: Show a =&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; String</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-XmlRE.html#printRE"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs a string representation of a regular expression.
+</P
+><UL
+><LI
+> 1.parameter re :  a regular expression
+</LI
+><LI
+> returns : the string representation of the regular expression
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_unit"
+></A
+><B
+>re_unit</B
+> :: <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-XmlRE.html#re_unit"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs a regular expression for an empty sequence.
+</P
+><UL
+><LI
+> returns : regular expression for an empty sequence
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_zero"
+></A
+><B
+>re_zero</B
+> :: String -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-XmlRE.html#re_zero"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs a regular expression for an empty set.
+</P
+><UL
+><LI
+> 1.parameter errMsg :  error message
+</LI
+><LI
+> returns : regular expression for an empty set
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_sym"
+></A
+><B
+>re_sym</B
+> :: a -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-XmlRE.html#re_sym"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs a regular expression for accepting a symbol
+</P
+><UL
+><LI
+> 1.parameter sym :  the symbol to be accepted
+</LI
+><LI
+> returns : regular expression for accepting a symbol
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_rep"
+></A
+><B
+>re_rep</B
+> :: <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-XmlRE.html#re_rep"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs an optional repetition (*) of a regular expression
+</P
+><UL
+><LI
+> 1.parameter re_a :  regular expression to be repeted
+</LI
+><LI
+> returns : new regular expression
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_plus"
+></A
+><B
+>re_plus</B
+> :: <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-XmlRE.html#re_plus"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs a repetition (+) of a regular expression
+</P
+><UL
+><LI
+> 1.parameter re_a :  regular expression to be repeted
+</LI
+><LI
+> returns : new regular expression
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_opt"
+></A
+><B
+>re_opt</B
+> :: <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-XmlRE.html#re_opt"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs an option (?) of a regular expression
+</P
+><UL
+><LI
+> 1.parameter re_a :  regular expression to be optional
+</LI
+><LI
+> returns : new regular expression
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_seq"
+></A
+><B
+>re_seq</B
+> :: <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-XmlRE.html#re_seq"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs a sequence (,) of two regular expressions
+</P
+><UL
+><LI
+> 1.parameter re_a :  first regular expression in sequence
+</LI
+><LI
+> 2.parameter re_b :  second regular expression in sequence
+</LI
+><LI
+> returns : new regular expression
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_alt"
+></A
+><B
+>re_alt</B
+> :: <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a -&gt; <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-XmlRE.html#re_alt"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs an alternative (|) of two regular expressions
+</P
+><UL
+><LI
+> 1.parameter re_a :  first regular expression of alternative
+</LI
+><LI
+> 2.parameter re_b :  second regular expression of alternative
+</LI
+><LI
+> returns : new regular expression
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Are_dot"
+></A
+><B
+>re_dot</B
+> :: <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>RE</A
+> a</TD
+><TD CLASS="declbut"
+><A HREF="src/Text-XML-HXT-Validator-XmlRE.html#re_dot"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Constructs a regular expression for accepting any singel symbol
+</P
+><UL
+><LI
+> returns : regular expression for accepting any singel symbol
+</LI
+></UL
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-36.html b/doc/hxt-filter/doc-index-36.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-36.html
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index ($)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>$$</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>$$&lt;</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-43.html b/doc/hxt-filter/doc-index-43.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-43.html
@@ -0,0 +1,198 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (+)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>+++</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>+++&gt;&gt;</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>++=</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3A%2B%2B%3D"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>+=</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3A%2B%3D"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-46.html b/doc/hxt-filter/doc-index-46.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-46.html
@@ -0,0 +1,188 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (.)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>..&gt;</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>.&gt;</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>.&gt;&gt;</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-47.html b/doc/hxt-filter/doc-index-47.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-47.html
@@ -0,0 +1,176 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (/)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>/&gt;</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-58.html b/doc/hxt-filter/doc-index-58.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-58.html
@@ -0,0 +1,176 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (:)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>:-&gt;</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-60.html b/doc/hxt-filter/doc-index-60.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-60.html
@@ -0,0 +1,176 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (&lt;)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>&lt;/</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-A.html b/doc/hxt-filter/doc-index-A.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-A.html
@@ -0,0 +1,762 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (A)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>ATTLIST</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>AssocList</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>AttrName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>Attributes</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>aName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_canonicalize</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_check_namespaces</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_check_restrictions</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_collect_errors</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_column</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_contentLength</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_default</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_default_baseuri</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_do_not_canonicalize</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_do_not_check_namespaces</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_do_not_check_restrictions</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_do_not_collect_errors</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_do_not_issue_errors</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_do_not_issue_warnings</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_do_not_preserve_comment</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_do_not_remove_whitespace</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_do_not_use_curl</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_do_not_validate</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_do_not_validate_externalRef</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_do_not_validate_include</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_encoding</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_error</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_error_log</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_help</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_indent</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_issue_errors</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_issue_warnings</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_kind</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_line</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_modifier</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_module</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_name</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_no_xml_pi</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_options_curl</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_output_changes</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_output_encoding</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_output_file</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_output_html</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_output_xml</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_parse_by_mimetype</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_parse_html</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_parse_xml</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_peref</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_preserve_comment</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_propagate_errors</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_proxy</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_relax_schema</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_remove_whitespace</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_show_haskell</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_show_tree</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_source</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_standalone</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_status</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_tagsoup</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_trace</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_type</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_url</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_use_curl</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_validate</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_validate_externalRef</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_validate_include</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_value</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_verbose</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_version</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_xml</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>a_xmlns</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>add1Attr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aadd1Attr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>addAttr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AaddAttr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>addAttrInt</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AaddAttrInt"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>addAttrl</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AaddAttrl"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>addDTDAttr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AaddDTDAttr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>addEntries</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>addEntry</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>addFatal</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AaddFatal"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>addHeadlineToXmlDoc</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AaddHeadlineToXmlDoc"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>addXmlPiToDoc</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AaddXmlPiToDoc"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>allBut</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>allBut1</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>application_xhtml</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>application_xml</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>application_xml_dtd</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>application_xml_external_parsed_entity</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>asciiLetter</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>atag</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aatag"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>attr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aattr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>attrNodes</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>attrValue</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>attrValueT</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>attrValueT'</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>attrlOfDTD</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AattrlOfDTD"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-B.html b/doc/hxt-filter/doc-index-B.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-B.html
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (B)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>bar</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>buildUniversalName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-C.html b/doc/hxt-filter/doc-index-C.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-C.html
@@ -0,0 +1,502 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (C)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>CONDSECT</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>CONTENT</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>ChildNodes</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>cDSect</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>c_err</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>c_fatal</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>c_ok</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>c_warn</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>canonicalizeAllNodes</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AcanonicalizeAllNodes"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>canonicalizeForXPath</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AcanonicalizeForXPath"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>canonicalizeTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AcanonicalizeTree"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>cardNTree</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>cardTree</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>cat</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>catM</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>cdata</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Acdata"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>chain</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3Achain"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>chain'</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3Achain%27"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>changeChildren</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>changeNode</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry" COLSPAN="2"
+>changeState</TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>1 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Control-Monad-MonadStateIO.html#v%3AchangeState"
+>Control.Monad.MonadStateIO</A
+></TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>2 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AchangeState"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>changeSysState</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AchangeSysState"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>changeSysStateAttrs</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AchangeSysStateAttrs"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>charData</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>charData'</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>charRef</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>charRefT</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>checkAttributeValue</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-AttributeValueValidation.html#v%3AcheckAttributeValue"
+>Text.XML.HXT.Validator.AttributeValueValidation</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>checkRE</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3AcheckRE"
+>Text.XML.HXT.Validator.RE</A
+>, <A HREF="Text-XML-HXT-Validator-XmlRE.html#v%3AcheckRE"
+>Text.XML.HXT.Validator.XmlRE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>checkResult</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AcheckResult"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>checkStatus</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AcheckStatus"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>checkWellformedDoc</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-DTDProcessing.html#v%3AcheckWellformedDoc"
+>Text.XML.HXT.Parser.DTDProcessing</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>childNodes</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>choice</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>choiceM</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>clearStatus</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AclearStatus"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>closesHtmlTag</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.HtmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>cmt</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Acmt"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>collapseAllXText</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AcollapseAllXText"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>collapseXText</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AcollapseXText"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>comma</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>comment</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>concRes</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>containing</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>containingM</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>content</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>contentWithTextDecl</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-D.html b/doc/hxt-filter/doc-index-D.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-D.html
@@ -0,0 +1,258 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (D)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>DOCTYPE</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>DTDElem</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>deep</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>deepest</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>del1Attr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Adel1Attr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>delEntries</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>delEntry</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>depthNTree</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>depthTree</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>doctypedecl</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>document</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>document'</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>dq</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>dtd</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Adtd"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-E.html b/doc/hxt-filter/doc-index-E.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-E.html
@@ -0,0 +1,360 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (E)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>ELEMENT</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>ENTITY</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>element</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>emptyHtmlTags</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.HtmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>emptyRoot</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AemptyRoot"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>encName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>encodingDecl</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>entityCharT</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>entityRef</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>entityRefT</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>entityTokensT</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>entityValue</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>entityValueT</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>eq</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>equalQName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>equalQNameBy</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>equivQName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>equivUri</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>err</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aerr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>errClass</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AerrClass"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>errorMsgHandler</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AerrorMsgHandler"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>errorMsgLogging</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AerrorMsgLogging"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>errorMsgLoggingAndToStderr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AerrorMsgLoggingAndToStderr"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>errorMsgToStderr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AerrorMsgToStderr"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>escapeXmlAttrValue</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AescapeXmlAttrValue"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>escapeXmlDoc</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AescapeXmlDoc"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>escapeXmlText</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AescapeXmlText"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>etag</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aetag"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-F.html b/doc/hxt-filter/doc-index-F.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-F.html
@@ -0,0 +1,236 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (F)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>fatal</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Afatal"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>foldNTree</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>foldTree</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>formatNTree</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>formatNTreeF</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>formatTree</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>formatXmlContents</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>formatXmlTree</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>fromAttrl</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AfromAttrl"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>fromTreel</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AfromTreel"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-G.html b/doc/hxt-filter/doc-index-G.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-G.html
@@ -0,0 +1,482 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (G)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>generalOptions</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getAbsolutURI</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlInput.html#v%3AgetAbsolutURI"
+>Text.XML.HXT.Parser.XmlInput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getAttrl</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AgetAttrl"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getBaseURI</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlInput.html#v%3AgetBaseURI"
+>Text.XML.HXT.Parser.XmlInput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getChildren</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getContentLength</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlInput.html#v%3AgetContentLength"
+>Text.XML.HXT.Parser.XmlInput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getDTDSubset</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-ValidationFilter.html#v%3AgetDTDSubset"
+>Text.XML.HXT.Validator.ValidationFilter</A
+>, Text.XML.HXT.Validator.Validation, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getDTDValue</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AgetDTDValue"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getErrorMsg</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AgetErrorMsg"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getFileContents</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-ProtocolHandlerFile.html#v%3AgetFileContents"
+>Text.XML.HXT.Parser.ProtocolHandlerFile</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getHtmlDoc</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-HtmlParser.html#v%3AgetHtmlDoc"
+>Text.XML.HXT.Parser.HtmlParser</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getHttpContentsNativeOrWithCurl</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-ProtocolHandlerHttpNativeOrCurl.html#v%3AgetHttpContentsNativeOrWithCurl"
+>Text.XML.HXT.Parser.ProtocolHandlerHttpNativeOrCurl</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getHttpContentsWithCurl</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-ProtocolHandlerHttpCurl.html#v%3AgetHttpContentsWithCurl"
+>Text.XML.HXT.Parser.ProtocolHandlerHttpCurl</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getHttpContentsWithHttp</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-ProtocolHandlerHttpNative.html#v%3AgetHttpContentsWithHttp"
+>Text.XML.HXT.Parser.ProtocolHandlerHttpNative</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getName</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AgetName"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getNode</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getNsValue</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AgetNsValue"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getProtocolHandler</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-ProtocolHandler.html#v%3AgetProtocolHandler"
+>Text.XML.HXT.Parser.ProtocolHandler</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry" COLSPAN="2"
+>getState</TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>1 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Control-Monad-MonadStateIO.html#v%3AgetState"
+>Control.Monad.MonadStateIO</A
+></TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>2 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AgetState"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getSysErrorHandler</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AgetSysErrorHandler"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getSysParam</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AgetSysParam"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getSysParamInt</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AgetSysParamInt"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getSysParamTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AgetSysParamTree"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getSysParamWithDefault</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AgetSysParamWithDefault"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getSysState</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AgetSysState"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getTraceLevel</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AgetTraceLevel"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getUrlContents</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlInput.html#v%3AgetUrlContents"
+>Text.XML.HXT.Parser.XmlInput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getValidatedDoc</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-Validation.html#v%3AgetValidatedDoc"
+>Text.XML.HXT.Validator.Validation</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getValue</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AgetValue"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getWellformedDoc</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-DTDProcessing.html#v%3AgetWellformedDoc"
+>Text.XML.HXT.Parser.DTDProcessing</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getXCdata</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AgetXCdata"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getXCmt</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AgetXCmt"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getXmlContents</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlInput.html#v%3AgetXmlContents"
+>Text.XML.HXT.Parser.XmlInput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getXmlDocument</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-MainFunctions.html#v%3AgetXmlDocument"
+>Text.XML.HXT.Parser.MainFunctions</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>getXmlEntityContents</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlInput.html#v%3AgetXmlEntityContents"
+>Text.XML.HXT.Parser.XmlInput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>gt</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>guards</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>guardsM</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>guessDocEncoding</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlInput.html#v%3AguessDocEncoding"
+>Text.XML.HXT.Parser.XmlInput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-H.html b/doc/hxt-filter/doc-index-H.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-H.html
@@ -0,0 +1,270 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (H)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>hPutXmlDoc</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlOutput.html#v%3AhPutXmlDoc"
+>Text.XML.HXT.Parser.XmlOutput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>hPutXmlSource</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlOutput.html#v%3AhPutXmlSource"
+>Text.XML.HXT.Parser.XmlOutput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>hPutXmlTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlOutput.html#v%3AhPutXmlTree"
+>Text.XML.HXT.Parser.XmlOutput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>hasAttr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AhasAttr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>hasEntry</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>hasLocalPart</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AhasLocalPart"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>hasNamespace</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AhasNamespace"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>hasNsAttr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AhasNsAttr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>hasOption</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AhasOption"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>hasPrefix</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AhasPrefix"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>hasValue</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AhasValue"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>haskellRepOfXmlDoc</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AhaskellRepOfXmlDoc"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>httpPrefix</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-I.html b/doc/hxt-filter/doc-index-I.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-I.html
@@ -0,0 +1,1048 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (I)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>IfThen</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>ifM</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>iff</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>indentDoc</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AindentDoc"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>initialSysState</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AinitialSysState"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>inputOptions</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>insertChildrenAfter</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>insertChildrenAt</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>intValueOf</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AintValueOf"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry" COLSPAN="2"
+>io</TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>1 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Control-Monad-MonadStateIO.html#v%3Aio"
+>Control.Monad.MonadStateIO</A
+></TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>2 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3Aio"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isAttlist</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisAttlist"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isAttlistOfElement</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisAttlistOfElement"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isAttlistParameterEntity</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisAttlistParameterEntity"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isAttr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisAttr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isAttrNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisAttrNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isCondSect</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisCondSect"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isDTDElemNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisDTDElemNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isDTDName</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisDTDName"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isDeclaredNamespace</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.NamespaceFilter, Text.XML.HXT.DOM.Namespace, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isDefaultAttrKind</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisDefaultAttrKind"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isDoctype</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisDoctype"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isElemContentParamEntity</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisElemContentParamEntity"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isElemWithContent</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisElemWithContent"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isElement</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisElement"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isEmptyElement</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisEmptyElement"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isEmptyHtmlTag</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.HtmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isEntity</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisEntity"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isEnumAttrType</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisEnumAttrType"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isError</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisError"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isErrorNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisErrorNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isExternalParameterEntity</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisExternalParameterEntity"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isFatalError</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisFatalError"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isFixedAttrKind</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisFixedAttrKind"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isHtmlMimeType</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isIdAttrType</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisIdAttrType"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isIdRefAttrType</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisIdRefAttrType"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isInner</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isInnerHtmlTagOf</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.HtmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isInternalParameterEntity</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisInternalParameterEntity"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isLeaf</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isMixedContentElement</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisMixedContentElement"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isNCName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.NamespaceFilter, Text.XML.HXT.DOM.Namespace, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isNamespaceDecl</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-NamespaceFilter.html#v%3AisNamespaceDecl"
+>Text.XML.HXT.DOM.NamespaceFilter</A
+>, Text.XML.HXT.DOM.Namespace, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isNotation</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisNotation"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isNotationAttrType</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisNotationAttrType"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isNsAttr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisNsAttr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isNsTag</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisNsTag"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isOf</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isOfAttr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisOfAttr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isOfAttrNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisOfAttrNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isOfNode</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isOfPi</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisOfPi"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isOfPiNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisOfPiNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isOfTag</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisOfTag"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isOfTagNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisOfTagNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isOfText</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisOfText"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isOfTextNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisOfTextNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isParameterEntity</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisParameterEntity"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isPeRef</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisPeRef"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isPi</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisPi"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isPiNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisPiNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isRequiredAttrKind</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisRequiredAttrKind"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isRoot</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisRoot"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isRootNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisRootNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isStandaloneDocument</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlInput.html#v%3AisStandaloneDocument"
+>Text.XML.HXT.Parser.XmlInput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isTag</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisTag"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isTagNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisTagNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isText</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisText"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isTextNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisTextNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isUnparsedEntity</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisUnparsedEntity"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isWarning</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisWarning"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isWellformedNSDecl</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.NamespaceFilter, Text.XML.HXT.DOM.Namespace, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isWellformedQName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.NamespaceFilter, Text.XML.HXT.DOM.Namespace, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isWellformedQualifiedName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.NamespaceFilter, Text.XML.HXT.DOM.Namespace, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isWhiteSpace</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisWhiteSpace"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXAttr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisXAttr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXAttrNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisXAttrNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXCdata</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisXCdata"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXCdataNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisXCdataNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXCharRef</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisXCharRef"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXCharRefNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisXCharRefNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXCmt</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisXCmt"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXCmtNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisXCmtNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXDTD</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisXDTD"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXDTDNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisXDTDNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXEntityRef</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisXEntityRef"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXEntityRefNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisXEntityRefNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXError</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisXError"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXErrorNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisXErrorNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXPi</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisXPi"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXPiNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisXPiNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXTag</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisXTag"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXTagNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisXTagNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXText</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisXText"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXTextNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AisXTextNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXmlMimeType</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isXmlPi</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AisXmlPi"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>iso8859_1</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>iso8859_10</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>iso8859_11</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>iso8859_13</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>iso8859_14</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>iso8859_15</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>iso8859_16</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>iso8859_2</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>iso8859_3</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>iso8859_4</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>iso8859_5</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>iso8859_6</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>iso8859_7</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>iso8859_8</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>iso8859_9</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>isoLatin1</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>issueErr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AissueErr"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>issueError</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AissueError"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>issueFatal</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AissueFatal"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>issueWarn</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AissueWarn"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-K.html b/doc/hxt-filter/doc-index-K.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-K.html
@@ -0,0 +1,320 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (K)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>k_any</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_cdata</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_default</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_empty</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_entities</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_entity</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_enumeration</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_fixed</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_id</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_idref</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_idrefs</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_ignore</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_implied</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_include</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_ndata</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_nmtoken</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_nmtokens</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_notation</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_pcdata</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_peref</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_public</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_required</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>k_system</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>keyword</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>keywords</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-L.html b/doc/hxt-filter/doc-index-L.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-L.html
@@ -0,0 +1,222 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (L)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>liftF</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AliftF"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>liftMf</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>localPart</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>localPartOf</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AlocalPartOf"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>lookup1</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>lookupDef</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>lpar</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>lt</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-M.html b/doc/hxt-filter/doc-index-M.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-M.html
@@ -0,0 +1,572 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (M)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>mapNTree</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>markupdecl</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry" COLSPAN="2"
+>matches</TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>1 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3Amatches"
+>Text.XML.HXT.Validator.RE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>2 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-XmlRE.html#v%3Amatches"
+>Text.XML.HXT.Validator.XmlRE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>maybeString2XText</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmaybeString2XText"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>misc</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkLeaf</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkList</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkNTree</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkNode</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkNsName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkPrefixLocalPart</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkQAttr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkQAttr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkQAttrTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkQAttrTree"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkQName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkQTag</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkQTag"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkQTagTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkQTagTree"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkRootTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkRootTree"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkSNsName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkTree</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXAttr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXAttr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXAttrTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXAttrTree"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXCdata</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXCdata"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXCdataTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXCdataTree"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXCharRef</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXCharRef"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXCharRefTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXCharRefTree"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXCmt</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXCmt"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXCmtTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXCmtTree"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXDTD</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXDTD"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXDTDTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXDTDTree"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXEntityRef</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXEntityRef"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXEntityRefTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXEntityRefTree"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXError</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXError"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXErrorTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXErrorTree"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXNsAttr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXNsAttr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXNsAttrTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXNsAttrTree"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXNsTag</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXNsTag"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXNsTagTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXNsTagTree"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXPERefTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXPERefTree"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXPi</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXPi"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXPiTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXPiTree"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXTag</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXTag"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXTagTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXTagTree"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXText</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmkXText"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXTextTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXTextTree"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>mkXmlDeclTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AmkXmlDeclTree"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>modifyAttr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmodifyAttr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>modifyChildren</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>modifyNode</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>modifyNode0</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>modifyQName</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmodifyQName"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>modifyText</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AmodifyText"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>multi</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-N.html b/doc/hxt-filter/doc-index-N.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-N.html
@@ -0,0 +1,392 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (N)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>NAME</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>NOTATION</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry" COLSPAN="2"
+>NTree</TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>1 (Type/Class)</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>2 (Data Constructor)</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>NTrees</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>NamespaceTable</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-NamespaceFilter.html#t%3ANamespaceTable"
+>Text.XML.HXT.DOM.NamespaceFilter</A
+>, Text.XML.HXT.DOM.Namespace, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>NsEnv</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>nTreeToList</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>name</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>nameOf</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AnameOf"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>namePrefix</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>nameT</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>names</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>namespaceOf</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AnamespaceOf"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>namespaceUri</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>ncName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>neg</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>newDocument</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AnewDocument"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>newDocument'</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AnewDocument%27"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>newRoot</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AnewRoot"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>nmtoken</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>nmtokenT</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>nmtokens</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>nodesTree</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>none</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>noneM</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>normalizeAttributeValue</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-AttributeValueValidation.html#v%3AnormalizeAttributeValue"
+>Text.XML.HXT.Validator.AttributeValueValidation</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>normalizeNsUri</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>notContaining</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>nullQName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>nullable</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3Anullable"
+>Text.XML.HXT.Validator.RE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>numberLines</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AnumberLines"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>numberLinesInXmlDoc</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AnumberLinesInXmlDoc"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-O.html b/doc/hxt-filter/doc-index-O.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-O.html
@@ -0,0 +1,202 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (O)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>o</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>ofDTDequals</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AofDTDequals"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>optionIsSet</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>orElse</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>outputOptions</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-P.html b/doc/hxt-filter/doc-index-P.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-P.html
@@ -0,0 +1,502 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (P)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>PENTITY</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>PEREF</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>pI</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseDocument</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-MainFunctions.html#v%3AparseDocument"
+>Text.XML.HXT.Parser.MainFunctions</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseHtmlContent</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.HtmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseHtmlDoc</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-HtmlParser.html#v%3AparseHtmlDoc"
+>Text.XML.HXT.Parser.HtmlParser</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseHtmlDocument</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.HtmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseHtmlText</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.HtmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseNMToken</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseXmlAttrValue</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseXmlContent</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseXmlDTDPart</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseXmlDoc</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlParser.html#v%3AparseXmlDoc"
+>Text.XML.HXT.Parser.XmlParser</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseXmlDocEncodingSpec</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseXmlDocument</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseXmlEncodingSpec</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseXmlEntityEncodingSpec</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseXmlGeneralEntityValue</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseXmlPart</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>parseXmlText</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>peReference</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>peReferenceT</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>performAction</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>prefixOf</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AprefixOf"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>printRE</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3AprintRE"
+>Text.XML.HXT.Validator.RE</A
+>, <A HREF="Text-XML-HXT-Validator-XmlRE.html#v%3AprintRE"
+>Text.XML.HXT.Validator.XmlRE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>processAttr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AprocessAttr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>processAttrM</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AprocessAttrM"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>processAttrl</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AprocessAttrl"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>processBottomUp</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>processBottomUpIfNot</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>processBottomUpM</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>processChildren</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>processChildrenM</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>processDTD</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-DTDProcessing.html#v%3AprocessDTD"
+>Text.XML.HXT.Parser.DTDProcessing</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>processGeneralEntities</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-DTDProcessing.html#v%3AprocessGeneralEntities"
+>Text.XML.HXT.Parser.DTDProcessing</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>processTopDown</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>processTopDownM</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>processTopDownUntil</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>prolog</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>propagateAndValidateNamespaces</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-Namespace.html#v%3ApropagateAndValidateNamespaces"
+>Text.XML.HXT.DOM.Namespace</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>propagateNamespaceEnv</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-NamespaceFilter.html#v%3ApropagateNamespaceEnv"
+>Text.XML.HXT.DOM.NamespaceFilter</A
+>, Text.XML.HXT.DOM.Namespace, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>propagateNamespaces</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-NamespaceFilter.html#v%3ApropagateNamespaces"
+>Text.XML.HXT.DOM.NamespaceFilter</A
+>, Text.XML.HXT.DOM.Namespace, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>pubidLiteral</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>putXmlDoc</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlOutput.html#v%3AputXmlDoc"
+>Text.XML.HXT.Parser.XmlOutput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>putXmlDocToFile</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlOutput.html#v%3AputXmlDocToFile"
+>Text.XML.HXT.Parser.XmlOutput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>putXmlDocument</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-MainFunctions.html#v%3AputXmlDocument"
+>Text.XML.HXT.Parser.MainFunctions</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>putXmlSource</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlOutput.html#v%3AputXmlSource"
+>Text.XML.HXT.Parser.XmlOutput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>putXmlTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlOutput.html#v%3AputXmlTree"
+>Text.XML.HXT.Parser.XmlOutput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-Q.html b/doc/hxt-filter/doc-index-Q.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-Q.html
@@ -0,0 +1,218 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (Q)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>QName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>qName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>qattr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aqattr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>qetag</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aqetag"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>qtag</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aqtag"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>qualifiedName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>quoted</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-R.html b/doc/hxt-filter/doc-index-R.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-R.html
@@ -0,0 +1,540 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (R)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>RE</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#t%3ARE"
+>Text.XML.HXT.Validator.RE</A
+>, <A HREF="Text-XML-HXT-Validator-XmlRE.html#t%3ARE"
+>Text.XML.HXT.Validator.XmlRE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>RE_ALT</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3ARE_ALT"
+>Text.XML.HXT.Validator.RE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>RE_DOT</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3ARE_DOT"
+>Text.XML.HXT.Validator.RE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>RE_OPT</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3ARE_OPT"
+>Text.XML.HXT.Validator.RE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>RE_PLUS</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3ARE_PLUS"
+>Text.XML.HXT.Validator.RE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>RE_REP</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3ARE_REP"
+>Text.XML.HXT.Validator.RE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>RE_SEQ</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3ARE_SEQ"
+>Text.XML.HXT.Validator.RE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>RE_SYM</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3ARE_SYM"
+>Text.XML.HXT.Validator.RE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>RE_UNIT</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3ARE_UNIT"
+>Text.XML.HXT.Validator.RE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>RE_ZERO</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3ARE_ZERO"
+>Text.XML.HXT.Validator.RE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>re_alt</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3Are_alt"
+>Text.XML.HXT.Validator.RE</A
+>, <A HREF="Text-XML-HXT-Validator-XmlRE.html#v%3Are_alt"
+>Text.XML.HXT.Validator.XmlRE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>re_dot</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3Are_dot"
+>Text.XML.HXT.Validator.RE</A
+>, <A HREF="Text-XML-HXT-Validator-XmlRE.html#v%3Are_dot"
+>Text.XML.HXT.Validator.XmlRE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>re_opt</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3Are_opt"
+>Text.XML.HXT.Validator.RE</A
+>, <A HREF="Text-XML-HXT-Validator-XmlRE.html#v%3Are_opt"
+>Text.XML.HXT.Validator.XmlRE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>re_plus</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3Are_plus"
+>Text.XML.HXT.Validator.RE</A
+>, <A HREF="Text-XML-HXT-Validator-XmlRE.html#v%3Are_plus"
+>Text.XML.HXT.Validator.XmlRE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>re_rep</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3Are_rep"
+>Text.XML.HXT.Validator.RE</A
+>, <A HREF="Text-XML-HXT-Validator-XmlRE.html#v%3Are_rep"
+>Text.XML.HXT.Validator.XmlRE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>re_seq</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3Are_seq"
+>Text.XML.HXT.Validator.RE</A
+>, <A HREF="Text-XML-HXT-Validator-XmlRE.html#v%3Are_seq"
+>Text.XML.HXT.Validator.XmlRE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>re_sym</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3Are_sym"
+>Text.XML.HXT.Validator.RE</A
+>, <A HREF="Text-XML-HXT-Validator-XmlRE.html#v%3Are_sym"
+>Text.XML.HXT.Validator.XmlRE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>re_unit</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3Are_unit"
+>Text.XML.HXT.Validator.RE</A
+>, <A HREF="Text-XML-HXT-Validator-XmlRE.html#v%3Are_unit"
+>Text.XML.HXT.Validator.XmlRE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>re_zero</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-RE.html#v%3Are_zero"
+>Text.XML.HXT.Validator.RE</A
+>, <A HREF="Text-XML-HXT-Validator-XmlRE.html#v%3Are_zero"
+>Text.XML.HXT.Validator.XmlRE</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>reference</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>referenceT</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>relaxNamespace</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>relaxOptions</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>removeAllComment</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AremoveAllComment"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>removeAllWhiteSpace</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AremoveAllWhiteSpace"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>removeComment</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AremoveComment"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>removeDocWhiteSpace</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AremoveDocWhiteSpace"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry" COLSPAN="2"
+>removeDoublicateDefs</TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>1 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-DTDValidation.html#v%3AremoveDoublicateDefs"
+>Text.XML.HXT.Validator.DTDValidation</A
+></TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>2 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-ValidationFilter.html#v%3AremoveDoublicateDefs"
+>Text.XML.HXT.Validator.ValidationFilter</A
+>, Text.XML.HXT.Validator.Validation, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>removeEncodingSpec</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>removeOptions</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>removeWhiteSpace</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AremoveWhiteSpace"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>replaceAttrl</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AreplaceAttrl"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>replaceChildren</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>replaceNode</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>replaceQName</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AreplaceQName"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>rootTag</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3ArootTag"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>rpar</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry" COLSPAN="2"
+>run</TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>1 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Control-Monad-MonadStateIO.html#v%3Arun"
+>Control.Monad.MonadStateIO</A
+></TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>2 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3Arun"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>run'</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3Arun%27"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>run0</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3Arun0"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>runHtmlParser</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-HtmlParser.html#v%3ArunHtmlParser"
+>Text.XML.HXT.Parser.HtmlParser</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>runInLocalURIContext</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlInput.html#v%3ArunInLocalURIContext"
+>Text.XML.HXT.Parser.XmlInput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>runInNewURIContext</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlInput.html#v%3ArunInNewURIContext"
+>Text.XML.HXT.Parser.XmlInput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-S.html b/doc/hxt-filter/doc-index-S.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-S.html
@@ -0,0 +1,564 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (S)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>STIO</TD
+><TD CLASS="indexlinks"
+><A HREF="Control-Monad-MonadStateIO.html#v%3ASTIO"
+>Control.Monad.MonadStateIO</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>StateIO</TD
+><TD CLASS="indexlinks"
+><A HREF="Control-Monad-MonadStateIO.html#t%3AStateIO"
+>Control.Monad.MonadStateIO</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry" COLSPAN="2"
+>SysState</TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>1 (Type/Class)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysState"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>2 (Data Constructor)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3ASysState"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>SysStateAttrs</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#t%3ASysStateAttrs"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>sDDecl</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>sPace</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>sPace0</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>satisfies</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>sattr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Asattr"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>selectOptions</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>semi</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>separator</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>seqF</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>seqM</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>setBaseURI</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlInput.html#v%3AsetBaseURI"
+>Text.XML.HXT.Parser.XmlInput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>setChildren</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>setDefaultURI</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-DefaultURI.html#v%3AsetDefaultURI"
+>Text.XML.HXT.Parser.DefaultURI</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>setErrorMsgLevel</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsetErrorMsgLevel"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>setNamespace</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.NamespaceFilter, Text.XML.HXT.DOM.Namespace, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>setNode</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry" COLSPAN="2"
+>setState</TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>1 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Control-Monad-MonadStateIO.html#v%3AsetState"
+>Control.Monad.MonadStateIO</A
+></TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>2 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsetState"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>setStatus</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsetStatus"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>setSysErrorHandler</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsetSysErrorHandler"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>setSysParam</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsetSysParam"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>setSysParamInt</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsetSysParamInt"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>setSysParamTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsetSysParamTree"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>setSysState</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsetSysState"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>setSystemParams</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsetSystemParams"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>setTraceLevel</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsetTraceLevel"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>showElemType</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTreeFunctions, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>showOptions</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>showXCharRef</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AshowXCharRef"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>showXEntityRef</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AshowXEntityRef"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>showXErrors</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AshowXErrors"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>showXText</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AshowXText"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>singleChar</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>singleChars</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>singleCharsT</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>skipS</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>skipS0</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>spi</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Aspi"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>sq</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>stag</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Astag"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>statusOk</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AstatusOk"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>stringProtocol</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>substChildren</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>substHtmlEntities</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-HtmlParser.html#v%3AsubstHtmlEntities"
+>Text.XML.HXT.Parser.HtmlParser</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>substXmlEntities</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlParser.html#v%3AsubstXmlEntities"
+>Text.XML.HXT.Parser.XmlParser</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>sysState</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsysState"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>sysStateAttrs</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsysStateAttrs"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>sysStateErrorHandler</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AsysStateErrorHandler"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>systemLiteral</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-T.html b/doc/hxt-filter/doc-index-T.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-T.html
@@ -0,0 +1,496 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (T)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>TFilter</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>TSFilter</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>TagName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>Tree</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>tName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>t_root</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>t_xml</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>tag</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Atag"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>textDecl</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>textOfXNode</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AtextOfXNode"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>text_html</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>text_xml</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>text_xml_external_parsed_entity</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>this</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>thisM</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>thisNode</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>toAttrl</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AtoAttrl"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>toTreel</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AtoTreel"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>trace</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3Atrace"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>traceCmd</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AtraceCmd"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>traceF</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlOutput.html#v%3AtraceF"
+>Text.XML.HXT.Parser.XmlOutput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>traceMsg</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlOutput.html#v%3AtraceMsg"
+>Text.XML.HXT.Parser.XmlOutput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>traceSource</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlOutput.html#v%3AtraceSource"
+>Text.XML.HXT.Parser.XmlOutput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>traceState</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AtraceState"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>traceTree</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-XmlOutput.html#v%3AtraceTree"
+>Text.XML.HXT.Parser.XmlOutput</A
+>, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>trans</TD
+><TD CLASS="indexlinks"
+><A HREF="Control-Monad-MonadStateIO.html#v%3Atrans"
+>Control.Monad.MonadStateIO</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>transfAllCdata</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AtransfAllCdata"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>transfAllCdataEscaped</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AtransfAllCdataEscaped"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>transfAllCharRef</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AtransfAllCharRef"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>transfCdata</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AtransfCdata"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>transfCdataEscaped</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AtransfCdataEscaped"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>transfCharRef</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AtransfCharRef"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>transferDefaultURI</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>transferEncoding</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>transferMessage</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>transferMimeType</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>transferPrefix</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>transferProtocol</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>transferStatus</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>transferURI</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>transferVersion</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry" COLSPAN="2"
+>transform</TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>1 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-DocTransformation.html#v%3Atransform"
+>Text.XML.HXT.Validator.DocTransformation</A
+></TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>2 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-ValidationFilter.html#v%3Atransform"
+>Text.XML.HXT.Validator.ValidationFilter</A
+>, Text.XML.HXT.Validator.Validation, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>trcState</TD
+><TD CLASS="indexlinks"
+><A HREF="Control-Monad-MonadStateIO.html#v%3AtrcState"
+>Control.Monad.MonadStateIO</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>treeRepOfXmlDoc</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AtreeRepOfXmlDoc"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>txt</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Atxt"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-U.html b/doc/hxt-filter/doc-index-U.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-U.html
@@ -0,0 +1,248 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (U)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>ucs2</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>unicodeString</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>universalName</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>universalNameOf</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AuniversalNameOf"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>universalUri</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>unparseXmlDoc</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html#v%3AunparseXmlDoc"
+>Text.XML.HXT.DOM.EditFilters</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>usAscii</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>userState</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AuserState"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>utf16</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>utf16be</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>utf16le</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>utf8</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-V.html b/doc/hxt-filter/doc-index-V.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-V.html
@@ -0,0 +1,366 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (V)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>v_0</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>v_1</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>v_any</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>v_children</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>v_choice</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>v_empty</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>v_mixed</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>v_no</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>v_null</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>v_option</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>v_pcdata</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>v_plus</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>v_seq</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>v_star</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>v_yes</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>validate</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-ValidationFilter.html#v%3Avalidate"
+>Text.XML.HXT.Validator.ValidationFilter</A
+>, Text.XML.HXT.Validator.Validation, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>validate1Namespaces</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-NamespaceFilter.html#v%3Avalidate1Namespaces"
+>Text.XML.HXT.DOM.NamespaceFilter</A
+>, Text.XML.HXT.DOM.Namespace, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry" COLSPAN="2"
+>validateDTD</TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>1 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-DTDValidation.html#v%3AvalidateDTD"
+>Text.XML.HXT.Validator.DTDValidation</A
+></TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>2 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-ValidationFilter.html#v%3AvalidateDTD"
+>Text.XML.HXT.Validator.ValidationFilter</A
+>, Text.XML.HXT.Validator.Validation, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry" COLSPAN="2"
+>validateDoc</TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>1 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-DocValidation.html#v%3AvalidateDoc"
+>Text.XML.HXT.Validator.DocValidation</A
+></TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>2 (Function)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-ValidationFilter.html#v%3AvalidateDoc"
+>Text.XML.HXT.Validator.ValidationFilter</A
+>, Text.XML.HXT.Validator.Validation, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>validateIds</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Validator-IdValidation.html#v%3AvalidateIds"
+>Text.XML.HXT.Validator.IdValidation</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>validateNamespaces</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-NamespaceFilter.html#v%3AvalidateNamespaces"
+>Text.XML.HXT.DOM.NamespaceFilter</A
+>, Text.XML.HXT.DOM.Namespace, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>valueOf</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3AvalueOf"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>valueOfDTD</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AvalueOfDTD"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>versionInfo</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>versionNum</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>versionOptions</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-W.html b/doc/hxt-filter/doc-index-W.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-W.html
@@ -0,0 +1,210 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (W)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>warn</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html#v%3Awarn"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>when</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>whenM</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>whenNot</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>whenNotM</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>writeDocument</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-Parser-MainFunctions.html#v%3AwriteDocument"
+>Text.XML.HXT.Parser.MainFunctions</A
+>, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index-X.html b/doc/hxt-filter/doc-index-X.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index-X.html
@@ -0,0 +1,422 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index (X)</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD CLASS="indexentry"
+>XAttr</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XCdata</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XCharRef</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XCmt</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XDTD</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XEntityRef</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XError</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XNS</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XNode</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XPi</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XState</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XTag</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XText</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XmlFilter</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XmlNodeSet</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XmlSFilter</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry" COLSPAN="2"
+>XmlState</TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>1 (Type/Class)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlState"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexannot"
+>2 (Data Constructor)</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#v%3AXmlState"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XmlStateFilter</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXmlStateFilter"
+>Text.XML.HXT.DOM.XmlState</A
+>, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XmlTree</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>XmlTrees</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>xMLDecl</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>xMLDecl'</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>xattr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3Axattr"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>xcmt</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3Axcmt"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>xerr</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3Axerr"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>xmlContentModelToString</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AxmlContentModelToString"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>xmlNamespace</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>xmlTreesToString</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AxmlTreesToString"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>xmlTreesToText</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3AxmlTreesToText"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>xmlnsNamespace</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>xmlnsQN</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.NamespaceFilter, Text.XML.HXT.DOM.Namespace, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>xread</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.Parser.XmlParser, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>xshow</TD
+><TD CLASS="indexlinks"
+>Text.XML.HXT.DOM.XmlTreeFunctions, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>xtag</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3Axtag"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>xtext</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3Axtext"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+><TR
+><TD CLASS="indexentry"
+>xwarn</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html#v%3Axwarn"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+>, Text.XML.HXT.DOM.XmlTree, Text.XML.HXT.DOM, Text.XML.HXT.Parser</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/doc-index.html b/doc/hxt-filter/doc-index.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/doc-index.html
@@ -0,0 +1,164 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant). (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Index</TD
+></TR
+><TR
+><TD
+><TABLE CELLPADDING="0" CELLSPACING="5"
+><TR
+><TD
+><A HREF="doc-index-A.html"
+>A</A
+></TD
+><TD
+><A HREF="doc-index-B.html"
+>B</A
+></TD
+><TD
+><A HREF="doc-index-C.html"
+>C</A
+></TD
+><TD
+><A HREF="doc-index-D.html"
+>D</A
+></TD
+><TD
+><A HREF="doc-index-E.html"
+>E</A
+></TD
+><TD
+><A HREF="doc-index-F.html"
+>F</A
+></TD
+><TD
+><A HREF="doc-index-G.html"
+>G</A
+></TD
+><TD
+><A HREF="doc-index-H.html"
+>H</A
+></TD
+><TD
+><A HREF="doc-index-I.html"
+>I</A
+></TD
+><TD
+><A HREF="doc-index-K.html"
+>K</A
+></TD
+><TD
+><A HREF="doc-index-L.html"
+>L</A
+></TD
+><TD
+><A HREF="doc-index-M.html"
+>M</A
+></TD
+><TD
+><A HREF="doc-index-N.html"
+>N</A
+></TD
+><TD
+><A HREF="doc-index-O.html"
+>O</A
+></TD
+><TD
+><A HREF="doc-index-P.html"
+>P</A
+></TD
+><TD
+><A HREF="doc-index-Q.html"
+>Q</A
+></TD
+><TD
+><A HREF="doc-index-R.html"
+>R</A
+></TD
+><TD
+><A HREF="doc-index-S.html"
+>S</A
+></TD
+><TD
+><A HREF="doc-index-T.html"
+>T</A
+></TD
+><TD
+><A HREF="doc-index-U.html"
+>U</A
+></TD
+><TD
+><A HREF="doc-index-V.html"
+>V</A
+></TD
+><TD
+><A HREF="doc-index-W.html"
+>W</A
+></TD
+><TD
+><A HREF="doc-index-X.html"
+>X</A
+></TD
+><TD
+><A HREF="doc-index-58.html"
+>:</A
+></TD
+><TD
+><A HREF="doc-index-36.html"
+>$</A
+></TD
+><TD
+><A HREF="doc-index-43.html"
+>+</A
+></TD
+><TD
+><A HREF="doc-index-46.html"
+>.</A
+></TD
+><TD
+><A HREF="doc-index-47.html"
+>/</A
+></TD
+><TD
+><A HREF="doc-index-60.html"
+>&lt;</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/haddock-util.js b/doc/hxt-filter/haddock-util.js
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/haddock-util.js
@@ -0,0 +1,15 @@
+// Haddock JavaScript utilities
+function toggle(button,id)
+{
+   var n = document.getElementById(id).style;
+   if (n.display == "none")
+   {
+	button.src = "minus.gif";
+	n.display = "block";
+   }
+   else
+   {
+	button.src = "plus.gif";
+	n.display = "none";
+   }
+}
diff --git a/doc/hxt-filter/haddock.css b/doc/hxt-filter/haddock.css
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/haddock.css
@@ -0,0 +1,260 @@
+/* -------- Global things --------- */
+
+BODY { 
+  background-color: #ffffff;
+  color: #000000;
+  font-family: sans-serif;
+  } 
+
+A:link    { color: #0000e0; text-decoration: none }
+A:visited { color: #0000a0; text-decoration: none }
+A:hover   { background-color: #e0e0ff; text-decoration: none }
+
+TABLE.vanilla {
+  width: 100%;
+  border-width: 0px;
+  /* I can't seem to specify cellspacing or cellpadding properly using CSS... */
+}
+
+TABLE.vanilla2 {
+  border-width: 0px;
+}
+
+/* <TT> font is a little too small in MSIE */
+TT  { font-size: 100%; }
+PRE { font-size: 100%; }
+
+LI P { margin: 0pt } 
+
+TD {
+  border-width: 0px;
+}
+
+TABLE.narrow {
+  border-width: 0px;
+}
+
+TD.s8  {  height: 8px;  }
+TD.s15 {  height: 15px; }
+
+SPAN.keyword { text-decoration: underline; }
+
+/* Resize the buttom image to match the text size */
+IMG.coll { width : 0.75em; height: 0.75em; margin-bottom: 0; margin-right: 0.5em }
+
+/* --------- Contents page ---------- */
+
+DIV.node {
+  padding-left: 3em;
+}
+
+DIV.cnode {
+  padding-left: 1.75em;
+}
+
+SPAN.pkg {
+  position: absolute;
+  left: 50em;
+}
+
+/* --------- Documentation elements ---------- */
+
+TD.children {
+  padding-left: 25px;
+  }
+
+TD.synopsis {
+  padding: 2px;
+  background-color: #f0f0f0;
+  font-family: monospace
+ }
+
+TD.decl { 
+  padding: 2px;
+  background-color: #f0f0f0; 
+  font-family: monospace;
+  vertical-align: top;
+  }
+
+TD.topdecl {
+  padding: 2px;
+  background-color: #f0f0f0;
+  font-family: monospace;
+  vertical-align: top;
+}
+
+TABLE.declbar {
+  border-spacing: 0px;
+ }
+
+TD.declname {
+  width: 100%;
+ }
+
+TD.declbut {
+  padding-left: 5px;
+  padding-right: 5px;
+  border-left-width: 1px;
+  border-left-color: #000099;
+  border-left-style: solid;
+  white-space: nowrap;
+  font-size: small;
+ }
+
+/* 
+  arg is just like decl, except that wrapping is not allowed.  It is
+  used for function and constructor arguments which have a text box
+  to the right, where if wrapping is allowed the text box squashes up
+  the declaration by wrapping it.
+*/
+TD.arg { 
+  padding: 2px;
+  background-color: #f0f0f0; 
+  font-family: monospace;
+  vertical-align: top;
+  white-space: nowrap;
+  }
+
+TD.recfield { padding-left: 20px }
+
+TD.doc  { 
+  padding-top: 2px;
+  padding-left: 10px;
+  }
+
+TD.ndoc  { 
+  padding: 2px;
+  }
+
+TD.rdoc  { 
+  padding: 2px;
+  padding-left: 10px;
+  width: 100%;
+  }
+
+TD.body  { 
+  padding-left: 10px
+  }
+
+TD.pkg {
+  width: 100%;
+  padding-left: 10px
+}
+
+TD.indexentry {
+  vertical-align: top;
+  padding-right: 10px
+  }
+
+TD.indexannot {
+  vertical-align: top;
+  padding-left: 20px;
+  white-space: nowrap
+  }
+
+TD.indexlinks {
+  width: 100%
+  }
+
+/* ------- Section Headings ------- */
+
+TD.section1 {
+  padding-top: 15px;
+  font-weight: bold;
+  font-size: 150%
+  }
+
+TD.section2 {
+  padding-top: 10px;
+  font-weight: bold;
+  font-size: 130%
+  }
+
+TD.section3 {
+  padding-top: 5px;
+  font-weight: bold;
+  font-size: 110%
+  }
+
+TD.section4 {
+  font-weight: bold;
+  font-size: 100%
+  }
+
+/* -------------- The title bar at the top of the page */
+
+TD.infohead {
+  color: #ffffff;
+  font-weight: bold;
+  padding-right: 10px;
+  text-align: left;
+}
+
+TD.infoval {
+  color: #ffffff;
+  padding-right: 10px;
+  text-align: left;
+}
+
+TD.topbar {
+  background-color: #000099;
+  padding: 5px;
+}
+
+TD.title {
+  color: #ffffff;
+  padding-left: 10px;
+  width: 100%
+  }
+
+TD.topbut {
+  padding-left: 5px;
+  padding-right: 5px;
+  border-left-width: 1px;
+  border-left-color: #ffffff;
+  border-left-style: solid;
+  white-space: nowrap;
+  }
+
+TD.topbut A:link {
+  color: #ffffff
+  }
+
+TD.topbut A:visited {
+  color: #ffff00
+  }
+
+TD.topbut A:hover {
+  background-color: #6060ff;
+  }
+
+TD.topbut:hover {
+  background-color: #6060ff
+  }
+
+TD.modulebar { 
+  background-color: #0077dd;
+  padding: 5px;
+  border-top-width: 1px;
+  border-top-color: #ffffff;
+  border-top-style: solid;
+  }
+
+/* --------- The page footer --------- */
+
+TD.botbar {
+  background-color: #000099;
+  color: #ffffff;
+  padding: 5px
+  }
+TD.botbar A:link {
+  color: #ffffff;
+  text-decoration: underline
+  }
+TD.botbar A:visited {
+  color: #ffff00
+  }
+TD.botbar A:hover {
+  background-color: #6060ff
+  }
+
diff --git a/doc/hxt-filter/haskell_icon.gif b/doc/hxt-filter/haskell_icon.gif
new file mode 100644
Binary files /dev/null and b/doc/hxt-filter/haskell_icon.gif differ
diff --git a/doc/hxt-filter/hxt-filter.haddock b/doc/hxt-filter/hxt-filter.haddock
new file mode 100644
Binary files /dev/null and b/doc/hxt-filter/hxt-filter.haddock differ
diff --git a/doc/hxt-filter/index.html b/doc/hxt-filter/index.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/index.html
@@ -0,0 +1,481 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>hxt-filter-8.0.0: A collection of tools for processing XML with Haskell (Filter variant).</TD
+></TR
+><TR
+><TD CLASS="doc"
+>The Haskell XML Toolbox bases on the ideas of HaXml and HXML. This package is a compatibitlity package for old software working with the filter approach like in HaXml. For new projects it's recomended to use the arrow based library (hxt).
+</TD
+></TR
+><TR
+><TD CLASS="section1"
+>Modules</TD
+></TR
+><TR
+><TD
+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD STYLE="width: 50em"
+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:0')" ALT="show/hide"
+>Control</TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"
+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:0" STYLE="display:block;"
+><TR
+><TD STYLE="width: 48em"
+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:1')" ALT="show/hide"
+>Monad</TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"
+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:1" STYLE="display:block;"
+><TR
+><TD STYLE="padding-left: 1.25em;width: 46em"
+><A HREF="Control-Monad-MonadStateIO.html"
+>Control.Monad.MonadStateIO</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD STYLE="width: 50em"
+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:2')" ALT="show/hide"
+>Text</TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"
+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:2" STYLE="display:block;"
+><TR
+><TD STYLE="width: 48em"
+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:3')" ALT="show/hide"
+>XML</TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"
+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:3" STYLE="display:block;"
+><TR
+><TD STYLE="width: 46em"
+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:4')" ALT="show/hide"
+>HXT</TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"
+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:4" STYLE="display:block;"
+><TR
+><TD STYLE="width: 44em"
+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:5')" ALT="show/hide"
+><A HREF="Text-XML-HXT-DOM.html"
+>Text.XML.HXT.DOM</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"
+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:5" STYLE="display:block;"
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-DOM-EditFilters.html"
+>Text.XML.HXT.DOM.EditFilters</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-DOM-Namespace.html"
+>Text.XML.HXT.DOM.Namespace</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-DOM-NamespaceFilter.html"
+>Text.XML.HXT.DOM.NamespaceFilter</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-DOM-XmlState.html"
+>Text.XML.HXT.DOM.XmlState</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-DOM-XmlTree.html"
+>Text.XML.HXT.DOM.XmlTree</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFilter.html"
+>Text.XML.HXT.DOM.XmlTreeFilter</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-DOM-XmlTreeFunctions.html"
+>Text.XML.HXT.DOM.XmlTreeFunctions</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD STYLE="width: 44em"
+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:6')" ALT="show/hide"
+><A HREF="Text-XML-HXT-Parser.html"
+>Text.XML.HXT.Parser</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"
+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:6" STYLE="display:block;"
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Parser-DTDProcessing.html"
+>Text.XML.HXT.Parser.DTDProcessing</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Parser-DefaultURI.html"
+>Text.XML.HXT.Parser.DefaultURI</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Parser-HtmlParser.html"
+>Text.XML.HXT.Parser.HtmlParser</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Parser-MainFunctions.html"
+>Text.XML.HXT.Parser.MainFunctions</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Parser-ProtocolHandler.html"
+>Text.XML.HXT.Parser.ProtocolHandler</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Parser-ProtocolHandlerFile.html"
+>Text.XML.HXT.Parser.ProtocolHandlerFile</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Parser-ProtocolHandlerHttpCurl.html"
+>Text.XML.HXT.Parser.ProtocolHandlerHttpCurl</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Parser-ProtocolHandlerHttpNative.html"
+>Text.XML.HXT.Parser.ProtocolHandlerHttpNative</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Parser-ProtocolHandlerHttpNativeOrCurl.html"
+>Text.XML.HXT.Parser.ProtocolHandlerHttpNativeOrCurl</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Parser-XmlInput.html"
+>Text.XML.HXT.Parser.XmlInput</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Parser-XmlOutput.html"
+>Text.XML.HXT.Parser.XmlOutput</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Parser-XmlParser.html"
+>Text.XML.HXT.Parser.XmlParser</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD STYLE="width: 44em"
+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:7')" ALT="show/hide"
+>Validator</TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"
+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:7" STYLE="display:block;"
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Validator-AttributeValueValidation.html"
+>Text.XML.HXT.Validator.AttributeValueValidation</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Validator-DTDValidation.html"
+>Text.XML.HXT.Validator.DTDValidation</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Validator-DocTransformation.html"
+>Text.XML.HXT.Validator.DocTransformation</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Validator-DocValidation.html"
+>Text.XML.HXT.Validator.DocValidation</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Validator-IdValidation.html"
+>Text.XML.HXT.Validator.IdValidation</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Validator-RE.html"
+>Text.XML.HXT.Validator.RE</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Validator-Validation.html"
+>Text.XML.HXT.Validator.Validation</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Validator-ValidationFilter.html"
+>Text.XML.HXT.Validator.ValidationFilter</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 42em"
+><A HREF="Text-XML-HXT-Validator-XmlRE.html"
+>Text.XML.HXT.Validator.XmlRE</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 0.8</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/doc/hxt-filter/minus.gif b/doc/hxt-filter/minus.gif
new file mode 100644
Binary files /dev/null and b/doc/hxt-filter/minus.gif differ
diff --git a/doc/hxt-filter/plus.gif b/doc/hxt-filter/plus.gif
new file mode 100644
Binary files /dev/null and b/doc/hxt-filter/plus.gif differ
diff --git a/doc/hxt-filter/src/Control-Monad-MonadStateIO.html b/doc/hxt-filter/src/Control-Monad-MonadStateIO.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Control-Monad-MonadStateIO.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- general usefull state monad for a local state and IO</span>
+<a name="line-3"></a><span class='comment'>--</span>
+<a name="line-4"></a><span class='comment'>-- This module is used for threading a state and io actions</span>
+<a name="line-5"></a><span class='comment'>-- through a computation.</span>
+<a name="line-6"></a><span class='comment'>-- Here the monad is constructed by hand.</span>
+<a name="line-7"></a><span class='comment'>-- It could easily be refactored with the use of the monad transformer library.</span>
+<a name="line-8"></a>
+<a name="line-9"></a>
+<a name="line-10"></a><span class='keyword'>module</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Monad</span><span class='varop'>.</span><span class='conid'>MonadStateIO</span>
+<a name="line-11"></a>    <span class='layout'>(</span> <span class='keyword'>module</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Monad</span><span class='varop'>.</span><span class='conid'>MonadStateIO</span>
+<a name="line-12"></a>    <span class='layout'>)</span>
+<a name="line-13"></a><span class='keyword'>where</span>
+<a name="line-14"></a>
+<a name="line-15"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>IO</span>
+<a name="line-16"></a>
+<a name="line-17"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-18"></a>
+<a name="line-19"></a><a name="StateIO"></a><span class='keyword'>newtype</span> <span class='conid'>StateIO</span> <span class='varid'>state</span> <span class='varid'>res</span> <span class='keyglyph'>=</span> <span class='conid'>STIO</span> <span class='layout'>{</span> <span class='varid'>trans</span> <span class='keyglyph'>::</span> <span class='varid'>state</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='layout'>(</span><span class='varid'>res</span><span class='layout'>,</span> <span class='varid'>state</span><span class='layout'>)</span> <span class='layout'>}</span>
+<a name="line-20"></a>
+<a name="line-21"></a><span class='keyword'>instance</span> <span class='conid'>Monad</span> <span class='layout'>(</span><span class='conid'>StateIO</span> <span class='varid'>state</span><span class='layout'>)</span> <span class='keyword'>where</span>
+<a name="line-22"></a>    <span class='varid'>return</span> <span class='varid'>v</span>
+<a name="line-23"></a>	<span class='keyglyph'>=</span> <span class='conid'>STIO</span> <span class='layout'>(</span> <span class='keyglyph'>\</span><span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>v</span><span class='layout'>,</span> <span class='varid'>s</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-24"></a>
+<a name="line-25"></a>    <span class='conid'>STIO</span> <span class='varid'>cmd</span> <span class='varop'>&gt;&gt;=</span> <span class='varid'>f</span>
+<a name="line-26"></a>	<span class='keyglyph'>=</span> <span class='conid'>STIO</span> <span class='layout'>(</span> <span class='keyglyph'>\</span><span class='varid'>s</span> <span class='keyglyph'>-&gt;</span>
+<a name="line-27"></a>		  <span class='varid'>cmd</span> <span class='varid'>s</span> <span class='varop'>&gt;&gt;=</span> <span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>rl</span><span class='layout'>,</span> <span class='varid'>s'</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>
+<a name="line-28"></a>		  <span class='layout'>(</span><span class='varid'>trans</span> <span class='varop'>.</span> <span class='varid'>f</span><span class='layout'>)</span> <span class='varid'>rl</span> <span class='varid'>s'</span>
+<a name="line-29"></a>		<span class='layout'>)</span>
+<a name="line-30"></a>
+<a name="line-31"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-32"></a><span class='comment'>-- |</span>
+<a name="line-33"></a><span class='comment'>-- lift IO command to 'StateIO'</span>
+<a name="line-34"></a>
+<a name="line-35"></a><a name="io"></a><span class='definition'>io</span> <span class='keyglyph'>::</span> <span class='conid'>IO</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>StateIO</span> <span class='varid'>state</span> <span class='varid'>a</span>
+<a name="line-36"></a><span class='definition'>io</span> <span class='varid'>iocmd</span>
+<a name="line-37"></a>    <span class='keyglyph'>=</span> <span class='conid'>STIO</span> <span class='layout'>(</span> <span class='keyglyph'>\</span><span class='varid'>s</span> <span class='keyglyph'>-&gt;</span>
+<a name="line-38"></a>	     <span class='keyword'>do</span>
+<a name="line-39"></a>	     <span class='varid'>a</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>iocmd</span>
+<a name="line-40"></a>	     <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='varid'>s</span><span class='layout'>)</span>
+<a name="line-41"></a>	   <span class='layout'>)</span>
+<a name="line-42"></a>
+<a name="line-43"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-44"></a>
+<a name="line-45"></a><span class='comment'>-- |</span>
+<a name="line-46"></a><span class='comment'>-- state inspection command: a \"show\"-like function is applied to the state</span>
+<a name="line-47"></a><span class='comment'>-- and the result is written to stderr.</span>
+<a name="line-48"></a>
+<a name="line-49"></a><a name="trcState"></a><span class='definition'>trcState</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='varid'>state</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>StateIO</span> <span class='varid'>state</span> <span class='conid'>()</span>
+<a name="line-50"></a><span class='definition'>trcState</span> <span class='varid'>fct</span>
+<a name="line-51"></a>    <span class='keyglyph'>=</span> <span class='conid'>STIO</span> <span class='layout'>(</span> <span class='keyglyph'>\</span><span class='varid'>s</span> <span class='keyglyph'>-&gt;</span>
+<a name="line-52"></a>	      <span class='keyword'>do</span>
+<a name="line-53"></a>	      <span class='varid'>hPutStr</span> <span class='varid'>stderr</span> <span class='varop'>$</span> <span class='varid'>fct</span> <span class='varid'>s</span>
+<a name="line-54"></a>	      <span class='varid'>return</span> <span class='layout'>(</span><span class='conid'>()</span><span class='layout'>,</span> <span class='varid'>s</span><span class='layout'>)</span>
+<a name="line-55"></a>	    <span class='layout'>)</span>
+<a name="line-56"></a>
+<a name="line-57"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-58"></a><span class='comment'>--</span>
+<a name="line-59"></a><span class='comment'>-- state access commands</span>
+<a name="line-60"></a>
+<a name="line-61"></a><span class='comment'>-- |</span>
+<a name="line-62"></a><span class='comment'>-- change the state with a given function and return the new state</span>
+<a name="line-63"></a>
+<a name="line-64"></a><a name="changeState"></a><span class='definition'>changeState</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='varid'>state</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>state</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>StateIO</span> <span class='varid'>state</span> <span class='varid'>state</span>
+<a name="line-65"></a><span class='definition'>changeState</span> <span class='varid'>f</span>
+<a name="line-66"></a>    <span class='keyglyph'>=</span> <span class='conid'>STIO</span> <span class='layout'>(</span> <span class='keyglyph'>\</span><span class='varid'>s</span> <span class='keyglyph'>-&gt;</span>
+<a name="line-67"></a>	     <span class='keyword'>let</span> <span class='varid'>s'</span> <span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varid'>s</span>
+<a name="line-68"></a>	     <span class='keyword'>in</span>
+<a name="line-69"></a>	     <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>s'</span><span class='layout'>,</span> <span class='varid'>s'</span><span class='layout'>)</span>
+<a name="line-70"></a>	    <span class='layout'>)</span>
+<a name="line-71"></a>
+<a name="line-72"></a><span class='comment'>-- |</span>
+<a name="line-73"></a><span class='comment'>-- set the state</span>
+<a name="line-74"></a>
+<a name="line-75"></a><a name="setState"></a><span class='definition'>setState</span>	<span class='keyglyph'>::</span> <span class='varid'>state</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>StateIO</span> <span class='varid'>state</span> <span class='varid'>state</span>
+<a name="line-76"></a><span class='definition'>setState</span> <span class='varid'>s</span>
+<a name="line-77"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeState</span> <span class='layout'>(</span> <span class='keyglyph'>\</span><span class='keyword'>_</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span> <span class='layout'>)</span>
+<a name="line-78"></a>
+<a name="line-79"></a><span class='comment'>-- |</span>
+<a name="line-80"></a><span class='comment'>-- read the state</span>
+<a name="line-81"></a>
+<a name="line-82"></a><a name="getState"></a><span class='definition'>getState</span>	<span class='keyglyph'>::</span> <span class='conid'>StateIO</span> <span class='varid'>state</span> <span class='varid'>state</span>
+<a name="line-83"></a><span class='definition'>getState</span>
+<a name="line-84"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeState</span> <span class='varid'>id</span>
+<a name="line-85"></a>
+<a name="line-86"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-87"></a><span class='comment'>-- |</span>
+<a name="line-88"></a><span class='comment'>-- run a 'StateIO' command with an initial state</span>
+<a name="line-89"></a>
+<a name="line-90"></a><a name="run"></a><span class='definition'>run</span> <span class='keyglyph'>::</span> <span class='varid'>state</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>StateIO</span> <span class='varid'>state</span> <span class='varid'>res</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='varid'>res</span>
+<a name="line-91"></a><span class='definition'>run</span> <span class='varid'>initialState</span> <span class='layout'>(</span><span class='conid'>STIO</span> <span class='varid'>cmd</span><span class='layout'>)</span>
+<a name="line-92"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-93"></a>      <span class='layout'>(</span><span class='varid'>res</span><span class='layout'>,</span> <span class='sel'>_finalState</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>cmd</span> <span class='varid'>initialState</span>
+<a name="line-94"></a>      <span class='varid'>return</span> <span class='varid'>res</span>
+<a name="line-95"></a>
+<a name="line-96"></a>
+<a name="line-97"></a><span class='comment'>-- ------------------------------------------------------------</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-DOM-EditFilters.html b/doc/hxt-filter/src/Text-XML-HXT-DOM-EditFilters.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-DOM-EditFilters.html
@@ -0,0 +1,577 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- XML editing filters</span>
+<a name="line-3"></a>
+<a name="line-4"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>EditFilters</span>
+<a name="line-5"></a>    <span class='layout'>(</span> <span class='varid'>canonicalizeTree</span>
+<a name="line-6"></a>    <span class='layout'>,</span> <span class='varid'>canonicalizeAllNodes</span>
+<a name="line-7"></a>    <span class='layout'>,</span> <span class='varid'>canonicalizeForXPath</span>
+<a name="line-8"></a>
+<a name="line-9"></a>    <span class='layout'>,</span> <span class='varid'>collapseXText</span>
+<a name="line-10"></a>    <span class='layout'>,</span> <span class='varid'>collapseAllXText</span>
+<a name="line-11"></a>
+<a name="line-12"></a>    <span class='layout'>,</span> <span class='varid'>indentDoc</span>
+<a name="line-13"></a>
+<a name="line-14"></a>    <span class='layout'>,</span> <span class='varid'>removeWhiteSpace</span>
+<a name="line-15"></a>    <span class='layout'>,</span> <span class='varid'>removeAllWhiteSpace</span>
+<a name="line-16"></a>    <span class='layout'>,</span> <span class='varid'>removeDocWhiteSpace</span>
+<a name="line-17"></a>
+<a name="line-18"></a>    <span class='layout'>,</span> <span class='varid'>removeComment</span>
+<a name="line-19"></a>    <span class='layout'>,</span> <span class='varid'>removeAllComment</span>
+<a name="line-20"></a>
+<a name="line-21"></a>    <span class='layout'>,</span> <span class='varid'>transfCdata</span>		<span class='layout'>,</span> <span class='varid'>transfAllCdata</span>	<span class='comment'>-- CDATA to text</span>
+<a name="line-22"></a>    <span class='layout'>,</span> <span class='varid'>transfCdataEscaped</span>	<span class='layout'>,</span> <span class='varid'>transfAllCdataEscaped</span>	<span class='comment'>-- CDATA to text</span>
+<a name="line-23"></a>    <span class='layout'>,</span> <span class='varid'>transfCharRef</span>		<span class='layout'>,</span> <span class='varid'>transfAllCharRef</span>	<span class='comment'>-- &amp;#nnn; to text</span>
+<a name="line-24"></a>
+<a name="line-25"></a>    <span class='layout'>,</span> <span class='varid'>escapeXmlDoc</span>
+<a name="line-26"></a>    <span class='layout'>,</span> <span class='varid'>escapeXmlText</span>
+<a name="line-27"></a>    <span class='layout'>,</span> <span class='varid'>escapeXmlAttrValue</span>
+<a name="line-28"></a>
+<a name="line-29"></a>    <span class='layout'>,</span> <span class='varid'>unparseXmlDoc</span>
+<a name="line-30"></a>    <span class='layout'>,</span> <span class='varid'>numberLinesInXmlDoc</span>	<span class='layout'>,</span> <span class='varid'>numberLines</span>
+<a name="line-31"></a>    <span class='layout'>,</span> <span class='varid'>treeRepOfXmlDoc</span>
+<a name="line-32"></a>    <span class='layout'>,</span> <span class='varid'>haskellRepOfXmlDoc</span>
+<a name="line-33"></a>    <span class='layout'>,</span> <span class='varid'>addHeadlineToXmlDoc</span>
+<a name="line-34"></a>    <span class='layout'>,</span> <span class='varid'>addXmlPiToDoc</span>
+<a name="line-35"></a>    <span class='layout'>)</span>
+<a name="line-36"></a><span class='keyword'>where</span>
+<a name="line-37"></a>
+<a name="line-38"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-39"></a>
+<a name="line-40"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>Unicode</span>
+<a name="line-41"></a>    <span class='layout'>(</span> <span class='varid'>getOutputEncodingFct</span><span class='layout'>)</span>
+<a name="line-42"></a>
+<a name="line-43"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>FormatXmlTree</span>
+<a name="line-44"></a>    <span class='layout'>(</span> <span class='varid'>formatXmlContents</span> <span class='layout'>)</span>
+<a name="line-45"></a>
+<a name="line-46"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>
+<a name="line-47"></a>
+<a name="line-48"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-49"></a>
+<a name="line-50"></a><span class='comment'>-- |</span>
+<a name="line-51"></a><span class='comment'>-- remove Comments</span>
+<a name="line-52"></a>
+<a name="line-53"></a><a name="removeComment"></a><span class='definition'>removeComment</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-54"></a><span class='definition'>removeComment</span>		<span class='keyglyph'>=</span> <span class='varid'>none</span> <span class='varop'>`when`</span> <span class='varid'>isXCmt</span>
+<a name="line-55"></a>
+<a name="line-56"></a><span class='comment'>-- |</span>
+<a name="line-57"></a><span class='comment'>-- remove all Comments recursively</span>
+<a name="line-58"></a>
+<a name="line-59"></a><a name="removeAllComment"></a><span class='definition'>removeAllComment</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-60"></a><span class='definition'>removeAllComment</span>	<span class='keyglyph'>=</span> <span class='varid'>processBottomUp</span> <span class='varid'>removeComment</span>
+<a name="line-61"></a>
+<a name="line-62"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-63"></a>
+<a name="line-64"></a><span class='comment'>-- |</span>
+<a name="line-65"></a><span class='comment'>-- simple filter for removing whitespace.</span>
+<a name="line-66"></a><span class='comment'>--</span>
+<a name="line-67"></a><span class='comment'>-- no check on sigificant whitespace is done.</span>
+<a name="line-68"></a><span class='comment'>--</span>
+<a name="line-69"></a><span class='comment'>--</span>
+<a name="line-70"></a><span class='comment'>-- see also : 'removeAllWhiteSpace', 'removeDocWhiteSpace'</span>
+<a name="line-71"></a>
+<a name="line-72"></a><a name="removeWhiteSpace"></a><span class='definition'>removeWhiteSpace</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-73"></a><span class='definition'>removeWhiteSpace</span>	<span class='keyglyph'>=</span> <span class='varid'>none</span> <span class='varop'>`when`</span> <span class='varid'>isWhiteSpace</span>
+<a name="line-74"></a>
+<a name="line-75"></a><span class='comment'>-- |</span>
+<a name="line-76"></a><span class='comment'>-- simple recursive filter for removing all whitespace.</span>
+<a name="line-77"></a><span class='comment'>--</span>
+<a name="line-78"></a><span class='comment'>-- removes all text nodes in a tree that consist only of whitespace.</span>
+<a name="line-79"></a><span class='comment'>--</span>
+<a name="line-80"></a><span class='comment'>--</span>
+<a name="line-81"></a><span class='comment'>-- see also : 'removeWhiteSpace', 'removeDocWhiteSpace'</span>
+<a name="line-82"></a>
+<a name="line-83"></a><a name="removeAllWhiteSpace"></a><span class='definition'>removeAllWhiteSpace</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-84"></a><span class='definition'>removeAllWhiteSpace</span>	<span class='keyglyph'>=</span> <span class='varid'>processBottomUp</span> <span class='varid'>removeWhiteSpace</span>
+<a name="line-85"></a>
+<a name="line-86"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-87"></a><span class='comment'>-- |</span>
+<a name="line-88"></a><span class='comment'>-- converts CDATA sections in whole document tree into normal text nodes</span>
+<a name="line-89"></a>
+<a name="line-90"></a><a name="transfAllCdataEscaped"></a><span class='definition'>transfAllCdataEscaped</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-91"></a><span class='definition'>transfAllCdataEscaped</span>	<span class='keyglyph'>=</span> <span class='varid'>processBottomUp</span> <span class='varid'>transfCdataEscaped</span>
+<a name="line-92"></a>
+<a name="line-93"></a><span class='comment'>-- |</span>
+<a name="line-94"></a><span class='comment'>-- converts CDATA section in normal text nodes</span>
+<a name="line-95"></a>
+<a name="line-96"></a><a name="transfCdataEscaped"></a><span class='definition'>transfCdataEscaped</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-97"></a><span class='definition'>transfCdataEscaped</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XCdata</span> <span class='varid'>str</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-98"></a>    <span class='keyglyph'>=</span> <span class='varid'>xtext</span> <span class='varid'>str</span>
+<a name="line-99"></a>
+<a name="line-100"></a><span class='definition'>transfCdataEscaped</span> <span class='varid'>n</span>
+<a name="line-101"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>n</span><span class='keyglyph'>]</span>
+<a name="line-102"></a>
+<a name="line-103"></a>
+<a name="line-104"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-105"></a><span class='comment'>-- |</span>
+<a name="line-106"></a><span class='comment'>-- converts CDATA sections in whole document tree</span>
+<a name="line-107"></a>
+<a name="line-108"></a><a name="transfAllCdata"></a><span class='definition'>transfAllCdata</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-109"></a><span class='definition'>transfAllCdata</span>		<span class='keyglyph'>=</span> <span class='varid'>processBottomUp</span> <span class='varid'>transfCdata</span>
+<a name="line-110"></a>
+<a name="line-111"></a><span class='comment'>-- |</span>
+<a name="line-112"></a><span class='comment'>-- converts CDATA section in normal text sections</span>
+<a name="line-113"></a>
+<a name="line-114"></a><a name="transfCdata"></a><span class='definition'>transfCdata</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-115"></a><span class='definition'>transfCdata</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XCdata</span> <span class='varid'>str</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-116"></a>    <span class='keyglyph'>=</span> <span class='varid'>xtext</span> <span class='varid'>str</span>
+<a name="line-117"></a>
+<a name="line-118"></a><span class='definition'>transfCdata</span> <span class='varid'>n</span>
+<a name="line-119"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>n</span><span class='keyglyph'>]</span>
+<a name="line-120"></a>
+<a name="line-121"></a>
+<a name="line-122"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-123"></a><span class='comment'>-- |</span>
+<a name="line-124"></a><span class='comment'>-- converts character references to normal text</span>
+<a name="line-125"></a>
+<a name="line-126"></a><a name="transfCharRef"></a><span class='definition'>transfCharRef</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-127"></a><span class='definition'>transfCharRef</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XCharRef</span> <span class='varid'>i</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-128"></a>    <span class='keyglyph'>=</span> <span class='varid'>xtext</span> <span class='varop'>$</span> <span class='keyglyph'>[</span><span class='varid'>toEnum</span> <span class='varid'>i</span><span class='keyglyph'>]</span>
+<a name="line-129"></a>
+<a name="line-130"></a><span class='definition'>transfCharRef</span> <span class='varid'>n</span>
+<a name="line-131"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>n</span><span class='keyglyph'>]</span>
+<a name="line-132"></a>
+<a name="line-133"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-134"></a><span class='comment'>-- |</span>
+<a name="line-135"></a><span class='comment'>-- recursively converts all character references to normal text</span>
+<a name="line-136"></a>
+<a name="line-137"></a><a name="transfAllCharRef"></a><span class='definition'>transfAllCharRef</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-138"></a><span class='definition'>transfAllCharRef</span>	<span class='keyglyph'>=</span> <span class='varid'>processBottomUp</span> <span class='varid'>transfCharRef</span>
+<a name="line-139"></a>
+<a name="line-140"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-141"></a>
+<a name="line-142"></a><span class='comment'>-- |</span>
+<a name="line-143"></a><span class='comment'>-- Applies some "Canonical XML" rules to the nodes of a tree.</span>
+<a name="line-144"></a><span class='comment'>--</span>
+<a name="line-145"></a><span class='comment'>-- The rule differ slightly for canonical XML and XPath in handling of comments</span>
+<a name="line-146"></a><span class='comment'>--</span>
+<a name="line-147"></a><span class='comment'>-- Note: This is not the whole canonicalization as it is specified by the W3C</span>
+<a name="line-148"></a><span class='comment'>-- Recommendation. Adding attribute defaults or sorting attributes in lexicographic</span>
+<a name="line-149"></a><span class='comment'>-- order is done by the @transform@ function of module @Text.XML.HXT.Validator.Validation@.</span>
+<a name="line-150"></a><span class='comment'>-- Replacing entities or line feed normalization is done by the parser.</span>
+<a name="line-151"></a><span class='comment'>--</span>
+<a name="line-152"></a><span class='comment'>--</span>
+<a name="line-153"></a><span class='comment'>-- Not implemented yet:</span>
+<a name="line-154"></a><span class='comment'>--</span>
+<a name="line-155"></a><span class='comment'>--  - Whitespace within start and end tags is normalized</span>
+<a name="line-156"></a><span class='comment'>--</span>
+<a name="line-157"></a><span class='comment'>--  - Special characters in attribute values and character content are replaced by character references</span>
+<a name="line-158"></a><span class='comment'>--</span>
+<a name="line-159"></a><span class='comment'>-- see 'canonicalizeAllNodes' and 'canonicalizeForXPath'</span>
+<a name="line-160"></a>
+<a name="line-161"></a><a name="canonicalizeTree"></a><span class='definition'>canonicalizeTree</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-162"></a><span class='definition'>canonicalizeTree</span> <span class='varid'>toBeRemoved</span>
+<a name="line-163"></a>    <span class='keyglyph'>=</span> <span class='varid'>processChildren</span> <span class='layout'>(</span><span class='varid'>none</span> <span class='varop'>`when`</span> <span class='varid'>isXText</span><span class='layout'>)</span>
+<a name="line-164"></a>      <span class='varop'>.&gt;</span>
+<a name="line-165"></a>      <span class='varid'>processBottomUp</span> <span class='varid'>canonicalize1Node</span>
+<a name="line-166"></a>      <span class='keyword'>where</span>
+<a name="line-167"></a>      <span class='varid'>canonicalize1Node</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-168"></a>      <span class='varid'>canonicalize1Node</span>
+<a name="line-169"></a>	  <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>deep</span> <span class='varid'>isXPi</span> <span class='varop'>`when`</span> <span class='varid'>isXDTD</span><span class='layout'>)</span>		<span class='comment'>-- remove DTD parts, except PIs</span>
+<a name="line-170"></a>	    <span class='varop'>.&gt;</span>
+<a name="line-171"></a>	    <span class='layout'>(</span><span class='varid'>none</span> <span class='varop'>`when`</span> <span class='varid'>toBeRemoved</span><span class='layout'>)</span>		<span class='comment'>-- remove unintersting nodes</span>
+<a name="line-172"></a>	    <span class='varop'>.&gt;</span>
+<a name="line-173"></a>	    <span class='layout'>(</span> <span class='varid'>processAttr</span> <span class='layout'>(</span> <span class='varid'>processChildren</span> <span class='varid'>transfCharRef</span>
+<a name="line-174"></a>			    <span class='varop'>.&gt;</span>
+<a name="line-175"></a>			    <span class='varid'>collapseXText</span>
+<a name="line-176"></a>			  <span class='layout'>)</span> <span class='varop'>`when`</span> <span class='varid'>isXTag</span><span class='layout'>)</span>
+<a name="line-177"></a>	    <span class='varop'>.&gt;</span>
+<a name="line-178"></a>	    <span class='varid'>transfCdata</span>				<span class='comment'>-- CDATA -&gt; text</span>
+<a name="line-179"></a>	    <span class='varop'>.&gt;</span>
+<a name="line-180"></a>	    <span class='varid'>transfCharRef</span>			<span class='comment'>-- Char refs -&gt; text</span>
+<a name="line-181"></a>	    <span class='varop'>.&gt;</span>
+<a name="line-182"></a>	    <span class='varid'>collapseXText</span>			<span class='comment'>-- combine text</span>
+<a name="line-183"></a>
+<a name="line-184"></a>
+<a name="line-185"></a><span class='comment'>-- |</span>
+<a name="line-186"></a><span class='comment'>-- canonicalize tree and remove comments and \&lt;?xml ... ?&gt; declarations</span>
+<a name="line-187"></a><span class='comment'>--</span>
+<a name="line-188"></a><span class='comment'>-- see 'canonicalizeTree'</span>
+<a name="line-189"></a>
+<a name="line-190"></a><a name="canonicalizeAllNodes"></a><span class='definition'>canonicalizeAllNodes</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-191"></a><span class='definition'>canonicalizeAllNodes</span>
+<a name="line-192"></a>    <span class='keyglyph'>=</span> <span class='varid'>canonicalizeTree</span> <span class='layout'>(</span><span class='varid'>isXCmt</span>		<span class='comment'>-- remove comment</span>
+<a name="line-193"></a>			<span class='varop'>+++</span>
+<a name="line-194"></a>			<span class='varid'>isPi</span> <span class='varid'>t_xml</span>	<span class='comment'>-- remove xml declaration</span>
+<a name="line-195"></a>		       <span class='layout'>)</span>
+<a name="line-196"></a>
+<a name="line-197"></a><span class='comment'>-- |</span>
+<a name="line-198"></a><span class='comment'>-- Canonicalize a tree for XPath</span>
+<a name="line-199"></a><span class='comment'>-- Comment nodes are not removed</span>
+<a name="line-200"></a><span class='comment'>--</span>
+<a name="line-201"></a><span class='comment'>-- see 'canonicalizeTree'</span>
+<a name="line-202"></a>
+<a name="line-203"></a><a name="canonicalizeForXPath"></a><span class='definition'>canonicalizeForXPath</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-204"></a><span class='definition'>canonicalizeForXPath</span>
+<a name="line-205"></a>    <span class='keyglyph'>=</span> <span class='varid'>canonicalizeTree</span> <span class='layout'>(</span><span class='varid'>isPi</span> <span class='varid'>t_xml</span><span class='layout'>)</span>
+<a name="line-206"></a>
+<a name="line-207"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-208"></a>
+<a name="line-209"></a><span class='comment'>-- |</span>
+<a name="line-210"></a><span class='comment'>-- Collects sequences of child XText nodes into one XText node.</span>
+<a name="line-211"></a>
+<a name="line-212"></a><a name="collapseXText"></a><span class='definition'>collapseXText</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-213"></a><span class='definition'>collapseXText</span> <span class='varid'>n</span>
+<a name="line-214"></a>    <span class='keyglyph'>=</span> <span class='varid'>replaceChildren</span> <span class='layout'>(</span><span class='varid'>collapseXText'</span> <span class='varop'>$</span> <span class='varid'>getChildren</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-215"></a>    <span class='keyword'>where</span>
+<a name="line-216"></a>    <span class='varid'>collapseXText'</span> <span class='keyglyph'>::</span> <span class='conid'>XmlSFilter</span>
+<a name="line-217"></a>    <span class='varid'>collapseXText'</span> <span class='layout'>(</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='varid'>n1</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='conop'>:</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='varid'>n2</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='conop'>:</span> <span class='varid'>zs</span><span class='layout'>)</span>
+<a name="line-218"></a>	<span class='keyglyph'>|</span> <span class='varid'>isXTextNode</span> <span class='varid'>n1</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>isXTextNode</span> <span class='varid'>n2</span>
+<a name="line-219"></a>            <span class='keyglyph'>=</span> <span class='varid'>collapseXText'</span> <span class='varop'>$</span> <span class='layout'>(</span><span class='varid'>xtext</span> <span class='layout'>(</span><span class='varid'>t1</span> <span class='varop'>++</span> <span class='varid'>t2</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='varid'>zs</span>
+<a name="line-220"></a>	      <span class='keyword'>where</span>
+<a name="line-221"></a>	      <span class='varid'>t1</span> <span class='keyglyph'>=</span> <span class='varid'>textOfXNode</span> <span class='varid'>n1</span>
+<a name="line-222"></a>	      <span class='varid'>t2</span> <span class='keyglyph'>=</span> <span class='varid'>textOfXNode</span> <span class='varid'>n2</span>
+<a name="line-223"></a>
+<a name="line-224"></a>    <span class='varid'>collapseXText'</span> <span class='layout'>(</span><span class='varid'>x</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span>
+<a name="line-225"></a>        <span class='keyglyph'>=</span> <span class='varid'>x</span> <span class='conop'>:</span> <span class='layout'>(</span><span class='varid'>collapseXText'</span> <span class='varid'>xs</span><span class='layout'>)</span>
+<a name="line-226"></a>
+<a name="line-227"></a>    <span class='varid'>collapseXText'</span> <span class='conid'>[]</span>
+<a name="line-228"></a>        <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-229"></a>
+<a name="line-230"></a>
+<a name="line-231"></a><span class='comment'>-- |</span>
+<a name="line-232"></a><span class='comment'>-- Applies collapseXText recursively.</span>
+<a name="line-233"></a><span class='comment'>--</span>
+<a name="line-234"></a><span class='comment'>--</span>
+<a name="line-235"></a><span class='comment'>-- see also : 'collapseXText'</span>
+<a name="line-236"></a>
+<a name="line-237"></a><a name="collapseAllXText"></a><span class='definition'>collapseAllXText</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-238"></a><span class='definition'>collapseAllXText</span>	<span class='keyglyph'>=</span> <span class='varid'>processBottomUp</span> <span class='varid'>collapseXText</span>
+<a name="line-239"></a>
+<a name="line-240"></a>
+<a name="line-241"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-242"></a><span class='comment'>--</span>
+<a name="line-243"></a>
+<a name="line-244"></a><span class='comment'>-- |</span>
+<a name="line-245"></a><span class='comment'>-- filter for indenting a document tree for pretty printing.</span>
+<a name="line-246"></a><span class='comment'>--</span>
+<a name="line-247"></a><span class='comment'>-- the tree is traversed for inserting whitespace for tag indentation.</span>
+<a name="line-248"></a><span class='comment'>--</span>
+<a name="line-249"></a><span class='comment'>-- whitespace is only inserted or changed at places, where it isn't significant,</span>
+<a name="line-250"></a><span class='comment'>-- is's not inserted between tags and text containing non whitespace chars.</span>
+<a name="line-251"></a><span class='comment'>--</span>
+<a name="line-252"></a><span class='comment'>-- whitespace is only inserted or changed at places, where it's not significant.</span>
+<a name="line-253"></a><span class='comment'>-- preserving whitespace may be controlled in a document tree</span>
+<a name="line-254"></a><span class='comment'>-- by a tag attribute @xml:space@</span>
+<a name="line-255"></a><span class='comment'>--</span>
+<a name="line-256"></a><span class='comment'>-- allowed values for this attribute are @default | preserve@.</span>
+<a name="line-257"></a><span class='comment'>--</span>
+<a name="line-258"></a><span class='comment'>-- input is a complete document tree.</span>
+<a name="line-259"></a><span class='comment'>-- result the semantically equivalent formatted tree.</span>
+<a name="line-260"></a><span class='comment'>--</span>
+<a name="line-261"></a><span class='comment'>--</span>
+<a name="line-262"></a><span class='comment'>-- see also : 'removeDocWhiteSpace'</span>
+<a name="line-263"></a>
+<a name="line-264"></a><a name="indentDoc"></a><span class='definition'>indentDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-265"></a><span class='definition'>indentDoc</span> 
+<a name="line-266"></a>    <span class='keyglyph'>=</span> <span class='varid'>modifyChildren</span> <span class='layout'>(</span><span class='varid'>indentRootChildren</span> <span class='varop'>$$</span><span class='layout'>)</span>
+<a name="line-267"></a>      <span class='varop'>`when`</span>
+<a name="line-268"></a>      <span class='varid'>isRoot</span>
+<a name="line-269"></a>      <span class='keyword'>where</span>
+<a name="line-270"></a>      <span class='varid'>indentRootChildren</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-271"></a>      <span class='varid'>indentRootChildren</span>
+<a name="line-272"></a>	  <span class='keyglyph'>=</span> <span class='varid'>insertNL</span> <span class='varop'>`o`</span> <span class='varid'>indentChild</span> <span class='varop'>`o`</span> <span class='varid'>removeText</span>
+<a name="line-273"></a>	    <span class='keyword'>where</span>
+<a name="line-274"></a>	    <span class='varid'>removeText</span>
+<a name="line-275"></a>		<span class='keyglyph'>=</span> <span class='varid'>none</span> <span class='varop'>`when`</span> <span class='varid'>isXText</span>
+<a name="line-276"></a>	    <span class='varid'>insertNL</span>
+<a name="line-277"></a>		<span class='keyglyph'>=</span> <span class='varid'>this</span> <span class='varop'>+++</span> <span class='varid'>txt</span> <span class='str'>"\n"</span>
+<a name="line-278"></a>	    <span class='varid'>indentChild</span>
+<a name="line-279"></a>		<span class='keyglyph'>=</span> <span class='varid'>modifyChildren</span> <span class='layout'>(</span><span class='varid'>indentTrees</span> <span class='layout'>(</span><span class='varid'>insertIndentation</span> <span class='num'>2</span><span class='layout'>)</span> <span class='conid'>False</span> <span class='num'>1</span><span class='layout'>)</span>
+<a name="line-280"></a>		  <span class='varop'>`whenNot`</span>
+<a name="line-281"></a>		  <span class='varid'>isXDTD</span>		<span class='comment'>-- DTD elements are not indented</span>
+<a name="line-282"></a>
+<a name="line-283"></a><span class='comment'>-- |</span>
+<a name="line-284"></a><span class='comment'>-- filter for removing all not significant whitespace.</span>
+<a name="line-285"></a><span class='comment'>--</span>
+<a name="line-286"></a><span class='comment'>-- the tree traversed for removing whitespace between tags,</span>
+<a name="line-287"></a><span class='comment'>-- that was inserted for indentation and readability.</span>
+<a name="line-288"></a><span class='comment'>-- whitespace is only removed at places, where it's not significat</span>
+<a name="line-289"></a><span class='comment'>-- preserving whitespace may be controlled in a document tree</span>
+<a name="line-290"></a><span class='comment'>-- by a tag attribute @xml:space@</span>
+<a name="line-291"></a><span class='comment'>--</span>
+<a name="line-292"></a><span class='comment'>-- allowed values for this attribute are @default | preserve@</span>
+<a name="line-293"></a><span class='comment'>--</span>
+<a name="line-294"></a><span class='comment'>-- input is root node of the document to be cleaned up</span>
+<a name="line-295"></a><span class='comment'>-- output the semantically equivalent simplified tree</span>
+<a name="line-296"></a><span class='comment'>--</span>
+<a name="line-297"></a><span class='comment'>--</span>
+<a name="line-298"></a><span class='comment'>-- see also : 'indentDoc', 'removeAllWhiteSpace'</span>
+<a name="line-299"></a>
+<a name="line-300"></a><a name="removeDocWhiteSpace"></a><span class='definition'>removeDocWhiteSpace</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-301"></a><span class='definition'>removeDocWhiteSpace</span>
+<a name="line-302"></a>    <span class='keyglyph'>=</span>  <span class='varid'>processChildren</span> <span class='varid'>processRootElement</span>
+<a name="line-303"></a>      <span class='varop'>`when`</span>
+<a name="line-304"></a>      <span class='varid'>isRoot</span>
+<a name="line-305"></a>      <span class='keyword'>where</span>
+<a name="line-306"></a>      <span class='varid'>processRootElement</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-307"></a>      <span class='varid'>processRootElement</span>
+<a name="line-308"></a>	  <span class='keyglyph'>=</span> <span class='varid'>removeText</span> <span class='varop'>.&gt;</span> <span class='varid'>processChild</span>
+<a name="line-309"></a>	    <span class='keyword'>where</span>
+<a name="line-310"></a>	    <span class='varid'>removeText</span>
+<a name="line-311"></a>		<span class='keyglyph'>=</span> <span class='varid'>none</span> <span class='varop'>`when`</span> <span class='varid'>isWhiteSpace</span>
+<a name="line-312"></a>	    <span class='varid'>processChild</span>
+<a name="line-313"></a>		<span class='keyglyph'>=</span> <span class='varid'>choice</span> <span class='keyglyph'>[</span> <span class='varid'>isXDTD</span>
+<a name="line-314"></a>			   <span class='conop'>:-&gt;</span> <span class='varid'>removeAllWhiteSpace</span>			<span class='comment'>-- whitespace in DTD is redundant</span>
+<a name="line-315"></a>			 <span class='layout'>,</span> <span class='varid'>this</span>
+<a name="line-316"></a>			   <span class='conop'>:-&gt;</span> <span class='varid'>modifyChildren</span>				<span class='comment'>-- same strategie as for indentation</span>
+<a name="line-317"></a>			         <span class='layout'>(</span><span class='varid'>indentTrees</span> <span class='varid'>insertNothing</span> <span class='conid'>False</span> <span class='num'>1</span><span class='layout'>)</span>
+<a name="line-318"></a>			 <span class='keyglyph'>]</span>
+<a name="line-319"></a>
+<a name="line-320"></a><a name="indentTrees"></a><span class='definition'>indentTrees</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-321"></a><span class='definition'>indentTrees</span> <span class='keyword'>_</span> <span class='keyword'>_</span> <span class='keyword'>_</span> <span class='conid'>[]</span>
+<a name="line-322"></a>    <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-323"></a><span class='definition'>indentTrees</span> <span class='varid'>indentFilter</span> <span class='varid'>preserveSpace</span> <span class='varid'>level</span> <span class='varid'>ts</span>
+<a name="line-324"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>lsf</span> <span class='varop'>$$</span> <span class='varid'>ls</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='varid'>indentRest</span> <span class='varid'>rs</span>
+<a name="line-325"></a>      <span class='keyword'>where</span>
+<a name="line-326"></a>      <span class='layout'>(</span><span class='varid'>ls</span><span class='layout'>,</span> <span class='varid'>rs</span><span class='layout'>)</span>
+<a name="line-327"></a>	  <span class='keyglyph'>=</span> <span class='varid'>break</span> <span class='layout'>(</span><span class='varid'>satisfies</span> <span class='varid'>isXTag</span><span class='layout'>)</span> <span class='varid'>ts</span>
+<a name="line-328"></a>
+<a name="line-329"></a>      <span class='varid'>isSignificant</span>	<span class='keyglyph'>::</span> <span class='conid'>Bool</span>
+<a name="line-330"></a>      <span class='varid'>isSignificant</span>
+<a name="line-331"></a>	  <span class='keyglyph'>=</span> <span class='varid'>preserveSpace</span>
+<a name="line-332"></a>	    <span class='varop'>||</span>
+<a name="line-333"></a>	    <span class='varid'>any</span> <span class='layout'>(</span><span class='varid'>satisfies</span> <span class='varid'>isSignificantPart</span><span class='layout'>)</span> <span class='varid'>ls</span>
+<a name="line-334"></a>
+<a name="line-335"></a>      <span class='varid'>isSignificantPart</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-336"></a>      <span class='varid'>isSignificantPart</span>
+<a name="line-337"></a>	  <span class='keyglyph'>=</span> <span class='varid'>cat</span> <span class='keyglyph'>[</span> <span class='varid'>isXText</span> <span class='varop'>`guards`</span> <span class='varid'>neg</span> <span class='varid'>isWhiteSpace</span>
+<a name="line-338"></a>		<span class='layout'>,</span> <span class='varid'>isXCdata</span>
+<a name="line-339"></a>		<span class='layout'>,</span> <span class='varid'>isXCharRef</span>
+<a name="line-340"></a>		<span class='layout'>,</span> <span class='varid'>isXEntityRef</span>
+<a name="line-341"></a>		<span class='keyglyph'>]</span>
+<a name="line-342"></a>
+<a name="line-343"></a>      <span class='varid'>lsf</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-344"></a>      <span class='varid'>lsf</span>
+<a name="line-345"></a>	  <span class='keyglyph'>|</span> <span class='varid'>isSignificant</span>
+<a name="line-346"></a>	      <span class='keyglyph'>=</span> <span class='varid'>this</span>
+<a name="line-347"></a>	  <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>
+<a name="line-348"></a>	      <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>none</span> <span class='varop'>`when`</span> <span class='varid'>isWhiteSpace</span><span class='layout'>)</span>
+<a name="line-349"></a>                <span class='varop'>.&gt;</span>
+<a name="line-350"></a>                <span class='layout'>(</span><span class='varid'>indentFilter</span> <span class='varid'>level</span> <span class='varop'>+++</span> <span class='varid'>this</span><span class='layout'>)</span>
+<a name="line-351"></a>
+<a name="line-352"></a>      <span class='varid'>indentRest</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlSFilter</span>
+<a name="line-353"></a>
+<a name="line-354"></a>      <span class='varid'>indentRest</span> <span class='conid'>[]</span>
+<a name="line-355"></a>	  <span class='keyglyph'>|</span> <span class='varid'>isSignificant</span>
+<a name="line-356"></a>	      <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-357"></a>	  <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>
+<a name="line-358"></a>	      <span class='keyglyph'>=</span> <span class='varid'>indentFilter</span> <span class='layout'>(</span><span class='varid'>level</span> <span class='comment'>-</span> <span class='num'>1</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>mkXTextTree</span> <span class='str'>""</span><span class='layout'>)</span>
+<a name="line-359"></a>
+<a name="line-360"></a>      <span class='varid'>indentRest</span> <span class='layout'>(</span><span class='varid'>t'</span><span class='conop'>:</span><span class='varid'>ts'</span><span class='layout'>)</span>
+<a name="line-361"></a>	      <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='layout'>(</span><span class='varid'>modifyChildren</span> <span class='varid'>indentChildren</span> <span class='varop'>.&gt;</span> <span class='varid'>lsf</span><span class='layout'>)</span>
+<a name="line-362"></a>		  <span class='varop'>`when`</span>
+<a name="line-363"></a>                  <span class='varid'>isXTag</span>
+<a name="line-364"></a>		  <span class='varop'>$</span> <span class='varid'>t'</span>
+<a name="line-365"></a>		<span class='layout'>)</span>
+<a name="line-366"></a>                <span class='varop'>++</span>
+<a name="line-367"></a>		<span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>ts'</span>
+<a name="line-368"></a>		  <span class='keyword'>then</span> <span class='varid'>indentRest</span> <span class='varid'>ts'</span>
+<a name="line-369"></a>		  <span class='keyword'>else</span> <span class='varid'>indentTrees</span> <span class='varid'>indentFilter</span> <span class='varid'>preserveSpace</span> <span class='varid'>level</span> <span class='varid'>ts'</span>
+<a name="line-370"></a>		<span class='layout'>)</span>
+<a name="line-371"></a>		<span class='keyword'>where</span>
+<a name="line-372"></a>		<span class='varid'>xmlSpaceAttrName</span>  <span class='keyglyph'>=</span> <span class='str'>"xml:space"</span>
+<a name="line-373"></a>		<span class='varid'>xmlSpaceAttrValue</span> <span class='keyglyph'>=</span> <span class='varid'>valueOf</span> <span class='varid'>xmlSpaceAttrName</span> <span class='varid'>t'</span>
+<a name="line-374"></a>		<span class='varid'>preserveSpace'</span>
+<a name="line-375"></a>		    <span class='keyglyph'>=</span> <span class='varid'>fromMaybe</span> <span class='varid'>preserveSpace</span>
+<a name="line-376"></a>		      <span class='varop'>.</span>
+<a name="line-377"></a>		      <span class='varid'>lookup</span> <span class='varid'>xmlSpaceAttrValue</span>
+<a name="line-378"></a>                      <span class='varop'>$</span> <span class='keyglyph'>[</span> <span class='layout'>(</span><span class='str'>"preserve"</span><span class='layout'>,</span> <span class='conid'>True</span><span class='layout'>)</span>
+<a name="line-379"></a>			<span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"default"</span><span class='layout'>,</span>  <span class='conid'>False</span><span class='layout'>)</span>
+<a name="line-380"></a>			<span class='keyglyph'>]</span>
+<a name="line-381"></a>		<span class='varid'>indentChildren</span>
+<a name="line-382"></a>		    <span class='keyglyph'>|</span> <span class='varid'>all</span> <span class='layout'>(</span><span class='varid'>satisfies</span> <span class='varid'>isWhiteSpace</span><span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>getChildren</span> <span class='varid'>t'</span>
+<a name="line-383"></a>			<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>none</span> <span class='varop'>$$</span><span class='layout'>)</span>
+<a name="line-384"></a>		    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>
+<a name="line-385"></a>			<span class='keyglyph'>=</span> <span class='varid'>indentTrees</span> <span class='varid'>indentFilter</span> <span class='varid'>preserveSpace'</span> <span class='layout'>(</span><span class='varid'>level</span> <span class='varop'>+</span> <span class='num'>1</span><span class='layout'>)</span>
+<a name="line-386"></a>
+<a name="line-387"></a><span class='comment'>-- filter for indenting tags</span>
+<a name="line-388"></a>
+<a name="line-389"></a><a name="insertIndentation"></a><span class='definition'>insertIndentation</span>	<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-390"></a><span class='definition'>insertIndentation</span> <span class='varid'>indentWidth</span> <span class='varid'>level</span>
+<a name="line-391"></a>    <span class='keyglyph'>=</span> <span class='varid'>txt</span> <span class='layout'>(</span><span class='chr'>'\n'</span> <span class='conop'>:</span> <span class='varid'>replicate</span> <span class='layout'>(</span><span class='varid'>level</span> <span class='varop'>*</span> <span class='varid'>indentWidth</span><span class='layout'>)</span> <span class='chr'>' '</span><span class='layout'>)</span>
+<a name="line-392"></a>
+<a name="line-393"></a><span class='comment'>-- filter for removing all whitespace</span>
+<a name="line-394"></a>
+<a name="line-395"></a><a name="insertNothing"></a><span class='definition'>insertNothing</span>		<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-396"></a><span class='definition'>insertNothing</span> <span class='keyword'>_</span>		<span class='keyglyph'>=</span> <span class='varid'>none</span>
+<a name="line-397"></a>
+<a name="line-398"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-399"></a>
+<a name="line-400"></a><span class='comment'>-- |</span>
+<a name="line-401"></a><span class='comment'>-- escape XmlText,</span>
+<a name="line-402"></a><span class='comment'>-- transform all special XML chars into CharRefs</span>
+<a name="line-403"></a>
+<a name="line-404"></a><a name="escapeString"></a><span class='definition'>escapeString</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Char</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-405"></a><span class='definition'>escapeString</span> <span class='sel'>_isEsc</span> <span class='conid'>[]</span>
+<a name="line-406"></a>    <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-407"></a><span class='definition'>escapeString</span> <span class='varid'>isEsc</span> <span class='layout'>(</span><span class='varid'>c</span><span class='conop'>:</span><span class='varid'>s1</span><span class='layout'>)</span>
+<a name="line-408"></a>    <span class='keyglyph'>|</span> <span class='varid'>isEsc</span> <span class='varid'>c</span>
+<a name="line-409"></a>	<span class='keyglyph'>=</span> <span class='varid'>mkXCharRefTree</span> <span class='layout'>(</span><span class='varid'>fromEnum</span> <span class='varid'>c</span><span class='layout'>)</span> <span class='conop'>:</span> <span class='varid'>escapeString</span> <span class='varid'>isEsc</span> <span class='varid'>s1</span>
+<a name="line-410"></a><span class='definition'>escapeString</span> <span class='varid'>isEsc</span> <span class='varid'>s</span>
+<a name="line-411"></a>    <span class='keyglyph'>=</span> <span class='varid'>mkXTextTree</span> <span class='varid'>s1</span> <span class='conop'>:</span> <span class='varid'>escapeString</span> <span class='varid'>isEsc</span> <span class='varid'>s2</span>
+<a name="line-412"></a>      <span class='keyword'>where</span>
+<a name="line-413"></a>      <span class='layout'>(</span><span class='varid'>s1</span><span class='layout'>,</span> <span class='varid'>s2</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>break</span> <span class='varid'>isEsc</span> <span class='varid'>s</span>
+<a name="line-414"></a>
+<a name="line-415"></a><a name="escapeText"></a><span class='definition'>escapeText</span>		<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Char</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-416"></a><span class='definition'>escapeText</span> <span class='varid'>isEsc</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='varid'>n</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-417"></a>    <span class='keyglyph'>|</span> <span class='varid'>isXTextNode</span> <span class='varid'>n</span>
+<a name="line-418"></a>	<span class='keyglyph'>=</span> <span class='varid'>escapeString</span> <span class='varid'>isEsc</span> <span class='layout'>(</span><span class='varid'>textOfXNode</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-419"></a>
+<a name="line-420"></a><span class='definition'>escapeText</span> <span class='varid'>isEsc</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XCmt</span> <span class='varid'>c</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-421"></a>    <span class='keyglyph'>=</span> <span class='varid'>xcmt</span> <span class='layout'>(</span><span class='varid'>xshow</span> <span class='varop'>.</span> <span class='varid'>escapeString</span> <span class='varid'>isEsc</span> <span class='varop'>$</span> <span class='varid'>c</span><span class='layout'>)</span>
+<a name="line-422"></a>
+<a name="line-423"></a><span class='definition'>escapeText</span> <span class='keyword'>_</span> <span class='varid'>t</span>
+<a name="line-424"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>t</span><span class='keyglyph'>]</span>
+<a name="line-425"></a>
+<a name="line-426"></a><span class='comment'>-- |</span>
+<a name="line-427"></a><span class='comment'>-- convert the special XML chars in a text or comment node</span>
+<a name="line-428"></a><span class='comment'>-- into character references</span>
+<a name="line-429"></a><span class='comment'>--</span>
+<a name="line-430"></a><span class='comment'>-- see also 'escapeXmlDoc'</span>
+<a name="line-431"></a> 
+<a name="line-432"></a><a name="escapeXmlText"></a><span class='definition'>escapeXmlText</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-433"></a><span class='definition'>escapeXmlText</span>		<span class='keyglyph'>=</span> <span class='varid'>escapeText</span> <span class='layout'>(</span><span class='varop'>`elem`</span> <span class='str'>"&lt;&amp;"</span><span class='layout'>)</span>	<span class='comment'>-- no escape for ", ' and &gt; required: XML standard 2.4</span>
+<a name="line-434"></a>
+<a name="line-435"></a><span class='comment'>-- |</span>
+<a name="line-436"></a><span class='comment'>-- convert the special XML chars in an attribute value into</span>
+<a name="line-437"></a><span class='comment'>-- charachter references. Not only the XML specials but also \\n, \\r and \\t are converted</span>
+<a name="line-438"></a><span class='comment'>--</span>
+<a name="line-439"></a><span class='comment'>-- see also: 'escapeXmlDoc', 'escapeXmlText'</span>
+<a name="line-440"></a>
+<a name="line-441"></a><a name="escapeXmlAttrValue"></a><span class='definition'>escapeXmlAttrValue</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-442"></a><span class='definition'>escapeXmlAttrValue</span>	<span class='keyglyph'>=</span> <span class='varid'>escapeText</span> <span class='layout'>(</span><span class='varop'>`elem`</span> <span class='str'>"&lt;&gt;\"\'&amp;\n\r\t"</span><span class='layout'>)</span>
+<a name="line-443"></a>
+<a name="line-444"></a><span class='comment'>-- |</span>
+<a name="line-445"></a><span class='comment'>-- convert the special XML chars \", \&lt;, \&gt;, &amp; and \' in a document to char references,</span>
+<a name="line-446"></a><span class='comment'>-- attribute values are converted with 'escapeXmlAttrValue'</span>
+<a name="line-447"></a><span class='comment'>--</span>
+<a name="line-448"></a><span class='comment'>-- see also: 'escapeXmlText', 'escapeXmlAttrValue'</span>
+<a name="line-449"></a>
+<a name="line-450"></a><a name="escapeXmlDoc"></a><span class='definition'>escapeXmlDoc</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-451"></a><span class='definition'>escapeXmlDoc</span>
+<a name="line-452"></a>    <span class='keyglyph'>=</span> <span class='varid'>choice</span> <span class='keyglyph'>[</span> <span class='varid'>isXTag</span>  <span class='conop'>:-&gt;</span> <span class='layout'>(</span><span class='varid'>processChildren</span> <span class='layout'>(</span><span class='varid'>escapeXmlDoc</span><span class='layout'>)</span>
+<a name="line-453"></a>			    <span class='varop'>.&gt;</span>
+<a name="line-454"></a>			    <span class='varid'>processAttr</span> <span class='varid'>escVal</span>
+<a name="line-455"></a>			   <span class='layout'>)</span>
+<a name="line-456"></a>	     <span class='layout'>,</span> <span class='varid'>isXText</span> <span class='conop'>:-&gt;</span> <span class='varid'>escapeXmlText</span>
+<a name="line-457"></a>	     <span class='comment'>-- , isXCmt  :-&gt; escapeXmlText -- no escape in comments reqired: XML standard 2.4</span>
+<a name="line-458"></a>	     <span class='layout'>,</span> <span class='varid'>isXDTD</span>  <span class='conop'>:-&gt;</span> <span class='varid'>processTopDown</span> <span class='varid'>escDTD</span>
+<a name="line-459"></a>	     <span class='layout'>,</span> <span class='varid'>this</span>    <span class='conop'>:-&gt;</span> <span class='varid'>this</span>
+<a name="line-460"></a>	     <span class='keyglyph'>]</span>
+<a name="line-461"></a>      <span class='keyword'>where</span>
+<a name="line-462"></a>      <span class='varid'>escVal</span>   <span class='keyglyph'>=</span> <span class='varid'>processChildren</span> <span class='varid'>escapeXmlAttrValue</span>
+<a name="line-463"></a>      <span class='varid'>escDTD</span>   <span class='keyglyph'>=</span> <span class='varid'>escVal</span> <span class='varop'>`when`</span> <span class='layout'>(</span><span class='varid'>isEntity</span> <span class='varop'>+++</span> <span class='varid'>isParameterEntity</span><span class='layout'>)</span>
+<a name="line-464"></a>
+<a name="line-465"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-466"></a>
+<a name="line-467"></a><span class='comment'>-- |</span>
+<a name="line-468"></a><span class='comment'>-- convert a document tree into an output string representation</span>
+<a name="line-469"></a><span class='comment'>-- with respect to the output encoding.</span>
+<a name="line-470"></a><span class='comment'>--</span>
+<a name="line-471"></a><span class='comment'>-- The children of the document root are stubstituted by</span>
+<a name="line-472"></a><span class='comment'>-- a single text node for the text representation of the document.</span>
+<a name="line-473"></a><span class='comment'>--</span>
+<a name="line-474"></a><span class='comment'>-- Encoding of the document is performed with respect</span>
+<a name="line-475"></a><span class='comment'>-- to the @output-encoding@ attribute in the root node, or if not present,</span>
+<a name="line-476"></a><span class='comment'>-- of the @encoding@ attribute for the original input encoding.</span>
+<a name="line-477"></a><span class='comment'>-- If the encoding is not specified or not supported, UTF-8 is taken.</span>
+<a name="line-478"></a>
+<a name="line-479"></a><a name="unparseXmlDoc"></a><span class='definition'>unparseXmlDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-480"></a><span class='definition'>unparseXmlDoc</span> <span class='varid'>n</span>
+<a name="line-481"></a>    <span class='keyglyph'>=</span> <span class='varid'>modifyChildren</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>modifyText</span> <span class='varid'>encFct</span> <span class='varop'>$$</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>xmlTreesToText</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-482"></a>    <span class='keyword'>where</span>
+<a name="line-483"></a>    <span class='varid'>encFct</span> <span class='keyglyph'>=</span> <span class='varid'>fromMaybe</span> <span class='varid'>id</span> <span class='layout'>(</span><span class='varid'>getOutputEncodingFct</span> <span class='layout'>(</span><span class='varid'>encSpec</span> <span class='varid'>n</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-484"></a>
+<a name="line-485"></a><a name="encSpec"></a><span class='definition'>encSpec</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-486"></a><span class='definition'>encSpec</span> <span class='varid'>n</span>
+<a name="line-487"></a>    <span class='keyglyph'>=</span> <span class='varid'>head</span> <span class='varop'>.</span> <span class='varid'>filter</span> <span class='layout'>(</span><span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>null</span><span class='layout'>)</span>
+<a name="line-488"></a>      <span class='varop'>$</span> <span class='keyglyph'>[</span> <span class='varid'>valueOf</span> <span class='varid'>a_output_encoding</span> <span class='varid'>n</span>
+<a name="line-489"></a>	<span class='layout'>,</span> <span class='varid'>valueOf</span> <span class='varid'>a_encoding</span> <span class='varid'>n</span>
+<a name="line-490"></a>	<span class='layout'>,</span> <span class='varid'>utf8</span>
+<a name="line-491"></a>	<span class='keyglyph'>]</span>
+<a name="line-492"></a>
+<a name="line-493"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-494"></a><span class='comment'>--</span>
+<a name="line-495"></a><span class='comment'>-- add or modify a XML directive for a document</span>
+<a name="line-496"></a><span class='comment'>-- for specifying the encoding scheme</span>
+<a name="line-497"></a>
+<a name="line-498"></a><a name="addXmlPiToDoc"></a><span class='definition'>addXmlPiToDoc</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-499"></a><span class='definition'>addXmlPiToDoc</span> <span class='varid'>n</span>
+<a name="line-500"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>modifyChildren</span> <span class='varid'>addX</span>				<span class='comment'>-- add &lt;?xml ...&gt;, if neccessary</span>
+<a name="line-501"></a>	<span class='varop'>`whenNot`</span>
+<a name="line-502"></a>	<span class='layout'>(</span><span class='varid'>getChildren</span> <span class='varop'>.&gt;</span> <span class='varid'>isPi</span> <span class='varid'>t_xml</span><span class='layout'>)</span>
+<a name="line-503"></a>      <span class='layout'>)</span>
+<a name="line-504"></a>      <span class='varop'>.&gt;</span>
+<a name="line-505"></a>      <span class='varid'>processChildren</span> <span class='layout'>(</span> <span class='varid'>addAttr</span> <span class='varid'>a_encoding</span> <span class='varid'>enc</span>		<span class='comment'>-- set or replace encoding="..."</span>
+<a name="line-506"></a>			<span class='varop'>`when`</span>
+<a name="line-507"></a>			<span class='varid'>isPi</span> <span class='varid'>t_xml</span>
+<a name="line-508"></a>		      <span class='layout'>)</span>
+<a name="line-509"></a>      <span class='varop'>$</span> <span class='varid'>n</span>
+<a name="line-510"></a>    <span class='keyword'>where</span>
+<a name="line-511"></a>    <span class='varid'>enc</span> <span class='keyglyph'>=</span> <span class='varid'>encSpec</span> <span class='varid'>n</span>
+<a name="line-512"></a>    <span class='varid'>addX</span> <span class='varid'>cs</span> <span class='keyglyph'>=</span> <span class='varid'>mkXmlDeclTree</span> <span class='layout'>(</span><span class='varid'>xattr</span> <span class='varid'>a_version</span> <span class='str'>"1.0"</span><span class='layout'>)</span> <span class='conop'>:</span> <span class='varid'>xtext</span> <span class='str'>"\n"</span> <span class='varop'>++</span> <span class='varid'>cs</span>
+<a name="line-513"></a>
+<a name="line-514"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-515"></a>
+<a name="line-516"></a><span class='comment'>-- |</span>
+<a name="line-517"></a><span class='comment'>-- convert a document into a text and add line numbers to the text representation.</span>
+<a name="line-518"></a><span class='comment'>-- </span>
+<a name="line-519"></a><span class='comment'>-- Result is a root node with a single text node as child.</span>
+<a name="line-520"></a><span class='comment'>-- Useful for debugging and trace output.</span>
+<a name="line-521"></a><span class='comment'>-- see also : 'haskellRepOfXmlDoc', 'treeRepOfXmlDoc'</span>
+<a name="line-522"></a>
+<a name="line-523"></a><a name="numberLinesInXmlDoc"></a><span class='definition'>numberLinesInXmlDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-524"></a><span class='definition'>numberLinesInXmlDoc</span>
+<a name="line-525"></a>    <span class='keyglyph'>=</span> <span class='varid'>modifyChildren</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>modifyText</span> <span class='varid'>numberLines</span> <span class='varop'>$$</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>xmlTreesToText</span><span class='layout'>)</span>
+<a name="line-526"></a>
+<a name="line-527"></a><a name="numberLines"></a><span class='definition'>numberLines</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-528"></a><span class='definition'>numberLines</span> <span class='varid'>str</span>
+<a name="line-529"></a>    <span class='keyglyph'>=</span> <span class='varid'>concat</span> <span class='varop'>$</span>
+<a name="line-530"></a>      <span class='varid'>zipWith</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>n</span> <span class='varid'>l</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>lineNr</span> <span class='varid'>n</span> <span class='varop'>++</span> <span class='varid'>l</span> <span class='varop'>++</span> <span class='str'>"\n"</span><span class='layout'>)</span> <span class='keyglyph'>[</span><span class='num'>1</span><span class='keyglyph'>..</span><span class='keyglyph'>]</span> <span class='layout'>(</span><span class='varid'>lines</span> <span class='varid'>str</span><span class='layout'>)</span>
+<a name="line-531"></a>      <span class='keyword'>where</span>
+<a name="line-532"></a>      <span class='varid'>lineNr</span>	<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-533"></a>      <span class='varid'>lineNr</span> <span class='varid'>n</span>	<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>reverse</span> <span class='layout'>(</span><span class='varid'>take</span> <span class='num'>6</span><span class='layout'>(</span><span class='varid'>reverse</span> <span class='layout'>(</span><span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='varid'>replicate</span> <span class='num'>6</span> <span class='chr'>' '</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>"  "</span>
+<a name="line-534"></a>
+<a name="line-535"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-536"></a>
+<a name="line-537"></a><span class='comment'>-- |</span>
+<a name="line-538"></a><span class='comment'>-- convert a document into a text representation in tree form.</span>
+<a name="line-539"></a><span class='comment'>--</span>
+<a name="line-540"></a><span class='comment'>-- Useful for debugging and trace output.</span>
+<a name="line-541"></a><span class='comment'>-- see also : 'haskellRepOfXmlDoc', 'numberLinesInXmlDoc'</span>
+<a name="line-542"></a>
+<a name="line-543"></a><a name="treeRepOfXmlDoc"></a><span class='definition'>treeRepOfXmlDoc</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-544"></a><span class='definition'>treeRepOfXmlDoc</span>
+<a name="line-545"></a>    <span class='keyglyph'>=</span> <span class='varid'>rootTag</span> <span class='keyglyph'>[</span><span class='varid'>getAttrl</span><span class='keyglyph'>]</span> <span class='keyglyph'>[</span><span class='varid'>formatXmlContents</span><span class='keyglyph'>]</span>
+<a name="line-546"></a>
+<a name="line-547"></a><span class='comment'>-- |</span>
+<a name="line-548"></a><span class='comment'>-- convert a document into a Haskell representation (with show).</span>
+<a name="line-549"></a><span class='comment'>--</span>
+<a name="line-550"></a><span class='comment'>-- Useful for debugging and trace output.</span>
+<a name="line-551"></a><span class='comment'>-- see also : 'treeRepOfXmlDoc', 'numberLinesInXmlDoc'</span>
+<a name="line-552"></a>
+<a name="line-553"></a><a name="haskellRepOfXmlDoc"></a><span class='definition'>haskellRepOfXmlDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-554"></a><span class='definition'>haskellRepOfXmlDoc</span> <span class='varid'>n</span>
+<a name="line-555"></a>    <span class='keyglyph'>=</span> <span class='varid'>rootTag</span> <span class='keyglyph'>[</span><span class='varid'>getAttrl</span><span class='keyglyph'>]</span> <span class='keyglyph'>[</span><span class='varid'>txt</span> <span class='varop'>$</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='keyglyph'>]</span> <span class='varid'>n</span>
+<a name="line-556"></a>
+<a name="line-557"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-558"></a>
+<a name="line-559"></a><a name="addHeadlineToXmlDoc"></a><span class='definition'>addHeadlineToXmlDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-560"></a><span class='definition'>addHeadlineToXmlDoc</span> <span class='varid'>n</span>
+<a name="line-561"></a>    <span class='keyglyph'>=</span> <span class='varid'>replaceChildren</span> <span class='layout'>(</span><span class='varid'>xtext</span> <span class='varid'>title</span> <span class='varop'>++</span> <span class='varid'>getChildren</span> <span class='varid'>n</span> <span class='varop'>++</span> <span class='varid'>xtext</span> <span class='str'>"\n"</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-562"></a>      <span class='keyword'>where</span>
+<a name="line-563"></a>      <span class='varid'>headline</span>  <span class='keyglyph'>=</span> <span class='str'>"content of: "</span> <span class='varop'>++</span> <span class='varid'>valueOf</span> <span class='varid'>a_source</span> <span class='varid'>n</span>
+<a name="line-564"></a>      <span class='varid'>underline</span> <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='keyglyph'>\</span><span class='keyword'>_</span> <span class='keyglyph'>-&gt;</span> <span class='chr'>'='</span><span class='layout'>)</span> <span class='varid'>headline</span>
+<a name="line-565"></a>      <span class='varid'>title</span>     <span class='keyglyph'>=</span> <span class='str'>"\n"</span> <span class='varop'>++</span> <span class='varid'>headline</span> <span class='varop'>++</span> <span class='str'>"\n"</span> <span class='varop'>++</span> <span class='varid'>underline</span> <span class='varop'>++</span> <span class='str'>"\n\n"</span>
+<a name="line-566"></a>
+<a name="line-567"></a><span class='comment'>-- ------------------------------------------------------------</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-DOM-Namespace.html b/doc/hxt-filter/src/Text-XML-HXT-DOM-Namespace.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-DOM-Namespace.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- main namespace filter for propagation, checking, tracing and error handling</span>
+<a name="line-3"></a>
+<a name="line-4"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>Namespace</span>
+<a name="line-5"></a>    <span class='layout'>(</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>Namespace</span>
+<a name="line-6"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>NamespaceFilter</span>
+<a name="line-7"></a>    <span class='layout'>)</span>
+<a name="line-8"></a><span class='keyword'>where</span>
+<a name="line-9"></a>
+<a name="line-10"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-11"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-12"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>NamespaceFilter</span>
+<a name="line-13"></a>
+<a name="line-14"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlOutput</span>
+<a name="line-15"></a>    <span class='layout'>(</span> <span class='varid'>traceTree</span>
+<a name="line-16"></a>    <span class='layout'>,</span> <span class='varid'>traceSource</span>
+<a name="line-17"></a>    <span class='layout'>,</span> <span class='varid'>traceMsg</span>
+<a name="line-18"></a>    <span class='layout'>)</span>
+<a name="line-19"></a>
+<a name="line-20"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-21"></a>
+<a name="line-22"></a><span class='comment'>-- |</span>
+<a name="line-23"></a><span class='comment'>-- propagate all namespace declarations, check namespace constraints and issue errors.</span>
+<a name="line-24"></a><span class='comment'>-- If no error was found, result is the unchanged input tree, else the root node \"\/\" with an empty document is returned.</span>
+<a name="line-25"></a><span class='comment'>--</span>
+<a name="line-26"></a><span class='comment'>-- see also : 'propagateNamespaces', 'validateNamespaces'</span>
+<a name="line-27"></a>
+<a name="line-28"></a><a name="propagateAndValidateNamespaces"></a><span class='definition'>propagateAndValidateNamespaces</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-29"></a><span class='definition'>propagateAndValidateNamespaces</span>
+<a name="line-30"></a>    <span class='keyglyph'>=</span> <span class='varid'>traceMsg</span> <span class='num'>2</span> <span class='str'>"propagating namespaces"</span>
+<a name="line-31"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-32"></a>      <span class='varid'>liftMf</span> <span class='varid'>propagateNamespaces</span>
+<a name="line-33"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-34"></a>      <span class='varid'>traceTree</span>
+<a name="line-35"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-36"></a>      <span class='varid'>traceSource</span>
+<a name="line-37"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-38"></a>      <span class='varid'>traceMsg</span> <span class='num'>2</span> <span class='str'>"validating namespaces"</span>
+<a name="line-39"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-40"></a>      <span class='varid'>validate</span>
+<a name="line-41"></a>    <span class='keyword'>where</span>
+<a name="line-42"></a>    <span class='varid'>validate</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-43"></a>    <span class='varid'>validate</span> <span class='varid'>t</span>
+<a name="line-44"></a>	<span class='keyglyph'>=</span> <span class='keyword'>let</span>
+<a name="line-45"></a>	  <span class='varid'>errs</span> <span class='keyglyph'>=</span> <span class='varid'>validateNamespaces</span> <span class='varid'>t</span>
+<a name="line-46"></a>	  <span class='keyword'>in</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>errs</span>
+<a name="line-47"></a>	     <span class='keyword'>then</span> <span class='varid'>thisM</span> <span class='varid'>t</span>
+<a name="line-48"></a>	     <span class='keyword'>else</span> <span class='keyword'>do</span>
+<a name="line-49"></a>		  <span class='varid'>liftF</span> <span class='varid'>this</span> <span class='varop'>$$&lt;</span> <span class='varid'>errs</span>
+<a name="line-50"></a>		  <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>setStatus</span> <span class='varid'>c_err</span> <span class='str'>"namespace propagation"</span> <span class='varid'>t</span><span class='layout'>)</span>
+<a name="line-51"></a>	  
+<a name="line-52"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-DOM-NamespaceFilter.html b/doc/hxt-filter/src/Text-XML-HXT-DOM-NamespaceFilter.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-DOM-NamespaceFilter.html
@@ -0,0 +1,234 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- Namespace filter</span>
+<a name="line-3"></a><span class='comment'>--</span>
+<a name="line-4"></a><span class='comment'>-- Namespaces are processed with two main filter, 'propagateNamespaces'</span>
+<a name="line-5"></a><span class='comment'>-- and 'validateNamespaces'.</span>
+<a name="line-6"></a><span class='comment'>--</span>
+<a name="line-7"></a><span class='comment'>-- 'propagateNamespaces' takes a XML tree and</span>
+<a name="line-8"></a><span class='comment'>-- attaches extra namespace info at every tag name and attribute name.</span>
+<a name="line-9"></a><span class='comment'>-- So after processing a tree with 'propagateNamespaces', the access functions</span>
+<a name="line-10"></a><span class='comment'>-- "namespaceOf" and "universalNameOf" deliver the associated namespace (or \"\")</span>
+<a name="line-11"></a><span class='comment'>-- for tag names and attribute names.</span>
+<a name="line-12"></a><span class='comment'>--</span>
+<a name="line-13"></a><span class='comment'>-- 'validateNamespaces' checks whether names are wellformed related to the XML namespace definition.</span>
+<a name="line-14"></a><span class='comment'>-- whether a legal namespace is declared for all prefixes, and whether attribute names are unique</span>
+<a name="line-15"></a><span class='comment'>-- related to universal names.</span>
+<a name="line-16"></a>
+<a name="line-17"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>NamespaceFilter</span>
+<a name="line-18"></a>    <span class='layout'>(</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>NamespaceFilter</span>
+<a name="line-19"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>NamespacePredicates</span>
+<a name="line-20"></a>    <span class='layout'>)</span>
+<a name="line-21"></a><span class='keyword'>where</span>
+<a name="line-22"></a>
+<a name="line-23"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-24"></a>
+<a name="line-25"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>NamespacePredicates</span>
+<a name="line-26"></a>
+<a name="line-27"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>Util</span>
+<a name="line-28"></a>    <span class='layout'>(</span> <span class='varid'>doubles</span> <span class='layout'>)</span>
+<a name="line-29"></a>
+<a name="line-30"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-31"></a><span class='comment'>--</span>
+<a name="line-32"></a>
+<a name="line-33"></a><span class='comment'>-- |</span>
+<a name="line-34"></a><span class='comment'>-- Type for the namespace association list, used when propagating namespaces by</span>
+<a name="line-35"></a><span class='comment'>-- modifying the 'QName' values in a tree</span>
+<a name="line-36"></a>
+<a name="line-37"></a><a name="NamespaceTable"></a><span class='keyword'>type</span> <span class='conid'>NamespaceTable</span> <span class='keyglyph'>=</span> <span class='conid'>NsEnv</span>
+<a name="line-38"></a>
+<a name="line-39"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-40"></a>
+<a name="line-41"></a><span class='comment'>-- |</span>
+<a name="line-42"></a><span class='comment'>-- propagate all namespace declarations \"xmlns:ns=...\" to all</span>
+<a name="line-43"></a><span class='comment'>-- tag and attribute nodes of a document.</span>
+<a name="line-44"></a><span class='comment'>--</span>
+<a name="line-45"></a><span class='comment'>-- This filter does not check for illegal use of namespaces.</span>
+<a name="line-46"></a><span class='comment'>-- The real work is done by 'propagateNamespaceEnv'.</span>
+<a name="line-47"></a><span class='comment'>--</span>
+<a name="line-48"></a><span class='comment'>-- The filter may be applied repeatedly if neccessary.</span>
+<a name="line-49"></a>
+<a name="line-50"></a><a name="propagateNamespaces"></a><span class='definition'>propagateNamespaces</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-51"></a><span class='definition'>propagateNamespaces</span>	<span class='keyglyph'>=</span> <span class='varid'>propagateNamespaceEnv</span> <span class='keyglyph'>[</span> <span class='layout'>(</span><span class='varid'>a_xml</span><span class='layout'>,</span> <span class='varid'>xmlNamespace</span><span class='layout'>)</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>a_xmlns</span><span class='layout'>,</span> <span class='varid'>xmlnsNamespace</span><span class='layout'>)</span> <span class='keyglyph'>]</span>
+<a name="line-52"></a>
+<a name="line-53"></a><span class='comment'>-- |</span>
+<a name="line-54"></a><span class='comment'>-- attaches the namespace info given by the namespace table</span>
+<a name="line-55"></a><span class='comment'>-- to a tag node and its attributes and children.</span>
+<a name="line-56"></a>
+<a name="line-57"></a><a name="propagateNamespaceEnv"></a><span class='definition'>propagateNamespaceEnv</span>	<span class='keyglyph'>::</span> <span class='conid'>NamespaceTable</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-58"></a><span class='definition'>propagateNamespaceEnv</span> <span class='varid'>env</span> <span class='varid'>n</span>
+<a name="line-59"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>processAttr</span> <span class='layout'>(</span><span class='varid'>attachNamespaceUrisToAttr</span> <span class='varid'>newEnv</span><span class='layout'>)</span>
+<a name="line-60"></a>	  <span class='varop'>.&gt;</span>
+<a name="line-61"></a>	  <span class='varid'>processChildren</span> <span class='layout'>(</span><span class='varid'>propagateNamespaceEnv</span> <span class='varid'>newEnv</span><span class='layout'>)</span>
+<a name="line-62"></a>	  <span class='varop'>.&gt;</span>
+<a name="line-63"></a>	  <span class='varid'>modifyQName</span> <span class='layout'>(</span><span class='varid'>setNamespace</span> <span class='varid'>newEnv</span><span class='layout'>)</span>
+<a name="line-64"></a>	<span class='layout'>)</span>
+<a name="line-65"></a>	<span class='varop'>`when`</span>
+<a name="line-66"></a>	<span class='varid'>isXTag</span>
+<a name="line-67"></a>      <span class='layout'>)</span>
+<a name="line-68"></a>      <span class='varop'>$</span> <span class='varid'>n</span>
+<a name="line-69"></a>    <span class='keyword'>where</span>
+<a name="line-70"></a>    <span class='varid'>nsAttrs</span>	<span class='keyglyph'>=</span> <span class='varid'>getAttrl</span>				<span class='comment'>-- scan all attributes</span>
+<a name="line-71"></a>		  <span class='varop'>.&gt;</span>
+<a name="line-72"></a>		  <span class='varid'>isOfAttr</span> <span class='layout'>(</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>px</span><span class='layout'>,</span> <span class='varid'>lp</span><span class='layout'>)</span>
+<a name="line-73"></a>			     <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>px</span> <span class='varop'>==</span> <span class='varid'>a_xmlns</span>		<span class='comment'>-- check for prefix or whole name is "xmlns"</span>
+<a name="line-74"></a>				 <span class='varop'>&amp;&amp;</span>
+<a name="line-75"></a>				 <span class='varid'>lp</span> <span class='varop'>/=</span> <span class='str'>":"</span>		<span class='comment'>-- check for none empty local part, "xmlns:" is not a legal name</span>
+<a name="line-76"></a>				<span class='layout'>)</span>
+<a name="line-77"></a>			     <span class='layout'>)</span>
+<a name="line-78"></a>			     <span class='varop'>.</span> <span class='varid'>span</span> <span class='layout'>(</span><span class='varop'>/=</span> <span class='chr'>':'</span><span class='layout'>)</span>		<span class='comment'>-- break the name into a pair ("prefix", ":localPart")</span>
+<a name="line-79"></a>			     <span class='varop'>.</span> <span class='varid'>qualifiedName</span>		<span class='comment'>-- select attribute name</span>
+<a name="line-80"></a>			   <span class='layout'>)</span>
+<a name="line-81"></a>		  <span class='varop'>$</span> <span class='varid'>n</span>
+<a name="line-82"></a>    <span class='varid'>nsDecl</span>	<span class='keyglyph'>=</span> <span class='varid'>zip</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>drop</span> <span class='num'>1</span>			<span class='comment'>-- drop the ":", empty local part represents default name space</span>
+<a name="line-83"></a>			    <span class='varop'>.</span> <span class='varid'>snd</span>			<span class='comment'>-- take the local part with leading ":"</span>
+<a name="line-84"></a>			    <span class='varop'>.</span> <span class='varid'>span</span> <span class='layout'>(</span><span class='varop'>/=</span> <span class='chr'>':'</span><span class='layout'>)</span>		<span class='comment'>-- break it like above</span>
+<a name="line-85"></a>			    <span class='varop'>.</span> <span class='varid'>nameOf</span>			<span class='comment'>-- select attribute name</span>
+<a name="line-86"></a>			   <span class='layout'>)</span> <span class='varid'>nsAttrs</span><span class='layout'>)</span>
+<a name="line-87"></a>		      <span class='layout'>(</span><span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>xshow</span>
+<a name="line-88"></a>			    <span class='varop'>.</span>
+<a name="line-89"></a>			    <span class='varid'>getChildren</span>
+<a name="line-90"></a>			   <span class='layout'>)</span> <span class='varid'>nsAttrs</span><span class='layout'>)</span>
+<a name="line-91"></a>    <span class='varid'>newEnv</span>	<span class='keyglyph'>=</span> <span class='varid'>addEntries</span> <span class='varid'>nsDecl</span> <span class='varid'>env</span>
+<a name="line-92"></a>
+<a name="line-93"></a>    <span class='varid'>attachNamespaceUrisToAttr</span>	<span class='keyglyph'>::</span> <span class='conid'>NamespaceTable</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-94"></a>    <span class='varid'>attachNamespaceUrisToAttr</span> <span class='varid'>attrEnv</span>
+<a name="line-95"></a>	<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>isOfAttr</span> <span class='layout'>(</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>px</span><span class='layout'>,</span> <span class='varid'>lp</span><span class='layout'>)</span>
+<a name="line-96"></a>			<span class='keyglyph'>-&gt;</span> <span class='layout'>(</span> <span class='layout'>(</span><span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>null</span> <span class='varop'>.</span> <span class='varid'>drop</span> <span class='num'>1</span><span class='layout'>)</span> <span class='varid'>lp</span>	<span class='comment'>-- prefix and local part must not be empty</span>
+<a name="line-97"></a>			     <span class='varop'>&amp;&amp;</span>
+<a name="line-98"></a>			     <span class='layout'>(</span><span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>null</span><span class='layout'>)</span> <span class='varid'>px</span>
+<a name="line-99"></a>			   <span class='layout'>)</span>
+<a name="line-100"></a>		       <span class='layout'>)</span>
+<a name="line-101"></a>		       <span class='varop'>.</span> <span class='varid'>span</span> <span class='layout'>(</span><span class='varop'>/=</span> <span class='chr'>':'</span><span class='layout'>)</span>			<span class='comment'>-- break the name into a pair ("prefix", ":localPart")</span>
+<a name="line-102"></a>		       <span class='varop'>.</span> <span class='varid'>qualifiedName</span>			<span class='comment'>-- select attribute name</span>
+<a name="line-103"></a>		     <span class='layout'>)</span>
+<a name="line-104"></a>	    <span class='varop'>`guards`</span>
+<a name="line-105"></a>	    <span class='varid'>modifyQName</span> <span class='layout'>(</span><span class='varid'>setNamespace</span> <span class='varid'>attrEnv</span><span class='layout'>)</span>
+<a name="line-106"></a>	  <span class='layout'>)</span>
+<a name="line-107"></a>          <span class='varop'>`orElse`</span>
+<a name="line-108"></a>	  <span class='layout'>(</span> <span class='varid'>modifyQName</span> <span class='layout'>(</span><span class='varid'>const</span> <span class='varid'>xmlnsQN</span><span class='layout'>)</span>			<span class='comment'>-- "xmlns" ist the only attr name without prefix but with an associated namespace URI</span>
+<a name="line-109"></a>	    <span class='varop'>`when`</span>
+<a name="line-110"></a>	    <span class='varid'>isAttr</span> <span class='varid'>a_xmlns</span>
+<a name="line-111"></a>	  <span class='layout'>)</span>
+<a name="line-112"></a>
+<a name="line-113"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-114"></a>
+<a name="line-115"></a><span class='comment'>-- |</span>
+<a name="line-116"></a><span class='comment'>-- validate the namespace constraints in a whole tree.</span>
+<a name="line-117"></a><span class='comment'>-- result is the list of errors concerning namespaces.</span>
+<a name="line-118"></a><span class='comment'>-- Work is done by applying 'validate1Namespaces' to all nodes.</span>
+<a name="line-119"></a><span class='comment'>-- Predicates 'isWellformedQName', 'isWellformedQualifiedName', 'isDeclaredNamespace'</span>
+<a name="line-120"></a><span class='comment'>-- and 'isWellformedNSDecl' are applied to the appropriate tags and attributes.</span>
+<a name="line-121"></a>
+<a name="line-122"></a><a name="validateNamespaces"></a><span class='definition'>validateNamespaces</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-123"></a><span class='definition'>validateNamespaces</span>
+<a name="line-124"></a>    <span class='keyglyph'>=</span> <span class='varid'>choice</span> <span class='keyglyph'>[</span> <span class='varid'>isRoot</span>
+<a name="line-125"></a>               <span class='conop'>:-&gt;</span> <span class='varid'>getChildren</span> <span class='varop'>.&gt;</span> <span class='varid'>validateNamespaces</span>		<span class='comment'>-- root is correct by definition</span>
+<a name="line-126"></a>	     <span class='layout'>,</span> <span class='varid'>this</span>
+<a name="line-127"></a>	       <span class='conop'>:-&gt;</span> <span class='varid'>multi</span> <span class='varid'>validate1Namespaces</span>
+<a name="line-128"></a>	     <span class='keyglyph'>]</span>
+<a name="line-129"></a>
+<a name="line-130"></a><span class='comment'>-- |</span>
+<a name="line-131"></a><span class='comment'>-- a single node for namespace constrains.</span>
+<a name="line-132"></a>
+<a name="line-133"></a><a name="validate1Namespaces"></a><span class='definition'>validate1Namespaces</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-134"></a><span class='definition'>validate1Namespaces</span>
+<a name="line-135"></a>    <span class='keyglyph'>=</span> <span class='varid'>choice</span> <span class='keyglyph'>[</span> <span class='varid'>isXTag</span>
+<a name="line-136"></a>	       <span class='conop'>:-&gt;</span>
+<a name="line-137"></a>	       <span class='varid'>cat</span> <span class='keyglyph'>[</span> <span class='varid'>isOfTag</span> <span class='layout'>(</span> <span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>isWellformedQName</span> <span class='layout'>)</span>
+<a name="line-138"></a>		     <span class='varop'>`guards`</span>
+<a name="line-139"></a>		     <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>n</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"tag name "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>nameOf</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>" is not a wellformed qualified name"</span><span class='layout'>)</span> <span class='varid'>n</span> <span class='layout'>)</span>
+<a name="line-140"></a>
+<a name="line-141"></a>		   <span class='layout'>,</span> <span class='varid'>isOfTag</span> <span class='layout'>(</span> <span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>isDeclaredNamespace</span> <span class='layout'>)</span>
+<a name="line-142"></a>		     <span class='varop'>`guards`</span>
+<a name="line-143"></a>		     <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>n</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"namespace for prefix in tag name "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>nameOf</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>" is undefined"</span><span class='layout'>)</span> <span class='varid'>n</span> <span class='layout'>)</span>
+<a name="line-144"></a>
+<a name="line-145"></a>                   <span class='layout'>,</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>n</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span> <span class='keyword'>let</span>
+<a name="line-146"></a>		               <span class='varid'>dbls</span> <span class='keyglyph'>=</span> <span class='varid'>doubles</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>map</span> <span class='varid'>universalNameOf</span> <span class='varop'>.</span> <span class='varid'>getAttrl</span><span class='layout'>)</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-147"></a>		               <span class='keyword'>in</span>
+<a name="line-148"></a>		               <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>dbls</span>
+<a name="line-149"></a>		               <span class='keyword'>then</span> <span class='varid'>none</span>
+<a name="line-150"></a>                               <span class='keyword'>else</span> <span class='varid'>err</span> <span class='layout'>(</span> <span class='str'>"multiple occurences of universal names for attributes of tag "</span>
+<a name="line-151"></a>					  <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>nameOf</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-152"></a>					  <span class='varop'>++</span> <span class='str'>" : "</span> <span class='varop'>++</span> <span class='varid'>foldr1</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>x</span> <span class='varid'>y</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>x</span> <span class='varop'>++</span> <span class='str'>", "</span> <span class='varop'>++</span> <span class='varid'>y</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='varid'>show</span> <span class='varid'>dbls</span><span class='layout'>)</span>
+<a name="line-153"></a>					<span class='layout'>)</span>
+<a name="line-154"></a>			     <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>n</span>
+<a name="line-155"></a>		     <span class='layout'>)</span>
+<a name="line-156"></a>
+<a name="line-157"></a>		   <span class='layout'>,</span> <span class='varid'>getAttrl</span> <span class='varop'>.&gt;</span> <span class='varid'>validate1Namespaces</span>
+<a name="line-158"></a>		   <span class='keyglyph'>]</span>
+<a name="line-159"></a>
+<a name="line-160"></a>	     <span class='layout'>,</span> <span class='varid'>isXAttr</span>
+<a name="line-161"></a>	       <span class='conop'>:-&gt;</span>
+<a name="line-162"></a>	       <span class='varid'>cat</span> <span class='keyglyph'>[</span> <span class='varid'>isOfAttr</span> <span class='layout'>(</span> <span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>isWellformedQName</span> <span class='layout'>)</span>
+<a name="line-163"></a>		     <span class='varop'>`guards`</span>
+<a name="line-164"></a>		     <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>n</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"attribute name "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>nameOf</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>" is not a wellformed qualified name"</span><span class='layout'>)</span> <span class='varid'>n</span> <span class='layout'>)</span>
+<a name="line-165"></a>
+<a name="line-166"></a>		   <span class='layout'>,</span> <span class='varid'>isOfAttr</span> <span class='layout'>(</span> <span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>isDeclaredNamespace</span> <span class='layout'>)</span>
+<a name="line-167"></a>	             <span class='varop'>`guards`</span>
+<a name="line-168"></a>		     <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>n</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"namespace for prefix in attribute name "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>nameOf</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>" is undefined"</span><span class='layout'>)</span> <span class='varid'>n</span> <span class='layout'>)</span>
+<a name="line-169"></a>
+<a name="line-170"></a>                   <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>hasPrefix</span> <span class='varid'>a_xmlns</span> <span class='varop'>.&gt;</span> <span class='varid'>neg</span> <span class='layout'>(</span><span class='varid'>xmlTreesToText</span> <span class='varop'>.</span> <span class='varid'>getChildren</span><span class='layout'>)</span> <span class='layout'>)</span>
+<a name="line-171"></a>		     <span class='varop'>`guards`</span>
+<a name="line-172"></a>		     <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>n</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"namespace value of namespace declaration for "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>nameOf</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>" has no value"</span><span class='layout'>)</span> <span class='varid'>n</span> <span class='layout'>)</span>
+<a name="line-173"></a>
+<a name="line-174"></a>                   <span class='layout'>,</span> <span class='varid'>isOfAttr</span> <span class='layout'>(</span> <span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>isWellformedNSDecl</span> <span class='layout'>)</span>
+<a name="line-175"></a>		     <span class='varop'>`guards`</span>
+<a name="line-176"></a>		     <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>n</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"illegal namespace declaration with reserved prefix "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>localPartOf</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>" starting with \"xml\""</span><span class='layout'>)</span> <span class='varid'>n</span> <span class='layout'>)</span>
+<a name="line-177"></a>	           <span class='keyglyph'>]</span>
+<a name="line-178"></a>
+<a name="line-179"></a>             <span class='layout'>,</span> <span class='varid'>isXDTD</span>
+<a name="line-180"></a>	       <span class='conop'>:-&gt;</span>
+<a name="line-181"></a>	       <span class='varid'>cat</span> <span class='keyglyph'>[</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>isDoctype</span> <span class='varop'>+++</span> <span class='varid'>isAttlist</span> <span class='varop'>+++</span> <span class='varid'>isElement</span> <span class='varop'>+++</span> <span class='varid'>isDTDName</span> <span class='layout'>)</span>
+<a name="line-182"></a>		       <span class='varop'>.&gt;</span>
+<a name="line-183"></a>		       <span class='varid'>isOf</span> <span class='layout'>(</span> <span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>isWellformedQualifiedName</span> <span class='varop'>.</span> <span class='varid'>valueOfDTD</span> <span class='varid'>a_name</span> <span class='layout'>)</span>
+<a name="line-184"></a>		     <span class='layout'>)</span>
+<a name="line-185"></a>		     <span class='varop'>`guards`</span>
+<a name="line-186"></a>                     <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>n</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"a DTD part contains a not wellformed qualified Name: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>valueOfDTD</span> <span class='varid'>a_name</span> <span class='varid'>n</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>n</span> <span class='layout'>)</span>
+<a name="line-187"></a>
+<a name="line-188"></a>		   <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>isAttlist</span>
+<a name="line-189"></a>		       <span class='varop'>.&gt;</span>
+<a name="line-190"></a>		       <span class='varid'>isOf</span> <span class='layout'>(</span> <span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>isWellformedQualifiedName</span> <span class='varop'>.</span> <span class='varid'>valueOfDTD</span> <span class='varid'>a_value</span> <span class='layout'>)</span>
+<a name="line-191"></a>		     <span class='layout'>)</span>
+<a name="line-192"></a>		     <span class='varop'>`guards`</span>
+<a name="line-193"></a>                     <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>n</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"an ATTLIST declaration contains as attribute name a not wellformed qualified Name: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>valueOfDTD</span> <span class='varid'>a_value</span> <span class='varid'>n</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>n</span> <span class='layout'>)</span>
+<a name="line-194"></a>
+<a name="line-195"></a>                   <span class='layout'>,</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>isEntity</span> <span class='varop'>+++</span> <span class='varid'>isParameterEntity</span> <span class='varop'>+++</span> <span class='varid'>isNotation</span> <span class='layout'>)</span>
+<a name="line-196"></a>		       <span class='varop'>.&gt;</span>
+<a name="line-197"></a>		       <span class='varid'>isOf</span> <span class='layout'>(</span> <span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>isNCName</span> <span class='varop'>.</span> <span class='varid'>valueOfDTD</span> <span class='varid'>a_name</span> <span class='layout'>)</span>
+<a name="line-198"></a>		     <span class='layout'>)</span>
+<a name="line-199"></a>                     <span class='varop'>`guards`</span>
+<a name="line-200"></a>                     <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>n</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"an entity or notation declaration contains a not wellformed NCName: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>valueOfDTD</span> <span class='varid'>a_name</span> <span class='varid'>n</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>n</span> <span class='layout'>)</span>
+<a name="line-201"></a>		   <span class='keyglyph'>]</span>
+<a name="line-202"></a>             <span class='layout'>,</span> <span class='varid'>isXPi</span>
+<a name="line-203"></a>	       <span class='conop'>:-&gt;</span>
+<a name="line-204"></a>	       <span class='layout'>(</span> <span class='varid'>isOf</span> <span class='layout'>(</span> <span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>isNCName</span> <span class='varop'>.</span> <span class='varid'>nameOf</span> <span class='layout'>)</span>
+<a name="line-205"></a>	         <span class='varop'>`guards`</span>
+<a name="line-206"></a>                 <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>n</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"a PI contains a not wellformed NCName: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>nameOf</span> <span class='varid'>n</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>n</span> <span class='layout'>)</span>
+<a name="line-207"></a>	       <span class='layout'>)</span>
+<a name="line-208"></a>	     <span class='keyglyph'>]</span>
+<a name="line-209"></a>
+<a name="line-210"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-211"></a>
+<a name="line-212"></a><a name="isNamespaceDecl"></a><span class='definition'>isNamespaceDecl</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-213"></a><span class='definition'>isNamespaceDecl</span>
+<a name="line-214"></a>    <span class='keyglyph'>=</span> <span class='varid'>isOfAttr</span> <span class='varid'>xmlnsName</span>
+<a name="line-215"></a>      <span class='keyword'>where</span>
+<a name="line-216"></a>      <span class='varid'>xmlnsName</span>	<span class='keyglyph'>::</span> <span class='conid'>AttrName</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-217"></a>      <span class='varid'>xmlnsName</span> <span class='varid'>a</span>
+<a name="line-218"></a>	  <span class='keyglyph'>=</span> <span class='varid'>px</span> <span class='varop'>==</span> <span class='varid'>a_xmlns</span>
+<a name="line-219"></a>	    <span class='varop'>&amp;&amp;</span>
+<a name="line-220"></a>	    <span class='layout'>(</span> <span class='varid'>null</span> <span class='varid'>ln</span> <span class='varop'>||</span> <span class='varid'>head</span> <span class='varid'>ln</span> <span class='varop'>==</span> <span class='chr'>':'</span><span class='layout'>)</span>
+<a name="line-221"></a>	  <span class='keyword'>where</span>
+<a name="line-222"></a>	  <span class='layout'>(</span><span class='varid'>px</span><span class='layout'>,</span> <span class='varid'>ln</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>splitAt</span> <span class='num'>5</span> <span class='varop'>.</span> <span class='varid'>qualifiedName</span> <span class='varop'>$</span> <span class='varid'>a</span>
+<a name="line-223"></a>
+<a name="line-224"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-DOM-XmlState.html b/doc/hxt-filter/src/Text-XML-HXT-DOM-XmlState.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-DOM-XmlState.html
@@ -0,0 +1,697 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- This module provides a Monad for an internal state and IO commands.</span>
+<a name="line-3"></a><span class='comment'>-- The state consists of two parts, the user state and the system state</span>
+<a name="line-4"></a><span class='comment'>-- user state ist a type parameter, the system state is a list</span>
+<a name="line-5"></a><span class='comment'>-- name-value pair. If the user state is not needed, the type parameter</span>
+<a name="line-6"></a><span class='comment'>-- can be instantiated with @()@.</span>
+<a name="line-7"></a><span class='comment'>--</span>
+<a name="line-8"></a><span class='comment'>-- Furthermore there are types for Xml filter working on this monad</span>
+<a name="line-9"></a><span class='comment'>-- and functions for manipulating the state components</span>
+<a name="line-10"></a><span class='comment'>-- and for lifting i\/o commands and XmlFilter to monad filters.</span>
+<a name="line-11"></a><span class='comment'>--</span>
+<a name="line-12"></a><span class='comment'>-- Error reporting functions are also located in this module.</span>
+<a name="line-13"></a>
+<a name="line-14"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-15"></a>    <span class='layout'>(</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-16"></a>    <span class='layout'>)</span>
+<a name="line-17"></a><span class='keyword'>where</span>
+<a name="line-18"></a>
+<a name="line-19"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-20"></a>
+<a name="line-21"></a><span class='keyword'>import</span> <span class='keyword'>qualified</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Monad</span><span class='varop'>.</span><span class='conid'>MonadStateIO</span> <span class='keyword'>as</span> <span class='conid'>MonadStateIO</span>
+<a name="line-22"></a>
+<a name="line-23"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>IO</span>
+<a name="line-24"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>
+<a name="line-25"></a>
+<a name="line-26"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-27"></a>
+<a name="line-28"></a><span class='comment'>-- |</span>
+<a name="line-29"></a><span class='comment'>-- The internal system state consists of a list of name-value pairs</span>
+<a name="line-30"></a><span class='comment'>-- of type @(String, XmlTrees)@, so arbitrary lists of trees can be stored.</span>
+<a name="line-31"></a><span class='comment'>-- For options, often only strings are used as values, so a set of access</span>
+<a name="line-32"></a><span class='comment'>-- functions with string values is available</span>
+<a name="line-33"></a><span class='comment'>-- The error handling method can be controlled by an error handler filter,</span>
+<a name="line-34"></a><span class='comment'>-- the default filter issues the errors on stderr</span>
+<a name="line-35"></a>
+<a name="line-36"></a><a name="SysState"></a><span class='keyword'>data</span> <span class='conid'>SysState</span>			<span class='keyglyph'>=</span> <span class='conid'>SysState</span> <span class='layout'>{</span> <span class='varid'>sysStateAttrs</span>		<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>SysStateAttrs</span>
+<a name="line-37"></a>					   <span class='layout'>,</span> <span class='varid'>sysStateErrorHandler</span>	<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='layout'>(</span><span class='conid'>XmlStateFilter</span> <span class='conid'>()</span><span class='layout'>)</span>
+<a name="line-38"></a>					   <span class='layout'>}</span>
+<a name="line-39"></a>
+<a name="line-40"></a><a name="SysStateAttrs"></a><span class='keyword'>type</span> <span class='conid'>SysStateAttrs</span>		<span class='keyglyph'>=</span> <span class='conid'>AssocList</span> <span class='conid'>String</span> <span class='conid'>XmlTrees</span>
+<a name="line-41"></a>
+<a name="line-42"></a><span class='comment'>-- |</span>
+<a name="line-43"></a><span class='comment'>-- The State has a system and a user part</span>
+<a name="line-44"></a><span class='comment'>-- the user state is a type parameter</span>
+<a name="line-45"></a>
+<a name="line-46"></a><a name="XmlState"></a><span class='keyword'>data</span> <span class='conid'>XmlState</span> <span class='varid'>state</span>		<span class='keyglyph'>=</span> <span class='conid'>XmlState</span> <span class='layout'>{</span> <span class='varid'>sysState</span>	<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>SysState</span>
+<a name="line-47"></a>					   <span class='layout'>,</span> <span class='varid'>userState</span>	<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='varid'>state</span>
+<a name="line-48"></a>					   <span class='layout'>}</span>
+<a name="line-49"></a>
+<a name="line-50"></a><span class='comment'>-- |</span>
+<a name="line-51"></a><span class='comment'>-- The monad type for commands. It is an instance of "StateIO" from the</span>
+<a name="line-52"></a><span class='comment'>-- general module "Control.Monad.MonadStateIO".</span>
+<a name="line-53"></a>
+<a name="line-54"></a><a name="XState"></a><span class='keyword'>type</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='varid'>res</span>		<span class='keyglyph'>=</span> <span class='conid'>MonadStateIO</span><span class='varop'>.</span><span class='conid'>StateIO</span> <span class='layout'>(</span><span class='conid'>XmlState</span> <span class='varid'>state</span><span class='layout'>)</span> <span class='varid'>res</span>
+<a name="line-55"></a>
+<a name="line-56"></a><span class='comment'>-- |</span>
+<a name="line-57"></a><span class='comment'>-- The "XmlFilter" type for filters working on a state</span>
+<a name="line-58"></a>
+<a name="line-59"></a><a name="XmlStateFilter"></a><span class='keyword'>type</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>	<span class='keyglyph'>=</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>XmlTrees</span>
+<a name="line-60"></a>
+<a name="line-61"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-62"></a><span class='comment'>--</span>
+<a name="line-63"></a><span class='comment'>-- user defined state</span>
+<a name="line-64"></a><span class='comment'>-- access functions</span>
+<a name="line-65"></a>
+<a name="line-66"></a><span class='comment'>-- |</span>
+<a name="line-67"></a><span class='comment'>-- change the user state</span>
+<a name="line-68"></a><span class='comment'>--</span>
+<a name="line-69"></a><span class='comment'>--    * 1.parameter fct :  the user state change function</span>
+<a name="line-70"></a><span class='comment'>--</span>
+<a name="line-71"></a><span class='comment'>--    - returns : the new state</span>
+<a name="line-72"></a>
+<a name="line-73"></a><a name="changeState"></a><span class='definition'>changeState</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='varid'>state</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>state</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='varid'>state</span>
+<a name="line-74"></a><span class='definition'>changeState</span> <span class='varid'>f</span>
+<a name="line-75"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-76"></a>      <span class='varid'>ns</span> <span class='keyglyph'>&lt;-</span> <span class='conid'>MonadStateIO</span><span class='varop'>.</span><span class='varid'>changeState</span> <span class='varid'>f'</span>
+<a name="line-77"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>userState</span> <span class='varid'>ns</span><span class='layout'>)</span>
+<a name="line-78"></a>      <span class='keyword'>where</span>
+<a name="line-79"></a>      <span class='varid'>f'</span> <span class='varid'>s</span> <span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>userState</span> <span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='layout'>(</span><span class='varid'>userState</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='layout'>}</span>
+<a name="line-80"></a>
+<a name="line-81"></a><span class='comment'>-- |</span>
+<a name="line-82"></a><span class='comment'>-- set the user state.</span>
+<a name="line-83"></a><span class='comment'>--</span>
+<a name="line-84"></a><span class='comment'>--    * 1.parameter s :  the new state</span>
+<a name="line-85"></a><span class='comment'>--</span>
+<a name="line-86"></a><span class='comment'>--    - returns : the new state</span>
+<a name="line-87"></a>
+<a name="line-88"></a><a name="setState"></a><span class='definition'>setState</span>	<span class='keyglyph'>::</span> <span class='varid'>state</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='varid'>state</span>
+<a name="line-89"></a><span class='definition'>setState</span> <span class='varid'>s</span>
+<a name="line-90"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeState</span> <span class='layout'>(</span> <span class='keyglyph'>\</span><span class='keyword'>_</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span> <span class='layout'>)</span>
+<a name="line-91"></a>
+<a name="line-92"></a><span class='comment'>-- |</span>
+<a name="line-93"></a><span class='comment'>-- read the user state</span>
+<a name="line-94"></a><span class='comment'>--</span>
+<a name="line-95"></a><span class='comment'>--    - returns : the current state</span>
+<a name="line-96"></a>
+<a name="line-97"></a><a name="getState"></a><span class='definition'>getState</span>	<span class='keyglyph'>::</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='varid'>state</span>
+<a name="line-98"></a><span class='definition'>getState</span>
+<a name="line-99"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeState</span> <span class='varid'>id</span>
+<a name="line-100"></a>
+<a name="line-101"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-102"></a>
+<a name="line-103"></a><span class='comment'>-- |</span>
+<a name="line-104"></a><span class='comment'>-- change the system part of the state.</span>
+<a name="line-105"></a><span class='comment'>--</span>
+<a name="line-106"></a><span class='comment'>-- see also : 'changeState'</span>
+<a name="line-107"></a>
+<a name="line-108"></a><a name="changeSysState"></a><span class='definition'>changeSysState</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>SysState</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>SysState</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>SysState</span>
+<a name="line-109"></a><span class='definition'>changeSysState</span> <span class='varid'>f</span>
+<a name="line-110"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-111"></a>      <span class='varid'>ns</span> <span class='keyglyph'>&lt;-</span> <span class='conid'>MonadStateIO</span><span class='varop'>.</span><span class='varid'>changeState</span> <span class='varid'>f'</span>
+<a name="line-112"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>sysState</span> <span class='varid'>ns</span><span class='layout'>)</span>
+<a name="line-113"></a>      <span class='keyword'>where</span>
+<a name="line-114"></a>      <span class='varid'>f'</span> <span class='varid'>s</span> <span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>sysState</span> <span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='layout'>(</span><span class='varid'>sysState</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='layout'>}</span>
+<a name="line-115"></a>
+<a name="line-116"></a><span class='comment'>-- |</span>
+<a name="line-117"></a><span class='comment'>-- set the system part of the state.</span>
+<a name="line-118"></a><span class='comment'>--</span>
+<a name="line-119"></a><span class='comment'>-- see also : 'setState'</span>
+<a name="line-120"></a>
+<a name="line-121"></a><a name="setSysState"></a><span class='definition'>setSysState</span>		<span class='keyglyph'>::</span> <span class='conid'>SysState</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>SysState</span>
+<a name="line-122"></a><span class='definition'>setSysState</span> <span class='varid'>s</span>
+<a name="line-123"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysState</span> <span class='layout'>(</span> <span class='keyglyph'>\</span><span class='keyword'>_</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span> <span class='layout'>)</span>
+<a name="line-124"></a>
+<a name="line-125"></a><span class='comment'>-- |</span>
+<a name="line-126"></a><span class='comment'>-- read the system part of the state.</span>
+<a name="line-127"></a><span class='comment'>--</span>
+<a name="line-128"></a><span class='comment'>-- see also : 'getState'</span>
+<a name="line-129"></a>
+<a name="line-130"></a><a name="getSysState"></a><span class='definition'>getSysState</span>		<span class='keyglyph'>::</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>SysState</span>
+<a name="line-131"></a><span class='definition'>getSysState</span>
+<a name="line-132"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysState</span> <span class='varid'>id</span>
+<a name="line-133"></a>
+<a name="line-134"></a><span class='comment'>-- |</span>
+<a name="line-135"></a><span class='comment'>-- the initial system state</span>
+<a name="line-136"></a><span class='comment'>--</span>
+<a name="line-137"></a><span class='comment'>-- an empty list of attribute value pairs</span>
+<a name="line-138"></a>
+<a name="line-139"></a><a name="initialSysState"></a><span class='definition'>initialSysState</span>		<span class='keyglyph'>::</span> <span class='conid'>SysState</span>
+<a name="line-140"></a><span class='definition'>initialSysState</span>
+<a name="line-141"></a>    <span class='keyglyph'>=</span> <span class='conid'>SysState</span> <span class='layout'>{</span> <span class='varid'>sysStateAttrs</span>        <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-142"></a>	       <span class='layout'>,</span> <span class='varid'>sysStateErrorHandler</span> <span class='keyglyph'>=</span> <span class='varid'>errorMsgToStderr</span>
+<a name="line-143"></a>	       <span class='layout'>}</span>
+<a name="line-144"></a>
+<a name="line-145"></a><span class='comment'>-- |</span>
+<a name="line-146"></a><span class='comment'>-- change the attributes in the system state</span>
+<a name="line-147"></a>
+<a name="line-148"></a><a name="changeSysStateAttrs"></a><span class='definition'>changeSysStateAttrs</span>		<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>SysStateAttrs</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>SysStateAttrs</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='conid'>SysState</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>SysState</span><span class='layout'>)</span>
+<a name="line-149"></a><span class='definition'>changeSysStateAttrs</span> <span class='varid'>cf</span> <span class='varid'>sstate</span>
+<a name="line-150"></a>    <span class='keyglyph'>=</span> <span class='varid'>sstate</span> <span class='layout'>{</span> <span class='varid'>sysStateAttrs</span> <span class='keyglyph'>=</span> <span class='varid'>cf</span> <span class='layout'>(</span><span class='varid'>sysStateAttrs</span> <span class='varid'>sstate</span><span class='layout'>)</span> <span class='layout'>}</span>
+<a name="line-151"></a>
+<a name="line-152"></a>
+<a name="line-153"></a><span class='comment'>-- |</span>
+<a name="line-154"></a><span class='comment'>-- set the error message handler</span>
+<a name="line-155"></a>
+<a name="line-156"></a><a name="setSysErrorHandler"></a><span class='definition'>setSysErrorHandler</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='conid'>()</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>()</span>
+<a name="line-157"></a><span class='definition'>setSysErrorHandler</span> <span class='varid'>ehf</span>
+<a name="line-158"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-159"></a>      <span class='varid'>changeSysState</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>sysStateErrorHandler</span> <span class='keyglyph'>=</span> <span class='varid'>ehf</span> <span class='layout'>}</span><span class='layout'>)</span>
+<a name="line-160"></a>      <span class='varid'>return</span> <span class='conid'>()</span>
+<a name="line-161"></a>
+<a name="line-162"></a><span class='comment'>-- |</span>
+<a name="line-163"></a><span class='comment'>-- get the error handler</span>
+<a name="line-164"></a>
+<a name="line-165"></a><a name="getSysErrorHandler"></a><span class='definition'>getSysErrorHandler</span>		<span class='keyglyph'>::</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='layout'>(</span><span class='conid'>XmlStateFilter</span> <span class='conid'>()</span><span class='layout'>)</span>
+<a name="line-166"></a><span class='definition'>getSysErrorHandler</span>
+<a name="line-167"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-168"></a>      <span class='varid'>s</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysState</span>
+<a name="line-169"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>sysStateErrorHandler</span> <span class='varid'>s</span><span class='layout'>)</span>
+<a name="line-170"></a>
+<a name="line-171"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-172"></a>
+<a name="line-173"></a><span class='comment'>-- |</span>
+<a name="line-174"></a><span class='comment'>-- set or change a single system parameter.</span>
+<a name="line-175"></a><span class='comment'>--</span>
+<a name="line-176"></a><span class='comment'>--    * 1.parameter name :  the name of the parameter</span>
+<a name="line-177"></a><span class='comment'>--</span>
+<a name="line-178"></a><span class='comment'>--    - 2.parameter value :  the list of associated trees</span>
+<a name="line-179"></a><span class='comment'>--</span>
+<a name="line-180"></a><span class='comment'>--    - returns : nothing</span>
+<a name="line-181"></a><span class='comment'>--</span>
+<a name="line-182"></a><span class='comment'>-- see also : 'setSysParam', 'setSysParamInt'</span>
+<a name="line-183"></a>
+<a name="line-184"></a><a name="setSysParamTree"></a><span class='definition'>setSysParamTree</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>()</span>
+<a name="line-185"></a><span class='definition'>setSysParamTree</span> <span class='varid'>name</span> <span class='varid'>val</span>
+<a name="line-186"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-187"></a>      <span class='varid'>changeSysState</span> <span class='layout'>(</span><span class='varid'>changeSysStateAttrs</span> <span class='layout'>(</span><span class='varid'>addEntry</span> <span class='varid'>name</span> <span class='varid'>val</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-188"></a>      <span class='varid'>return</span> <span class='conid'>()</span>
+<a name="line-189"></a>
+<a name="line-190"></a><span class='comment'>-- |</span>
+<a name="line-191"></a><span class='comment'>-- set or change a single system parameter of type string.</span>
+<a name="line-192"></a><span class='comment'>--</span>
+<a name="line-193"></a><span class='comment'>--    * 1.parameter name :  the name of the parameter</span>
+<a name="line-194"></a><span class='comment'>--</span>
+<a name="line-195"></a><span class='comment'>--    - 2.parameter value :  the (new) string value</span>
+<a name="line-196"></a><span class='comment'>--</span>
+<a name="line-197"></a><span class='comment'>--    - returns : nothing</span>
+<a name="line-198"></a><span class='comment'>--</span>
+<a name="line-199"></a><span class='comment'>-- see also : 'setSysParamTree', setSysParamInt</span>
+<a name="line-200"></a>
+<a name="line-201"></a><a name="setSysParam"></a><span class='definition'>setSysParam</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>()</span>
+<a name="line-202"></a><span class='definition'>setSysParam</span> <span class='varid'>name</span> <span class='varid'>val</span>
+<a name="line-203"></a>    <span class='keyglyph'>=</span> <span class='varid'>setSysParamTree</span> <span class='varid'>name</span> <span class='layout'>(</span><span class='varid'>xtext</span> <span class='varid'>val</span><span class='layout'>)</span>
+<a name="line-204"></a>
+<a name="line-205"></a><span class='comment'>-- |</span>
+<a name="line-206"></a><span class='comment'>-- set or change a single integer type system parameter</span>
+<a name="line-207"></a><span class='comment'>--</span>
+<a name="line-208"></a><span class='comment'>-- see also : 'setSysParam'</span>
+<a name="line-209"></a>
+<a name="line-210"></a><a name="setSysParamInt"></a><span class='definition'>setSysParamInt</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>()</span>
+<a name="line-211"></a><span class='definition'>setSysParamInt</span> <span class='varid'>name</span> <span class='varid'>val</span>	<span class='keyglyph'>=</span> <span class='varid'>setSysParam</span> <span class='varid'>name</span> <span class='layout'>(</span><span class='varid'>show</span> <span class='varid'>val</span><span class='layout'>)</span>
+<a name="line-212"></a>
+<a name="line-213"></a><span class='comment'>-- |</span>
+<a name="line-214"></a><span class='comment'>-- add (or change) all attributes of the document root to the system state</span>
+<a name="line-215"></a><span class='comment'>--     - returns : this</span>
+<a name="line-216"></a>
+<a name="line-217"></a><a name="setSystemParams"></a><span class='definition'>setSystemParams</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-218"></a><span class='definition'>setSystemParams</span> <span class='varid'>t</span>
+<a name="line-219"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-220"></a>      <span class='varid'>changeSysState</span> <span class='layout'>(</span><span class='varid'>changeSysStateAttrs</span> <span class='layout'>(</span><span class='varid'>addEntries</span> <span class='layout'>(</span><span class='varid'>toTreel</span> <span class='varop'>.</span> <span class='varid'>getAttrl</span> <span class='varop'>$</span> <span class='varid'>t</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-221"></a>      <span class='varid'>thisM</span> <span class='varid'>t</span>
+<a name="line-222"></a>
+<a name="line-223"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-224"></a>
+<a name="line-225"></a><span class='comment'>-- |</span>
+<a name="line-226"></a><span class='comment'>-- read a system parameter</span>
+<a name="line-227"></a><span class='comment'>--</span>
+<a name="line-228"></a><span class='comment'>--    * 1.parameter name :  the name of the parameter</span>
+<a name="line-229"></a><span class='comment'>--</span>
+<a name="line-230"></a><span class='comment'>--    - returns : the list of tres associated with the key, or the empty list for unknown parameters</span>
+<a name="line-231"></a>
+<a name="line-232"></a><a name="getSysParamTree"></a><span class='definition'>getSysParamTree</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>XmlTrees</span>
+<a name="line-233"></a><span class='definition'>getSysParamTree</span> <span class='varid'>name</span>
+<a name="line-234"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-235"></a>      <span class='varid'>s</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysState</span>
+<a name="line-236"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>lookup1</span> <span class='varid'>name</span> <span class='layout'>(</span><span class='varid'>sysStateAttrs</span> <span class='varid'>s</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-237"></a>
+<a name="line-238"></a><span class='comment'>-- |</span>
+<a name="line-239"></a><span class='comment'>-- read a system string parameter</span>
+<a name="line-240"></a><span class='comment'>--</span>
+<a name="line-241"></a><span class='comment'>--    * 1.parameter name :  the name of the parameter</span>
+<a name="line-242"></a><span class='comment'>--</span>
+<a name="line-243"></a><span class='comment'>--    - returns : the value, or the empty string for unknown parameters</span>
+<a name="line-244"></a>
+<a name="line-245"></a><a name="getSysParam"></a><span class='definition'>getSysParam</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>String</span>
+<a name="line-246"></a><span class='definition'>getSysParam</span> <span class='varid'>name</span>
+<a name="line-247"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-248"></a>      <span class='varid'>ts</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParamTree</span> <span class='varid'>name</span>
+<a name="line-249"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>xshow</span> <span class='varid'>ts</span><span class='layout'>)</span>
+<a name="line-250"></a>
+<a name="line-251"></a><span class='comment'>-- |</span>
+<a name="line-252"></a><span class='comment'>-- read a system parameter or return a default value</span>
+<a name="line-253"></a><span class='comment'>--</span>
+<a name="line-254"></a><span class='comment'>--    * 1.parameter name :  the name of the parameter</span>
+<a name="line-255"></a><span class='comment'>--</span>
+<a name="line-256"></a><span class='comment'>--    - 2.parameter default :  the default value</span>
+<a name="line-257"></a><span class='comment'>--</span>
+<a name="line-258"></a><span class='comment'>--    - returns : the value if found, else the default</span>
+<a name="line-259"></a>
+<a name="line-260"></a><a name="getSysParamWithDefault"></a><span class='definition'>getSysParamWithDefault</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>String</span>
+<a name="line-261"></a><span class='definition'>getSysParamWithDefault</span> <span class='varid'>name</span> <span class='varid'>def</span>
+<a name="line-262"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-263"></a>      <span class='varid'>val</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParam</span> <span class='varid'>name</span>
+<a name="line-264"></a>      <span class='varid'>return</span> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>val</span>
+<a name="line-265"></a>	       <span class='keyword'>then</span> <span class='varid'>def</span>
+<a name="line-266"></a>	       <span class='keyword'>else</span> <span class='varid'>val</span>
+<a name="line-267"></a>	     <span class='layout'>)</span>
+<a name="line-268"></a>
+<a name="line-269"></a><span class='comment'>-- |</span>
+<a name="line-270"></a><span class='comment'>-- read an integer system parameter</span>
+<a name="line-271"></a><span class='comment'>--</span>
+<a name="line-272"></a><span class='comment'>--    * 1.parameter name : </span>
+<a name="line-273"></a><span class='comment'>--</span>
+<a name="line-274"></a><span class='comment'>--    - 2.parameter default : </span>
+<a name="line-275"></a><span class='comment'>--</span>
+<a name="line-276"></a><span class='comment'>-- see also : 'getSysParamWithDefault'</span>
+<a name="line-277"></a>
+<a name="line-278"></a><a name="getSysParamInt"></a><span class='definition'>getSysParamInt</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>Int</span>
+<a name="line-279"></a><span class='definition'>getSysParamInt</span> <span class='varid'>var</span> <span class='varid'>def</span>
+<a name="line-280"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-281"></a>      <span class='varid'>val</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParamWithDefault</span> <span class='varid'>var</span> <span class='layout'>(</span><span class='varid'>show</span> <span class='varid'>def</span><span class='layout'>)</span>
+<a name="line-282"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>read</span> <span class='varid'>val</span><span class='layout'>)</span>
+<a name="line-283"></a>
+<a name="line-284"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-285"></a>
+<a name="line-286"></a><span class='comment'>-- |</span>
+<a name="line-287"></a><span class='comment'>-- exec a XState command with initial state.</span>
+<a name="line-288"></a><span class='comment'>--</span>
+<a name="line-289"></a><span class='comment'>--    * 1.parameter initalState :  the inital user state</span>
+<a name="line-290"></a><span class='comment'>--</span>
+<a name="line-291"></a><span class='comment'>--    - 2.parameter cmd :  the command</span>
+<a name="line-292"></a><span class='comment'>--</span>
+<a name="line-293"></a><span class='comment'>--    - returns : the i\/o command with result and user state</span>
+<a name="line-294"></a>
+<a name="line-295"></a><a name="run0"></a><span class='definition'>run0</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlState</span> <span class='varid'>state</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='varid'>res</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='layout'>(</span><span class='varid'>res</span><span class='layout'>,</span> <span class='conid'>XmlState</span> <span class='varid'>state</span><span class='layout'>)</span>
+<a name="line-296"></a><span class='definition'>run0</span> <span class='varid'>initialState</span> <span class='layout'>(</span><span class='conid'>MonadStateIO</span><span class='varop'>.</span><span class='conid'>STIO</span> <span class='varid'>cmd</span><span class='layout'>)</span>
+<a name="line-297"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-298"></a>      <span class='layout'>(</span><span class='varid'>res</span><span class='layout'>,</span> <span class='varid'>finalState</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>cmd</span> <span class='varid'>initialState</span>
+<a name="line-299"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>res</span><span class='layout'>,</span> <span class='varid'>finalState</span><span class='layout'>)</span>
+<a name="line-300"></a>
+<a name="line-301"></a><span class='comment'>-- |</span>
+<a name="line-302"></a><span class='comment'>-- exec a XState command with initial user state.</span>
+<a name="line-303"></a><span class='comment'>-- ignore final user state.</span>
+<a name="line-304"></a><span class='comment'>-- like run0, but ignore the resulting user state</span>
+<a name="line-305"></a>
+<a name="line-306"></a><a name="run"></a><span class='definition'>run</span>		<span class='keyglyph'>::</span> <span class='varid'>state</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='varid'>res</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='varid'>res</span>
+<a name="line-307"></a><span class='definition'>run</span> <span class='varid'>initialUserState</span> <span class='varid'>cmd</span>
+<a name="line-308"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-309"></a>      <span class='layout'>(</span><span class='varid'>res</span><span class='layout'>,</span> <span class='sel'>_finalState</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>run0</span> <span class='layout'>(</span><span class='conid'>XmlState</span> <span class='varid'>initialSysState</span> <span class='varid'>initialUserState</span><span class='layout'>)</span> <span class='varid'>cmd</span>
+<a name="line-310"></a>      <span class='varid'>return</span> <span class='varid'>res</span>
+<a name="line-311"></a>
+<a name="line-312"></a><span class='comment'>-- |</span>
+<a name="line-313"></a><span class='comment'>-- exec a XState command in th IO monad.</span>
+<a name="line-314"></a><span class='comment'>-- like run with the empty state ().</span>
+<a name="line-315"></a>
+<a name="line-316"></a><a name="run'"></a><span class='definition'>run'</span>		<span class='keyglyph'>::</span> <span class='conid'>XState</span> <span class='conid'>()</span> <span class='varid'>res</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='varid'>res</span>
+<a name="line-317"></a><span class='definition'>run'</span>		<span class='keyglyph'>=</span> <span class='varid'>run</span> <span class='conid'>()</span>
+<a name="line-318"></a>
+<a name="line-319"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-320"></a>
+<a name="line-321"></a><span class='comment'>-- |</span>
+<a name="line-322"></a><span class='comment'>-- run a command in a new user state.</span>
+<a name="line-323"></a><span class='comment'>-- chain the system state part,</span>
+<a name="line-324"></a><span class='comment'>-- init new system state with the current one, run the command and</span>
+<a name="line-325"></a><span class='comment'>-- update the old system state with the resulting new system state</span>
+<a name="line-326"></a><span class='comment'>--</span>
+<a name="line-327"></a><span class='comment'>--    * 1.parameter initialUserState :  the initial user state</span>
+<a name="line-328"></a><span class='comment'>--</span>
+<a name="line-329"></a><span class='comment'>--    - 2.parameter cmd :  the command</span>
+<a name="line-330"></a><span class='comment'>--</span>
+<a name="line-331"></a><span class='comment'>--    - returns : the result of executing cmd and the final state</span>
+<a name="line-332"></a>
+<a name="line-333"></a><a name="chain'"></a><span class='definition'>chain'</span>		<span class='keyglyph'>::</span> <span class='varid'>state1</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state1</span> <span class='varid'>res</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state0</span> <span class='layout'>(</span><span class='varid'>res</span><span class='layout'>,</span> <span class='varid'>state1</span><span class='layout'>)</span>
+<a name="line-334"></a><span class='definition'>chain'</span> <span class='varid'>initialUserState1</span> <span class='varid'>cmd1</span>
+<a name="line-335"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-336"></a>      <span class='varid'>sysState0</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysState</span>
+<a name="line-337"></a>      <span class='layout'>(</span><span class='varid'>res</span><span class='layout'>,</span> <span class='varid'>finalState1</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>io</span> <span class='varop'>$</span> <span class='varid'>run0</span> <span class='layout'>(</span><span class='conid'>XmlState</span> <span class='varid'>sysState0</span> <span class='varid'>initialUserState1</span><span class='layout'>)</span> <span class='varid'>cmd1</span>
+<a name="line-338"></a>      <span class='varid'>setSysState</span> <span class='layout'>(</span><span class='varid'>sysState</span> <span class='varid'>finalState1</span><span class='layout'>)</span>
+<a name="line-339"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>res</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>userState</span> <span class='varid'>finalState1</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-340"></a>
+<a name="line-341"></a><span class='comment'>-- |</span>
+<a name="line-342"></a><span class='comment'>-- like chain' but forget the final user state</span>
+<a name="line-343"></a><span class='comment'>--</span>
+<a name="line-344"></a><span class='comment'>--    * 1.parameter initialUserState :  the initial user state</span>
+<a name="line-345"></a><span class='comment'>--</span>
+<a name="line-346"></a><span class='comment'>--    - 2.parameter cmd :  the command</span>
+<a name="line-347"></a><span class='comment'>--</span>
+<a name="line-348"></a><span class='comment'>--    - returns : only the result of executing cmd</span>
+<a name="line-349"></a>
+<a name="line-350"></a><a name="chain"></a><span class='definition'>chain</span>		<span class='keyglyph'>::</span> <span class='varid'>state1</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state1</span> <span class='varid'>res</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state0</span> <span class='varid'>res</span>
+<a name="line-351"></a><span class='definition'>chain</span> <span class='varid'>initialUserState1</span> <span class='varid'>cmd1</span>
+<a name="line-352"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-353"></a>      <span class='layout'>(</span><span class='varid'>res</span><span class='layout'>,</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>chain'</span> <span class='varid'>initialUserState1</span> <span class='varid'>cmd1</span>
+<a name="line-354"></a>      <span class='varid'>return</span> <span class='varid'>res</span>
+<a name="line-355"></a>
+<a name="line-356"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-357"></a><span class='comment'>--</span>
+<a name="line-358"></a><span class='comment'>-- lift functions</span>
+<a name="line-359"></a>
+<a name="line-360"></a><span class='comment'>-- |</span>
+<a name="line-361"></a><span class='comment'>-- lift a XmlFilter to a XmlStateFilter filter</span>
+<a name="line-362"></a><span class='comment'>-- issue all error nodes as error messages</span>
+<a name="line-363"></a><span class='comment'>-- and remove the error nodes from the result</span>
+<a name="line-364"></a><span class='comment'>--</span>
+<a name="line-365"></a><span class='comment'>--    * 1.parameter f :  the filter</span>
+<a name="line-366"></a><span class='comment'>--</span>
+<a name="line-367"></a><span class='comment'>--    - returns : the filter running in the state monad</span>
+<a name="line-368"></a><span class='comment'>--</span>
+<a name="line-369"></a><span class='comment'>--		  all errors are filtered from the result and issued on stderr</span>
+<a name="line-370"></a>
+<a name="line-371"></a><a name="liftF"></a><span class='definition'>liftF</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-372"></a><span class='definition'>liftF</span> <span class='varid'>f</span>		<span class='keyglyph'>=</span> <span class='varid'>liftMf</span> <span class='varid'>f</span> <span class='varop'>.&gt;&gt;</span> <span class='varid'>issueError</span>
+<a name="line-373"></a>
+<a name="line-374"></a><span class='comment'>-- |</span>
+<a name="line-375"></a><span class='comment'>-- lift an I\/O command</span>
+<a name="line-376"></a><span class='comment'>--</span>
+<a name="line-377"></a><span class='comment'>--    * 1.parameter cmd :  the i\/o command</span>
+<a name="line-378"></a><span class='comment'>--</span>
+<a name="line-379"></a><span class='comment'>--    - returns : the i\/o command lifted to the XML state monad</span>
+<a name="line-380"></a>
+<a name="line-381"></a><a name="io"></a><span class='definition'>io</span>		<span class='keyglyph'>::</span> <span class='conid'>IO</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='varid'>a</span>
+<a name="line-382"></a><span class='definition'>io</span>		<span class='keyglyph'>=</span> <span class='conid'>MonadStateIO</span><span class='varop'>.</span><span class='varid'>io</span>
+<a name="line-383"></a>
+<a name="line-384"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-385"></a><span class='comment'>--</span>
+<a name="line-386"></a>
+<a name="line-387"></a><span class='comment'>-- |</span>
+<a name="line-388"></a><span class='comment'>-- set the trace level.</span>
+<a name="line-389"></a><span class='comment'>--</span>
+<a name="line-390"></a><span class='comment'>-- convention:</span>
+<a name="line-391"></a><span class='comment'>--</span>
+<a name="line-392"></a><span class='comment'>-- 0: no trace output (default)</span>
+<a name="line-393"></a><span class='comment'>--</span>
+<a name="line-394"></a><span class='comment'>-- 1: trace important computation steps, e.g. accessing a document</span>
+<a name="line-395"></a><span class='comment'>--</span>
+<a name="line-396"></a><span class='comment'>-- 2: trace small computation steps</span>
+<a name="line-397"></a><span class='comment'>--</span>
+<a name="line-398"></a><span class='comment'>-- 3: output an intermediate result XmlTree in XML source format</span>
+<a name="line-399"></a><span class='comment'>--</span>
+<a name="line-400"></a><span class='comment'>-- 4: output an intermediate result XmlTree in tree representation</span>
+<a name="line-401"></a><span class='comment'>--</span>
+<a name="line-402"></a><span class='comment'>--    * 1.parameter level :  the trace level</span>
+<a name="line-403"></a><span class='comment'>--</span>
+<a name="line-404"></a><span class='comment'>--    - returns : nothing</span>
+<a name="line-405"></a>
+<a name="line-406"></a><a name="setTraceLevel"></a><span class='definition'>setTraceLevel</span>	<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>()</span>
+<a name="line-407"></a><span class='definition'>setTraceLevel</span> <span class='varid'>l</span>	<span class='keyglyph'>=</span> <span class='varid'>setSysParamInt</span> <span class='varid'>a_trace</span> <span class='varid'>l</span>
+<a name="line-408"></a>
+<a name="line-409"></a><span class='comment'>-- |</span>
+<a name="line-410"></a><span class='comment'>-- get the current trace level.</span>
+<a name="line-411"></a><span class='comment'>--</span>
+<a name="line-412"></a><span class='comment'>--    - returns : the current trace level</span>
+<a name="line-413"></a>
+<a name="line-414"></a><a name="getTraceLevel"></a><span class='definition'>getTraceLevel</span>	<span class='keyglyph'>::</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>Int</span>
+<a name="line-415"></a><span class='definition'>getTraceLevel</span>	<span class='keyglyph'>=</span> <span class='varid'>getSysParamInt</span> <span class='varid'>a_trace</span> <span class='num'>0</span>
+<a name="line-416"></a>
+<a name="line-417"></a><span class='comment'>-- |</span>
+<a name="line-418"></a><span class='comment'>-- trace output for arbitray commands.</span>
+<a name="line-419"></a><span class='comment'>--</span>
+<a name="line-420"></a><span class='comment'>--    * 1.parameter level :  the trace level,</span>
+<a name="line-421"></a><span class='comment'>--			  for which the command will be execuded</span>
+<a name="line-422"></a><span class='comment'>--			  if level \&lt;= current trace level</span>
+<a name="line-423"></a><span class='comment'>--</span>
+<a name="line-424"></a><span class='comment'>--    - 2.parameter cmd :  the command to be executed</span>
+<a name="line-425"></a><span class='comment'>--</span>
+<a name="line-426"></a><span class='comment'>--    - returns : nothing</span>
+<a name="line-427"></a>
+<a name="line-428"></a><a name="traceCmd"></a><span class='definition'>traceCmd</span>	<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>()</span>
+<a name="line-429"></a><span class='definition'>traceCmd</span> <span class='varid'>level</span> <span class='varid'>cmd</span>
+<a name="line-430"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-431"></a>      <span class='varid'>trcLevel</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getTraceLevel</span>
+<a name="line-432"></a>      <span class='keyword'>if</span> <span class='varid'>level</span> <span class='varop'>&lt;=</span> <span class='varid'>trcLevel</span>
+<a name="line-433"></a>        <span class='keyword'>then</span> <span class='keyword'>do</span>
+<a name="line-434"></a>	     <span class='keyword'>_</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>cmd</span>
+<a name="line-435"></a>	     <span class='varid'>return</span> <span class='conid'>()</span>
+<a name="line-436"></a>        <span class='keyword'>else</span> <span class='varid'>return</span> <span class='conid'>()</span>
+<a name="line-437"></a>
+<a name="line-438"></a><span class='comment'>-- |</span>
+<a name="line-439"></a><span class='comment'>-- trace output function for simple text.</span>
+<a name="line-440"></a><span class='comment'>--</span>
+<a name="line-441"></a><span class='comment'>--    * 1.parameter level :  like in traceCmd</span>
+<a name="line-442"></a><span class='comment'>--</span>
+<a name="line-443"></a><span class='comment'>--    - 2.parameter str :  the test</span>
+<a name="line-444"></a><span class='comment'>--</span>
+<a name="line-445"></a><span class='comment'>--    - returns : nothing</span>
+<a name="line-446"></a>
+<a name="line-447"></a><a name="trace"></a><span class='definition'>trace</span>		<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>()</span>
+<a name="line-448"></a><span class='definition'>trace</span> <span class='varid'>level</span> <span class='varid'>str</span>
+<a name="line-449"></a>    <span class='keyglyph'>=</span> <span class='varid'>traceCmd</span> <span class='varid'>level</span>
+<a name="line-450"></a>      <span class='varop'>$</span> <span class='keyword'>do</span>
+<a name="line-451"></a>	<span class='varid'>io</span> <span class='varop'>$</span> <span class='varid'>hPutStrLn</span> <span class='varid'>stderr</span> <span class='layout'>(</span><span class='str'>"-- ("</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>level</span> <span class='varop'>++</span> <span class='str'>") "</span> <span class='varop'>++</span> <span class='varid'>str</span><span class='layout'>)</span>
+<a name="line-452"></a>
+<a name="line-453"></a><span class='comment'>-- |</span>
+<a name="line-454"></a><span class='comment'>-- trace output of the user part of the program state.</span>
+<a name="line-455"></a><span class='comment'>--</span>
+<a name="line-456"></a><span class='comment'>--    * 1.parameter level :  like in traceCmd</span>
+<a name="line-457"></a><span class='comment'>--</span>
+<a name="line-458"></a><span class='comment'>--    - 2.parameter showFct :  the toString function</span>
+<a name="line-459"></a><span class='comment'>--</span>
+<a name="line-460"></a><span class='comment'>--    - returns : nothing</span>
+<a name="line-461"></a>
+<a name="line-462"></a><a name="traceState"></a><span class='definition'>traceState</span>	<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>state</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>()</span>
+<a name="line-463"></a><span class='definition'>traceState</span> <span class='varid'>level</span> <span class='varid'>fct</span>
+<a name="line-464"></a>    <span class='keyglyph'>=</span> <span class='varid'>traceCmd</span> <span class='varid'>level</span>
+<a name="line-465"></a>      <span class='varop'>$</span> <span class='keyword'>do</span>
+<a name="line-466"></a>	<span class='varid'>s</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getState</span>
+<a name="line-467"></a>	<span class='varid'>io</span> <span class='varop'>$</span> <span class='varid'>hPutStrLn</span> <span class='varid'>stderr</span> <span class='layout'>(</span><span class='varid'>fct</span> <span class='varid'>s</span><span class='layout'>)</span>
+<a name="line-468"></a>
+<a name="line-469"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-470"></a><span class='comment'>--</span>
+<a name="line-471"></a><span class='comment'>-- error functions</span>
+<a name="line-472"></a>
+<a name="line-473"></a><span class='comment'>-- |</span>
+<a name="line-474"></a><span class='comment'>-- filter to reset the state attribute 'a_status'</span>
+<a name="line-475"></a><span class='comment'>--    - returns : this</span>
+<a name="line-476"></a>
+<a name="line-477"></a><a name="clearStatus"></a><span class='definition'>clearStatus</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-478"></a><span class='definition'>clearStatus</span> <span class='varid'>t</span>
+<a name="line-479"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-480"></a>      <span class='varid'>setSysParamInt</span> <span class='varid'>a_status</span> <span class='varid'>c_ok</span>
+<a name="line-481"></a>      <span class='varid'>thisM</span> <span class='varid'>t</span>
+<a name="line-482"></a>
+<a name="line-483"></a><span class='comment'>-- |</span>
+<a name="line-484"></a><span class='comment'>-- report an error message.</span>
+<a name="line-485"></a><span class='comment'>--</span>
+<a name="line-486"></a><span class='comment'>--    - returns : if the input tree n represents an error, @res = []@</span>
+<a name="line-487"></a><span class='comment'>--		  and the error is processed by the errror handler filter (default: error is issued on stderr)</span>
+<a name="line-488"></a><span class='comment'>--		  else @res = [n]@</span>
+<a name="line-489"></a><span class='comment'>--</span>
+<a name="line-490"></a><span class='comment'>-- see also : 'issueErr'</span>
+<a name="line-491"></a>
+<a name="line-492"></a><a name="issueError"></a><span class='definition'>issueError</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-493"></a><span class='definition'>issueError</span>
+<a name="line-494"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>setErrorMsgLevel</span> <span class='varop'>.&gt;&gt;</span> <span class='varid'>errorMsgHandler</span> <span class='varop'>.&gt;&gt;</span> <span class='varid'>noneM</span><span class='layout'>)</span>
+<a name="line-495"></a>      <span class='varop'>`whenM`</span>
+<a name="line-496"></a>      <span class='varid'>isXError</span>
+<a name="line-497"></a>
+<a name="line-498"></a><a name="errorMsgHandler"></a><span class='definition'>errorMsgHandler</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-499"></a><span class='definition'>errorMsgHandler</span>
+<a name="line-500"></a>    <span class='keyglyph'>=</span> <span class='varid'>performAction</span>
+<a name="line-501"></a>      <span class='layout'>(</span> <span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>chain'</span> <span class='conid'>()</span> <span class='layout'>(</span> <span class='keyword'>do</span>
+<a name="line-502"></a>			   <span class='varid'>ehf</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysErrorHandler</span>
+<a name="line-503"></a>			   <span class='varid'>ehf</span> <span class='varid'>t</span>
+<a name="line-504"></a>			   <span class='varid'>return</span> <span class='conid'>()</span>
+<a name="line-505"></a>			 <span class='layout'>)</span>
+<a name="line-506"></a>      <span class='layout'>)</span>
+<a name="line-507"></a>
+<a name="line-508"></a><span class='comment'>-- |</span>
+<a name="line-509"></a><span class='comment'>-- set the error level in system state</span>
+<a name="line-510"></a>
+<a name="line-511"></a><a name="setErrorMsgLevel"></a><span class='definition'>setErrorMsgLevel</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-512"></a><span class='definition'>setErrorMsgLevel</span>
+<a name="line-513"></a>    <span class='keyglyph'>=</span> <span class='varid'>performAction</span>
+<a name="line-514"></a>      <span class='layout'>(</span> <span class='keyglyph'>\</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XError</span> <span class='varid'>level</span> <span class='sel'>_str</span><span class='layout'>)</span> <span class='sel'>_cs</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>
+<a name="line-515"></a>	<span class='keyword'>do</span>
+<a name="line-516"></a>	<span class='varid'>errLevel</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParamInt</span> <span class='varid'>a_status</span> <span class='num'>0</span>
+<a name="line-517"></a>	<span class='varid'>setSysParamInt</span> <span class='varid'>a_status</span> <span class='layout'>(</span><span class='varid'>max</span> <span class='varid'>errLevel</span> <span class='varid'>level</span><span class='layout'>)</span>
+<a name="line-518"></a>      <span class='layout'>)</span>
+<a name="line-519"></a>
+<a name="line-520"></a><span class='comment'>-- |</span>
+<a name="line-521"></a><span class='comment'>-- default error handler for writing errors to stderr</span>
+<a name="line-522"></a>
+<a name="line-523"></a><a name="errorMsgToStderr"></a><span class='definition'>errorMsgToStderr</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-524"></a><span class='definition'>errorMsgToStderr</span>
+<a name="line-525"></a>    <span class='keyglyph'>=</span> <span class='varid'>performAction</span>
+<a name="line-526"></a>      <span class='layout'>(</span> <span class='keyglyph'>\</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XError</span> <span class='varid'>level</span> <span class='varid'>str</span><span class='layout'>)</span> <span class='sel'>_cs</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>
+<a name="line-527"></a>	<span class='varid'>io</span> <span class='varop'>$</span> <span class='varid'>hPutStrLn</span> <span class='varid'>stderr</span> <span class='layout'>(</span><span class='str'>"\n"</span> <span class='varop'>++</span> <span class='varid'>errClass</span> <span class='varid'>level</span> <span class='varop'>++</span> <span class='str'>": "</span> <span class='varop'>++</span> <span class='varid'>str</span><span class='layout'>)</span>
+<a name="line-528"></a>      <span class='layout'>)</span>
+<a name="line-529"></a>
+<a name="line-530"></a><span class='comment'>-- |</span>
+<a name="line-531"></a><span class='comment'>-- error message handler for collecting all error messages</span>
+<a name="line-532"></a><span class='comment'>-- all messages are stored under attribute 'a_error_log'</span>
+<a name="line-533"></a><span class='comment'>-- they can be read with @getSysParamTree a_error_log@ or by</span>
+<a name="line-534"></a><span class='comment'>-- applying the filter 'getErrorMsg' to the root node</span>
+<a name="line-535"></a>
+<a name="line-536"></a><a name="errorMsgLogging"></a><span class='definition'>errorMsgLogging</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-537"></a><span class='definition'>errorMsgLogging</span>
+<a name="line-538"></a>    <span class='keyglyph'>=</span> <span class='varid'>performAction</span>
+<a name="line-539"></a>      <span class='layout'>(</span> <span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span>
+<a name="line-540"></a>	<span class='keyword'>do</span>
+<a name="line-541"></a>	<span class='varid'>errLog</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParamTree</span> <span class='varid'>a_error_log</span>
+<a name="line-542"></a>	<span class='varid'>setSysParamTree</span> <span class='varid'>a_error_log</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='conop'>:</span> <span class='varid'>errLog</span><span class='layout'>)</span>
+<a name="line-543"></a>      <span class='layout'>)</span>
+<a name="line-544"></a>
+<a name="line-545"></a><a name="errorMsgLoggingAndToStderr"></a><span class='definition'>errorMsgLoggingAndToStderr</span>      <span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-546"></a><span class='definition'>errorMsgLoggingAndToStderr</span>	<span class='keyglyph'>=</span> <span class='varid'>errorMsgLogging</span><span class='varop'>.&gt;&gt;</span> <span class='varid'>errorMsgToStderr</span>
+<a name="line-547"></a>
+<a name="line-548"></a><span class='comment'>-- |</span>
+<a name="line-549"></a><span class='comment'>-- the filter for reading all collected error mesages</span>
+<a name="line-550"></a><span class='comment'>--</span>
+<a name="line-551"></a><span class='comment'>-- result is the list of error messages, the input tree is ignored</span>
+<a name="line-552"></a>
+<a name="line-553"></a><a name="getErrorMsg"></a><span class='definition'>getErrorMsg</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-554"></a><span class='definition'>getErrorMsg</span> <span class='sel'>_t</span>
+<a name="line-555"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-556"></a>      <span class='varid'>el</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParamTree</span> <span class='varid'>a_error_log</span>
+<a name="line-557"></a>      <span class='varid'>setSysParamTree</span> <span class='varid'>a_error_log</span> <span class='conid'>[]</span>
+<a name="line-558"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>reverse</span> <span class='varid'>el</span><span class='layout'>)</span>
+<a name="line-559"></a>
+<a name="line-560"></a><span class='comment'>-- |</span>
+<a name="line-561"></a><span class='comment'>-- error level translation</span>
+<a name="line-562"></a><span class='comment'>-- 'c_warn' (1) : warning,</span>
+<a name="line-563"></a><span class='comment'>-- 'c_err' (2): error (e.g. parse error, validation error, ...),</span>
+<a name="line-564"></a><span class='comment'>-- 'c_fatal' (3) : fatal error (document access error, internal error, ...)</span>
+<a name="line-565"></a>
+<a name="line-566"></a><a name="errClass"></a><span class='definition'>errClass</span>	<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-567"></a><span class='definition'>errClass</span> <span class='varid'>l</span>
+<a name="line-568"></a>    <span class='keyglyph'>=</span> <span class='varid'>fromMaybe</span> <span class='str'>"fatal error"</span> <span class='varop'>.</span> <span class='varid'>lookup</span> <span class='varid'>l</span> <span class='varop'>$</span> <span class='varid'>msgList</span>
+<a name="line-569"></a>      <span class='keyword'>where</span>
+<a name="line-570"></a>      <span class='varid'>msgList</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='layout'>(</span><span class='varid'>c_ok</span><span class='layout'>,</span>	<span class='str'>"no error"</span><span class='layout'>)</span>
+<a name="line-571"></a>		  <span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>c_warn</span><span class='layout'>,</span>	<span class='str'>"warning"</span><span class='layout'>)</span>
+<a name="line-572"></a>		  <span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>c_err</span><span class='layout'>,</span>	<span class='str'>"error"</span><span class='layout'>)</span>
+<a name="line-573"></a>		  <span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>c_fatal</span><span class='layout'>,</span>	<span class='str'>"fatal error"</span><span class='layout'>)</span>
+<a name="line-574"></a>		  <span class='keyglyph'>]</span>
+<a name="line-575"></a>
+<a name="line-576"></a><span class='comment'>-- |</span>
+<a name="line-577"></a><span class='comment'>-- short cut for issuing a warning</span>
+<a name="line-578"></a><span class='comment'>--</span>
+<a name="line-579"></a><span class='comment'>-- see also : 'issueError', 'issueErr'</span>
+<a name="line-580"></a>
+<a name="line-581"></a><a name="issueWarn"></a><span class='definition'>issueWarn</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-582"></a><span class='definition'>issueWarn</span> <span class='varid'>msg</span>	<span class='keyglyph'>=</span> <span class='varid'>liftMf</span> <span class='layout'>(</span><span class='varid'>warn</span> <span class='varid'>msg</span><span class='layout'>)</span> <span class='varop'>.&gt;&gt;</span> <span class='varid'>issueError</span>
+<a name="line-583"></a>
+<a name="line-584"></a><span class='comment'>-- |</span>
+<a name="line-585"></a><span class='comment'>-- short cut for issuing an error</span>
+<a name="line-586"></a><span class='comment'>--</span>
+<a name="line-587"></a><span class='comment'>-- see also : 'issueError'</span>
+<a name="line-588"></a>
+<a name="line-589"></a><a name="issueErr"></a><span class='definition'>issueErr</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-590"></a><span class='definition'>issueErr</span> <span class='varid'>msg</span>	<span class='keyglyph'>=</span> <span class='varid'>liftMf</span> <span class='layout'>(</span><span class='varid'>err</span> <span class='varid'>msg</span><span class='layout'>)</span> <span class='varop'>.&gt;&gt;</span> <span class='varid'>issueError</span>
+<a name="line-591"></a>
+<a name="line-592"></a><span class='comment'>-- |</span>
+<a name="line-593"></a><span class='comment'>-- short cut for issuing a fatal error</span>
+<a name="line-594"></a><span class='comment'>--</span>
+<a name="line-595"></a><span class='comment'>-- see also : 'issueError', 'issueErr'</span>
+<a name="line-596"></a>
+<a name="line-597"></a><a name="issueFatal"></a><span class='definition'>issueFatal</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-598"></a><span class='definition'>issueFatal</span> <span class='varid'>msg</span>	<span class='keyglyph'>=</span> <span class='varid'>liftMf</span> <span class='layout'>(</span><span class='varid'>fatal</span> <span class='varid'>msg</span><span class='layout'>)</span> <span class='varop'>.&gt;&gt;</span> <span class='varid'>issueError</span>
+<a name="line-599"></a>
+<a name="line-600"></a>
+<a name="line-601"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-602"></a><span class='comment'>--</span>
+<a name="line-603"></a><span class='comment'>-- issue an error, add the error to the document root tree</span>
+<a name="line-604"></a><span class='comment'>-- and return the tree</span>
+<a name="line-605"></a>
+<a name="line-606"></a><a name="addFatal"></a><span class='definition'>addFatal</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-607"></a><span class='definition'>addFatal</span> <span class='varid'>msg</span>
+<a name="line-608"></a>    <span class='keyglyph'>=</span> <span class='varid'>liftF</span> <span class='layout'>(</span> <span class='varid'>fatal</span> <span class='varid'>msg</span>
+<a name="line-609"></a>	      <span class='varop'>+++</span>
+<a name="line-610"></a>	      <span class='varid'>setStatus</span> <span class='varid'>c_fatal</span> <span class='str'>"accessing documents"</span>
+<a name="line-611"></a>	    <span class='layout'>)</span>
+<a name="line-612"></a>
+<a name="line-613"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-614"></a>
+<a name="line-615"></a><span class='comment'>-- |</span>
+<a name="line-616"></a><span class='comment'>-- checks the value of the attribute 'a_status' in a document root.</span>
+<a name="line-617"></a><span class='comment'>-- if it contains a value greater or equal to 'c_err', an error with error message</span>
+<a name="line-618"></a><span class='comment'>-- stored in attribute 'a_module' is issued and the filter acts as the 'noneM' filter</span>
+<a name="line-619"></a><span class='comment'>-- else its the 'thisM' filter</span>
+<a name="line-620"></a>
+<a name="line-621"></a><a name="checkStatus"></a><span class='definition'>checkStatus</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-622"></a><span class='definition'>checkStatus</span> <span class='varid'>t</span>
+<a name="line-623"></a>    <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>status</span> <span class='varop'>&gt;=</span> <span class='varid'>c_err</span>
+<a name="line-624"></a>      <span class='keyword'>then</span> <span class='keyword'>do</span>
+<a name="line-625"></a>	   <span class='varid'>errorMsgHandler</span> <span class='layout'>(</span><span class='varid'>mkXErrorTree</span> <span class='varid'>c_warn</span> <span class='layout'>(</span><span class='varid'>errClass</span> <span class='varid'>status</span> <span class='varop'>++</span> <span class='str'>"s detected in "</span> <span class='varop'>++</span> <span class='varid'>msg</span><span class='layout'>)</span> <span class='conid'>[]</span><span class='layout'>)</span>
+<a name="line-626"></a>	   <span class='varid'>noneM</span> <span class='varid'>t</span>
+<a name="line-627"></a>	<span class='keyword'>else</span>
+<a name="line-628"></a>           <span class='varid'>thisM</span> <span class='varid'>t</span>
+<a name="line-629"></a>    <span class='keyword'>where</span>
+<a name="line-630"></a>    <span class='varid'>status</span> <span class='keyglyph'>=</span> <span class='varid'>intValueOf</span> <span class='varid'>a_status</span> <span class='varid'>t</span>
+<a name="line-631"></a>    <span class='varid'>msg</span>    <span class='keyglyph'>=</span>    <span class='varid'>valueOf</span> <span class='varid'>a_module</span> <span class='varid'>t</span>
+<a name="line-632"></a>
+<a name="line-633"></a><span class='comment'>-- |</span>
+<a name="line-634"></a><span class='comment'>-- add the error level and the module where the error occured</span>
+<a name="line-635"></a><span class='comment'>-- to the attributes of a document root node and remove the children when level is greater or equal to 'c_err'</span>
+<a name="line-636"></a>
+<a name="line-637"></a><a name="setStatus"></a><span class='definition'>setStatus</span>	<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-638"></a><span class='definition'>setStatus</span> <span class='varid'>level</span> <span class='varid'>msg</span>
+<a name="line-639"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>addAttrInt</span> <span class='varid'>a_status</span> <span class='varid'>level</span>
+<a name="line-640"></a>	<span class='varop'>.&gt;</span>
+<a name="line-641"></a>	<span class='varid'>addAttr</span> <span class='varid'>a_module</span> <span class='varid'>msg</span>
+<a name="line-642"></a>	<span class='varop'>.&gt;</span>
+<a name="line-643"></a>	<span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>level</span> <span class='varop'>&gt;=</span> <span class='varid'>c_err</span>
+<a name="line-644"></a>	  <span class='keyword'>then</span> <span class='varid'>replaceChildren</span> <span class='conid'>[]</span>
+<a name="line-645"></a>	  <span class='keyword'>else</span> <span class='varid'>this</span>
+<a name="line-646"></a>	<span class='layout'>)</span>
+<a name="line-647"></a>      <span class='layout'>)</span>
+<a name="line-648"></a>      <span class='varop'>`when`</span> <span class='varid'>isRoot</span>
+<a name="line-649"></a>
+<a name="line-650"></a><span class='comment'>-- |</span>
+<a name="line-651"></a><span class='comment'>-- check whether tree is a document root and the status attribute has a value less than 'c_err'</span>
+<a name="line-652"></a>
+<a name="line-653"></a><a name="statusOk"></a><span class='definition'>statusOk</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-654"></a><span class='definition'>statusOk</span>
+<a name="line-655"></a>    <span class='keyglyph'>=</span> <span class='varid'>isRoot</span>
+<a name="line-656"></a>      <span class='varop'>.&gt;</span>
+<a name="line-657"></a>      <span class='varid'>isOf</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>not</span> <span class='layout'>(</span><span class='varid'>intValueOf</span> <span class='varid'>a_status</span> <span class='varid'>t</span> <span class='varop'>&gt;=</span> <span class='varid'>c_err</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-658"></a><span class='comment'>-- |</span>
+<a name="line-659"></a><span class='comment'>-- check whether the error level attribute in the system state</span>
+<a name="line-660"></a><span class='comment'>-- is set to error, in this case the children of the document root are</span>
+<a name="line-661"></a><span class='comment'>-- removed and error info is added as attributes with 'setStatus'</span>
+<a name="line-662"></a><span class='comment'>-- else nothing is changed</span>
+<a name="line-663"></a>
+<a name="line-664"></a><a name="checkResult"></a><span class='definition'>checkResult</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-665"></a><span class='definition'>checkResult</span> <span class='varid'>msg</span> <span class='varid'>t</span>
+<a name="line-666"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-667"></a>      <span class='varid'>level</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParamInt</span> <span class='varid'>a_status</span> <span class='num'>0</span>
+<a name="line-668"></a>      <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>level</span> <span class='varop'>&lt;=</span> <span class='varid'>c_warn</span>
+<a name="line-669"></a>	<span class='keyword'>then</span> <span class='varid'>thisM</span>
+<a name="line-670"></a>	<span class='keyword'>else</span> <span class='varid'>liftMf</span> <span class='layout'>(</span> <span class='varid'>setStatus</span> <span class='varid'>level</span> <span class='varid'>msg</span> <span class='layout'>)</span>
+<a name="line-671"></a>        <span class='layout'>)</span> <span class='varid'>t</span>
+<a name="line-672"></a>
+<a name="line-673"></a><span class='comment'>-- |</span>
+<a name="line-674"></a><span class='comment'>-- monadic filter for processing the attribute list of a tag.</span>
+<a name="line-675"></a><span class='comment'>-- for other trees this filter acts like 'noneM'</span>
+<a name="line-676"></a><span class='comment'>--</span>
+<a name="line-677"></a><span class='comment'>-- see also : 'processAttr', 'processAttrl'</span>
+<a name="line-678"></a>
+<a name="line-679"></a><a name="processAttrM"></a><span class='definition'>processAttrM</span>				<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-680"></a><span class='definition'>processAttrM</span> <span class='varid'>f</span> <span class='varid'>t</span>
+<a name="line-681"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-682"></a>      <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>f</span> <span class='varop'>$$&lt;</span> <span class='varid'>al</span>
+<a name="line-683"></a>      <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>replaceAttrl</span> <span class='varid'>res</span> <span class='varid'>t</span>
+<a name="line-684"></a>    <span class='keyword'>where</span>
+<a name="line-685"></a>    <span class='varid'>al</span> <span class='keyglyph'>=</span> <span class='varid'>getAttrl</span> <span class='varid'>t</span>
+<a name="line-686"></a>
+<a name="line-687"></a><span class='comment'>-- ------------------------------------------------------------</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-DOM-XmlTree.html b/doc/hxt-filter/src/Text-XML-HXT-DOM-XmlTree.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-DOM-XmlTree.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- This helper module exports elements from the basic libraries:</span>
+<a name="line-3"></a><span class='comment'>-- XmlTreeTypes, XmlKeywords, XNodeFunctions, XmlTreeFunctions and XmlTreeFilter</span>
+<a name="line-4"></a>
+<a name="line-5"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-6"></a>    <span class='layout'>(</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTreeTypes</span>
+<a name="line-7"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlKeywords</span>
+<a name="line-8"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTreeFunctions</span>
+<a name="line-9"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTreeFilter</span>
+<a name="line-10"></a>    <span class='layout'>)</span>
+<a name="line-11"></a>
+<a name="line-12"></a><span class='keyword'>where</span>
+<a name="line-13"></a>
+<a name="line-14"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTreeTypes</span>		<span class='comment'>-- NTree and XNode types</span>
+<a name="line-15"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlKeywords</span>		<span class='comment'>-- keywords for DTD</span>
+<a name="line-16"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTreeFunctions</span>	<span class='comment'>-- tree constructors and selector</span>
+<a name="line-17"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTreeFilter</span>		<span class='comment'>-- basic filter</span>
+<a name="line-18"></a>
+<a name="line-19"></a>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-DOM-XmlTreeFilter.html b/doc/hxt-filter/src/Text-XML-HXT-DOM-XmlTreeFilter.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-DOM-XmlTreeFilter.html
@@ -0,0 +1,965 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- basic XmlTree filter</span>
+<a name="line-3"></a>
+<a name="line-4"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTreeFilter</span>
+<a name="line-5"></a>    <span class='layout'>(</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTreeFilter</span>
+<a name="line-6"></a>    <span class='layout'>)</span>
+<a name="line-7"></a><span class='keyword'>where</span>
+<a name="line-8"></a>
+<a name="line-9"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTreeTypes</span>
+<a name="line-10"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTreeFunctions</span>
+<a name="line-11"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlKeywords</span>
+<a name="line-12"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>Unicode</span>	<span class='layout'>(</span> <span class='varid'>isXmlSpaceChar</span>	<span class='layout'>)</span>
+<a name="line-13"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>Util</span>	<span class='layout'>(</span> <span class='varid'>decimalStringToInt</span>	<span class='layout'>)</span>
+<a name="line-14"></a>
+<a name="line-15"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>List</span>		<span class='layout'>(</span> <span class='varid'>partition</span>	<span class='layout'>)</span>
+<a name="line-16"></a>
+<a name="line-17"></a><span class='keyword'>infixl</span> <span class='num'>7</span> <span class='varop'>+=</span> <span class='layout'>,</span> <span class='varop'>++=</span>
+<a name="line-18"></a>
+<a name="line-19"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-20"></a><span class='comment'>--</span>
+<a name="line-21"></a><span class='comment'>-- filter predicates</span>
+<a name="line-22"></a>
+<a name="line-23"></a><span class='comment'>-- |</span>
+<a name="line-24"></a><span class='comment'>-- test whether the root of a tree contains a document root node.</span>
+<a name="line-25"></a>
+<a name="line-26"></a><a name="isRoot"></a><span class='definition'>isRoot</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-27"></a><span class='definition'>isRoot</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='layout'>(</span><span class='varid'>isTagNode</span> <span class='varid'>t_root</span><span class='layout'>)</span>
+<a name="line-28"></a>
+<a name="line-29"></a><span class='comment'>-- |</span>
+<a name="line-30"></a><span class='comment'>-- test whether the root of a tree contains a tag node.</span>
+<a name="line-31"></a><span class='comment'>--</span>
+<a name="line-32"></a><span class='comment'>-- see also: 'isNsTag'</span>
+<a name="line-33"></a>
+<a name="line-34"></a><a name="isTag"></a><span class='definition'>isTag</span>			<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-35"></a><span class='definition'>isTag</span> <span class='varid'>tn</span>		<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='layout'>(</span><span class='varid'>isTagNode</span> <span class='varid'>tn</span><span class='layout'>)</span>
+<a name="line-36"></a>
+<a name="line-37"></a><span class='comment'>-- |</span>
+<a name="line-38"></a><span class='comment'>-- namespace aware test whether the root of a tree contains a tag node. Parameters are the local part and namespace.</span>
+<a name="line-39"></a><span class='comment'>-- Only usable after namespace propagation.</span>
+<a name="line-40"></a><span class='comment'>--</span>
+<a name="line-41"></a><span class='comment'>-- see also: 'isTag'</span>
+<a name="line-42"></a>
+<a name="line-43"></a><a name="isNsTag"></a><span class='definition'>isNsTag</span>			<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-44"></a><span class='definition'>isNsTag</span> <span class='varid'>lp</span> <span class='varid'>ns</span>		<span class='keyglyph'>=</span> <span class='varid'>isOfTag</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>localPart</span> <span class='varid'>t</span> <span class='varop'>==</span> <span class='varid'>lp</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>namespaceUri</span> <span class='varid'>t</span> <span class='varop'>==</span> <span class='varid'>ns</span><span class='layout'>)</span>
+<a name="line-45"></a>
+<a name="line-46"></a><span class='comment'>-- |</span>
+<a name="line-47"></a><span class='comment'>-- test whether the root of a tree has a given local name</span>
+<a name="line-48"></a><span class='comment'>-- see also : 'hasNamespace', 'hasPrefix', 'isTag', 'isAttr'</span>
+<a name="line-49"></a>
+<a name="line-50"></a><a name="hasLocalPart"></a><span class='definition'>hasLocalPart</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-51"></a><span class='definition'>hasLocalPart</span> <span class='varid'>lp</span>		<span class='keyglyph'>=</span> <span class='varid'>isOf</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varop'>==</span> <span class='varid'>lp</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>localPartOf</span><span class='layout'>)</span>
+<a name="line-52"></a>
+<a name="line-53"></a><span class='comment'>-- |</span>
+<a name="line-54"></a><span class='comment'>-- test whether the root of a tree has a given prefix name</span>
+<a name="line-55"></a><span class='comment'>-- see also : 'hasNamespace', 'hasLocalPart', 'isTag', 'isAttr'</span>
+<a name="line-56"></a>
+<a name="line-57"></a><a name="hasPrefix"></a><span class='definition'>hasPrefix</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-58"></a><span class='definition'>hasPrefix</span> <span class='varid'>px</span>		<span class='keyglyph'>=</span> <span class='varid'>isOf</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varop'>==</span> <span class='varid'>px</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>prefixOf</span><span class='layout'>)</span>
+<a name="line-59"></a>
+<a name="line-60"></a><span class='comment'>-- |</span>
+<a name="line-61"></a><span class='comment'>-- test whether the root of a tree belongs to a given namespace</span>
+<a name="line-62"></a><span class='comment'>-- see also : 'isTag', 'isAttr', 'hasLocalPart', 'hasPrefix'</span>
+<a name="line-63"></a>
+<a name="line-64"></a><a name="hasNamespace"></a><span class='definition'>hasNamespace</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-65"></a><span class='definition'>hasNamespace</span> <span class='varid'>ns</span>		<span class='keyglyph'>=</span> <span class='varid'>isOf</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varop'>==</span> <span class='varid'>ns</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>namespaceOf</span><span class='layout'>)</span>
+<a name="line-66"></a>
+<a name="line-67"></a><span class='comment'>-- |</span>
+<a name="line-68"></a><span class='comment'>-- test whether the root of a tree contains a tag node with a special name.</span>
+<a name="line-69"></a>
+<a name="line-70"></a><a name="isOfTag"></a><span class='definition'>isOfTag</span>			<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>TagName</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-71"></a><span class='definition'>isOfTag</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varop'>.</span> <span class='varid'>isOfTagNode</span>
+<a name="line-72"></a>
+<a name="line-73"></a><span class='comment'>-- |</span>
+<a name="line-74"></a><span class='comment'>-- test whether the node of a tree is a XTag node or a XPi node with an attibute of a specific name</span>
+<a name="line-75"></a><span class='comment'>--</span>
+<a name="line-76"></a><span class='comment'>-- see also: 'isAttr', 'hasNsAttr'</span>
+<a name="line-77"></a>
+<a name="line-78"></a><a name="hasAttr"></a><span class='definition'>hasAttr</span>			<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-79"></a><span class='definition'>hasAttr</span> <span class='varid'>an</span>		<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>getAttrl</span> <span class='varop'>.&gt;</span> <span class='varid'>isAttr</span> <span class='varid'>an</span><span class='layout'>)</span> <span class='varop'>`guards`</span> <span class='varid'>this</span>
+<a name="line-80"></a>
+<a name="line-81"></a><span class='comment'>-- |</span>
+<a name="line-82"></a><span class='comment'>-- test whether the tree is a XTag node with an attibute of a specific local name and namespace uri</span>
+<a name="line-83"></a><span class='comment'>--</span>
+<a name="line-84"></a><span class='comment'>-- see also: 'hasAttr', 'isNsAttr'</span>
+<a name="line-85"></a>
+<a name="line-86"></a><a name="hasNsAttr"></a><span class='definition'>hasNsAttr</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-87"></a><span class='definition'>hasNsAttr</span> <span class='varid'>an</span> <span class='varid'>ns</span>		<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>getAttrl</span> <span class='varop'>.&gt;</span> <span class='varid'>isNsAttr</span> <span class='varid'>an</span> <span class='varid'>ns</span><span class='layout'>)</span> <span class='varop'>`guards`</span> <span class='varid'>this</span>
+<a name="line-88"></a>
+<a name="line-89"></a><span class='comment'>-- |</span>
+<a name="line-90"></a><span class='comment'>-- test whether the given node is a XTag node or a XPI node with an attribute with a value with a specific property.</span>
+<a name="line-91"></a><span class='comment'>-- In case of a match, the attribute value represented by a text node is returned as single element list,</span>
+<a name="line-92"></a><span class='comment'>-- else the empty list is the result.</span>
+<a name="line-93"></a><span class='comment'>--</span>
+<a name="line-94"></a><span class='comment'>-- see also : 'getValue'</span>
+<a name="line-95"></a>
+<a name="line-96"></a><a name="hasValue"></a><span class='definition'>hasValue</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-97"></a><span class='definition'>hasValue</span> <span class='varid'>a</span> <span class='varid'>p</span> <span class='varid'>t</span>
+<a name="line-98"></a>   <span class='keyglyph'>|</span> <span class='layout'>(</span><span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>null</span><span class='layout'>)</span> <span class='varid'>att</span>
+<a name="line-99"></a>     <span class='varop'>&amp;&amp;</span>
+<a name="line-100"></a>     <span class='varid'>p</span> <span class='varid'>val</span>
+<a name="line-101"></a>       <span class='keyglyph'>=</span> <span class='varid'>xtext</span> <span class='varid'>val</span>
+<a name="line-102"></a>   <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>
+<a name="line-103"></a>       <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-104"></a>   <span class='keyword'>where</span>
+<a name="line-105"></a>   <span class='varid'>att</span> <span class='keyglyph'>=</span> <span class='varid'>getAttrl</span> <span class='varop'>.&gt;</span> <span class='varid'>isAttr</span> <span class='varid'>a</span> <span class='varop'>$</span> <span class='varid'>t</span>
+<a name="line-106"></a>   <span class='varid'>val</span> <span class='keyglyph'>=</span> <span class='varid'>xshow</span> <span class='varop'>.</span> <span class='varid'>getChildren</span> <span class='varop'>$$</span> <span class='varid'>att</span>
+<a name="line-107"></a>
+<a name="line-108"></a><span class='comment'>-- |</span>
+<a name="line-109"></a><span class='comment'>-- test whether the tree is a processing instruction with a given name.</span>
+<a name="line-110"></a>
+<a name="line-111"></a><a name="isPi"></a><span class='definition'>isPi</span>			<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-112"></a><span class='definition'>isPi</span> <span class='varid'>pn</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='layout'>(</span><span class='varid'>isPiNode</span> <span class='varid'>pn</span><span class='layout'>)</span>
+<a name="line-113"></a>
+<a name="line-114"></a><span class='comment'>-- |</span>
+<a name="line-115"></a><span class='comment'>-- test whether the tree is a \&lt;?xml ... ?\&gt; declaration</span>
+<a name="line-116"></a>
+<a name="line-117"></a><a name="isXmlPi"></a><span class='definition'>isXmlPi</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-118"></a><span class='definition'>isXmlPi</span>			<span class='keyglyph'>=</span> <span class='varid'>isPi</span> <span class='varid'>t_xml</span>
+<a name="line-119"></a>
+<a name="line-120"></a><span class='comment'>-- |</span>
+<a name="line-121"></a><span class='comment'>-- test whether the root of a tree contains a processing instruction of a special name.</span>
+<a name="line-122"></a>
+<a name="line-123"></a><a name="isOfPi"></a><span class='definition'>isOfPi</span>			<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>TagName</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-124"></a><span class='definition'>isOfPi</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varop'>.</span> <span class='varid'>isOfPiNode</span>
+<a name="line-125"></a>
+<a name="line-126"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-127"></a>
+<a name="line-128"></a><span class='comment'>-- simple XNode Filter predicates</span>
+<a name="line-129"></a><span class='comment'>--</span>
+<a name="line-130"></a>
+<a name="line-131"></a><span class='comment'>-- |</span>
+<a name="line-132"></a><span class='comment'>-- test whether the root of a tree contains a CDATA node.</span>
+<a name="line-133"></a>
+<a name="line-134"></a><a name="isXCdata"></a><span class='definition'>isXCdata</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-135"></a><span class='definition'>isXCdata</span>		<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varid'>isXCdataNode</span>
+<a name="line-136"></a>
+<a name="line-137"></a><span class='comment'>-- |</span>
+<a name="line-138"></a><span class='comment'>-- test whether the root of a tree contains a character reference node.</span>
+<a name="line-139"></a>
+<a name="line-140"></a><a name="isXCharRef"></a><span class='definition'>isXCharRef</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-141"></a><span class='definition'>isXCharRef</span>		<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varid'>isXCharRefNode</span>
+<a name="line-142"></a>
+<a name="line-143"></a><span class='comment'>-- |</span>
+<a name="line-144"></a><span class='comment'>-- test whether the root of a tree contains a comment node.</span>
+<a name="line-145"></a>
+<a name="line-146"></a><a name="isXCmt"></a><span class='definition'>isXCmt</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-147"></a><span class='definition'>isXCmt</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varid'>isXCmtNode</span>
+<a name="line-148"></a>
+<a name="line-149"></a><span class='comment'>-- |</span>
+<a name="line-150"></a><span class='comment'>-- test whether the root of a tree contains a DTD part.</span>
+<a name="line-151"></a>
+<a name="line-152"></a><a name="isXDTD"></a><span class='definition'>isXDTD</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-153"></a><span class='definition'>isXDTD</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varid'>isXDTDNode</span>
+<a name="line-154"></a>
+<a name="line-155"></a><span class='comment'>-- |</span>
+<a name="line-156"></a><span class='comment'>-- test whether the root of a tree contains an entity reference node.</span>
+<a name="line-157"></a>
+<a name="line-158"></a><a name="isXEntityRef"></a><span class='definition'>isXEntityRef</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-159"></a><span class='definition'>isXEntityRef</span>		<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varid'>isXEntityRefNode</span>
+<a name="line-160"></a>
+<a name="line-161"></a><span class='comment'>-- |</span>
+<a name="line-162"></a><span class='comment'>-- test whether the root of a tree contains an error node.</span>
+<a name="line-163"></a>
+<a name="line-164"></a><a name="isXError"></a><span class='definition'>isXError</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-165"></a><span class='definition'>isXError</span>		<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varid'>isXErrorNode</span>
+<a name="line-166"></a>
+<a name="line-167"></a><span class='comment'>-- |</span>
+<a name="line-168"></a><span class='comment'>-- test whether the root of a tree contains a processing instruction node.</span>
+<a name="line-169"></a>
+<a name="line-170"></a><a name="isXPi"></a><span class='definition'>isXPi</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-171"></a><span class='definition'>isXPi</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varid'>isXPiNode</span>
+<a name="line-172"></a>
+<a name="line-173"></a><span class='comment'>-- |</span>
+<a name="line-174"></a><span class='comment'>-- test whether the root of a tree contains a tag node.</span>
+<a name="line-175"></a>
+<a name="line-176"></a><a name="isXTag"></a><span class='definition'>isXTag</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-177"></a><span class='definition'>isXTag</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varid'>isXTagNode</span>
+<a name="line-178"></a>
+<a name="line-179"></a><span class='comment'>-- |</span>
+<a name="line-180"></a><span class='comment'>-- test whether the root of a tree contains an attribute node.</span>
+<a name="line-181"></a>
+<a name="line-182"></a><a name="isXAttr"></a><span class='definition'>isXAttr</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-183"></a><span class='definition'>isXAttr</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varid'>isXAttrNode</span>
+<a name="line-184"></a>
+<a name="line-185"></a><span class='comment'>-- |</span>
+<a name="line-186"></a><span class='comment'>-- test whether the root of a tree is an attribute node for a given attribute name</span>
+<a name="line-187"></a>
+<a name="line-188"></a><a name="isAttr"></a><span class='definition'>isAttr</span>			<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-189"></a><span class='definition'>isAttr</span> <span class='varid'>an</span>		<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='layout'>(</span><span class='varid'>isAttrNode</span> <span class='varid'>an</span><span class='layout'>)</span>
+<a name="line-190"></a>
+<a name="line-191"></a><span class='comment'>-- |</span>
+<a name="line-192"></a><span class='comment'>-- namespace aware test whether the tree contains an attribute node. Parameters are the local part of the atribute name and the namespace.</span>
+<a name="line-193"></a><span class='comment'>-- Only usable after namespace propagation.</span>
+<a name="line-194"></a><span class='comment'>--</span>
+<a name="line-195"></a><span class='comment'>-- see also: 'isNsTag', 'isAttr', 'hasNsAttr'</span>
+<a name="line-196"></a>
+<a name="line-197"></a><a name="isNsAttr"></a><span class='definition'>isNsAttr</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-198"></a><span class='definition'>isNsAttr</span> <span class='varid'>lp</span> <span class='varid'>ns</span>		<span class='keyglyph'>=</span> <span class='varid'>isOfAttr</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>localPart</span> <span class='varid'>a</span> <span class='varop'>==</span> <span class='varid'>lp</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>namespaceUri</span> <span class='varid'>a</span> <span class='varop'>==</span> <span class='varid'>ns</span><span class='layout'>)</span>
+<a name="line-199"></a>
+<a name="line-200"></a><span class='comment'>-- |</span>
+<a name="line-201"></a><span class='comment'>-- general test for an attribute name</span>
+<a name="line-202"></a>
+<a name="line-203"></a><a name="isOfAttr"></a><span class='definition'>isOfAttr</span>		<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>AttrName</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-204"></a><span class='definition'>isOfAttr</span>		<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varop'>.</span> <span class='varid'>isOfAttrNode</span>
+<a name="line-205"></a>
+<a name="line-206"></a><span class='comment'>-- |</span>
+<a name="line-207"></a><span class='comment'>-- test whether the root of a tree contains a text node.</span>
+<a name="line-208"></a>
+<a name="line-209"></a><a name="isXText"></a><span class='definition'>isXText</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-210"></a><span class='definition'>isXText</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varid'>isXTextNode</span>
+<a name="line-211"></a>
+<a name="line-212"></a><span class='comment'>-- |</span>
+<a name="line-213"></a><span class='comment'>-- test whether the root of a tree contains a special text.</span>
+<a name="line-214"></a>
+<a name="line-215"></a><a name="isText"></a><span class='definition'>isText</span>			<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-216"></a><span class='definition'>isText</span> <span class='varid'>t</span>		<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='layout'>(</span><span class='varid'>isTextNode</span> <span class='varid'>t</span><span class='layout'>)</span>
+<a name="line-217"></a>
+<a name="line-218"></a><span class='comment'>-- |</span>
+<a name="line-219"></a><span class='comment'>-- test whether the root of a tree contains a text node with a special property</span>
+<a name="line-220"></a>
+<a name="line-221"></a><a name="isOfText"></a><span class='definition'>isOfText</span>		<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-222"></a><span class='definition'>isOfText</span>		<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varop'>.</span> <span class='varid'>isOfTextNode</span>
+<a name="line-223"></a>
+<a name="line-224"></a><span class='comment'>-- |</span>
+<a name="line-225"></a><span class='comment'>-- test whether the root of a tree contains a text node only with whitespace.</span>
+<a name="line-226"></a>
+<a name="line-227"></a><a name="isWhiteSpace"></a><span class='definition'>isWhiteSpace</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-228"></a><span class='definition'>isWhiteSpace</span>
+<a name="line-229"></a>    <span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varid'>isWS</span>
+<a name="line-230"></a>      <span class='keyword'>where</span>
+<a name="line-231"></a>      <span class='varid'>isWS</span> <span class='varid'>n</span>
+<a name="line-232"></a>	  <span class='keyglyph'>=</span> <span class='varid'>isXTextNode</span> <span class='varid'>n</span>
+<a name="line-233"></a>	    <span class='varop'>&amp;&amp;</span> <span class='varid'>all</span> <span class='varid'>isXmlSpaceChar</span> <span class='layout'>(</span><span class='varid'>textOfXNode</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-234"></a>
+<a name="line-235"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-236"></a><span class='comment'>--</span>
+<a name="line-237"></a><span class='comment'>-- XDTD Predicates</span>
+<a name="line-238"></a>
+<a name="line-239"></a><span class='comment'>-- |</span>
+<a name="line-240"></a><span class='comment'>-- test whether the root of a tree contains a DOCTYPE DTD part.</span>
+<a name="line-241"></a>
+<a name="line-242"></a><a name="isDoctype"></a><span class='definition'>isDoctype</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-243"></a><span class='definition'>isDoctype</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='layout'>(</span><span class='varid'>isDTDElemNode</span> <span class='conid'>DOCTYPE</span><span class='layout'>)</span>
+<a name="line-244"></a>
+<a name="line-245"></a><span class='comment'>-- |</span>
+<a name="line-246"></a><span class='comment'>-- test whether the root of a tree contains an ATTLIST DTD part.</span>
+<a name="line-247"></a>
+<a name="line-248"></a><a name="isAttlist"></a><span class='definition'>isAttlist</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-249"></a><span class='definition'>isAttlist</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='layout'>(</span><span class='varid'>isDTDElemNode</span> <span class='conid'>ATTLIST</span><span class='layout'>)</span>
+<a name="line-250"></a>
+<a name="line-251"></a><span class='comment'>-- |</span>
+<a name="line-252"></a><span class='comment'>-- test whether the root of a tree contains an ELEMENT DTD part.</span>
+<a name="line-253"></a>
+<a name="line-254"></a><a name="isElement"></a><span class='definition'>isElement</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-255"></a><span class='definition'>isElement</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='layout'>(</span><span class='varid'>isDTDElemNode</span> <span class='conid'>ELEMENT</span><span class='layout'>)</span>
+<a name="line-256"></a>
+<a name="line-257"></a><span class='comment'>-- |</span>
+<a name="line-258"></a><span class='comment'>-- test whether the root of a tree contains an ENTITY DTD part.</span>
+<a name="line-259"></a>
+<a name="line-260"></a><a name="isEntity"></a><span class='definition'>isEntity</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-261"></a><span class='definition'>isEntity</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='layout'>(</span><span class='varid'>isDTDElemNode</span> <span class='conid'>ENTITY</span><span class='layout'>)</span>
+<a name="line-262"></a>
+<a name="line-263"></a><span class='comment'>-- |</span>
+<a name="line-264"></a><span class='comment'>-- test whether the root of a tree contains a parameter ENTITY reference.</span>
+<a name="line-265"></a>
+<a name="line-266"></a><a name="isPeRef"></a><span class='definition'>isPeRef</span>				<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-267"></a><span class='definition'>isPeRef</span>				<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='layout'>(</span><span class='varid'>isDTDElemNode</span> <span class='conid'>PEREF</span><span class='layout'>)</span>
+<a name="line-268"></a>
+<a name="line-269"></a><span class='comment'>-- |</span>
+<a name="line-270"></a><span class='comment'>-- test whether the root of a tree contains a DTD name part.</span>
+<a name="line-271"></a>
+<a name="line-272"></a><a name="isDTDName"></a><span class='definition'>isDTDName</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-273"></a><span class='definition'>isDTDName</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='layout'>(</span><span class='varid'>isDTDElemNode</span> <span class='conid'>NAME</span><span class='layout'>)</span>
+<a name="line-274"></a>
+<a name="line-275"></a><span class='comment'>-- |</span>
+<a name="line-276"></a><span class='comment'>-- test whether the root of a tree contains a conditional section DTD part.</span>
+<a name="line-277"></a>
+<a name="line-278"></a><a name="isCondSect"></a><span class='definition'>isCondSect</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-279"></a><span class='definition'>isCondSect</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='layout'>(</span><span class='varid'>isDTDElemNode</span> <span class='conid'>CONDSECT</span><span class='layout'>)</span>
+<a name="line-280"></a>
+<a name="line-281"></a><span class='comment'>-- |</span>
+<a name="line-282"></a><span class='comment'>-- test whether the root of a tree contains a parameter entity declaration.</span>
+<a name="line-283"></a>
+<a name="line-284"></a><a name="isParameterEntity"></a><span class='definition'>isParameterEntity</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-285"></a><span class='definition'>isParameterEntity</span>		<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='layout'>(</span><span class='varid'>isDTDElemNode</span> <span class='conid'>PENTITY</span><span class='layout'>)</span>
+<a name="line-286"></a>
+<a name="line-287"></a><span class='comment'>-- |</span>
+<a name="line-288"></a><span class='comment'>-- test whether the root of a tree contains a NOTATION DTD part.</span>
+<a name="line-289"></a>
+<a name="line-290"></a><a name="isNotation"></a><span class='definition'>isNotation</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-291"></a><span class='definition'>isNotation</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='layout'>(</span><span class='varid'>isDTDElemNode</span> <span class='conid'>NOTATION</span><span class='layout'>)</span>
+<a name="line-292"></a>
+<a name="line-293"></a><span class='comment'>-- ATTLIST predicates</span>
+<a name="line-294"></a>
+<a name="line-295"></a><a name="isDefaultAttrKind"></a><span class='definition'>isDefaultAttrKind</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-296"></a><span class='definition'>isDefaultAttrKind</span>		<span class='keyglyph'>=</span> <span class='varid'>isOf</span> <span class='layout'>(</span><span class='varid'>a_kind</span> <span class='varop'>`ofDTDequals`</span> <span class='varid'>k_default</span><span class='layout'>)</span>
+<a name="line-297"></a>
+<a name="line-298"></a><a name="isEnumAttrType"></a><span class='definition'>isEnumAttrType</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-299"></a><span class='definition'>isEnumAttrType</span>			<span class='keyglyph'>=</span> <span class='varid'>isOf</span> <span class='layout'>(</span><span class='varid'>a_type</span> <span class='varop'>`ofDTDequals`</span> <span class='varid'>k_enumeration</span><span class='layout'>)</span>
+<a name="line-300"></a>
+<a name="line-301"></a><a name="isFixedAttrKind"></a><span class='definition'>isFixedAttrKind</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-302"></a><span class='definition'>isFixedAttrKind</span>			<span class='keyglyph'>=</span> <span class='varid'>isOf</span> <span class='layout'>(</span><span class='varid'>a_kind</span> <span class='varop'>`ofDTDequals`</span> <span class='varid'>k_fixed</span><span class='layout'>)</span>
+<a name="line-303"></a>
+<a name="line-304"></a><a name="isIdAttrType"></a><span class='definition'>isIdAttrType</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-305"></a><span class='definition'>isIdAttrType</span>			<span class='keyglyph'>=</span> <span class='varid'>isOf</span> <span class='layout'>(</span><span class='varid'>a_type</span> <span class='varop'>`ofDTDequals`</span> <span class='varid'>k_id</span><span class='layout'>)</span>
+<a name="line-306"></a>
+<a name="line-307"></a><a name="isIdRefAttrType"></a><span class='definition'>isIdRefAttrType</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-308"></a><span class='definition'>isIdRefAttrType</span>			<span class='keyglyph'>=</span> <span class='varid'>isOf</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='varid'>k_idref</span><span class='layout'>,</span> <span class='varid'>k_idrefs</span><span class='keyglyph'>]</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>valueOfDTD</span> <span class='varid'>a_type</span><span class='layout'>)</span>
+<a name="line-309"></a>
+<a name="line-310"></a><a name="isNotationAttrType"></a><span class='definition'>isNotationAttrType</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-311"></a><span class='definition'>isNotationAttrType</span>		<span class='keyglyph'>=</span> <span class='varid'>isOf</span> <span class='layout'>(</span><span class='varid'>a_type</span> <span class='varop'>`ofDTDequals`</span> <span class='varid'>k_notation</span><span class='layout'>)</span>
+<a name="line-312"></a>
+<a name="line-313"></a><a name="isRequiredAttrKind"></a><span class='definition'>isRequiredAttrKind</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-314"></a><span class='definition'>isRequiredAttrKind</span>		<span class='keyglyph'>=</span> <span class='varid'>isOf</span> <span class='layout'>(</span><span class='varid'>a_kind</span> <span class='varop'>`ofDTDequals`</span> <span class='varid'>k_required</span><span class='layout'>)</span>
+<a name="line-315"></a>
+<a name="line-316"></a><a name="isAttlistParameterEntity"></a><span class='definition'>isAttlistParameterEntity</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-317"></a><span class='definition'>isAttlistParameterEntity</span>	<span class='keyglyph'>=</span> <span class='varid'>isAttlist</span> <span class='varop'>.&gt;</span> <span class='varid'>isOf</span> <span class='layout'>(</span><span class='varid'>a_type</span> <span class='varop'>`ofDTDequals`</span> <span class='varid'>k_peref</span><span class='layout'>)</span>
+<a name="line-318"></a>
+<a name="line-319"></a><span class='comment'>-- ELEMENT predicates</span>
+<a name="line-320"></a>
+<a name="line-321"></a><a name="isEmptyElement"></a><span class='definition'>isEmptyElement</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-322"></a><span class='definition'>isEmptyElement</span>			<span class='keyglyph'>=</span> <span class='varid'>isOf</span> <span class='layout'>(</span><span class='varid'>a_type</span> <span class='varop'>`ofDTDequals`</span> <span class='varid'>k_empty</span><span class='layout'>)</span>
+<a name="line-323"></a>
+<a name="line-324"></a><a name="isMixedContentElement"></a><span class='definition'>isMixedContentElement</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-325"></a><span class='definition'>isMixedContentElement</span>		<span class='keyglyph'>=</span> <span class='varid'>isOf</span> <span class='layout'>(</span><span class='varid'>a_type</span> <span class='varop'>`ofDTDequals`</span> <span class='varid'>v_mixed</span><span class='layout'>)</span>
+<a name="line-326"></a>
+<a name="line-327"></a><a name="isElemWithContent"></a><span class='definition'>isElemWithContent</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-328"></a><span class='definition'>isElemWithContent</span>		<span class='keyglyph'>=</span> <span class='varid'>isElement</span>
+<a name="line-329"></a>				  <span class='varop'>.&gt;</span>
+<a name="line-330"></a>				  <span class='varid'>isOf</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='varid'>v_mixed</span><span class='layout'>,</span> <span class='varid'>v_children</span><span class='keyglyph'>]</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>valueOfDTD</span> <span class='varid'>a_type</span><span class='layout'>)</span>
+<a name="line-331"></a>
+<a name="line-332"></a><a name="isAttlistOfElement"></a><span class='definition'>isAttlistOfElement</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-333"></a><span class='definition'>isAttlistOfElement</span> <span class='varid'>el</span>		<span class='keyglyph'>=</span> <span class='varid'>isAttlist</span>
+<a name="line-334"></a>				  <span class='varop'>.&gt;</span>
+<a name="line-335"></a>				  <span class='varid'>isOf</span> <span class='layout'>(</span><span class='varid'>a_name</span> <span class='varop'>`ofDTDequals`</span> <span class='varid'>el</span><span class='layout'>)</span>
+<a name="line-336"></a>
+<a name="line-337"></a><a name="isElemContentParamEntity"></a><span class='definition'>isElemContentParamEntity</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-338"></a><span class='definition'>isElemContentParamEntity</span>	<span class='keyglyph'>=</span> <span class='varid'>isElement</span>
+<a name="line-339"></a>				  <span class='varop'>.&gt;</span>
+<a name="line-340"></a>				  <span class='varid'>isOf</span> <span class='layout'>(</span><span class='varid'>a_type</span> <span class='varop'>`ofDTDequals`</span> <span class='varid'>k_peref</span><span class='layout'>)</span>
+<a name="line-341"></a>
+<a name="line-342"></a><span class='comment'>-- ENTITY predicates</span>
+<a name="line-343"></a>
+<a name="line-344"></a><a name="isUnparsedEntity"></a><span class='definition'>isUnparsedEntity</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-345"></a><span class='definition'>isUnparsedEntity</span>		<span class='keyglyph'>=</span> <span class='varid'>isOf</span> <span class='layout'>(</span><span class='varid'>hasEntry</span> <span class='varid'>k_ndata</span> <span class='varop'>.</span> <span class='varid'>attrlOfDTD</span><span class='layout'>)</span>
+<a name="line-346"></a>
+<a name="line-347"></a><a name="isExternalParameterEntity"></a><span class='definition'>isExternalParameterEntity</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-348"></a><span class='definition'>isExternalParameterEntity</span>	<span class='keyglyph'>=</span> <span class='varid'>isParameterEntity</span>
+<a name="line-349"></a>				  <span class='varop'>.&gt;</span>
+<a name="line-350"></a>				  <span class='varid'>isOf</span> <span class='layout'>(</span><span class='varid'>hasEntry</span> <span class='varid'>k_system</span> <span class='varop'>.</span> <span class='varid'>attrlOfDTD</span><span class='layout'>)</span>
+<a name="line-351"></a>
+<a name="line-352"></a><a name="isInternalParameterEntity"></a><span class='definition'>isInternalParameterEntity</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-353"></a><span class='definition'>isInternalParameterEntity</span>	<span class='keyglyph'>=</span> <span class='varid'>isParameterEntity</span>
+<a name="line-354"></a>				  <span class='varop'>.&gt;</span> <span class='varid'>isOf</span> <span class='layout'>(</span><span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>hasEntry</span> <span class='varid'>k_system</span> <span class='varop'>.</span> <span class='varid'>attrlOfDTD</span><span class='layout'>)</span>
+<a name="line-355"></a>
+<a name="line-356"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-357"></a>
+<a name="line-358"></a><span class='comment'>-- |</span>
+<a name="line-359"></a><span class='comment'>-- test whether the root of a tree contains an error node for a warning.</span>
+<a name="line-360"></a>
+<a name="line-361"></a><a name="isWarning"></a><span class='definition'>isWarning</span> 			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-362"></a><span class='definition'>isWarning</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varop'>$</span> <span class='varid'>isErrorNode</span> <span class='varid'>c_warn</span>
+<a name="line-363"></a>
+<a name="line-364"></a><span class='comment'>-- |</span>
+<a name="line-365"></a><span class='comment'>-- test whether the root of a tree contains an error node for an error.</span>
+<a name="line-366"></a>
+<a name="line-367"></a><a name="isError"></a><span class='definition'>isError</span> 			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-368"></a><span class='definition'>isError</span>				<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varop'>$</span> <span class='varid'>isErrorNode</span> <span class='varid'>c_err</span>
+<a name="line-369"></a>
+<a name="line-370"></a><span class='comment'>-- |</span>
+<a name="line-371"></a><span class='comment'>-- test whether the root of a tree contains an error node for a fatal error.</span>
+<a name="line-372"></a>
+<a name="line-373"></a><a name="isFatalError"></a><span class='definition'>isFatalError</span> 			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-374"></a><span class='definition'>isFatalError</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfNode</span> <span class='varop'>$</span> <span class='varid'>isErrorNode</span> <span class='varid'>c_fatal</span>
+<a name="line-375"></a>
+<a name="line-376"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-377"></a><span class='comment'>--</span>
+<a name="line-378"></a><span class='comment'>-- constructor filter</span>
+<a name="line-379"></a>
+<a name="line-380"></a><span class='comment'>-- |</span>
+<a name="line-381"></a><span class='comment'>-- constructor filter for a tag node.</span>
+<a name="line-382"></a><span class='comment'>-- a new tree is constructed.</span>
+<a name="line-383"></a><span class='comment'>-- the attributes and the children are computed by applying the aproprate filter to the input tree</span>
+<a name="line-384"></a><span class='comment'>--</span>
+<a name="line-385"></a><span class='comment'>--    * 1.parameter n :  the tag name</span>
+<a name="line-386"></a><span class='comment'>--</span>
+<a name="line-387"></a><span class='comment'>--    - 2.parameter af :  the filter for the attribute list</span>
+<a name="line-388"></a><span class='comment'>--</span>
+<a name="line-389"></a><span class='comment'>--    - 3.parameter cf :  the filter for the children</span>
+<a name="line-390"></a><span class='comment'>--</span>
+<a name="line-391"></a><span class='comment'>--    - returns : the constructor filter</span>
+<a name="line-392"></a>
+<a name="line-393"></a><a name="mkXTag"></a><span class='definition'>mkXTag</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-394"></a><span class='definition'>mkXTag</span> <span class='varid'>n</span> <span class='varid'>af</span> <span class='varid'>cf</span>
+<a name="line-395"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span> <span class='varid'>mkXTagTree</span> <span class='varid'>n</span> <span class='layout'>(</span><span class='varid'>af</span> <span class='varid'>t</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>cf</span> <span class='varid'>t</span><span class='layout'>)</span> <span class='keyglyph'>]</span>
+<a name="line-396"></a>
+<a name="line-397"></a><span class='comment'>-- | Version with qualified names of 'mkXTag'</span>
+<a name="line-398"></a>
+<a name="line-399"></a><a name="mkQTag"></a><span class='definition'>mkQTag</span>		<span class='keyglyph'>::</span> <span class='conid'>QName</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-400"></a><span class='definition'>mkQTag</span> <span class='varid'>q</span> <span class='varid'>af</span> <span class='varid'>cf</span>
+<a name="line-401"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span> <span class='varid'>mkQTagTree</span> <span class='varid'>q</span> <span class='layout'>(</span><span class='varid'>af</span> <span class='varid'>t</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>cf</span> <span class='varid'>t</span><span class='layout'>)</span> <span class='keyglyph'>]</span>
+<a name="line-402"></a>
+<a name="line-403"></a><span class='comment'>-- |</span>
+<a name="line-404"></a><span class='comment'>-- constructor filter for a tag node.</span>
+<a name="line-405"></a><span class='comment'>-- a new tree is constructed.</span>
+<a name="line-406"></a><span class='comment'>-- the attributes and the children are computed by applying the aproprate filter to the input tree</span>
+<a name="line-407"></a><span class='comment'>--</span>
+<a name="line-408"></a><span class='comment'>--    * 1.parameter n :  the tag name in form of prefix:localpart</span>
+<a name="line-409"></a><span class='comment'>--</span>
+<a name="line-410"></a><span class='comment'>--    - 2.parameter ns:   the namespace uri</span>
+<a name="line-411"></a><span class='comment'>--</span>
+<a name="line-412"></a><span class='comment'>--    - 3.parameter af :  the filter for the attribute list</span>
+<a name="line-413"></a><span class='comment'>--</span>
+<a name="line-414"></a><span class='comment'>--    - 4.parameter cf :  the filter for the children</span>
+<a name="line-415"></a><span class='comment'>--</span>
+<a name="line-416"></a><span class='comment'>--    - returns : the constructor filter</span>
+<a name="line-417"></a>
+<a name="line-418"></a><a name="mkXNsTag"></a><span class='definition'>mkXNsTag</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-419"></a><span class='definition'>mkXNsTag</span> <span class='varid'>n</span> <span class='varid'>ns</span> <span class='varid'>af</span> <span class='varid'>cf</span>
+<a name="line-420"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span> <span class='varid'>mkXNsTagTree</span> <span class='varid'>n</span> <span class='varid'>ns</span> <span class='layout'>(</span><span class='varid'>af</span> <span class='varid'>t</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>cf</span> <span class='varid'>t</span><span class='layout'>)</span> <span class='keyglyph'>]</span>
+<a name="line-421"></a>
+<a name="line-422"></a><span class='comment'>-- |</span>
+<a name="line-423"></a><span class='comment'>-- filter for attribute construction.</span>
+<a name="line-424"></a><span class='comment'>-- a new tree with attribute name and a value computed by a filter</span>
+<a name="line-425"></a><span class='comment'>-- is build.</span>
+<a name="line-426"></a>
+<a name="line-427"></a><a name="mkXAttr"></a><span class='definition'>mkXAttr</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-428"></a><span class='definition'>mkXAttr</span> <span class='varid'>n</span> <span class='varid'>af</span>
+<a name="line-429"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span> <span class='varid'>mkXAttrTree</span> <span class='varid'>n</span> <span class='layout'>(</span><span class='varid'>af</span> <span class='varid'>t</span><span class='layout'>)</span> <span class='keyglyph'>]</span>
+<a name="line-430"></a>
+<a name="line-431"></a><span class='comment'>-- | Qualified version 'mkXAttr'</span>
+<a name="line-432"></a>
+<a name="line-433"></a><a name="mkQAttr"></a><span class='definition'>mkQAttr</span>		<span class='keyglyph'>::</span> <span class='conid'>QName</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-434"></a><span class='definition'>mkQAttr</span> <span class='varid'>q</span> <span class='varid'>af</span>
+<a name="line-435"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span> <span class='varid'>mkQAttrTree</span> <span class='varid'>q</span> <span class='layout'>(</span><span class='varid'>af</span> <span class='varid'>t</span><span class='layout'>)</span> <span class='keyglyph'>]</span>
+<a name="line-436"></a>
+<a name="line-437"></a><span class='comment'>-- |</span>
+<a name="line-438"></a><span class='comment'>-- filter for attribute construction.</span>
+<a name="line-439"></a><span class='comment'>-- a new tree with attribute name and namespace and a value computed by a filter</span>
+<a name="line-440"></a><span class='comment'>-- is build.</span>
+<a name="line-441"></a>
+<a name="line-442"></a><a name="mkXNsAttr"></a><span class='definition'>mkXNsAttr</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-443"></a><span class='definition'>mkXNsAttr</span> <span class='varid'>n</span> <span class='varid'>ns</span> <span class='varid'>af</span>
+<a name="line-444"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span> <span class='varid'>mkXNsAttrTree</span> <span class='varid'>n</span> <span class='varid'>ns</span> <span class='layout'>(</span><span class='varid'>af</span> <span class='varid'>t</span><span class='layout'>)</span> <span class='keyglyph'>]</span>
+<a name="line-445"></a>
+<a name="line-446"></a><span class='comment'>-- |</span>
+<a name="line-447"></a><span class='comment'>-- constructor filter for a text node.</span>
+<a name="line-448"></a><span class='comment'>-- a new tree is constructed.</span>
+<a name="line-449"></a><span class='comment'>-- the input tree is ignored.</span>
+<a name="line-450"></a>
+<a name="line-451"></a><a name="mkXText"></a><span class='definition'>mkXText</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span>                          <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-452"></a><span class='definition'>mkXText</span>		<span class='keyglyph'>=</span> <span class='varid'>mkNTree</span> <span class='varop'>.</span> <span class='varid'>mkXTextTree</span>
+<a name="line-453"></a>
+<a name="line-454"></a><span class='comment'>-- |</span>
+<a name="line-455"></a><span class='comment'>-- constructor filter for a character reference node.</span>
+<a name="line-456"></a><span class='comment'>-- a new tree is constructed.</span>
+<a name="line-457"></a><span class='comment'>-- the input tree is ignored.</span>
+<a name="line-458"></a>
+<a name="line-459"></a><a name="mkXCharRef"></a><span class='definition'>mkXCharRef</span>	<span class='keyglyph'>::</span> <span class='conid'>Int</span>                             <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-460"></a><span class='definition'>mkXCharRef</span>	<span class='keyglyph'>=</span> <span class='varid'>mkNTree</span> <span class='varop'>.</span> <span class='varid'>mkXCharRefTree</span>
+<a name="line-461"></a>
+<a name="line-462"></a><span class='comment'>-- |</span>
+<a name="line-463"></a><span class='comment'>-- constructor filter for an entity reference node.</span>
+<a name="line-464"></a><span class='comment'>-- a new tree is constructed.</span>
+<a name="line-465"></a><span class='comment'>-- the input tree is ignored.</span>
+<a name="line-466"></a>
+<a name="line-467"></a><a name="mkXEntityRef"></a><span class='definition'>mkXEntityRef</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>                          <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-468"></a><span class='definition'>mkXEntityRef</span>	<span class='keyglyph'>=</span> <span class='varid'>mkNTree</span> <span class='varop'>.</span> <span class='varid'>mkXEntityRefTree</span>
+<a name="line-469"></a>
+<a name="line-470"></a><span class='comment'>-- |</span>
+<a name="line-471"></a><span class='comment'>-- constructor filter for a comment node.</span>
+<a name="line-472"></a><span class='comment'>-- a new tree is constructed.</span>
+<a name="line-473"></a><span class='comment'>-- the xml string representation of the filter result</span>
+<a name="line-474"></a><span class='comment'>-- forms the comment</span>
+<a name="line-475"></a>
+<a name="line-476"></a><a name="mkXCmt"></a><span class='definition'>mkXCmt</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-477"></a><span class='definition'>mkXCmt</span> <span class='varid'>cf</span>
+<a name="line-478"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span> <span class='varid'>mkXCmtTree</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>xshow</span> <span class='varop'>.</span> <span class='varid'>cf</span><span class='layout'>)</span> <span class='varid'>t</span><span class='layout'>)</span> <span class='keyglyph'>]</span>
+<a name="line-479"></a>
+<a name="line-480"></a><span class='comment'>-- |</span>
+<a name="line-481"></a><span class='comment'>-- constructor filter for a DTD part.</span>
+<a name="line-482"></a><span class='comment'>-- a new tree is constructed.</span>
+<a name="line-483"></a><span class='comment'>-- the input tree is ignored.</span>
+<a name="line-484"></a>
+<a name="line-485"></a><a name="mkXDTD"></a><span class='definition'>mkXDTD</span>		<span class='keyglyph'>::</span> <span class='conid'>DTDElem</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-486"></a><span class='definition'>mkXDTD</span> <span class='varid'>n</span> <span class='varid'>al</span>	<span class='keyglyph'>=</span> <span class='varid'>mkNTree</span> <span class='varop'>.</span> <span class='varid'>mkXDTDTree</span> <span class='varid'>n</span> <span class='varid'>al</span>
+<a name="line-487"></a>
+<a name="line-488"></a><span class='comment'>-- |</span>
+<a name="line-489"></a><span class='comment'>-- constructor filter for a CDATA section node.</span>
+<a name="line-490"></a><span class='comment'>-- a new tree is constructed.</span>
+<a name="line-491"></a><span class='comment'>-- the input tree is ignored.</span>
+<a name="line-492"></a>
+<a name="line-493"></a><a name="mkXCdata"></a><span class='definition'>mkXCdata</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-494"></a><span class='definition'>mkXCdata</span> <span class='varid'>cf</span>
+<a name="line-495"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span> <span class='varid'>mkXCdataTree</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>xshow</span> <span class='varop'>.</span> <span class='varid'>cf</span><span class='layout'>)</span> <span class='varid'>t</span><span class='layout'>)</span> <span class='keyglyph'>]</span>
+<a name="line-496"></a>
+<a name="line-497"></a><span class='comment'>-- |</span>
+<a name="line-498"></a><span class='comment'>-- constructor filter for a processing instruction</span>
+<a name="line-499"></a><span class='comment'>-- a new tree is constructed from the text representation</span>
+<a name="line-500"></a><span class='comment'>-- of the input tree</span>
+<a name="line-501"></a>
+<a name="line-502"></a><a name="mkXPi"></a><span class='definition'>mkXPi</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-503"></a><span class='definition'>mkXPi</span> <span class='varid'>piName</span> <span class='varid'>cf</span>
+<a name="line-504"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span> <span class='varid'>mkXPiTree</span> <span class='varid'>piName</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>xshow</span> <span class='varop'>.</span> <span class='varid'>cf</span><span class='layout'>)</span> <span class='varid'>t</span><span class='layout'>)</span> <span class='keyglyph'>]</span>
+<a name="line-505"></a>
+<a name="line-506"></a><span class='comment'>-- |</span>
+<a name="line-507"></a><span class='comment'>-- constructor filter for an error message node.</span>
+<a name="line-508"></a><span class='comment'>-- a new tree is constructed.</span>
+<a name="line-509"></a><span class='comment'>-- the input tree is ignored.</span>
+<a name="line-510"></a>
+<a name="line-511"></a><a name="mkXError"></a><span class='definition'>mkXError</span>	<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>                   <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-512"></a><span class='definition'>mkXError</span> <span class='varid'>l</span> <span class='varid'>s</span>	<span class='keyglyph'>=</span> <span class='varid'>this</span> <span class='varop'>.</span> <span class='varid'>mkXErrorTree</span> <span class='varid'>l</span> <span class='varid'>s</span> <span class='varop'>.</span> <span class='varid'>this</span>
+<a name="line-513"></a>
+<a name="line-514"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-515"></a><span class='comment'>--</span>
+<a name="line-516"></a><span class='comment'>-- selector filters</span>
+<a name="line-517"></a>
+<a name="line-518"></a><span class='comment'>-- |</span>
+<a name="line-519"></a><span class='comment'>-- filter for selecting the name of a tag node, an attribute node or a pi node.</span>
+<a name="line-520"></a><span class='comment'>-- Result of the filter is a single element list with a text node or the empty list</span>
+<a name="line-521"></a>
+<a name="line-522"></a><a name="getName"></a><span class='definition'>getName</span>	<span class='keyglyph'>::</span>             <span class='conid'>XmlFilter</span>
+<a name="line-523"></a><span class='definition'>getName</span> <span class='varid'>t</span>
+<a name="line-524"></a>    <span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='varid'>s</span>    <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-525"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span> <span class='keyglyph'>=</span> <span class='varid'>xtext</span> <span class='varid'>s</span>
+<a name="line-526"></a>    <span class='keyword'>where</span>
+<a name="line-527"></a>    <span class='varid'>s</span> <span class='keyglyph'>=</span> <span class='varid'>nameOf</span> <span class='varid'>t</span>
+<a name="line-528"></a>
+<a name="line-529"></a><span class='comment'>-- |</span>
+<a name="line-530"></a><span class='comment'>-- filter for selecting the attibute list</span>
+<a name="line-531"></a>
+<a name="line-532"></a><a name="getAttrl"></a><span class='definition'>getAttrl</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-533"></a><span class='definition'>getAttrl</span>
+<a name="line-534"></a>    <span class='keyglyph'>=</span> <span class='varid'>selAttrl</span> <span class='varop'>.</span> <span class='varid'>getNode</span>
+<a name="line-535"></a>    <span class='keyword'>where</span>
+<a name="line-536"></a>    <span class='varid'>selAttrl</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='keyword'>_</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>al</span>
+<a name="line-537"></a>    <span class='varid'>selAttrl</span> <span class='layout'>(</span><span class='conid'>XPi</span>  <span class='keyword'>_</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>al</span>
+<a name="line-538"></a>    <span class='varid'>selAttrl</span> <span class='keyword'>_</span>           <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-539"></a>
+<a name="line-540"></a><span class='comment'>-- |</span>
+<a name="line-541"></a><span class='comment'>-- filter for selecting the value of an attribute in a tag node.</span>
+<a name="line-542"></a><span class='comment'>-- Result of the filter is a single element list with a text node or the empty list</span>
+<a name="line-543"></a><span class='comment'>--</span>
+<a name="line-544"></a><span class='comment'>-- see also : 'hasValue', 'getNsValue'</span>
+<a name="line-545"></a>
+<a name="line-546"></a><a name="getValue"></a><span class='definition'>getValue</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-547"></a><span class='definition'>getValue</span> <span class='varid'>a</span>		<span class='keyglyph'>=</span> <span class='varid'>xmlTreesToText</span> <span class='varop'>.</span> <span class='layout'>(</span><span class='varid'>getAttrl</span> <span class='varop'>.&gt;</span> <span class='varid'>isAttr</span> <span class='varid'>a</span> <span class='varop'>.&gt;</span> <span class='varid'>getChildren</span><span class='layout'>)</span>
+<a name="line-548"></a>
+<a name="line-549"></a><span class='comment'>-- |</span>
+<a name="line-550"></a><span class='comment'>-- filter for selecting the value of an attribute with namespace in a tag node.</span>
+<a name="line-551"></a><span class='comment'>-- Result of the filter is a single element list with a text node or the empty list</span>
+<a name="line-552"></a><span class='comment'>--</span>
+<a name="line-553"></a><span class='comment'>-- see also : 'getValue', 'isNsAttr'</span>
+<a name="line-554"></a>
+<a name="line-555"></a><a name="getNsValue"></a><span class='definition'>getNsValue</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-556"></a><span class='definition'>getNsValue</span> <span class='varid'>lp</span> <span class='varid'>ns</span>	<span class='keyglyph'>=</span> <span class='varid'>xmlTreesToText</span> <span class='varop'>.</span> <span class='layout'>(</span><span class='varid'>getAttrl</span> <span class='varop'>.&gt;</span> <span class='varid'>isNsAttr</span> <span class='varid'>lp</span> <span class='varid'>ns</span> <span class='varop'>.&gt;</span> <span class='varid'>getChildren</span><span class='layout'>)</span>
+<a name="line-557"></a>
+<a name="line-558"></a><span class='comment'>-- |</span>
+<a name="line-559"></a><span class='comment'>-- filter for selecting an attribute of a DTD node.</span>
+<a name="line-560"></a><span class='comment'>-- Result of the filter is a single element list with a text node or the empty list</span>
+<a name="line-561"></a>
+<a name="line-562"></a><a name="getDTDValue"></a><span class='definition'>getDTDValue</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-563"></a><span class='definition'>getDTDValue</span> <span class='varid'>a</span>		<span class='keyglyph'>=</span> <span class='varid'>xtext</span> <span class='varop'>.</span> <span class='varid'>valueOfDTD</span> <span class='varid'>a</span>
+<a name="line-564"></a>
+<a name="line-565"></a><span class='comment'>-- |</span>
+<a name="line-566"></a><span class='comment'>-- filter for selecting content of a comment.</span>
+<a name="line-567"></a><span class='comment'>-- Result of the filter is a single element list with a text node or the empty list</span>
+<a name="line-568"></a>
+<a name="line-569"></a><a name="getXCmt"></a><span class='definition'>getXCmt</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-570"></a><span class='definition'>getXCmt</span>
+<a name="line-571"></a>    <span class='keyglyph'>=</span> <span class='varid'>selCmt</span> <span class='varop'>.</span> <span class='varid'>getNode</span>
+<a name="line-572"></a>      <span class='keyword'>where</span>
+<a name="line-573"></a>      <span class='varid'>selCmt</span> <span class='layout'>(</span><span class='conid'>XCmt</span> <span class='varid'>c</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>xtext</span> <span class='varid'>c</span>
+<a name="line-574"></a>      <span class='varid'>selCmt</span> <span class='keyword'>_</span>          <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-575"></a>
+<a name="line-576"></a><span class='comment'>-- |</span>
+<a name="line-577"></a><span class='comment'>-- filter for selecting the CDATA content.</span>
+<a name="line-578"></a><span class='comment'>-- Result of the filter is a single element list with a text node or the empty list</span>
+<a name="line-579"></a>
+<a name="line-580"></a><a name="getXCdata"></a><span class='definition'>getXCdata</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-581"></a><span class='definition'>getXCdata</span>
+<a name="line-582"></a>    <span class='keyglyph'>=</span> <span class='varid'>selData</span> <span class='varop'>.</span> <span class='varid'>getNode</span>
+<a name="line-583"></a>      <span class='keyword'>where</span>
+<a name="line-584"></a>      <span class='varid'>selData</span> <span class='layout'>(</span><span class='conid'>XCdata</span> <span class='varid'>d</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>xtext</span> <span class='varid'>d</span>
+<a name="line-585"></a>      <span class='varid'>selData</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-586"></a>
+<a name="line-587"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-588"></a><span class='comment'>--</span>
+<a name="line-589"></a><span class='comment'>-- edit filter</span>
+<a name="line-590"></a>
+<a name="line-591"></a><span class='comment'>-- |</span>
+<a name="line-592"></a><span class='comment'>-- edit filter for changing the name of a tag node, an attribute or a pi.</span>
+<a name="line-593"></a><span class='comment'>-- result of the filter is a single element list with a tag node or the empty list</span>
+<a name="line-594"></a>
+<a name="line-595"></a><a name="replaceQName"></a><span class='definition'>replaceQName</span>				<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-596"></a><span class='definition'>replaceQName</span> <span class='varid'>n</span>				<span class='keyglyph'>=</span> <span class='varid'>modifyQName</span> <span class='layout'>(</span><span class='varid'>const</span> <span class='layout'>(</span><span class='varid'>mkName</span> <span class='varid'>n</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-597"></a>
+<a name="line-598"></a><span class='comment'>-- |</span>
+<a name="line-599"></a><span class='comment'>-- edit filter for changing the text of a text node.</span>
+<a name="line-600"></a><span class='comment'>-- result of the filter is a single element list with a text node or the empty list</span>
+<a name="line-601"></a><span class='comment'>--</span>
+<a name="line-602"></a><span class='comment'>-- example for editing all text nodes of a tree with an edit function @f@:</span>
+<a name="line-603"></a><span class='comment'>--</span>
+<a name="line-604"></a><span class='comment'>-- @processBottomUp (modifyText f \`when\` isXText)@</span>
+<a name="line-605"></a>
+<a name="line-606"></a><a name="modifyText"></a><span class='definition'>modifyText</span>				<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-607"></a><span class='definition'>modifyText</span> <span class='varid'>f</span> <span class='varid'>t</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='varid'>n</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-608"></a>    <span class='keyglyph'>|</span> <span class='varid'>isXTextNode</span> <span class='varid'>n</span>			<span class='keyglyph'>=</span> <span class='varid'>replaceNode</span> <span class='layout'>(</span><span class='conid'>XText</span> <span class='layout'>(</span><span class='varid'>f</span> <span class='layout'>(</span><span class='varid'>textOfXNode</span> <span class='varid'>n</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>t</span>
+<a name="line-609"></a><span class='definition'>modifyText</span> <span class='keyword'>_</span> <span class='keyword'>_</span>				<span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-610"></a>
+<a name="line-611"></a><span class='comment'>-- |</span>
+<a name="line-612"></a><span class='comment'>-- edit filter for changing the name of a tag node.</span>
+<a name="line-613"></a><span class='comment'>-- result of the filter is a single element list with a text node or the empty list</span>
+<a name="line-614"></a>
+<a name="line-615"></a><a name="modifyQName"></a><span class='definition'>modifyQName</span>				<span class='keyglyph'>::</span>  <span class='layout'>(</span><span class='conid'>TagName</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>TagName</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-616"></a><span class='definition'>modifyQName</span> <span class='varid'>f</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>n</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='layout'>(</span><span class='varid'>f</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='keyglyph'>]</span>
+<a name="line-617"></a><span class='definition'>modifyQName</span> <span class='varid'>f</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XPi</span>  <span class='varid'>n</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XPi</span>  <span class='layout'>(</span><span class='varid'>f</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='keyglyph'>]</span>
+<a name="line-618"></a><span class='definition'>modifyQName</span> <span class='varid'>f</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XAttr</span> <span class='varid'>n</span><span class='layout'>)</span>   <span class='varid'>cs</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XAttr</span> <span class='layout'>(</span><span class='varid'>f</span> <span class='varid'>n</span><span class='layout'>)</span>  <span class='layout'>)</span> <span class='varid'>cs</span><span class='keyglyph'>]</span>
+<a name="line-619"></a><span class='definition'>modifyQName</span> <span class='keyword'>_</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-620"></a>
+<a name="line-621"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-622"></a>
+<a name="line-623"></a><span class='comment'>-- |</span>
+<a name="line-624"></a><span class='comment'>-- process the attribute list of a tag node with a tree list filter.</span>
+<a name="line-625"></a><span class='comment'>-- for other trees this filter acts like 'none'</span>
+<a name="line-626"></a>
+<a name="line-627"></a><a name="processAttrl"></a><span class='definition'>processAttrl</span>				<span class='keyglyph'>::</span> <span class='conid'>XmlSFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-628"></a><span class='definition'>processAttrl</span> <span class='varid'>f</span> <span class='varid'>t</span>
+<a name="line-629"></a>    <span class='keyglyph'>=</span> <span class='varid'>replaceAttrl</span> <span class='layout'>(</span><span class='varid'>f</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>t</span>
+<a name="line-630"></a>      <span class='keyword'>where</span>
+<a name="line-631"></a>      <span class='varid'>al</span> <span class='keyglyph'>=</span> <span class='varid'>getAttrl</span> <span class='varid'>t</span>
+<a name="line-632"></a>
+<a name="line-633"></a><a name="processAttr"></a><span class='comment'>-- |</span>
+<a name="line-634"></a><span class='comment'>-- elementwise processing of the attributes of a tag.</span>
+<a name="line-635"></a><span class='comment'>-- for other trees this filter acts like 'none'</span>
+<a name="line-636"></a><span class='comment'>--</span>
+<a name="line-637"></a><span class='comment'>-- see also : 'processAttrl'</span>
+<a name="line-638"></a><span class='definition'>processAttr</span>				<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-639"></a><span class='definition'>processAttr</span> <span class='varid'>f</span>
+<a name="line-640"></a>    <span class='keyglyph'>=</span> <span class='varid'>processAttrl</span> <span class='layout'>(</span><span class='varid'>f</span> <span class='varop'>$$</span><span class='layout'>)</span>
+<a name="line-641"></a>
+<a name="line-642"></a><span class='comment'>-- |</span>
+<a name="line-643"></a><span class='comment'>-- replace an attribute list</span>
+<a name="line-644"></a><span class='comment'>-- to be renamed when replaceAttrl is eliminated</span>
+<a name="line-645"></a>
+<a name="line-646"></a><a name="replaceAttrl"></a><span class='definition'>replaceAttrl</span>				<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-647"></a><span class='definition'>replaceAttrl</span> <span class='varid'>al</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>n</span> <span class='sel'>_al</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>n</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span> <span class='keyglyph'>]</span>
+<a name="line-648"></a><span class='definition'>replaceAttrl</span> <span class='varid'>al</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XPi</span>  <span class='varid'>n</span> <span class='sel'>_al</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XPi</span>  <span class='varid'>n</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span> <span class='keyglyph'>]</span>
+<a name="line-649"></a><span class='definition'>replaceAttrl</span> <span class='keyword'>_</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-650"></a>
+<a name="line-651"></a><span class='comment'>-- |</span>
+<a name="line-652"></a><span class='comment'>-- delete an attribute from the attribute list of a tag tree</span>
+<a name="line-653"></a>
+<a name="line-654"></a><a name="del1Attr"></a><span class='definition'>del1Attr</span>				<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-655"></a><span class='definition'>del1Attr</span> <span class='varid'>an</span>				<span class='keyglyph'>=</span> <span class='varid'>processAttr</span> <span class='layout'>(</span><span class='varid'>none</span> <span class='varop'>`when`</span> <span class='varid'>isAttr</span> <span class='varid'>an</span><span class='layout'>)</span>
+<a name="line-656"></a>
+<a name="line-657"></a><span class='comment'>-- |</span>
+<a name="line-658"></a><span class='comment'>-- add an attribute to the attribute list of a tag.</span>
+<a name="line-659"></a><span class='comment'>-- If the attribute already exists, it\'s substituted,</span>
+<a name="line-660"></a><span class='comment'>--</span>
+<a name="line-661"></a><span class='comment'>-- see also: 'sattr', '+='</span>
+<a name="line-662"></a>
+<a name="line-663"></a><a name="add1Attr"></a><span class='definition'>add1Attr</span>				<span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-664"></a><span class='definition'>add1Attr</span> <span class='varid'>a</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XAttr</span> <span class='varid'>an</span><span class='layout'>)</span> <span class='sel'>_av</span><span class='layout'>)</span> <span class='varid'>t</span>
+<a name="line-665"></a>    <span class='keyglyph'>=</span> <span class='varid'>replaceAttrl</span> <span class='layout'>(</span><span class='varid'>replace</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>t</span>
+<a name="line-666"></a>      <span class='keyword'>where</span>
+<a name="line-667"></a>      <span class='varid'>al</span> <span class='keyglyph'>=</span> <span class='varid'>getAttrl</span> <span class='varid'>t</span>
+<a name="line-668"></a>      <span class='varid'>replace</span> <span class='conid'>[]</span> <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>a</span><span class='keyglyph'>]</span>
+<a name="line-669"></a>      <span class='varid'>replace</span> <span class='layout'>(</span><span class='varid'>a1</span> <span class='conop'>:</span> <span class='keyword'>as</span><span class='layout'>)</span>
+<a name="line-670"></a>	  <span class='keyglyph'>|</span> <span class='varid'>satisfies</span> <span class='layout'>(</span><span class='varid'>isAttr</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>an</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>a1</span>
+<a name="line-671"></a>	      <span class='keyglyph'>=</span> <span class='varid'>a</span> <span class='conop'>:</span> <span class='keyword'>as</span>
+<a name="line-672"></a>	  <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>
+<a name="line-673"></a>	      <span class='keyglyph'>=</span> <span class='varid'>a1</span> <span class='conop'>:</span> <span class='varid'>replace</span> <span class='keyword'>as</span>
+<a name="line-674"></a>
+<a name="line-675"></a><span class='definition'>add1Attr</span> <span class='keyword'>_</span> <span class='varid'>t</span>
+<a name="line-676"></a>    <span class='keyglyph'>=</span> <span class='varid'>this</span> <span class='varid'>t</span>
+<a name="line-677"></a>
+<a name="line-678"></a><span class='comment'>-- |</span>
+<a name="line-679"></a><span class='comment'>-- adds an attribute list computed by a filter, uses 'add1Attr'.</span>
+<a name="line-680"></a><span class='comment'>--</span>
+<a name="line-681"></a><span class='comment'>-- see also: '+='</span>
+<a name="line-682"></a>
+<a name="line-683"></a><a name="addAttrl"></a><span class='definition'>addAttrl</span>				<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-684"></a><span class='definition'>addAttrl</span> <span class='varid'>attrFilter</span> <span class='varid'>t</span>
+<a name="line-685"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>foldl</span> <span class='layout'>(</span><span class='varop'>.&gt;</span><span class='layout'>)</span> <span class='varid'>this</span> <span class='varop'>.</span> <span class='varid'>map</span> <span class='varid'>add1Attr</span><span class='layout'>)</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>t</span>
+<a name="line-686"></a>      <span class='keyword'>where</span>
+<a name="line-687"></a>      <span class='varid'>al</span> <span class='keyglyph'>=</span> <span class='varid'>attrFilter</span> <span class='varid'>t</span>
+<a name="line-688"></a>
+<a name="line-689"></a><span class='comment'>-- |</span>
+<a name="line-690"></a><span class='comment'>-- add or change an attribute with a given string as value for a XTag or XPi tree,</span>
+<a name="line-691"></a><span class='comment'>-- uses 'add1Attr'.</span>
+<a name="line-692"></a>
+<a name="line-693"></a><a name="addAttr"></a><span class='definition'>addAttr</span>					<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-694"></a><span class='definition'>addAttr</span> <span class='varid'>an</span> <span class='varid'>av</span>
+<a name="line-695"></a>    <span class='keyglyph'>=</span> <span class='varid'>add1Attr</span> <span class='layout'>(</span><span class='varid'>mkXAttrTree</span> <span class='varid'>an</span> <span class='layout'>(</span><span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>av</span> <span class='keyword'>then</span> <span class='conid'>[]</span> <span class='keyword'>else</span> <span class='varid'>xtext</span> <span class='varid'>av</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-696"></a>
+<a name="line-697"></a><span class='comment'>-- |</span>
+<a name="line-698"></a><span class='comment'>-- add or change an attribute with an Int value.</span>
+<a name="line-699"></a><span class='comment'>-- uses 'addAttr'.</span>
+<a name="line-700"></a>
+<a name="line-701"></a><a name="addAttrInt"></a><span class='definition'>addAttrInt</span>				<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-702"></a><span class='definition'>addAttrInt</span> <span class='varid'>an</span> <span class='varid'>av</span>
+<a name="line-703"></a>    <span class='keyglyph'>=</span> <span class='varid'>addAttr</span> <span class='varid'>an</span> <span class='layout'>(</span><span class='varid'>show</span> <span class='varid'>av</span><span class='layout'>)</span>
+<a name="line-704"></a>
+<a name="line-705"></a><span class='comment'>-- |</span>
+<a name="line-706"></a><span class='comment'>-- edit filter for changing the value of an attribute in a tag node.</span>
+<a name="line-707"></a><span class='comment'>-- result of the filter is a single element list with the tag node or the empty list.</span>
+<a name="line-708"></a><span class='comment'>--</span>
+<a name="line-709"></a><span class='comment'>--    * 1.parameter n :  the name of the attribute</span>
+<a name="line-710"></a><span class='comment'>--</span>
+<a name="line-711"></a><span class='comment'>--    - 2.parameter f :  the edit function for the attribute value</span>
+<a name="line-712"></a><span class='comment'>--</span>
+<a name="line-713"></a><span class='comment'>--    - returns : the edit filter</span>
+<a name="line-714"></a>
+<a name="line-715"></a><a name="modifyAttr"></a><span class='definition'>modifyAttr</span>				<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-716"></a><span class='definition'>modifyAttr</span> <span class='varid'>an</span> <span class='varid'>f</span>
+<a name="line-717"></a>    <span class='keyglyph'>=</span> <span class='varid'>processAttr</span> <span class='layout'>(</span><span class='varid'>modifyValue</span> <span class='varop'>`when`</span> <span class='varid'>isAttr</span> <span class='varid'>an</span><span class='layout'>)</span>
+<a name="line-718"></a>      <span class='keyword'>where</span>
+<a name="line-719"></a>      <span class='varid'>modifyValue</span> <span class='keyglyph'>=</span> <span class='varid'>modifyChildren</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>modifyText</span> <span class='varid'>f</span> <span class='varop'>$$</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>xmlTreesToText</span><span class='layout'>)</span>
+<a name="line-720"></a>
+<a name="line-721"></a><span class='comment'>-- |</span>
+<a name="line-722"></a><span class='comment'>-- add or change an attribute of a DTD tree</span>
+<a name="line-723"></a>
+<a name="line-724"></a><a name="addDTDAttr"></a><span class='definition'>addDTDAttr</span>				<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-725"></a><span class='definition'>addDTDAttr</span> <span class='varid'>an</span> <span class='varid'>av</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='varid'>e</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-726"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='varid'>e</span> <span class='layout'>(</span><span class='varid'>addEntry</span> <span class='varid'>an</span> <span class='varid'>av</span> <span class='varid'>al</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='keyglyph'>]</span>
+<a name="line-727"></a>
+<a name="line-728"></a><span class='definition'>addDTDAttr</span> <span class='keyword'>_</span> <span class='keyword'>_</span> <span class='keyword'>_</span>
+<a name="line-729"></a>    <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-730"></a>
+<a name="line-731"></a>
+<a name="line-732"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-733"></a><span class='comment'>--</span>
+<a name="line-734"></a>
+<a name="line-735"></a><span class='comment'>-- |</span>
+<a name="line-736"></a><span class='comment'>-- convenient function for tag node tree construction</span>
+<a name="line-737"></a><span class='comment'>--</span>
+<a name="line-738"></a><span class='comment'>-- infixl 7</span>
+<a name="line-739"></a><span class='comment'>--</span>
+<a name="line-740"></a><span class='comment'>-- filter combinator for tag tree constrcution</span>
+<a name="line-741"></a><span class='comment'>-- take a 1. filter for computing a tag node tree (or a whole list of tag node trees)</span>
+<a name="line-742"></a><span class='comment'>-- then add all trees computed by the 2. filter to the attribute list when they represent attributes</span>
+<a name="line-743"></a><span class='comment'>-- else append them to the list of children.</span>
+<a name="line-744"></a><span class='comment'>--</span>
+<a name="line-745"></a><span class='comment'>-- if the 1. filter computes a list of tag nodes, the results of the 2. filter are added to all trees</span>
+<a name="line-746"></a><span class='comment'>--</span>
+<a name="line-747"></a><span class='comment'>-- example: @ etag \"a\" += sattr \"href\" \"\#42\" += txt \"the answer\" @</span>
+<a name="line-748"></a><span class='comment'>-- gives the tree @ \&lt;a href=\"\#42\"\&gt;the answer\&lt;\/a\&gt; @</span>
+<a name="line-749"></a><span class='comment'>--</span>
+<a name="line-750"></a><span class='comment'>-- example: @ ( etag \"a\" +++ etag \"b\" ) += sattr \"x\" \"42\" @</span>
+<a name="line-751"></a><span class='comment'>-- gives the tree @ \&lt;a x=\"42\"\/\&gt;\&lt;b x=\"42\"\/\&gt; @</span>
+<a name="line-752"></a><span class='comment'>--</span>
+<a name="line-753"></a><span class='comment'>-- see also : 'etag', 'tag', 'add1Attr', 'modifyChildren', '++='</span>
+<a name="line-754"></a>
+<a name="line-755"></a><a name="+="></a><span class='layout'>(</span><span class='varop'>+=</span><span class='layout'>)</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-756"></a><span class='layout'>(</span><span class='varop'>+=</span><span class='layout'>)</span> <span class='varid'>tf</span> <span class='varid'>cf</span> <span class='varid'>t</span>
+<a name="line-757"></a>    <span class='keyglyph'>=</span> <span class='varid'>concat</span>
+<a name="line-758"></a>      <span class='keyglyph'>[</span> <span class='layout'>(</span> <span class='varid'>isXTag</span> <span class='varop'>`guards`</span> <span class='layout'>(</span> <span class='varid'>addaf</span> <span class='varop'>.&gt;</span> <span class='varid'>addcf</span> <span class='layout'>)</span><span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>t'</span>
+<a name="line-759"></a>	<span class='keyglyph'>|</span> <span class='varid'>t'</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>tf</span> <span class='varid'>t</span>
+<a name="line-760"></a>      <span class='keyglyph'>]</span>
+<a name="line-761"></a>    <span class='keyword'>where</span>
+<a name="line-762"></a>    <span class='layout'>(</span><span class='keyword'>as</span><span class='layout'>,</span> <span class='varid'>cs</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>partition</span> <span class='layout'>(</span><span class='varid'>satisfies</span> <span class='varid'>isXAttr</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>cf</span> <span class='varop'>$</span> <span class='varid'>t</span>
+<a name="line-763"></a>
+<a name="line-764"></a>    <span class='varid'>addaf</span> <span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='keyword'>as</span>   <span class='keyglyph'>=</span> <span class='varid'>this</span>
+<a name="line-765"></a>          <span class='keyglyph'>|</span> <span class='varid'>otherwise</span> <span class='keyglyph'>=</span> <span class='varid'>addAttrl</span> <span class='layout'>(</span><span class='varid'>const</span> <span class='keyword'>as</span><span class='layout'>)</span>
+<a name="line-766"></a>
+<a name="line-767"></a>    <span class='varid'>addcf</span> <span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='varid'>cs</span>   <span class='keyglyph'>=</span> <span class='varid'>this</span>
+<a name="line-768"></a>          <span class='keyglyph'>|</span> <span class='varid'>otherwise</span> <span class='keyglyph'>=</span> <span class='varid'>modifyChildren</span> <span class='layout'>(</span><span class='varop'>++</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-769"></a>
+<a name="line-770"></a><span class='comment'>-- |</span>
+<a name="line-771"></a><span class='comment'>-- convenient filter function adding a whole list of trees, just for not writing to many ( ... ).</span>
+<a name="line-772"></a><span class='comment'>--</span>
+<a name="line-773"></a><span class='comment'>-- infixl 7</span>
+<a name="line-774"></a><span class='comment'>--</span>
+<a name="line-775"></a><span class='comment'>-- @ f ++= gl  == f += cat gl @</span>
+<a name="line-776"></a><span class='comment'>--</span>
+<a name="line-777"></a><span class='comment'>-- see also : '+='</span>
+<a name="line-778"></a>
+<a name="line-779"></a><a name="++="></a><span class='layout'>(</span><span class='varop'>++=</span><span class='layout'>)</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>XmlFilter</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-780"></a><a name="tf"></a><span class='definition'>tf</span> <span class='varop'>++=</span> <span class='varid'>cfs</span>
+<a name="line-781"></a>    <span class='keyglyph'>=</span> <span class='varid'>tf</span> <span class='varop'>+=</span> <span class='varid'>cat</span> <span class='varid'>cfs</span>
+<a name="line-782"></a>
+<a name="line-783"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-784"></a><span class='comment'>--</span>
+<a name="line-785"></a><span class='comment'>-- string access functions</span>
+<a name="line-786"></a>
+<a name="line-787"></a><span class='comment'>-- |</span>
+<a name="line-788"></a><span class='comment'>-- combination of 'getValue' and conversion into a String</span>
+<a name="line-789"></a>
+<a name="line-790"></a><a name="valueOf"></a><span class='definition'>valueOf</span>			<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-791"></a><span class='definition'>valueOf</span> <span class='varid'>a</span>		<span class='keyglyph'>=</span> <span class='varid'>xshow</span> <span class='varop'>.</span> <span class='varid'>getValue</span> <span class='varid'>a</span>
+<a name="line-792"></a>
+<a name="line-793"></a><span class='comment'>-- |</span>
+<a name="line-794"></a><span class='comment'>-- combination of 'getValue' and conversion to a Int</span>
+<a name="line-795"></a>
+<a name="line-796"></a><a name="intValueOf"></a><span class='definition'>intValueOf</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Int</span>
+<a name="line-797"></a><span class='definition'>intValueOf</span> <span class='varid'>a</span>		<span class='keyglyph'>=</span> <span class='varid'>decimalStringToInt</span> <span class='varop'>.</span> <span class='varid'>valueOf</span> <span class='varid'>a</span>
+<a name="line-798"></a>
+<a name="line-799"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-800"></a><span class='comment'>--</span>
+<a name="line-801"></a><span class='comment'>-- convenient filter (short cuts)</span>
+<a name="line-802"></a>
+<a name="line-803"></a><span class='comment'>-- |</span>
+<a name="line-804"></a><span class='comment'>-- variant of mkXTag with a list of filters for the attributes and a list of filters for the children.</span>
+<a name="line-805"></a><span class='comment'>-- this variant leads to a more readable source for a complicated construction filter</span>
+<a name="line-806"></a><span class='comment'>-- than the simple solution with a combination of 'mkXTag' and 'cat'.</span>
+<a name="line-807"></a><span class='comment'>--</span>
+<a name="line-808"></a><span class='comment'>-- see also : 'mkXTag', 'stag', 'etag', 'cat', '+='</span>
+<a name="line-809"></a>
+<a name="line-810"></a><a name="tag"></a><span class='definition'>tag</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>XmlFilter</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>XmlFilter</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-811"></a><span class='definition'>tag</span> <span class='varid'>n</span> <span class='varid'>afs</span> <span class='varid'>cfs</span>	<span class='keyglyph'>=</span> <span class='varid'>mkXTag</span> <span class='varid'>n</span> <span class='layout'>(</span><span class='varid'>cat</span> <span class='varid'>afs</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>cat</span> <span class='varid'>cfs</span><span class='layout'>)</span>
+<a name="line-812"></a>
+<a name="line-813"></a><span class='comment'>-- |</span>
+<a name="line-814"></a><span class='comment'>-- variant of tag, useful for tags without attributes and with a list of filters for</span>
+<a name="line-815"></a><span class='comment'>-- constructing the children</span>
+<a name="line-816"></a><span class='comment'>--</span>
+<a name="line-817"></a><span class='comment'>-- see also : 'mkXTag', 'tag', 'etag', 'cat', '+='</span>
+<a name="line-818"></a>
+<a name="line-819"></a><a name="stag"></a><span class='definition'>stag</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>XmlFilter</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-820"></a><span class='definition'>stag</span> <span class='varid'>n</span> <span class='varid'>cfs</span>	<span class='keyglyph'>=</span> <span class='varid'>mkXTag</span> <span class='varid'>n</span> <span class='varid'>none</span> <span class='layout'>(</span><span class='varid'>cat</span> <span class='varid'>cfs</span><span class='layout'>)</span>
+<a name="line-821"></a>
+<a name="line-822"></a><span class='comment'>-- |</span>
+<a name="line-823"></a><span class='comment'>-- variant of tag, useful for tags with attributes but without children</span>
+<a name="line-824"></a><span class='comment'>--</span>
+<a name="line-825"></a><span class='comment'>-- see also : 'mkXTag', 'tag', 'stag', 'etag', 'cat'</span>
+<a name="line-826"></a>
+<a name="line-827"></a><a name="atag"></a><span class='definition'>atag</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>XmlFilter</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-828"></a><span class='definition'>atag</span> <span class='varid'>n</span> <span class='varid'>cfs</span>	<span class='keyglyph'>=</span> <span class='varid'>mkXTag</span> <span class='varid'>n</span> <span class='layout'>(</span><span class='varid'>cat</span> <span class='varid'>cfs</span><span class='layout'>)</span> <span class='varid'>none</span>
+<a name="line-829"></a>
+<a name="line-830"></a><span class='comment'>-- |</span>
+<a name="line-831"></a><span class='comment'>-- Short cut for empty tags without attributes</span>
+<a name="line-832"></a><span class='comment'>--</span>
+<a name="line-833"></a><span class='comment'>-- see also : 'tag', 'atag', 'stag', 'mkXTag' and '+='</span>
+<a name="line-834"></a>
+<a name="line-835"></a><a name="etag"></a><span class='definition'>etag</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-836"></a><span class='definition'>etag</span> <span class='varid'>n</span>		<span class='keyglyph'>=</span> <span class='varid'>mkXTag</span> <span class='varid'>n</span> <span class='varid'>none</span> <span class='varid'>none</span>
+<a name="line-837"></a>
+<a name="line-838"></a><span class='comment'>-- | Qualified version of etag</span>
+<a name="line-839"></a>
+<a name="line-840"></a><a name="qetag"></a><span class='definition'>qetag</span>		<span class='keyglyph'>::</span> <span class='conid'>QName</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-841"></a><span class='definition'>qetag</span> <span class='varid'>q</span>		<span class='keyglyph'>=</span> <span class='varid'>mkQTag</span> <span class='varid'>q</span> <span class='varid'>none</span> <span class='varid'>none</span>
+<a name="line-842"></a>
+<a name="line-843"></a><span class='comment'>-- | Alias for mkQTag</span>
+<a name="line-844"></a>
+<a name="line-845"></a><a name="qtag"></a><span class='definition'>qtag</span>		<span class='keyglyph'>::</span> <span class='conid'>QName</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-846"></a><span class='definition'>qtag</span> <span class='keyglyph'>=</span> <span class='varid'>mkQTag</span>
+<a name="line-847"></a>
+<a name="line-848"></a>
+<a name="line-849"></a><span class='comment'>-- |</span>
+<a name="line-850"></a><span class='comment'>-- filter for creating a document root node with a list of filters for the attributes and a list of filters for the document.</span>
+<a name="line-851"></a><span class='comment'>--</span>
+<a name="line-852"></a><span class='comment'>-- see also : 'tag'</span>
+<a name="line-853"></a>
+<a name="line-854"></a><a name="rootTag"></a><span class='definition'>rootTag</span>		<span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>XmlFilter</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>XmlFilter</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-855"></a><span class='definition'>rootTag</span> <span class='varid'>afs</span> <span class='varid'>cfs</span>	<span class='keyglyph'>=</span> <span class='varid'>mkXTag</span> <span class='varid'>t_root</span> <span class='layout'>(</span><span class='varid'>cat</span> <span class='varid'>afs</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>cat</span> <span class='varid'>cfs</span><span class='layout'>)</span>
+<a name="line-856"></a>
+<a name="line-857"></a><span class='comment'>-- |</span>
+<a name="line-858"></a><span class='comment'>-- Alias for 'mkXAttr'</span>
+<a name="line-859"></a>
+<a name="line-860"></a><a name="attr"></a><span class='definition'>attr</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-861"></a><span class='definition'>attr</span>		<span class='keyglyph'>=</span> <span class='varid'>mkXAttr</span>
+<a name="line-862"></a>
+<a name="line-863"></a><a name="qattr"></a><span class='comment'>-- | Alias for mkQAttr</span>
+<a name="line-864"></a><span class='definition'>qattr</span>		<span class='keyglyph'>::</span> <span class='conid'>QName</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-865"></a><span class='definition'>qattr</span> <span class='keyglyph'>=</span> <span class='varid'>mkQAttr</span>
+<a name="line-866"></a>
+<a name="line-867"></a><span class='comment'>-- |</span>
+<a name="line-868"></a><span class='comment'>-- short cut for attribute construction with string constants</span>
+<a name="line-869"></a><span class='comment'>--</span>
+<a name="line-870"></a><span class='comment'>-- set also : 'attr', 'mkXAttr' and 'mkXText'</span>
+<a name="line-871"></a>
+<a name="line-872"></a><a name="sattr"></a><span class='definition'>sattr</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-873"></a><span class='definition'>sattr</span> <span class='varid'>a</span> <span class='varid'>v</span>	<span class='keyglyph'>=</span> <span class='varid'>mkXAttr</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>mkXText</span> <span class='varid'>v</span><span class='layout'>)</span>
+<a name="line-874"></a>
+<a name="line-875"></a><span class='comment'>-- |</span>
+<a name="line-876"></a><span class='comment'>-- short cut for 'mkXText'</span>
+<a name="line-877"></a>
+<a name="line-878"></a><a name="txt"></a><span class='definition'>txt</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span>  <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-879"></a><span class='definition'>txt</span>		<span class='keyglyph'>=</span> <span class='varid'>mkXText</span>
+<a name="line-880"></a>
+<a name="line-881"></a><span class='comment'>-- |</span>
+<a name="line-882"></a><span class='comment'>-- short cut for simple comment</span>
+<a name="line-883"></a><span class='comment'>-- the input tree is ignored</span>
+<a name="line-884"></a><span class='comment'>--</span>
+<a name="line-885"></a><span class='comment'>-- see also : 'mkXCmt'</span>
+<a name="line-886"></a>
+<a name="line-887"></a><a name="cmt"></a><span class='definition'>cmt</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span>  <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-888"></a><span class='definition'>cmt</span> <span class='varid'>c</span>		<span class='keyglyph'>=</span> <span class='varid'>mkXCmt</span> <span class='layout'>(</span><span class='varid'>txt</span> <span class='varid'>c</span><span class='layout'>)</span>
+<a name="line-889"></a>
+<a name="line-890"></a><span class='comment'>-- |</span>
+<a name="line-891"></a><span class='comment'>-- short cut for generating simple processing instructions (spi)</span>
+<a name="line-892"></a><span class='comment'>-- the input tree is ignored</span>
+<a name="line-893"></a><span class='comment'>--</span>
+<a name="line-894"></a><span class='comment'>-- @spi \"xyz\" \"abc\"@ is equal to @mkXPi \"xyz\" (txt \"abc\")@</span>
+<a name="line-895"></a><span class='comment'>-- (the name pi is already used in prelude)</span>
+<a name="line-896"></a>
+<a name="line-897"></a><a name="spi"></a><span class='definition'>spi</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-898"></a><span class='definition'>spi</span> <span class='varid'>n</span> <span class='varid'>c</span>		<span class='keyglyph'>=</span> <span class='varid'>mkXPi</span> <span class='varid'>n</span> <span class='layout'>(</span><span class='varid'>txt</span> <span class='varid'>c</span><span class='layout'>)</span>
+<a name="line-899"></a>
+<a name="line-900"></a><span class='comment'>-- |</span>
+<a name="line-901"></a><span class='comment'>-- short cut for generating simple cdata sections,</span>
+<a name="line-902"></a><span class='comment'>-- the input tree is ignored</span>
+<a name="line-903"></a>
+<a name="line-904"></a><a name="cdata"></a><span class='definition'>cdata</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-905"></a><span class='definition'>cdata</span> <span class='varid'>s</span>		<span class='keyglyph'>=</span> <span class='varid'>mkXCdata</span> <span class='layout'>(</span><span class='varid'>txt</span> <span class='varid'>s</span><span class='layout'>)</span>
+<a name="line-906"></a>
+<a name="line-907"></a><span class='comment'>-- |</span>
+<a name="line-908"></a><span class='comment'>-- DTD part generation with filter for attributes and children</span>
+<a name="line-909"></a><span class='comment'>-- see also: 'mkXDTDTree'</span>
+<a name="line-910"></a>
+<a name="line-911"></a><a name="dtd"></a><span class='definition'>dtd</span>		<span class='keyglyph'>::</span> <span class='conid'>DTDElem</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>XmlFilter</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>XmlFilter</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-912"></a><span class='definition'>dtd</span> <span class='varid'>dtdpart</span> <span class='varid'>afs</span> <span class='varid'>cfs</span> <span class='varid'>t</span>
+<a name="line-913"></a>    <span class='keyglyph'>=</span> <span class='varid'>mkXDTD</span> <span class='varid'>dtdpart</span> <span class='layout'>(</span><span class='varid'>toAttrl</span> <span class='varop'>.</span> <span class='varid'>cat</span> <span class='varid'>afs</span> <span class='varop'>$</span> <span class='varid'>t</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>cat</span> <span class='varid'>cfs</span> <span class='varid'>t</span><span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>t</span>
+<a name="line-914"></a>
+<a name="line-915"></a><span class='comment'>-- |</span>
+<a name="line-916"></a><span class='comment'>-- short cut for mkXError c_warn.</span>
+<a name="line-917"></a><span class='comment'>--</span>
+<a name="line-918"></a><span class='comment'>-- see also : 'mkXError'</span>
+<a name="line-919"></a>
+<a name="line-920"></a><a name="warn"></a><span class='definition'>warn</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-921"></a><span class='definition'>warn</span>		<span class='keyglyph'>=</span> <span class='varid'>mkXError</span> <span class='varid'>c_warn</span>
+<a name="line-922"></a>
+<a name="line-923"></a><span class='comment'>-- |</span>
+<a name="line-924"></a><span class='comment'>-- short cut for mkXError c_fatal.</span>
+<a name="line-925"></a><span class='comment'>--</span>
+<a name="line-926"></a><span class='comment'>-- see also : 'mkXError'</span>
+<a name="line-927"></a>
+<a name="line-928"></a><a name="err"></a><span class='definition'>err</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-929"></a><span class='definition'>err</span>		<span class='keyglyph'>=</span> <span class='varid'>mkXError</span> <span class='varid'>c_err</span>
+<a name="line-930"></a>
+<a name="line-931"></a><span class='comment'>-- |</span>
+<a name="line-932"></a><span class='comment'>-- short cut for mkXError c_fatal.</span>
+<a name="line-933"></a><span class='comment'>--</span>
+<a name="line-934"></a><span class='comment'>-- see also : 'mkXError'</span>
+<a name="line-935"></a>
+<a name="line-936"></a><a name="fatal"></a><span class='definition'>fatal</span>		<span class='keyglyph'>::</span>  <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-937"></a><span class='definition'>fatal</span>		<span class='keyglyph'>=</span> <span class='varid'>mkXError</span> <span class='varid'>c_fatal</span>
+<a name="line-938"></a>
+<a name="line-939"></a><span class='comment'>-- |</span>
+<a name="line-940"></a><span class='comment'>-- check whether an option is set</span>
+<a name="line-941"></a><span class='comment'>--</span>
+<a name="line-942"></a><span class='comment'>-- reads the value of an attribute, usually applied to a document root node,</span>
+<a name="line-943"></a><span class='comment'>-- and checks if the value represents True. The following strings are interpreted</span>
+<a name="line-944"></a><span class='comment'>-- as true: \"1\", \"True\", \"true\", \"yes\", \"Yes\".</span>
+<a name="line-945"></a>
+<a name="line-946"></a><a name="hasOption"></a><span class='definition'>hasOption</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-947"></a><span class='definition'>hasOption</span> <span class='varid'>opt</span>
+<a name="line-948"></a>    <span class='keyglyph'>=</span> <span class='varid'>getValue</span> <span class='varid'>opt</span> <span class='varop'>.&gt;</span> <span class='varid'>isOfText</span> <span class='varid'>isSet</span>
+<a name="line-949"></a>      <span class='keyword'>where</span>
+<a name="line-950"></a>      <span class='varid'>isSet</span> <span class='varid'>x</span>
+<a name="line-951"></a>	  <span class='keyglyph'>=</span> <span class='varid'>x</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"1"</span><span class='layout'>,</span> <span class='str'>"True"</span><span class='layout'>,</span> <span class='str'>"true"</span><span class='layout'>,</span> <span class='str'>"yes"</span><span class='layout'>,</span> <span class='str'>"Yes"</span><span class='keyglyph'>]</span>
+<a name="line-952"></a>
+<a name="line-953"></a>
+<a name="line-954"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-955"></a>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-DOM-XmlTreeFunctions.html b/doc/hxt-filter/src/Text-XML-HXT-DOM-XmlTreeFunctions.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-DOM-XmlTreeFunctions.html
@@ -0,0 +1,561 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-2"></a>
+<a name="line-3"></a><span class='comment'>{- |
+<a name="line-4"></a>   Module     : Text.XML.HXT.DOM.XmlTreeFunctions
+<a name="line-5"></a>   Copyright  : Copyright (C) 2008 Uwe Schmidt
+<a name="line-6"></a>   License    : MIT
+<a name="line-7"></a>
+<a name="line-8"></a>   Maintainer : Uwe Schmidt (uwe@fh-wedel.de)
+<a name="line-9"></a>   Stability  : stable
+<a name="line-10"></a>   Portability: portable
+<a name="line-11"></a>
+<a name="line-12"></a>   Basic XmlTree functions
+<a name="line-13"></a>
+<a name="line-14"></a>-}</span>
+<a name="line-15"></a>
+<a name="line-16"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-17"></a>
+<a name="line-18"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTreeFunctions</span>
+<a name="line-19"></a>    <span class='layout'>(</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTreeFunctions</span>
+<a name="line-20"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>ShowXml</span>
+<a name="line-21"></a>    <span class='layout'>)</span>
+<a name="line-22"></a><span class='keyword'>where</span>
+<a name="line-23"></a>
+<a name="line-24"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTreeTypes</span>
+<a name="line-25"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlKeywords</span>
+<a name="line-26"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>ShowXml</span>
+<a name="line-27"></a>
+<a name="line-28"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>
+<a name="line-29"></a>
+<a name="line-30"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-31"></a><span class='comment'>--</span>
+<a name="line-32"></a><span class='comment'>-- XNode Predicates</span>
+<a name="line-33"></a><span class='comment'>--</span>
+<a name="line-34"></a>
+<a name="line-35"></a><a name="isXCdataNode"></a><span class='definition'>isXCdataNode</span>			<span class='keyglyph'>::</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-36"></a><span class='definition'>isXCdataNode</span> <span class='layout'>(</span><span class='conid'>XCdata</span> <span class='keyword'>_</span><span class='layout'>)</span>		<span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-37"></a><span class='definition'>isXCdataNode</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-38"></a>
+<a name="line-39"></a><a name="isXCharRefNode"></a><span class='definition'>isXCharRefNode</span>			<span class='keyglyph'>::</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-40"></a><span class='definition'>isXCharRefNode</span> <span class='layout'>(</span><span class='conid'>XCharRef</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-41"></a><span class='definition'>isXCharRefNode</span> <span class='keyword'>_</span>		<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-42"></a>
+<a name="line-43"></a><a name="isXCmtNode"></a><span class='definition'>isXCmtNode</span>			<span class='keyglyph'>::</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-44"></a><span class='definition'>isXCmtNode</span> <span class='layout'>(</span><span class='conid'>XCmt</span> <span class='keyword'>_</span><span class='layout'>)</span>		<span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-45"></a><span class='definition'>isXCmtNode</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-46"></a>
+<a name="line-47"></a><a name="isXDTDNode"></a><span class='definition'>isXDTDNode</span>			<span class='keyglyph'>::</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-48"></a><span class='definition'>isXDTDNode</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='keyword'>_</span> <span class='keyword'>_</span><span class='layout'>)</span>		<span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-49"></a><span class='definition'>isXDTDNode</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-50"></a>
+<a name="line-51"></a><a name="isXAttrNode"></a><span class='definition'>isXAttrNode</span>			<span class='keyglyph'>::</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-52"></a><span class='definition'>isXAttrNode</span> <span class='layout'>(</span><span class='conid'>XAttr</span> <span class='keyword'>_</span><span class='layout'>)</span>		<span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-53"></a><span class='definition'>isXAttrNode</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-54"></a>
+<a name="line-55"></a><a name="isXEntityRefNode"></a><span class='definition'>isXEntityRefNode</span>		<span class='keyglyph'>::</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-56"></a><span class='definition'>isXEntityRefNode</span> <span class='layout'>(</span><span class='conid'>XEntityRef</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-57"></a><span class='definition'>isXEntityRefNode</span> <span class='keyword'>_</span>		<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-58"></a>
+<a name="line-59"></a><a name="isXErrorNode"></a><span class='definition'>isXErrorNode</span>			<span class='keyglyph'>::</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-60"></a><span class='definition'>isXErrorNode</span> <span class='layout'>(</span><span class='conid'>XError</span> <span class='keyword'>_</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-61"></a><span class='definition'>isXErrorNode</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-62"></a>
+<a name="line-63"></a><a name="isXPiNode"></a><span class='definition'>isXPiNode</span>			<span class='keyglyph'>::</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-64"></a><span class='definition'>isXPiNode</span> <span class='layout'>(</span><span class='conid'>XPi</span> <span class='keyword'>_</span> <span class='keyword'>_</span><span class='layout'>)</span>		<span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-65"></a><span class='definition'>isXPiNode</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-66"></a>
+<a name="line-67"></a><a name="isXTagNode"></a><span class='definition'>isXTagNode</span>			<span class='keyglyph'>::</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-68"></a><span class='definition'>isXTagNode</span>  <span class='layout'>(</span><span class='conid'>XTag</span> <span class='keyword'>_</span> <span class='keyword'>_</span><span class='layout'>)</span>		<span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-69"></a><span class='definition'>isXTagNode</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-70"></a>
+<a name="line-71"></a><a name="isXTextNode"></a><span class='definition'>isXTextNode</span>			<span class='keyglyph'>::</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-72"></a><span class='definition'>isXTextNode</span> <span class='layout'>(</span><span class='conid'>XText</span> <span class='keyword'>_</span><span class='layout'>)</span>		<span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-73"></a><span class='definition'>isXTextNode</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-74"></a>
+<a name="line-75"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-76"></a>
+<a name="line-77"></a><a name="isRootNode"></a><span class='definition'>isRootNode</span>			<span class='keyglyph'>::</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-78"></a><span class='definition'>isRootNode</span>			<span class='keyglyph'>=</span> <span class='varid'>isTagNode</span> <span class='varid'>t_root</span>
+<a name="line-79"></a>
+<a name="line-80"></a><a name="isTagNode"></a><span class='definition'>isTagNode</span>			<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-81"></a><span class='definition'>isTagNode</span> <span class='varid'>n</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfTagNode</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varop'>==</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>qualifiedName</span><span class='layout'>)</span>
+<a name="line-82"></a>
+<a name="line-83"></a><a name="isOfTagNode"></a><span class='definition'>isOfTagNode</span>			<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>TagName</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-84"></a><span class='definition'>isOfTagNode</span> <span class='varid'>p</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>n</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>p</span> <span class='varid'>n</span>
+<a name="line-85"></a><span class='definition'>isOfTagNode</span> <span class='keyword'>_</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-86"></a>
+<a name="line-87"></a><a name="isAttrNode"></a><span class='definition'>isAttrNode</span>			<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-88"></a><span class='definition'>isAttrNode</span> <span class='varid'>n</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfAttrNode</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varop'>==</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>qualifiedName</span><span class='layout'>)</span>
+<a name="line-89"></a>
+<a name="line-90"></a><a name="isOfAttrNode"></a><span class='definition'>isOfAttrNode</span>			<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>AttrName</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-91"></a><span class='definition'>isOfAttrNode</span> <span class='varid'>p</span> <span class='layout'>(</span><span class='conid'>XAttr</span> <span class='varid'>n</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>p</span> <span class='varid'>n</span>
+<a name="line-92"></a><span class='definition'>isOfAttrNode</span> <span class='keyword'>_</span> <span class='keyword'>_</span>		<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-93"></a>
+<a name="line-94"></a><a name="isTextNode"></a><span class='definition'>isTextNode</span>			<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-95"></a><span class='definition'>isTextNode</span> <span class='varid'>t</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfTextNode</span> <span class='layout'>(</span><span class='varop'>==</span> <span class='varid'>t</span><span class='layout'>)</span>
+<a name="line-96"></a>
+<a name="line-97"></a><a name="isOfTextNode"></a><span class='definition'>isOfTextNode</span>			<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-98"></a><span class='definition'>isOfTextNode</span> <span class='varid'>p</span> <span class='layout'>(</span><span class='conid'>XText</span> <span class='varid'>t</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>p</span> <span class='varid'>t</span>
+<a name="line-99"></a><span class='definition'>isOfTextNode</span> <span class='keyword'>_</span> <span class='keyword'>_</span>		<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-100"></a>
+<a name="line-101"></a><a name="isPiNode"></a><span class='definition'>isPiNode</span>			<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-102"></a><span class='definition'>isPiNode</span> <span class='varid'>n</span>			<span class='keyglyph'>=</span> <span class='varid'>isOfPiNode</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varop'>==</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>qualifiedName</span><span class='layout'>)</span>
+<a name="line-103"></a>
+<a name="line-104"></a><a name="isOfPiNode"></a><span class='definition'>isOfPiNode</span>			<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>TagName</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-105"></a><span class='definition'>isOfPiNode</span> <span class='varid'>p</span> <span class='layout'>(</span><span class='conid'>XPi</span> <span class='varid'>n</span> <span class='keyword'>_</span><span class='layout'>)</span>		<span class='keyglyph'>=</span> <span class='varid'>p</span> <span class='varid'>n</span>
+<a name="line-106"></a><span class='definition'>isOfPiNode</span> <span class='keyword'>_</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-107"></a>
+<a name="line-108"></a><a name="isDTDElemNode"></a><span class='definition'>isDTDElemNode</span> 			<span class='keyglyph'>::</span> <span class='conid'>DTDElem</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-109"></a><span class='definition'>isDTDElemNode</span> <span class='varid'>e</span>	<span class='layout'>(</span><span class='conid'>XDTD</span> <span class='varid'>n</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>n</span> <span class='varop'>==</span> <span class='varid'>e</span>
+<a name="line-110"></a><span class='definition'>isDTDElemNode</span> <span class='keyword'>_</span> <span class='keyword'>_</span>		<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-111"></a>
+<a name="line-112"></a><a name="isErrorNode"></a><span class='definition'>isErrorNode</span> 			<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-113"></a><span class='definition'>isErrorNode</span> <span class='varid'>l</span> <span class='layout'>(</span><span class='conid'>XError</span> <span class='varid'>l'</span>  <span class='keyword'>_</span><span class='layout'>)</span>    <span class='keyglyph'>=</span> <span class='varid'>l</span> <span class='varop'>==</span> <span class='varid'>l'</span>
+<a name="line-114"></a><span class='definition'>isErrorNode</span> <span class='keyword'>_</span> <span class='keyword'>_</span>  <span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-115"></a>
+<a name="line-116"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-117"></a>
+<a name="line-118"></a><a name="textOfXNode"></a><span class='definition'>textOfXNode</span>			<span class='keyglyph'>::</span> <span class='conid'>XNode</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-119"></a><span class='definition'>textOfXNode</span> <span class='layout'>(</span><span class='conid'>XText</span> <span class='varid'>t</span><span class='layout'>)</span>		<span class='keyglyph'>=</span> <span class='varid'>t</span>
+<a name="line-120"></a><span class='definition'>textOfXNode</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='str'>""</span>
+<a name="line-121"></a>
+<a name="line-122"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-123"></a><span class='comment'>--</span>
+<a name="line-124"></a><span class='comment'>-- XmlTree constructors</span>
+<a name="line-125"></a>
+<a name="line-126"></a><span class='comment'>-- |</span>
+<a name="line-127"></a><span class='comment'>-- Create a tree with a tag node.</span>
+<a name="line-128"></a><span class='comment'>--</span>
+<a name="line-129"></a><span class='comment'>--    * 1.parameter n :  the name of the tag</span>
+<a name="line-130"></a><span class='comment'>--</span>
+<a name="line-131"></a><span class='comment'>--    - 2.parameter al :  the tag attribte list</span>
+<a name="line-132"></a><span class='comment'>--</span>
+<a name="line-133"></a><span class='comment'>--    - 3.parameter cs :  the list of children</span>
+<a name="line-134"></a><span class='comment'>--</span>
+<a name="line-135"></a><span class='comment'>--    - returns : the new tree</span>
+<a name="line-136"></a>
+<a name="line-137"></a><a name="mkXTagTree"></a><span class='definition'>mkXTagTree</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-138"></a><span class='definition'>mkXTagTree</span> <span class='varid'>n</span> <span class='varid'>al</span> <span class='varid'>cs</span>	<span class='keyglyph'>=</span> <span class='varid'>mkNode</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='layout'>(</span><span class='varid'>mkName</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span>
+<a name="line-139"></a>
+<a name="line-140"></a><span class='comment'>-- | Version with qualified name of 'mkXTagTree'</span>
+<a name="line-141"></a>
+<a name="line-142"></a><a name="mkQTagTree"></a><span class='definition'>mkQTagTree</span>		<span class='keyglyph'>::</span> <span class='conid'>QName</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-143"></a><span class='definition'>mkQTagTree</span> <span class='varid'>q</span> <span class='varid'>al</span> <span class='varid'>cs</span>	<span class='keyglyph'>=</span> <span class='varid'>mkNode</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>q</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span>
+<a name="line-144"></a>
+<a name="line-145"></a><span class='comment'>-- |</span>
+<a name="line-146"></a><span class='comment'>-- create a tree with a namespace aware tag node.</span>
+<a name="line-147"></a><span class='comment'>--</span>
+<a name="line-148"></a><span class='comment'>--    * 1.parameter n :  the prefix:localpart of the tag</span>
+<a name="line-149"></a><span class='comment'>--</span>
+<a name="line-150"></a><span class='comment'>--    - 2.parameter ns:  the namespace uri</span>
+<a name="line-151"></a><span class='comment'>--</span>
+<a name="line-152"></a><span class='comment'>--    - 3.parameter al :  the tag attribte list</span>
+<a name="line-153"></a><span class='comment'>--</span>
+<a name="line-154"></a><span class='comment'>--    - 4.parameter cs :  the list of children</span>
+<a name="line-155"></a><span class='comment'>--</span>
+<a name="line-156"></a><span class='comment'>--    - returns : the new tree</span>
+<a name="line-157"></a><span class='comment'>--</span>
+<a name="line-158"></a><span class='comment'>-- see also: 'mkXTagTree'</span>
+<a name="line-159"></a>
+<a name="line-160"></a><a name="mkXNsTagTree"></a><span class='definition'>mkXNsTagTree</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-161"></a><span class='definition'>mkXNsTagTree</span> <span class='varid'>n</span> <span class='varid'>ns</span> <span class='varid'>al</span> <span class='varid'>cs</span>	<span class='keyglyph'>=</span> <span class='varid'>mkNode</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='layout'>(</span><span class='varid'>mkNsName</span> <span class='varid'>n</span> <span class='varid'>ns</span><span class='layout'>)</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span>
+<a name="line-162"></a>
+<a name="line-163"></a><span class='comment'>-- |</span>
+<a name="line-164"></a><span class='comment'>-- creates a new document tree with empty contents.</span>
+<a name="line-165"></a><span class='comment'>--</span>
+<a name="line-166"></a><span class='comment'>--   * 1.parameter al : the attribute list for the root node</span>
+<a name="line-167"></a><span class='comment'>--</span>
+<a name="line-168"></a><span class='comment'>-- returns a single node tree with tag name \"\/\" indicating a root and</span>
+<a name="line-169"></a><span class='comment'>-- with empty list of children</span>
+<a name="line-170"></a><span class='comment'>--</span>
+<a name="line-171"></a><span class='comment'>-- see also : 'emptyRoot'</span>
+<a name="line-172"></a>
+<a name="line-173"></a><a name="newRoot"></a><span class='definition'>newRoot</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-174"></a><span class='definition'>newRoot</span> <span class='varid'>al</span>		<span class='keyglyph'>=</span> <span class='varid'>mkXTagTree</span> <span class='varid'>t_root</span> <span class='varid'>al</span> <span class='conid'>[]</span>
+<a name="line-175"></a>
+<a name="line-176"></a><span class='comment'>-- | the empty document tree</span>
+<a name="line-177"></a><span class='comment'>--</span>
+<a name="line-178"></a><span class='comment'>-- see also : 'newRoot'</span>
+<a name="line-179"></a>
+<a name="line-180"></a><a name="emptyRoot"></a><span class='definition'>emptyRoot</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlTree</span>
+<a name="line-181"></a><span class='definition'>emptyRoot</span>		<span class='keyglyph'>=</span> <span class='varid'>newRoot</span> <span class='conid'>[]</span>
+<a name="line-182"></a>
+<a name="line-183"></a><span class='comment'>-- |</span>
+<a name="line-184"></a><span class='comment'>-- create a new empty document with source name as parameter</span>
+<a name="line-185"></a>
+<a name="line-186"></a><a name="newDocument"></a><span class='definition'>newDocument</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-187"></a><span class='definition'>newDocument</span> <span class='varid'>n</span>
+<a name="line-188"></a>    <span class='keyglyph'>=</span> <span class='varid'>newDocument'</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='varid'>a_source</span><span class='layout'>,</span> <span class='varid'>n</span><span class='layout'>)</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>a_status</span><span class='layout'>,</span> <span class='varid'>show</span> <span class='varid'>c_ok</span><span class='layout'>)</span><span class='keyglyph'>]</span>
+<a name="line-189"></a>
+<a name="line-190"></a><span class='comment'>-- |</span>
+<a name="line-191"></a><span class='comment'>-- create a new empty document with a list of attributes for source location and options</span>
+<a name="line-192"></a><span class='comment'>--</span>
+<a name="line-193"></a><span class='comment'>-- see also : 'newDocument'</span>
+<a name="line-194"></a>
+<a name="line-195"></a><a name="newDocument'"></a><span class='definition'>newDocument'</span>		<span class='keyglyph'>::</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-196"></a><span class='definition'>newDocument'</span> <span class='varid'>al</span>
+<a name="line-197"></a>    <span class='keyglyph'>=</span> <span class='varid'>newRoot</span> <span class='layout'>(</span><span class='varid'>fromAttrl</span> <span class='varid'>al</span><span class='layout'>)</span>
+<a name="line-198"></a>
+<a name="line-199"></a><span class='comment'>-- |</span>
+<a name="line-200"></a><span class='comment'>-- create a document root tree.</span>
+<a name="line-201"></a><span class='comment'>--</span>
+<a name="line-202"></a><span class='comment'>--    * 1.parameter al :  the attribute list for the root. This list must contain at</span>
+<a name="line-203"></a><span class='comment'>--		  least an attribute \"source\" that contains the URI of the document to be processed</span>
+<a name="line-204"></a><span class='comment'>--</span>
+<a name="line-205"></a><span class='comment'>--    - 2.parameter cs :  the list for the document content</span>
+<a name="line-206"></a><span class='comment'>--</span>
+<a name="line-207"></a><span class='comment'>--    - returns : the document root</span>
+<a name="line-208"></a>
+<a name="line-209"></a><a name="mkRootTree"></a><span class='definition'>mkRootTree</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-210"></a><span class='definition'>mkRootTree</span> <span class='varid'>al</span> <span class='varid'>cs</span>	<span class='keyglyph'>=</span> <span class='varid'>mkXTagTree</span> <span class='varid'>t_root</span> <span class='varid'>al</span> <span class='varid'>cs</span>
+<a name="line-211"></a>
+<a name="line-212"></a><span class='comment'>-- |</span>
+<a name="line-213"></a><span class='comment'>-- create a leaf for a text element.</span>
+<a name="line-214"></a><span class='comment'>--</span>
+<a name="line-215"></a><span class='comment'>--    * 1.parameter txt :  the text</span>
+<a name="line-216"></a><span class='comment'>--</span>
+<a name="line-217"></a><span class='comment'>--    - returns : the tree with the single node containing the text</span>
+<a name="line-218"></a>
+<a name="line-219"></a><a name="mkXTextTree"></a><span class='definition'>mkXTextTree</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-220"></a><span class='definition'>mkXTextTree</span> <span class='varid'>s</span>		<span class='keyglyph'>=</span> <span class='varid'>mkLeaf</span> <span class='layout'>(</span><span class='conid'>XText</span> <span class='varid'>s</span><span class='layout'>)</span>
+<a name="line-221"></a>
+<a name="line-222"></a><span class='comment'>-- |</span>
+<a name="line-223"></a><span class='comment'>-- create a leaf for a char reference.</span>
+<a name="line-224"></a><span class='comment'>--</span>
+<a name="line-225"></a><span class='comment'>--    * 1.parameter i :  the integer representing the Unicode char</span>
+<a name="line-226"></a><span class='comment'>--</span>
+<a name="line-227"></a><span class='comment'>--    - returns : the tree with the single node containing the char reference</span>
+<a name="line-228"></a>
+<a name="line-229"></a><a name="mkXCharRefTree"></a><span class='definition'>mkXCharRefTree</span>		<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-230"></a><span class='definition'>mkXCharRefTree</span> <span class='varid'>s</span>	<span class='keyglyph'>=</span> <span class='varid'>mkLeaf</span> <span class='layout'>(</span><span class='conid'>XCharRef</span> <span class='varid'>s</span><span class='layout'>)</span>
+<a name="line-231"></a>
+<a name="line-232"></a><span class='comment'>-- |</span>
+<a name="line-233"></a><span class='comment'>-- create a leaf for an entity reference.</span>
+<a name="line-234"></a><span class='comment'>--</span>
+<a name="line-235"></a><span class='comment'>--    * 1.parameter n :  the name of the entity reference</span>
+<a name="line-236"></a><span class='comment'>--</span>
+<a name="line-237"></a><span class='comment'>--    - returns : the tree with the single node containing the entity reference</span>
+<a name="line-238"></a>
+<a name="line-239"></a><a name="mkXEntityRefTree"></a><span class='definition'>mkXEntityRefTree</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-240"></a><span class='definition'>mkXEntityRefTree</span> <span class='varid'>s</span>	<span class='keyglyph'>=</span> <span class='varid'>mkLeaf</span> <span class='layout'>(</span><span class='conid'>XEntityRef</span> <span class='varid'>s</span><span class='layout'>)</span>
+<a name="line-241"></a>
+<a name="line-242"></a><span class='comment'>-- |</span>
+<a name="line-243"></a><span class='comment'>-- create a leaf for a comment,</span>
+<a name="line-244"></a><span class='comment'>--</span>
+<a name="line-245"></a><span class='comment'>--    * 1.parameter c :  the comment text</span>
+<a name="line-246"></a><span class='comment'>--</span>
+<a name="line-247"></a><span class='comment'>--    - returns : the tree with the single node containing the comment</span>
+<a name="line-248"></a>
+<a name="line-249"></a><a name="mkXCmtTree"></a><span class='definition'>mkXCmtTree</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-250"></a><span class='definition'>mkXCmtTree</span> <span class='varid'>c</span>		<span class='keyglyph'>=</span> <span class='varid'>mkLeaf</span> <span class='layout'>(</span><span class='conid'>XCmt</span> <span class='varid'>c</span><span class='layout'>)</span>
+<a name="line-251"></a>
+<a name="line-252"></a><span class='comment'>-- |</span>
+<a name="line-253"></a><span class='comment'>-- create a tree for a part of a DTD</span>
+<a name="line-254"></a><span class='comment'>--</span>
+<a name="line-255"></a><span class='comment'>--    * 1.parameter d :  the type of the DTD part</span>
+<a name="line-256"></a><span class='comment'>--</span>
+<a name="line-257"></a><span class='comment'>--    - 2.parameter al :  the attribute list for the DTD part</span>
+<a name="line-258"></a><span class='comment'>--</span>
+<a name="line-259"></a><span class='comment'>--    - 3.parameter ds :  the possibly empty list of components for the DTD part</span>
+<a name="line-260"></a><span class='comment'>--</span>
+<a name="line-261"></a><span class='comment'>--    - returns : the tree with the composed DTD part</span>
+<a name="line-262"></a>
+<a name="line-263"></a><a name="mkXDTDTree"></a><span class='definition'>mkXDTDTree</span>		<span class='keyglyph'>::</span> <span class='conid'>DTDElem</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-264"></a><span class='definition'>mkXDTDTree</span> <span class='varid'>d</span> <span class='varid'>al</span>	<span class='varid'>ds</span>	<span class='keyglyph'>=</span> <span class='varid'>mkNode</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='varid'>d</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>ds</span>
+<a name="line-265"></a>
+<a name="line-266"></a>
+<a name="line-267"></a><span class='comment'>-- |</span>
+<a name="line-268"></a><span class='comment'>-- create an attribute tree as part of a tag attribute list of tag nodes</span>
+<a name="line-269"></a><span class='comment'>--</span>
+<a name="line-270"></a><span class='comment'>--    * 1.parameter al : the attribute name</span>
+<a name="line-271"></a><span class='comment'>--</span>
+<a name="line-272"></a><span class='comment'>--    - 2.parameter av : the attribute value as tree list, usually containing a single text node</span>
+<a name="line-273"></a>
+<a name="line-274"></a><a name="mkXAttrTree"></a><span class='definition'>mkXAttrTree</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-275"></a><span class='definition'>mkXAttrTree</span> <span class='varid'>an</span> <span class='varid'>av</span>	<span class='keyglyph'>=</span> <span class='varid'>mkNode</span> <span class='layout'>(</span><span class='conid'>XAttr</span> <span class='layout'>(</span><span class='varid'>mkName</span> <span class='varid'>an</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>av</span>
+<a name="line-276"></a>
+<a name="line-277"></a><span class='comment'>-- | Qualified version of 'mkXAttrTree'</span>
+<a name="line-278"></a>
+<a name="line-279"></a><a name="mkQAttrTree"></a><span class='definition'>mkQAttrTree</span>		<span class='keyglyph'>::</span> <span class='conid'>QName</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-280"></a><span class='definition'>mkQAttrTree</span> <span class='varid'>aq</span> <span class='varid'>av</span>	<span class='keyglyph'>=</span> <span class='varid'>mkNode</span> <span class='layout'>(</span><span class='conid'>XAttr</span> <span class='varid'>aq</span><span class='layout'>)</span> <span class='varid'>av</span>
+<a name="line-281"></a>
+<a name="line-282"></a>
+<a name="line-283"></a><span class='comment'>-- |</span>
+<a name="line-284"></a><span class='comment'>-- create an attribute tree with a namespace</span>
+<a name="line-285"></a><span class='comment'>--</span>
+<a name="line-286"></a><span class='comment'>--    * 1.parameter al : the attribute name</span>
+<a name="line-287"></a><span class='comment'>--</span>
+<a name="line-288"></a><span class='comment'>--    - 2.parameter ns : namespace uri</span>
+<a name="line-289"></a><span class='comment'>--</span>
+<a name="line-290"></a><span class='comment'>--    - 3.parameter av : the attribute value as tree list, usually containing a single text node</span>
+<a name="line-291"></a><span class='comment'>--</span>
+<a name="line-292"></a><span class='comment'>-- see also: 'mkXAttrTree', 'mkXNsTagTree'</span>
+<a name="line-293"></a>
+<a name="line-294"></a><a name="mkXNsAttrTree"></a><span class='definition'>mkXNsAttrTree</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-295"></a><span class='definition'>mkXNsAttrTree</span> <span class='varid'>an</span> <span class='varid'>ns</span> <span class='varid'>av</span>	<span class='keyglyph'>=</span> <span class='varid'>mkNode</span> <span class='layout'>(</span><span class='conid'>XAttr</span> <span class='layout'>(</span><span class='varid'>mkNsName</span> <span class='varid'>an</span> <span class='varid'>ns</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>av</span>
+<a name="line-296"></a>
+<a name="line-297"></a><span class='comment'>-- |</span>
+<a name="line-298"></a><span class='comment'>-- create a parameter entity reference DTD part.</span>
+<a name="line-299"></a><span class='comment'>--</span>
+<a name="line-300"></a><span class='comment'>--    * 1.parameter ref :  the name of the reference</span>
+<a name="line-301"></a><span class='comment'>--</span>
+<a name="line-302"></a><span class='comment'>--    - returns : the DTD part for a PERef</span>
+<a name="line-303"></a>
+<a name="line-304"></a><a name="mkXPERefTree"></a><span class='definition'>mkXPERefTree</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-305"></a><span class='definition'>mkXPERefTree</span> <span class='varid'>ref</span>	<span class='keyglyph'>=</span> <span class='varid'>mkLeaf</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>PEREF</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='varid'>a_peref</span><span class='layout'>,</span> <span class='varid'>ref</span><span class='layout'>)</span><span class='keyglyph'>]</span><span class='layout'>)</span>
+<a name="line-306"></a>
+<a name="line-307"></a><span class='comment'>-- |</span>
+<a name="line-308"></a><span class='comment'>-- create a processing instruction tree.</span>
+<a name="line-309"></a><span class='comment'>--</span>
+<a name="line-310"></a><span class='comment'>--    * 1.parameter n :  the name of the PI</span>
+<a name="line-311"></a><span class='comment'>--</span>
+<a name="line-312"></a><span class='comment'>--    - 2.parameter str :  the content of a PI</span>
+<a name="line-313"></a><span class='comment'>--</span>
+<a name="line-314"></a><span class='comment'>--    - returns : the processing instruction tree with a single attribute \"value\"</span>
+<a name="line-315"></a><span class='comment'>--      with the str parameter as attribute value, with @valueOf a_value@ applied to the result tree</span>
+<a name="line-316"></a><span class='comment'>--      the content of the PI can be selected</span>
+<a name="line-317"></a>
+<a name="line-318"></a><a name="mkXPiTree"></a><span class='definition'>mkXPiTree</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-319"></a><span class='definition'>mkXPiTree</span> <span class='varid'>n</span> <span class='varid'>str</span>	<span class='keyglyph'>=</span> <span class='varid'>mkLeaf</span> <span class='layout'>(</span><span class='conid'>XPi</span> <span class='layout'>(</span><span class='varid'>mkName</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>xattr</span> <span class='varid'>a_value</span> <span class='varid'>str</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-320"></a>
+<a name="line-321"></a><span class='comment'>-- |</span>
+<a name="line-322"></a><span class='comment'>-- create xml declaration</span>
+<a name="line-323"></a>
+<a name="line-324"></a><a name="mkXmlDeclTree"></a><span class='definition'>mkXmlDeclTree</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-325"></a><span class='definition'>mkXmlDeclTree</span> <span class='varid'>al</span> <span class='keyglyph'>=</span> <span class='varid'>mkLeaf</span> <span class='layout'>(</span><span class='conid'>XPi</span> <span class='layout'>(</span><span class='varid'>mkName</span> <span class='varid'>t_xml</span><span class='layout'>)</span> <span class='varid'>al</span><span class='layout'>)</span>
+<a name="line-326"></a>
+<a name="line-327"></a><span class='comment'>-- |</span>
+<a name="line-328"></a><span class='comment'>-- create a CDATA section tree.</span>
+<a name="line-329"></a><span class='comment'>--</span>
+<a name="line-330"></a><span class='comment'>--    * 1.parameter s :  the content of the CDATA section</span>
+<a name="line-331"></a><span class='comment'>--</span>
+<a name="line-332"></a><span class='comment'>--    - returns : the tree for the CDATA section</span>
+<a name="line-333"></a>
+<a name="line-334"></a><a name="mkXCdataTree"></a><span class='definition'>mkXCdataTree</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-335"></a><span class='definition'>mkXCdataTree</span> <span class='varid'>s</span>		<span class='keyglyph'>=</span> <span class='varid'>mkLeaf</span> <span class='layout'>(</span><span class='conid'>XCdata</span> <span class='varid'>s</span><span class='layout'>)</span>
+<a name="line-336"></a>
+<a name="line-337"></a><span class='comment'>-- |</span>
+<a name="line-338"></a><span class='comment'>-- create an error tree.</span>
+<a name="line-339"></a><span class='comment'>--</span>
+<a name="line-340"></a><span class='comment'>--    * 1.parameter l :  the level of the error (warning, error fatal)</span>
+<a name="line-341"></a><span class='comment'>--</span>
+<a name="line-342"></a><span class='comment'>--    - 2.parameter msg :  the error message</span>
+<a name="line-343"></a><span class='comment'>--</span>
+<a name="line-344"></a><span class='comment'>--    - 3.parameter cs :  the context, where the error was detected</span>
+<a name="line-345"></a>
+<a name="line-346"></a><a name="mkXErrorTree"></a><span class='definition'>mkXErrorTree</span>		<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>
+<a name="line-347"></a><span class='definition'>mkXErrorTree</span> <span class='varid'>l</span> <span class='varid'>s</span> <span class='varid'>cs</span>	<span class='keyglyph'>=</span> <span class='varid'>mkNode</span> <span class='layout'>(</span><span class='conid'>XError</span> <span class='varid'>l</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='varid'>cs</span>
+<a name="line-348"></a>
+<a name="line-349"></a><a name="maybeString2XText"></a><span class='definition'>maybeString2XText</span>	<span class='keyglyph'>::</span> <span class='conid'>Maybe</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-350"></a><span class='definition'>maybeString2XText</span>	<span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='varid'>mkXTextTree</span> <span class='varop'>.</span> <span class='varid'>maybeToList</span>
+<a name="line-351"></a>
+<a name="line-352"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-353"></a><span class='comment'>--</span>
+<a name="line-354"></a><span class='comment'>-- text selection</span>
+<a name="line-355"></a>
+<a name="line-356"></a><a name="showXText"></a><span class='definition'>showXText</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-357"></a><span class='definition'>showXText</span>
+<a name="line-358"></a>    <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='varid'>showT</span>
+<a name="line-359"></a>      <span class='keyword'>where</span>
+<a name="line-360"></a>      <span class='varid'>showT</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XText</span>      <span class='varid'>t</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>t</span>
+<a name="line-361"></a>      <span class='varid'>showT</span> <span class='keyword'>_</span>                        <span class='keyglyph'>=</span> <span class='str'>""</span>
+<a name="line-362"></a>
+<a name="line-363"></a><a name="showXCharRef"></a><span class='definition'>showXCharRef</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-364"></a><span class='definition'>showXCharRef</span>
+<a name="line-365"></a>    <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='varid'>showT</span>
+<a name="line-366"></a>      <span class='keyword'>where</span>
+<a name="line-367"></a>      <span class='varid'>showT</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XCharRef</span>   <span class='varid'>r</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='str'>"&amp;#"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>r</span> <span class='varop'>++</span> <span class='str'>";"</span>
+<a name="line-368"></a>      <span class='varid'>showT</span> <span class='keyword'>_</span>                        <span class='keyglyph'>=</span> <span class='str'>""</span>
+<a name="line-369"></a>
+<a name="line-370"></a><a name="showXEntityRef"></a><span class='definition'>showXEntityRef</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-371"></a><span class='definition'>showXEntityRef</span>
+<a name="line-372"></a>    <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='varid'>showT</span>
+<a name="line-373"></a>      <span class='keyword'>where</span>
+<a name="line-374"></a>      <span class='varid'>showT</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XEntityRef</span> <span class='varid'>r</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='str'>"&amp;"</span> <span class='varop'>++</span> <span class='varid'>r</span> <span class='varop'>++</span> <span class='str'>";"</span>
+<a name="line-375"></a>      <span class='varid'>showT</span> <span class='keyword'>_</span>                        <span class='keyglyph'>=</span> <span class='str'>""</span>
+<a name="line-376"></a>
+<a name="line-377"></a><a name="showXErrors"></a><span class='definition'>showXErrors</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-378"></a><span class='definition'>showXErrors</span>
+<a name="line-379"></a>    <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='varid'>showE</span>
+<a name="line-380"></a>      <span class='keyword'>where</span>
+<a name="line-381"></a>      <span class='varid'>showE</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XError</span> <span class='varid'>level</span> <span class='varid'>str</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>msg</span> <span class='varid'>level</span> <span class='varop'>++</span> <span class='str'>": "</span> <span class='varop'>++</span> <span class='varid'>str</span> <span class='varop'>++</span> <span class='str'>"\n"</span>
+<a name="line-382"></a>      <span class='varid'>showE</span> <span class='keyword'>_</span>                            <span class='keyglyph'>=</span> <span class='str'>""</span>
+<a name="line-383"></a>
+<a name="line-384"></a>      <span class='varid'>msg</span> <span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-385"></a>      <span class='varid'>msg</span> <span class='varid'>l</span>
+<a name="line-386"></a>          <span class='keyglyph'>|</span> <span class='varid'>l</span> <span class='varop'>==</span> <span class='varid'>c_warn</span> <span class='keyglyph'>=</span> <span class='str'>"Warning"</span>
+<a name="line-387"></a>          <span class='keyglyph'>|</span> <span class='varid'>l</span> <span class='varop'>==</span> <span class='varid'>c_err</span>  <span class='keyglyph'>=</span> <span class='str'>"Error"</span>
+<a name="line-388"></a>          <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>   <span class='keyglyph'>=</span> <span class='str'>"Fatal error"</span>
+<a name="line-389"></a>
+<a name="line-390"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-391"></a><span class='comment'>--</span>
+<a name="line-392"></a><span class='comment'>-- the toString conversion functions</span>
+<a name="line-393"></a>
+<a name="line-394"></a><span class='comment'>-- |</span>
+<a name="line-395"></a><span class='comment'>-- old name for 'xshow' (deprecated)</span>
+<a name="line-396"></a>
+<a name="line-397"></a><a name="xmlTreesToString"></a><span class='definition'>xmlTreesToString</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-398"></a><span class='definition'>xmlTreesToString</span>	<span class='keyglyph'>=</span> <span class='varid'>xshow</span>
+<a name="line-399"></a>
+<a name="line-400"></a><span class='comment'>-- |</span>
+<a name="line-401"></a><span class='comment'>-- conversion of a filter result into a text node</span>
+<a name="line-402"></a><span class='comment'>--</span>
+<a name="line-403"></a><span class='comment'>-- see also : 'xshow'</span>
+<a name="line-404"></a>
+<a name="line-405"></a><a name="xmlTreesToText"></a><span class='definition'>xmlTreesToText</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlSFilter</span>
+<a name="line-406"></a><span class='definition'>xmlTreesToText</span> <span class='varid'>ts</span><span class='keyglyph'>@</span><span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XText</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='keyglyph'>]</span>	<span class='keyglyph'>=</span> <span class='varid'>ts</span>		<span class='comment'>-- special case optimisation</span>
+<a name="line-407"></a><span class='definition'>xmlTreesToText</span> <span class='varid'>ts</span><span class='keyglyph'>@</span><span class='conid'>[]</span>			<span class='keyglyph'>=</span> <span class='varid'>ts</span>
+<a name="line-408"></a><span class='definition'>xmlTreesToText</span> <span class='varid'>ts</span>			<span class='keyglyph'>=</span> <span class='varid'>xtext</span> <span class='varop'>.</span> <span class='varid'>xshow</span> <span class='varop'>$</span> <span class='varid'>ts</span>
+<a name="line-409"></a>
+<a name="line-410"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-411"></a>
+<a name="line-412"></a><a name="xmlContentModelToString"></a><span class='definition'>xmlContentModelToString</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-413"></a><span class='definition'>xmlContentModelToString</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ELEMENT</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-414"></a>    <span class='keyglyph'>=</span> <span class='varid'>showElemType</span> <span class='layout'>(</span><span class='varid'>lookup1</span> <span class='varid'>a_type</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span> <span class='str'>""</span>
+<a name="line-415"></a>
+<a name="line-416"></a><span class='definition'>xmlContentModelToString</span> <span class='keyword'>_</span>
+<a name="line-417"></a>    <span class='keyglyph'>=</span> <span class='str'>""</span>
+<a name="line-418"></a>
+<a name="line-419"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-420"></a><span class='comment'>--</span>
+<a name="line-421"></a><span class='comment'>-- string access functions</span>
+<a name="line-422"></a>
+<a name="line-423"></a><span class='comment'>-- |</span>
+<a name="line-424"></a><span class='comment'>-- select the name of a node. For tags, attributes and pi\'s the name string</span>
+<a name="line-425"></a><span class='comment'>-- is returned, else the empty string.</span>
+<a name="line-426"></a>
+<a name="line-427"></a><a name="nameOf"></a><span class='definition'>nameOf</span>				<span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-428"></a><span class='definition'>nameOf</span>
+<a name="line-429"></a>    <span class='keyglyph'>=</span> <span class='varid'>selName</span> <span class='varop'>.</span> <span class='varid'>getNode</span>
+<a name="line-430"></a>      <span class='keyword'>where</span>
+<a name="line-431"></a>      <span class='varid'>selName</span> <span class='layout'>(</span><span class='conid'>XTag</span>  <span class='varid'>n</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>qualifiedName</span> <span class='varid'>n</span>
+<a name="line-432"></a>      <span class='varid'>selName</span> <span class='layout'>(</span><span class='conid'>XAttr</span> <span class='varid'>n</span>  <span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>qualifiedName</span> <span class='varid'>n</span>
+<a name="line-433"></a>      <span class='varid'>selName</span> <span class='layout'>(</span><span class='conid'>XPi</span>   <span class='varid'>n</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>qualifiedName</span> <span class='varid'>n</span>
+<a name="line-434"></a>      <span class='varid'>selName</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='str'>""</span>
+<a name="line-435"></a>
+<a name="line-436"></a><span class='comment'>-- |</span>
+<a name="line-437"></a><span class='comment'>-- select the local part of a name of a node. For tags, attributes the name string</span>
+<a name="line-438"></a><span class='comment'>-- is returned, for pi's the whole name, else the empty string.</span>
+<a name="line-439"></a>
+<a name="line-440"></a><a name="localPartOf"></a><span class='definition'>localPartOf</span>				<span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-441"></a><span class='definition'>localPartOf</span>
+<a name="line-442"></a>    <span class='keyglyph'>=</span> <span class='varid'>selName</span> <span class='varop'>.</span> <span class='varid'>getNode</span>
+<a name="line-443"></a>      <span class='keyword'>where</span>
+<a name="line-444"></a>      <span class='varid'>selName</span> <span class='layout'>(</span><span class='conid'>XTag</span>  <span class='varid'>n</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>localPart</span> <span class='varid'>n</span>
+<a name="line-445"></a>      <span class='varid'>selName</span> <span class='layout'>(</span><span class='conid'>XAttr</span> <span class='varid'>n</span>  <span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>localPart</span> <span class='varid'>n</span>
+<a name="line-446"></a>      <span class='varid'>selName</span> <span class='layout'>(</span><span class='conid'>XPi</span>   <span class='varid'>n</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>qualifiedName</span> <span class='varid'>n</span>
+<a name="line-447"></a>      <span class='varid'>selName</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='str'>""</span>
+<a name="line-448"></a>
+<a name="line-449"></a><span class='comment'>-- |</span>
+<a name="line-450"></a><span class='comment'>-- select the namespace URI of a tag or an attribute tree, else the empty string is returned</span>
+<a name="line-451"></a><span class='comment'>-- see also : 'nameOf'</span>
+<a name="line-452"></a>
+<a name="line-453"></a><a name="namespaceOf"></a><span class='definition'>namespaceOf</span>				<span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-454"></a><span class='definition'>namespaceOf</span>
+<a name="line-455"></a>    <span class='keyglyph'>=</span> <span class='varid'>selName</span> <span class='varop'>.</span> <span class='varid'>getNode</span>
+<a name="line-456"></a>      <span class='keyword'>where</span>
+<a name="line-457"></a>      <span class='varid'>selName</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>n</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>namespaceUri</span> <span class='varid'>n</span>
+<a name="line-458"></a>      <span class='varid'>selName</span> <span class='layout'>(</span><span class='conid'>XAttr</span> <span class='varid'>n</span> <span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>namespaceUri</span> <span class='varid'>n</span>
+<a name="line-459"></a>      <span class='varid'>selName</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='str'>""</span>
+<a name="line-460"></a>
+<a name="line-461"></a><span class='comment'>-- |</span>
+<a name="line-462"></a><span class='comment'>-- select the namespace prefix of a tag or an attribute tree, else the empty string is returned</span>
+<a name="line-463"></a><span class='comment'>-- see also : 'nameOf', 'localPartOf'</span>
+<a name="line-464"></a>
+<a name="line-465"></a><a name="prefixOf"></a><span class='definition'>prefixOf</span>				<span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-466"></a><span class='definition'>prefixOf</span>
+<a name="line-467"></a>    <span class='keyglyph'>=</span> <span class='varid'>selName</span> <span class='varop'>.</span> <span class='varid'>getNode</span>
+<a name="line-468"></a>      <span class='keyword'>where</span>
+<a name="line-469"></a>      <span class='varid'>selName</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>n</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>namePrefix</span> <span class='varid'>n</span>
+<a name="line-470"></a>      <span class='varid'>selName</span> <span class='layout'>(</span><span class='conid'>XAttr</span> <span class='varid'>n</span> <span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>namePrefix</span> <span class='varid'>n</span>
+<a name="line-471"></a>      <span class='varid'>selName</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='str'>""</span>
+<a name="line-472"></a>
+<a name="line-473"></a><span class='comment'>-- |</span>
+<a name="line-474"></a><span class='comment'>-- select the universal name (namespace uri ++ localPart) of a tag or an attribute tree, else the empty string is returned</span>
+<a name="line-475"></a><span class='comment'>-- see also : 'nameOf', 'namespaceOf'</span>
+<a name="line-476"></a>
+<a name="line-477"></a><a name="universalNameOf"></a><span class='definition'>universalNameOf</span>				<span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-478"></a><span class='definition'>universalNameOf</span>
+<a name="line-479"></a>    <span class='keyglyph'>=</span> <span class='varid'>selName</span> <span class='varop'>.</span> <span class='varid'>getNode</span>
+<a name="line-480"></a>      <span class='keyword'>where</span>
+<a name="line-481"></a>      <span class='varid'>selName</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>n</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>universalName</span> <span class='varid'>n</span>
+<a name="line-482"></a>      <span class='varid'>selName</span> <span class='layout'>(</span><span class='conid'>XAttr</span> <span class='varid'>n</span> <span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>universalName</span> <span class='varid'>n</span>
+<a name="line-483"></a>      <span class='varid'>selName</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='str'>""</span>
+<a name="line-484"></a>
+<a name="line-485"></a><span class='comment'>-- |</span>
+<a name="line-486"></a><span class='comment'>-- select the attributes of a dtd tree</span>
+<a name="line-487"></a>
+<a name="line-488"></a><a name="attrlOfDTD"></a><span class='definition'>attrlOfDTD</span>				<span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Attributes</span>
+<a name="line-489"></a><span class='definition'>attrlOfDTD</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='keyword'>_</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>al</span>
+<a name="line-490"></a><span class='definition'>attrlOfDTD</span> <span class='keyword'>_</span>				<span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-491"></a>
+<a name="line-492"></a>
+<a name="line-493"></a><span class='comment'>-- |</span>
+<a name="line-494"></a><span class='comment'>-- select a special attribute of a DTD part</span>
+<a name="line-495"></a>
+<a name="line-496"></a><a name="valueOfDTD"></a><span class='definition'>valueOfDTD</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-497"></a><span class='definition'>valueOfDTD</span> <span class='varid'>n</span>		<span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>n</span> <span class='varop'>.</span> <span class='varid'>attrlOfDTD</span>
+<a name="line-498"></a>
+<a name="line-499"></a><span class='comment'>-- |</span>
+<a name="line-500"></a><span class='comment'>-- test an attribute of a DTD part</span>
+<a name="line-501"></a>
+<a name="line-502"></a><a name="ofDTDequals"></a><span class='definition'>ofDTDequals</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-503"></a><span class='definition'>ofDTDequals</span> <span class='varid'>n</span> <span class='varid'>v</span>	<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varop'>==</span> <span class='varid'>v</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>valueOfDTD</span> <span class='varid'>n</span>
+<a name="line-504"></a>
+<a name="line-505"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-506"></a><span class='comment'>--</span>
+<a name="line-507"></a><span class='comment'>-- convenient functions</span>
+<a name="line-508"></a>
+<a name="line-509"></a><a name="xcmt"></a><span class='definition'>xcmt</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-510"></a><span class='definition'>xcmt</span> <span class='varid'>cmt</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='varid'>mkXCmtTree</span> <span class='varid'>cmt</span> <span class='keyglyph'>]</span>
+<a name="line-511"></a>
+<a name="line-512"></a><a name="xerr"></a><span class='definition'>xerr</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-513"></a><span class='definition'>xerr</span> <span class='varid'>msg</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='varid'>mkXErrorTree</span> <span class='varid'>c_err</span> <span class='varid'>msg</span> <span class='conid'>[]</span><span class='keyglyph'>]</span>
+<a name="line-514"></a>
+<a name="line-515"></a><a name="xwarn"></a><span class='definition'>xwarn</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-516"></a><span class='definition'>xwarn</span> <span class='varid'>msg</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='varid'>mkXErrorTree</span> <span class='varid'>c_warn</span> <span class='varid'>msg</span> <span class='conid'>[]</span><span class='keyglyph'>]</span>
+<a name="line-517"></a>
+<a name="line-518"></a><a name="xtext"></a><span class='definition'>xtext</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-519"></a><span class='definition'>xtext</span> <span class='varid'>t</span>		<span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='varid'>mkXTextTree</span> <span class='varid'>t</span><span class='keyglyph'>]</span>
+<a name="line-520"></a>
+<a name="line-521"></a><a name="xtag"></a><span class='definition'>xtag</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-522"></a><span class='definition'>xtag</span> <span class='varid'>t</span> <span class='varid'>al</span> <span class='varid'>cl</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='varid'>mkXTagTree</span> <span class='varid'>t</span> <span class='varid'>al</span> <span class='varid'>cl</span> <span class='keyglyph'>]</span>
+<a name="line-523"></a>
+<a name="line-524"></a><a name="xattr"></a><span class='definition'>xattr</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-525"></a><span class='definition'>xattr</span> <span class='varid'>n</span> <span class='varid'>v</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='varid'>mkXAttrTree</span> <span class='varid'>n</span> <span class='layout'>(</span><span class='varid'>xtext</span> <span class='varid'>v</span><span class='layout'>)</span> <span class='keyglyph'>]</span>
+<a name="line-526"></a>
+<a name="line-527"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-528"></a><span class='comment'>--</span>
+<a name="line-529"></a><span class='comment'>-- conversion functions: XmlTrees &lt;-&gt; Attributes</span>
+<a name="line-530"></a>
+<a name="line-531"></a><a name="toTreel"></a><span class='definition'>toTreel</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>AssocList</span> <span class='conid'>String</span> <span class='conid'>XmlTrees</span>
+<a name="line-532"></a><span class='definition'>toTreel</span>
+<a name="line-533"></a>    <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='varid'>toTree</span>
+<a name="line-534"></a>      <span class='keyword'>where</span>
+<a name="line-535"></a>      <span class='varid'>toTree</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XAttr</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>n</span><span class='layout'>,</span> <span class='varid'>cs</span><span class='layout'>)</span><span class='keyglyph'>]</span>
+<a name="line-536"></a>      <span class='varid'>toTree</span> <span class='keyword'>_</span>			  <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-537"></a>
+<a name="line-538"></a><a name="toAttrl"></a><span class='definition'>toAttrl</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Attributes</span>
+<a name="line-539"></a><span class='definition'>toAttrl</span>
+<a name="line-540"></a>    <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>k</span><span class='layout'>,</span><span class='varid'>tl</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>k</span><span class='layout'>,</span> <span class='varid'>xshow</span> <span class='varid'>tl</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>toTreel</span>
+<a name="line-541"></a>
+<a name="line-542"></a>
+<a name="line-543"></a><a name="fromTreel"></a><span class='definition'>fromTreel</span>	<span class='keyglyph'>::</span> <span class='conid'>AssocList</span> <span class='conid'>String</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-544"></a><span class='definition'>fromTreel</span>
+<a name="line-545"></a>    <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>k</span><span class='layout'>,</span><span class='varid'>tl</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>mkXAttrTree</span> <span class='varid'>k</span> <span class='varid'>tl</span><span class='layout'>)</span>
+<a name="line-546"></a>
+<a name="line-547"></a><a name="fromAttrl"></a><span class='definition'>fromAttrl</span>	<span class='keyglyph'>::</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-548"></a><span class='definition'>fromAttrl</span>
+<a name="line-549"></a>    <span class='keyglyph'>=</span> <span class='varid'>fromTreel</span> <span class='varop'>.</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>k</span><span class='layout'>,</span><span class='varid'>v</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>k</span><span class='layout'>,</span> <span class='varid'>xtext</span> <span class='varid'>v</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-550"></a>
+<a name="line-551"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-DOM.html b/doc/hxt-filter/src/Text-XML-HXT-DOM.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-DOM.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- DOM data types and functions</span>
+<a name="line-3"></a><span class='comment'>--</span>
+<a name="line-4"></a><span class='comment'>-- export of all basic datatypes and functions of the toolbox DOM.</span>
+<a name="line-5"></a>
+<a name="line-6"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span>
+<a name="line-7"></a>    <span class='layout'>(</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-8"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-9"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>EditFilters</span>
+<a name="line-10"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>FormatXmlTree</span>
+<a name="line-11"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>Namespace</span>
+<a name="line-12"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlOptions</span>
+<a name="line-13"></a>    <span class='layout'>)</span>
+<a name="line-14"></a><span class='keyword'>where</span>
+<a name="line-15"></a>
+<a name="line-16"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-17"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-18"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>EditFilters</span>
+<a name="line-19"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>FormatXmlTree</span>
+<a name="line-20"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>Namespace</span>
+<a name="line-21"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlOptions</span>
+<a name="line-22"></a>
+<a name="line-23"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-24"></a>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Parser-DTDProcessing.html b/doc/hxt-filter/src/Text-XML-HXT-Parser-DTDProcessing.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Parser-DTDProcessing.html
@@ -0,0 +1,941 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-2"></a>
+<a name="line-3"></a><span class='comment'>{- |
+<a name="line-4"></a>   Module     : Text.XML.HXT.Parser.DTDProcessing
+<a name="line-5"></a>   Copyright  : Copyright (C) 2005 Uwe Schmidt
+<a name="line-6"></a>   License    : MIT
+<a name="line-7"></a>
+<a name="line-8"></a>   Maintainer : Uwe Schmidt (uwe@fh-wedel.de)
+<a name="line-9"></a>   Stability  : experimental
+<a name="line-10"></a>   Portability: portable
+<a name="line-11"></a>
+<a name="line-12"></a>   DTD processing function for
+<a name="line-13"></a>   including external parts of a DTD
+<a name="line-14"></a>   parameter entity substitution and general entity substitution
+<a name="line-15"></a>
+<a name="line-16"></a>-}</span>
+<a name="line-17"></a>
+<a name="line-18"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-19"></a>
+<a name="line-20"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>DTDProcessing</span>
+<a name="line-21"></a>    <span class='layout'>(</span> <span class='varid'>getWellformedDoc</span>
+<a name="line-22"></a>    <span class='layout'>,</span> <span class='varid'>checkWellformedDoc</span>
+<a name="line-23"></a>    <span class='layout'>,</span> <span class='varid'>processDTD</span>
+<a name="line-24"></a>    <span class='layout'>,</span> <span class='varid'>processGeneralEntities</span>
+<a name="line-25"></a>    <span class='layout'>)</span>
+<a name="line-26"></a><span class='keyword'>where</span>
+<a name="line-27"></a>
+<a name="line-28"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-29"></a>
+<a name="line-30"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlOutput</span>
+<a name="line-31"></a>    <span class='layout'>(</span> <span class='varid'>traceTree</span>
+<a name="line-32"></a>    <span class='layout'>,</span> <span class='varid'>traceSource</span>
+<a name="line-33"></a>    <span class='layout'>,</span> <span class='varid'>traceMsg</span>
+<a name="line-34"></a>    <span class='layout'>)</span>
+<a name="line-35"></a>
+<a name="line-36"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlParser</span>
+<a name="line-37"></a>    <span class='layout'>(</span> <span class='varid'>parseXmlDoc</span>
+<a name="line-38"></a>    <span class='layout'>,</span> <span class='varid'>parseXmlDTDPart</span>
+<a name="line-39"></a>    <span class='layout'>,</span> <span class='varid'>parseXmlAttrValue</span>
+<a name="line-40"></a>    <span class='layout'>,</span> <span class='varid'>parseXmlGeneralEntityValue</span>
+<a name="line-41"></a>    <span class='layout'>)</span>
+<a name="line-42"></a>
+<a name="line-43"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlDTDParser</span>
+<a name="line-44"></a>    <span class='layout'>(</span> <span class='varid'>parseXmlDTDdecl</span>
+<a name="line-45"></a>    <span class='layout'>,</span> <span class='varid'>parseXmlDTDdeclPart</span>
+<a name="line-46"></a>    <span class='layout'>,</span> <span class='varid'>parseXmlDTDEntityValue</span>
+<a name="line-47"></a>    <span class='layout'>)</span>
+<a name="line-48"></a>
+<a name="line-49"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlInput</span>
+<a name="line-50"></a>    <span class='layout'>(</span> <span class='varid'>getXmlContents</span>
+<a name="line-51"></a>    <span class='layout'>,</span> <span class='varid'>getXmlEntityContents</span>
+<a name="line-52"></a>    <span class='layout'>,</span> <span class='varid'>runInLocalURIContext</span>
+<a name="line-53"></a>    <span class='layout'>,</span> <span class='varid'>runInNewURIContext</span>
+<a name="line-54"></a>    <span class='layout'>,</span> <span class='varid'>getBaseURI</span>
+<a name="line-55"></a>    <span class='layout'>,</span> <span class='varid'>setBaseURI</span>
+<a name="line-56"></a>    <span class='layout'>,</span> <span class='varid'>getAbsolutURI</span>
+<a name="line-57"></a>    <span class='layout'>,</span> <span class='varid'>isStandaloneDocument</span>
+<a name="line-58"></a>    <span class='layout'>)</span>
+<a name="line-59"></a>
+<a name="line-60"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>EditFilters</span>
+<a name="line-61"></a>    <span class='layout'>(</span> <span class='varid'>transfCharRef</span>
+<a name="line-62"></a>    <span class='layout'>,</span> <span class='varid'>transfAllCharRef</span>
+<a name="line-63"></a>    <span class='layout'>)</span>
+<a name="line-64"></a>
+<a name="line-65"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-66"></a>
+<a name="line-67"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>
+<a name="line-68"></a>
+<a name="line-69"></a><span class='keyword'>import</span> <span class='keyword'>qualified</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Map</span> <span class='keyword'>as</span> <span class='conid'>M</span>
+<a name="line-70"></a>    <span class='layout'>(</span> <span class='conid'>Map</span>
+<a name="line-71"></a>    <span class='layout'>,</span> <span class='varid'>empty</span>
+<a name="line-72"></a>    <span class='layout'>,</span> <span class='varid'>lookup</span>
+<a name="line-73"></a>    <span class='layout'>,</span> <span class='varid'>insert</span>
+<a name="line-74"></a>    <span class='comment'>-- , foldWithKey</span>
+<a name="line-75"></a>    <span class='layout'>)</span>
+<a name="line-76"></a>
+<a name="line-77"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-78"></a><span class='comment'>--</span>
+<a name="line-79"></a><span class='comment'>-- the "main" building blocks</span>
+<a name="line-80"></a>
+<a name="line-81"></a><span class='comment'>-- |</span>
+<a name="line-82"></a><span class='comment'>-- monadic filter for reading, parsing and checking a wellformed document.</span>
+<a name="line-83"></a><span class='comment'>-- the input tree must consist of a root node with a source attribute</span>
+<a name="line-84"></a><span class='comment'>-- in its attribute list.</span>
+<a name="line-85"></a><span class='comment'>--</span>
+<a name="line-86"></a><span class='comment'>-- All attributes from the document root are copied into the system state,</span>
+<a name="line-87"></a><span class='comment'>-- and may be queried by the monadic filters, e.g. trace options.</span>
+<a name="line-88"></a><span class='comment'>--</span>
+<a name="line-89"></a><span class='comment'>-- Result is the single element list containing the well-formed document tree</span>
+<a name="line-90"></a><span class='comment'>-- or, in case of errors, the document root with an empty list as children</span>
+<a name="line-91"></a><span class='comment'>-- and attributes 'a_status' and 'a_module' for error level and the module,</span>
+<a name="line-92"></a><span class='comment'>-- where the error occured.</span>
+<a name="line-93"></a><span class='comment'>--</span>
+<a name="line-94"></a><span class='comment'>-- this is a shortcut for 'getXmlContents' .\&gt;\&gt; 'checkWellformedDoc'</span>
+<a name="line-95"></a><span class='comment'>--</span>
+<a name="line-96"></a><span class='comment'>-- example for a main program:</span>
+<a name="line-97"></a><span class='comment'>--</span>
+<a name="line-98"></a><span class='comment'>-- @</span>
+<a name="line-99"></a><span class='comment'>-- main =</span>
+<a name="line-100"></a><span class='comment'>--   run\' \$</span>
+<a name="line-101"></a><span class='comment'>--   do</span>
+<a name="line-102"></a><span class='comment'>--   res  \&lt;- getWellformedDoc \$ newDocument \"myfile.xml\"</span>
+<a name="line-103"></a><span class='comment'>--   ...</span>
+<a name="line-104"></a><span class='comment'>-- @</span>
+<a name="line-105"></a>
+<a name="line-106"></a><a name="getWellformedDoc"></a><span class='definition'>getWellformedDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-107"></a><span class='definition'>getWellformedDoc</span>
+<a name="line-108"></a>    <span class='keyglyph'>=</span> <span class='varid'>setSystemParams</span>
+<a name="line-109"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-110"></a>      <span class='varid'>getXmlContents</span>
+<a name="line-111"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-112"></a>      <span class='varid'>checkWellformedDoc</span>
+<a name="line-113"></a>
+<a name="line-114"></a><span class='comment'>-- |</span>
+<a name="line-115"></a><span class='comment'>-- parses a text node with 'parseXmlDoc', processes the DTD and general entities</span>
+<a name="line-116"></a><span class='comment'>-- and transforms all char references into characters</span>
+<a name="line-117"></a>
+<a name="line-118"></a><a name="checkWellformedDoc"></a><span class='definition'>checkWellformedDoc</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-119"></a><span class='definition'>checkWellformedDoc</span>
+<a name="line-120"></a>    <span class='keyglyph'>=</span> <span class='varid'>parseXmlDoc</span>
+<a name="line-121"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-122"></a>      <span class='varid'>processDTD</span>
+<a name="line-123"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-124"></a>      <span class='varid'>processGeneralEntities</span>
+<a name="line-125"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-126"></a>      <span class='varid'>liftMf</span> <span class='varid'>transfAllCharRef</span>
+<a name="line-127"></a>
+<a name="line-128"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-129"></a><span class='comment'>--</span>
+<a name="line-130"></a>
+<a name="line-131"></a><a name="RecList"></a><span class='keyword'>type</span> <span class='conid'>RecList</span>		<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span>
+<a name="line-132"></a>
+<a name="line-133"></a><a name="DTDState"></a><span class='keyword'>type</span> <span class='conid'>DTDState</span> <span class='varid'>res</span>	<span class='keyglyph'>=</span> <span class='conid'>XState</span> <span class='conid'>PeEnv</span> <span class='varid'>res</span>
+<a name="line-134"></a>
+<a name="line-135"></a><a name="DTDStateFilter"></a><span class='keyword'>type</span> <span class='conid'>DTDStateFilter</span>	<span class='keyglyph'>=</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>DTDState</span> <span class='conid'>XmlTrees</span>
+<a name="line-136"></a>
+<a name="line-137"></a><a name="DTDPart"></a><span class='keyword'>data</span> <span class='conid'>DTDPart</span>		<span class='keyglyph'>=</span> <span class='conid'>Internal</span>
+<a name="line-138"></a>			<span class='keyglyph'>|</span> <span class='conid'>External</span>
+<a name="line-139"></a>			  <span class='keyword'>deriving</span> <span class='layout'>(</span><span class='conid'>Eq</span><span class='layout'>)</span>
+<a name="line-140"></a>
+<a name="line-141"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-142"></a>
+<a name="line-143"></a><a name="PeEnv"></a><span class='keyword'>type</span> <span class='conid'>PeEnv</span>		<span class='keyglyph'>=</span> <span class='conid'>M</span><span class='varop'>.</span><span class='conid'>Map</span> <span class='conid'>String</span> <span class='conid'>XmlTree</span>
+<a name="line-144"></a>
+<a name="line-145"></a><a name="emptyPeEnv"></a><span class='definition'>emptyPeEnv</span>	<span class='keyglyph'>::</span> <span class='conid'>PeEnv</span>
+<a name="line-146"></a><span class='definition'>emptyPeEnv</span>	<span class='keyglyph'>=</span> <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>empty</span>
+<a name="line-147"></a>
+<a name="line-148"></a><a name="lookupPeEnv"></a><span class='definition'>lookupPeEnv</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PeEnv</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Maybe</span> <span class='conid'>XmlTree</span>
+<a name="line-149"></a><span class='definition'>lookupPeEnv</span>	<span class='keyglyph'>=</span> <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>lookup</span>
+<a name="line-150"></a>
+<a name="line-151"></a><a name="addPeEntry"></a><span class='definition'>addPeEntry</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PeEnv</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PeEnv</span>
+<a name="line-152"></a><span class='definition'>addPeEntry</span>	<span class='keyglyph'>=</span> <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>insert</span>
+<a name="line-153"></a>
+<a name="line-154"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-155"></a>
+<a name="line-156"></a><span class='comment'>-- |</span>
+<a name="line-157"></a><span class='comment'>-- a filter for DTD processing</span>
+<a name="line-158"></a><span class='comment'>--</span>
+<a name="line-159"></a><span class='comment'>-- inclusion of external parts of DTD,</span>
+<a name="line-160"></a><span class='comment'>-- parameter entity substitution</span>
+<a name="line-161"></a><span class='comment'>-- conditional section evaluation</span>
+<a name="line-162"></a><span class='comment'>--</span>
+<a name="line-163"></a><span class='comment'>-- input tree must represent a complete document including root node</span>
+<a name="line-164"></a>
+<a name="line-165"></a><a name="processDTD"></a><span class='definition'>processDTD</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-166"></a><span class='definition'>processDTD</span>
+<a name="line-167"></a>    <span class='keyglyph'>=</span> <span class='varid'>runInLocalURIContext</span>
+<a name="line-168"></a>         <span class='layout'>(</span> <span class='varid'>processRoot</span>
+<a name="line-169"></a>	   <span class='varop'>.&gt;&gt;</span>
+<a name="line-170"></a>	   <span class='varid'>traceTree</span>
+<a name="line-171"></a>	   <span class='varop'>.&gt;&gt;</span>
+<a name="line-172"></a>	   <span class='varid'>traceSource</span>
+<a name="line-173"></a>	 <span class='layout'>)</span>
+<a name="line-174"></a>      <span class='varop'>`whenM`</span> <span class='layout'>(</span> <span class='varid'>isRoot</span> <span class='varop'>.&gt;</span> <span class='varid'>getChildren</span> <span class='layout'>)</span>
+<a name="line-175"></a>      <span class='keyword'>where</span>
+<a name="line-176"></a>
+<a name="line-177"></a>      <span class='varid'>processRoot</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-178"></a>      <span class='varid'>processRoot</span> <span class='varid'>t</span>
+<a name="line-179"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-180"></a>	    <span class='varid'>sequence_</span> <span class='varop'>.</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='varid'>ts</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>setSysParamTree</span> <span class='varid'>a</span> <span class='varid'>ts</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>toTreel</span> <span class='varop'>.</span> <span class='varid'>getAttrl</span> <span class='varop'>$</span> <span class='varid'>t</span>
+<a name="line-181"></a>	    <span class='varid'>setSysParam</span> <span class='varid'>a_standalone</span> <span class='str'>""</span>
+<a name="line-182"></a>	    <span class='layout'>(</span> <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='layout'>(</span><span class='str'>"processDTD: process parameter entities"</span><span class='layout'>)</span>
+<a name="line-183"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-184"></a>	      <span class='varid'>liftMf</span> <span class='layout'>(</span><span class='varid'>modifyChildren</span> <span class='varid'>addDoctype</span><span class='layout'>)</span>
+<a name="line-185"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-186"></a>	      <span class='varid'>processChildrenM</span> <span class='varid'>substParamEntities</span>
+<a name="line-187"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-188"></a>	      <span class='varid'>checkResult</span> <span class='str'>"in XML DTD processing"</span>
+<a name="line-189"></a>	      <span class='layout'>)</span> <span class='varop'>`whenM`</span> <span class='varid'>statusOk</span>
+<a name="line-190"></a>	      <span class='varop'>$</span> <span class='varid'>t</span>
+<a name="line-191"></a>
+<a name="line-192"></a>      <span class='comment'>-- Adds an empty DOCTYPE node to document. Needed for documents without a DTD.</span>
+<a name="line-193"></a>      <span class='comment'>-- Otherwise processor can not substitute predefined entities. If an xml declaration</span>
+<a name="line-194"></a>      <span class='comment'>-- is present, the node is inserted after this node.</span>
+<a name="line-195"></a>      <span class='varid'>addDoctype</span> <span class='keyglyph'>::</span> <span class='conid'>XmlSFilter</span>
+<a name="line-196"></a>      <span class='varid'>addDoctype</span> <span class='varid'>docChilds</span>
+<a name="line-197"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>doctype</span>
+<a name="line-198"></a>            <span class='keyword'>then</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>xmlDecl</span>
+<a name="line-199"></a>                 <span class='keyword'>then</span> <span class='keyglyph'>[</span><span class='varid'>mkXDTDTree</span> <span class='conid'>DOCTYPE</span> <span class='conid'>[]</span> <span class='conid'>[]</span><span class='keyglyph'>]</span> <span class='varop'>++</span> <span class='varid'>docChilds</span>
+<a name="line-200"></a>                 <span class='keyword'>else</span> <span class='layout'>(</span><span class='varid'>head</span> <span class='varid'>docChilds</span><span class='layout'>)</span> <span class='conop'>:</span> <span class='keyglyph'>[</span><span class='varid'>mkXDTDTree</span> <span class='conid'>DOCTYPE</span> <span class='conid'>[]</span> <span class='conid'>[]</span><span class='keyglyph'>]</span> <span class='varop'>++</span> <span class='layout'>(</span><span class='varid'>tail</span> <span class='varid'>docChilds</span><span class='layout'>)</span>
+<a name="line-201"></a>            <span class='keyword'>else</span> <span class='varid'>docChilds</span>
+<a name="line-202"></a>            <span class='keyword'>where</span>
+<a name="line-203"></a>            <span class='varid'>doctype</span> <span class='keyglyph'>=</span> <span class='varid'>isDoctype</span> <span class='varop'>$$</span> <span class='varid'>docChilds</span>
+<a name="line-204"></a>            <span class='varid'>xmlDecl</span> <span class='keyglyph'>=</span> <span class='varid'>isPi</span> <span class='varid'>t_xml</span> <span class='varop'>$$</span> <span class='varid'>isXPi</span> <span class='varop'>$$</span> <span class='varid'>docChilds</span>
+<a name="line-205"></a>
+<a name="line-206"></a>
+<a name="line-207"></a><a name="substParamEntities"></a><span class='definition'>substParamEntities</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-208"></a><span class='definition'>substParamEntities</span>
+<a name="line-209"></a>    <span class='keyglyph'>=</span> <span class='varid'>processParamEntities</span>
+<a name="line-210"></a>      <span class='varop'>`whenM`</span>
+<a name="line-211"></a>      <span class='varid'>isDoctype</span>
+<a name="line-212"></a>      <span class='keyword'>where</span>
+<a name="line-213"></a>
+<a name="line-214"></a>      <span class='varid'>processParamEntities</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-215"></a>      <span class='varid'>processParamEntities</span> <span class='varid'>t'</span>
+<a name="line-216"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-217"></a>	    <span class='layout'>(</span><span class='varid'>dtdPre</span><span class='layout'>,</span> <span class='varid'>envPre</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>processPredef</span>
+<a name="line-218"></a>
+<a name="line-219"></a>	    <span class='comment'>-- process internal part of DTD with initial empty env for parameter entities</span>
+<a name="line-220"></a>	    <span class='layout'>(</span><span class='varid'>dtdInt</span><span class='layout'>,</span> <span class='varid'>envInt</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>processInt</span> <span class='varid'>envPre</span> <span class='varid'>t'</span>
+<a name="line-221"></a>
+<a name="line-222"></a>	    <span class='comment'>-- process external part of DTD with resulting env from internal DTD</span>
+<a name="line-223"></a>	    <span class='varid'>dtdExt</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>runInLocalURIContext</span> <span class='layout'>(</span><span class='varid'>processExt</span> <span class='varid'>envInt</span><span class='layout'>)</span> <span class='varid'>t'</span>
+<a name="line-224"></a>
+<a name="line-225"></a>	    <span class='comment'>-- merge predefined, internal and external part</span>
+<a name="line-226"></a>	    <span class='varid'>trace</span> <span class='num'>2</span> <span class='str'>"substParamEntities: merge internal and external DTD parts"</span>
+<a name="line-227"></a>	    <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>replaceChildren</span> <span class='layout'>(</span><span class='varid'>foldl1</span> <span class='varid'>mergeDTDs</span> <span class='keyglyph'>[</span><span class='varid'>dtdPre</span><span class='layout'>,</span> <span class='varid'>dtdInt</span><span class='layout'>,</span> <span class='varid'>dtdExt</span><span class='keyglyph'>]</span><span class='layout'>)</span> <span class='varid'>t'</span><span class='layout'>)</span>
+<a name="line-228"></a>
+<a name="line-229"></a>      <span class='varid'>processPredef</span>
+<a name="line-230"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-231"></a>	    <span class='varid'>trace</span> <span class='num'>2</span> <span class='str'>"substParamEntities: substitute predefined entities"</span>
+<a name="line-232"></a>	    <span class='varid'>chain'</span> <span class='varid'>emptyPeEnv</span> <span class='layout'>(</span><span class='varid'>substParamEntity</span> <span class='conid'>Internal</span> <span class='varop'>$$&lt;</span> <span class='varid'>predefDTDPart</span><span class='layout'>)</span>
+<a name="line-233"></a>
+<a name="line-234"></a>      <span class='varid'>processInt</span> <span class='varid'>env'</span> <span class='varid'>n'</span>
+<a name="line-235"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-236"></a>	    <span class='varid'>trace</span> <span class='num'>2</span> <span class='str'>"substParamEntities: substitute parameter entities in internal DTD part"</span>
+<a name="line-237"></a>	    <span class='varid'>chain'</span> <span class='varid'>env'</span> <span class='layout'>(</span><span class='varid'>substParamEntity</span> <span class='conid'>Internal</span> <span class='varop'>$$&lt;</span> <span class='varid'>getChildren</span> <span class='varid'>n'</span><span class='layout'>)</span>
+<a name="line-238"></a>
+<a name="line-239"></a>      <span class='varid'>processExt</span> <span class='varid'>env'</span> <span class='varid'>n'</span>
+<a name="line-240"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-241"></a>	    <span class='varid'>trace</span> <span class='num'>2</span> <span class='str'>"substParamEntities: process external part of DTD"</span>
+<a name="line-242"></a>            <span class='varid'>extDtd</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>processExternalDTD</span> <span class='varid'>n'</span>
+<a name="line-243"></a>	    <span class='varid'>trace</span> <span class='num'>2</span> <span class='str'>"substParamEntities: substitute parameter entities in external DTD part"</span>
+<a name="line-244"></a>	    <span class='varid'>chain</span> <span class='varid'>env'</span> <span class='layout'>(</span> <span class='layout'>(</span><span class='varid'>substParamEntity</span> <span class='conid'>External</span><span class='layout'>)</span> <span class='varop'>$$&lt;</span> <span class='varid'>extDtd</span><span class='layout'>)</span>
+<a name="line-245"></a>
+<a name="line-246"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-247"></a><span class='comment'>-- |</span>
+<a name="line-248"></a><span class='comment'>-- substitute parameter entities</span>
+<a name="line-249"></a><span class='comment'>-- result is the input tree with the list of text nodes as children or an error message</span>
+<a name="line-250"></a>
+<a name="line-251"></a><a name="substPEref'"></a><span class='definition'>substPEref'</span>	<span class='keyglyph'>::</span> <span class='conid'>DTDPart</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PeEnv</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-252"></a>
+<a name="line-253"></a><span class='definition'>substPEref'</span> <span class='varid'>loc</span> <span class='varid'>env</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>PEREF</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-254"></a>    <span class='keyglyph'>|</span> <span class='varid'>isInternalRef</span>	<span class='keyglyph'>=</span> <span class='varid'>xerr</span> <span class='layout'>(</span><span class='str'>"a parameter entity reference of "</span> <span class='varop'>++</span> <span class='varid'>peName'</span> <span class='varop'>++</span> <span class='str'>" occurs in the internal subset of the DTD"</span><span class='layout'>)</span>
+<a name="line-255"></a>
+<a name="line-256"></a>    <span class='keyglyph'>|</span> <span class='varid'>isUndefinedRef</span>	<span class='keyglyph'>=</span> <span class='varid'>xerr</span> <span class='layout'>(</span><span class='str'>"parameter entity "</span> <span class='varop'>++</span> <span class='varid'>peName'</span> <span class='varop'>++</span> <span class='str'>" not found (forward reference?)"</span><span class='layout'>)</span>
+<a name="line-257"></a>
+<a name="line-258"></a>    <span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='varid'>baseUri</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>setChildren</span> <span class='varid'>peContent</span> <span class='varid'>n</span><span class='keyglyph'>]</span>
+<a name="line-259"></a>
+<a name="line-260"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>		<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>PEREF</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>a_url</span><span class='layout'>,</span><span class='varid'>baseUri</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>al</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>peContent</span><span class='layout'>)</span><span class='keyglyph'>]</span>
+<a name="line-261"></a>    <span class='keyword'>where</span>
+<a name="line-262"></a>    <span class='varid'>peName</span>		<span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_peref</span> <span class='varid'>al</span>
+<a name="line-263"></a>    <span class='varid'>peName'</span>		<span class='keyglyph'>=</span> <span class='varid'>show</span> <span class='varid'>peName</span>
+<a name="line-264"></a>    <span class='varid'>peVal</span>		<span class='keyglyph'>=</span> <span class='varid'>lookupPeEnv</span> <span class='varid'>peName</span> <span class='varid'>env</span>
+<a name="line-265"></a>    <span class='varid'>isInternalRef</span>	<span class='keyglyph'>=</span> <span class='varid'>loc</span> <span class='varop'>==</span> <span class='conid'>Internal</span>
+<a name="line-266"></a>    <span class='varid'>isUndefinedRef</span>	<span class='keyglyph'>=</span> <span class='varid'>isNothing</span> <span class='varid'>peVal</span>
+<a name="line-267"></a>
+<a name="line-268"></a>    <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>PENTITY</span> <span class='varid'>peAl</span><span class='layout'>)</span> <span class='varid'>peContent</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>fromJust</span> <span class='varid'>peVal</span>
+<a name="line-269"></a>    <span class='varid'>baseUri</span>		<span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_url</span> <span class='varid'>peAl</span>
+<a name="line-270"></a>
+<a name="line-271"></a>    <span class='comment'>-- peContent		= getChildren $ fromJust peVal</span>
+<a name="line-272"></a>
+<a name="line-273"></a><span class='definition'>substPEref'</span> <span class='keyword'>_</span> <span class='keyword'>_</span> <span class='varid'>n</span>
+<a name="line-274"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>n</span><span class='keyglyph'>]</span>
+<a name="line-275"></a>
+<a name="line-276"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-277"></a>
+<a name="line-278"></a><span class='comment'>{-
+<a name="line-279"></a>dumpPE	:: DTDStateFilter
+<a name="line-280"></a>dumpPE t
+<a name="line-281"></a>    = do
+<a name="line-282"></a>      env &lt;- getState
+<a name="line-283"></a>      ( traceMsg 2 ("dumpPE: parameter entity environment\n" ++ M.foldWithKey showPE "" env)
+<a name="line-284"></a>	.&gt;&gt;
+<a name="line-285"></a>	thisM ) t
+<a name="line-286"></a>    where
+<a name="line-287"></a>    showPE k v b = k ++ "\t" ++ show v ++ "\n" ++ b
+<a name="line-288"></a>-}</span>
+<a name="line-289"></a>
+<a name="line-290"></a><a name="traceDTD"></a><span class='definition'>traceDTD</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-291"></a><span class='definition'>traceDTD</span> <span class='varid'>msg</span>	<span class='keyglyph'>=</span> <span class='varid'>traceMsg</span> <span class='num'>4</span> <span class='varid'>msg</span> <span class='varop'>.&gt;&gt;</span> <span class='varid'>traceTree</span>
+<a name="line-292"></a>
+<a name="line-293"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-294"></a>
+<a name="line-295"></a><a name="getExternalParamEntityValue"></a><span class='definition'>getExternalParamEntityValue</span>	<span class='keyglyph'>::</span> <span class='conid'>DTDStateFilter</span>
+<a name="line-296"></a><span class='definition'>getExternalParamEntityValue</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>PENTITY</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='sel'>_cl</span><span class='layout'>)</span>
+<a name="line-297"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-298"></a>      <span class='varid'>rl</span> <span class='keyglyph'>&lt;-</span> <span class='layout'>(</span> <span class='varid'>getXmlEntityContents</span>
+<a name="line-299"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-300"></a>	      <span class='varid'>liftMf</span> <span class='varid'>getChildren</span>
+<a name="line-301"></a>	    <span class='layout'>)</span>
+<a name="line-302"></a>	    <span class='varop'>$</span> <span class='varid'>newDocument'</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>a_source</span><span class='layout'>,</span> <span class='varid'>sysVal</span><span class='layout'>)</span> <span class='conop'>:</span> <span class='varid'>al</span><span class='layout'>)</span>
+<a name="line-303"></a>      <span class='varid'>base</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getBaseURI</span>
+<a name="line-304"></a>      <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>rl</span>
+<a name="line-305"></a>	 <span class='keyword'>then</span> <span class='varid'>issueErr</span> <span class='layout'>(</span><span class='str'>"illegal external parameter entity value for entity %"</span> <span class='varop'>++</span> <span class='varid'>peName</span> <span class='varop'>++</span><span class='str'>";"</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-306"></a>	 <span class='keyword'>else</span> <span class='varid'>thisM</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>PENTITY</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>a_url</span><span class='layout'>,</span> <span class='varid'>base</span><span class='layout'>)</span> <span class='conop'>:</span> <span class='varid'>al</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>rl</span><span class='layout'>)</span>
+<a name="line-307"></a>    <span class='keyword'>where</span>
+<a name="line-308"></a>    <span class='varid'>sysVal</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>k_system</span> <span class='varid'>al</span>
+<a name="line-309"></a>    <span class='varid'>peName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span>   <span class='varid'>al</span>
+<a name="line-310"></a>
+<a name="line-311"></a><span class='definition'>getExternalParamEntityValue</span> <span class='varid'>n</span>
+<a name="line-312"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"getExternalParamEntityValue: illegal argument: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-313"></a>
+<a name="line-314"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-315"></a>
+<a name="line-316"></a><span class='comment'>-- |</span>
+<a name="line-317"></a><span class='comment'>-- the dtd parameter entity substitution filter</span>
+<a name="line-318"></a>
+<a name="line-319"></a><a name="substParamEntity"></a><span class='definition'>substParamEntity</span>	<span class='keyglyph'>::</span> <span class='conid'>DTDPart</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>DTDStateFilter</span>
+<a name="line-320"></a>
+<a name="line-321"></a><span class='definition'>substParamEntity</span> <span class='varid'>loc</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='varid'>xn</span> <span class='sel'>_cs</span><span class='layout'>)</span>
+<a name="line-322"></a>    <span class='keyglyph'>|</span> <span class='varid'>isDTDElemNode</span> <span class='conid'>ENTITY</span> <span class='varid'>xn</span>					<span class='comment'>-- ENITITY and parameter ENTITY decl</span>
+<a name="line-323"></a>	<span class='keyglyph'>=</span> <span class='varid'>traceDTD</span> <span class='layout'>(</span><span class='str'>"ENTITY declaration before DTD declaration parsing"</span><span class='layout'>)</span>
+<a name="line-324"></a>	  <span class='varop'>.&gt;&gt;</span>
+<a name="line-325"></a>	  <span class='varid'>processChildrenM</span> <span class='layout'>(</span><span class='varid'>substPeRefsInDTDdecl</span> <span class='conid'>[]</span><span class='layout'>)</span>
+<a name="line-326"></a>          <span class='varop'>.&gt;&gt;</span>
+<a name="line-327"></a>	  <span class='varid'>liftF</span> <span class='varid'>parseXmlDTDdecl</span>
+<a name="line-328"></a>          <span class='varop'>.&gt;&gt;</span>
+<a name="line-329"></a>	  <span class='varid'>substRefsInEntityValue</span>
+<a name="line-330"></a>          <span class='varop'>.&gt;&gt;</span>
+<a name="line-331"></a>	  <span class='varid'>processEntityDecl</span>
+<a name="line-332"></a>          <span class='varop'>.&gt;&gt;</span>
+<a name="line-333"></a>          <span class='varid'>traceDTD</span> <span class='layout'>(</span><span class='str'>"ENTITY declaration after DTD declaration parsing"</span><span class='layout'>)</span>
+<a name="line-334"></a>          <span class='varop'>$</span> <span class='varid'>n</span>
+<a name="line-335"></a>
+<a name="line-336"></a>    <span class='keyglyph'>|</span> <span class='varid'>isDTDElemNode</span> <span class='conid'>PEREF</span> <span class='varid'>xn</span>					<span class='comment'>-- parameter entity ref in DTD</span>
+<a name="line-337"></a>	<span class='keyglyph'>=</span> <span class='varid'>substPeRefsInDTDpart</span> <span class='conid'>[]</span> <span class='varid'>n</span>
+<a name="line-338"></a>
+<a name="line-339"></a>    <span class='keyglyph'>|</span> <span class='varid'>isDTDElemNode</span> <span class='conid'>ELEMENT</span> <span class='varid'>xn</span>					<span class='comment'>-- ELEMENT, ATTLIST, NOTATION</span>
+<a name="line-340"></a>      <span class='varop'>||</span>
+<a name="line-341"></a>      <span class='varid'>isDTDElemNode</span> <span class='conid'>ATTLIST</span> <span class='varid'>xn</span>
+<a name="line-342"></a>      <span class='varop'>||</span>
+<a name="line-343"></a>      <span class='varid'>isDTDElemNode</span> <span class='conid'>NOTATION</span> <span class='varid'>xn</span>
+<a name="line-344"></a>	<span class='keyglyph'>=</span> <span class='varid'>traceDTD</span>  <span class='str'>"DTD declaration before PE substitution"</span>
+<a name="line-345"></a>	  <span class='varop'>.&gt;&gt;</span>
+<a name="line-346"></a>	  <span class='varid'>processChildrenM</span> <span class='layout'>(</span><span class='varid'>substPeRefsInDTDdecl</span> <span class='conid'>[]</span><span class='layout'>)</span>
+<a name="line-347"></a>          <span class='varop'>.&gt;&gt;</span>
+<a name="line-348"></a>	  <span class='varid'>liftF</span> <span class='varid'>parseXmlDTDdecl</span>
+<a name="line-349"></a>          <span class='varop'>.&gt;&gt;</span>
+<a name="line-350"></a>	  <span class='varid'>traceDTD</span> <span class='str'>"DTD declaration after DTD declaration parsing"</span>
+<a name="line-351"></a>	  <span class='varop'>$</span> <span class='varid'>n</span>
+<a name="line-352"></a>
+<a name="line-353"></a>    <span class='keyglyph'>|</span> <span class='varid'>isDTDElemNode</span> <span class='conid'>CONDSECT</span> <span class='varid'>xn</span>					<span class='comment'>-- conditional section</span>
+<a name="line-354"></a>      <span class='varop'>&amp;&amp;</span>
+<a name="line-355"></a>      <span class='varid'>loc</span> <span class='varop'>==</span> <span class='conid'>Internal</span>
+<a name="line-356"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-357"></a>	    <span class='varid'>issueErr</span> <span class='str'>"conditional sections in internal part of the DTD is not allowed"</span> <span class='varid'>n</span>
+<a name="line-358"></a>            <span class='varid'>return</span> <span class='conid'>[]</span>
+<a name="line-359"></a>
+<a name="line-360"></a>    <span class='keyglyph'>|</span> <span class='varid'>isDTDElemNode</span> <span class='conid'>CONDSECT</span> <span class='varid'>xn</span>					<span class='comment'>-- conditional section</span>
+<a name="line-361"></a>      <span class='varop'>&amp;&amp;</span>
+<a name="line-362"></a>      <span class='varid'>loc</span> <span class='varop'>==</span> <span class='conid'>External</span>
+<a name="line-363"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>let</span>
+<a name="line-364"></a>	    <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='keyword'>_</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>xn</span>
+<a name="line-365"></a>	    <span class='varid'>content</span>	<span class='keyglyph'>=</span> <span class='varid'>mkXTextTree</span> <span class='layout'>(</span><span class='varid'>lookup1</span> <span class='varid'>a_value</span> <span class='varid'>al</span><span class='layout'>)</span>
+<a name="line-366"></a>	    <span class='keyword'>in</span>
+<a name="line-367"></a>	    <span class='varid'>traceDTD</span> <span class='str'>"substParamEntity: process conditional section"</span>
+<a name="line-368"></a>	    <span class='varop'>.&gt;&gt;</span>
+<a name="line-369"></a>	    <span class='varid'>processChildrenM</span> <span class='layout'>(</span><span class='varid'>substPeRefsInCondSect</span> <span class='conid'>[]</span><span class='layout'>)</span>
+<a name="line-370"></a>            <span class='varop'>.&gt;&gt;</span>
+<a name="line-371"></a>	    <span class='varid'>liftF</span> <span class='varid'>parseXmlDTDdecl</span>
+<a name="line-372"></a>	    <span class='varop'>.&gt;&gt;</span>
+<a name="line-373"></a>            <span class='varid'>evalCond</span> <span class='varid'>content</span>
+<a name="line-374"></a>	    <span class='varop'>$</span> <span class='varid'>n</span>
+<a name="line-375"></a>
+<a name="line-376"></a>    <span class='keyglyph'>|</span> <span class='varid'>isXCmtNode</span> <span class='varid'>xn</span>						<span class='comment'>-- remove comments</span>
+<a name="line-377"></a>	<span class='keyglyph'>=</span> <span class='varid'>noneM</span> <span class='varid'>n</span>
+<a name="line-378"></a>
+<a name="line-379"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>							<span class='comment'>-- default: keep things unchanged (should not occur)</span>
+<a name="line-380"></a>	<span class='keyglyph'>=</span> <span class='varid'>thisM</span> <span class='varid'>n</span>
+<a name="line-381"></a>    <span class='keyword'>where</span>
+<a name="line-382"></a>
+<a name="line-383"></a>    <span class='varid'>processEntityDecl</span>	<span class='keyglyph'>::</span> <span class='conid'>DTDStateFilter</span>
+<a name="line-384"></a>    <span class='varid'>processEntityDecl</span> <span class='varid'>n'</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ENTITY</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>isExtern</span>
+<a name="line-385"></a>	  <span class='keyword'>then</span> <span class='layout'>(</span> <span class='keyword'>do</span>
+<a name="line-386"></a>		 <span class='varid'>url</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getAbsolutURI</span> <span class='varid'>sysVal</span>			<span class='comment'>-- add the absolute URI</span>
+<a name="line-387"></a>		 <span class='varid'>return</span> <span class='keyglyph'>[</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ENTITY</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>a_url</span><span class='layout'>,</span> <span class='varid'>url</span><span class='layout'>)</span> <span class='conop'>:</span> <span class='varid'>al</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='keyglyph'>]</span>
+<a name="line-388"></a>	       <span class='layout'>)</span>
+<a name="line-389"></a>	  <span class='keyword'>else</span> <span class='varid'>liftMf</span> <span class='layout'>(</span><span class='varid'>substChildren</span> <span class='layout'>(</span><span class='varid'>xmlTreesToText</span> <span class='varop'>.</span> <span class='varid'>getChildren</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>n'</span>
+<a name="line-390"></a>	<span class='keyword'>where</span>
+<a name="line-391"></a>	<span class='varid'>isExtern</span> <span class='keyglyph'>=</span> <span class='varid'>hasEntry</span> <span class='varid'>k_system</span> <span class='varid'>al</span>
+<a name="line-392"></a>	<span class='varid'>sysVal</span>   <span class='keyglyph'>=</span> <span class='varid'>lookup1</span>  <span class='varid'>k_system</span> <span class='varid'>al</span>
+<a name="line-393"></a>      
+<a name="line-394"></a>    <span class='varid'>processEntityDecl</span> <span class='varid'>n'</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>PENTITY</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-395"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-396"></a>	  <span class='varid'>env</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getState</span>
+<a name="line-397"></a>	  <span class='keyword'>if</span> <span class='layout'>(</span><span class='varid'>isJust</span> <span class='varop'>.</span> <span class='varid'>lookupPeEnv</span> <span class='varid'>peName</span><span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>env</span>
+<a name="line-398"></a>	     <span class='keyword'>then</span>
+<a name="line-399"></a>	     <span class='varid'>issueWarn</span> <span class='layout'>(</span><span class='str'>"parameter entity "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>peName</span> <span class='varop'>++</span> <span class='str'>" already defined"</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-400"></a>	     <span class='keyword'>else</span>
+<a name="line-401"></a>	     <span class='layout'>(</span> <span class='varid'>ifM</span> <span class='varid'>isExternalParameterEntity</span>
+<a name="line-402"></a>	           <span class='layout'>(</span> <span class='varid'>runInLocalURIContext</span> <span class='varid'>getExternalParamEntityValue</span> <span class='layout'>)</span>
+<a name="line-403"></a>                   <span class='layout'>(</span> <span class='varid'>liftMf</span> <span class='layout'>(</span><span class='varid'>substChildren</span> <span class='layout'>(</span><span class='varid'>xmlTreesToText</span> <span class='varop'>.</span> <span class='varid'>getChildren</span><span class='layout'>)</span><span class='layout'>)</span> <span class='layout'>)</span>
+<a name="line-404"></a>	       <span class='varop'>.&gt;&gt;</span>
+<a name="line-405"></a>	       <span class='varid'>addPE</span> <span class='varid'>peName</span>
+<a name="line-406"></a>	     <span class='layout'>)</span> <span class='varid'>n'</span>
+<a name="line-407"></a>	  <span class='keyword'>where</span>
+<a name="line-408"></a>	  <span class='varid'>peName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al</span>
+<a name="line-409"></a>
+<a name="line-410"></a>    <span class='varid'>processEntityDecl</span> <span class='varid'>n'</span>
+<a name="line-411"></a>	<span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"processEntityDecl called with wrong argument"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n'</span><span class='layout'>)</span>
+<a name="line-412"></a>
+<a name="line-413"></a>    <span class='varid'>addPE</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>DTDStateFilter</span>
+<a name="line-414"></a>    <span class='varid'>addPE</span> <span class='varid'>name</span> <span class='varid'>t</span>
+<a name="line-415"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-416"></a>	  <span class='varid'>trace</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"substParamEntity: add entity to env: "</span> <span class='varop'>++</span> <span class='varid'>xshow</span> <span class='keyglyph'>[</span><span class='varid'>t</span><span class='keyglyph'>]</span><span class='layout'>)</span>
+<a name="line-417"></a>	  <span class='varid'>changeState</span> <span class='varop'>$</span> <span class='varid'>addPeEntry</span> <span class='varid'>name</span> <span class='varid'>t</span>
+<a name="line-418"></a>	  <span class='varid'>return</span> <span class='conid'>[]</span>
+<a name="line-419"></a>
+<a name="line-420"></a>    <span class='varid'>substPEref</span>	<span class='keyglyph'>::</span> <span class='conid'>DTDStateFilter</span>
+<a name="line-421"></a>    <span class='varid'>substPEref</span> <span class='varid'>n'</span>
+<a name="line-422"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-423"></a>	  <span class='varid'>env</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getState</span>
+<a name="line-424"></a>	  <span class='varid'>liftF</span> <span class='layout'>(</span><span class='varid'>substPEref'</span> <span class='varid'>loc</span> <span class='varid'>env</span><span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>n'</span>
+<a name="line-425"></a>
+<a name="line-426"></a>    <span class='varid'>substPeRefsInValue</span>	<span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>DTDStateFilter</span>
+<a name="line-427"></a>    <span class='varid'>substPeRefsInValue</span> <span class='varid'>recList</span> <span class='varid'>n'</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>PEREF</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='sel'>_cl</span><span class='layout'>)</span>
+<a name="line-428"></a>	<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>peName</span> <span class='varop'>`elem`</span> <span class='varid'>recList</span>
+<a name="line-429"></a>	    <span class='keyword'>then</span> <span class='varid'>issueErr</span> <span class='layout'>(</span><span class='str'>"recursive call of parameter entity "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>peName</span> <span class='varop'>++</span> <span class='str'>" in entity value"</span><span class='layout'>)</span>
+<a name="line-430"></a>	    <span class='keyword'>else</span> <span class='layout'>(</span> <span class='varid'>substPEref</span>
+<a name="line-431"></a>		   <span class='varop'>.&gt;&gt;</span>
+<a name="line-432"></a>		   <span class='varid'>liftF</span> <span class='varid'>parseXmlDTDEntityValue</span>
+<a name="line-433"></a>		   <span class='varop'>.&gt;&gt;</span>
+<a name="line-434"></a>		   <span class='varid'>liftF</span> <span class='varid'>transfCharRef</span>
+<a name="line-435"></a>		   <span class='varop'>.&gt;&gt;</span>
+<a name="line-436"></a>		   <span class='layout'>(</span> <span class='varid'>substPeRefsInValue</span> <span class='layout'>(</span><span class='varid'>peName</span> <span class='conop'>:</span> <span class='varid'>recList</span><span class='layout'>)</span>
+<a name="line-437"></a>		     <span class='varop'>`whenM`</span>
+<a name="line-438"></a>		     <span class='varid'>isPeRef</span>
+<a name="line-439"></a>		   <span class='layout'>)</span>
+<a name="line-440"></a>		 <span class='layout'>)</span>
+<a name="line-441"></a>	  <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>n'</span>
+<a name="line-442"></a>	<span class='keyword'>where</span>
+<a name="line-443"></a>	<span class='varid'>peName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_peref</span> <span class='varid'>al</span>
+<a name="line-444"></a>
+<a name="line-445"></a>    <span class='varid'>substPeRefsInValue</span> <span class='keyword'>_</span> <span class='varid'>n'</span>
+<a name="line-446"></a>	<span class='keyglyph'>=</span> <span class='varid'>thisM</span> <span class='varid'>n'</span>
+<a name="line-447"></a>
+<a name="line-448"></a>    <span class='varid'>substRefsInEntityValue</span>	<span class='keyglyph'>::</span> <span class='conid'>DTDStateFilter</span>
+<a name="line-449"></a>    <span class='varid'>substRefsInEntityValue</span> <span class='varid'>n'</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='varid'>decl</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='sel'>_cl</span><span class='layout'>)</span>
+<a name="line-450"></a>	<span class='keyglyph'>|</span> <span class='varid'>decl</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='conid'>ENTITY</span><span class='layout'>,</span> <span class='conid'>PENTITY</span><span class='keyglyph'>]</span>
+<a name="line-451"></a>	    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>hasEntry</span> <span class='varid'>k_system</span> <span class='varid'>al</span>
+<a name="line-452"></a>		<span class='keyword'>then</span> <span class='varid'>thisM</span>							<span class='comment'>-- externals not yet handled ??? really</span>
+<a name="line-453"></a>		<span class='keyword'>else</span> <span class='varid'>processChildrenM</span> <span class='layout'>(</span> <span class='varid'>liftF</span> <span class='varid'>transfCharRef</span>
+<a name="line-454"></a>					<span class='varop'>.&gt;&gt;</span>
+<a name="line-455"></a>					<span class='varid'>substPeRefsInValue</span> <span class='conid'>[]</span>
+<a name="line-456"></a>				      <span class='layout'>)</span>
+<a name="line-457"></a>	      <span class='layout'>)</span> <span class='varid'>n'</span>
+<a name="line-458"></a>    <span class='varid'>substRefsInEntityValue</span>  <span class='varid'>n'</span>
+<a name="line-459"></a>	<span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"substRefsInEntityValue called with wrong argument"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n'</span><span class='layout'>)</span>
+<a name="line-460"></a>
+<a name="line-461"></a>    <span class='varid'>runInPeContext</span>	<span class='keyglyph'>::</span> <span class='conid'>DTDStateFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>DTDStateFilter</span>
+<a name="line-462"></a>    <span class='varid'>runInPeContext</span> <span class='varid'>f</span> <span class='varid'>n'</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>PEREF</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-463"></a>	<span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='varid'>base</span>
+<a name="line-464"></a>	    <span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varid'>n'</span>
+<a name="line-465"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>
+<a name="line-466"></a>	    <span class='keyglyph'>=</span> <span class='varid'>runInNewURIContext</span> <span class='varid'>base</span> <span class='varid'>f</span> <span class='varid'>n'</span>
+<a name="line-467"></a>	<span class='keyword'>where</span>
+<a name="line-468"></a>	<span class='varid'>base</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_url</span> <span class='varid'>al</span>
+<a name="line-469"></a>
+<a name="line-470"></a>    <span class='varid'>runInPeContext</span> <span class='varid'>f</span> <span class='varid'>n'</span>
+<a name="line-471"></a>	<span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varid'>n'</span>
+<a name="line-472"></a>
+<a name="line-473"></a>    <span class='varid'>substPeRefsInDTDdecl</span>	<span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>DTDStateFilter</span>
+<a name="line-474"></a>    <span class='varid'>substPeRefsInDTDdecl</span> <span class='varid'>recList</span> <span class='varid'>n'</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>PEREF</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='sel'>_cl</span><span class='layout'>)</span>
+<a name="line-475"></a>	<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>peName</span> <span class='varop'>`elem`</span> <span class='varid'>recList</span>
+<a name="line-476"></a>	    <span class='keyword'>then</span> <span class='varid'>issueErr</span> <span class='layout'>(</span><span class='str'>"recursive call of parameter entity "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>peName</span> <span class='varop'>++</span> <span class='str'>" in DTD declaration"</span><span class='layout'>)</span>
+<a name="line-477"></a>	    <span class='keyword'>else</span> <span class='layout'>(</span> <span class='varid'>substPEref</span>
+<a name="line-478"></a>		   <span class='varop'>.&gt;&gt;</span>
+<a name="line-479"></a>		   <span class='varid'>traceDTD</span> <span class='str'>"substPeRefsInDTDdecl: parseXmlDTDdeclPart"</span>
+<a name="line-480"></a>		   <span class='varop'>.&gt;&gt;</span>
+<a name="line-481"></a>		   <span class='layout'>(</span> <span class='varid'>runInPeContext</span>
+<a name="line-482"></a>		     <span class='layout'>(</span> <span class='varid'>liftF</span> <span class='layout'>(</span> <span class='varid'>parseXmlDTDdeclPart</span> <span class='layout'>)</span>
+<a name="line-483"></a>		       <span class='varop'>.&gt;&gt;</span>
+<a name="line-484"></a>		       <span class='varid'>traceDTD</span> <span class='str'>"substPeRefsInDTDdecl: after parseXmlDTDdeclPart"</span>
+<a name="line-485"></a>		       <span class='varop'>.&gt;&gt;</span>
+<a name="line-486"></a>		       <span class='varid'>processChildrenM</span> <span class='layout'>(</span> <span class='varid'>substPeRefsInDTDdecl</span> <span class='layout'>(</span><span class='varid'>peName</span> <span class='conop'>:</span> <span class='varid'>recList</span><span class='layout'>)</span> <span class='layout'>)</span>
+<a name="line-487"></a>		     <span class='layout'>)</span>
+<a name="line-488"></a>		     <span class='varop'>`whenM`</span>
+<a name="line-489"></a>		     <span class='varid'>isPeRef</span>
+<a name="line-490"></a>		   <span class='layout'>)</span>
+<a name="line-491"></a>		 <span class='layout'>)</span>
+<a name="line-492"></a>	  <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>n'</span>
+<a name="line-493"></a>	<span class='keyword'>where</span>
+<a name="line-494"></a>	<span class='varid'>peName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_peref</span> <span class='varid'>al</span>
+<a name="line-495"></a>
+<a name="line-496"></a>    <span class='varid'>substPeRefsInDTDdecl</span> <span class='keyword'>_</span> <span class='varid'>n'</span>
+<a name="line-497"></a>	<span class='keyglyph'>=</span> <span class='varid'>thisM</span> <span class='varid'>n'</span>
+<a name="line-498"></a>
+<a name="line-499"></a>    <span class='varid'>substPeRefsInDTDpart</span>	<span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>DTDStateFilter</span>
+<a name="line-500"></a>    <span class='varid'>substPeRefsInDTDpart</span> <span class='varid'>recList</span> <span class='varid'>n'</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>PEREF</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='sel'>_cl</span><span class='layout'>)</span>
+<a name="line-501"></a>	<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>peName</span> <span class='varop'>`elem`</span> <span class='varid'>recList</span>
+<a name="line-502"></a>	    <span class='keyword'>then</span> <span class='varid'>issueErr</span> <span class='layout'>(</span><span class='str'>"recursive call of parameter entity "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>peName</span> <span class='varop'>++</span> <span class='str'>" in DTD part"</span><span class='layout'>)</span>
+<a name="line-503"></a>	    <span class='keyword'>else</span> <span class='layout'>(</span> <span class='varid'>substPEref</span>
+<a name="line-504"></a>		   <span class='varop'>.&gt;&gt;</span>
+<a name="line-505"></a>		   <span class='varid'>traceDTD</span> <span class='str'>"substPeRefsInDTDpart: parseXmlDTDPart"</span>
+<a name="line-506"></a>		   <span class='varop'>.&gt;&gt;</span>
+<a name="line-507"></a>		   <span class='varid'>runInPeContext</span>
+<a name="line-508"></a>		   <span class='layout'>(</span> <span class='varid'>liftF</span> <span class='layout'>(</span><span class='varid'>getChildren</span> <span class='varop'>.&gt;</span> <span class='varid'>parseXmlDTDPart</span> <span class='layout'>(</span><span class='str'>"parameter entity "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>peName</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-509"></a>		     <span class='varop'>.&gt;&gt;</span>
+<a name="line-510"></a>		     <span class='varid'>traceDTD</span> <span class='str'>"substPeRefsInDTDdecl: after parseXmlDTDPart"</span>
+<a name="line-511"></a>		     <span class='varop'>.&gt;&gt;</span>
+<a name="line-512"></a>		     <span class='varid'>substParamEntity</span> <span class='varid'>loc</span> <span class='comment'>-- cyclic check not yet done (peName : recList)</span>
+<a name="line-513"></a>		   <span class='layout'>)</span>
+<a name="line-514"></a>		 <span class='layout'>)</span>
+<a name="line-515"></a>	  <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>n'</span>
+<a name="line-516"></a>	<span class='keyword'>where</span>
+<a name="line-517"></a>	<span class='varid'>peName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_peref</span> <span class='varid'>al</span>
+<a name="line-518"></a>
+<a name="line-519"></a>    <span class='varid'>substPeRefsInDTDpart</span> <span class='keyword'>_</span> <span class='varid'>n'</span>
+<a name="line-520"></a>	<span class='keyglyph'>=</span> <span class='varid'>thisM</span> <span class='varid'>n'</span>
+<a name="line-521"></a>
+<a name="line-522"></a>    <span class='varid'>substPeRefsInCondSect</span>	<span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>DTDStateFilter</span>
+<a name="line-523"></a>    <span class='varid'>substPeRefsInCondSect</span> <span class='varid'>recList</span> <span class='varid'>n'</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>PEREF</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='sel'>_cl</span><span class='layout'>)</span>
+<a name="line-524"></a>	<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>peName</span> <span class='varop'>`elem`</span> <span class='varid'>recList</span>
+<a name="line-525"></a>	    <span class='keyword'>then</span> <span class='varid'>issueErr</span> <span class='layout'>(</span><span class='str'>"recursive call of parameter entity "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>peName</span> <span class='varop'>++</span> <span class='str'>" in conditional section"</span><span class='layout'>)</span>
+<a name="line-526"></a>	    <span class='keyword'>else</span> <span class='layout'>(</span> <span class='varid'>substPEref</span>
+<a name="line-527"></a>		   <span class='varop'>.&gt;&gt;</span>
+<a name="line-528"></a>		   <span class='varid'>traceDTD</span> <span class='str'>"substPeRefsInCondSect: parseXmlDTDdeclPart"</span>
+<a name="line-529"></a>		   <span class='varop'>.&gt;&gt;</span>
+<a name="line-530"></a>		   <span class='layout'>(</span> <span class='varid'>runInPeContext</span>
+<a name="line-531"></a>		     <span class='layout'>(</span> <span class='varid'>liftF</span> <span class='layout'>(</span> <span class='varid'>parseXmlDTDdeclPart</span> <span class='layout'>)</span>
+<a name="line-532"></a>		       <span class='varop'>.&gt;&gt;</span>
+<a name="line-533"></a>		       <span class='varid'>traceDTD</span> <span class='str'>"substPeRefsInCondSect: after parseXmlDTDdeclPart"</span>
+<a name="line-534"></a>		       <span class='varop'>.&gt;&gt;</span>
+<a name="line-535"></a>		       <span class='varid'>processChildrenM</span> <span class='layout'>(</span> <span class='varid'>substPeRefsInCondSect</span> <span class='layout'>(</span><span class='varid'>peName</span> <span class='conop'>:</span> <span class='varid'>recList</span><span class='layout'>)</span> <span class='layout'>)</span>
+<a name="line-536"></a>		     <span class='layout'>)</span>
+<a name="line-537"></a>		     <span class='varop'>`whenM`</span>
+<a name="line-538"></a>		     <span class='varid'>isPeRef</span>
+<a name="line-539"></a>		   <span class='layout'>)</span>
+<a name="line-540"></a>		 <span class='layout'>)</span>
+<a name="line-541"></a>	  <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>n'</span>
+<a name="line-542"></a>	<span class='keyword'>where</span>
+<a name="line-543"></a>	<span class='varid'>peName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_peref</span> <span class='varid'>al</span>
+<a name="line-544"></a>
+<a name="line-545"></a>    <span class='varid'>substPeRefsInCondSect</span> <span class='keyword'>_</span> <span class='varid'>n'</span>
+<a name="line-546"></a>	<span class='keyglyph'>=</span> <span class='varid'>thisM</span> <span class='varid'>n'</span>
+<a name="line-547"></a>
+<a name="line-548"></a>
+<a name="line-549"></a><a name="evalCond"></a><span class='definition'>evalCond</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>DTDStateFilter</span>
+<a name="line-550"></a><span class='definition'>evalCond</span> <span class='varid'>content</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='varid'>n</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-551"></a>    <span class='keyglyph'>|</span> <span class='varid'>c</span> <span class='varop'>==</span> <span class='varid'>k_include</span>
+<a name="line-552"></a>	<span class='keyglyph'>=</span> <span class='varid'>liftF</span> <span class='layout'>(</span><span class='varid'>parseXmlDTDPart</span> <span class='str'>"conditional section"</span><span class='layout'>)</span>
+<a name="line-553"></a>	  <span class='varop'>.&gt;&gt;</span>
+<a name="line-554"></a>	  <span class='varid'>traceDTD</span> <span class='str'>"evalCond: DTD part"</span>
+<a name="line-555"></a>	  <span class='varop'>.&gt;&gt;</span>
+<a name="line-556"></a>	  <span class='varid'>substParamEntity</span> <span class='conid'>External</span>
+<a name="line-557"></a>          <span class='varop'>$</span> <span class='varid'>content</span> 
+<a name="line-558"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>
+<a name="line-559"></a>	<span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='conid'>[]</span>
+<a name="line-560"></a>    <span class='keyword'>where</span>
+<a name="line-561"></a>    <span class='varid'>c</span> <span class='keyglyph'>=</span> <span class='varid'>textOfXNode</span> <span class='varid'>n</span>
+<a name="line-562"></a>
+<a name="line-563"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-564"></a>
+<a name="line-565"></a><a name="processExternalDTD"></a><span class='definition'>processExternalDTD</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-566"></a><span class='definition'>processExternalDTD</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>DOCTYPE</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='sel'>_dtd</span><span class='layout'>)</span>
+<a name="line-567"></a>    <span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='varid'>sysVal</span>
+<a name="line-568"></a>	<span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='conid'>[]</span>
+<a name="line-569"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>
+<a name="line-570"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-571"></a>	  <span class='varid'>checkStandalone</span>
+<a name="line-572"></a>	  <span class='varid'>dtdContent</span> <span class='keyglyph'>&lt;-</span> <span class='layout'>(</span> <span class='varid'>getXmlEntityContents</span>
+<a name="line-573"></a>			  <span class='varop'>.&gt;&gt;</span>
+<a name="line-574"></a>			  <span class='varid'>traceMsg</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"processExternalDTD: parsing DTD part for "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>sysVal</span><span class='layout'>)</span>
+<a name="line-575"></a>			  <span class='varop'>.&gt;&gt;</span>
+<a name="line-576"></a>			  <span class='varid'>liftMf</span> <span class='varid'>getChildren</span>
+<a name="line-577"></a>			  <span class='varop'>.&gt;&gt;</span>
+<a name="line-578"></a>			  <span class='varid'>liftF</span> <span class='layout'>(</span><span class='varid'>parseXmlDTDPart</span> <span class='varid'>sysVal</span><span class='layout'>)</span>
+<a name="line-579"></a>			<span class='layout'>)</span>
+<a name="line-580"></a>		       <span class='varop'>$</span> <span class='varid'>newDocument</span> <span class='varid'>sysVal</span>
+<a name="line-581"></a>	  <span class='varid'>trace</span> <span class='num'>2</span> <span class='str'>"processExternalDTD: parsing DTD part done"</span>
+<a name="line-582"></a>	  <span class='varid'>traceTree</span> <span class='varop'>$</span> <span class='varid'>mkRootTree</span> <span class='conid'>[]</span> <span class='varid'>dtdContent</span>
+<a name="line-583"></a>	  <span class='varid'>return</span> <span class='varid'>dtdContent</span>
+<a name="line-584"></a>    <span class='keyword'>where</span>
+<a name="line-585"></a>    <span class='varid'>sysVal</span>		<span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>k_system</span> <span class='varid'>al</span>
+<a name="line-586"></a>    <span class='varid'>checkStandalone</span>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-587"></a>			  <span class='sel'>_isAlone</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>isStandaloneDocument</span>
+<a name="line-588"></a>			  <span class='keyword'>if</span> <span class='conid'>False</span> <span class='comment'>-- isAlone</span>
+<a name="line-589"></a>			     <span class='keyword'>then</span> <span class='varid'>issueErr</span> <span class='layout'>(</span><span class='str'>"external DTD "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>sysVal</span> <span class='varop'>++</span> <span class='str'>" specified for standalone document"</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-590"></a>			     <span class='keyword'>else</span> <span class='varid'>return</span> <span class='conid'>[]</span>
+<a name="line-591"></a>
+<a name="line-592"></a><span class='definition'>processExternalDTD</span>  <span class='keyword'>_</span>
+<a name="line-593"></a>    <span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='conid'>[]</span>
+<a name="line-594"></a>
+<a name="line-595"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-596"></a><span class='comment'>-- |</span>
+<a name="line-597"></a><span class='comment'>-- merge the external and the internal part of a DTD into one internal part.</span>
+<a name="line-598"></a><span class='comment'>-- parameter entity substitution should be made before applying this filter</span>
+<a name="line-599"></a><span class='comment'>-- internal definitions shadow external ones</span>
+<a name="line-600"></a><span class='comment'>--</span>
+<a name="line-601"></a><span class='comment'>--</span>
+<a name="line-602"></a><span class='comment'>-- preliminary: no real merge is done</span>
+<a name="line-603"></a>
+<a name="line-604"></a><a name="mergeDTDs"></a><span class='definition'>mergeDTDs</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-605"></a><span class='definition'>mergeDTDs</span> <span class='varid'>dtdInt</span> <span class='varid'>dtdExt</span>
+<a name="line-606"></a>    <span class='keyglyph'>=</span> <span class='varid'>dtdInt</span> <span class='varop'>++</span> <span class='layout'>(</span><span class='varid'>mergeDTDentry</span> <span class='varid'>dtdInt</span> <span class='varop'>$$</span> <span class='varid'>dtdExt</span><span class='layout'>)</span>
+<a name="line-607"></a>
+<a name="line-608"></a><a name="mergeDTDentry"></a><span class='definition'>mergeDTDentry</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-609"></a><span class='definition'>mergeDTDentry</span> <span class='varid'>dtdPart</span>
+<a name="line-610"></a>    <span class='keyglyph'>=</span> <span class='varid'>none</span> <span class='varop'>`when`</span> <span class='varid'>found</span>
+<a name="line-611"></a>      <span class='keyword'>where</span>
+<a name="line-612"></a>      <span class='varid'>filterList</span> <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='varid'>filterDTDNode</span> <span class='varid'>dtdPart</span>	<span class='comment'>-- construct the list of filters</span>
+<a name="line-613"></a>      <span class='varid'>found</span>      <span class='keyglyph'>=</span> <span class='varid'>cat</span> <span class='varid'>filterList</span>		<span class='comment'>-- concatenate the filters (set union)</span>
+<a name="line-614"></a>
+<a name="line-615"></a>
+<a name="line-616"></a><a name="filterDTDNode"></a><span class='definition'>filterDTDNode</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-617"></a>
+<a name="line-618"></a><span class='definition'>filterDTDNode</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='varid'>dtdElem</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-619"></a>    <span class='keyglyph'>|</span> <span class='varid'>dtdElem</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='conid'>ELEMENT</span><span class='layout'>,</span> <span class='conid'>NOTATION</span><span class='layout'>,</span> <span class='conid'>ENTITY</span><span class='keyglyph'>]</span>
+<a name="line-620"></a>	<span class='keyglyph'>=</span> <span class='varid'>filterElement</span>
+<a name="line-621"></a>	  <span class='keyword'>where</span>
+<a name="line-622"></a>	  <span class='varid'>filterElement</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='varid'>dtdElem'</span> <span class='varid'>al'</span><span class='layout'>)</span> <span class='sel'>_cl'</span><span class='layout'>)</span>
+<a name="line-623"></a>	      <span class='keyglyph'>|</span> <span class='varid'>dtdElem</span> <span class='varop'>==</span> <span class='varid'>dtdElem'</span> <span class='varop'>&amp;&amp;</span>
+<a name="line-624"></a>		<span class='varid'>lookup</span> <span class='varid'>a_name</span> <span class='varid'>al'</span> <span class='varop'>==</span> <span class='varid'>lookup</span> <span class='varid'>a_name</span> <span class='varid'>al</span>
+<a name="line-625"></a>		  <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>n</span><span class='keyglyph'>]</span>
+<a name="line-626"></a>	      <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>
+<a name="line-627"></a>		  <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-628"></a>	  <span class='varid'>filterElement</span> <span class='keyword'>_</span>
+<a name="line-629"></a>	      <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-630"></a>
+<a name="line-631"></a><span class='definition'>filterDTDNode</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-632"></a>    <span class='keyglyph'>=</span> <span class='varid'>filterAttlist</span>
+<a name="line-633"></a>      <span class='keyword'>where</span>
+<a name="line-634"></a>      <span class='varid'>filterAttlist</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al'</span><span class='layout'>)</span> <span class='sel'>_cl'</span><span class='layout'>)</span>
+<a name="line-635"></a>	  <span class='keyglyph'>|</span> <span class='varid'>lookup</span> <span class='varid'>a_name</span>  <span class='varid'>al'</span> <span class='varop'>==</span> <span class='varid'>lookup</span> <span class='varid'>a_name</span>  <span class='varid'>al</span> <span class='varop'>&amp;&amp;</span>
+<a name="line-636"></a>	    <span class='varid'>lookup</span> <span class='varid'>a_value</span> <span class='varid'>al'</span> <span class='varop'>==</span> <span class='varid'>lookup</span> <span class='varid'>a_value</span> <span class='varid'>al</span>
+<a name="line-637"></a>		<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>n</span><span class='keyglyph'>]</span>
+<a name="line-638"></a>      <span class='varid'>filterAttlist</span> <span class='keyword'>_</span>
+<a name="line-639"></a>	  <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-640"></a>
+<a name="line-641"></a><span class='definition'>filterDTDNode</span> <span class='keyword'>_</span>
+<a name="line-642"></a>    <span class='keyglyph'>=</span>  <span class='varid'>none</span>
+<a name="line-643"></a>
+<a name="line-644"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-645"></a>
+<a name="line-646"></a><a name="predefinedEntities"></a><span class='definition'>predefinedEntities</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>
+<a name="line-647"></a><span class='definition'>predefinedEntities</span>
+<a name="line-648"></a>    <span class='keyglyph'>=</span> <span class='varid'>concat</span> <span class='keyglyph'>[</span> <span class='str'>"&lt;!ENTITY lt   '&amp;#38;#60;'&gt;"</span>
+<a name="line-649"></a>	     <span class='layout'>,</span> <span class='str'>"&lt;!ENTITY gt   '&amp;#62;'&gt;"</span>
+<a name="line-650"></a>	     <span class='layout'>,</span> <span class='str'>"&lt;!ENTITY amp  '&amp;#38;#38;'&gt;"</span>
+<a name="line-651"></a>	     <span class='layout'>,</span> <span class='str'>"&lt;!ENTITY apos '&amp;#39;'&gt;"</span>
+<a name="line-652"></a>	     <span class='layout'>,</span> <span class='str'>"&lt;!ENTITY quot '&amp;#34;'&gt;"</span>
+<a name="line-653"></a>	     <span class='keyglyph'>]</span>
+<a name="line-654"></a>
+<a name="line-655"></a><a name="predefDTDPart"></a><span class='definition'>predefDTDPart</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span>
+<a name="line-656"></a><span class='definition'>predefDTDPart</span>
+<a name="line-657"></a>    <span class='keyglyph'>=</span> <span class='varid'>parseXmlDTDPart</span> <span class='str'>"predefined entities"</span> <span class='varop'>$</span> <span class='varid'>mkXTextTree</span> <span class='varid'>predefinedEntities</span>
+<a name="line-658"></a>
+<a name="line-659"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-660"></a><span class='comment'>--</span>
+<a name="line-661"></a><span class='comment'>-- 4.4 XML Processor Treatment of General Entities and References</span>
+<a name="line-662"></a>
+<a name="line-663"></a><a name="GeContext"></a><span class='keyword'>data</span> <span class='conid'>GeContext</span>
+<a name="line-664"></a>    <span class='keyglyph'>=</span> <span class='conid'>ReferenceInContent</span>
+<a name="line-665"></a>    <span class='keyglyph'>|</span> <span class='conid'>ReferenceInAttributeValue</span>
+<a name="line-666"></a>    <span class='keyglyph'>|</span> <span class='conid'>ReferenceInEntityValue</span>
+<a name="line-667"></a>    <span class='comment'>-- or OccursInAttributeValue				-- not used during substitution but during validation</span>
+<a name="line-668"></a>    <span class='comment'>-- or ReferenceInDTD					-- not used: syntax check detects errors</span>
+<a name="line-669"></a>
+<a name="line-670"></a><a name="GeFct"></a><span class='keyword'>type</span> <span class='conid'>GeFct</span>		<span class='keyglyph'>=</span> <span class='conid'>GeContext</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RecList</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeStateFilter</span>
+<a name="line-671"></a>
+<a name="line-672"></a><a name="GeState"></a><span class='keyword'>type</span> <span class='conid'>GeState</span> <span class='varid'>res</span>	<span class='keyglyph'>=</span> <span class='conid'>XState</span> <span class='conid'>GeEnv</span> <span class='varid'>res</span>
+<a name="line-673"></a>
+<a name="line-674"></a><a name="GeStateFilter"></a><span class='keyword'>type</span> <span class='conid'>GeStateFilter</span>	<span class='keyglyph'>=</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeState</span> <span class='conid'>XmlTrees</span>
+<a name="line-675"></a>
+<a name="line-676"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-677"></a>
+<a name="line-678"></a><a name="GeEnv"></a><span class='keyword'>newtype</span> <span class='conid'>GeEnv</span>	<span class='keyglyph'>=</span> <span class='conid'>GeEnv</span> <span class='layout'>(</span><span class='conid'>M</span><span class='varop'>.</span><span class='conid'>Map</span> <span class='conid'>String</span> <span class='conid'>GeFct</span><span class='layout'>)</span>
+<a name="line-679"></a>
+<a name="line-680"></a><a name="emptyGeEnv"></a><span class='definition'>emptyGeEnv</span>	<span class='keyglyph'>::</span> <span class='conid'>GeEnv</span>
+<a name="line-681"></a><span class='definition'>emptyGeEnv</span>	<span class='keyglyph'>=</span> <span class='conid'>GeEnv</span> <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>empty</span>
+<a name="line-682"></a>
+<a name="line-683"></a><a name="lookupGeEnv"></a><span class='definition'>lookupGeEnv</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeEnv</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Maybe</span> <span class='conid'>GeFct</span>
+<a name="line-684"></a><span class='definition'>lookupGeEnv</span> <span class='varid'>k</span> <span class='layout'>(</span><span class='conid'>GeEnv</span> <span class='varid'>env</span><span class='layout'>)</span>
+<a name="line-685"></a>    <span class='keyglyph'>=</span> <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>lookup</span> <span class='varid'>k</span> <span class='varid'>env</span>
+<a name="line-686"></a>
+<a name="line-687"></a><a name="addGeEntry"></a><span class='definition'>addGeEntry</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeFct</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeEnv</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeEnv</span>
+<a name="line-688"></a><span class='definition'>addGeEntry</span> <span class='varid'>k</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='conid'>GeEnv</span> <span class='varid'>env</span><span class='layout'>)</span>
+<a name="line-689"></a>    <span class='keyglyph'>=</span> <span class='conid'>GeEnv</span> <span class='varop'>$</span> <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>insert</span> <span class='varid'>k</span> <span class='varid'>a</span> <span class='varid'>env</span>
+<a name="line-690"></a>
+<a name="line-691"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-692"></a>
+<a name="line-693"></a><span class='comment'>-- |</span>
+<a name="line-694"></a><span class='comment'>-- substitution of general entities</span>
+<a name="line-695"></a><span class='comment'>--</span>
+<a name="line-696"></a><span class='comment'>-- input: a complete document tree including root node</span>
+<a name="line-697"></a>
+<a name="line-698"></a><a name="processGeneralEntities"></a><span class='definition'>processGeneralEntities</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-699"></a><span class='definition'>processGeneralEntities</span>
+<a name="line-700"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='str'>"processGeneralEntities: collect and substitute general entities"</span>
+<a name="line-701"></a>	<span class='varop'>.&gt;&gt;</span>
+<a name="line-702"></a>	<span class='varid'>processEntities</span>
+<a name="line-703"></a>	<span class='varop'>.&gt;&gt;</span>
+<a name="line-704"></a>	<span class='varid'>checkResult</span> <span class='str'>"in general entity processing"</span>
+<a name="line-705"></a>	<span class='varop'>.&gt;&gt;</span>
+<a name="line-706"></a>	<span class='varid'>traceTree</span>
+<a name="line-707"></a>	<span class='varop'>.&gt;&gt;</span>
+<a name="line-708"></a>	<span class='varid'>traceSource</span>
+<a name="line-709"></a>      <span class='layout'>)</span>
+<a name="line-710"></a>      <span class='varop'>`whenM`</span> <span class='varid'>statusOk</span>
+<a name="line-711"></a>      <span class='keyword'>where</span>
+<a name="line-712"></a>      <span class='varid'>processEntities</span> <span class='varid'>t'</span>
+<a name="line-713"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-714"></a>	    <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>chain</span> <span class='varid'>initialEnv</span> <span class='layout'>(</span><span class='varid'>processGeneralEntity</span> <span class='conid'>ReferenceInContent</span> <span class='conid'>[]</span> <span class='varop'>$$&lt;</span> <span class='varid'>getChildren</span> <span class='varid'>t'</span><span class='layout'>)</span>
+<a name="line-715"></a>	    <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>replaceChildren</span> <span class='varid'>res</span> <span class='varid'>t'</span>
+<a name="line-716"></a>	    <span class='keyword'>where</span>
+<a name="line-717"></a>	    <span class='varid'>initialEnv</span> <span class='keyglyph'>=</span> <span class='varid'>emptyGeEnv</span>
+<a name="line-718"></a>
+<a name="line-719"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-720"></a>
+<a name="line-721"></a><a name="processGeneralEntity"></a><span class='definition'>processGeneralEntity</span>	<span class='keyglyph'>::</span> <span class='conid'>GeContext</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RecList</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeStateFilter</span>
+<a name="line-722"></a><span class='definition'>processGeneralEntity</span> <span class='varid'>cx</span> <span class='varid'>rl</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>DOCTYPE</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>dtdPart</span><span class='layout'>)</span>
+<a name="line-723"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-724"></a>      <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>processGeneralEntity</span> <span class='varid'>cx</span> <span class='varid'>rl</span> <span class='varop'>$$&lt;</span> <span class='varid'>dtdPart</span>
+<a name="line-725"></a>      <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>replaceChildren</span> <span class='varid'>res</span> <span class='varid'>n</span>
+<a name="line-726"></a>
+<a name="line-727"></a><span class='definition'>processGeneralEntity</span> <span class='varid'>cx</span> <span class='varid'>rl</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ENTITY</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cl</span><span class='layout'>)</span>
+<a name="line-728"></a>    <span class='keyglyph'>|</span> <span class='varid'>isIntern</span>
+<a name="line-729"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-730"></a>	  <span class='varid'>trace</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"processGeneralEnity: general entity definition for "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>name</span><span class='layout'>)</span>
+<a name="line-731"></a>	  <span class='varid'>value</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>liftF</span> <span class='layout'>(</span><span class='varid'>parseXmlGeneralEntityValue</span> <span class='layout'>(</span><span class='str'>"general internal entity "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>name</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>mkXTextTree</span> <span class='layout'>(</span><span class='varid'>xshow</span> <span class='varid'>cl</span><span class='layout'>)</span>
+<a name="line-732"></a>	  <span class='varid'>res</span>   <span class='keyglyph'>&lt;-</span> <span class='varid'>processGeneralEntity</span> <span class='conid'>ReferenceInEntityValue</span> <span class='layout'>(</span><span class='varid'>name</span><span class='conop'>:</span><span class='varid'>rl</span><span class='layout'>)</span> <span class='varop'>$$&lt;</span> <span class='varid'>value</span>
+<a name="line-733"></a>	  <span class='varid'>insertEntity</span> <span class='varid'>name</span> <span class='layout'>(</span><span class='varid'>substInternal</span> <span class='varid'>res</span><span class='layout'>)</span>
+<a name="line-734"></a>    <span class='keyglyph'>|</span> <span class='varid'>isExtern</span>
+<a name="line-735"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-736"></a>	  <span class='varid'>baseUri</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getBaseURI</span>
+<a name="line-737"></a>	  <span class='varid'>insertEntity</span> <span class='varid'>name</span> <span class='layout'>(</span><span class='varid'>substExternalParsed1Time</span> <span class='varid'>baseUri</span><span class='layout'>)</span>
+<a name="line-738"></a>
+<a name="line-739"></a>    <span class='keyglyph'>|</span> <span class='varid'>isUnparsed</span>
+<a name="line-740"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-741"></a>	  <span class='varid'>trace</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"processGeneralEnity: unparsed entity definition for "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>name</span><span class='layout'>)</span>
+<a name="line-742"></a>	  <span class='varid'>insertEntity</span> <span class='varid'>name</span> <span class='layout'>(</span><span class='varid'>substUnparsed</span> <span class='conid'>[]</span><span class='layout'>)</span>
+<a name="line-743"></a>    <span class='keyword'>where</span>
+<a name="line-744"></a>    <span class='varid'>isUnparsed</span>	<span class='keyglyph'>=</span> <span class='varid'>not</span> <span class='varid'>isIntern</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>not</span> <span class='varid'>isExtern</span>
+<a name="line-745"></a>    <span class='varid'>isExtern</span>	<span class='keyglyph'>=</span> <span class='varid'>not</span> <span class='varid'>isIntern</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>not</span> <span class='layout'>(</span><span class='varid'>hasEntry</span> <span class='varid'>k_ndata</span> <span class='varid'>al</span><span class='layout'>)</span>
+<a name="line-746"></a>    <span class='varid'>isIntern</span>	<span class='keyglyph'>=</span> <span class='varid'>not</span> <span class='layout'>(</span><span class='varid'>hasEntry</span> <span class='varid'>k_system</span> <span class='varid'>al</span><span class='layout'>)</span>
+<a name="line-747"></a>
+<a name="line-748"></a>    <span class='varid'>name</span>	<span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span>   <span class='varid'>al</span>
+<a name="line-749"></a>    <span class='comment'>-- sysVal	= lookup1 k_system al</span>
+<a name="line-750"></a>    <span class='varid'>url</span>		<span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_url</span>    <span class='varid'>al</span>		<span class='comment'>-- a_url contains absolut url for k_system</span>
+<a name="line-751"></a>    <span class='varid'>context</span>	<span class='keyglyph'>=</span> <span class='varid'>addEntry</span> <span class='varid'>a_source</span> <span class='varid'>url</span> <span class='varid'>al</span>
+<a name="line-752"></a>
+<a name="line-753"></a>    <span class='varid'>processExternalEntityContents</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeState</span> <span class='conid'>XmlTrees</span>
+<a name="line-754"></a>    <span class='varid'>processExternalEntityContents</span> <span class='varid'>cl'</span>
+<a name="line-755"></a>	<span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='varid'>cl'</span>						<span class='comment'>-- reading content did not succeed</span>
+<a name="line-756"></a>	    <span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='conid'>[]</span>
+<a name="line-757"></a>	<span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='varid'>txt'</span>						<span class='comment'>-- something weird in entity content</span>
+<a name="line-758"></a>	    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-759"></a>	      <span class='varid'>issueErr</span> <span class='layout'>(</span><span class='str'>"illegal external parsed entity value for entity "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-760"></a>	      <span class='varid'>return</span> <span class='conid'>[]</span>
+<a name="line-761"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>						<span class='comment'>-- o.k.: parse the contents</span>
+<a name="line-762"></a>	    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-763"></a>	      <span class='varid'>res'</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>liftF</span> <span class='layout'>(</span><span class='varid'>parseXmlGeneralEntityValue</span> <span class='layout'>(</span><span class='str'>"external parsed entity "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>name</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varop'>$$&lt;</span> <span class='varid'>txt'</span>
+<a name="line-764"></a>	      <span class='layout'>(</span> <span class='varid'>traceSource</span>
+<a name="line-765"></a>		<span class='varop'>.&gt;&gt;</span>
+<a name="line-766"></a>		<span class='varid'>traceTree</span> <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>mkRootTree</span> <span class='layout'>(</span><span class='varid'>fromAttrl</span> <span class='varid'>context</span><span class='layout'>)</span> <span class='varid'>res'</span>
+<a name="line-767"></a>	      <span class='varid'>return</span> <span class='varid'>res'</span>
+<a name="line-768"></a>	<span class='keyword'>where</span>
+<a name="line-769"></a>	<span class='varid'>txt'</span> <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>getChildren</span> <span class='varop'>.&gt;</span> <span class='varid'>isXText</span><span class='layout'>)</span> <span class='varop'>$$</span> <span class='varid'>cl'</span>
+<a name="line-770"></a>
+<a name="line-771"></a>    <span class='varid'>insertEntity</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeFct</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeState</span> <span class='conid'>XmlTrees</span>
+<a name="line-772"></a>    <span class='varid'>insertEntity</span> <span class='varid'>name'</span> <span class='varid'>fct'</span>
+<a name="line-773"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-774"></a>	  <span class='varid'>geEnv'</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getState</span>
+<a name="line-775"></a>	  <span class='keyword'>case</span> <span class='varid'>lookupGeEnv</span> <span class='varid'>name'</span> <span class='varid'>geEnv'</span> <span class='keyword'>of</span>
+<a name="line-776"></a>	    <span class='conid'>Just</span> <span class='sel'>_fct</span>
+<a name="line-777"></a>		<span class='keyglyph'>-&gt;</span> <span class='keyword'>do</span>
+<a name="line-778"></a>		   <span class='varid'>issueWarn</span> <span class='layout'>(</span><span class='str'>"entity "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>name</span> <span class='varop'>++</span> <span class='str'>" already defined, repeated definition ignored"</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-779"></a>		   <span class='varid'>return</span> <span class='conid'>[]</span>
+<a name="line-780"></a>            <span class='conid'>Nothing</span>
+<a name="line-781"></a>		<span class='keyglyph'>-&gt;</span> <span class='keyword'>do</span>
+<a name="line-782"></a>		   <span class='varid'>changeState</span> <span class='varop'>$</span> <span class='varid'>addGeEntry</span> <span class='varid'>name'</span> <span class='varid'>fct'</span> 
+<a name="line-783"></a>		   <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>this</span> <span class='varid'>n</span>
+<a name="line-784"></a>
+<a name="line-785"></a>    <span class='comment'>-- --------</span>
+<a name="line-786"></a>    <span class='comment'>--</span>
+<a name="line-787"></a>    <span class='comment'>-- 4.4 XML Processor Treatment of Entities and References</span>
+<a name="line-788"></a>
+<a name="line-789"></a>    <span class='varid'>substInternal</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeContext</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RecList</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeStateFilter</span>
+<a name="line-790"></a>    <span class='varid'>substInternal</span> <span class='varid'>nl</span> <span class='conid'>ReferenceInContent</span> <span class='varid'>rl'</span> <span class='sel'>_n'</span>
+<a name="line-791"></a>	<span class='keyglyph'>=</span> <span class='varid'>included</span> <span class='varid'>nl</span> <span class='varid'>rl'</span>
+<a name="line-792"></a>
+<a name="line-793"></a>    <span class='varid'>substInternal</span> <span class='varid'>nl</span> <span class='conid'>ReferenceInAttributeValue</span> <span class='varid'>rl'</span> <span class='sel'>_n'</span>
+<a name="line-794"></a>	<span class='keyglyph'>=</span> <span class='varid'>includedInLiteral</span> <span class='varid'>nl</span> <span class='varid'>rl'</span>
+<a name="line-795"></a>
+<a name="line-796"></a>    <span class='varid'>substInternal</span> <span class='sel'>_nl</span> <span class='conid'>ReferenceInEntityValue</span> <span class='sel'>_rl</span> <span class='varid'>n'</span>
+<a name="line-797"></a>	<span class='keyglyph'>=</span> <span class='varid'>bypassed</span> <span class='varid'>n'</span>
+<a name="line-798"></a>
+<a name="line-799"></a>    <span class='comment'>-- --------</span>
+<a name="line-800"></a>
+<a name="line-801"></a>    <span class='varid'>substExternalParsed1Time</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeContext</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RecList</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeStateFilter</span>
+<a name="line-802"></a>    <span class='varid'>substExternalParsed1Time</span> <span class='varid'>baseUri'</span> <span class='varid'>cx'</span> <span class='varid'>rl'</span> <span class='varid'>n'</span>
+<a name="line-803"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-804"></a>	  <span class='varid'>trace</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"substExternalParsed1Time: read and parse external parsed entity "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>name</span><span class='layout'>)</span>
+<a name="line-805"></a>	  <span class='varid'>res</span>  <span class='keyglyph'>&lt;-</span> <span class='varid'>runInLocalURIContext</span> <span class='varid'>getContents'</span> <span class='varop'>$</span> <span class='varid'>newDocument'</span> <span class='varid'>context</span>
+<a name="line-806"></a>	  <span class='varid'>changeState</span> <span class='varop'>$</span> <span class='varid'>addGeEntry</span> <span class='varid'>name</span> <span class='layout'>(</span><span class='varid'>substExternalParsed</span> <span class='varid'>res</span><span class='layout'>)</span>
+<a name="line-807"></a>	  <span class='varid'>substExternalParsed</span> <span class='varid'>res</span> <span class='varid'>cx'</span> <span class='varid'>rl'</span> <span class='varid'>n'</span> 
+<a name="line-808"></a>	  <span class='keyword'>where</span>
+<a name="line-809"></a>	  <span class='varid'>getContents'</span>	<span class='keyglyph'>::</span> <span class='conid'>GeStateFilter</span>
+<a name="line-810"></a>	  <span class='varid'>getContents'</span> <span class='varid'>t''</span>
+<a name="line-811"></a>	      <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-812"></a>		<span class='varid'>setBaseURI</span> <span class='varid'>baseUri'</span>
+<a name="line-813"></a>		<span class='varid'>rs'</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getXmlEntityContents</span> <span class='varid'>t''</span>
+<a name="line-814"></a>		<span class='varid'>processExternalEntityContents</span> <span class='varid'>rs'</span>
+<a name="line-815"></a>
+<a name="line-816"></a>
+<a name="line-817"></a>    <span class='varid'>substExternalParsed</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeContext</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RecList</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeStateFilter</span>
+<a name="line-818"></a>    <span class='varid'>substExternalParsed</span>  <span class='varid'>nl</span> <span class='conid'>ReferenceInContent</span> <span class='varid'>rl'</span> <span class='sel'>_n'</span>
+<a name="line-819"></a>	<span class='keyglyph'>=</span> <span class='varid'>includedIfValidating</span> <span class='varid'>nl</span> <span class='varid'>rl'</span>
+<a name="line-820"></a>
+<a name="line-821"></a>    <span class='varid'>substExternalParsed</span> <span class='sel'>_nl</span> <span class='conid'>ReferenceInAttributeValue</span> <span class='sel'>_rl</span> <span class='sel'>_n'</span>
+<a name="line-822"></a>	<span class='keyglyph'>=</span> <span class='varid'>forbidden</span> <span class='str'>"external parsed general"</span> <span class='str'>"in attribute value"</span>
+<a name="line-823"></a>
+<a name="line-824"></a>    <span class='varid'>substExternalParsed</span> <span class='sel'>_nl</span> <span class='conid'>ReferenceInEntityValue</span> <span class='sel'>_rl</span> <span class='varid'>n'</span>
+<a name="line-825"></a>	<span class='keyglyph'>=</span> <span class='varid'>bypassed</span> <span class='varid'>n'</span>
+<a name="line-826"></a>
+<a name="line-827"></a>    <span class='comment'>-- --------</span>
+<a name="line-828"></a>
+<a name="line-829"></a>    <span class='varid'>substUnparsed</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeContext</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RecList</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeStateFilter</span>
+<a name="line-830"></a>    <span class='varid'>substUnparsed</span> <span class='sel'>_nl</span> <span class='conid'>ReferenceInContent</span> <span class='sel'>_rl</span> <span class='sel'>_n'</span>
+<a name="line-831"></a>	<span class='keyglyph'>=</span> <span class='varid'>forbidden</span> <span class='str'>"unparsed"</span> <span class='str'>"content"</span>
+<a name="line-832"></a>    <span class='varid'>substUnparsed</span> <span class='sel'>_nl</span> <span class='conid'>ReferenceInAttributeValue</span> <span class='sel'>_rl</span> <span class='sel'>_n'</span>
+<a name="line-833"></a>	<span class='keyglyph'>=</span> <span class='varid'>forbidden</span> <span class='str'>"unparsed"</span> <span class='str'>"attribute value"</span>
+<a name="line-834"></a>    <span class='varid'>substUnparsed</span> <span class='sel'>_nl</span> <span class='conid'>ReferenceInEntityValue</span> <span class='sel'>_rl</span> <span class='sel'>_n'</span>
+<a name="line-835"></a>	<span class='keyglyph'>=</span> <span class='varid'>forbidden</span> <span class='str'>"unparsed"</span> <span class='str'>"entity value"</span>
+<a name="line-836"></a>
+<a name="line-837"></a>    <span class='comment'>-- --------</span>
+<a name="line-838"></a>							<span class='comment'>-- see XML 1.0 chapter:</span>
+<a name="line-839"></a>
+<a name="line-840"></a>    <span class='varid'>included</span> <span class='varid'>nl</span>	<span class='varid'>rl'</span>					<span class='comment'>-- 4.4.2</span>
+<a name="line-841"></a>	<span class='keyglyph'>=</span> <span class='varid'>processGeneralEntity</span> <span class='varid'>cx</span> <span class='layout'>(</span><span class='varid'>name</span><span class='conop'>:</span><span class='varid'>rl'</span><span class='layout'>)</span> <span class='varop'>$$&lt;</span> <span class='varid'>nl</span>
+<a name="line-842"></a>
+<a name="line-843"></a>    <span class='varid'>includedIfValidating</span>				<span class='comment'>-- 4.4.3</span>
+<a name="line-844"></a>	<span class='keyglyph'>=</span> <span class='varid'>included</span>
+<a name="line-845"></a>
+<a name="line-846"></a>    <span class='varid'>includedInLiteral</span>					<span class='comment'>-- 4.4.5</span>
+<a name="line-847"></a>	<span class='keyglyph'>=</span> <span class='varid'>included</span>
+<a name="line-848"></a>
+<a name="line-849"></a>    <span class='varid'>bypassed</span> <span class='varid'>n'</span>						<span class='comment'>-- 4.4.7</span>
+<a name="line-850"></a>	<span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>this</span> <span class='varid'>n'</span>
+<a name="line-851"></a>
+<a name="line-852"></a>    <span class='varid'>forbidden</span> <span class='varid'>msg'</span> <span class='varid'>cx'</span>					<span class='comment'>-- 4.4.4</span>
+<a name="line-853"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-854"></a>	  <span class='varid'>issueErr</span> <span class='layout'>(</span><span class='str'>"reference of "</span> <span class='varop'>++</span> <span class='varid'>msg'</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>name</span> <span class='varop'>++</span> <span class='str'>" forbidden in "</span> <span class='varop'>++</span> <span class='varid'>cx'</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-855"></a>          <span class='varid'>return</span> <span class='conid'>[]</span>
+<a name="line-856"></a>
+<a name="line-857"></a>							<span class='comment'>-- normalize default value in ATTLIST</span>
+<a name="line-858"></a><span class='definition'>processGeneralEntity</span> <span class='sel'>_cx</span> <span class='varid'>rl</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='sel'>_cl</span><span class='layout'>)</span>
+<a name="line-859"></a>    <span class='keyglyph'>|</span> <span class='varid'>hasDefaultValue</span>
+<a name="line-860"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-861"></a>	  <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='layout'>(</span> <span class='varid'>liftF</span> <span class='layout'>(</span><span class='varid'>parseXmlAttrValue</span> <span class='str'>"default value of attribute "</span><span class='layout'>)</span>
+<a name="line-862"></a>                   <span class='varop'>.&gt;&gt;</span>
+<a name="line-863"></a>		   <span class='varid'>substGeneralEntityInAValue</span> <span class='varid'>rl</span>
+<a name="line-864"></a>		 <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>mkXTextTree</span> <span class='varid'>defaultValue</span>
+<a name="line-865"></a>	  <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>addDTDAttr</span> <span class='varid'>a_default</span> <span class='layout'>(</span><span class='varid'>xshow</span> <span class='varid'>res</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-866"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>
+<a name="line-867"></a>	<span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>this</span> <span class='varid'>n</span>
+<a name="line-868"></a>    <span class='keyword'>where</span>
+<a name="line-869"></a>    <span class='varid'>hasDefaultValue</span> <span class='keyglyph'>=</span> <span class='varid'>hasEntry</span>  <span class='varid'>a_default</span> <span class='varid'>al</span>
+<a name="line-870"></a>    <span class='varid'>defaultValue</span>    <span class='keyglyph'>=</span> <span class='varid'>lookup1</span>   <span class='varid'>a_default</span> <span class='varid'>al</span>
+<a name="line-871"></a>
+<a name="line-872"></a><span class='definition'>processGeneralEntity</span> <span class='varid'>cx</span> <span class='varid'>rl</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XEntityRef</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-873"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-874"></a>      <span class='varid'>trace</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"processGeneralEnity: entity reference for entity "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>name</span><span class='layout'>)</span>
+<a name="line-875"></a>      <span class='varid'>trace</span> <span class='num'>3</span> <span class='layout'>(</span><span class='str'>"recursion list = "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>rl</span><span class='layout'>)</span>
+<a name="line-876"></a>      <span class='varid'>geEnv</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getState</span>
+<a name="line-877"></a>      <span class='keyword'>case</span> <span class='varid'>lookupGeEnv</span> <span class='varid'>name</span> <span class='varid'>geEnv</span> <span class='keyword'>of</span>
+<a name="line-878"></a>        <span class='conid'>Just</span> <span class='varid'>fct</span>
+<a name="line-879"></a>	  <span class='keyglyph'>-&gt;</span> <span class='keyword'>if</span> <span class='varid'>name</span> <span class='varop'>`elem`</span> <span class='varid'>rl</span>
+<a name="line-880"></a>	     <span class='keyword'>then</span> <span class='keyword'>do</span>
+<a name="line-881"></a>		  <span class='varid'>issueErr</span> <span class='layout'>(</span><span class='str'>"recursive substitution of general entity reference "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>ref</span> <span class='varop'>++</span> <span class='str'>" not processed"</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-882"></a>		  <span class='varid'>return</span> <span class='varid'>nl</span>
+<a name="line-883"></a>	     <span class='keyword'>else</span> <span class='keyword'>do</span>
+<a name="line-884"></a>		  <span class='varid'>fct</span> <span class='varid'>cx</span> <span class='varid'>rl</span> <span class='varid'>n</span>
+<a name="line-885"></a>        <span class='conid'>Nothing</span>
+<a name="line-886"></a>	  <span class='keyglyph'>-&gt;</span> <span class='keyword'>do</span>
+<a name="line-887"></a>	     <span class='varid'>issueErr</span> <span class='layout'>(</span><span class='str'>"general entity reference "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>ref</span> <span class='varop'>++</span> <span class='str'>" not processed, no definition found, (forward reference?)"</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-888"></a>	     <span class='varid'>return</span> <span class='varid'>nl</span>
+<a name="line-889"></a>      <span class='keyword'>where</span>
+<a name="line-890"></a>      <span class='varid'>nl</span>  <span class='keyglyph'>=</span> <span class='varid'>this</span> <span class='varid'>n</span>
+<a name="line-891"></a>      <span class='varid'>ref</span> <span class='keyglyph'>=</span> <span class='varid'>xshow</span> <span class='varid'>nl</span>
+<a name="line-892"></a>
+<a name="line-893"></a>
+<a name="line-894"></a><span class='definition'>processGeneralEntity</span> <span class='varid'>cx</span> <span class='varid'>rl</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='sel'>_tagName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cl</span><span class='layout'>)</span>
+<a name="line-895"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-896"></a>      <span class='varid'>al'</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>substGeneralEntityInAttr</span> <span class='varid'>rl</span> <span class='varop'>$$&lt;</span> <span class='varid'>al</span>
+<a name="line-897"></a>      <span class='varid'>cl'</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>processGeneralEntity</span> <span class='varid'>cx</span> <span class='varid'>rl</span>  <span class='varop'>$$&lt;</span> <span class='varid'>cl</span>
+<a name="line-898"></a>      <span class='varid'>return</span> <span class='varop'>$</span> <span class='layout'>(</span><span class='varid'>replaceAttrl</span> <span class='varid'>al'</span> <span class='varop'>.&gt;</span> <span class='varid'>replaceChildren</span> <span class='varid'>cl'</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-899"></a>
+<a name="line-900"></a><span class='definition'>processGeneralEntity</span> <span class='sel'>_cx</span> <span class='sel'>_rl</span> <span class='varid'>n</span>
+<a name="line-901"></a>    <span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>this</span> <span class='varid'>n</span>
+<a name="line-902"></a>
+<a name="line-903"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-904"></a>
+<a name="line-905"></a><a name="substGeneralEntityInAttr"></a><span class='definition'>substGeneralEntityInAttr</span>	<span class='keyglyph'>::</span> <span class='conid'>RecList</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeState</span> <span class='conid'>XmlTrees</span>
+<a name="line-906"></a><span class='definition'>substGeneralEntityInAttr</span> <span class='varid'>rl</span> <span class='varid'>a</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XAttr</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>aValue</span><span class='layout'>)</span>
+<a name="line-907"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-908"></a>      <span class='varid'>nv</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>substGeneralEntityInAValue</span> <span class='varid'>rl</span> <span class='varop'>$$&lt;</span> <span class='varid'>aValue</span>
+<a name="line-909"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>replaceChildren</span> <span class='varid'>nv</span> <span class='varid'>a</span><span class='layout'>)</span>
+<a name="line-910"></a>
+<a name="line-911"></a><span class='definition'>substGeneralEntityInAttr</span> <span class='keyword'>_</span> <span class='keyword'>_</span>
+<a name="line-912"></a>    <span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='conid'>[]</span>
+<a name="line-913"></a>
+<a name="line-914"></a><a name="substGeneralEntityInAValue"></a><span class='definition'>substGeneralEntityInAValue</span>	<span class='keyglyph'>::</span> <span class='conid'>RecList</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>GeStateFilter</span>
+<a name="line-915"></a><span class='definition'>substGeneralEntityInAValue</span> <span class='varid'>rl</span>
+<a name="line-916"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>processGeneralEntity</span> <span class='conid'>ReferenceInAttributeValue</span> <span class='varid'>rl</span>
+<a name="line-917"></a>	<span class='varop'>`whenM`</span>
+<a name="line-918"></a>	<span class='varid'>isXEntityRef</span>
+<a name="line-919"></a>      <span class='layout'>)</span>
+<a name="line-920"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-921"></a>      <span class='varid'>liftMf</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>modifyText</span> <span class='varid'>normalizeWhiteSpace</span> <span class='varop'>`when`</span> <span class='varid'>isXText</span><span class='layout'>)</span>
+<a name="line-922"></a>	      <span class='varop'>.&gt;</span>
+<a name="line-923"></a>	      <span class='layout'>(</span><span class='varid'>transfCharRef</span> <span class='varop'>`when`</span> <span class='varid'>isXCharRef</span><span class='layout'>)</span>
+<a name="line-924"></a>	    <span class='layout'>)</span>
+<a name="line-925"></a>      <span class='keyword'>where</span>
+<a name="line-926"></a>      <span class='varid'>normalizeWhiteSpace</span>
+<a name="line-927"></a>	  <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='layout'>(</span> <span class='keyglyph'>\</span><span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='keyword'>if</span> <span class='varid'>c</span> <span class='varop'>`elem`</span> <span class='str'>"\n\t\r"</span> <span class='keyword'>then</span> <span class='chr'>' '</span> <span class='keyword'>else</span> <span class='varid'>c</span> <span class='layout'>)</span>
+<a name="line-928"></a>
+<a name="line-929"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-930"></a>
+<a name="line-931"></a>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Parser-DefaultURI.html b/doc/hxt-filter/src/Text-XML-HXT-Parser-DefaultURI.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Parser-DefaultURI.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-2"></a><span class='comment'>--</span>
+<a name="line-3"></a><span class='comment'>-- defaut uri computation</span>
+<a name="line-4"></a><span class='comment'>-- this routine is platform dependent</span>
+<a name="line-5"></a><span class='comment'>-- and must be exchanged when porting the toolbox e.g. to windows</span>
+<a name="line-6"></a>
+<a name="line-7"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>DefaultURI</span>
+<a name="line-8"></a>    <span class='layout'>(</span> <span class='varid'>setDefaultURI</span>
+<a name="line-9"></a>    <span class='layout'>)</span>
+<a name="line-10"></a>
+<a name="line-11"></a><span class='keyword'>where</span>
+<a name="line-12"></a>
+<a name="line-13"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-14"></a>
+<a name="line-15"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-16"></a>
+<a name="line-17"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>Directory</span>
+<a name="line-18"></a>    <span class='layout'>(</span> <span class='varid'>getCurrentDirectory</span>
+<a name="line-19"></a>    <span class='layout'>)</span>
+<a name="line-20"></a>
+<a name="line-21"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>URI</span>
+<a name="line-22"></a>    <span class='layout'>(</span> <span class='varid'>escapeURIChar</span>
+<a name="line-23"></a>    <span class='layout'>,</span> <span class='varid'>isUnescapedInURI</span>
+<a name="line-24"></a>    <span class='layout'>)</span>
+<a name="line-25"></a>
+<a name="line-26"></a><a name="setDefaultURI"></a><span class='definition'>setDefaultURI</span>   <span class='keyglyph'>::</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>()</span>
+<a name="line-27"></a><span class='definition'>setDefaultURI</span>
+<a name="line-28"></a>     <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-29"></a>       <span class='varid'>wd</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>io</span> <span class='varid'>getCurrentDirectory</span>
+<a name="line-30"></a>       <span class='varid'>setSysParam</span> <span class='varid'>transferDefaultURI</span> <span class='layout'>(</span><span class='str'>"file://"</span> <span class='varop'>++</span> <span class='varid'>normalize</span> <span class='varid'>wd</span> <span class='varop'>++</span> <span class='str'>"/"</span><span class='layout'>)</span>
+<a name="line-31"></a>
+<a name="line-32"></a>       <span class='keyword'>where</span>
+<a name="line-33"></a>
+<a name="line-34"></a>       <span class='comment'>-- under Windows getCurrentDirectory returns something like: "c:\path\to\file"</span>
+<a name="line-35"></a>       <span class='comment'>-- backslaches are not allowed in URIs and paths must start with a /</span>
+<a name="line-36"></a>       <span class='comment'>-- so this is transformed into "/c:/path/to/file"</span>
+<a name="line-37"></a>
+<a name="line-38"></a>       <span class='varid'>normalize</span> <span class='varid'>wd'</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='varid'>d</span> <span class='conop'>:</span> <span class='chr'>':'</span> <span class='conop'>:</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-39"></a>	   <span class='keyglyph'>|</span> <span class='varid'>d</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='chr'>'A'</span><span class='keyglyph'>..</span><span class='chr'>'Z'</span><span class='keyglyph'>]</span> <span class='varop'>||</span> <span class='varid'>d</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='chr'>'a'</span><span class='keyglyph'>..</span><span class='chr'>'z'</span><span class='keyglyph'>]</span>
+<a name="line-40"></a>	       <span class='keyglyph'>=</span> <span class='chr'>'/'</span> <span class='conop'>:</span> <span class='varid'>concatMap</span> <span class='varid'>win32ToUriChar</span> <span class='varid'>wd'</span>
+<a name="line-41"></a>       <span class='varid'>normalize</span> <span class='varid'>wd'</span>
+<a name="line-42"></a>	   <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='varid'>escapeNonUriChar</span> <span class='varid'>wd'</span>
+<a name="line-43"></a>				 
+<a name="line-44"></a>       <span class='varid'>win32ToUriChar</span> <span class='chr'>'\\'</span> <span class='keyglyph'>=</span> <span class='str'>"/"</span>
+<a name="line-45"></a>       <span class='varid'>win32ToUriChar</span> <span class='varid'>c</span>    <span class='keyglyph'>=</span> <span class='varid'>escapeNonUriChar</span> <span class='varid'>c</span>
+<a name="line-46"></a>
+<a name="line-47"></a>       <span class='varid'>escapeNonUriChar</span> <span class='varid'>c</span>  <span class='keyglyph'>=</span> <span class='varid'>escapeURIChar</span> <span class='varid'>isUnescapedInURI</span> <span class='varid'>c</span>   <span class='comment'>-- from Network.URI</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Parser-HtmlParser.html b/doc/hxt-filter/src/Text-XML-HXT-Parser-HtmlParser.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Parser-HtmlParser.html
@@ -0,0 +1,180 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-2"></a>
+<a name="line-3"></a><span class='comment'>{- |
+<a name="line-4"></a>   Module     : Text.XML.HXT.Parser.HtmlParser
+<a name="line-5"></a>   Copyright  : Copyright (C) 2005 Uwe Schmidt
+<a name="line-6"></a>   License    : MIT
+<a name="line-7"></a>
+<a name="line-8"></a>   Maintainer : Uwe Schmidt (uwe@fh-wedel.de)
+<a name="line-9"></a>   Stability  : stable
+<a name="line-10"></a>   Portability: portable
+<a name="line-11"></a>
+<a name="line-12"></a>   This parser tries to interprete everything as HTML
+<a name="line-13"></a>   no errors are emitted during parsing. If something looks
+<a name="line-14"></a>   weired, warning messages are inserted in the document tree.
+<a name="line-15"></a>  
+<a name="line-16"></a>   Module contains state filter for easy parsing and error handling
+<a name="line-17"></a>   real work is done in 'Text.XML.HXT.Parser.HtmlParsec'
+<a name="line-18"></a>
+<a name="line-19"></a>-}</span>
+<a name="line-20"></a>
+<a name="line-21"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-22"></a>
+<a name="line-23"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>HtmlParser</span>
+<a name="line-24"></a>    <span class='layout'>(</span> <span class='varid'>getHtmlDoc</span>
+<a name="line-25"></a>    <span class='layout'>,</span> <span class='varid'>parseHtmlDoc</span>
+<a name="line-26"></a>    <span class='layout'>,</span> <span class='varid'>runHtmlParser</span>
+<a name="line-27"></a>    <span class='layout'>,</span> <span class='varid'>substHtmlEntities</span>
+<a name="line-28"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>HtmlParsec</span>
+<a name="line-29"></a>    <span class='layout'>)</span>
+<a name="line-30"></a>
+<a name="line-31"></a><span class='keyword'>where</span>
+<a name="line-32"></a>
+<a name="line-33"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-34"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-35"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>HtmlParsec</span>
+<a name="line-36"></a>
+<a name="line-37"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlInput</span>
+<a name="line-38"></a>    <span class='layout'>(</span> <span class='varid'>getXmlContents</span>
+<a name="line-39"></a>    <span class='layout'>)</span>
+<a name="line-40"></a>
+<a name="line-41"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlOutput</span>
+<a name="line-42"></a>    <span class='layout'>(</span> <span class='varid'>traceTree</span>
+<a name="line-43"></a>    <span class='layout'>,</span> <span class='varid'>traceSource</span>
+<a name="line-44"></a>    <span class='layout'>,</span> <span class='varid'>traceMsg</span>
+<a name="line-45"></a>    <span class='layout'>)</span>
+<a name="line-46"></a>
+<a name="line-47"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XhtmlEntities</span>
+<a name="line-48"></a>    <span class='layout'>(</span> <span class='varid'>xhtmlEntities</span>
+<a name="line-49"></a>    <span class='layout'>)</span>
+<a name="line-50"></a>
+<a name="line-51"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-52"></a>
+<a name="line-53"></a><span class='comment'>-- |</span>
+<a name="line-54"></a><span class='comment'>-- read a document and parse it with 'parseHtmlDoc'. The main entry point of this module</span>
+<a name="line-55"></a><span class='comment'>--</span>
+<a name="line-56"></a><span class='comment'>-- The input tree must be a root tree like in '	Text.XML.HXT.Parser.MainFunctions.getXmlDoc'. The content is read with 'Text.XML.HXT.Parser.XmlInput.getXmlContents',</span>
+<a name="line-57"></a><span class='comment'>-- is parsed with 'parseHtmlDoc' and canonicalized (char refs are substituted in content and attributes,</span>
+<a name="line-58"></a><span class='comment'>-- but comment is preserved)</span>
+<a name="line-59"></a><span class='comment'>--</span>
+<a name="line-60"></a><span class='comment'>-- see also : 'Text.XML.HXT.Parser.DTDProcessing.getWellformedDoc'</span>
+<a name="line-61"></a>
+<a name="line-62"></a><a name="getHtmlDoc"></a><span class='definition'>getHtmlDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-63"></a><span class='definition'>getHtmlDoc</span>
+<a name="line-64"></a>    <span class='keyglyph'>=</span> <span class='varid'>setSystemParams</span>
+<a name="line-65"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-66"></a>      <span class='varid'>getXmlContents</span>
+<a name="line-67"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-68"></a>      <span class='varid'>parseHtmlDoc</span>
+<a name="line-69"></a>
+<a name="line-70"></a><span class='comment'>-- | The HTML parsing filter</span>
+<a name="line-71"></a><span class='comment'>--</span>
+<a name="line-72"></a><span class='comment'>-- The input is parsed with 'runHtmlParser', everything is interpreted as HTML,</span>
+<a name="line-73"></a><span class='comment'>-- if errors ocuur, the parser will try to do some meaningfull action and continues</span>
+<a name="line-74"></a><span class='comment'>-- parsing. Afterwards the entitiy references for defined for XHTML are resovled,</span>
+<a name="line-75"></a><span class='comment'>-- any unresolved reference is transformed into plain text.</span>
+<a name="line-76"></a><span class='comment'>--</span>
+<a name="line-77"></a><span class='comment'>-- Error messages</span>
+<a name="line-78"></a><span class='comment'>-- during parsing and entity resolving are added as warning nodes into the resulting tree.</span>
+<a name="line-79"></a><span class='comment'>--</span>
+<a name="line-80"></a><span class='comment'>-- The warnings are issued, if the 1. parameter noWarnings is set to True,</span>
+<a name="line-81"></a><span class='comment'>-- afterwards all are removed from the resulting tree.</span>
+<a name="line-82"></a>
+<a name="line-83"></a><a name="parseHtmlDoc"></a><span class='definition'>parseHtmlDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-84"></a><span class='definition'>parseHtmlDoc</span>
+<a name="line-85"></a>    <span class='keyglyph'>=</span> <span class='varid'>parseDoc</span>
+<a name="line-86"></a>      <span class='varop'>`whenM`</span> <span class='layout'>(</span> <span class='varid'>isRoot</span> <span class='varop'>.&gt;</span> <span class='varid'>getChildren</span> <span class='varop'>.&gt;</span> <span class='varid'>isXText</span> <span class='layout'>)</span>
+<a name="line-87"></a>      <span class='keyword'>where</span>
+<a name="line-88"></a>      <span class='varid'>parseDoc</span> <span class='varid'>t'</span>
+<a name="line-89"></a>	  <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>traceMsg</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"parseHtmlDoc: parse HTML document "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>loc</span><span class='layout'>)</span>
+<a name="line-90"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-91"></a>	      <span class='varid'>runHtmlParser</span>
+<a name="line-92"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-93"></a>	      <span class='varid'>liftMf</span> <span class='layout'>(</span><span class='varid'>processTopDown</span> <span class='varid'>substHtmlEntities</span><span class='layout'>)</span>
+<a name="line-94"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-95"></a>	      <span class='varid'>removeWarnings</span>
+<a name="line-96"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-97"></a>	      <span class='varid'>traceTree</span>
+<a name="line-98"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-99"></a>	      <span class='varid'>traceSource</span>
+<a name="line-100"></a>              <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>t'</span>
+<a name="line-101"></a>	  <span class='keyword'>where</span>
+<a name="line-102"></a>	  <span class='varid'>loc</span>    <span class='keyglyph'>=</span> <span class='varid'>valueOf</span> <span class='varid'>a_source</span> <span class='varid'>t'</span>			<span class='comment'>-- get document source uri</span>
+<a name="line-103"></a>
+<a name="line-104"></a>      <span class='varid'>removeWarnings</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-105"></a>      <span class='varid'>removeWarnings</span> <span class='varid'>t'</span>
+<a name="line-106"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>let</span>
+<a name="line-107"></a>	    <span class='varid'>noWarnings</span>  <span class='keyglyph'>=</span> <span class='varid'>not</span> <span class='layout'>(</span><span class='varid'>satisfies</span> <span class='layout'>(</span><span class='varid'>hasOption</span> <span class='varid'>a_issue_warnings</span><span class='layout'>)</span> <span class='varid'>t'</span><span class='layout'>)</span>
+<a name="line-108"></a>	    <span class='varid'>selWarnings</span> <span class='keyglyph'>=</span> <span class='varid'>deep</span>
+<a name="line-109"></a>			  <span class='layout'>(</span> <span class='varid'>choice</span> <span class='keyglyph'>[</span> <span class='varid'>isWarning</span> <span class='conop'>:-&gt;</span> <span class='varid'>this</span>
+<a name="line-110"></a>				   <span class='layout'>,</span> <span class='varid'>isXTag</span>    <span class='conop'>:-&gt;</span> <span class='layout'>(</span><span class='varid'>getAttrl</span> <span class='varop'>.&gt;</span> <span class='varid'>selWarnings</span><span class='layout'>)</span>
+<a name="line-111"></a>				   <span class='keyglyph'>]</span>
+<a name="line-112"></a>			  <span class='layout'>)</span>
+<a name="line-113"></a>	    <span class='varid'>remWarnings</span> <span class='keyglyph'>=</span> <span class='varid'>processTopDown</span>
+<a name="line-114"></a>			  <span class='layout'>(</span> <span class='varid'>choice</span> <span class='keyglyph'>[</span> <span class='varid'>isWarning</span> <span class='conop'>:-&gt;</span> <span class='varid'>none</span>
+<a name="line-115"></a>				   <span class='layout'>,</span> <span class='varid'>isXTag</span>    <span class='conop'>:-&gt;</span> <span class='layout'>(</span><span class='varid'>processAttrl</span> <span class='layout'>(</span><span class='varid'>remWarnings</span> <span class='varop'>$$</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-116"></a>				   <span class='layout'>,</span> <span class='varid'>this</span>      <span class='conop'>:-&gt;</span> <span class='varid'>this</span>
+<a name="line-117"></a>				   <span class='keyglyph'>]</span>
+<a name="line-118"></a>			  <span class='layout'>)</span>
+<a name="line-119"></a>	    <span class='varid'>warnings</span> <span class='keyglyph'>=</span> <span class='varid'>selWarnings</span> <span class='varid'>t'</span>
+<a name="line-120"></a>	    <span class='keyword'>in</span> <span class='keyword'>do</span> 
+<a name="line-121"></a>	       <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>warnings</span>
+<a name="line-122"></a>		  <span class='keyword'>then</span> <span class='varid'>thisM</span> <span class='varid'>t'</span>
+<a name="line-123"></a>		  <span class='keyword'>else</span> <span class='keyword'>do</span>
+<a name="line-124"></a>		       <span class='keyword'>if</span> <span class='varid'>noWarnings</span>
+<a name="line-125"></a>			  <span class='keyword'>then</span> <span class='varid'>return</span> <span class='conid'>[]</span>
+<a name="line-126"></a>			  <span class='keyword'>else</span> <span class='keyword'>do</span>
+<a name="line-127"></a>			       <span class='varid'>issueError</span> <span class='varop'>$$&lt;</span> <span class='varid'>warnings</span>
+<a name="line-128"></a>		       <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>remWarnings</span> <span class='varid'>t'</span><span class='layout'>)</span>
+<a name="line-129"></a>
+<a name="line-130"></a><span class='comment'>-- | The pure HTML parser, usually called via 'parseHtmlDoc'.</span>
+<a name="line-131"></a><span class='comment'>--</span>
+<a name="line-132"></a>
+<a name="line-133"></a><a name="runHtmlParser"></a><span class='definition'>runHtmlParser</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-134"></a><span class='definition'>runHtmlParser</span> <span class='varid'>t</span>
+<a name="line-135"></a>    <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>errs</span>
+<a name="line-136"></a>      <span class='keyword'>then</span> <span class='keyword'>do</span>
+<a name="line-137"></a>	   <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>replaceChildren</span> <span class='varid'>res</span> <span class='varid'>t</span><span class='layout'>)</span>
+<a name="line-138"></a>      <span class='keyword'>else</span> <span class='keyword'>do</span>
+<a name="line-139"></a>	   <span class='varid'>issueError</span> <span class='varop'>$$&lt;</span> <span class='varid'>errs</span>
+<a name="line-140"></a>	   <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>setStatus</span> <span class='varid'>c_err</span> <span class='str'>"parsing HTML"</span> <span class='varid'>t</span><span class='layout'>)</span>
+<a name="line-141"></a>      <span class='keyword'>where</span>
+<a name="line-142"></a>      <span class='varid'>res</span>  <span class='keyglyph'>=</span> <span class='varid'>getChildren</span> <span class='varop'>.&gt;</span> <span class='varid'>parseHtmlText</span> <span class='varid'>loc</span> <span class='varop'>$</span> <span class='varid'>t</span>
+<a name="line-143"></a>      <span class='varid'>errs</span> <span class='keyglyph'>=</span> <span class='varid'>isXError</span> <span class='varop'>.&gt;</span> <span class='varid'>neg</span> <span class='varid'>isWarning</span> <span class='varop'>$$</span> <span class='varid'>res</span>
+<a name="line-144"></a>      <span class='varid'>loc</span>  <span class='keyglyph'>=</span> <span class='varid'>valueOf</span> <span class='varid'>a_source</span> <span class='varid'>t</span>
+<a name="line-145"></a>
+<a name="line-146"></a>
+<a name="line-147"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-148"></a><span class='comment'>--</span>
+<a name="line-149"></a><span class='comment'>-- XHTML entities</span>
+<a name="line-150"></a>
+<a name="line-151"></a><a name="substHtmlEntities"></a><span class='definition'>substHtmlEntities</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-152"></a><span class='definition'>substHtmlEntities</span>
+<a name="line-153"></a>    <span class='keyglyph'>=</span> <span class='varid'>choice</span> <span class='keyglyph'>[</span> <span class='varid'>isXEntityRef</span>	<span class='conop'>:-&gt;</span> <span class='varid'>substEntity</span>
+<a name="line-154"></a>	     <span class='layout'>,</span> <span class='varid'>isXTag</span>		<span class='conop'>:-&gt;</span> <span class='varid'>processAttr</span> <span class='layout'>(</span><span class='varid'>processChildren</span> <span class='varid'>substHtmlEntities</span><span class='layout'>)</span>
+<a name="line-155"></a>	     <span class='layout'>,</span> <span class='varid'>this</span>		<span class='conop'>:-&gt;</span> <span class='varid'>this</span>
+<a name="line-156"></a>	     <span class='keyglyph'>]</span>
+<a name="line-157"></a>      <span class='keyword'>where</span>
+<a name="line-158"></a>      <span class='varid'>substEntity</span> <span class='varid'>t'</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XEntityRef</span> <span class='varid'>en</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-159"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>case</span> <span class='layout'>(</span><span class='varid'>lookup</span> <span class='varid'>en</span> <span class='varid'>xhtmlEntities</span><span class='layout'>)</span> <span class='keyword'>of</span>
+<a name="line-160"></a>	    <span class='conid'>Just</span> <span class='varid'>i</span>
+<a name="line-161"></a>		<span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='varid'>mkXCharRefTree</span> <span class='varid'>i</span><span class='keyglyph'>]</span>
+<a name="line-162"></a>	    <span class='conid'>Nothing</span>
+<a name="line-163"></a>		<span class='keyglyph'>-&gt;</span> <span class='varid'>xwarn</span> <span class='layout'>(</span><span class='str'>"no XHTML entity found for reference: \"&amp;"</span> <span class='varop'>++</span> <span class='varid'>en</span> <span class='varop'>++</span> <span class='str'>";\""</span><span class='layout'>)</span>
+<a name="line-164"></a>		   <span class='varop'>++</span>
+<a name="line-165"></a>		   <span class='layout'>(</span><span class='varid'>xmlTreesToText</span> <span class='keyglyph'>[</span><span class='varid'>t'</span><span class='keyglyph'>]</span><span class='layout'>)</span>
+<a name="line-166"></a>
+<a name="line-167"></a>      <span class='varid'>substEntity</span> <span class='keyword'>_</span>
+<a name="line-168"></a>	  <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='str'>"substHtmlEntities: illegal argument"</span>
+<a name="line-169"></a>
+<a name="line-170"></a><span class='comment'>-- ------------------------------------------------------------</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Parser-MainFunctions.html b/doc/hxt-filter/src/Text-XML-HXT-Parser-MainFunctions.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Parser-MainFunctions.html
@@ -0,0 +1,465 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- Simple parse functions.</span>
+<a name="line-3"></a><span class='comment'>--</span>
+<a name="line-4"></a><span class='comment'>-- the main building blocks for an application.</span>
+<a name="line-5"></a><span class='comment'>-- this module exports complex filters and functions for</span>
+<a name="line-6"></a><span class='comment'>-- common tasks for input and parsing, output and option handling.</span>
+<a name="line-7"></a><span class='comment'>--</span>
+<a name="line-8"></a>
+<a name="line-9"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>MainFunctions</span>
+<a name="line-10"></a>    <span class='layout'>(</span> <span class='varid'>getXmlDocument</span>
+<a name="line-11"></a>    <span class='layout'>,</span> <span class='varid'>putXmlDocument</span>
+<a name="line-12"></a>
+<a name="line-13"></a>    <span class='layout'>,</span> <span class='varid'>parseDocument</span>
+<a name="line-14"></a>    <span class='layout'>,</span> <span class='varid'>writeDocument</span>
+<a name="line-15"></a>    <span class='layout'>)</span>
+<a name="line-16"></a><span class='keyword'>where</span>
+<a name="line-17"></a>
+<a name="line-18"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-19"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-20"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>HtmlParser</span>
+<a name="line-21"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlInput</span>
+<a name="line-22"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlOutput</span>
+<a name="line-23"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>DTDProcessing</span>
+<a name="line-24"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>Validation</span>
+<a name="line-25"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>EditFilters</span>
+<a name="line-26"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>Namespace</span>
+<a name="line-27"></a>
+<a name="line-28"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>IO</span>
+<a name="line-29"></a>
+<a name="line-30"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-31"></a>
+<a name="line-32"></a><span class='comment'>-- |</span>
+<a name="line-33"></a><span class='comment'>-- convenient function for reading a XML document without</span>
+<a name="line-34"></a><span class='comment'>-- dealing with state monads, error messages collection and other details</span>
+<a name="line-35"></a><span class='comment'>--</span>
+<a name="line-36"></a><span class='comment'>-- getXmlDocument calls 'parseDocument' with the list of parsing options</span>
+<a name="line-37"></a><span class='comment'>-- and an url or filename as document source.</span>
+<a name="line-38"></a><span class='comment'>--</span>
+<a name="line-39"></a><span class='comment'>-- result is a triple</span>
+<a name="line-40"></a><span class='comment'>--</span>
+<a name="line-41"></a><span class='comment'>-- * the resulting document tree with a root node containing all</span>
+<a name="line-42"></a><span class='comment'>--   meta info about the document (options, status info, http header, ...)</span>
+<a name="line-43"></a><span class='comment'>--</span>
+<a name="line-44"></a><span class='comment'>-- - the list of errors and warnings</span>
+<a name="line-45"></a><span class='comment'>--</span>
+<a name="line-46"></a><span class='comment'>-- - the error level: one of 'c_ok', 'c_warn', 'c_err', 'c_fatal'</span>
+<a name="line-47"></a><span class='comment'>--</span>
+<a name="line-48"></a><span class='comment'>-- example for input (see also example in 'putXmlDocument' and example in 'writeDocument')</span>
+<a name="line-49"></a><span class='comment'>--</span>
+<a name="line-50"></a><span class='comment'>-- &gt; main :: IO ()</span>
+<a name="line-51"></a><span class='comment'>-- &gt; main</span>
+<a name="line-52"></a><span class='comment'>-- &gt;   = do</span>
+<a name="line-53"></a><span class='comment'>-- &gt;     (res, errs, rc) &lt;- getXmlDocument [] "test.xml"</span>
+<a name="line-54"></a><span class='comment'>-- &gt;     if rc &gt;= c_err</span>
+<a name="line-55"></a><span class='comment'>-- &gt;       then issueErrors errs</span>
+<a name="line-56"></a><span class='comment'>-- &gt;       else processTree res</span>
+<a name="line-57"></a><span class='comment'>-- &gt;</span>
+<a name="line-58"></a><span class='comment'>-- &gt; issueErrors :: XmlTrees -&gt; IO ()</span>
+<a name="line-59"></a><span class='comment'>-- &gt;</span>
+<a name="line-60"></a><span class='comment'>-- &gt; processTree :: XmlTree  -&gt; IO ()</span>
+<a name="line-61"></a><span class='comment'>--</span>
+<a name="line-62"></a><span class='comment'>-- for options see 'parseDocument', 'a_collect_errors' is set implicitly</span>
+<a name="line-63"></a>
+<a name="line-64"></a><a name="getXmlDocument"></a><span class='definition'>getXmlDocument</span>	<span class='keyglyph'>::</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='layout'>(</span><span class='conid'>XmlTree</span><span class='layout'>,</span> <span class='conid'>XmlTrees</span><span class='layout'>,</span> <span class='conid'>Int</span><span class='layout'>)</span>
+<a name="line-65"></a><span class='definition'>getXmlDocument</span> <span class='varid'>options</span> <span class='varid'>url</span>
+<a name="line-66"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-67"></a>      <span class='keyword'>let</span> <span class='varid'>options'</span> <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='layout'>(</span><span class='varid'>a_collect_errors</span><span class='layout'>,</span> <span class='varid'>v_1</span><span class='layout'>)</span>		<span class='comment'>-- collect errors</span>
+<a name="line-68"></a>		     <span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>a_issue_errors</span><span class='layout'>,</span>   <span class='varid'>v_0</span><span class='layout'>)</span>		<span class='comment'>-- but don't issue</span>
+<a name="line-69"></a>		     <span class='keyglyph'>]</span>					<span class='comment'>-- can be overwritten by supporting other values in options</span>
+<a name="line-70"></a>	             <span class='varop'>++</span>
+<a name="line-71"></a>		     <span class='varid'>options</span>
+<a name="line-72"></a>		     <span class='varop'>++</span>
+<a name="line-73"></a>		     <span class='keyglyph'>[</span> <span class='layout'>(</span><span class='varid'>a_source</span><span class='layout'>,</span> <span class='varid'>url</span><span class='layout'>)</span>			<span class='comment'>-- set the source url</span>
+<a name="line-74"></a>		     <span class='keyglyph'>]</span>
+<a name="line-75"></a>      <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>run'</span> <span class='varop'>$</span> <span class='varid'>parseDocument</span> <span class='varid'>options'</span> <span class='varid'>emptyRoot</span>
+<a name="line-76"></a>      <span class='keyword'>let</span> <span class='varid'>root</span> <span class='keyglyph'>=</span> <span class='varid'>head</span> <span class='varid'>res</span>
+<a name="line-77"></a>      <span class='keyword'>let</span> <span class='varid'>errs</span> <span class='keyglyph'>=</span> <span class='varid'>tail</span> <span class='varid'>res</span>
+<a name="line-78"></a>      <span class='keyword'>let</span> <span class='varid'>elvl</span> <span class='keyglyph'>=</span> <span class='varid'>intValueOf</span> <span class='varid'>a_status</span> <span class='varid'>root</span>
+<a name="line-79"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>root</span><span class='layout'>,</span> <span class='varid'>errs</span><span class='layout'>,</span> <span class='varid'>elvl</span><span class='layout'>)</span>
+<a name="line-80"></a>
+<a name="line-81"></a>
+<a name="line-82"></a><span class='comment'>-- |</span>
+<a name="line-83"></a><span class='comment'>-- the inverse operation to 'getXmlDocument'</span>
+<a name="line-84"></a><span class='comment'>--</span>
+<a name="line-85"></a><span class='comment'>-- writes a complete document tree to a file, writing can be</span>
+<a name="line-86"></a><span class='comment'>-- controlled by options, the real work is done with filter 'writeDocument'.</span>
+<a name="line-87"></a><span class='comment'>-- useful options are the options of 'writeDocument'.</span>
+<a name="line-88"></a><span class='comment'>--</span>
+<a name="line-89"></a><span class='comment'>-- result is a pair: 1.part is a list of error messages, 2. part is the return code,</span>
+<a name="line-90"></a><span class='comment'>-- the status info of the write filter</span>
+<a name="line-91"></a><span class='comment'>--</span>
+<a name="line-92"></a><span class='comment'>-- this filter is useful, when processing XML in an arbitray context in the IO monad</span>
+<a name="line-93"></a><span class='comment'>--</span>
+<a name="line-94"></a><span class='comment'>-- an example main program for such an application is:</span>
+<a name="line-95"></a><span class='comment'>--</span>
+<a name="line-96"></a><span class='comment'>-- &gt; main :: IO ()</span>
+<a name="line-97"></a><span class='comment'>-- &gt; main</span>
+<a name="line-98"></a><span class='comment'>-- &gt;   = do</span>
+<a name="line-99"></a><span class='comment'>-- &gt;     (input, readErrs, rc) &lt;- getXmlDocument [...] "test.xml"</span>
+<a name="line-100"></a><span class='comment'>-- &gt;     if rc &gt;= c_err</span>
+<a name="line-101"></a><span class='comment'>-- &gt;       then issueErrors readErrs</span>
+<a name="line-102"></a><span class='comment'>-- &gt;       else processTree input</span>
+<a name="line-103"></a><span class='comment'>-- &gt;</span>
+<a name="line-104"></a><span class='comment'>-- &gt; processTree :: XmlTree -&gt; IO ()</span>
+<a name="line-105"></a><span class='comment'>-- &gt; processTree t</span>
+<a name="line-106"></a><span class='comment'>-- &gt;   = let res = computeNewTree input</span>
+<a name="line-107"></a><span class='comment'>-- &gt;     in do</span>
+<a name="line-108"></a><span class='comment'>-- &gt;        (writeErrs, rc2) &lt;- putXmlDocument [...] "out.xml" res</span>
+<a name="line-109"></a><span class='comment'>-- &gt;        if rc2 &gt;= c_err</span>
+<a name="line-110"></a><span class='comment'>-- &gt;          then issueErrors writeErrs</span>
+<a name="line-111"></a><span class='comment'>-- &gt;          else return ()</span>
+<a name="line-112"></a><span class='comment'>-- &gt;</span>
+<a name="line-113"></a><span class='comment'>-- &gt; issueErrors :: XmlTrees -&gt; IO ()</span>
+<a name="line-114"></a><span class='comment'>-- &gt;</span>
+<a name="line-115"></a><span class='comment'>-- &gt; computeNewTree :: XmlTree -&gt; XmlTree</span>
+<a name="line-116"></a>
+<a name="line-117"></a>
+<a name="line-118"></a><a name="putXmlDocument"></a><span class='definition'>putXmlDocument</span>	<span class='keyglyph'>::</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='layout'>(</span><span class='conid'>XmlTrees</span><span class='layout'>,</span> <span class='conid'>Int</span><span class='layout'>)</span>
+<a name="line-119"></a><span class='definition'>putXmlDocument</span> <span class='varid'>options</span> <span class='varid'>fileName</span> <span class='varid'>t</span>
+<a name="line-120"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-121"></a>      <span class='keyword'>let</span> <span class='varid'>options'</span> <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='layout'>(</span><span class='varid'>a_collect_errors</span><span class='layout'>,</span> <span class='varid'>v_1</span><span class='layout'>)</span>		<span class='comment'>-- collect errors</span>
+<a name="line-122"></a>		     <span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>a_issue_errors</span><span class='layout'>,</span>   <span class='varid'>v_0</span><span class='layout'>)</span>		<span class='comment'>-- but don't issue</span>
+<a name="line-123"></a>		     <span class='keyglyph'>]</span>					<span class='comment'>-- can be overwritten by supporting other values in options</span>
+<a name="line-124"></a>	             <span class='varop'>++</span>
+<a name="line-125"></a>		     <span class='varid'>options</span>
+<a name="line-126"></a>		     <span class='varop'>++</span>
+<a name="line-127"></a>		     <span class='keyglyph'>[</span> <span class='layout'>(</span><span class='varid'>a_output_file</span><span class='layout'>,</span> <span class='varid'>fileName</span><span class='layout'>)</span>	<span class='comment'>-- set the source url</span>
+<a name="line-128"></a>		     <span class='keyglyph'>]</span>
+<a name="line-129"></a>      <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>run'</span> <span class='varop'>$</span> <span class='varid'>writeDocument</span> <span class='varid'>options'</span> <span class='varid'>t</span>
+<a name="line-130"></a>      <span class='keyword'>let</span> <span class='varid'>root</span> <span class='keyglyph'>=</span> <span class='varid'>head</span> <span class='varid'>res</span>
+<a name="line-131"></a>      <span class='keyword'>let</span> <span class='varid'>errs</span> <span class='keyglyph'>=</span> <span class='varid'>tail</span> <span class='varid'>res</span>
+<a name="line-132"></a>      <span class='keyword'>let</span> <span class='varid'>elvl</span> <span class='keyglyph'>=</span> <span class='varid'>intValueOf</span> <span class='varid'>a_status</span> <span class='varid'>root</span>
+<a name="line-133"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>errs</span><span class='layout'>,</span> <span class='varid'>elvl</span><span class='layout'>)</span>
+<a name="line-134"></a>
+<a name="line-135"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-136"></a>
+<a name="line-137"></a><span class='comment'>-- |</span>
+<a name="line-138"></a><span class='comment'>-- the main parsing filter</span>
+<a name="line-139"></a><span class='comment'>--</span>
+<a name="line-140"></a><span class='comment'>-- this filter can be configured by an option list, a list of</span>
+<a name="line-141"></a><span class='comment'>-- option name, option value pairs.</span>
+<a name="line-142"></a><span class='comment'>-- the input tree must be a possibly empty document root tree.</span>
+<a name="line-143"></a><span class='comment'>-- all the options are stored as attributes in this root node to control processing.</span>
+<a name="line-144"></a><span class='comment'>--</span>
+<a name="line-145"></a><span class='comment'>-- available options:</span>
+<a name="line-146"></a><span class='comment'>--</span>
+<a name="line-147"></a><span class='comment'>-- * 'a_parse_html': use HTML parser, else use XML parser (default)</span>
+<a name="line-148"></a><span class='comment'>--</span>
+<a name="line-149"></a><span class='comment'>-- - 'a_validate' : validate document (default), else skip validation</span>
+<a name="line-150"></a><span class='comment'>--</span>
+<a name="line-151"></a><span class='comment'>-- - 'a_check_namespaces' : check namespaces, else skip namespace processing (default)</span>
+<a name="line-152"></a><span class='comment'>--</span>
+<a name="line-153"></a><span class='comment'>-- - 'a_canonicalize' : canonicalize document (default), else skip canonicalization</span>
+<a name="line-154"></a><span class='comment'>--</span>
+<a name="line-155"></a><span class='comment'>-- - 'a_preserve_comment' : preserve comments during canonicalization, else remove comments (default)</span>
+<a name="line-156"></a><span class='comment'>--</span>
+<a name="line-157"></a><span class='comment'>-- - 'a_remove_whitespace' : remove all whitespace, used for document indentation, else skip this step (default)</span>
+<a name="line-158"></a><span class='comment'>--</span>
+<a name="line-159"></a><span class='comment'>-- - 'a_indent' : indent document by inserting whitespace, else skip this step (default)</span>
+<a name="line-160"></a><span class='comment'>--</span>
+<a name="line-161"></a><span class='comment'>-- - 'a_issue_warnings' : issue warnings, when parsing HTML (default), else ignore HTML parser warnings</span>
+<a name="line-162"></a><span class='comment'>--</span>
+<a name="line-163"></a><span class='comment'>-- - 'a_issue_errors' : issue all error messages on stderr (default), or ignore all error messages</span>
+<a name="line-164"></a><span class='comment'>--</span>
+<a name="line-165"></a><span class='comment'>-- - 'a_collect_errors' : all error messages are collected during processing and appended to the result document</span>
+<a name="line-166"></a><span class='comment'>-- 			  for further processing within the calling modules</span>
+<a name="line-167"></a><span class='comment'>--</span>
+<a name="line-168"></a><span class='comment'>-- - 'a_trace' : trace level: values: 0 -4</span>
+<a name="line-169"></a><span class='comment'>--</span>
+<a name="line-170"></a><span class='comment'>-- - 'a_proxy' : proxy for http access, e.g. www-cache:3128</span>
+<a name="line-171"></a><span class='comment'>--</span>
+<a name="line-172"></a><span class='comment'>-- - 'a_use_curl' : for http access via external programm curl, default is native HTTP access</span>
+<a name="line-173"></a><span class='comment'>--</span>
+<a name="line-174"></a><span class='comment'>-- - 'a_options_curl' : more options for external program curl</span>
+<a name="line-175"></a><span class='comment'>--</span>
+<a name="line-176"></a><span class='comment'>-- - 'a_source' : the document source url</span>
+<a name="line-177"></a><span class='comment'>--</span>
+<a name="line-178"></a><span class='comment'>-- - 'a_encoding' : default document encoding ('utf8', 'isoLatin1', 'usAscii', ...)</span>
+<a name="line-179"></a><span class='comment'>--</span>
+<a name="line-180"></a><span class='comment'>-- examples:</span>
+<a name="line-181"></a><span class='comment'>--</span>
+<a name="line-182"></a><span class='comment'>-- &gt; parseDocument [ (a_source,   "test.xml")</span>
+<a name="line-183"></a><span class='comment'>-- &gt;               , (a_validate, "0")</span>
+<a name="line-184"></a><span class='comment'>-- &gt;               , (a_encoding, isoLatin1)</span>
+<a name="line-185"></a><span class='comment'>-- &gt;               ] emptyRoot</span>
+<a name="line-186"></a><span class='comment'>--</span>
+<a name="line-187"></a><span class='comment'>-- reads document \"test.xml\" without validation and default encoding 'isoLatin1'</span>
+<a name="line-188"></a><span class='comment'>--</span>
+<a name="line-189"></a><span class='comment'>-- &gt; parseDocument [ (a_source,         "<a href="http://www.haskell.org/">http://www.haskell.org/</a>")</span>
+<a name="line-190"></a><span class='comment'>-- &gt;               , (a_parse_html,     "1")</span>
+<a name="line-191"></a><span class='comment'>-- &gt;               , (a_proxy,          "www-cache:3128")</span>
+<a name="line-192"></a><span class='comment'>-- &gt;               , (a_curl,           "1")</span>
+<a name="line-193"></a><span class='comment'>-- &gt;               , (a_issue_warnings, "0")</span>
+<a name="line-194"></a><span class='comment'>-- &gt;               ] emptyRoot</span>
+<a name="line-195"></a><span class='comment'>--</span>
+<a name="line-196"></a><span class='comment'>-- reads Haskell homepage with HTML parser ignoring any warnings and with http access via external program curl and proxy \"www-cache\" at port 3128</span>
+<a name="line-197"></a><span class='comment'>--</span>
+<a name="line-198"></a><span class='comment'>-- &gt; parseDocument [ (a_source,            "<a href="http://www.w3c.org/">http://www.w3c.org/</a>")</span>
+<a name="line-199"></a><span class='comment'>-- &gt;               , (a_parse_html,        "0")                       -- default</span>
+<a name="line-200"></a><span class='comment'>-- &gt;               , (a_validate,          "1")                       -- default</span>
+<a name="line-201"></a><span class='comment'>-- &gt;               , (a_check_namespace,   "1")</span>
+<a name="line-202"></a><span class='comment'>-- &gt;               , (a_remove_whitespace, "1")</span>
+<a name="line-203"></a><span class='comment'>-- &gt;               , (a_trace,             "2")</span>
+<a name="line-204"></a><span class='comment'>-- &gt;               ] emptyRoot</span>
+<a name="line-205"></a><span class='comment'>--</span>
+<a name="line-206"></a><span class='comment'>-- read w3c home page, validate and chech namespaces, remove whitespace between tags, trace activities with level 2</span>
+<a name="line-207"></a><span class='comment'>--</span>
+<a name="line-208"></a><span class='comment'>-- &gt; parseDocument [ (a_source,   "test.xml")</span>
+<a name="line-209"></a><span class='comment'>-- &gt;               , (a_validate,        "1")</span>
+<a name="line-210"></a><span class='comment'>-- &gt;               , (a_check_namespace, "1")</span>
+<a name="line-211"></a><span class='comment'>-- &gt;               , (a_collect_errors,  "1")</span>
+<a name="line-212"></a><span class='comment'>-- &gt;               , (a_issue_errors,    "0")</span>
+<a name="line-213"></a><span class='comment'>-- &gt;               ] emptyRoot</span>
+<a name="line-214"></a><span class='comment'>--</span>
+<a name="line-215"></a><span class='comment'>-- reads file \"test.xml\", validates it, checks namespaces, does not issue any erros</span>
+<a name="line-216"></a><span class='comment'>-- but collects errors and appends the list of errors to the single element list for the document.</span>
+<a name="line-217"></a><span class='comment'>-- this enables the calling application to define own error handlers.</span>
+<a name="line-218"></a>
+<a name="line-219"></a><a name="parseDocument"></a><span class='definition'>parseDocument</span>	<span class='keyglyph'>::</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-220"></a><span class='definition'>parseDocument</span> <span class='varid'>userOptions</span>
+<a name="line-221"></a>    <span class='keyglyph'>=</span> <span class='varid'>processDocument</span> <span class='varid'>userOptions</span> <span class='varid'>defaultOptions</span>
+<a name="line-222"></a>      <span class='layout'>(</span> <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='str'>"parseDocument: options added, start processing"</span>
+<a name="line-223"></a>	<span class='varop'>.&gt;&gt;</span>
+<a name="line-224"></a>	<span class='varid'>traceTree</span>
+<a name="line-225"></a>	<span class='varop'>.&gt;&gt;</span>
+<a name="line-226"></a>	<span class='varid'>getXmlContents</span>					<span class='comment'>-- get the content as text</span>
+<a name="line-227"></a>	<span class='varop'>.&gt;&gt;</span>
+<a name="line-228"></a>	<span class='varid'>choiceM</span>						<span class='comment'>-- select parser</span>
+<a name="line-229"></a>	<span class='keyglyph'>[</span> <span class='varid'>hasOption</span> <span class='varid'>a_parse_html</span>
+<a name="line-230"></a>		<span class='conop'>:-&gt;</span> <span class='varid'>parseHtmlDoc</span>			<span class='comment'>-- parse everything as HTML</span>
+<a name="line-231"></a>	<span class='layout'>,</span> <span class='varid'>this</span>
+<a name="line-232"></a>		<span class='conop'>:-&gt;</span> <span class='varid'>checkWellformedDoc</span>			<span class='comment'>-- parse XML and process entities</span>
+<a name="line-233"></a>	            <span class='varop'>.&gt;&gt;</span>
+<a name="line-234"></a>                    <span class='layout'>(</span> <span class='varid'>getValidatedDoc</span>			<span class='comment'>-- validate</span>
+<a name="line-235"></a>		      <span class='varop'>`whenM`</span>
+<a name="line-236"></a>		      <span class='varid'>hasOption</span> <span class='varid'>a_validate</span>
+<a name="line-237"></a>		    <span class='layout'>)</span>
+<a name="line-238"></a>	<span class='keyglyph'>]</span>
+<a name="line-239"></a>	<span class='varop'>.&gt;&gt;</span>
+<a name="line-240"></a>	<span class='layout'>(</span> <span class='varid'>propagateAndValidateNamespaces</span>			<span class='comment'>-- namespace processing</span>
+<a name="line-241"></a>	  <span class='varop'>`whenM`</span>
+<a name="line-242"></a>	  <span class='varid'>hasOption</span> <span class='varid'>a_check_namespaces</span>
+<a name="line-243"></a>	<span class='layout'>)</span>
+<a name="line-244"></a>	<span class='varop'>.&gt;&gt;</span>
+<a name="line-245"></a>	<span class='varid'>liftMf</span>						<span class='comment'>-- canonicalization</span>
+<a name="line-246"></a>	<span class='layout'>(</span> <span class='varid'>choice</span>
+<a name="line-247"></a>	  <span class='keyglyph'>[</span> <span class='varid'>hasOption</span> <span class='varid'>a_preserve_comment</span>		<span class='comment'>-- don't remove comments (in XPath required)</span>
+<a name="line-248"></a> 	  	<span class='conop'>:-&gt;</span> <span class='varid'>canonicalizeForXPath</span>
+<a name="line-249"></a>	  <span class='layout'>,</span> <span class='varid'>this</span>
+<a name="line-250"></a>		<span class='conop'>:-&gt;</span> <span class='varid'>canonicalizeAllNodes</span>		<span class='comment'>-- do normal canonicaliazion</span>
+<a name="line-251"></a>	  <span class='keyglyph'>]</span>
+<a name="line-252"></a>	  <span class='varop'>`when`</span>
+<a name="line-253"></a>	  <span class='varid'>hasOption</span> <span class='varid'>a_canonicalize</span>			<span class='comment'>-- caconicalization can be switched off</span>
+<a name="line-254"></a>	<span class='layout'>)</span>
+<a name="line-255"></a>	<span class='varop'>.&gt;&gt;</span>
+<a name="line-256"></a>	<span class='varid'>liftMf</span>
+<a name="line-257"></a>	<span class='layout'>(</span> <span class='varid'>removeDocWhiteSpace</span>				<span class='comment'>-- remove all whitespace between tags</span>
+<a name="line-258"></a>	  <span class='varop'>`when`</span>
+<a name="line-259"></a>	  <span class='varid'>hasOption</span> <span class='varid'>a_remove_whitespace</span>
+<a name="line-260"></a>	<span class='layout'>)</span>
+<a name="line-261"></a>	<span class='varop'>.&gt;&gt;</span>
+<a name="line-262"></a>	<span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='str'>"parseDocument: document processed"</span>	<span class='comment'>-- trace output</span>
+<a name="line-263"></a>	<span class='varop'>.&gt;&gt;</span>
+<a name="line-264"></a>	<span class='varid'>traceSource</span>
+<a name="line-265"></a>	<span class='varop'>.&gt;&gt;</span>
+<a name="line-266"></a>	<span class='varid'>traceTree</span>
+<a name="line-267"></a>      <span class='layout'>)</span>
+<a name="line-268"></a>    <span class='keyword'>where</span>
+<a name="line-269"></a>    <span class='varid'>defaultOptions</span>
+<a name="line-270"></a>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='layout'>(</span> <span class='varid'>a_parse_html</span><span class='layout'>,</span>		<span class='varid'>v_0</span> <span class='layout'>)</span>
+<a name="line-271"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_validate</span><span class='layout'>,</span>		<span class='varid'>v_1</span> <span class='layout'>)</span>
+<a name="line-272"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_issue_errors</span><span class='layout'>,</span>		<span class='varid'>v_1</span> <span class='layout'>)</span>
+<a name="line-273"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_issue_warnings</span><span class='layout'>,</span>		<span class='varid'>v_1</span> <span class='layout'>)</span>
+<a name="line-274"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_check_namespaces</span><span class='layout'>,</span>	<span class='varid'>v_0</span> <span class='layout'>)</span>
+<a name="line-275"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_canonicalize</span><span class='layout'>,</span>		<span class='varid'>v_1</span> <span class='layout'>)</span>
+<a name="line-276"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_preserve_comment</span><span class='layout'>,</span>	<span class='varid'>v_0</span> <span class='layout'>)</span>
+<a name="line-277"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_remove_whitespace</span><span class='layout'>,</span>	<span class='varid'>v_0</span> <span class='layout'>)</span>
+<a name="line-278"></a>	  <span class='keyglyph'>]</span>
+<a name="line-279"></a>
+<a name="line-280"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-281"></a>
+<a name="line-282"></a><a name="addOptions"></a><span class='definition'>addOptions</span>		<span class='keyglyph'>::</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-283"></a><span class='definition'>addOptions</span>
+<a name="line-284"></a>    <span class='keyglyph'>=</span> <span class='varid'>seqF</span> <span class='varop'>.</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>n</span><span class='layout'>,</span><span class='varid'>v</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>addAttr</span> <span class='varid'>n</span> <span class='varid'>v</span> <span class='layout'>)</span>
+<a name="line-285"></a>
+<a name="line-286"></a><a name="addDefaultOptions"></a><span class='definition'>addDefaultOptions</span>	<span class='keyglyph'>::</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-287"></a><span class='definition'>addDefaultOptions</span>
+<a name="line-288"></a>    <span class='keyglyph'>=</span> <span class='varid'>seqF</span> <span class='varop'>.</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>n</span><span class='layout'>,</span><span class='varid'>v</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>addAttr</span> <span class='varid'>n</span> <span class='varid'>v</span> <span class='varop'>`whenNot`</span> <span class='varid'>hasAttr</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-289"></a>
+<a name="line-290"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-291"></a>
+<a name="line-292"></a><span class='comment'>-- |</span>
+<a name="line-293"></a><span class='comment'>-- the main filter for writing documents</span>
+<a name="line-294"></a><span class='comment'>--</span>
+<a name="line-295"></a><span class='comment'>-- this filter can be configured by an option list like 'getXmlDocument'</span>
+<a name="line-296"></a><span class='comment'>--</span>
+<a name="line-297"></a><span class='comment'>-- available options are</span>
+<a name="line-298"></a><span class='comment'>--</span>
+<a name="line-299"></a><span class='comment'>-- * 'a_indent' : indent document for readability, (default: no indentation)</span>
+<a name="line-300"></a><span class='comment'>--</span>
+<a name="line-301"></a><span class='comment'>-- - 'a_remove_whitespace' : remove all redundant whitespace for shorten text (default: no removal)</span>
+<a name="line-302"></a><span class='comment'>--</span>
+<a name="line-303"></a><span class='comment'>-- - 'a_output_file' : destination file for document, default is \"-\" for stdout</span>
+<a name="line-304"></a><span class='comment'>--</span>
+<a name="line-305"></a><span class='comment'>-- - 'a_output_encoding' : encoding of document, default is 'a_encoding' or 'utf8'</span>
+<a name="line-306"></a><span class='comment'>--</span>
+<a name="line-307"></a><span class='comment'>-- - 'a_output_xml' : (default) issue XML: quote special XML chars \&gt;,\&lt;,\",\',&amp;</span>
+<a name="line-308"></a><span class='comment'>--                    add XML processing instruction</span>
+<a name="line-309"></a><span class='comment'>--                    and encode document with respect to 'a_output_encoding',</span>
+<a name="line-310"></a><span class='comment'>--                    if explizitly switched of, the plain text is issued, this is useful</span>
+<a name="line-311"></a><span class='comment'>--                    for non XML output, e.g. generated Haskell code, LaTex, Java, ...</span>
+<a name="line-312"></a><span class='comment'>--</span>
+<a name="line-313"></a><span class='comment'>-- - 'a_show_tree' : show tree representation of document (for debugging)</span>
+<a name="line-314"></a><span class='comment'>--</span>
+<a name="line-315"></a><span class='comment'>-- - 'a_show_haskell' : show Haskell representaion of document (for debugging)</span>
+<a name="line-316"></a><span class='comment'>--</span>
+<a name="line-317"></a><span class='comment'>-- - 'a_issue_errors', 'a_collect_errors' : see 'parseDocument'</span>
+<a name="line-318"></a><span class='comment'>--</span>
+<a name="line-319"></a><span class='comment'>--  a typical main program running in the XmlState monad</span>
+<a name="line-320"></a><span class='comment'>--  has the following structure:</span>
+<a name="line-321"></a><span class='comment'>--</span>
+<a name="line-322"></a><span class='comment'>-- &gt;</span>
+<a name="line-323"></a><span class='comment'>-- &gt; main :: IO ()</span>
+<a name="line-324"></a><span class='comment'>-- &gt; main</span>
+<a name="line-325"></a><span class='comment'>-- &gt;     = do</span>
+<a name="line-326"></a><span class='comment'>-- &gt;       argv &lt;- getArgs                                              -- get the commandline arguments</span>
+<a name="line-327"></a><span class='comment'>-- &gt;       (inp, outp, options) &lt;- cmdlineOpts argv                     -- and evaluate them, return a key-value list</span>
+<a name="line-328"></a><span class='comment'>-- &gt;                                                                    -- and input and output</span>
+<a name="line-329"></a><span class='comment'>-- &gt;       res  &lt;- run' $ application inp outp options $ emptyRoot      -- run the application</span>
+<a name="line-330"></a><span class='comment'>-- &gt; </span>
+<a name="line-331"></a><span class='comment'>-- &gt;       exitWith (if null res</span>
+<a name="line-332"></a><span class='comment'>-- &gt;                 then ExitFailure (-1)</span>
+<a name="line-333"></a><span class='comment'>-- &gt;                 else exitSuccess</span>
+<a name="line-334"></a><span class='comment'>-- &gt;                )</span>
+<a name="line-335"></a><span class='comment'>-- &gt;</span>
+<a name="line-336"></a><span class='comment'>-- &gt; application :: String -&gt; String -&gt; Attributes -&gt; XmlStateFilter ()</span>
+<a name="line-337"></a><span class='comment'>-- &gt; application inp outp al</span>
+<a name="line-338"></a><span class='comment'>-- &gt;   = parseDocument (al ++ [(a_source, inp)])                        -- set options and source</span>
+<a name="line-339"></a><span class='comment'>-- &gt;     .&gt;&gt;                                                            -- and parse document</span>
+<a name="line-340"></a><span class='comment'>-- &gt;     processDocument                                                -- the hard work</span>
+<a name="line-341"></a><span class='comment'>-- &gt;     .&gt;&gt;</span>
+<a name="line-342"></a><span class='comment'>-- &gt;     writeDocument [(a_output_file, outp)]                          -- issue results</span>
+<a name="line-343"></a><span class='comment'>-- &gt;     .&gt;&gt;</span>
+<a name="line-344"></a><span class='comment'>-- &gt;     checkStatus                                                    -- check errors</span>
+<a name="line-345"></a><span class='comment'>-- &gt;</span>
+<a name="line-346"></a>
+<a name="line-347"></a>
+<a name="line-348"></a><a name="writeDocument"></a><span class='definition'>writeDocument</span>	<span class='keyglyph'>::</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-349"></a><span class='definition'>writeDocument</span> <span class='varid'>userOptions</span>
+<a name="line-350"></a>    <span class='keyglyph'>=</span> <span class='varid'>processDocument</span> <span class='varid'>userOptions</span> <span class='varid'>defaultOptions</span>
+<a name="line-351"></a>      <span class='layout'>(</span> <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='str'>"writeDocument: options added, start processing"</span>
+<a name="line-352"></a>	<span class='varop'>.&gt;&gt;</span>
+<a name="line-353"></a>	<span class='varid'>liftMf</span>
+<a name="line-354"></a>	<span class='layout'>(</span> <span class='varid'>choice</span>
+<a name="line-355"></a>	  <span class='keyglyph'>[</span> <span class='varid'>hasOption</span> <span class='varid'>a_indent</span>			<span class='conop'>:-&gt;</span> <span class='varid'>indentDoc</span>			<span class='comment'>-- document indentation</span>
+<a name="line-356"></a>	  <span class='layout'>,</span> <span class='varid'>hasOption</span> <span class='varid'>a_remove_whitespace</span>	<span class='conop'>:-&gt;</span> <span class='varid'>removeDocWhiteSpace</span>		<span class='comment'>-- remove all whitespace between tags</span>
+<a name="line-357"></a>	  <span class='layout'>,</span> <span class='varid'>this</span>				<span class='conop'>:-&gt;</span> <span class='varid'>this</span>
+<a name="line-358"></a>	  <span class='keyglyph'>]</span>
+<a name="line-359"></a>	<span class='layout'>)</span>
+<a name="line-360"></a>	<span class='varop'>.&gt;&gt;</span>
+<a name="line-361"></a>	<span class='varid'>liftMf</span>
+<a name="line-362"></a>	<span class='layout'>(</span> <span class='varid'>choice</span>
+<a name="line-363"></a>	  <span class='keyglyph'>[</span> <span class='varid'>hasOption</span> <span class='varid'>a_show_tree</span>	<span class='conop'>:-&gt;</span> <span class='varid'>treeRepOfXmlDoc</span>
+<a name="line-364"></a>	  <span class='layout'>,</span> <span class='varid'>hasOption</span> <span class='varid'>a_show_haskell</span>	<span class='conop'>:-&gt;</span> <span class='varid'>haskellRepOfXmlDoc</span>
+<a name="line-365"></a>	  <span class='layout'>,</span> <span class='varid'>hasOption</span> <span class='varid'>a_output_xml</span>	<span class='conop'>:-&gt;</span> <span class='layout'>(</span> <span class='varid'>escapeXmlDoc</span>		<span class='comment'>-- escape lt, gt, amp, quot, </span>
+<a name="line-366"></a>					      <span class='varop'>.&gt;</span>
+<a name="line-367"></a>					      <span class='varid'>addXmlPiToDoc</span>		<span class='comment'>-- add &lt;?xml ... &gt; pi</span>
+<a name="line-368"></a>					      <span class='varop'>.&gt;</span>
+<a name="line-369"></a>					      <span class='varid'>unparseXmlDoc</span>		<span class='comment'>-- convert doc into text with respect to output encoding</span>
+<a name="line-370"></a>					    <span class='layout'>)</span>
+<a name="line-371"></a>	  <span class='layout'>,</span> <span class='varid'>this</span>			<span class='conop'>:-&gt;</span> <span class='varid'>this</span>
+<a name="line-372"></a>	  <span class='keyglyph'>]</span>
+<a name="line-373"></a>	<span class='layout'>)</span>
+<a name="line-374"></a>	<span class='varop'>.&gt;&gt;</span>
+<a name="line-375"></a>	<span class='varid'>writeXmlDoc</span>
+<a name="line-376"></a>	<span class='varop'>.&gt;&gt;</span>
+<a name="line-377"></a>	<span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='str'>"writeDocument: finished"</span>
+<a name="line-378"></a>      <span class='layout'>)</span>
+<a name="line-379"></a>    <span class='keyword'>where</span>
+<a name="line-380"></a>    <span class='varid'>defaultOptions</span>
+<a name="line-381"></a>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='layout'>(</span> <span class='varid'>a_output_file</span><span class='layout'>,</span>		<span class='str'>"-"</span> <span class='layout'>)</span>
+<a name="line-382"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_indent</span><span class='layout'>,</span>			<span class='varid'>v_0</span> <span class='layout'>)</span>
+<a name="line-383"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_remove_whitespace</span><span class='layout'>,</span>	<span class='varid'>v_0</span> <span class='layout'>)</span>
+<a name="line-384"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_output_xml</span><span class='layout'>,</span>		<span class='varid'>v_1</span> <span class='layout'>)</span>
+<a name="line-385"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_output_encoding</span><span class='layout'>,</span>       <span class='varid'>utf8</span> <span class='layout'>)</span>
+<a name="line-386"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_show_tree</span><span class='layout'>,</span>		<span class='varid'>v_0</span> <span class='layout'>)</span>
+<a name="line-387"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_show_haskell</span><span class='layout'>,</span>		<span class='varid'>v_0</span> <span class='layout'>)</span>
+<a name="line-388"></a>	  <span class='keyglyph'>]</span>
+<a name="line-389"></a>
+<a name="line-390"></a><a name="writeXmlDoc"></a><span class='definition'>writeXmlDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-391"></a><span class='definition'>writeXmlDoc</span> <span class='varid'>t'</span>
+<a name="line-392"></a>    <span class='keyglyph'>=</span> <span class='varid'>put</span> <span class='varid'>t'</span>
+<a name="line-393"></a>    <span class='keyword'>where</span>
+<a name="line-394"></a>    <span class='varid'>put</span>
+<a name="line-395"></a>	<span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='varid'>fn</span> <span class='varop'>||</span> <span class='varid'>fn</span> <span class='varop'>==</span> <span class='str'>"-"</span>	<span class='keyglyph'>=</span> <span class='varid'>putXmlDoc</span>
+<a name="line-396"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>		<span class='keyglyph'>=</span> <span class='varid'>putXmlDocToFile</span> <span class='varid'>fn</span>
+<a name="line-397"></a>
+<a name="line-398"></a>    <span class='varid'>fn</span> <span class='keyglyph'>=</span> <span class='varid'>xshow</span> <span class='varop'>.</span> <span class='varid'>getValue</span> <span class='varid'>a_output_file</span> <span class='varop'>$</span> <span class='varid'>t'</span>
+<a name="line-399"></a>
+<a name="line-400"></a>
+<a name="line-401"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-402"></a><span class='comment'>--</span>
+<a name="line-403"></a>
+<a name="line-404"></a><span class='comment'>-- |</span>
+<a name="line-405"></a><span class='comment'>-- wrapper filter for running a monadic filter</span>
+<a name="line-406"></a><span class='comment'>-- controlled by common options</span>
+<a name="line-407"></a><span class='comment'>--</span>
+<a name="line-408"></a><span class='comment'>-- input tree must be a complete document</span>
+<a name="line-409"></a><span class='comment'>-- parameters and default parameters can be used to contol</span>
+<a name="line-410"></a><span class='comment'>-- the filer and common tasks like error message handling</span>
+<a name="line-411"></a>
+<a name="line-412"></a><a name="processDocument"></a><span class='definition'>processDocument</span>	<span class='keyglyph'>::</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-413"></a><span class='definition'>processDocument</span> <span class='varid'>userOptions</span> <span class='varid'>defaultOptions</span> <span class='varid'>processFilter</span>
+<a name="line-414"></a>    <span class='keyglyph'>=</span> <span class='varid'>liftMf</span> <span class='varid'>isRoot</span>
+<a name="line-415"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-416"></a>      <span class='varid'>liftMf</span> <span class='layout'>(</span><span class='varid'>addOptions</span> <span class='varid'>userOptions</span>
+<a name="line-417"></a>	      <span class='varop'>.&gt;</span>
+<a name="line-418"></a>	      <span class='varid'>addOptions</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='varid'>a_status</span><span class='layout'>,</span> <span class='varid'>show</span> <span class='varid'>c_ok</span><span class='layout'>)</span><span class='keyglyph'>]</span>
+<a name="line-419"></a>	     <span class='layout'>)</span>
+<a name="line-420"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-421"></a>      <span class='varid'>liftMf</span> <span class='layout'>(</span><span class='varid'>addDefaultOptions</span> <span class='varid'>defaultOptions</span><span class='layout'>)</span>
+<a name="line-422"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-423"></a>      <span class='varid'>setSystemParams</span>							<span class='comment'>-- store options in system state</span>
+<a name="line-424"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-425"></a>      <span class='varid'>choiceM</span>
+<a name="line-426"></a>      <span class='keyglyph'>[</span> <span class='varid'>hasOption</span> <span class='varid'>a_propagate_errors</span>					<span class='comment'>-- error handling is set by calling environment</span>
+<a name="line-427"></a>		<span class='conop'>:-&gt;</span> <span class='varid'>thisM</span>
+<a name="line-428"></a>
+<a name="line-429"></a>      <span class='layout'>,</span> <span class='varid'>hasOption</span> <span class='varid'>a_collect_errors</span>
+<a name="line-430"></a>	<span class='varop'>.&gt;</span>
+<a name="line-431"></a>	<span class='varid'>hasOption</span> <span class='varid'>a_issue_errors</span>
+<a name="line-432"></a>		<span class='conop'>:-&gt;</span> <span class='varid'>performAction</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='keyword'>_</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>setSysErrorHandler</span> <span class='layout'>(</span><span class='varid'>errorMsgLogging</span><span class='varop'>.&gt;&gt;</span> <span class='varid'>errorMsgToStderr</span><span class='layout'>)</span>	<span class='layout'>)</span>
+<a name="line-433"></a>
+<a name="line-434"></a>      <span class='layout'>,</span> <span class='varid'>hasOption</span> <span class='varid'>a_collect_errors</span>
+<a name="line-435"></a>		<span class='conop'>:-&gt;</span> <span class='varid'>performAction</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='keyword'>_</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>setSysErrorHandler</span> <span class='varid'>errorMsgLogging</span>	<span class='layout'>)</span>
+<a name="line-436"></a>
+<a name="line-437"></a>      <span class='layout'>,</span> <span class='varid'>hasOption</span> <span class='varid'>a_issue_errors</span>
+<a name="line-438"></a>		<span class='conop'>:-&gt;</span> <span class='varid'>performAction</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='keyword'>_</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>setSysErrorHandler</span> <span class='varid'>errorMsgToStderr</span>	<span class='layout'>)</span>
+<a name="line-439"></a>
+<a name="line-440"></a>      <span class='layout'>,</span> <span class='varid'>this</span>
+<a name="line-441"></a>		<span class='conop'>:-&gt;</span> <span class='varid'>performAction</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='keyword'>_</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>setSysErrorHandler</span> <span class='varid'>noneM</span>		<span class='layout'>)</span>
+<a name="line-442"></a>      <span class='keyglyph'>]</span>
+<a name="line-443"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-444"></a>      <span class='varid'>processFilter</span>
+<a name="line-445"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-446"></a>      <span class='layout'>(</span> <span class='varid'>thisM</span>
+<a name="line-447"></a>        <span class='varop'>+++&gt;&gt;</span>
+<a name="line-448"></a>	<span class='layout'>(</span> <span class='varid'>hasOption</span> <span class='varid'>a_collect_errors</span>
+<a name="line-449"></a>          <span class='varop'>`guardsM`</span>
+<a name="line-450"></a>	  <span class='varid'>getErrorMsg</span>
+<a name="line-451"></a>	<span class='layout'>)</span>
+<a name="line-452"></a>      <span class='layout'>)</span>
+<a name="line-453"></a>
+<a name="line-454"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-455"></a>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Parser-ProtocolHandler.html b/doc/hxt-filter/src/Text-XML-HXT-Parser-ProtocolHandler.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Parser-ProtocolHandler.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>{-# LINE 1 "ProtocolHandler.hs" #-}</span>
+<a name="line-2"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-3"></a><span class='comment'>--</span>
+<a name="line-4"></a><span class='comment'>-- protocol handler functions</span>
+<a name="line-5"></a><span class='comment'>-- configuration file</span>
+<a name="line-6"></a><span class='comment'>-- real handler is generated with cpp</span>
+<a name="line-7"></a>
+<a name="line-8"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>ProtocolHandler</span>
+<a name="line-9"></a>    <span class='layout'>(</span> <span class='varid'>getProtocolHandler</span>
+<a name="line-10"></a>    <span class='layout'>)</span>
+<a name="line-11"></a>
+<a name="line-12"></a><span class='keyword'>where</span>
+<a name="line-13"></a>
+<a name="line-14"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-15"></a>
+<a name="line-16"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-17"></a><span class='comment'>--</span>
+<a name="line-18"></a><span class='comment'>-- file io and network</span>
+<a name="line-19"></a>
+<a name="line-20"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>
+<a name="line-21"></a>    <span class='layout'>(</span> <span class='varid'>fromMaybe</span>
+<a name="line-22"></a>    <span class='layout'>)</span>
+<a name="line-23"></a>
+<a name="line-24"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>URI</span>
+<a name="line-25"></a>    <span class='layout'>(</span> <span class='conid'>URI</span>
+<a name="line-26"></a>    <span class='layout'>,</span> <span class='varid'>uriScheme</span>
+<a name="line-27"></a>    <span class='layout'>)</span>
+<a name="line-28"></a>
+<a name="line-29"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>ProtocolHandlerFile</span>
+<a name="line-30"></a>    <span class='layout'>(</span> <span class='varid'>getFileContents</span>
+<a name="line-31"></a>    <span class='layout'>)</span>
+<a name="line-32"></a>
+<a name="line-33"></a>
+<a name="line-34"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>ProtocolHandlerHttpNativeOrCurl</span>
+<a name="line-35"></a>    <span class='layout'>(</span> <span class='varid'>getHttpContentsNativeOrWithCurl</span>
+<a name="line-36"></a>    <span class='layout'>)</span>
+<a name="line-37"></a>
+<a name="line-38"></a>
+<a name="line-39"></a>
+<a name="line-40"></a>
+<a name="line-41"></a>
+<a name="line-42"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-43"></a><span class='comment'>--</span>
+<a name="line-44"></a>
+<a name="line-45"></a><a name="getProtocolHandler"></a><span class='definition'>getProtocolHandler</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='conid'>URI</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span><span class='layout'>)</span>
+<a name="line-46"></a><span class='definition'>getProtocolHandler</span> <span class='varid'>proto</span>
+<a name="line-47"></a>    <span class='keyglyph'>=</span> <span class='varid'>fromMaybe</span> <span class='varid'>getUnsupported</span> <span class='varid'>handler</span>
+<a name="line-48"></a>      <span class='keyword'>where</span>
+<a name="line-49"></a>      <span class='varid'>handler</span>  <span class='keyglyph'>=</span> <span class='varid'>lookup</span> <span class='varid'>proto</span> <span class='varid'>protocolHandler</span>
+<a name="line-50"></a>
+<a name="line-51"></a><span class='comment'>--</span>
+<a name="line-52"></a><span class='comment'>-- the fall back protocol handler</span>
+<a name="line-53"></a>
+<a name="line-54"></a><a name="getUnsupported"></a><span class='definition'>getUnsupported</span>	<span class='keyglyph'>::</span> <span class='conid'>URI</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-55"></a><span class='definition'>getUnsupported</span> <span class='varid'>uri</span>
+<a name="line-56"></a>    <span class='keyglyph'>=</span> <span class='varid'>addFatal</span> <span class='layout'>(</span> <span class='str'>"unsupported protocol "</span>
+<a name="line-57"></a>		 <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>uriScheme</span> <span class='varid'>uri</span><span class='layout'>)</span>
+<a name="line-58"></a>		 <span class='varop'>++</span> <span class='str'>" in URI: "</span>
+<a name="line-59"></a>		 <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>uri</span>
+<a name="line-60"></a>	       <span class='layout'>)</span>
+<a name="line-61"></a>
+<a name="line-62"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-63"></a><span class='comment'>--</span>
+<a name="line-64"></a><span class='comment'>-- the table of potocol handlers</span>
+<a name="line-65"></a><span class='comment'>-- looked up in getProtocolHandler</span>
+<a name="line-66"></a>
+<a name="line-67"></a><a name="protocolHandler"></a><span class='definition'>protocolHandler</span>	<span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>URI</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span><span class='layout'>)</span><span class='keyglyph'>]</span>
+<a name="line-68"></a><span class='definition'>protocolHandler</span>
+<a name="line-69"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='layout'>(</span><span class='str'>"file"</span><span class='layout'>,</span> <span class='varid'>getFileContents</span><span class='layout'>)</span>
+<a name="line-70"></a>      <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"http"</span><span class='layout'>,</span>
+<a name="line-71"></a>
+<a name="line-72"></a>
+<a name="line-73"></a>	 <span class='varid'>getHttpContentsNativeOrWithCurl</span>
+<a name="line-74"></a>
+<a name="line-75"></a>
+<a name="line-76"></a>
+<a name="line-77"></a>
+<a name="line-78"></a>	<span class='layout'>)</span>
+<a name="line-79"></a>      <span class='keyglyph'>]</span>
+<a name="line-80"></a>
+<a name="line-81"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-82"></a>
+<a name="line-83"></a>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Parser-ProtocolHandlerFile.html b/doc/hxt-filter/src/Text-XML-HXT-Parser-ProtocolHandlerFile.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Parser-ProtocolHandlerFile.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-2"></a><span class='comment'>--</span>
+<a name="line-3"></a><span class='comment'>-- protocol handler function for file protocol</span>
+<a name="line-4"></a><span class='comment'>-- implemented as filer</span>
+<a name="line-5"></a>
+<a name="line-6"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>ProtocolHandlerFile</span>
+<a name="line-7"></a>    <span class='layout'>(</span> <span class='varid'>getFileContents</span>
+<a name="line-8"></a>    <span class='layout'>)</span>
+<a name="line-9"></a>
+<a name="line-10"></a><span class='keyword'>where</span>
+<a name="line-11"></a>
+<a name="line-12"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-13"></a>
+<a name="line-14"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-15"></a>
+<a name="line-16"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>Directory</span>
+<a name="line-17"></a>    <span class='layout'>(</span> <span class='varid'>doesFileExist</span>
+<a name="line-18"></a>    <span class='layout'>,</span> <span class='varid'>getPermissions</span>
+<a name="line-19"></a>    <span class='layout'>,</span> <span class='varid'>readable</span>
+<a name="line-20"></a>    <span class='layout'>)</span>
+<a name="line-21"></a>
+<a name="line-22"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>URI</span>
+<a name="line-23"></a>    <span class='layout'>(</span> <span class='conid'>URI</span>
+<a name="line-24"></a>    <span class='layout'>,</span> <span class='varid'>unEscapeString</span>
+<a name="line-25"></a>    <span class='layout'>,</span> <span class='varid'>uriPath</span>
+<a name="line-26"></a>    <span class='layout'>)</span>
+<a name="line-27"></a>
+<a name="line-28"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>IO</span>
+<a name="line-29"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>IO</span><span class='varop'>.</span><span class='conid'>Error</span>
+<a name="line-30"></a>
+<a name="line-31"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-32"></a><span class='comment'>--</span>
+<a name="line-33"></a><span class='comment'>-- the file protocol handler</span>
+<a name="line-34"></a>
+<a name="line-35"></a><a name="getFileContents"></a><span class='definition'>getFileContents</span>	<span class='keyglyph'>::</span> <span class='conid'>URI</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-36"></a><span class='definition'>getFileContents</span> <span class='varid'>uri</span> <span class='varid'>n</span>
+<a name="line-37"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-38"></a>      <span class='varid'>trace</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"getFileContent: reading file "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>source</span><span class='layout'>)</span>
+<a name="line-39"></a>      <span class='varid'>exists</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>io</span> <span class='varop'>$</span> <span class='varid'>doesFileExist</span> <span class='varid'>source</span>
+<a name="line-40"></a>      <span class='keyword'>if</span> <span class='varid'>exists</span>
+<a name="line-41"></a>	 <span class='keyword'>then</span> <span class='keyword'>do</span>
+<a name="line-42"></a>	      <span class='varid'>perm</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>io</span> <span class='varop'>$</span> <span class='varid'>getPermissions</span> <span class='varid'>source</span>
+<a name="line-43"></a>	      <span class='keyword'>if</span> <span class='varid'>readable</span> <span class='varid'>perm</span>
+<a name="line-44"></a>		 <span class='keyword'>then</span> <span class='keyword'>do</span>
+<a name="line-45"></a>		      <span class='varid'>h</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>io</span> <span class='varop'>$</span> <span class='varid'>try</span> <span class='layout'>(</span> <span class='varid'>openFile</span> <span class='varid'>source</span> <span class='conid'>ReadMode</span> <span class='layout'>)</span>
+<a name="line-46"></a>		      <span class='keyword'>case</span> <span class='varid'>h</span> <span class='keyword'>of</span>
+<a name="line-47"></a>			     <span class='conid'>Left</span> <span class='varid'>e</span>
+<a name="line-48"></a>				 <span class='keyglyph'>-&gt;</span> <span class='varid'>readErr</span> <span class='layout'>(</span> <span class='str'>"system error when reading file "</span>
+<a name="line-49"></a>					      <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>source</span>
+<a name="line-50"></a>					      <span class='varop'>++</span> <span class='str'>": "</span>
+<a name="line-51"></a>					      <span class='varop'>++</span> <span class='varid'>ioeGetErrorString</span> <span class='varid'>e</span>
+<a name="line-52"></a>					    <span class='layout'>)</span>
+<a name="line-53"></a>			     <span class='conid'>Right</span> <span class='varid'>h'</span>
+<a name="line-54"></a>				 <span class='keyglyph'>-&gt;</span> <span class='keyword'>do</span>
+<a name="line-55"></a>				    <span class='varid'>c</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>io</span> <span class='varop'>$</span> <span class='varid'>hGetContents</span> <span class='varid'>h'</span>
+<a name="line-56"></a>				    <span class='varid'>return</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>addAttrInt</span> <span class='varid'>transferStatus</span> <span class='num'>200</span>
+<a name="line-57"></a>					       <span class='varop'>.&gt;</span>
+<a name="line-58"></a>					       <span class='varid'>addAttr</span> <span class='varid'>transferMessage</span> <span class='str'>"OK"</span>
+<a name="line-59"></a>					       <span class='varop'>.&gt;</span>
+<a name="line-60"></a>					       <span class='varid'>replaceChildren</span> <span class='layout'>(</span><span class='varid'>xtext</span> <span class='varid'>c</span><span class='layout'>)</span>
+<a name="line-61"></a>					     <span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-62"></a>					   <span class='layout'>)</span>
+<a name="line-63"></a>
+<a name="line-64"></a>		 <span class='keyword'>else</span> <span class='varid'>readErr</span> <span class='layout'>(</span><span class='str'>"file "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>source</span> <span class='varop'>++</span> <span class='str'>" not readable"</span><span class='layout'>)</span>
+<a name="line-65"></a>         <span class='keyword'>else</span> <span class='varid'>readErr</span> <span class='layout'>(</span><span class='str'>"file "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>source</span> <span class='varop'>++</span> <span class='str'>" not found"</span><span class='layout'>)</span>
+<a name="line-66"></a>    <span class='keyword'>where</span>
+<a name="line-67"></a>    <span class='varid'>source</span>	<span class='keyglyph'>=</span> <span class='varid'>fileUriPath</span> <span class='varop'>.</span> <span class='varid'>unEscapeString</span> <span class='varop'>.</span> <span class='varid'>uriPath</span> <span class='varop'>$</span> <span class='varid'>uri</span>
+<a name="line-68"></a>    <span class='varid'>readErr</span> <span class='varid'>msg</span>	<span class='keyglyph'>=</span> <span class='varid'>addFatal</span> <span class='varid'>msg</span> <span class='varid'>n</span>
+<a name="line-69"></a>
+<a name="line-70"></a>    <span class='comment'>-- remove leading / if file starts with windows drive letter, e.g. /c:/windows -&gt; c:/windows</span>
+<a name="line-71"></a>    <span class='varid'>fileUriPath</span> <span class='layout'>(</span><span class='chr'>'/'</span> <span class='conop'>:</span> <span class='varid'>file</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='varid'>d</span> <span class='conop'>:</span> <span class='chr'>':'</span> <span class='conop'>:</span> <span class='sel'>_more</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-72"></a>	<span class='keyglyph'>|</span> <span class='varid'>d</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='chr'>'A'</span><span class='keyglyph'>..</span><span class='chr'>'Z'</span><span class='keyglyph'>]</span> <span class='varop'>||</span> <span class='varid'>d</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='chr'>'a'</span><span class='keyglyph'>..</span><span class='chr'>'z'</span><span class='keyglyph'>]</span>
+<a name="line-73"></a>	    <span class='keyglyph'>=</span> <span class='varid'>file</span>
+<a name="line-74"></a>    <span class='varid'>fileUriPath</span> <span class='varid'>file</span>
+<a name="line-75"></a>	<span class='keyglyph'>=</span> <span class='varid'>file</span>
+<a name="line-76"></a>
+<a name="line-77"></a><span class='comment'>-- ------------------------------------------------------------</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Parser-ProtocolHandlerHttpCurl.html b/doc/hxt-filter/src/Text-XML-HXT-Parser-ProtocolHandlerHttpCurl.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Parser-ProtocolHandlerHttpCurl.html
@@ -0,0 +1,202 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-2"></a><span class='comment'>--</span>
+<a name="line-3"></a><span class='comment'>-- protocol handler functions for native http access</span>
+<a name="line-4"></a>
+<a name="line-5"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>ProtocolHandlerHttpCurl</span>
+<a name="line-6"></a>    <span class='layout'>(</span> <span class='varid'>getHttpContentsWithCurl</span>
+<a name="line-7"></a>    <span class='layout'>)</span>
+<a name="line-8"></a>
+<a name="line-9"></a><span class='keyword'>where</span>
+<a name="line-10"></a>
+<a name="line-11"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-12"></a>
+<a name="line-13"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-14"></a>
+<a name="line-15"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>ProtocolHandlerUtil</span>
+<a name="line-16"></a>    <span class='layout'>(</span> <span class='varid'>parseContentType</span>
+<a name="line-17"></a>    <span class='layout'>)</span>
+<a name="line-18"></a>
+<a name="line-19"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>ParserCombinators</span><span class='varop'>.</span><span class='conid'>Parsec</span>
+<a name="line-20"></a>    <span class='layout'>(</span> <span class='conid'>Parser</span>
+<a name="line-21"></a>    <span class='layout'>,</span> <span class='varid'>parse</span>
+<a name="line-22"></a>    <span class='layout'>,</span> <span class='varid'>anyChar</span>
+<a name="line-23"></a>    <span class='layout'>,</span> <span class='varid'>char</span>
+<a name="line-24"></a>    <span class='layout'>,</span> <span class='varid'>digit</span>
+<a name="line-25"></a>    <span class='layout'>,</span> <span class='varid'>getInput</span>
+<a name="line-26"></a>    <span class='layout'>,</span> <span class='varid'>many1</span>
+<a name="line-27"></a>    <span class='layout'>,</span> <span class='varid'>manyTill</span>
+<a name="line-28"></a>    <span class='layout'>,</span> <span class='varid'>spaces</span>
+<a name="line-29"></a>    <span class='layout'>,</span> <span class='varid'>string</span>
+<a name="line-30"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='varop'>&lt;|&gt;</span><span class='layout'>)</span>
+<a name="line-31"></a>    <span class='layout'>)</span>
+<a name="line-32"></a>
+<a name="line-33"></a><span class='keyword'>import</span> <span class='keyword'>qualified</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>ParserCombinators</span><span class='varop'>.</span><span class='conid'>Parsec</span>
+<a name="line-34"></a>    <span class='layout'>(</span> <span class='varid'>try</span>
+<a name="line-35"></a>    <span class='layout'>)</span>
+<a name="line-36"></a>
+<a name="line-37"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>URI</span>
+<a name="line-38"></a>    <span class='layout'>(</span> <span class='conid'>URI</span>
+<a name="line-39"></a>    <span class='layout'>)</span>
+<a name="line-40"></a>
+<a name="line-41"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>PipeOpen</span>
+<a name="line-42"></a>    <span class='layout'>(</span> <span class='varid'>popen</span>
+<a name="line-43"></a>    <span class='layout'>)</span>
+<a name="line-44"></a>
+<a name="line-45"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Char</span>
+<a name="line-46"></a>    <span class='layout'>(</span> <span class='varid'>toLower</span>
+<a name="line-47"></a>    <span class='layout'>)</span>
+<a name="line-48"></a>
+<a name="line-49"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-50"></a><span class='comment'>--</span>
+<a name="line-51"></a><span class='comment'>-- the http protocol handler implemented by calling external program curl</span>
+<a name="line-52"></a>
+<a name="line-53"></a><a name="getHttpContentsWithCurl"></a><span class='definition'>getHttpContentsWithCurl</span>	<span class='keyglyph'>::</span> <span class='conid'>URI</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-54"></a><span class='definition'>getHttpContentsWithCurl</span> <span class='varid'>uri</span> <span class='varid'>n</span>
+<a name="line-55"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-56"></a>      <span class='varid'>trace</span> <span class='num'>2</span> <span class='layout'>(</span> <span class='str'>"getHttpContentWithCurl: reading from URL "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>uri</span> <span class='layout'>)</span>
+<a name="line-57"></a>
+<a name="line-58"></a>      <span class='varid'>proxy</span>       <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParam</span> <span class='varid'>a_proxy</span>
+<a name="line-59"></a>      <span class='varid'>curlOptions</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParam</span> <span class='varid'>a_options_curl</span>
+<a name="line-60"></a>
+<a name="line-61"></a>      <span class='keyword'>let</span> <span class='varid'>allArgs</span> <span class='keyglyph'>=</span> <span class='varid'>args</span> <span class='varop'>++</span> <span class='varid'>proxyArgs</span> <span class='varid'>proxy</span> <span class='varop'>++</span> <span class='varid'>words</span> <span class='varid'>curlOptions</span>
+<a name="line-62"></a>
+<a name="line-63"></a>      <span class='varid'>trace</span> <span class='num'>4</span> <span class='layout'>(</span> <span class='str'>"getHttpContentWithCurl: running "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>unwords</span> <span class='layout'>(</span><span class='varid'>cmd</span> <span class='conop'>:</span> <span class='varid'>allArgs</span><span class='layout'>)</span><span class='layout'>)</span> <span class='layout'>)</span>
+<a name="line-64"></a>
+<a name="line-65"></a>      <span class='layout'>(</span><span class='varid'>res</span><span class='layout'>,</span> <span class='varid'>errs</span><span class='layout'>,</span> <span class='varid'>rc</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>io</span> <span class='varop'>$</span> <span class='varid'>popen</span> <span class='varid'>cmd</span> <span class='varid'>allArgs</span>
+<a name="line-66"></a>
+<a name="line-67"></a>      <span class='varid'>trace</span> <span class='num'>4</span> <span class='layout'>(</span> <span class='str'>"getHttpContentWithCurl: PID:    "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>rc</span>   <span class='layout'>)</span>
+<a name="line-68"></a>      <span class='varid'>trace</span> <span class='num'>4</span> <span class='layout'>(</span> <span class='str'>"getHttpContentWithCurl: stdin:  "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>res</span>  <span class='layout'>)</span>
+<a name="line-69"></a>      <span class='varid'>trace</span> <span class='num'>4</span> <span class='layout'>(</span> <span class='str'>"getHttpContentWithCurl: stderr: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>errs</span> <span class='layout'>)</span>
+<a name="line-70"></a>
+<a name="line-71"></a>      <span class='keyword'>if</span> <span class='varid'>rc</span> <span class='varop'>/=</span> <span class='num'>0</span>
+<a name="line-72"></a>	 <span class='keyword'>then</span> <span class='varid'>addFatal</span> <span class='layout'>(</span> <span class='str'>"http error when requesting URI (rc="</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>rc</span> <span class='varop'>++</span> <span class='str'>") "</span>
+<a name="line-73"></a>			 <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>uri</span>
+<a name="line-74"></a>			 <span class='varop'>++</span> <span class='str'>": "</span>
+<a name="line-75"></a>			 <span class='varop'>++</span> <span class='varid'>errs</span>
+<a name="line-76"></a>		       <span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-77"></a>	 <span class='keyword'>else</span> <span class='keyword'>let</span>
+<a name="line-78"></a>	      <span class='layout'>(</span><span class='varid'>st</span><span class='layout'>,</span> <span class='varid'>al</span><span class='layout'>,</span> <span class='varid'>contents</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>parseResponse</span> <span class='varid'>res</span>
+<a name="line-79"></a>	      <span class='keyword'>in</span>
+<a name="line-80"></a>	      <span class='varid'>liftMf</span> <span class='layout'>(</span> <span class='varid'>addAttrl</span> <span class='layout'>(</span><span class='varid'>const</span> <span class='varid'>al</span><span class='layout'>)</span>
+<a name="line-81"></a>		       <span class='varop'>.&gt;</span>
+<a name="line-82"></a>		       <span class='varid'>replaceChildren</span> <span class='layout'>(</span><span class='varid'>xtext</span> <span class='varid'>contents</span><span class='layout'>)</span>
+<a name="line-83"></a>		     <span class='layout'>)</span>
+<a name="line-84"></a>	      <span class='varop'>.&gt;&gt;</span> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>st</span> <span class='varop'>&gt;=</span> <span class='num'>200</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>st</span> <span class='varop'>&lt;</span> <span class='num'>300</span>
+<a name="line-85"></a>		    <span class='keyword'>then</span> <span class='varid'>thisM</span>
+<a name="line-86"></a>		    <span class='keyword'>else</span>
+<a name="line-87"></a>		    <span class='varid'>addFatal</span> <span class='layout'>(</span> <span class='str'>"http error when accessing URI "</span>
+<a name="line-88"></a>			       <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>uri</span>
+<a name="line-89"></a>			       <span class='varop'>++</span> <span class='str'>": "</span>
+<a name="line-90"></a>			       <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>st</span>
+<a name="line-91"></a>			       <span class='varop'>++</span> <span class='str'>" "</span>
+<a name="line-92"></a>			       <span class='varop'>++</span> <span class='layout'>(</span><span class='varid'>valueOf</span> <span class='varid'>transferMessage</span> <span class='varop'>$</span> <span class='varid'>newRoot</span> <span class='varid'>al</span><span class='layout'>)</span>
+<a name="line-93"></a>			     <span class='layout'>)</span>
+<a name="line-94"></a>		  <span class='layout'>)</span>
+<a name="line-95"></a>	      <span class='varop'>$</span> <span class='varid'>n</span>
+<a name="line-96"></a>    <span class='keyword'>where</span>
+<a name="line-97"></a>    <span class='varid'>cmd</span>  <span class='keyglyph'>=</span> <span class='str'>"curl"</span>
+<a name="line-98"></a>    <span class='varid'>args</span> <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='str'>"--silent"</span>
+<a name="line-99"></a>	   <span class='layout'>,</span> <span class='str'>"--show-error"</span>
+<a name="line-100"></a>	   <span class='layout'>,</span> <span class='str'>"--dump-header"</span><span class='layout'>,</span> <span class='str'>"-"</span>
+<a name="line-101"></a>	   <span class='layout'>,</span> <span class='varid'>show</span> <span class='varid'>uri</span>
+<a name="line-102"></a>	   <span class='keyglyph'>]</span>
+<a name="line-103"></a>    <span class='varid'>proxyArgs</span> <span class='str'>""</span>
+<a name="line-104"></a>	<span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-105"></a>    <span class='varid'>proxyArgs</span> <span class='varid'>prx</span>
+<a name="line-106"></a>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='str'>"--proxy"</span><span class='layout'>,</span> <span class='varid'>prx</span> <span class='keyglyph'>]</span>
+<a name="line-107"></a>
+<a name="line-108"></a><a name="parseResponse"></a><span class='definition'>parseResponse</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='conid'>Int</span><span class='layout'>,</span> <span class='conid'>XmlTrees</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span>
+<a name="line-109"></a><span class='definition'>parseResponse</span> <span class='varid'>inp</span>
+<a name="line-110"></a>    <span class='keyglyph'>=</span> <span class='keyword'>case</span> <span class='layout'>(</span><span class='varid'>parse</span> <span class='varid'>parseHttpResponse</span> <span class='str'>"HTTP Header"</span> <span class='varid'>inp</span><span class='layout'>)</span> <span class='keyword'>of</span>
+<a name="line-111"></a>      <span class='conid'>Right</span> <span class='varid'>res</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>res</span>
+<a name="line-112"></a>      <span class='conid'>Left</span>  <span class='keyword'>_</span>   <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='num'>999</span><span class='layout'>,</span> <span class='varid'>xattr</span> <span class='varid'>transferMessage</span> <span class='str'>"illegal HTTP response"</span><span class='layout'>,</span> <span class='varid'>inp</span><span class='layout'>)</span>
+<a name="line-113"></a>
+<a name="line-114"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-115"></a><span class='comment'>--</span>
+<a name="line-116"></a><span class='comment'>-- parsers for HTTP response</span>
+<a name="line-117"></a>
+<a name="line-118"></a><a name="parseHttpResponse"></a><span class='definition'>parseHttpResponse</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='layout'>(</span><span class='conid'>Int</span><span class='layout'>,</span> <span class='conid'>XmlTrees</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span>
+<a name="line-119"></a><span class='definition'>parseHttpResponse</span>
+<a name="line-120"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-121"></a>      <span class='varid'>allResponses</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>many1</span>
+<a name="line-122"></a>		      <span class='layout'>(</span> <span class='keyword'>do</span>
+<a name="line-123"></a>			<span class='layout'>(</span><span class='varid'>rc</span><span class='layout'>,</span> <span class='varid'>rh</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>parseResp</span>
+<a name="line-124"></a>			<span class='varid'>rhs</span>      <span class='keyglyph'>&lt;-</span> <span class='varid'>parseHeaders</span>
+<a name="line-125"></a>			<span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>rc</span><span class='layout'>,</span> <span class='varid'>rh</span><span class='layout'>,</span> <span class='varid'>rhs</span><span class='layout'>)</span>
+<a name="line-126"></a>		      <span class='layout'>)</span>
+<a name="line-127"></a>      <span class='keyword'>let</span> <span class='layout'>(</span><span class='varid'>rc</span><span class='layout'>,</span> <span class='varid'>rh</span><span class='layout'>,</span> <span class='varid'>rhs</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>last</span> <span class='varid'>allResponses</span>
+<a name="line-128"></a>      <span class='varid'>content</span>  <span class='keyglyph'>&lt;-</span> <span class='varid'>getInput</span>
+<a name="line-129"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>rc</span><span class='layout'>,</span> <span class='varid'>rh</span> <span class='varop'>++</span> <span class='varid'>rhs</span><span class='layout'>,</span> <span class='varid'>content</span><span class='layout'>)</span>
+<a name="line-130"></a>    <span class='keyword'>where</span>
+<a name="line-131"></a>
+<a name="line-132"></a>    <span class='varid'>crlf</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>()</span>
+<a name="line-133"></a>    <span class='varid'>crlf</span>
+<a name="line-134"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-135"></a>	  <span class='layout'>(</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>ParserCombinators</span><span class='varop'>.</span><span class='conid'>Parsec</span><span class='varop'>.</span><span class='varid'>try</span> <span class='layout'>(</span><span class='varid'>string</span> <span class='str'>"\r\n"</span><span class='layout'>)</span> <span class='varop'>&lt;|&gt;</span> <span class='varid'>string</span> <span class='str'>"\n"</span> <span class='layout'>)</span>
+<a name="line-136"></a>	  <span class='varid'>return</span> <span class='conid'>()</span>
+<a name="line-137"></a>
+<a name="line-138"></a>    <span class='varid'>parseResp</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='layout'>(</span><span class='conid'>Int</span><span class='layout'>,</span> <span class='conid'>XmlTrees</span><span class='layout'>)</span>
+<a name="line-139"></a>    <span class='varid'>parseResp</span>
+<a name="line-140"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-141"></a>	  <span class='varid'>vers</span> <span class='keyglyph'>&lt;-</span> <span class='layout'>(</span> <span class='keyword'>do</span>
+<a name="line-142"></a>		    <span class='varid'>http</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>string</span> <span class='str'>"HTTP/"</span>
+<a name="line-143"></a>		    <span class='varid'>mav</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>many1</span> <span class='varid'>digit</span>
+<a name="line-144"></a>		    <span class='varid'>char</span> <span class='chr'>'.'</span>
+<a name="line-145"></a>		    <span class='varid'>miv</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>many1</span> <span class='varid'>digit</span>
+<a name="line-146"></a>		    <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>http</span> <span class='varop'>++</span> <span class='varid'>mav</span> <span class='varop'>++</span> <span class='str'>"."</span> <span class='varop'>++</span> <span class='varid'>miv</span><span class='layout'>)</span>
+<a name="line-147"></a>		  <span class='layout'>)</span>
+<a name="line-148"></a>	  <span class='varid'>spaces</span>
+<a name="line-149"></a>	  <span class='varid'>ds</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>many1</span> <span class='varid'>digit</span>
+<a name="line-150"></a>	  <span class='varid'>spaces</span>
+<a name="line-151"></a>	  <span class='varid'>reason</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>manyTill</span> <span class='varid'>anyChar</span> <span class='varid'>crlf</span>
+<a name="line-152"></a>	  <span class='varid'>return</span> <span class='layout'>(</span> <span class='varid'>read</span> <span class='varid'>ds</span><span class='layout'>,</span>
+<a name="line-153"></a>		   <span class='varid'>xattr</span> <span class='varid'>transferMessage</span> <span class='varid'>reason</span> <span class='varop'>++</span> <span class='varid'>xattr</span> <span class='varid'>transferVersion</span> <span class='varid'>vers</span>
+<a name="line-154"></a>		 <span class='layout'>)</span>
+<a name="line-155"></a>
+<a name="line-156"></a>    <span class='varid'>parseHeaders</span>	<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>XmlTrees</span>
+<a name="line-157"></a>    <span class='varid'>parseHeaders</span>
+<a name="line-158"></a>	<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyword'>do</span>
+<a name="line-159"></a>	    <span class='varid'>crlf</span>
+<a name="line-160"></a>	    <span class='varid'>return</span> <span class='conid'>[]</span>
+<a name="line-161"></a>	  <span class='layout'>)</span>
+<a name="line-162"></a>	  <span class='varop'>&lt;|&gt;</span>
+<a name="line-163"></a>	  <span class='layout'>(</span> <span class='keyword'>do</span>
+<a name="line-164"></a>	    <span class='varid'>header1</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>parse1Header</span>
+<a name="line-165"></a>	    <span class='varid'>rest</span>    <span class='keyglyph'>&lt;-</span> <span class='varid'>parseHeaders</span>
+<a name="line-166"></a>	    <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>header1</span> <span class='varop'>++</span> <span class='varid'>rest</span>
+<a name="line-167"></a>	  <span class='layout'>)</span>
+<a name="line-168"></a>	  <span class='varop'>&lt;|&gt;</span>
+<a name="line-169"></a>	  <span class='layout'>(</span> <span class='keyword'>do</span>
+<a name="line-170"></a>	    <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>xattr</span> <span class='layout'>(</span><span class='varid'>httpPrefix</span> <span class='varop'>++</span> <span class='str'>"IllegalHeaders"</span><span class='layout'>)</span> <span class='str'>""</span>
+<a name="line-171"></a>	  <span class='layout'>)</span>
+<a name="line-172"></a>
+<a name="line-173"></a>    <span class='varid'>parse1Header</span>	<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>XmlTrees</span>
+<a name="line-174"></a>    <span class='varid'>parse1Header</span>
+<a name="line-175"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-176"></a>	  <span class='varid'>header</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>manyTill</span> <span class='varid'>anyChar</span> <span class='layout'>(</span><span class='varid'>char</span> <span class='chr'>':'</span><span class='layout'>)</span>
+<a name="line-177"></a>	  <span class='varid'>spaces</span>
+<a name="line-178"></a>	  <span class='varid'>value</span>  <span class='keyglyph'>&lt;-</span> <span class='varid'>manyTill</span> <span class='varid'>anyChar</span> <span class='varid'>crlf</span>
+<a name="line-179"></a>	  <span class='keyword'>let</span> <span class='varid'>ct</span> <span class='keyglyph'>=</span> <span class='varid'>parseCT</span> <span class='varid'>header</span> <span class='varid'>value</span>
+<a name="line-180"></a>	  <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>ct</span> <span class='varop'>++</span> <span class='varid'>xattr</span> <span class='layout'>(</span><span class='varid'>httpPrefix</span> <span class='varop'>++</span> <span class='varid'>header</span><span class='layout'>)</span> <span class='varid'>value</span>
+<a name="line-181"></a>	<span class='keyword'>where</span>
+<a name="line-182"></a>	<span class='varid'>parseCT</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-183"></a>	<span class='varid'>parseCT</span> <span class='varid'>h</span> <span class='varid'>v</span>
+<a name="line-184"></a>	    <span class='keyglyph'>|</span> <span class='varid'>map</span> <span class='varid'>toLower</span> <span class='varid'>h</span> <span class='varop'>==</span> <span class='str'>"content-type"</span>
+<a name="line-185"></a>		<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyword'>case</span> <span class='layout'>(</span><span class='varid'>parse</span> <span class='varid'>parseContentType</span> <span class='varid'>h</span> <span class='varid'>v</span><span class='layout'>)</span> <span class='keyword'>of</span>
+<a name="line-186"></a>		    <span class='conid'>Right</span> <span class='varid'>res</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>concatMap</span> <span class='layout'>(</span><span class='varid'>uncurry</span> <span class='varid'>xattr</span><span class='layout'>)</span> <span class='varid'>res</span>
+<a name="line-187"></a>		    <span class='conid'>Left</span>  <span class='keyword'>_</span>   <span class='keyglyph'>-&gt;</span> <span class='conid'>[]</span>
+<a name="line-188"></a>		  <span class='layout'>)</span>
+<a name="line-189"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>
+<a name="line-190"></a>		<span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-191"></a>
+<a name="line-192"></a><span class='comment'>-- ------------------------------------------------------------</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Parser-ProtocolHandlerHttpNative.html b/doc/hxt-filter/src/Text-XML-HXT-Parser-ProtocolHandlerHttpNative.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Parser-ProtocolHandlerHttpNative.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-2"></a><span class='comment'>--</span>
+<a name="line-3"></a><span class='comment'>-- protocol handler functions for native http access</span>
+<a name="line-4"></a><span class='comment'>--</span>
+<a name="line-5"></a>
+<a name="line-6"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>ProtocolHandlerHttpNative</span>
+<a name="line-7"></a>    <span class='layout'>(</span> <span class='varid'>getHttpContentsWithHttp</span>
+<a name="line-8"></a>    <span class='layout'>)</span>
+<a name="line-9"></a>
+<a name="line-10"></a><span class='keyword'>where</span>
+<a name="line-11"></a>
+<a name="line-12"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-13"></a>
+<a name="line-14"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-15"></a>
+<a name="line-16"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>ProtocolHandlerUtil</span>
+<a name="line-17"></a>    <span class='layout'>(</span> <span class='varid'>parseContentType</span>
+<a name="line-18"></a>    <span class='layout'>)</span>
+<a name="line-19"></a>
+<a name="line-20"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>Util</span>
+<a name="line-21"></a>    <span class='layout'>(</span> <span class='varid'>stringTrim</span>
+<a name="line-22"></a>    <span class='layout'>)</span>
+<a name="line-23"></a>
+<a name="line-24"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>ParserCombinators</span><span class='varop'>.</span><span class='conid'>Parsec</span>
+<a name="line-25"></a>    <span class='layout'>(</span> <span class='varid'>parse</span>
+<a name="line-26"></a>    <span class='layout'>)</span>
+<a name="line-27"></a>
+<a name="line-28"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>IO</span>
+<a name="line-29"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>IO</span><span class='varop'>.</span><span class='conid'>Error</span>
+<a name="line-30"></a>
+<a name="line-31"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>URI</span>
+<a name="line-32"></a>    <span class='layout'>(</span> <span class='conid'>URI</span>
+<a name="line-33"></a>    <span class='layout'>)</span>
+<a name="line-34"></a>
+<a name="line-35"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>Socket</span>
+<a name="line-36"></a>    <span class='layout'>(</span> <span class='varid'>withSocketsDo</span>
+<a name="line-37"></a>    <span class='layout'>)</span>
+<a name="line-38"></a>
+<a name="line-39"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>HTTP</span>		<span class='comment'>-- http modules</span>
+<a name="line-40"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>Browser</span>
+<a name="line-41"></a>
+<a name="line-42"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-43"></a><span class='comment'>--</span>
+<a name="line-44"></a><span class='comment'>-- the native http protocol handler</span>
+<a name="line-45"></a>
+<a name="line-46"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-47"></a><span class='comment'>--</span>
+<a name="line-48"></a><span class='comment'>-- the http protocol handler, haskell implementation</span>
+<a name="line-49"></a>
+<a name="line-50"></a><a name="getHttpContentsWithHttp"></a><span class='definition'>getHttpContentsWithHttp</span>	<span class='keyglyph'>::</span> <span class='conid'>URI</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-51"></a><span class='definition'>getHttpContentsWithHttp</span> <span class='varid'>uri</span> <span class='varid'>n</span>
+<a name="line-52"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-53"></a>      <span class='varid'>traceLevel</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getTraceLevel</span>
+<a name="line-54"></a>      <span class='varid'>trace</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"getHttpContent: reading from URL "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>uri</span><span class='layout'>)</span>
+<a name="line-55"></a>      <span class='varid'>proxy</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParam</span> <span class='varid'>a_proxy</span>
+<a name="line-56"></a>      <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>io</span> <span class='varop'>$</span>  <span class='varid'>try</span> <span class='layout'>(</span><span class='varid'>getHttp</span> <span class='varid'>traceLevel</span> <span class='varid'>uri</span> <span class='varid'>proxy</span><span class='layout'>)</span>
+<a name="line-57"></a>      <span class='keyword'>case</span> <span class='varid'>res</span> <span class='keyword'>of</span>
+<a name="line-58"></a>	       <span class='conid'>Left</span> <span class='varid'>e</span>
+<a name="line-59"></a>		   <span class='keyglyph'>-&gt;</span> <span class='varid'>readErr</span> <span class='layout'>(</span> <span class='str'>"http error when requesting URI "</span>
+<a name="line-60"></a>				<span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>uri</span>
+<a name="line-61"></a>				<span class='varop'>++</span> <span class='str'>": "</span>
+<a name="line-62"></a>				<span class='varop'>++</span> <span class='varid'>ioeGetErrorString</span> <span class='varid'>e</span>
+<a name="line-63"></a>				<span class='varop'>++</span> <span class='str'>" (perhaps server does not understand HTTP/1.1) "</span>
+<a name="line-64"></a>			      <span class='layout'>)</span>
+<a name="line-65"></a>	       <span class='conid'>Right</span> <span class='varid'>response</span>
+<a name="line-66"></a>		   <span class='keyglyph'>-&gt;</span> <span class='keyword'>let</span>
+<a name="line-67"></a>		      <span class='varid'>al</span> <span class='keyglyph'>=</span> <span class='varid'>convertResponseHeaders</span> <span class='varid'>response</span>
+<a name="line-68"></a>		      <span class='varid'>cs</span> <span class='keyglyph'>=</span> <span class='varid'>xtext</span> <span class='layout'>(</span><span class='varid'>rspBody</span> <span class='varid'>response</span><span class='layout'>)</span>
+<a name="line-69"></a>		      <span class='varid'>st</span> <span class='keyglyph'>=</span> <span class='varid'>convertResponseStatus</span> <span class='layout'>(</span><span class='varid'>rspCode</span> <span class='varid'>response</span><span class='layout'>)</span>
+<a name="line-70"></a>		      <span class='keyword'>in</span>
+<a name="line-71"></a>		      <span class='keyword'>if</span> <span class='varid'>st</span> <span class='varop'>&gt;=</span> <span class='num'>200</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>st</span> <span class='varop'>&lt;</span> <span class='num'>300</span>
+<a name="line-72"></a>			 <span class='keyword'>then</span>
+<a name="line-73"></a>			 <span class='varid'>return</span> <span class='varop'>$</span> <span class='layout'>(</span><span class='varid'>addAttrl</span> <span class='layout'>(</span><span class='varid'>const</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>.&gt;</span> <span class='varid'>replaceChildren</span> <span class='varid'>cs</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-74"></a>			 <span class='keyword'>else</span> 
+<a name="line-75"></a>			 <span class='varid'>readErr</span> <span class='layout'>(</span> <span class='str'>"http error when accessing URI "</span>
+<a name="line-76"></a>				   <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>show</span> <span class='varid'>uri</span><span class='layout'>)</span>
+<a name="line-77"></a>				   <span class='varop'>++</span> <span class='str'>": "</span>
+<a name="line-78"></a>				   <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>st</span>
+<a name="line-79"></a>				   <span class='varop'>++</span> <span class='str'>" "</span>
+<a name="line-80"></a>				   <span class='varop'>++</span> <span class='varid'>rspReason</span> <span class='varid'>response</span>
+<a name="line-81"></a>				 <span class='layout'>)</span>
+<a name="line-82"></a>    <span class='keyword'>where</span>
+<a name="line-83"></a>    <span class='varid'>readErr</span> <span class='varid'>msg</span>	<span class='keyglyph'>=</span> <span class='varid'>addFatal</span> <span class='varid'>msg</span> <span class='varid'>n</span>
+<a name="line-84"></a>
+<a name="line-85"></a>    <span class='varid'>getHttp</span>		<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>URI</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='conid'>Response</span>
+<a name="line-86"></a>    <span class='varid'>getHttp</span> <span class='varid'>trc'</span> <span class='varid'>uri'</span> <span class='varid'>proxy'</span>
+<a name="line-87"></a>	<span class='keyglyph'>=</span> <span class='varid'>withSocketsDo</span> <span class='varop'>$</span>
+<a name="line-88"></a>	  <span class='varid'>browse</span> <span class='layout'>(</span> <span class='keyword'>do</span>
+<a name="line-89"></a>		   <span class='varid'>setOutHandler</span> <span class='layout'>(</span><span class='varid'>trcFct</span><span class='layout'>)</span>
+<a name="line-90"></a>		   <span class='varid'>setErrHandler</span> <span class='layout'>(</span><span class='varid'>trcFct</span><span class='layout'>)</span>
+<a name="line-91"></a>
+<a name="line-92"></a>		   <span class='varid'>setProxy'</span> <span class='varid'>proxy'</span>
+<a name="line-93"></a>		   <span class='layout'>(</span><span class='sel'>_ruri</span><span class='layout'>,</span> <span class='varid'>rsp</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>request</span> <span class='varid'>rq</span>
+<a name="line-94"></a>		   <span class='varid'>return</span> <span class='varid'>rsp</span>
+<a name="line-95"></a>		 <span class='layout'>)</span>
+<a name="line-96"></a>	<span class='keyword'>where</span>
+<a name="line-97"></a>	<span class='varid'>trcFct</span> <span class='varid'>s</span>
+<a name="line-98"></a>	    <span class='keyglyph'>|</span> <span class='varid'>trc'</span> <span class='varop'>&gt;=</span> <span class='num'>5</span>
+<a name="line-99"></a>		<span class='keyglyph'>=</span> <span class='varid'>hPutStrLn</span> <span class='varid'>stderr</span> <span class='layout'>(</span><span class='str'>"-- ("</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>trc'</span> <span class='varop'>++</span> <span class='str'>") http: "</span> <span class='varop'>++</span> <span class='varid'>s</span><span class='layout'>)</span>
+<a name="line-100"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>
+<a name="line-101"></a>		<span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='conid'>()</span>
+<a name="line-102"></a>
+<a name="line-103"></a>	<span class='varid'>rq</span> <span class='keyglyph'>=</span> <span class='varid'>defaultGETRequest</span> <span class='varid'>uri'</span>
+<a name="line-104"></a>	
+<a name="line-105"></a>	<span class='varid'>setProxy'</span> <span class='str'>""</span>	<span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='conid'>()</span>
+<a name="line-106"></a>	<span class='varid'>setProxy'</span> <span class='varid'>p</span>	<span class='keyglyph'>=</span> <span class='varid'>setProxy</span> <span class='layout'>(</span><span class='conid'>Proxy</span> <span class='varid'>p</span> <span class='conid'>Nothing</span><span class='layout'>)</span>
+<a name="line-107"></a>
+<a name="line-108"></a>    <span class='varid'>convertResponseStatus</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Int</span><span class='layout'>,</span> <span class='conid'>Int</span><span class='layout'>,</span> <span class='conid'>Int</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Int</span>
+<a name="line-109"></a>    <span class='varid'>convertResponseStatus</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='varid'>b</span><span class='layout'>,</span> <span class='varid'>c</span><span class='layout'>)</span>
+<a name="line-110"></a>	<span class='keyglyph'>=</span> <span class='num'>100</span> <span class='varop'>*</span> <span class='varid'>a</span> <span class='varop'>+</span> <span class='num'>10</span> <span class='varop'>*</span> <span class='varid'>b</span> <span class='varop'>+</span> <span class='varid'>c</span>
+<a name="line-111"></a>
+<a name="line-112"></a>    <span class='varid'>convertResponseHeaders</span>	<span class='keyglyph'>::</span> <span class='conid'>Response</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-113"></a>    <span class='varid'>convertResponseHeaders</span> <span class='varid'>r'</span>
+<a name="line-114"></a>	<span class='keyglyph'>=</span> <span class='varid'>cvResponseCode</span> <span class='layout'>(</span><span class='varid'>rspCode</span> <span class='varid'>r'</span><span class='layout'>)</span>
+<a name="line-115"></a>	  <span class='varop'>++</span>
+<a name="line-116"></a>	  <span class='varid'>cvResponseReason</span> <span class='layout'>(</span><span class='varid'>rspReason</span> <span class='varid'>r'</span><span class='layout'>)</span>
+<a name="line-117"></a>          <span class='varop'>++</span>
+<a name="line-118"></a>	  <span class='varid'>cvResponseHeaders</span> <span class='layout'>(</span><span class='varid'>rspHeaders</span> <span class='varid'>r'</span><span class='layout'>)</span>
+<a name="line-119"></a>	<span class='keyword'>where</span>
+<a name="line-120"></a>	<span class='varid'>cvResponseCode</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Int</span><span class='layout'>,</span> <span class='conid'>Int</span><span class='layout'>,</span> <span class='conid'>Int</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-121"></a>	<span class='varid'>cvResponseCode</span> <span class='varid'>st'</span>
+<a name="line-122"></a>	    <span class='keyglyph'>=</span> <span class='varid'>xattr</span> <span class='varid'>transferStatus</span> <span class='layout'>(</span><span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>convertResponseStatus</span> <span class='varid'>st'</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-123"></a>	      <span class='varop'>++</span>
+<a name="line-124"></a>	      <span class='varid'>xattr</span> <span class='varid'>transferVersion</span> <span class='varid'>httpVersion</span>
+<a name="line-125"></a>
+<a name="line-126"></a>	<span class='varid'>cvResponseReason</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-127"></a>	<span class='varid'>cvResponseReason</span> <span class='varid'>r''</span>
+<a name="line-128"></a>	    <span class='keyglyph'>=</span> <span class='varid'>xattr</span> <span class='varid'>transferMessage</span> <span class='layout'>(</span><span class='varid'>stringTrim</span> <span class='varid'>r''</span><span class='layout'>)</span>
+<a name="line-129"></a>
+<a name="line-130"></a>	<span class='varid'>cvResponseHeaders</span>	<span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>Header</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-131"></a>	<span class='varid'>cvResponseHeaders</span>
+<a name="line-132"></a>	    <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='varid'>cvResponseHeader</span>
+<a name="line-133"></a>
+<a name="line-134"></a>	<span class='varid'>cvResponseHeader</span>	<span class='keyglyph'>::</span> <span class='conid'>Header</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-135"></a>	<span class='varid'>cvResponseHeader</span> <span class='layout'>(</span><span class='conid'>Header</span> <span class='varid'>name</span> <span class='varid'>value</span><span class='layout'>)</span>
+<a name="line-136"></a>	    <span class='keyglyph'>|</span> <span class='varid'>name</span> <span class='varop'>==</span> <span class='conid'>HdrContentType</span>
+<a name="line-137"></a>		<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyword'>case</span> <span class='layout'>(</span><span class='varid'>parse</span> <span class='varid'>parseContentType</span> <span class='layout'>(</span><span class='varid'>show</span> <span class='conid'>HdrContentType</span><span class='layout'>)</span> <span class='varid'>value</span><span class='layout'>)</span> <span class='keyword'>of</span>
+<a name="line-138"></a>		    <span class='conid'>Right</span> <span class='varid'>res</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>concatMap</span> <span class='layout'>(</span><span class='varid'>uncurry</span> <span class='varid'>xattr</span><span class='layout'>)</span> <span class='varid'>res</span>
+<a name="line-139"></a>		    <span class='conid'>Left</span>  <span class='keyword'>_</span>   <span class='keyglyph'>-&gt;</span> <span class='conid'>[]</span>
+<a name="line-140"></a>		  <span class='layout'>)</span>
+<a name="line-141"></a>                  <span class='varop'>++</span>
+<a name="line-142"></a>		  <span class='varid'>addHttpAttr</span>
+<a name="line-143"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>
+<a name="line-144"></a>		<span class='keyglyph'>=</span> <span class='varid'>addHttpAttr</span>
+<a name="line-145"></a>	    <span class='keyword'>where</span>
+<a name="line-146"></a>	    <span class='varid'>addHttpAttr</span> <span class='keyglyph'>=</span> <span class='varid'>xattr</span> <span class='layout'>(</span><span class='varid'>httpPrefix</span> <span class='varop'>++</span> <span class='layout'>(</span><span class='varid'>show</span> <span class='varid'>name</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>value</span>
+<a name="line-147"></a>
+<a name="line-148"></a>
+<a name="line-149"></a><span class='comment'>-- ------------------------------------------------------------</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Parser-ProtocolHandlerHttpNativeOrCurl.html b/doc/hxt-filter/src/Text-XML-HXT-Parser-ProtocolHandlerHttpNativeOrCurl.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Parser-ProtocolHandlerHttpNativeOrCurl.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-2"></a><span class='comment'>--</span>
+<a name="line-3"></a><span class='comment'>-- protocol handler functions for native http access</span>
+<a name="line-4"></a>
+<a name="line-5"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>ProtocolHandlerHttpNativeOrCurl</span>
+<a name="line-6"></a>    <span class='layout'>(</span> <span class='varid'>getHttpContentsNativeOrWithCurl</span>
+<a name="line-7"></a>    <span class='layout'>)</span>
+<a name="line-8"></a>
+<a name="line-9"></a><span class='keyword'>where</span>
+<a name="line-10"></a>
+<a name="line-11"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlKeywords</span>
+<a name="line-12"></a>    <span class='layout'>(</span> <span class='varid'>a_use_curl</span>
+<a name="line-13"></a>    <span class='layout'>)</span>
+<a name="line-14"></a>
+<a name="line-15"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-16"></a>
+<a name="line-17"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>URI</span>
+<a name="line-18"></a>    <span class='layout'>(</span> <span class='conid'>URI</span>
+<a name="line-19"></a>    <span class='layout'>)</span>
+<a name="line-20"></a>
+<a name="line-21"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>ProtocolHandlerHttpNative</span>
+<a name="line-22"></a>    <span class='layout'>(</span> <span class='varid'>getHttpContentsWithHttp</span>
+<a name="line-23"></a>    <span class='layout'>)</span>
+<a name="line-24"></a>
+<a name="line-25"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>ProtocolHandlerHttpCurl</span>
+<a name="line-26"></a>    <span class='layout'>(</span> <span class='varid'>getHttpContentsWithCurl</span>
+<a name="line-27"></a>    <span class='layout'>)</span>
+<a name="line-28"></a>
+<a name="line-29"></a>
+<a name="line-30"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-31"></a><span class='comment'>--</span>
+<a name="line-32"></a><span class='comment'>-- the http protocol handler switch for internal / external access</span>
+<a name="line-33"></a>
+<a name="line-34"></a><a name="getHttpContentsNativeOrWithCurl"></a><span class='definition'>getHttpContentsNativeOrWithCurl</span>		<span class='keyglyph'>::</span> <span class='conid'>URI</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-35"></a><span class='definition'>getHttpContentsNativeOrWithCurl</span> <span class='varid'>uri</span> <span class='varid'>n</span>
+<a name="line-36"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-37"></a>      <span class='varid'>curl</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParamInt</span> <span class='varid'>a_use_curl</span> <span class='num'>0</span>
+<a name="line-38"></a>      <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>curl</span> <span class='varop'>/=</span> <span class='num'>0</span>
+<a name="line-39"></a>	<span class='keyword'>then</span> <span class='varid'>getHttpContentsWithCurl</span>
+<a name="line-40"></a>	<span class='keyword'>else</span> <span class='varid'>getHttpContentsWithHttp</span> <span class='layout'>)</span> <span class='varid'>uri</span> <span class='varid'>n</span>
+<a name="line-41"></a>
+<a name="line-42"></a>
+<a name="line-43"></a><span class='comment'>-- ------------------------------------------------------------</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Parser-XmlInput.html b/doc/hxt-filter/src/Text-XML-HXT-Parser-XmlInput.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Parser-XmlInput.html
@@ -0,0 +1,392 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-2"></a><span class='comment'>--</span>
+<a name="line-3"></a><span class='comment'>-- input functions</span>
+<a name="line-4"></a><span class='comment'>-- implemented as filer</span>
+<a name="line-5"></a>
+<a name="line-6"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlInput</span>
+<a name="line-7"></a>    <span class='layout'>(</span> <span class='varid'>getXmlContents</span>
+<a name="line-8"></a>    <span class='layout'>,</span> <span class='varid'>getXmlEntityContents</span>
+<a name="line-9"></a>    <span class='layout'>,</span> <span class='varid'>getUrlContents</span>
+<a name="line-10"></a>    <span class='layout'>,</span> <span class='varid'>getContentLength</span>
+<a name="line-11"></a>    <span class='layout'>,</span> <span class='varid'>guessDocEncoding</span>
+<a name="line-12"></a>    <span class='layout'>,</span> <span class='varid'>runInLocalURIContext</span>
+<a name="line-13"></a>    <span class='layout'>,</span> <span class='varid'>runInNewURIContext</span>
+<a name="line-14"></a>    <span class='layout'>,</span> <span class='varid'>getBaseURI</span>
+<a name="line-15"></a>    <span class='layout'>,</span> <span class='varid'>setBaseURI</span>
+<a name="line-16"></a>    <span class='layout'>,</span> <span class='varid'>getAbsolutURI</span>
+<a name="line-17"></a>    <span class='layout'>,</span> <span class='varid'>isStandaloneDocument</span>
+<a name="line-18"></a>    <span class='layout'>)</span>
+<a name="line-19"></a>
+<a name="line-20"></a><span class='keyword'>where</span>
+<a name="line-21"></a>
+<a name="line-22"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-23"></a>
+<a name="line-24"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-25"></a>
+<a name="line-26"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>DefaultURI</span>
+<a name="line-27"></a>    <span class='layout'>(</span> <span class='varid'>setDefaultURI</span>
+<a name="line-28"></a>    <span class='layout'>)</span>
+<a name="line-29"></a>
+<a name="line-30"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlParser</span>
+<a name="line-31"></a>    <span class='layout'>(</span> <span class='varid'>parseXmlDocEncodingSpec</span>
+<a name="line-32"></a>    <span class='layout'>,</span> <span class='varid'>parseXmlEntityEncodingSpec</span>
+<a name="line-33"></a>    <span class='layout'>,</span> <span class='varid'>removeEncodingSpec</span>
+<a name="line-34"></a>    <span class='layout'>)</span>
+<a name="line-35"></a>
+<a name="line-36"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>Unicode</span>
+<a name="line-37"></a>    <span class='layout'>(</span> <span class='varid'>getDecodingFct</span>
+<a name="line-38"></a>    <span class='layout'>,</span> <span class='varid'>guessEncoding</span>
+<a name="line-39"></a>    <span class='layout'>,</span> <span class='varid'>normalizeNL</span>
+<a name="line-40"></a>    <span class='layout'>)</span>
+<a name="line-41"></a>
+<a name="line-42"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlOutput</span>
+<a name="line-43"></a>    <span class='layout'>(</span> <span class='varid'>traceTree</span>
+<a name="line-44"></a>    <span class='layout'>,</span> <span class='varid'>traceSource</span>
+<a name="line-45"></a>    <span class='layout'>,</span> <span class='varid'>traceMsg</span>
+<a name="line-46"></a>    <span class='layout'>)</span>
+<a name="line-47"></a>
+<a name="line-48"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>ProtocolHandler</span>
+<a name="line-49"></a>    <span class='layout'>(</span> <span class='varid'>getProtocolHandler</span>
+<a name="line-50"></a>    <span class='layout'>)</span>
+<a name="line-51"></a>
+<a name="line-52"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-53"></a><span class='comment'>--</span>
+<a name="line-54"></a><span class='comment'>-- URI manipulation</span>
+<a name="line-55"></a>
+<a name="line-56"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>URI</span>
+<a name="line-57"></a>    <span class='layout'>(</span> <span class='varid'>parseURIReference</span>
+<a name="line-58"></a>    <span class='layout'>,</span> <span class='varid'>relativeTo</span>
+<a name="line-59"></a>    <span class='layout'>,</span> <span class='varid'>uriScheme</span>
+<a name="line-60"></a>    <span class='layout'>)</span>
+<a name="line-61"></a>
+<a name="line-62"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-63"></a><span class='comment'>--</span>
+<a name="line-64"></a><span class='comment'>-- utilities</span>
+<a name="line-65"></a>
+<a name="line-66"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>
+<a name="line-67"></a>
+<a name="line-68"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-69"></a><span class='comment'>--</span>
+<a name="line-70"></a><span class='comment'>-- filter for reading the content</span>
+<a name="line-71"></a><span class='comment'>-- input: a root node with arguments in tag attribute list</span>
+<a name="line-72"></a><span class='comment'>-- and without any children.</span>
+<a name="line-73"></a>
+<a name="line-74"></a><span class='comment'>-- attribute a_source   ("source")   for input file or uri</span>
+<a name="line-75"></a><span class='comment'>--</span>
+<a name="line-76"></a><span class='comment'>-- attribute a_encoding ("encoding") for encoding scheme</span>
+<a name="line-77"></a><span class='comment'>--</span>
+<a name="line-78"></a><span class='comment'>-- attribute a_proxy    ("proxy")    for proxy tob be used in http access</span>
+<a name="line-79"></a>
+<a name="line-80"></a><a name="getXmlContents'"></a><span class='definition'>getXmlContents'</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-81"></a><span class='definition'>getXmlContents'</span> <span class='varid'>parseEncodingSpec</span>
+<a name="line-82"></a>    <span class='keyglyph'>=</span> <span class='varid'>getContent'</span>
+<a name="line-83"></a>      <span class='varop'>`whenM`</span> <span class='varid'>isRoot</span>
+<a name="line-84"></a>      <span class='keyword'>where</span>
+<a name="line-85"></a>      <span class='varid'>getContent'</span> <span class='varid'>t'</span>
+<a name="line-86"></a>	  <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>liftMf</span> <span class='layout'>(</span><span class='varid'>setStatus</span> <span class='varid'>c_ok</span> <span class='str'>"getXmlContents"</span><span class='layout'>)</span>
+<a name="line-87"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-88"></a>	      <span class='varid'>getUrlContents</span>
+<a name="line-89"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-90"></a>	      <span class='varid'>liftF</span> <span class='varid'>parseEncodingSpec</span>
+<a name="line-91"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-92"></a>	      <span class='varid'>guessDocEncoding</span>
+<a name="line-93"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-94"></a>	      <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='layout'>(</span><span class='str'>"getXmlContents: content read and decoded from "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>input'</span><span class='layout'>)</span>
+<a name="line-95"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-96"></a>	      <span class='varid'>traceTree</span>
+<a name="line-97"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-98"></a>	      <span class='varid'>traceSource</span>
+<a name="line-99"></a>	    <span class='layout'>)</span> <span class='varid'>t'</span>
+<a name="line-100"></a>	    <span class='keyword'>where</span>
+<a name="line-101"></a>	    <span class='varid'>input'</span> <span class='keyglyph'>=</span> <span class='varid'>valueOf</span> <span class='varid'>a_source</span> <span class='varid'>t'</span>
+<a name="line-102"></a>
+<a name="line-103"></a><span class='comment'>-- |</span>
+<a name="line-104"></a><span class='comment'>-- filter for reading the content of a XML document</span>
+<a name="line-105"></a><span class='comment'>--</span>
+<a name="line-106"></a><span class='comment'>-- input is a root node with the source as an attibute</span>
+<a name="line-107"></a><span class='comment'>-- the text is read, the encoding scheme is parsed and selected</span>
+<a name="line-108"></a><span class='comment'>-- and the input is translated into the internal UTF-8 string representation</span>
+<a name="line-109"></a>
+<a name="line-110"></a><a name="getXmlContents"></a><span class='definition'>getXmlContents</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-111"></a><span class='definition'>getXmlContents</span>
+<a name="line-112"></a>    <span class='keyglyph'>=</span> <span class='varid'>getXmlContents'</span> <span class='varid'>parseXmlDocEncodingSpec</span>
+<a name="line-113"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-114"></a>      <span class='varid'>setBaseURIFilter</span>
+<a name="line-115"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-116"></a>      <span class='varid'>setStandAloneFilter</span>
+<a name="line-117"></a>
+<a name="line-118"></a><span class='comment'>-- |</span>
+<a name="line-119"></a><span class='comment'>-- filter for reading the content of an external XML entity</span>
+<a name="line-120"></a><span class='comment'>--</span>
+<a name="line-121"></a><span class='comment'>--</span>
+<a name="line-122"></a><span class='comment'>-- see also : 'getXmlContents'</span>
+<a name="line-123"></a>
+<a name="line-124"></a><a name="getXmlEntityContents"></a><span class='definition'>getXmlEntityContents</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-125"></a><span class='definition'>getXmlEntityContents</span>
+<a name="line-126"></a>    <span class='keyglyph'>=</span> <span class='varid'>getXmlContents'</span> <span class='varid'>parseXmlEntityEncodingSpec</span>
+<a name="line-127"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-128"></a>      <span class='varid'>liftF</span> <span class='layout'>(</span><span class='varid'>processChildren</span> <span class='varid'>removeEncodingSpec</span><span class='layout'>)</span>	<span class='comment'>-- remove encoding spec, it's not part of the entity value</span>
+<a name="line-129"></a>      <span class='varop'>.&gt;&gt;</span> 
+<a name="line-130"></a>      <span class='varid'>setBaseURIFilter</span>
+<a name="line-131"></a>
+<a name="line-132"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-133"></a>
+<a name="line-134"></a><a name="setBaseURIFilter"></a><span class='definition'>setBaseURIFilter</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-135"></a><span class='definition'>setBaseURIFilter</span>
+<a name="line-136"></a>    <span class='keyglyph'>=</span> <span class='varid'>performAction</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>setBaseURI</span> <span class='layout'>(</span><span class='varid'>valueOf</span> <span class='varid'>transferURI</span> <span class='varid'>t</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-137"></a>      <span class='varop'>`whenM`</span> <span class='varid'>isRoot</span>
+<a name="line-138"></a>
+<a name="line-139"></a><span class='comment'>-- |</span>
+<a name="line-140"></a><span class='comment'>-- filter command for saving and restoring</span>
+<a name="line-141"></a><span class='comment'>-- the base URI</span>
+<a name="line-142"></a><span class='comment'>--</span>
+<a name="line-143"></a><span class='comment'>--    * 1.parameter f :  the filter that possible changes the base URI</span>
+<a name="line-144"></a><span class='comment'>--</span>
+<a name="line-145"></a><span class='comment'>--</span>
+<a name="line-146"></a><span class='comment'>--    - returns : a filter with the same effect as f, that restores the base URI after application of f</span>
+<a name="line-147"></a>
+<a name="line-148"></a><a name="runInLocalURIContext"></a><span class='definition'>runInLocalURIContext</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-149"></a><span class='definition'>runInLocalURIContext</span> <span class='varid'>f</span> <span class='varid'>t</span>
+<a name="line-150"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-151"></a>      <span class='varid'>oldContext</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getBaseURI</span>
+<a name="line-152"></a>      <span class='varid'>trace</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"runInLocalURIContext: save base URI "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>oldContext</span><span class='layout'>)</span>
+<a name="line-153"></a>      <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>f</span> <span class='varid'>t</span>
+<a name="line-154"></a>      <span class='varid'>setBaseURI</span> <span class='varid'>oldContext</span>
+<a name="line-155"></a>      <span class='varid'>trace</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"runInLocalURIContext: restore base URI "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>oldContext</span><span class='layout'>)</span>
+<a name="line-156"></a>      <span class='varid'>return</span> <span class='varid'>res</span>
+<a name="line-157"></a>
+<a name="line-158"></a><span class='comment'>-- |</span>
+<a name="line-159"></a><span class='comment'>-- filter command for running an action in a new URI context</span>
+<a name="line-160"></a>
+<a name="line-161"></a><a name="runInNewURIContext"></a><span class='definition'>runInNewURIContext</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-162"></a><span class='definition'>runInNewURIContext</span> <span class='varid'>uri</span> <span class='varid'>f</span>
+<a name="line-163"></a>    <span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='varid'>uri</span>
+<a name="line-164"></a>	<span class='keyglyph'>=</span> <span class='varid'>f</span>
+<a name="line-165"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>
+<a name="line-166"></a>	<span class='keyglyph'>=</span> <span class='varid'>runInLocalURIContext</span>
+<a name="line-167"></a>	  <span class='layout'>(</span> <span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span> <span class='keyword'>do</span>
+<a name="line-168"></a>		     <span class='varid'>trace</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"runInNewURIContext: new base URI "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>uri</span><span class='layout'>)</span>
+<a name="line-169"></a>		     <span class='varid'>setBaseURI</span> <span class='varid'>uri</span>
+<a name="line-170"></a>		     <span class='varid'>f</span> <span class='varid'>t</span>
+<a name="line-171"></a>		   <span class='layout'>)</span>
+<a name="line-172"></a>	  <span class='layout'>)</span>
+<a name="line-173"></a>
+<a name="line-174"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-175"></a><span class='comment'>-- |</span>
+<a name="line-176"></a><span class='comment'>-- guessEncoding uses encoding attribute and content</span>
+<a name="line-177"></a><span class='comment'>-- to determine the encoding scheme.</span>
+<a name="line-178"></a><span class='comment'>--</span>
+<a name="line-179"></a><span class='comment'>-- it's assumed that an encoding spec has been tried to parse before guessing the encoding.</span>
+<a name="line-180"></a><span class='comment'>--</span>
+<a name="line-181"></a><span class='comment'>-- UTF-8 is the default encoding</span>
+<a name="line-182"></a><span class='comment'>--</span>
+<a name="line-183"></a><span class='comment'>-- other supported encodings are ISO-8859-1 (also known as ISO-Latin-1),</span>
+<a name="line-184"></a><span class='comment'>-- US-ASCII, UTF-16 or ISO-10646-UCS-2, UTF-16BE, UTF-16LE</span>
+<a name="line-185"></a>
+<a name="line-186"></a><a name="guessDocEncoding"></a><span class='definition'>guessDocEncoding</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-187"></a><span class='definition'>guessDocEncoding</span>
+<a name="line-188"></a>    <span class='keyglyph'>=</span> <span class='varid'>addDocEncoding</span>
+<a name="line-189"></a>      <span class='varop'>`whenM`</span> <span class='varid'>isRoot</span>
+<a name="line-190"></a>    <span class='keyword'>where</span>
+<a name="line-191"></a>    <span class='varid'>addDocEncoding</span> <span class='varid'>n'</span>
+<a name="line-192"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-193"></a>	  <span class='varid'>trace</span> <span class='num'>2</span> <span class='layout'>(</span> <span class='str'>"guessDocEncoding: encoding is "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>guess</span><span class='layout'>)</span>
+<a name="line-194"></a>	  <span class='layout'>(</span> <span class='varid'>encFilter</span> <span class='layout'>(</span><span class='varid'>getDecodingFct</span> <span class='varid'>guess</span><span class='layout'>)</span>
+<a name="line-195"></a>	    <span class='varop'>.&gt;&gt;</span>
+<a name="line-196"></a>	    <span class='varid'>issueError</span>
+<a name="line-197"></a>	    <span class='varop'>.&gt;&gt;</span>
+<a name="line-198"></a>	    <span class='varid'>liftMf</span> <span class='layout'>(</span><span class='varid'>addAttr</span> <span class='varid'>transferEncoding</span> <span class='varid'>guess</span><span class='layout'>)</span> <span class='layout'>)</span> <span class='varid'>n'</span>
+<a name="line-199"></a>	  <span class='keyword'>where</span>
+<a name="line-200"></a>	  <span class='varid'>guess</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>
+<a name="line-201"></a>	  <span class='varid'>guess</span>	<span class='keyglyph'>=</span> <span class='varid'>head</span> <span class='varop'>.</span> <span class='varid'>filter</span> <span class='layout'>(</span><span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>null</span><span class='layout'>)</span>
+<a name="line-202"></a>		  <span class='varop'>$</span> <span class='keyglyph'>[</span> <span class='layout'>(</span><span class='varid'>guessEncoding</span> <span class='varop'>.</span> <span class='varid'>showXText</span> <span class='varop'>.</span> <span class='varid'>getChildren</span><span class='layout'>)</span> <span class='varid'>n'</span>
+<a name="line-203"></a>		    <span class='layout'>,</span> <span class='varid'>valueOf</span> <span class='varid'>transferEncoding</span> <span class='varid'>n'</span>
+<a name="line-204"></a>		    <span class='layout'>,</span> <span class='varid'>valueOf</span> <span class='varid'>a_encoding</span> <span class='varid'>n'</span>
+<a name="line-205"></a>		    <span class='layout'>,</span> <span class='varid'>utf8</span>
+<a name="line-206"></a>		    <span class='keyglyph'>]</span>
+<a name="line-207"></a>	  <span class='varid'>encFilter</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>fct</span><span class='layout'>)</span>
+<a name="line-208"></a>	      <span class='keyglyph'>=</span> <span class='varid'>decodeDoc</span> <span class='varid'>fct</span>
+<a name="line-209"></a>
+<a name="line-210"></a>	  <span class='varid'>encFilter</span> <span class='conid'>Nothing</span>
+<a name="line-211"></a>	      <span class='keyglyph'>=</span> <span class='varid'>addFatal</span> <span class='layout'>(</span><span class='str'>"encoding scheme not supported: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>guess</span><span class='layout'>)</span>
+<a name="line-212"></a>
+<a name="line-213"></a>	  <span class='varid'>decodeDoc</span> <span class='varid'>df</span> <span class='varid'>n''</span>
+<a name="line-214"></a>	      <span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='varid'>errs</span>	<span class='keyglyph'>=</span> <span class='varid'>liftMf</span> <span class='layout'>(</span><span class='varid'>replaceChildren</span> <span class='layout'>(</span><span class='varid'>xtext</span> <span class='layout'>(</span><span class='varid'>normalizeNL</span> <span class='varid'>res</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>n''</span>
+<a name="line-215"></a>	      <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>liftMf</span> <span class='layout'>(</span><span class='varid'>replaceChildren</span> <span class='layout'>(</span><span class='varid'>xtext</span> <span class='str'>""</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-216"></a>				    <span class='varop'>.&gt;&gt;</span>
+<a name="line-217"></a>				    <span class='layout'>(</span> <span class='varid'>issueDecodingErrs</span>
+<a name="line-218"></a>				      <span class='varop'>+++&gt;&gt;</span>
+<a name="line-219"></a>				      <span class='varid'>addFatal</span> <span class='str'>"decoding errors detected"</span>
+<a name="line-220"></a>				    <span class='layout'>)</span>
+<a name="line-221"></a>				  <span class='layout'>)</span> <span class='varid'>n''</span>
+<a name="line-222"></a>	      <span class='keyword'>where</span>
+<a name="line-223"></a>	      <span class='varid'>str</span> <span class='keyglyph'>=</span> <span class='varid'>xshow</span> <span class='varop'>.</span> <span class='varid'>getChildren</span> <span class='varop'>$</span> <span class='varid'>n''</span>
+<a name="line-224"></a>	      <span class='layout'>(</span><span class='varid'>res</span><span class='layout'>,</span> <span class='varid'>errs</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>df</span> <span class='varid'>str</span>
+<a name="line-225"></a>	      <span class='varid'>issueDecodingErrs</span> <span class='keyglyph'>=</span> <span class='varid'>catM</span> <span class='varop'>.</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>issueErr</span> <span class='varop'>.</span> <span class='layout'>(</span><span class='varid'>guess</span> <span class='varop'>++</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='layout'>(</span><span class='str'>" encoding error"</span> <span class='varop'>++</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>errs</span>
+<a name="line-226"></a>
+<a name="line-227"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-228"></a>
+<a name="line-229"></a><a name="getDefaultURI"></a><span class='definition'>getDefaultURI</span>	<span class='keyglyph'>::</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>String</span>
+<a name="line-230"></a><span class='definition'>getDefaultURI</span>
+<a name="line-231"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-232"></a>      <span class='varid'>uri</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParam</span> <span class='varid'>transferDefaultURI</span>
+<a name="line-233"></a>      <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>uri</span>
+<a name="line-234"></a>	 <span class='keyword'>then</span> <span class='keyword'>do</span>
+<a name="line-235"></a>	      <span class='varid'>setDefaultURI</span>
+<a name="line-236"></a>	      <span class='varid'>getDefaultURI</span>
+<a name="line-237"></a>	 <span class='keyword'>else</span> <span class='varid'>return</span> <span class='varid'>uri</span>
+<a name="line-238"></a>
+<a name="line-239"></a><span class='comment'>-- |</span>
+<a name="line-240"></a><span class='comment'>-- set the base URI, all other URIs are handled relative to this base URI</span>
+<a name="line-241"></a><span class='comment'>--</span>
+<a name="line-242"></a><span class='comment'>-- the default base URI is @file:\/\/\/\&lt;current-working-dir\&gt;\/@</span>
+<a name="line-243"></a><span class='comment'>--</span>
+<a name="line-244"></a><span class='comment'>-- see also : 'getBaseURI'</span>
+<a name="line-245"></a>
+<a name="line-246"></a><a name="setBaseURI"></a><span class='definition'>setBaseURI</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>()</span>
+<a name="line-247"></a><span class='definition'>setBaseURI</span> <span class='varid'>str</span>
+<a name="line-248"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-249"></a>      <span class='varid'>trace</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"setBaseURI: new base URI: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>str</span><span class='layout'>)</span>
+<a name="line-250"></a>      <span class='varid'>setSysParam</span> <span class='varid'>transferURI</span> <span class='varid'>str</span>
+<a name="line-251"></a>
+<a name="line-252"></a><span class='comment'>-- |</span>
+<a name="line-253"></a><span class='comment'>-- read the current base URI</span>
+<a name="line-254"></a><span class='comment'>--</span>
+<a name="line-255"></a><span class='comment'>-- see also : 'setBaseURI'</span>
+<a name="line-256"></a>
+<a name="line-257"></a><a name="getBaseURI"></a><span class='definition'>getBaseURI</span>	<span class='keyglyph'>::</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>String</span>
+<a name="line-258"></a><span class='definition'>getBaseURI</span>
+<a name="line-259"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-260"></a>      <span class='varid'>uri</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParam</span> <span class='varid'>transferURI</span>
+<a name="line-261"></a>      <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>uri</span>
+<a name="line-262"></a>	 <span class='keyword'>then</span> <span class='keyword'>do</span>
+<a name="line-263"></a>	      <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getDefaultURI</span>
+<a name="line-264"></a>	      <span class='varid'>setBaseURI</span> <span class='varid'>res</span>
+<a name="line-265"></a>	      <span class='varid'>getBaseURI</span>
+<a name="line-266"></a>	 <span class='keyword'>else</span> <span class='varid'>return</span> <span class='varid'>uri</span>
+<a name="line-267"></a>
+<a name="line-268"></a><span class='comment'>-- |</span>
+<a name="line-269"></a><span class='comment'>-- transform an URI into an absolut URI using the current base URI</span>
+<a name="line-270"></a><span class='comment'>--</span>
+<a name="line-271"></a><span class='comment'>--</span>
+<a name="line-272"></a><span class='comment'>--    * 1.parameter uri :  the URI as string</span>
+<a name="line-273"></a><span class='comment'>--</span>
+<a name="line-274"></a><span class='comment'>--</span>
+<a name="line-275"></a><span class='comment'>--    - returns : the absolut URI as string or \"\" in case of an error</span>
+<a name="line-276"></a>
+<a name="line-277"></a><a name="getAbsolutURI"></a><span class='definition'>getAbsolutURI</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>String</span>
+<a name="line-278"></a><span class='definition'>getAbsolutURI</span> <span class='varid'>uri</span>
+<a name="line-279"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-280"></a>      <span class='varid'>baseUri</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getBaseURI</span>
+<a name="line-281"></a>      <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>expandURI</span> <span class='varid'>uri</span> <span class='varid'>baseUri</span>
+<a name="line-282"></a>
+<a name="line-283"></a><a name="expandURI"></a><span class='definition'>expandURI</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-284"></a><span class='definition'>expandURI</span> <span class='varid'>uri</span> <span class='varid'>base</span>
+<a name="line-285"></a>    <span class='keyglyph'>=</span> <span class='varid'>fromMaybe</span> <span class='str'>""</span> <span class='varop'>$</span> <span class='varid'>expand</span>
+<a name="line-286"></a>    <span class='keyword'>where</span>
+<a name="line-287"></a>    <span class='varid'>expand</span> <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-288"></a>	     <span class='varid'>base'</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>parseURIReference</span> <span class='varid'>base</span>
+<a name="line-289"></a>	     <span class='varid'>uri'</span>  <span class='keyglyph'>&lt;-</span> <span class='varid'>parseURIReference</span> <span class='varid'>uri</span>
+<a name="line-290"></a>	     <span class='varid'>abs'</span>  <span class='keyglyph'>&lt;-</span> <span class='varid'>relativeTo</span> <span class='varid'>uri'</span> <span class='varid'>base'</span>
+<a name="line-291"></a>	     <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>show</span> <span class='varid'>abs'</span>
+<a name="line-292"></a>
+<a name="line-293"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-294"></a>
+<a name="line-295"></a><a name="setStandAloneFilter"></a><span class='definition'>setStandAloneFilter</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-296"></a><span class='definition'>setStandAloneFilter</span>
+<a name="line-297"></a>    <span class='keyglyph'>=</span> <span class='varid'>performAction</span> <span class='varid'>setStandAlone</span>
+<a name="line-298"></a>      <span class='keyword'>where</span>
+<a name="line-299"></a>      <span class='varid'>setStandAlone</span> <span class='varid'>t</span>
+<a name="line-300"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-301"></a>	    <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>standalone</span>
+<a name="line-302"></a>	       <span class='keyword'>then</span> <span class='varid'>return</span> <span class='conid'>()</span>
+<a name="line-303"></a>	       <span class='keyword'>else</span> <span class='keyword'>do</span>
+<a name="line-304"></a>		    <span class='varid'>trace</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"setStandAloneFilter: standalone="</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>standaloneVal</span><span class='layout'>)</span>
+<a name="line-305"></a>		    <span class='varid'>setSysParam</span> <span class='varid'>a_standalone</span> <span class='varid'>standaloneVal</span>
+<a name="line-306"></a>	    <span class='keyword'>where</span>
+<a name="line-307"></a>	    <span class='varid'>standalone</span>	<span class='keyglyph'>=</span> <span class='varid'>getValue</span> <span class='varid'>a_standalone</span> <span class='varid'>t</span>
+<a name="line-308"></a>	    <span class='varid'>standaloneVal</span>	<span class='keyglyph'>=</span> <span class='varid'>showXText</span> <span class='varid'>standalone</span>
+<a name="line-309"></a>
+<a name="line-310"></a><span class='comment'>-- |</span>
+<a name="line-311"></a><span class='comment'>-- predicate for testing the standalone document attribute</span>
+<a name="line-312"></a>
+<a name="line-313"></a><a name="isStandaloneDocument"></a><span class='definition'>isStandaloneDocument</span>	<span class='keyglyph'>::</span> <span class='conid'>XState</span> <span class='varid'>state</span> <span class='conid'>Bool</span>
+<a name="line-314"></a><span class='definition'>isStandaloneDocument</span>
+<a name="line-315"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-316"></a>      <span class='varid'>val</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParam</span> <span class='varid'>a_standalone</span>
+<a name="line-317"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>val</span> <span class='varop'>==</span> <span class='str'>"yes"</span><span class='layout'>)</span>
+<a name="line-318"></a>
+<a name="line-319"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-320"></a>
+<a name="line-321"></a><span class='comment'>-- |</span>
+<a name="line-322"></a><span class='comment'>-- the hard io operations</span>
+<a name="line-323"></a><span class='comment'>--</span>
+<a name="line-324"></a><span class='comment'>-- for reading a file or accessing a document via http</span>
+<a name="line-325"></a><span class='comment'>-- input must be a root node with a @source@ attribute specifying the URI</span>
+<a name="line-326"></a>
+<a name="line-327"></a><a name="getUrlContents"></a><span class='definition'>getUrlContents</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-328"></a><span class='definition'>getUrlContents</span>
+<a name="line-329"></a>    <span class='keyglyph'>=</span>  <span class='varid'>getCont</span>
+<a name="line-330"></a>      <span class='varop'>`whenM`</span> <span class='varid'>isRoot</span>
+<a name="line-331"></a>    <span class='keyword'>where</span>
+<a name="line-332"></a>    <span class='varid'>getCont</span> <span class='varid'>n'</span>
+<a name="line-333"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-334"></a>	  <span class='varid'>trace</span> <span class='num'>1</span> <span class='layout'>(</span><span class='str'>"getUrlContent: reading "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>src</span><span class='layout'>)</span>
+<a name="line-335"></a>	  <span class='varid'>uri</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getAbsolutURI</span> <span class='varid'>src</span>
+<a name="line-336"></a>	  <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>uri</span>
+<a name="line-337"></a>	     <span class='keyword'>then</span> <span class='varid'>urlErr</span> <span class='layout'>(</span> <span class='str'>"illegal URI for input: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>src</span> <span class='layout'>)</span>
+<a name="line-338"></a>	     <span class='keyword'>else</span> <span class='keyword'>let</span>
+<a name="line-339"></a>		  <span class='varid'>uri'</span>     <span class='keyglyph'>=</span> <span class='varid'>fromJust</span> <span class='varop'>$</span> <span class='varid'>parseURIReference</span> <span class='varid'>uri</span>
+<a name="line-340"></a>		  <span class='varid'>proto</span>    <span class='keyglyph'>=</span> <span class='varid'>init</span> <span class='varop'>.</span> <span class='varid'>uriScheme</span> <span class='varop'>$</span> <span class='varid'>uri'</span>
+<a name="line-341"></a>		  <span class='varid'>handler</span>  <span class='keyglyph'>=</span> <span class='varid'>getProtocolHandler</span> <span class='varid'>proto</span>
+<a name="line-342"></a>		  <span class='keyword'>in</span>
+<a name="line-343"></a>		  <span class='layout'>(</span> <span class='varid'>liftMf</span> <span class='layout'>(</span><span class='varid'>addAttr</span> <span class='varid'>transferProtocol</span> <span class='varid'>proto</span>
+<a name="line-344"></a>			   <span class='varop'>.&gt;</span>
+<a name="line-345"></a>			   <span class='varid'>addAttr</span> <span class='varid'>transferURI</span> <span class='varid'>uri</span>
+<a name="line-346"></a>			  <span class='layout'>)</span>
+<a name="line-347"></a>		    <span class='varop'>.&gt;&gt;</span>
+<a name="line-348"></a>		    <span class='varid'>handler</span> <span class='varid'>uri'</span>
+<a name="line-349"></a>		  <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>n'</span>
+<a name="line-350"></a>	<span class='keyword'>where</span>
+<a name="line-351"></a>	<span class='varid'>src</span>        <span class='keyglyph'>=</span> <span class='varid'>valueOf</span> <span class='varid'>a_source</span> <span class='varid'>n'</span>
+<a name="line-352"></a>	<span class='varid'>urlErr</span> <span class='varid'>msg</span> <span class='keyglyph'>=</span> <span class='varid'>addFatal</span> <span class='varid'>msg</span> <span class='varid'>n'</span>
+<a name="line-353"></a>
+<a name="line-354"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-355"></a>
+<a name="line-356"></a><span class='comment'>-- |</span>
+<a name="line-357"></a><span class='comment'>-- compute the length of the data for a document read previously</span>
+<a name="line-358"></a><span class='comment'>-- by a call of 'getUrlContents. The result is stored as an attribute</span>
+<a name="line-359"></a><span class='comment'>-- value in the document root node. the attribute name is 'a_contentLength'</span>
+<a name="line-360"></a>
+<a name="line-361"></a><a name="getContentLength"></a><span class='definition'>getContentLength</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-362"></a><span class='definition'>getContentLength</span>
+<a name="line-363"></a>    <span class='keyglyph'>=</span> <span class='varid'>addAttrl</span> <span class='varid'>contentLengthAttr</span>
+<a name="line-364"></a>      <span class='varop'>`when`</span> <span class='varid'>isRoot</span>
+<a name="line-365"></a>      <span class='keyword'>where</span>
+<a name="line-366"></a>      <span class='varid'>http_contentLength</span>	<span class='keyglyph'>=</span> <span class='varid'>httpPrefix</span> <span class='varop'>++</span> <span class='str'>"Content-Length"</span>
+<a name="line-367"></a>
+<a name="line-368"></a>      <span class='varid'>contentLengthAttr</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-369"></a>      <span class='varid'>contentLengthAttr</span> <span class='varid'>t</span>
+<a name="line-370"></a>	  <span class='keyglyph'>=</span> <span class='varid'>choice</span> <span class='keyglyph'>[</span> <span class='varid'>hasAttr</span> <span class='varid'>a_contentLength</span>
+<a name="line-371"></a>		     <span class='conop'>:-&gt;</span> <span class='varid'>none</span>
+<a name="line-372"></a>		   <span class='layout'>,</span> <span class='varid'>hasAttr</span> <span class='varid'>http_contentLength</span>
+<a name="line-373"></a>		     <span class='conop'>:-&gt;</span> <span class='varid'>mkXAttr</span> <span class='varid'>a_contentLength</span> <span class='layout'>(</span><span class='varid'>getValue</span> <span class='varid'>http_contentLength</span><span class='layout'>)</span>
+<a name="line-374"></a>		   <span class='layout'>,</span> <span class='varid'>this</span>
+<a name="line-375"></a>                     <span class='conop'>:-&gt;</span> <span class='varid'>mkXAttr</span> <span class='varid'>a_contentLength</span> <span class='varid'>getLength</span>
+<a name="line-376"></a>		   <span class='keyglyph'>]</span> <span class='varid'>t</span>
+<a name="line-377"></a>
+<a name="line-378"></a>      <span class='varid'>getLength</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-379"></a>      <span class='varid'>getLength</span> <span class='varid'>t</span>
+<a name="line-380"></a>	  <span class='keyglyph'>=</span> <span class='varid'>xtext</span> <span class='layout'>(</span><span class='varid'>show</span> <span class='varop'>.</span> <span class='varid'>length</span> <span class='varop'>.</span> <span class='varid'>xshow</span> <span class='varop'>.</span> <span class='varid'>getChildren</span> <span class='varop'>$</span> <span class='varid'>t</span><span class='layout'>)</span>
+<a name="line-381"></a>
+<a name="line-382"></a><span class='comment'>-- ------------------------------------------------------------</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Parser-XmlOutput.html b/doc/hxt-filter/src/Text-XML-HXT-Parser-XmlOutput.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Parser-XmlOutput.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- output functions</span>
+<a name="line-3"></a><span class='comment'>-- implemented as filer</span>
+<a name="line-4"></a>
+<a name="line-5"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlOutput</span>
+<a name="line-6"></a>    <span class='layout'>(</span> <span class='varid'>putXmlDoc</span>
+<a name="line-7"></a>    <span class='layout'>,</span> <span class='varid'>putXmlDocToFile</span>
+<a name="line-8"></a>    <span class='layout'>,</span> <span class='varid'>putXmlTree</span>	<span class='comment'>-- for trace output</span>
+<a name="line-9"></a>    <span class='layout'>,</span> <span class='varid'>putXmlSource</span>	<span class='comment'>--  "    "     "</span>
+<a name="line-10"></a>
+<a name="line-11"></a>    <span class='layout'>,</span> <span class='varid'>hPutXmlDoc</span>
+<a name="line-12"></a>    <span class='layout'>,</span> <span class='varid'>hPutXmlTree</span>
+<a name="line-13"></a>    <span class='layout'>,</span> <span class='varid'>hPutXmlSource</span>
+<a name="line-14"></a>
+<a name="line-15"></a>    <span class='layout'>,</span> <span class='varid'>traceF</span>
+<a name="line-16"></a>    <span class='layout'>,</span> <span class='varid'>traceMsg</span>
+<a name="line-17"></a>    <span class='layout'>,</span> <span class='varid'>traceTree</span>
+<a name="line-18"></a>    <span class='layout'>,</span> <span class='varid'>traceSource</span>
+<a name="line-19"></a>    <span class='layout'>)</span>
+<a name="line-20"></a>
+<a name="line-21"></a><span class='keyword'>where</span>
+<a name="line-22"></a>
+<a name="line-23"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-24"></a>
+<a name="line-25"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-26"></a>
+<a name="line-27"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>EditFilters</span>	<span class='layout'>(</span> <span class='varid'>indentDoc</span>
+<a name="line-28"></a>					<span class='layout'>,</span> <span class='varid'>numberLinesInXmlDoc</span>
+<a name="line-29"></a>					<span class='layout'>,</span> <span class='varid'>treeRepOfXmlDoc</span>
+<a name="line-30"></a>					<span class='layout'>,</span> <span class='varid'>addHeadlineToXmlDoc</span>
+<a name="line-31"></a>					<span class='layout'>)</span>
+<a name="line-32"></a>
+<a name="line-33"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>IO</span>
+<a name="line-34"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>IO</span><span class='varop'>.</span><span class='conid'>Error</span>
+<a name="line-35"></a>
+<a name="line-36"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-37"></a>
+<a name="line-38"></a><span class='comment'>-- |</span>
+<a name="line-39"></a><span class='comment'>-- document output for standard output</span>
+<a name="line-40"></a><span class='comment'>--</span>
+<a name="line-41"></a><span class='comment'>-- see also : 'hPutXmlDoc'</span>
+<a name="line-42"></a>
+<a name="line-43"></a><a name="putXmlDoc"></a><span class='definition'>putXmlDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-44"></a><span class='definition'>putXmlDoc</span>	<span class='keyglyph'>=</span> <span class='varid'>hPutXmlDoc</span> <span class='varid'>stdout</span>
+<a name="line-45"></a>
+<a name="line-46"></a><span class='comment'>-- |</span>
+<a name="line-47"></a><span class='comment'>-- document output for arbitrary files.</span>
+<a name="line-48"></a><span class='comment'>--</span>
+<a name="line-49"></a><span class='comment'>-- Result is the input document</span>
+<a name="line-50"></a>
+<a name="line-51"></a><a name="hPutXmlDoc"></a><span class='definition'>hPutXmlDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>Handle</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-52"></a><span class='definition'>hPutXmlDoc</span> <span class='varid'>handle</span> <span class='varid'>t</span>
+<a name="line-53"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-54"></a>      <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>io</span> <span class='varop'>$</span> <span class='varid'>try</span> <span class='layout'>(</span><span class='varid'>hPutStr</span> <span class='varid'>handle</span> <span class='varid'>content</span><span class='layout'>)</span>
+<a name="line-55"></a>      <span class='keyword'>case</span> <span class='varid'>res</span> <span class='keyword'>of</span>
+<a name="line-56"></a>        <span class='conid'>Left</span> <span class='varid'>ioerr</span>
+<a name="line-57"></a>	    <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span> <span class='varid'>issueFatal</span> <span class='layout'>(</span><span class='varid'>show</span> <span class='varid'>ioerr</span><span class='layout'>)</span>
+<a name="line-58"></a>		 <span class='varop'>+++&gt;&gt;</span>
+<a name="line-59"></a>		 <span class='varid'>thisM</span>
+<a name="line-60"></a>	       <span class='layout'>)</span> <span class='varid'>t</span>
+<a name="line-61"></a>	<span class='conid'>Right</span> <span class='keyword'>_</span>
+<a name="line-62"></a>	    <span class='keyglyph'>-&gt;</span> <span class='varid'>thisM</span> <span class='varid'>t</span>
+<a name="line-63"></a>
+<a name="line-64"></a>    <span class='keyword'>where</span>
+<a name="line-65"></a>    <span class='varid'>content</span> <span class='keyglyph'>=</span> <span class='varid'>xshow</span> <span class='varop'>.</span> <span class='varid'>getChildren</span> <span class='varop'>$</span> <span class='varid'>t</span>
+<a name="line-66"></a>
+<a name="line-67"></a><span class='comment'>-- |</span>
+<a name="line-68"></a><span class='comment'>-- document output on a given file name</span>
+<a name="line-69"></a><span class='comment'>--</span>
+<a name="line-70"></a><span class='comment'>-- Result is the input document</span>
+<a name="line-71"></a><span class='comment'>--</span>
+<a name="line-72"></a><span class='comment'>-- see also : 'hPutXmlDoc', 'putXmlDoc'</span>
+<a name="line-73"></a>
+<a name="line-74"></a><a name="putXmlDocToFile"></a><span class='definition'>putXmlDocToFile</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-75"></a><span class='definition'>putXmlDocToFile</span> <span class='varid'>fn</span> <span class='varid'>t</span>
+<a name="line-76"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-77"></a>      <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>io</span> <span class='varop'>$</span> <span class='varid'>try</span> <span class='layout'>(</span><span class='varid'>openFile</span> <span class='varid'>fn</span> <span class='conid'>WriteMode</span><span class='layout'>)</span>
+<a name="line-78"></a>      <span class='keyword'>case</span> <span class='varid'>res</span> <span class='keyword'>of</span>
+<a name="line-79"></a>        <span class='conid'>Left</span> <span class='varid'>ioerr</span>
+<a name="line-80"></a>	    <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span> <span class='varid'>issueFatal</span> <span class='layout'>(</span><span class='varid'>show</span> <span class='varid'>ioerr</span><span class='layout'>)</span>
+<a name="line-81"></a>		 <span class='varop'>+++&gt;&gt;</span>
+<a name="line-82"></a>		 <span class='varid'>thisM</span>
+<a name="line-83"></a>	       <span class='layout'>)</span> <span class='varid'>t</span>
+<a name="line-84"></a>	<span class='conid'>Right</span> <span class='varid'>h</span>
+<a name="line-85"></a>	    <span class='keyglyph'>-&gt;</span> <span class='keyword'>do</span>
+<a name="line-86"></a>	       <span class='varid'>t'</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>hPutXmlDoc</span> <span class='varid'>h</span> <span class='varid'>t</span>
+<a name="line-87"></a>	       <span class='varid'>io</span> <span class='varop'>$</span> <span class='varid'>try</span> <span class='layout'>(</span><span class='varid'>hClose</span> <span class='varid'>h</span><span class='layout'>)</span>
+<a name="line-88"></a>	       <span class='varid'>trace</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"document written to file: "</span> <span class='varop'>++</span> <span class='varid'>fn</span><span class='layout'>)</span>
+<a name="line-89"></a>	       <span class='varid'>return</span> <span class='varid'>t'</span>
+<a name="line-90"></a>
+<a name="line-91"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-92"></a>
+<a name="line-93"></a><span class='comment'>-- |</span>
+<a name="line-94"></a><span class='comment'>-- output of tree representation for trace</span>
+<a name="line-95"></a>
+<a name="line-96"></a><a name="hPutXmlTree"></a><span class='definition'>hPutXmlTree</span>	<span class='keyglyph'>::</span> <span class='conid'>Handle</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-97"></a><span class='definition'>hPutXmlTree</span> <span class='varid'>handle</span>
+<a name="line-98"></a>    <span class='keyglyph'>=</span> <span class='varid'>performAction</span>
+<a name="line-99"></a>      <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>n</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>liftMf</span> <span class='layout'>(</span><span class='varid'>treeRepOfXmlDoc</span>
+<a name="line-100"></a>		     <span class='varop'>.&gt;</span>
+<a name="line-101"></a>		     <span class='varid'>addHeadlineToXmlDoc</span>
+<a name="line-102"></a>		    <span class='layout'>)</span>
+<a name="line-103"></a>              <span class='varop'>.&gt;&gt;</span>
+<a name="line-104"></a>              <span class='varid'>hPutXmlDoc</span> <span class='varid'>handle</span>
+<a name="line-105"></a>              <span class='varop'>$</span> <span class='varid'>n</span>
+<a name="line-106"></a>      <span class='layout'>)</span>
+<a name="line-107"></a>
+<a name="line-108"></a><a name="putXmlTree"></a><span class='definition'>putXmlTree</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-109"></a><span class='definition'>putXmlTree</span>	<span class='keyglyph'>=</span> <span class='varid'>hPutXmlTree</span> <span class='varid'>stdout</span>
+<a name="line-110"></a>
+<a name="line-111"></a><span class='comment'>-- |</span>
+<a name="line-112"></a><span class='comment'>-- output of text representation for trace</span>
+<a name="line-113"></a>
+<a name="line-114"></a><a name="hPutXmlSource"></a><span class='definition'>hPutXmlSource</span>	<span class='keyglyph'>::</span> <span class='conid'>Handle</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-115"></a><span class='definition'>hPutXmlSource</span> <span class='varid'>handle</span>
+<a name="line-116"></a>    <span class='keyglyph'>=</span> <span class='varid'>performAction</span>
+<a name="line-117"></a>      <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>n</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>liftMf</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>rootTag</span>
+<a name="line-118"></a>			<span class='keyglyph'>[</span> <span class='varid'>sattr</span> <span class='varid'>a_source</span> <span class='str'>"internal tree"</span> <span class='keyglyph'>]</span>
+<a name="line-119"></a>			<span class='keyglyph'>[</span> <span class='varid'>this</span> <span class='keyglyph'>]</span>
+<a name="line-120"></a>			<span class='varop'>`whenNot`</span> <span class='varid'>isRoot</span>
+<a name="line-121"></a>		      <span class='layout'>)</span>
+<a name="line-122"></a>		      <span class='varop'>.&gt;</span>
+<a name="line-123"></a>		      <span class='varid'>indentDoc</span>
+<a name="line-124"></a>		      <span class='varop'>.&gt;</span>
+<a name="line-125"></a>		      <span class='varid'>numberLinesInXmlDoc</span>
+<a name="line-126"></a>		      <span class='varop'>.&gt;</span>
+<a name="line-127"></a>		      <span class='varid'>addHeadlineToXmlDoc</span>
+<a name="line-128"></a>		    <span class='layout'>)</span>
+<a name="line-129"></a>              <span class='varop'>.&gt;&gt;</span>
+<a name="line-130"></a>              <span class='varid'>hPutXmlDoc</span> <span class='varid'>handle</span>
+<a name="line-131"></a>              <span class='varop'>$</span> <span class='varid'>n</span>
+<a name="line-132"></a>      <span class='layout'>)</span>
+<a name="line-133"></a>
+<a name="line-134"></a><a name="putXmlSource"></a><span class='definition'>putXmlSource</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-135"></a><span class='definition'>putXmlSource</span>	<span class='keyglyph'>=</span> <span class='varid'>hPutXmlSource</span> <span class='varid'>stdout</span>
+<a name="line-136"></a>
+<a name="line-137"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-138"></a>
+<a name="line-139"></a><span class='comment'>-- trace filter for inserting trace operations</span>
+<a name="line-140"></a><span class='comment'>-- into a filter sequence</span>
+<a name="line-141"></a><span class='comment'>--</span>
+<a name="line-142"></a><span class='comment'>--    * 1.parameter level : like in 'traceCmd'</span>
+<a name="line-143"></a><span class='comment'>--</span>
+<a name="line-144"></a><span class='comment'>--    - 2.parameter cmd : the output filter, e.g. putXmlTree or putXmlSource</span>
+<a name="line-145"></a><span class='comment'>--</span>
+<a name="line-146"></a><span class='comment'>--    - 3.parameter : the tree</span>
+<a name="line-147"></a><span class='comment'>--</span>
+<a name="line-148"></a><span class='comment'>--    - returns: the tree</span>
+<a name="line-149"></a>
+<a name="line-150"></a><a name="traceF"></a><span class='definition'>traceF</span>		<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-151"></a><span class='definition'>traceF</span> <span class='varid'>level</span> <span class='varid'>cmd</span>
+<a name="line-152"></a>    <span class='keyglyph'>=</span> <span class='varid'>performAction</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>traceCmd</span> <span class='varid'>level</span> <span class='layout'>(</span><span class='varid'>cmd</span> <span class='varid'>t</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-153"></a>
+<a name="line-154"></a><a name="traceMsg"></a><span class='definition'>traceMsg</span>	<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-155"></a><span class='definition'>traceMsg</span> <span class='varid'>level</span> <span class='varid'>msg</span>
+<a name="line-156"></a>    <span class='keyglyph'>=</span> <span class='varid'>performAction</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='keyword'>_</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>trace</span> <span class='varid'>level</span> <span class='varid'>msg</span><span class='layout'>)</span>
+<a name="line-157"></a>
+<a name="line-158"></a><a name="traceTree"></a><span class='definition'>traceTree</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-159"></a><span class='definition'>traceTree</span>
+<a name="line-160"></a>    <span class='keyglyph'>=</span> <span class='varid'>traceF</span> <span class='num'>4</span> <span class='layout'>(</span><span class='varid'>hPutXmlTree</span> <span class='varid'>stderr</span><span class='layout'>)</span>
+<a name="line-161"></a>
+<a name="line-162"></a><a name="traceSource"></a><span class='definition'>traceSource</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-163"></a><span class='definition'>traceSource</span>
+<a name="line-164"></a>    <span class='keyglyph'>=</span> <span class='varid'>traceF</span> <span class='num'>3</span> <span class='layout'>(</span><span class='varid'>hPutXmlSource</span> <span class='varid'>stderr</span><span class='layout'>)</span>
+<a name="line-165"></a>
+<a name="line-166"></a><span class='comment'>-- ------------------------------------------------------------</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Parser-XmlParser.html b/doc/hxt-filter/src/Text-XML-HXT-Parser-XmlParser.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Parser-XmlParser.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- Xml Parser: the main parse filter </span>
+<a name="line-3"></a>
+<a name="line-4"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlParser</span>
+<a name="line-5"></a>    <span class='layout'>(</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlParsec</span>
+<a name="line-6"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlTokenParser</span>
+<a name="line-7"></a>    <span class='layout'>,</span> <span class='varid'>parseXmlDoc</span>
+<a name="line-8"></a>    <span class='layout'>,</span> <span class='varid'>substXmlEntities</span>
+<a name="line-9"></a>    <span class='layout'>)</span>
+<a name="line-10"></a><span class='keyword'>where</span>
+<a name="line-11"></a>
+<a name="line-12"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-13"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-14"></a>
+<a name="line-15"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlTokenParser</span>
+<a name="line-16"></a>
+<a name="line-17"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlEntities</span>
+<a name="line-18"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlParsec</span>
+<a name="line-19"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlOutput</span>
+<a name="line-20"></a>    <span class='layout'>(</span> <span class='varid'>traceTree</span>
+<a name="line-21"></a>    <span class='layout'>,</span> <span class='varid'>traceSource</span>
+<a name="line-22"></a>    <span class='layout'>,</span> <span class='varid'>traceMsg</span>
+<a name="line-23"></a>    <span class='layout'>)</span>
+<a name="line-24"></a>
+<a name="line-25"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-26"></a>
+<a name="line-27"></a><span class='comment'>-- |</span>
+<a name="line-28"></a><span class='comment'>-- The monadic parser for a whole document.</span>
+<a name="line-29"></a><span class='comment'>-- input must be a root node with a single text child.</span>
+<a name="line-30"></a><span class='comment'>-- Error messages are issued and global error state is set.</span>
+<a name="line-31"></a>
+<a name="line-32"></a><a name="parseXmlDoc"></a><span class='definition'>parseXmlDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>
+<a name="line-33"></a><span class='definition'>parseXmlDoc</span>
+<a name="line-34"></a>    <span class='keyglyph'>=</span> <span class='varid'>parseDoc</span>
+<a name="line-35"></a>      <span class='varop'>`whenM`</span> <span class='layout'>(</span> <span class='varid'>isRoot</span> <span class='varop'>.&gt;</span> <span class='varid'>getChildren</span> <span class='varop'>.&gt;</span> <span class='varid'>isXText</span> <span class='layout'>)</span>
+<a name="line-36"></a>      <span class='keyword'>where</span>
+<a name="line-37"></a>      <span class='varid'>parseDoc</span> <span class='varid'>t</span>
+<a name="line-38"></a>	  <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>traceMsg</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"parseXmlDoc: parse XML document "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>loc</span><span class='layout'>)</span>
+<a name="line-39"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-40"></a>	      <span class='varid'>parser</span>
+<a name="line-41"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-42"></a>	      <span class='varid'>liftMf</span> <span class='varid'>checkRes</span>
+<a name="line-43"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-44"></a>	      <span class='varid'>traceTree</span>
+<a name="line-45"></a>	      <span class='varop'>.&gt;&gt;</span>
+<a name="line-46"></a>	      <span class='varid'>traceSource</span>
+<a name="line-47"></a>	    <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>t</span>
+<a name="line-48"></a>	  <span class='keyword'>where</span>
+<a name="line-49"></a>	  <span class='varid'>loc</span> <span class='keyglyph'>=</span> <span class='varid'>valueOf</span> <span class='varid'>a_source</span> <span class='varid'>t</span>			<span class='comment'>-- document name</span>
+<a name="line-50"></a>	  <span class='varid'>checkRes</span>
+<a name="line-51"></a>	      <span class='keyglyph'>=</span> <span class='varid'>setStatus</span> <span class='varid'>c_err</span> <span class='layout'>(</span><span class='str'>"parsing XML source "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>loc</span><span class='layout'>)</span>
+<a name="line-52"></a>	        <span class='varop'>`whenNot`</span>
+<a name="line-53"></a>	        <span class='varid'>getChildren</span>
+<a name="line-54"></a>	  <span class='varid'>parser</span>
+<a name="line-55"></a>	      <span class='keyglyph'>=</span> <span class='varid'>processChildrenM</span> <span class='layout'>(</span><span class='varid'>liftF</span> <span class='layout'>(</span><span class='varid'>parseXmlText</span> <span class='varid'>document'</span> <span class='varid'>loc</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-56"></a>
+<a name="line-57"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-58"></a>
+<a name="line-59"></a><span class='comment'>-- |</span>
+<a name="line-60"></a><span class='comment'>-- Filter for substitution of all occurences of the predefined XML entites quot, amp, lt, gt, apos</span>
+<a name="line-61"></a><span class='comment'>-- by equivalent character references</span>
+<a name="line-62"></a>
+<a name="line-63"></a><a name="substXmlEntities"></a><span class='definition'>substXmlEntities</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-64"></a><span class='definition'>substXmlEntities</span>
+<a name="line-65"></a>    <span class='keyglyph'>=</span> <span class='varid'>choice</span>
+<a name="line-66"></a>      <span class='keyglyph'>[</span> <span class='varid'>isXEntityRef</span>	<span class='conop'>:-&gt;</span> <span class='varid'>substEntity</span>
+<a name="line-67"></a>      <span class='layout'>,</span> <span class='varid'>isXTag</span>		<span class='conop'>:-&gt;</span> <span class='varid'>processAttr</span> <span class='layout'>(</span><span class='varid'>processChildren</span> <span class='varid'>substXmlEntities</span><span class='layout'>)</span>
+<a name="line-68"></a>      <span class='layout'>,</span> <span class='varid'>this</span>		<span class='conop'>:-&gt;</span> <span class='varid'>this</span>
+<a name="line-69"></a>      <span class='keyglyph'>]</span>
+<a name="line-70"></a>      <span class='keyword'>where</span>
+<a name="line-71"></a>      <span class='varid'>substEntity</span> <span class='varid'>t'</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XEntityRef</span> <span class='varid'>en</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-72"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>case</span> <span class='layout'>(</span><span class='varid'>lookup</span> <span class='varid'>en</span> <span class='varid'>xmlEntities</span><span class='layout'>)</span> <span class='keyword'>of</span>
+<a name="line-73"></a>	    <span class='conid'>Just</span> <span class='varid'>i</span>
+<a name="line-74"></a>		<span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='varid'>mkXCharRefTree</span> <span class='varid'>i</span><span class='keyglyph'>]</span>
+<a name="line-75"></a>	    <span class='conid'>Nothing</span>
+<a name="line-76"></a>		<span class='keyglyph'>-&gt;</span> <span class='varid'>this</span> <span class='varid'>t'</span>
+<a name="line-77"></a>
+<a name="line-78"></a>      <span class='varid'>substEntity</span> <span class='keyword'>_</span>					<span class='comment'>-- just for preventing ghc warning</span>
+<a name="line-79"></a>	  <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='str'>"substXmlEntities: illegal argument"</span>
+<a name="line-80"></a>
+<a name="line-81"></a><span class='comment'>-- ------------------------------------------------------------</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Parser.html b/doc/hxt-filter/src/Text-XML-HXT-Parser.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Parser.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- Simple parse functions.</span>
+<a name="line-3"></a><span class='comment'>--</span>
+<a name="line-4"></a><span class='comment'>-- the "main" building blocks for an application.</span>
+<a name="line-5"></a><span class='comment'>-- this module exports all important functions for parsing, validating and transforming XML.</span>
+<a name="line-6"></a><span class='comment'>-- it also exports all basic datatypes and functions of the toolbox.</span>
+<a name="line-7"></a><span class='comment'>--</span>
+<a name="line-8"></a>
+<a name="line-9"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span>
+<a name="line-10"></a>    <span class='layout'>(</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span>
+<a name="line-11"></a>
+<a name="line-12"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlParser</span>
+<a name="line-13"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>HtmlParser</span>
+<a name="line-14"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlInput</span>
+<a name="line-15"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlOutput</span>
+<a name="line-16"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>DTDProcessing</span>
+<a name="line-17"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>MainFunctions</span>
+<a name="line-18"></a>
+<a name="line-19"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>Validation</span>
+<a name="line-20"></a>    <span class='layout'>)</span>
+<a name="line-21"></a><span class='keyword'>where</span>
+<a name="line-22"></a>
+<a name="line-23"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span>
+<a name="line-24"></a>
+<a name="line-25"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlParser</span>
+<a name="line-26"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>HtmlParser</span>
+<a name="line-27"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlInput</span>
+<a name="line-28"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlOutput</span>
+<a name="line-29"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>DTDProcessing</span>
+<a name="line-30"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>MainFunctions</span>
+<a name="line-31"></a>
+<a name="line-32"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>Validation</span>
+<a name="line-33"></a>
+<a name="line-34"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-35"></a>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Validator-AttributeValueValidation.html b/doc/hxt-filter/src/Text-XML-HXT-Validator-AttributeValueValidation.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Validator-AttributeValueValidation.html
@@ -0,0 +1,367 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- This module provides functions for validating attributes.</span>
+<a name="line-3"></a>
+<a name="line-4"></a><span class='comment'>-- The main functions are:</span>
+<a name="line-5"></a><span class='comment'>--</span>
+<a name="line-6"></a><span class='comment'>--  - Check if the attribute value meets the lexical constraints of its type</span>
+<a name="line-7"></a><span class='comment'>--</span>
+<a name="line-8"></a><span class='comment'>--  - Normalization of an attribute value</span>
+<a name="line-9"></a><span class='comment'>--</span>
+<a name="line-10"></a>
+<a name="line-11"></a><span class='comment'>-- Special namings in source code:</span>
+<a name="line-12"></a><span class='comment'>--</span>
+<a name="line-13"></a><span class='comment'>--  - nd - XDTD node</span>
+<a name="line-14"></a><span class='comment'>--</span>
+<a name="line-15"></a><span class='comment'>--  - n  - XTag node</span>
+<a name="line-16"></a><span class='comment'>--</span>
+<a name="line-17"></a>
+<a name="line-18"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>AttributeValueValidation</span>
+<a name="line-19"></a>    <span class='layout'>(</span> <span class='varid'>checkAttributeValue</span>
+<a name="line-20"></a>    <span class='layout'>,</span> <span class='varid'>normalizeAttributeValue</span>
+<a name="line-21"></a>    <span class='layout'>)</span>
+<a name="line-22"></a><span class='keyword'>where</span>
+<a name="line-23"></a>
+<a name="line-24"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlParser</span>
+<a name="line-25"></a>    <span class='layout'>(</span> <span class='varid'>parseNMToken</span>
+<a name="line-26"></a>    <span class='layout'>,</span> <span class='varid'>parseName</span>
+<a name="line-27"></a>    <span class='layout'>)</span>
+<a name="line-28"></a>
+<a name="line-29"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-30"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>Util</span>
+<a name="line-31"></a>
+<a name="line-32"></a><span class='comment'>-- |</span>
+<a name="line-33"></a><span class='comment'>-- Checks if the attribute value meets the lexical constraints of its type.</span>
+<a name="line-34"></a><span class='comment'>--</span>
+<a name="line-35"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>
+<a name="line-36"></a><span class='comment'>--</span>
+<a name="line-37"></a><span class='comment'>--    - 2.parameter attrDecl :  the declaration of the attribute from the DTD</span>
+<a name="line-38"></a><span class='comment'>--</span>
+<a name="line-39"></a><span class='comment'>--    - returns : a function which takes an element (XTag or XDTD ATTLIST),</span>
+<a name="line-40"></a><span class='comment'>--                    checks if the attribute value meets the lexical constraints</span>
+<a name="line-41"></a><span class='comment'>--                    of its type and returns a list of errors</span>
+<a name="line-42"></a>
+<a name="line-43"></a><a name="checkAttributeValue"></a><span class='definition'>checkAttributeValue</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-44"></a><span class='definition'>checkAttributeValue</span> <span class='varid'>dtdPart</span> <span class='varid'>attrDecl</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='keyword'>_</span> <span class='sel'>_al'</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-45"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkValue</span> <span class='varid'>attrType</span> <span class='varid'>dtdPart</span> <span class='varid'>normalizedVal</span> <span class='varid'>attrDecl</span> <span class='varid'>n</span>
+<a name="line-46"></a>      <span class='keyword'>where</span>
+<a name="line-47"></a>      <span class='varid'>attrType</span>      <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_type</span> <span class='varid'>al</span>
+<a name="line-48"></a>      <span class='varid'>attrValue</span>     <span class='keyglyph'>=</span> <span class='varid'>valueOf</span> <span class='layout'>(</span><span class='varid'>getAttrName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-49"></a>      <span class='varid'>normalizedVal</span> <span class='keyglyph'>=</span> <span class='varid'>normalizeAttributeValue</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>attrDecl</span><span class='layout'>)</span> <span class='varid'>attrValue</span>
+<a name="line-50"></a>
+<a name="line-51"></a><span class='definition'>checkAttributeValue</span> <span class='varid'>dtdPart</span> <span class='varid'>attrDecl</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al'</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-52"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkValue</span> <span class='varid'>attrType</span> <span class='varid'>dtdPart</span> <span class='varid'>normalizedVal</span> <span class='varid'>attrDecl</span> <span class='varid'>n</span>
+<a name="line-53"></a>      <span class='keyword'>where</span>
+<a name="line-54"></a>      <span class='varid'>attrType</span>      <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_type</span> <span class='varid'>al</span>
+<a name="line-55"></a>      <span class='varid'>attrValue</span>     <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_default</span> <span class='varid'>al'</span>
+<a name="line-56"></a>      <span class='varid'>normalizedVal</span> <span class='keyglyph'>=</span> <span class='varid'>normalizeAttributeValue</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>attrDecl</span><span class='layout'>)</span> <span class='varid'>attrValue</span>
+<a name="line-57"></a>
+<a name="line-58"></a><span class='definition'>checkAttributeValue</span> <span class='keyword'>_</span> <span class='varid'>nd</span> <span class='varid'>n</span>
+<a name="line-59"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkAttributeValue: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-60"></a>
+<a name="line-61"></a>
+<a name="line-62"></a><span class='comment'>-- |</span>
+<a name="line-63"></a><span class='comment'>-- Dispatches the attibute check by the attribute type.</span>
+<a name="line-64"></a><span class='comment'>--</span>
+<a name="line-65"></a><span class='comment'>--    * 1.parameter typ :  the attribute type</span>
+<a name="line-66"></a><span class='comment'>--</span>
+<a name="line-67"></a><span class='comment'>--    - 2.parameter dtdPart :  the children of the @DOCTYPE@ node</span>
+<a name="line-68"></a><span class='comment'>--</span>
+<a name="line-69"></a><span class='comment'>--    - 3.parameter attrValue :  the normalized attribute value to be checked</span>
+<a name="line-70"></a><span class='comment'>--</span>
+<a name="line-71"></a><span class='comment'>--    - 4.parameter attrDecl :  the declaration of the attribute from the DTD</span>
+<a name="line-72"></a><span class='comment'>--</span>
+<a name="line-73"></a><span class='comment'>--    - returns : a functions which takes an element (XTag or XDTD ATTLIST),</span>
+<a name="line-74"></a><span class='comment'>--                        checks if the attribute value meets the lexical constraints</span>
+<a name="line-75"></a><span class='comment'>--                        of its type and returns a list of errors</span>
+<a name="line-76"></a>
+<a name="line-77"></a><a name="checkValue"></a><span class='definition'>checkValue</span> <span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-78"></a><span class='definition'>checkValue</span> <span class='varid'>typ</span> <span class='varid'>dtdPart</span> <span class='varid'>attrValue</span> <span class='varid'>attrDecl</span>
+<a name="line-79"></a>	<span class='keyglyph'>|</span> <span class='varid'>typ</span> <span class='varop'>==</span> <span class='varid'>k_cdata</span>	<span class='keyglyph'>=</span> <span class='varid'>none</span>
+<a name="line-80"></a>	<span class='keyglyph'>|</span> <span class='varid'>typ</span> <span class='varop'>==</span> <span class='varid'>k_enumeration</span>	<span class='keyglyph'>=</span> <span class='varid'>checkValueEnumeration</span> <span class='varid'>attrDecl</span> <span class='varid'>attrValue</span>
+<a name="line-81"></a>	<span class='keyglyph'>|</span> <span class='varid'>typ</span> <span class='varop'>==</span> <span class='varid'>k_entity</span>	<span class='keyglyph'>=</span> <span class='varid'>checkValueEntity</span> <span class='varid'>dtdPart</span> <span class='varid'>attrDecl</span> <span class='varid'>attrValue</span>
+<a name="line-82"></a>	<span class='keyglyph'>|</span> <span class='varid'>typ</span> <span class='varop'>==</span> <span class='varid'>k_entities</span>	<span class='keyglyph'>=</span> <span class='varid'>checkValueEntities</span> <span class='varid'>dtdPart</span> <span class='varid'>attrDecl</span> <span class='varid'>attrValue</span>
+<a name="line-83"></a>	<span class='keyglyph'>|</span> <span class='varid'>typ</span> <span class='varop'>==</span> <span class='varid'>k_id</span>		<span class='keyglyph'>=</span> <span class='varid'>checkValueId</span> <span class='varid'>attrDecl</span> <span class='varid'>attrValue</span>
+<a name="line-84"></a>	<span class='keyglyph'>|</span> <span class='varid'>typ</span> <span class='varop'>==</span> <span class='varid'>k_idref</span>	<span class='keyglyph'>=</span> <span class='varid'>checkValueIdref</span> <span class='varid'>attrDecl</span> <span class='varid'>attrValue</span>
+<a name="line-85"></a>	<span class='keyglyph'>|</span> <span class='varid'>typ</span> <span class='varop'>==</span> <span class='varid'>k_idrefs</span>	<span class='keyglyph'>=</span> <span class='varid'>checkValueIdrefs</span> <span class='varid'>attrDecl</span> <span class='varid'>attrValue</span>
+<a name="line-86"></a>	<span class='keyglyph'>|</span> <span class='varid'>typ</span> <span class='varop'>==</span> <span class='varid'>k_nmtoken</span>	<span class='keyglyph'>=</span> <span class='varid'>checkValueNmtoken</span> <span class='varid'>attrDecl</span> <span class='varid'>attrValue</span>
+<a name="line-87"></a>	<span class='keyglyph'>|</span> <span class='varid'>typ</span> <span class='varop'>==</span> <span class='varid'>k_nmtokens</span>	<span class='keyglyph'>=</span> <span class='varid'>checkValueNmtokens</span> <span class='varid'>attrDecl</span> <span class='varid'>attrValue</span>
+<a name="line-88"></a>	<span class='keyglyph'>|</span> <span class='varid'>typ</span> <span class='varop'>==</span> <span class='varid'>k_notation</span>	<span class='keyglyph'>=</span> <span class='varid'>checkValueEnumeration</span> <span class='varid'>attrDecl</span> <span class='varid'>attrValue</span>
+<a name="line-89"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>		<span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"Attribute type "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>typ</span> <span class='varop'>++</span> <span class='str'>" unknown."</span><span class='layout'>)</span>
+<a name="line-90"></a>
+<a name="line-91"></a><span class='comment'>-- |</span>
+<a name="line-92"></a><span class='comment'>-- Checks the value of Enumeration attribute types. (3.3.1 \/ p.27 in Spec)</span>
+<a name="line-93"></a><span class='comment'>--</span>
+<a name="line-94"></a><span class='comment'>--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD</span>
+<a name="line-95"></a><span class='comment'>--</span>
+<a name="line-96"></a><span class='comment'>--    - 2.parameter attrValue :  the normalized attribute value to be checked</span>
+<a name="line-97"></a>
+<a name="line-98"></a><a name="checkValueEnumeration"></a><span class='definition'>checkValueEnumeration</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-99"></a><span class='definition'>checkValueEnumeration</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span> <span class='varid'>attrValue</span>
+<a name="line-100"></a>    <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>attrValue</span> <span class='varop'>`elem`</span> <span class='varid'>enumVals</span>
+<a name="line-101"></a>      <span class='keyword'>then</span> <span class='varid'>none</span>
+<a name="line-102"></a>      <span class='keyword'>else</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Attribute "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>getAttrName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>" for element "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>getElemName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>++</span>
+<a name="line-103"></a>                <span class='str'>" must have a value from list "</span><span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>enumVals</span> <span class='varop'>++</span> <span class='str'>"."</span><span class='layout'>)</span>
+<a name="line-104"></a>      <span class='keyword'>where</span>
+<a name="line-105"></a>      <span class='varid'>enumVals</span> <span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span>
+<a name="line-106"></a>      <span class='varid'>enumVals</span> <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>getEnumVal</span><span class='layout'>)</span> <span class='varid'>cs</span>
+<a name="line-107"></a>
+<a name="line-108"></a>      <span class='varid'>getEnumVal</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-109"></a>      <span class='varid'>getEnumVal</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>NAME</span> <span class='varid'>al'</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al'</span>
+<a name="line-110"></a>      <span class='varid'>getEnumVal</span> <span class='keyword'>_</span>                         <span class='keyglyph'>=</span> <span class='str'>""</span>
+<a name="line-111"></a>
+<a name="line-112"></a><span class='definition'>checkValueEnumeration</span> <span class='varid'>n</span> <span class='keyword'>_</span>
+<a name="line-113"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkValueEnumeration: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-114"></a>
+<a name="line-115"></a>
+<a name="line-116"></a><span class='comment'>-- |</span>
+<a name="line-117"></a><span class='comment'>-- Checks the value of ENTITY attribute types. (3.3.1 \/ p.26 in Spec)</span>
+<a name="line-118"></a><span class='comment'>--</span>
+<a name="line-119"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node, to get the</span>
+<a name="line-120"></a><span class='comment'>--                    unparsed entity declarations</span>
+<a name="line-121"></a><span class='comment'>--</span>
+<a name="line-122"></a><span class='comment'>--    - 2.parameter attrDecl :  the declaration of the attribute from the DTD</span>
+<a name="line-123"></a><span class='comment'>--</span>
+<a name="line-124"></a><span class='comment'>--    - 3.parameter attrValue :  the normalized attribute value to be checked</span>
+<a name="line-125"></a>
+<a name="line-126"></a><a name="checkValueEntity"></a><span class='definition'>checkValueEntity</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-127"></a><span class='definition'>checkValueEntity</span> <span class='varid'>dtdPart</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>attrValue</span>
+<a name="line-128"></a>    <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>attrValue</span> <span class='varop'>`elem`</span> <span class='varid'>upEntities</span>
+<a name="line-129"></a>      <span class='keyword'>then</span> <span class='varid'>none</span>
+<a name="line-130"></a>      <span class='keyword'>else</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Entity "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>attrValue</span> <span class='varop'>++</span> <span class='str'>" of attribute "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>getAttrName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>++</span>
+<a name="line-131"></a>                <span class='str'>" for element "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>getElemName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>" is not unparsed. "</span> <span class='varop'>++</span>
+<a name="line-132"></a>                <span class='str'>"The following unparsed entities exist: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>upEntities</span> <span class='varop'>++</span> <span class='str'>"."</span><span class='layout'>)</span>
+<a name="line-133"></a>      <span class='keyword'>where</span>
+<a name="line-134"></a>      <span class='varid'>upEntities</span> <span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span>
+<a name="line-135"></a>      <span class='varid'>upEntities</span> <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>getEnumVal</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>isUnparsedEntity</span> <span class='varop'>$$</span> <span class='varid'>dtdPart</span><span class='layout'>)</span>
+<a name="line-136"></a>
+<a name="line-137"></a>      <span class='varid'>getEnumVal</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-138"></a>      <span class='varid'>getEnumVal</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ENTITY</span> <span class='varid'>al'</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al'</span>
+<a name="line-139"></a>      <span class='varid'>getEnumVal</span> <span class='keyword'>_</span>                           <span class='keyglyph'>=</span> <span class='str'>""</span>
+<a name="line-140"></a>
+<a name="line-141"></a>
+<a name="line-142"></a><span class='definition'>checkValueEntity</span> <span class='keyword'>_</span> <span class='varid'>n</span> <span class='keyword'>_</span>
+<a name="line-143"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkValueEntity: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-144"></a>
+<a name="line-145"></a>
+<a name="line-146"></a><span class='comment'>-- |</span>
+<a name="line-147"></a><span class='comment'>-- Checks the value of ENTITIES attribute types. (3.3.1 \/ p.26 in Spec)</span>
+<a name="line-148"></a><span class='comment'>--</span>
+<a name="line-149"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node, to get the</span>
+<a name="line-150"></a><span class='comment'>--                    unparsed entity declarations</span>
+<a name="line-151"></a><span class='comment'>--</span>
+<a name="line-152"></a><span class='comment'>--    - 2.parameter attrDecl :  the declaration of the attribute from the DTD</span>
+<a name="line-153"></a><span class='comment'>--</span>
+<a name="line-154"></a><span class='comment'>--    - 3.parameter attrValue :  the normalized attribute value to be checked</span>
+<a name="line-155"></a>
+<a name="line-156"></a><a name="checkValueEntities"></a><span class='definition'>checkValueEntities</span> <span class='keyglyph'>::</span><span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-157"></a><span class='definition'>checkValueEntities</span> <span class='varid'>dtdPart</span> <span class='varid'>attrDecl</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>attrValue</span>
+<a name="line-158"></a>    <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>valueList</span>
+<a name="line-159"></a>      <span class='keyword'>then</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Attribute "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>getAttrName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>" of element "</span> <span class='varop'>++</span>
+<a name="line-160"></a>                 <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>getElemName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>" must be one or more names."</span><span class='layout'>)</span>
+<a name="line-161"></a>      <span class='keyword'>else</span> <span class='varid'>cat</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>checkValueEntity</span> <span class='varid'>dtdPart</span> <span class='varid'>attrDecl</span><span class='layout'>)</span> <span class='varid'>valueList</span><span class='layout'>)</span>
+<a name="line-162"></a>      <span class='keyword'>where</span>
+<a name="line-163"></a>      <span class='varid'>valueList</span> <span class='keyglyph'>=</span> <span class='varid'>words</span> <span class='varid'>attrValue</span>
+<a name="line-164"></a>
+<a name="line-165"></a><span class='definition'>checkValueEntities</span> <span class='keyword'>_</span> <span class='varid'>n</span> <span class='keyword'>_</span>
+<a name="line-166"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkValueEntities: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-167"></a>
+<a name="line-168"></a>
+<a name="line-169"></a><span class='comment'>-- |</span>
+<a name="line-170"></a><span class='comment'>-- Checks the value of NMTOKEN attribute types. (3.3.1 \/ p.26 in Spec)</span>
+<a name="line-171"></a><span class='comment'>--</span>
+<a name="line-172"></a><span class='comment'>--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD</span>
+<a name="line-173"></a><span class='comment'>--</span>
+<a name="line-174"></a><span class='comment'>--    - 2.parameter attrValue :  the normalized attribute value to be checked</span>
+<a name="line-175"></a>
+<a name="line-176"></a><a name="checkValueNmtoken"></a><span class='definition'>checkValueNmtoken</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-177"></a><span class='definition'>checkValueNmtoken</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>attrValue</span>
+<a name="line-178"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkNmtoken</span> <span class='varid'>parseRes</span>
+<a name="line-179"></a>      <span class='keyword'>where</span>
+<a name="line-180"></a>      <span class='varid'>parseRes</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span>
+<a name="line-181"></a>      <span class='varid'>parseRes</span> <span class='keyglyph'>=</span> <span class='varid'>parseNMToken</span> <span class='str'>""</span> <span class='layout'>(</span><span class='varid'>mkXTextTree</span> <span class='varid'>attrValue</span><span class='layout'>)</span>
+<a name="line-182"></a>
+<a name="line-183"></a>      <span class='varid'>checkNmtoken</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-184"></a>      <span class='varid'>checkNmtoken</span> <span class='layout'>(</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XError</span> <span class='keyword'>_</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-185"></a>          <span class='keyglyph'>=</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Attribute value "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>attrValue</span> <span class='varop'>++</span> <span class='str'>" of attribute "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>getAttrName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>++</span>
+<a name="line-186"></a>	         <span class='str'>" for element "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>getElemName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>" must be a name token, "</span><span class='varop'>++</span> <span class='layout'>(</span><span class='varid'>lines</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='varop'>!!</span> <span class='num'>1</span> <span class='varop'>++</span><span class='str'>"."</span><span class='layout'>)</span>
+<a name="line-187"></a>
+<a name="line-188"></a>      <span class='varid'>checkNmtoken</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='varid'>none</span>
+<a name="line-189"></a>
+<a name="line-190"></a>
+<a name="line-191"></a><span class='definition'>checkValueNmtoken</span> <span class='varid'>n</span> <span class='keyword'>_</span>
+<a name="line-192"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkValueNmtoken: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-193"></a>
+<a name="line-194"></a>
+<a name="line-195"></a><span class='comment'>-- |</span>
+<a name="line-196"></a><span class='comment'>-- Checks the value of NMTOKENS attribute types. (3.3.1 \/ p.26 in Spec)</span>
+<a name="line-197"></a><span class='comment'>--</span>
+<a name="line-198"></a><span class='comment'>--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD</span>
+<a name="line-199"></a><span class='comment'>--</span>
+<a name="line-200"></a><span class='comment'>--    - 2.parameter attrValue :  the normalized attribute value to be checked</span>
+<a name="line-201"></a>
+<a name="line-202"></a><a name="checkValueNmtokens"></a><span class='definition'>checkValueNmtokens</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-203"></a><span class='definition'>checkValueNmtokens</span> <span class='varid'>attrDecl</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>attrValue</span>
+<a name="line-204"></a>    <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>valueList</span>
+<a name="line-205"></a>      <span class='keyword'>then</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Attribute "</span><span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>getAttrName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>++</span><span class='str'>" of element "</span> <span class='varop'>++</span>
+<a name="line-206"></a>                 <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>getElemName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>" must be one or more name tokens."</span><span class='layout'>)</span>
+<a name="line-207"></a>      <span class='keyword'>else</span> <span class='varid'>cat</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>checkValueNmtoken</span> <span class='varid'>attrDecl</span><span class='layout'>)</span> <span class='varid'>valueList</span><span class='layout'>)</span>
+<a name="line-208"></a>      <span class='keyword'>where</span>
+<a name="line-209"></a>      <span class='varid'>valueList</span> <span class='keyglyph'>=</span> <span class='varid'>words</span> <span class='varid'>attrValue</span>
+<a name="line-210"></a>
+<a name="line-211"></a><span class='definition'>checkValueNmtokens</span> <span class='varid'>n</span> <span class='keyword'>_</span>
+<a name="line-212"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkValueNmtokens: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-213"></a>
+<a name="line-214"></a>
+<a name="line-215"></a><span class='comment'>-- |</span>
+<a name="line-216"></a><span class='comment'>-- Checks the value of ID attribute types. (3.3.1 \/ p.25 in Spec)</span>
+<a name="line-217"></a><span class='comment'>--</span>
+<a name="line-218"></a><span class='comment'>--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD</span>
+<a name="line-219"></a><span class='comment'>--</span>
+<a name="line-220"></a><span class='comment'>--    - 2.parameter attrValue :  the normalized attribute value to be checked</span>
+<a name="line-221"></a>
+<a name="line-222"></a><a name="checkValueId"></a><span class='definition'>checkValueId</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-223"></a><span class='definition'>checkValueId</span> <span class='varid'>attrDecl</span> <span class='varid'>attrValue</span>
+<a name="line-224"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkForName</span> <span class='str'>"Attribute value"</span> <span class='varid'>attrDecl</span> <span class='varid'>attrValue</span>
+<a name="line-225"></a>
+<a name="line-226"></a>
+<a name="line-227"></a><span class='comment'>-- |</span>
+<a name="line-228"></a><span class='comment'>-- Checks the value of IDREF attribute types. (3.3.1 \/ p.26 in Spec)</span>
+<a name="line-229"></a><span class='comment'>--</span>
+<a name="line-230"></a><span class='comment'>--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD</span>
+<a name="line-231"></a><span class='comment'>--</span>
+<a name="line-232"></a><span class='comment'>--    - 2.parameter attrValue :  the normalized attribute value to be checked</span>
+<a name="line-233"></a>
+<a name="line-234"></a><a name="checkValueIdref"></a><span class='definition'>checkValueIdref</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-235"></a><span class='definition'>checkValueIdref</span> <span class='varid'>attrDecl</span> <span class='varid'>attrValue</span>
+<a name="line-236"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkForName</span> <span class='str'>"Attribute value"</span> <span class='varid'>attrDecl</span> <span class='varid'>attrValue</span>
+<a name="line-237"></a>
+<a name="line-238"></a>
+<a name="line-239"></a><span class='comment'>-- |</span>
+<a name="line-240"></a><span class='comment'>-- Checks the value of IDREFS attribute types. (3.3.1 \/ p.26 in Spec)</span>
+<a name="line-241"></a><span class='comment'>--</span>
+<a name="line-242"></a><span class='comment'>--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD</span>
+<a name="line-243"></a><span class='comment'>--</span>
+<a name="line-244"></a><span class='comment'>--    - 2.parameter attrValue :  the normalized attribute value to be checked</span>
+<a name="line-245"></a>
+<a name="line-246"></a><a name="checkValueIdrefs"></a><span class='definition'>checkValueIdrefs</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-247"></a><span class='definition'>checkValueIdrefs</span> <span class='varid'>attrDecl</span> <span class='varid'>attrValue</span>
+<a name="line-248"></a>    <span class='keyglyph'>=</span> <span class='varid'>cat</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>checkValueIdref</span> <span class='varid'>attrDecl</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>words</span> <span class='varid'>attrValue</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-249"></a>
+<a name="line-250"></a>
+<a name="line-251"></a>
+<a name="line-252"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-253"></a><span class='comment'>-- General helper functions for checking attribute values</span>
+<a name="line-254"></a><span class='comment'>--</span>
+<a name="line-255"></a>
+<a name="line-256"></a><span class='comment'>-- |</span>
+<a name="line-257"></a><span class='comment'>-- Checks if the value of an attribute is a name.</span>
+<a name="line-258"></a><span class='comment'>--</span>
+<a name="line-259"></a><span class='comment'>--    * 1.parameter msg :  error message, should be "Entity" or "Attribute value"</span>
+<a name="line-260"></a><span class='comment'>--</span>
+<a name="line-261"></a><span class='comment'>--    - 2.parameter attrDecl :  the declaration of the attribute from the DTD</span>
+<a name="line-262"></a><span class='comment'>--</span>
+<a name="line-263"></a><span class='comment'>--    - 3.parameter attrValue :  the normalized attribute value to be checked</span>
+<a name="line-264"></a>
+<a name="line-265"></a><a name="checkForName"></a><span class='definition'>checkForName</span> <span class='keyglyph'>::</span>  <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-266"></a><span class='definition'>checkForName</span> <span class='varid'>msg</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>attrValue</span>
+<a name="line-267"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkName</span> <span class='varid'>parseRes</span>
+<a name="line-268"></a>      <span class='keyword'>where</span>
+<a name="line-269"></a>      <span class='varid'>parseRes</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span>
+<a name="line-270"></a>      <span class='varid'>parseRes</span> <span class='keyglyph'>=</span> <span class='varid'>parseName</span> <span class='str'>""</span> <span class='layout'>(</span><span class='varid'>mkXTextTree</span> <span class='varid'>attrValue</span><span class='layout'>)</span>
+<a name="line-271"></a>
+<a name="line-272"></a>      <span class='varid'>checkName</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-273"></a>      <span class='varid'>checkName</span> <span class='layout'>(</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XError</span> <span class='keyword'>_</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-274"></a>          <span class='keyglyph'>=</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='varid'>msg</span> <span class='varop'>++</span> <span class='str'>" "</span><span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>attrValue</span> <span class='varop'>++</span><span class='str'>" of attribute "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>getAttrName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>++</span>
+<a name="line-275"></a>	    <span class='str'>" for element "</span><span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>getElemName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>++</span><span class='str'>" must be a name, "</span> <span class='varop'>++</span> <span class='layout'>(</span><span class='varid'>lines</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='varop'>!!</span> <span class='num'>1</span> <span class='varop'>++</span> <span class='str'>"."</span><span class='layout'>)</span>
+<a name="line-276"></a>
+<a name="line-277"></a>      <span class='varid'>checkName</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='varid'>none</span>
+<a name="line-278"></a>
+<a name="line-279"></a>
+<a name="line-280"></a><span class='definition'>checkForName</span> <span class='keyword'>_</span> <span class='varid'>n</span> <span class='keyword'>_</span>
+<a name="line-281"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkForName: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-282"></a>
+<a name="line-283"></a>
+<a name="line-284"></a><span class='comment'>-- |</span>
+<a name="line-285"></a><span class='comment'>-- Gets the element name from an attribute list of an XDTD ATTLIST node.</span>
+<a name="line-286"></a><span class='comment'>--</span>
+<a name="line-287"></a><span class='comment'>--    * 1.parameter tag :  the attibute list of an XDTD ATTLIST</span>
+<a name="line-288"></a><span class='comment'>--</span>
+<a name="line-289"></a><span class='comment'>--    - returns : the element name</span>
+<a name="line-290"></a>
+<a name="line-291"></a><a name="getElemName"></a><span class='definition'>getElemName</span> <span class='keyglyph'>::</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-292"></a><span class='definition'>getElemName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span>
+<a name="line-293"></a>
+<a name="line-294"></a>
+<a name="line-295"></a><span class='comment'>-- |</span>
+<a name="line-296"></a><span class='comment'>-- Gets the attribute name from an attribute list of an XDTD ATTLIST node.</span>
+<a name="line-297"></a><span class='comment'>--</span>
+<a name="line-298"></a><span class='comment'>--    * 1.parameter tag :  the attibute list of an XDTD ATTLIST</span>
+<a name="line-299"></a><span class='comment'>--</span>
+<a name="line-300"></a><span class='comment'>--    - returns : the attribute name</span>
+<a name="line-301"></a>
+<a name="line-302"></a><a name="getAttrName"></a><span class='definition'>getAttrName</span> <span class='keyglyph'>::</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-303"></a><span class='definition'>getAttrName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_value</span>
+<a name="line-304"></a>
+<a name="line-305"></a>
+<a name="line-306"></a>
+<a name="line-307"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
+<a name="line-308"></a>
+<a name="line-309"></a>
+<a name="line-310"></a><a name="normalizeAttributeValue"></a><span class='comment'>-- |</span>
+<a name="line-311"></a><span class='comment'>-- Normalizes an attribute value with respect to its type. (3.3.3 \/ p.29 in Spec)</span>
+<a name="line-312"></a><span class='comment'>--</span>
+<a name="line-313"></a><span class='comment'>--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD. Expected</span>
+<a name="line-314"></a><span class='comment'>--                   is a list. If the list is empty, no declaration exists.</span>
+<a name="line-315"></a><span class='comment'>--</span>
+<a name="line-316"></a><span class='comment'>--    - 2.parameter value :  the attribute value to be normalized</span>
+<a name="line-317"></a><span class='comment'>--</span>
+<a name="line-318"></a><span class='comment'>--    - returns : the normalized value</span>
+<a name="line-319"></a><span class='comment'>--</span>
+<a name="line-320"></a><span class='definition'>normalizeAttributeValue</span> <span class='keyglyph'>::</span> <span class='conid'>Maybe</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-321"></a><span class='definition'>normalizeAttributeValue</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>value</span>
+<a name="line-322"></a>    <span class='keyglyph'>=</span> <span class='varid'>normalizeAttribute</span> <span class='varid'>attrType</span>
+<a name="line-323"></a>      <span class='keyword'>where</span>
+<a name="line-324"></a>      <span class='varid'>attrType</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_type</span> <span class='varid'>al</span>
+<a name="line-325"></a>
+<a name="line-326"></a>      <span class='varid'>normalizeAttribute</span> <span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-327"></a>      <span class='varid'>normalizeAttribute</span> <span class='varid'>typ</span>
+<a name="line-328"></a>          <span class='keyglyph'>|</span> <span class='varid'>typ</span> <span class='varop'>==</span> <span class='varid'>k_cdata</span>	<span class='keyglyph'>=</span> <span class='varid'>cdataNormalization</span> <span class='varid'>value</span>
+<a name="line-329"></a>          <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>		<span class='keyglyph'>=</span> <span class='varid'>otherNormalization</span> <span class='varid'>value</span>
+<a name="line-330"></a>
+<a name="line-331"></a>
+<a name="line-332"></a><span class='comment'>-- Attribute not declared in DTD, normalization as CDATA</span>
+<a name="line-333"></a><span class='definition'>normalizeAttributeValue</span> <span class='keyword'>_</span> <span class='varid'>value</span>
+<a name="line-334"></a>    <span class='keyglyph'>=</span> <span class='varid'>cdataNormalization</span> <span class='varid'>value</span>
+<a name="line-335"></a>
+<a name="line-336"></a>
+<a name="line-337"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-338"></a><span class='comment'>-- Helper functions for normalization</span>
+<a name="line-339"></a>
+<a name="line-340"></a>
+<a name="line-341"></a><a name="cdataNormalization"></a><span class='comment'>-- |</span>
+<a name="line-342"></a><span class='comment'>-- Normalization of CDATA attribute values.</span>
+<a name="line-343"></a><span class='comment'>-- is already done when parsing</span>
+<a name="line-344"></a><span class='comment'>-- during entity substituion for attribute values</span>
+<a name="line-345"></a><span class='definition'>cdataNormalization</span> <span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-346"></a><span class='definition'>cdataNormalization</span> <span class='keyglyph'>=</span> <span class='varid'>id</span>
+<a name="line-347"></a>
+<a name="line-348"></a>
+<a name="line-349"></a><a name="otherNormalization"></a><span class='comment'>-- | Normalization of attribute values other than CDATA.</span>
+<a name="line-350"></a><span class='definition'>otherNormalization</span> <span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-351"></a><span class='definition'>otherNormalization</span> <span class='keyglyph'>=</span> <span class='varid'>reduceWSSequences</span> <span class='varop'>.</span> <span class='varid'>stringTrim</span> <span class='varop'>.</span> <span class='varid'>cdataNormalization</span>
+<a name="line-352"></a>
+<a name="line-353"></a><a name="reduceWSSequences"></a><span class='comment'>-- | Reduce whitespace sequences to a single whitespace.</span>
+<a name="line-354"></a><span class='definition'>reduceWSSequences</span> <span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-355"></a><span class='definition'>reduceWSSequences</span> <span class='varid'>str</span> <span class='keyglyph'>=</span> <span class='varid'>unwords</span> <span class='layout'>(</span><span class='varid'>words</span> <span class='varid'>str</span><span class='layout'>)</span>
+<a name="line-356"></a>
+<a name="line-357"></a>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Validator-DTDValidation.html b/doc/hxt-filter/src/Text-XML-HXT-Validator-DTDValidation.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Validator-DTDValidation.html
@@ -0,0 +1,637 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- This module provides functions for validating the DTD of XML documents</span>
+<a name="line-3"></a><span class='comment'>-- represented as XmlTree.</span>
+<a name="line-4"></a>
+<a name="line-5"></a><span class='comment'>-- Unlike other popular XML validation tools the validation process returns</span>
+<a name="line-6"></a><span class='comment'>-- a list of errors instead of aborting after the first error was found.</span>
+<a name="line-7"></a>
+<a name="line-8"></a>
+<a name="line-9"></a><span class='comment'>-- Unlike validation of the document, the DTD branch is traversed four times:</span>
+<a name="line-10"></a><span class='comment'>--</span>
+<a name="line-11"></a><span class='comment'>--  - Validation of Notations</span>
+<a name="line-12"></a><span class='comment'>--</span>
+<a name="line-13"></a><span class='comment'>--  - Validation of Unparsed Entities</span>
+<a name="line-14"></a><span class='comment'>--</span>
+<a name="line-15"></a><span class='comment'>--  - Validation of Element declarations</span>
+<a name="line-16"></a><span class='comment'>--</span>
+<a name="line-17"></a><span class='comment'>--  - Validation of Attribute declarations</span>
+<a name="line-18"></a>
+<a name="line-19"></a><span class='comment'>-- Special namings in source code:</span>
+<a name="line-20"></a><span class='comment'>--</span>
+<a name="line-21"></a><span class='comment'>--  - nd - XDTD node</span>
+<a name="line-22"></a><span class='comment'>--</span>
+<a name="line-23"></a><span class='comment'>-- Author : .\\artin Schmidt</span>
+<a name="line-24"></a>
+<a name="line-25"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>DTDValidation</span>
+<a name="line-26"></a>    <span class='layout'>(</span> <span class='varid'>removeDoublicateDefs</span>
+<a name="line-27"></a>    <span class='layout'>,</span> <span class='varid'>validateDTD</span>
+<a name="line-28"></a>    <span class='layout'>)</span>
+<a name="line-29"></a><span class='keyword'>where</span>
+<a name="line-30"></a>
+<a name="line-31"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-32"></a>
+<a name="line-33"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>AttributeValueValidation</span>
+<a name="line-34"></a>
+<a name="line-35"></a>
+<a name="line-36"></a>
+<a name="line-37"></a><span class='comment'>-- |</span>
+<a name="line-38"></a><span class='comment'>-- Validate a DTD.</span>
+<a name="line-39"></a><span class='comment'>--</span>
+<a name="line-40"></a><span class='comment'>--    - returns : a functions which takes the DTD subset of the XmlTree, checks</span>
+<a name="line-41"></a><span class='comment'>--                  if the DTD is valid and returns a list of errors</span>
+<a name="line-42"></a>
+<a name="line-43"></a><a name="validateDTD"></a><span class='definition'>validateDTD</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-44"></a><span class='definition'>validateDTD</span> <span class='varid'>dtdPart</span>
+<a name="line-45"></a>    <span class='keyglyph'>=</span> <span class='comment'>{-# SCC "validateNotations" #-}</span> <span class='varid'>validateNotations</span> <span class='varid'>dtdPart'</span>
+<a name="line-46"></a>      <span class='varop'>++</span>
+<a name="line-47"></a>      <span class='comment'>{-# SCC "validateEntities" #-}</span> <span class='varid'>validateEntities</span> <span class='varid'>dtdPart'</span> <span class='varid'>notationNames</span>
+<a name="line-48"></a>      <span class='varop'>++</span>
+<a name="line-49"></a>      <span class='comment'>{-# SCC "validateElements" #-}</span> <span class='varid'>validateElements</span> <span class='varid'>dtdPart'</span> <span class='varid'>elemNames</span>
+<a name="line-50"></a>      <span class='varop'>++</span>
+<a name="line-51"></a>      <span class='comment'>{-# SCC "validateAttributes" #-}</span> <span class='varid'>validateAttributes</span> <span class='varid'>dtdPart'</span> <span class='varid'>elemNames</span> <span class='varid'>notationNames</span>
+<a name="line-52"></a>
+<a name="line-53"></a>      <span class='keyword'>where</span>
+<a name="line-54"></a>      <span class='varid'>dtdPart'</span> <span class='keyglyph'>=</span> <span class='varid'>getChildren</span> <span class='varid'>dtdPart</span>
+<a name="line-55"></a>
+<a name="line-56"></a>      <span class='varid'>notationNames</span> <span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span>
+<a name="line-57"></a>      <span class='varid'>notationNames</span>
+<a name="line-58"></a>          <span class='keyglyph'>=</span> <span class='varid'>getXTextValues</span> <span class='layout'>(</span><span class='varid'>isNotation</span> <span class='varop'>.&gt;</span> <span class='varid'>getDTDValue</span> <span class='varid'>a_name</span> <span class='varop'>$$</span> <span class='varid'>dtdPart'</span><span class='layout'>)</span>
+<a name="line-59"></a>
+<a name="line-60"></a>      <span class='varid'>elemNames</span> <span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span>
+<a name="line-61"></a>      <span class='varid'>elemNames</span>
+<a name="line-62"></a>          <span class='keyglyph'>=</span> <span class='varid'>getXTextValues</span> <span class='layout'>(</span><span class='varid'>isElement</span>  <span class='varop'>.&gt;</span> <span class='varid'>getDTDValue</span> <span class='varid'>a_name</span> <span class='varop'>$$</span> <span class='varid'>dtdPart'</span><span class='layout'>)</span>
+<a name="line-63"></a>
+<a name="line-64"></a>
+<a name="line-65"></a>
+<a name="line-66"></a>
+<a name="line-67"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-68"></a>
+<a name="line-69"></a><span class='comment'>-- |</span>
+<a name="line-70"></a><span class='comment'>-- Returns a list of XText values.</span>
+<a name="line-71"></a><span class='comment'>--</span>
+<a name="line-72"></a><span class='comment'>--    * 1.parameter xtextList :  a list of XText nodes</span>
+<a name="line-73"></a><span class='comment'>--</span>
+<a name="line-74"></a><span class='comment'>--    - returns : the values of the XText nodes</span>
+<a name="line-75"></a>
+<a name="line-76"></a><a name="getXTextValues"></a><span class='definition'>getXTextValues</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span>
+<a name="line-77"></a><span class='definition'>getXTextValues</span>
+<a name="line-78"></a>  <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='varid'>showT</span>
+<a name="line-79"></a>  <span class='keyword'>where</span>
+<a name="line-80"></a>    <span class='varid'>showT</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='varid'>n</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-81"></a>	<span class='keyglyph'>|</span> <span class='varid'>isXTextNode</span> <span class='varid'>n</span> <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>textOfXNode</span> <span class='varid'>n</span><span class='keyglyph'>]</span>
+<a name="line-82"></a>    <span class='varid'>showT</span> <span class='keyword'>_</span>             <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-83"></a>
+<a name="line-84"></a>
+<a name="line-85"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-86"></a>
+<a name="line-87"></a>
+<a name="line-88"></a><span class='comment'>-- |</span>
+<a name="line-89"></a><span class='comment'>-- Validation of Notations, checks if all notation names are unique.</span>
+<a name="line-90"></a><span class='comment'>-- Validity constraint: Unique Notation Name (4.7 \/ p.44 in Spec)</span>
+<a name="line-91"></a><span class='comment'>--</span>
+<a name="line-92"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>
+<a name="line-93"></a><span class='comment'>--</span>
+<a name="line-94"></a><span class='comment'>--    - returns : a list of errors</span>
+<a name="line-95"></a>
+<a name="line-96"></a><a name="validateNotations"></a><span class='definition'>validateNotations</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-97"></a><span class='definition'>validateNotations</span> <span class='varid'>dtdPart</span>
+<a name="line-98"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkForUniqueNotation</span> <span class='varid'>notations</span> <span class='conid'>[]</span>
+<a name="line-99"></a>      <span class='keyword'>where</span>
+<a name="line-100"></a>      <span class='varid'>notations</span> <span class='keyglyph'>=</span> <span class='varid'>isNotation</span> <span class='varop'>$$</span> <span class='varid'>dtdPart</span>
+<a name="line-101"></a>
+<a name="line-102"></a>      <span class='varid'>checkForUniqueNotation</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-103"></a>      <span class='varid'>checkForUniqueNotation</span> <span class='layout'>(</span><span class='varid'>x</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>NOTATION</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span> <span class='varid'>used</span>
+<a name="line-104"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>name</span> <span class='varop'>`elem`</span> <span class='varid'>used</span>
+<a name="line-105"></a>	    <span class='keyword'>then</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Notation "</span><span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>name</span> <span class='varop'>++</span> <span class='str'>" was already specified."</span><span class='layout'>)</span> <span class='varid'>x</span>
+<a name="line-106"></a>		 <span class='varop'>++</span>
+<a name="line-107"></a>		 <span class='varid'>checkForUniqueNotation</span> <span class='varid'>xs</span> <span class='varid'>used</span>
+<a name="line-108"></a>
+<a name="line-109"></a>	    <span class='keyword'>else</span> <span class='varid'>checkForUniqueNotation</span> <span class='varid'>xs</span> <span class='layout'>(</span><span class='varid'>name</span> <span class='conop'>:</span> <span class='varid'>used</span><span class='layout'>)</span>
+<a name="line-110"></a>	    <span class='keyword'>where</span>
+<a name="line-111"></a>	    <span class='varid'>name</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al</span>
+<a name="line-112"></a>
+<a name="line-113"></a>      <span class='varid'>checkForUniqueNotation</span> <span class='conid'>[]</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-114"></a>
+<a name="line-115"></a>      <span class='varid'>checkForUniqueNotation</span> <span class='varid'>nd</span> <span class='keyword'>_</span>
+<a name="line-116"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkForUniqueNotation: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-117"></a>
+<a name="line-118"></a>
+<a name="line-119"></a><span class='comment'>-- |</span>
+<a name="line-120"></a><span class='comment'>-- Validation of Entities.</span>
+<a name="line-121"></a><span class='comment'>--</span>
+<a name="line-122"></a><span class='comment'>-- 1. Issues a warning if entities are declared multiple times.</span>
+<a name="line-123"></a><span class='comment'>--</span>
+<a name="line-124"></a><span class='comment'>--    Optional warning: (4.2 \/ p.35 in Spec) </span>
+<a name="line-125"></a><span class='comment'>--</span>
+<a name="line-126"></a><span class='comment'>--</span>
+<a name="line-127"></a><span class='comment'>-- 2. Validates that a notation is declared for an unparsed entity.</span>
+<a name="line-128"></a><span class='comment'>--</span>
+<a name="line-129"></a><span class='comment'>--    Validity constraint: Notation Declared (4.2.2 \/ p.36 in Spec)</span>
+<a name="line-130"></a><span class='comment'>--</span>
+<a name="line-131"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>
+<a name="line-132"></a><span class='comment'>--</span>
+<a name="line-133"></a><span class='comment'>--    - 2.parameter notationNames :  list of all notation names declared in the DTD</span>
+<a name="line-134"></a><span class='comment'>--</span>
+<a name="line-135"></a><span class='comment'>--    - returns : a list of errors</span>
+<a name="line-136"></a>
+<a name="line-137"></a><a name="validateEntities"></a><span class='definition'>validateEntities</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-138"></a><span class='definition'>validateEntities</span> <span class='varid'>dtdPart</span> <span class='varid'>notationNames</span>
+<a name="line-139"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkForUniqueEntity</span> <span class='varid'>entities</span> <span class='conid'>[]</span>
+<a name="line-140"></a>      <span class='varop'>++</span>
+<a name="line-141"></a>      <span class='varid'>checkNotationDecls</span> <span class='varid'>notationNames</span> <span class='varid'>upEntities</span>
+<a name="line-142"></a>
+<a name="line-143"></a>      <span class='keyword'>where</span>
+<a name="line-144"></a>      <span class='varid'>entities</span>   <span class='keyglyph'>=</span> <span class='varid'>isEntity</span> <span class='varop'>$$</span> <span class='varid'>dtdPart</span>
+<a name="line-145"></a>      <span class='varid'>upEntities</span> <span class='keyglyph'>=</span> <span class='varid'>isUnparsedEntity</span> <span class='varop'>$$</span> <span class='varid'>dtdPart</span>
+<a name="line-146"></a>
+<a name="line-147"></a>      <span class='comment'>-- Check if entities are declared multiple times</span>
+<a name="line-148"></a>      <span class='varid'>checkForUniqueEntity</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-149"></a>      <span class='varid'>checkForUniqueEntity</span> <span class='layout'>(</span><span class='varid'>x</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ENTITY</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span> <span class='varid'>used</span>
+<a name="line-150"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>name</span> <span class='varop'>`elem`</span> <span class='varid'>used</span>
+<a name="line-151"></a>	    <span class='keyword'>then</span> <span class='varid'>warn</span> <span class='layout'>(</span><span class='str'>"Entity "</span><span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>name</span> <span class='varop'>++</span> <span class='str'>" was already specified. "</span> <span class='varop'>++</span>
+<a name="line-152"></a>	               <span class='str'>"First declaration will be used."</span><span class='layout'>)</span> <span class='varid'>x</span>
+<a name="line-153"></a>		 <span class='varop'>++</span>
+<a name="line-154"></a>		 <span class='varid'>checkForUniqueEntity</span> <span class='varid'>xs</span> <span class='varid'>used</span>
+<a name="line-155"></a>
+<a name="line-156"></a>	    <span class='keyword'>else</span> <span class='varid'>checkForUniqueEntity</span> <span class='varid'>xs</span> <span class='layout'>(</span><span class='varid'>name</span> <span class='conop'>:</span> <span class='varid'>used</span><span class='layout'>)</span>
+<a name="line-157"></a>	    <span class='keyword'>where</span>
+<a name="line-158"></a>	    <span class='varid'>name</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al</span>
+<a name="line-159"></a>
+<a name="line-160"></a>      <span class='varid'>checkForUniqueEntity</span> <span class='conid'>[]</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-161"></a>
+<a name="line-162"></a>      <span class='varid'>checkForUniqueEntity</span> <span class='varid'>nd</span> <span class='keyword'>_</span>
+<a name="line-163"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkForUniqueEntity: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-164"></a>
+<a name="line-165"></a>
+<a name="line-166"></a>      <span class='comment'>-- Find unparsed entities for which no notation is specified</span>
+<a name="line-167"></a>      <span class='varid'>checkNotationDecls</span> <span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-168"></a>      <span class='varid'>checkNotationDecls</span> <span class='varid'>notationNames'</span> <span class='varid'>upEntities'</span>
+<a name="line-169"></a>	  <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='layout'>(</span><span class='varid'>checkNotationDecl</span><span class='layout'>)</span> <span class='varid'>upEntities'</span>
+<a name="line-170"></a>          <span class='keyword'>where</span>
+<a name="line-171"></a>          <span class='varid'>checkNotationDecl</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-172"></a>          <span class='varid'>checkNotationDecl</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ENTITY</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-173"></a>              <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='layout'>(</span><span class='varid'>notationName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>`elem`</span> <span class='varid'>notationNames'</span>
+<a name="line-174"></a>	        <span class='keyword'>then</span> <span class='conid'>[]</span>
+<a name="line-175"></a>                <span class='keyword'>else</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"The notation "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>notationName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>" must be declared "</span> <span class='varop'>++</span>
+<a name="line-176"></a>	                  <span class='str'>"when referenced in the unparsed entity declaration for "</span> <span class='varop'>++</span>
+<a name="line-177"></a>		          <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>upEntityName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>"."</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-178"></a>                <span class='keyword'>where</span>
+<a name="line-179"></a>		<span class='varid'>notationName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>k_ndata</span>
+<a name="line-180"></a>                <span class='varid'>upEntityName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span>
+<a name="line-181"></a>
+<a name="line-182"></a>          <span class='varid'>checkNotationDecl</span> <span class='varid'>nd</span>
+<a name="line-183"></a>              <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkNotationDecl: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-184"></a>
+<a name="line-185"></a>
+<a name="line-186"></a>
+<a name="line-187"></a><span class='comment'>-- |</span>
+<a name="line-188"></a><span class='comment'>-- Validation of Element declarations.</span>
+<a name="line-189"></a><span class='comment'>--</span>
+<a name="line-190"></a><span class='comment'>-- 1. Validates that an element is not declared multiple times.</span>
+<a name="line-191"></a><span class='comment'>--</span>
+<a name="line-192"></a><span class='comment'>--    Validity constraint: Unique Element Type Declaration (3.2 \/ p.21 in Spec) </span>
+<a name="line-193"></a><span class='comment'>--</span>
+<a name="line-194"></a><span class='comment'>--</span>
+<a name="line-195"></a><span class='comment'>-- 2. Validates that an element name only appears once in a mixed-content declaration.</span>
+<a name="line-196"></a><span class='comment'>--</span>
+<a name="line-197"></a><span class='comment'>--    Validity constraint: No Duplicate Types (3.2 \/ p.21 in Spec) </span>
+<a name="line-198"></a><span class='comment'>--</span>
+<a name="line-199"></a><span class='comment'>--</span>
+<a name="line-200"></a><span class='comment'>-- 3. Issues a warning if an element mentioned in a content model is not declared in the</span>
+<a name="line-201"></a><span class='comment'>--    DTD.</span>
+<a name="line-202"></a><span class='comment'>--</span>
+<a name="line-203"></a><span class='comment'>--    Optional warning: (3.2 \/ p.21 in Spec)</span>
+<a name="line-204"></a><span class='comment'>--</span>
+<a name="line-205"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>
+<a name="line-206"></a><span class='comment'>--</span>
+<a name="line-207"></a><span class='comment'>--    - 2.parameter elemNames :  list of all element names declared in the DTD</span>
+<a name="line-208"></a><span class='comment'>--</span>
+<a name="line-209"></a><span class='comment'>--    - returns : a list of errors</span>
+<a name="line-210"></a>
+<a name="line-211"></a>
+<a name="line-212"></a><a name="validateElements"></a><span class='definition'>validateElements</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-213"></a><span class='definition'>validateElements</span> <span class='varid'>dtdPart</span> <span class='varid'>elemNames</span>
+<a name="line-214"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkForUniqueElement</span> <span class='varid'>elements</span> <span class='conid'>[]</span>
+<a name="line-215"></a>      <span class='varop'>++</span>
+<a name="line-216"></a>      <span class='varid'>checkMixedContents</span> <span class='varid'>mixedContentElems</span>
+<a name="line-217"></a>      <span class='varop'>++</span>
+<a name="line-218"></a>      <span class='varid'>checkContentModels</span> <span class='varid'>elemNames</span> <span class='varid'>elements</span>
+<a name="line-219"></a>
+<a name="line-220"></a>      <span class='keyword'>where</span>
+<a name="line-221"></a>      <span class='varid'>elements</span>          <span class='keyglyph'>=</span> <span class='varid'>isElement</span> <span class='varop'>$$</span> <span class='varid'>dtdPart</span>
+<a name="line-222"></a>      <span class='varid'>mixedContentElems</span> <span class='keyglyph'>=</span> <span class='varid'>isMixedContentElement</span> <span class='varop'>$$</span> <span class='varid'>dtdPart</span>
+<a name="line-223"></a>
+<a name="line-224"></a>
+<a name="line-225"></a>      <span class='comment'>-- Validates that an element is not declared multiple times</span>
+<a name="line-226"></a>      <span class='varid'>checkForUniqueElement</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-227"></a>      <span class='varid'>checkForUniqueElement</span> <span class='layout'>(</span><span class='varid'>x</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ELEMENT</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span> <span class='varid'>used</span>
+<a name="line-228"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>name</span> <span class='varop'>`elem`</span> <span class='varid'>used</span>
+<a name="line-229"></a>	    <span class='keyword'>then</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Element type "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>name</span> <span class='varop'>++</span>
+<a name="line-230"></a>		      <span class='str'>" must not be declared more than once."</span><span class='layout'>)</span> <span class='varid'>x</span>
+<a name="line-231"></a>		 <span class='varop'>++</span>
+<a name="line-232"></a>		 <span class='varid'>checkForUniqueElement</span> <span class='varid'>xs</span> <span class='varid'>used</span>
+<a name="line-233"></a>
+<a name="line-234"></a>	    <span class='keyword'>else</span> <span class='varid'>checkForUniqueElement</span> <span class='varid'>xs</span> <span class='layout'>(</span><span class='varid'>name</span> <span class='conop'>:</span> <span class='varid'>used</span><span class='layout'>)</span>
+<a name="line-235"></a>	    <span class='keyword'>where</span>
+<a name="line-236"></a>	    <span class='varid'>name</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al</span>
+<a name="line-237"></a>
+<a name="line-238"></a>      <span class='varid'>checkForUniqueElement</span> <span class='conid'>[]</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-239"></a>
+<a name="line-240"></a>      <span class='varid'>checkForUniqueElement</span> <span class='varid'>nd</span> <span class='keyword'>_</span>
+<a name="line-241"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkForUniqueElement: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-242"></a>
+<a name="line-243"></a>
+<a name="line-244"></a>      <span class='comment'>-- Validates that an element name only appears once in a mixed-content declaration</span>
+<a name="line-245"></a>      <span class='varid'>checkMixedContents</span> <span class='varid'>elems</span>
+<a name="line-246"></a>          <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='layout'>(</span><span class='varid'>checkMixedContent</span><span class='layout'>)</span> <span class='varid'>elems</span>
+<a name="line-247"></a>	  <span class='keyword'>where</span>
+<a name="line-248"></a>          <span class='varid'>checkMixedContent</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ELEMENT</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-249"></a>	      <span class='keyglyph'>=</span> <span class='varid'>checkMC</span> <span class='layout'>(</span><span class='varid'>getChildren</span> <span class='layout'>(</span><span class='varid'>head</span> <span class='varid'>cs</span><span class='layout'>)</span><span class='layout'>)</span> <span class='conid'>[]</span>
+<a name="line-250"></a>	      <span class='keyword'>where</span>
+<a name="line-251"></a>	      <span class='varid'>elemName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al</span>
+<a name="line-252"></a>
+<a name="line-253"></a>	      <span class='varid'>checkMC</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-254"></a>	      <span class='varid'>checkMC</span> <span class='layout'>(</span><span class='varid'>x</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>NAME</span> <span class='varid'>al'</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span> <span class='varid'>used</span>
+<a name="line-255"></a>                  <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>name</span> <span class='varop'>`elem`</span> <span class='varid'>used</span>
+<a name="line-256"></a>	            <span class='keyword'>then</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"The element type "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>name</span> <span class='varop'>++</span>
+<a name="line-257"></a>			      <span class='str'>" was already specified in the mixed-content model of the element declaration "</span> <span class='varop'>++</span>
+<a name="line-258"></a>		              <span class='varid'>show</span> <span class='varid'>elemName</span> <span class='varop'>++</span> <span class='str'>"."</span><span class='layout'>)</span> <span class='varid'>x</span>
+<a name="line-259"></a>		         <span class='varop'>++</span>
+<a name="line-260"></a>		         <span class='varid'>checkMC</span> <span class='varid'>xs</span> <span class='varid'>used</span>
+<a name="line-261"></a>
+<a name="line-262"></a>	            <span class='keyword'>else</span> <span class='varid'>checkMC</span> <span class='varid'>xs</span> <span class='layout'>(</span><span class='varid'>name</span> <span class='conop'>:</span> <span class='varid'>used</span><span class='layout'>)</span>
+<a name="line-263"></a>	            <span class='keyword'>where</span>
+<a name="line-264"></a>	            <span class='varid'>name</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al'</span>
+<a name="line-265"></a>
+<a name="line-266"></a>              <span class='varid'>checkMC</span> <span class='conid'>[]</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-267"></a>
+<a name="line-268"></a>              <span class='varid'>checkMC</span> <span class='varid'>nd</span> <span class='keyword'>_</span>
+<a name="line-269"></a>	          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkMC: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-270"></a>
+<a name="line-271"></a>	  <span class='varid'>checkMixedContent</span> <span class='varid'>nd</span>
+<a name="line-272"></a>	      <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkMixedContent: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-273"></a>
+<a name="line-274"></a>
+<a name="line-275"></a>      <span class='comment'>-- Issues a warning if an element mentioned in a content model is not</span>
+<a name="line-276"></a>      <span class='comment'>-- declared in the DTD.</span>
+<a name="line-277"></a>      <span class='varid'>checkContentModels</span> <span class='varid'>names</span> <span class='varid'>elems</span>
+<a name="line-278"></a>          <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='varid'>checkContentModel</span> <span class='varid'>elems</span>
+<a name="line-279"></a>	  <span class='keyword'>where</span>
+<a name="line-280"></a>          <span class='varid'>checkContentModel</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-281"></a>          <span class='varid'>checkContentModel</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ELEMENT</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-282"></a>              <span class='keyglyph'>=</span> <span class='varid'>validateContent</span> <span class='layout'>(</span><span class='varid'>lookup1</span> <span class='varid'>a_type</span> <span class='varid'>al</span><span class='layout'>)</span>
+<a name="line-283"></a>	      <span class='keyword'>where</span>
+<a name="line-284"></a>	      <span class='varid'>elemName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al</span>
+<a name="line-285"></a>
+<a name="line-286"></a>	      <span class='varid'>validateContent</span> <span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-287"></a>	      <span class='varid'>validateContent</span> <span class='varid'>cm</span>
+<a name="line-288"></a>	          <span class='keyglyph'>|</span> <span class='varid'>cm</span> <span class='varop'>==</span> <span class='varid'>v_children</span> <span class='keyglyph'>=</span> <span class='varid'>checkContent</span> <span class='layout'>(</span><span class='varid'>head</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-289"></a>	          <span class='keyglyph'>|</span> <span class='varid'>cm</span> <span class='varop'>==</span> <span class='varid'>v_mixed</span>    <span class='keyglyph'>=</span> <span class='varid'>checkContent</span> <span class='layout'>(</span><span class='varid'>head</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-290"></a>	          <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>        <span class='keyglyph'>=</span> <span class='conid'>[]</span>  <span class='comment'>-- no child elements to check</span>
+<a name="line-291"></a>
+<a name="line-292"></a>	      <span class='varid'>checkContent</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-293"></a>	      <span class='varid'>checkContent</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>NAME</span> <span class='varid'>al'</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-294"></a>	          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>childElemName</span> <span class='varop'>`elem`</span> <span class='varid'>names</span>
+<a name="line-295"></a>	            <span class='keyword'>then</span> <span class='conid'>[]</span>
+<a name="line-296"></a>	            <span class='keyword'>else</span> <span class='varid'>warn</span> <span class='layout'>(</span><span class='str'>"The element type "</span><span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>childElemName</span> <span class='varop'>++</span>
+<a name="line-297"></a>		               <span class='str'>", used in content model of element "</span><span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>elemName</span> <span class='varop'>++</span>
+<a name="line-298"></a>			       <span class='str'>", is not declared."</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-299"></a>	            <span class='keyword'>where</span>
+<a name="line-300"></a>		    <span class='varid'>childElemName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al'</span>
+<a name="line-301"></a>
+<a name="line-302"></a>	      <span class='varid'>checkContent</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>CONTENT</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>cs'</span><span class='layout'>)</span>
+<a name="line-303"></a>	          <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='layout'>(</span><span class='varid'>checkContent</span><span class='layout'>)</span> <span class='varid'>cs'</span>
+<a name="line-304"></a>
+<a name="line-305"></a>	      <span class='varid'>checkContent</span> <span class='varid'>nd</span>
+<a name="line-306"></a>	          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkContent: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-307"></a>
+<a name="line-308"></a>          <span class='varid'>checkContentModel</span> <span class='varid'>nd</span>
+<a name="line-309"></a>              <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkContentModel: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-310"></a>
+<a name="line-311"></a>
+<a name="line-312"></a><span class='comment'>-- |</span>
+<a name="line-313"></a><span class='comment'>-- Validation of Attribute declarations.</span>
+<a name="line-314"></a><span class='comment'>--</span>
+<a name="line-315"></a><span class='comment'>-- (1) Issues a warning if an attribute is declared for an element type not itself</span>
+<a name="line-316"></a><span class='comment'>--    decared.</span>
+<a name="line-317"></a><span class='comment'>--</span>
+<a name="line-318"></a><span class='comment'>--    Optinal warning: (3.3 \/ p. 24 in Spec)</span>
+<a name="line-319"></a><span class='comment'>--</span>
+<a name="line-320"></a><span class='comment'>--</span>
+<a name="line-321"></a><span class='comment'>-- 2. Issues a warning if more than one definition is provided for the same</span>
+<a name="line-322"></a><span class='comment'>--    attribute of a given element type. Fist declaration is binding, later</span>
+<a name="line-323"></a><span class='comment'>--    definitions are ignored.</span>
+<a name="line-324"></a><span class='comment'>--</span>
+<a name="line-325"></a><span class='comment'>--    Optional warning: (3.3 \/ p.24 in Spec)</span>
+<a name="line-326"></a><span class='comment'>--</span>
+<a name="line-327"></a><span class='comment'>--</span>
+<a name="line-328"></a><span class='comment'>-- 3. Issues a warning if the same Nmtoken occures more than once in enumerated</span>
+<a name="line-329"></a><span class='comment'>--    attribute types of a single element type.</span>
+<a name="line-330"></a><span class='comment'>--</span>
+<a name="line-331"></a><span class='comment'>--    Optional warning: (3.3.1 \/ p.27 in Spec) </span>
+<a name="line-332"></a><span class='comment'>--</span>
+<a name="line-333"></a><span class='comment'>--</span>
+<a name="line-334"></a><span class='comment'>-- 4. Validates that an element type has not more than one ID attribute defined.</span>
+<a name="line-335"></a><span class='comment'>--</span>
+<a name="line-336"></a><span class='comment'>--    Validity constraint: One ID per Element Type (3.3.1 \/ p.26 in Spec) </span>
+<a name="line-337"></a><span class='comment'>--</span>
+<a name="line-338"></a><span class='comment'>--</span>
+<a name="line-339"></a><span class='comment'>-- 5. Validates that an element type has not more than one NOTATION attribute defined.</span>
+<a name="line-340"></a><span class='comment'>--</span>
+<a name="line-341"></a><span class='comment'>--    Validity constraint: One Notation per Element Type (3.3.1 \/ p.27 in Spec) </span>
+<a name="line-342"></a><span class='comment'>--</span>
+<a name="line-343"></a><span class='comment'>--</span>
+<a name="line-344"></a><span class='comment'>-- 6. Validates that an ID attributes has the type #IMPLIED or #REQUIRED.</span>
+<a name="line-345"></a><span class='comment'>--</span>
+<a name="line-346"></a><span class='comment'>--    Validity constraint: ID Attribute Default (3.3.1 \/ p.26 in Spec) </span>
+<a name="line-347"></a><span class='comment'>--</span>
+<a name="line-348"></a><span class='comment'>--</span>
+<a name="line-349"></a><span class='comment'>-- 7. Validates that all referenced notations are declared.</span>
+<a name="line-350"></a><span class='comment'>--</span>
+<a name="line-351"></a><span class='comment'>--    Validity constraint: Notation Attributes (3.3.1 \/ p.27 in Spec) </span>
+<a name="line-352"></a><span class='comment'>--</span>
+<a name="line-353"></a><span class='comment'>--</span>
+<a name="line-354"></a><span class='comment'>-- 8. Validates that notations are not declared for EMPTY elements.</span>
+<a name="line-355"></a><span class='comment'>--</span>
+<a name="line-356"></a><span class='comment'>--    Validity constraint: No Notation on Empty Element (3.3.1 \/p.27 in Spec) </span>
+<a name="line-357"></a><span class='comment'>--</span>
+<a name="line-358"></a><span class='comment'>--</span>
+<a name="line-359"></a><span class='comment'>-- 9. Validates that the default value matches the lexical constraints of it's type.</span>
+<a name="line-360"></a><span class='comment'>--</span>
+<a name="line-361"></a><span class='comment'>--    Validity constraint: Attribute default legal (3.3.2 \/ p.28 in Spec)</span>
+<a name="line-362"></a><span class='comment'>--</span>
+<a name="line-363"></a><span class='comment'>--</span>
+<a name="line-364"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>
+<a name="line-365"></a><span class='comment'>--</span>
+<a name="line-366"></a><span class='comment'>--    - 2.parameter elemNames :  list of all element names declared in the DTD</span>
+<a name="line-367"></a><span class='comment'>--</span>
+<a name="line-368"></a><span class='comment'>--    - 3.parameter notationNames :  list of all notation names declared in the DTD</span>
+<a name="line-369"></a><span class='comment'>--</span>
+<a name="line-370"></a><span class='comment'>--    - returns : a list of errors</span>
+<a name="line-371"></a>
+<a name="line-372"></a><a name="validateAttributes"></a><span class='definition'>validateAttributes</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-373"></a><span class='definition'>validateAttributes</span> <span class='varid'>dtdPart</span> <span class='varid'>elemNames</span> <span class='varid'>notationNames</span>
+<a name="line-374"></a>    <span class='keyglyph'>=</span> <span class='comment'>-- 1. Find attributes for which no elements are declared</span>
+<a name="line-375"></a>      <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>checkDeclaredElements</span> <span class='varid'>elemNames</span><span class='layout'>)</span> <span class='varop'>$$</span> <span class='varid'>attributes</span><span class='layout'>)</span>
+<a name="line-376"></a>      <span class='varop'>++</span>
+<a name="line-377"></a>      <span class='comment'>-- 2. Find attributes which are declared more than once</span>
+<a name="line-378"></a>      <span class='layout'>(</span><span class='varid'>checkForUniqueAttributeDeclaration</span> <span class='varid'>attributes</span> <span class='conid'>[]</span><span class='layout'>)</span>
+<a name="line-379"></a>      <span class='varop'>++</span>
+<a name="line-380"></a>      <span class='comment'>-- 3. Find enumerated attribute types which nmtokens are declared more than once</span>
+<a name="line-381"></a>      <span class='layout'>(</span><span class='varid'>checkEnumeratedTypes</span>
+<a name="line-382"></a>      <span class='varop'>`o`</span>
+<a name="line-383"></a>      <span class='layout'>(</span><span class='varid'>isEnumAttrType</span> <span class='varop'>`orElse`</span> <span class='varid'>isNotationAttrType</span><span class='layout'>)</span> <span class='varop'>$$</span> <span class='varid'>attributes</span><span class='layout'>)</span>
+<a name="line-384"></a>      <span class='varop'>++</span>
+<a name="line-385"></a>      <span class='comment'>-- 4. Validate that there exists only one ID attribute for an element</span>
+<a name="line-386"></a>      <span class='layout'>(</span><span class='varid'>checkForUniqueId</span> <span class='varid'>idAttributes</span> <span class='conid'>[]</span><span class='layout'>)</span>
+<a name="line-387"></a>      <span class='varop'>++</span>
+<a name="line-388"></a>      <span class='comment'>-- 5. Validate that there exists only one NOTATION attribute for an element</span>
+<a name="line-389"></a>      <span class='layout'>(</span><span class='varid'>checkForUniqueNotation</span> <span class='varid'>notationAttributes</span> <span class='conid'>[]</span><span class='layout'>)</span>
+<a name="line-390"></a>      <span class='varop'>++</span>
+<a name="line-391"></a>      <span class='comment'>-- 6. Validate that ID attributes have the type #IMPLIED or #REQUIRED</span>
+<a name="line-392"></a>      <span class='layout'>(</span><span class='varid'>checkIdKindConstraint</span> <span class='varop'>$$</span> <span class='varid'>idAttributes</span><span class='layout'>)</span>
+<a name="line-393"></a>      <span class='varop'>++</span>
+<a name="line-394"></a>      <span class='comment'>-- 7. Validate that all referenced notations are declared</span>
+<a name="line-395"></a>      <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>checkNotationDeclaration</span> <span class='varid'>notationNames</span><span class='layout'>)</span> <span class='varop'>$$</span> <span class='varid'>notationAttributes</span><span class='layout'>)</span>
+<a name="line-396"></a>      <span class='varop'>++</span>
+<a name="line-397"></a>      <span class='comment'>-- 8. Validate that notations are not declared for EMPTY elements</span>
+<a name="line-398"></a>      <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>checkNoNotationForEmptyElement</span>
+<a name="line-399"></a>      	  <span class='layout'>(</span>
+<a name="line-400"></a>    	      <span class='varid'>getXTextValues</span> <span class='layout'>(</span><span class='varid'>getDTDValue</span> <span class='varid'>a_name</span> <span class='varop'>$$</span> <span class='layout'>(</span><span class='varid'>isEmptyElement</span> <span class='varop'>$$</span> <span class='varid'>dtdPart</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-401"></a>       	  <span class='layout'>)</span>
+<a name="line-402"></a>        <span class='layout'>)</span> <span class='varop'>$$</span> <span class='varid'>notationAttributes</span><span class='layout'>)</span>
+<a name="line-403"></a>      <span class='varop'>++</span>
+<a name="line-404"></a>      <span class='comment'>-- 9. Validate that the default value matches the lexical constraints of it's type</span>
+<a name="line-405"></a>      <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>checkDefaultValueTypes</span> <span class='varid'>dtdPart</span><span class='layout'>)</span> <span class='varop'>$$</span> <span class='layout'>(</span><span class='varid'>isDefaultAttrKind</span> <span class='varop'>$$</span> <span class='varid'>attributes</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-406"></a>
+<a name="line-407"></a>      <span class='keyword'>where</span>
+<a name="line-408"></a>      <span class='comment'>--------------------------------------------------------------------------</span>
+<a name="line-409"></a>      <span class='comment'>-- helper functions</span>
+<a name="line-410"></a>      <span class='varid'>attributes</span>         <span class='keyglyph'>=</span> <span class='varid'>isAttlist</span> <span class='varop'>$$</span> <span class='varid'>dtdPart</span>
+<a name="line-411"></a>      <span class='varid'>idAttributes</span>       <span class='keyglyph'>=</span> <span class='varid'>isIdAttrType</span> <span class='varop'>$$</span> <span class='varid'>attributes</span>
+<a name="line-412"></a>      <span class='varid'>notationAttributes</span> <span class='keyglyph'>=</span> <span class='varid'>isNotationAttrType</span> <span class='varop'>$$</span> <span class='varid'>attributes</span>
+<a name="line-413"></a>
+<a name="line-414"></a>
+<a name="line-415"></a>      <span class='varid'>elemName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span>
+<a name="line-416"></a>      <span class='varid'>attName</span>  <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_value</span>
+<a name="line-417"></a>
+<a name="line-418"></a>      <span class='comment'>--------------------------------------------------------------------------</span>
+<a name="line-419"></a>      <span class='comment'>-- 1. Find attributes for which no elements are declared</span>
+<a name="line-420"></a>      <span class='varid'>checkDeclaredElements</span> <span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-421"></a>      <span class='varid'>checkDeclaredElements</span> <span class='varid'>elemNames'</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-422"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='layout'>(</span><span class='varid'>elemName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>`elem`</span> <span class='varid'>elemNames'</span>
+<a name="line-423"></a>	    <span class='keyword'>then</span> <span class='conid'>[]</span>
+<a name="line-424"></a>	    <span class='keyword'>else</span> <span class='varid'>warn</span> <span class='layout'>(</span><span class='str'>"The element type \""</span><span class='varop'>++</span> <span class='varid'>elemName</span> <span class='varid'>al</span> <span class='varop'>++</span> <span class='str'>"\" used in declaration "</span><span class='varop'>++</span>
+<a name="line-425"></a>	               <span class='str'>"of attribute \""</span><span class='varop'>++</span> <span class='varid'>attName</span> <span class='varid'>al</span> <span class='varop'>++</span><span class='str'>"\" is not declared."</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-426"></a>
+<a name="line-427"></a>      <span class='varid'>checkDeclaredElements</span> <span class='keyword'>_</span> <span class='varid'>nd</span>
+<a name="line-428"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkDeclaredElements: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-429"></a>
+<a name="line-430"></a>      <span class='comment'>--------------------------------------------------------------------------</span>
+<a name="line-431"></a>      <span class='comment'>-- 2. Find attributes which are declared more than once</span>
+<a name="line-432"></a>      <span class='varid'>checkForUniqueAttributeDeclaration</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-433"></a>      <span class='varid'>checkForUniqueAttributeDeclaration</span> <span class='layout'>(</span><span class='varid'>x</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span> <span class='varid'>used</span>
+<a name="line-434"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>name</span> <span class='varop'>`elem`</span> <span class='varid'>used</span>
+<a name="line-435"></a>	    <span class='keyword'>then</span> <span class='varid'>warn</span> <span class='layout'>(</span><span class='str'>"Attribute \""</span><span class='varop'>++</span> <span class='varid'>aname</span> <span class='varop'>++</span><span class='str'>"\" for element type \""</span><span class='varop'>++</span>
+<a name="line-436"></a>		        <span class='varid'>ename</span> <span class='varop'>++</span><span class='str'>"\" is already declared. First "</span><span class='varop'>++</span>
+<a name="line-437"></a>		        <span class='str'>"declaration will be used."</span><span class='layout'>)</span> <span class='varid'>x</span>
+<a name="line-438"></a>		 <span class='varop'>++</span>
+<a name="line-439"></a>		 <span class='varid'>checkForUniqueAttributeDeclaration</span> <span class='varid'>xs</span> <span class='varid'>used</span>
+<a name="line-440"></a>
+<a name="line-441"></a>	    <span class='keyword'>else</span> <span class='varid'>checkForUniqueAttributeDeclaration</span> <span class='varid'>xs</span> <span class='layout'>(</span><span class='varid'>name</span> <span class='conop'>:</span> <span class='varid'>used</span><span class='layout'>)</span>
+<a name="line-442"></a>	    <span class='keyword'>where</span>
+<a name="line-443"></a>	    <span class='varid'>ename</span> <span class='keyglyph'>=</span> <span class='varid'>elemName</span> <span class='varid'>al</span>
+<a name="line-444"></a>	    <span class='varid'>aname</span> <span class='keyglyph'>=</span> <span class='varid'>attName</span> <span class='varid'>al</span>
+<a name="line-445"></a>	    <span class='varid'>name</span>  <span class='keyglyph'>=</span> <span class='varid'>ename</span> <span class='varop'>++</span> <span class='str'>"|"</span> <span class='varop'>++</span> <span class='varid'>aname</span>
+<a name="line-446"></a>
+<a name="line-447"></a>      <span class='varid'>checkForUniqueAttributeDeclaration</span> <span class='conid'>[]</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-448"></a>
+<a name="line-449"></a>      <span class='varid'>checkForUniqueAttributeDeclaration</span> <span class='varid'>nd</span> <span class='keyword'>_</span>
+<a name="line-450"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkForUniqueAttributeDeclaration: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-451"></a>
+<a name="line-452"></a>
+<a name="line-453"></a>      <span class='comment'>--------------------------------------------------------------------------</span>
+<a name="line-454"></a>      <span class='comment'>-- 3. Find enumerated attribute types which nmtokens are declared more than once</span>
+<a name="line-455"></a>      <span class='varid'>checkEnumeratedTypes</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-456"></a>      <span class='varid'>checkEnumeratedTypes</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-457"></a>          <span class='keyglyph'>=</span> <span class='varid'>checkForUniqueType</span> <span class='varid'>cs</span> <span class='conid'>[]</span>
+<a name="line-458"></a>	  <span class='keyword'>where</span>
+<a name="line-459"></a>	  <span class='varid'>checkForUniqueType</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-460"></a>          <span class='varid'>checkForUniqueType</span> <span class='layout'>(</span><span class='varid'>x</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>NAME</span> <span class='varid'>al'</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span> <span class='varid'>used</span>
+<a name="line-461"></a>              <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>nmtoken</span> <span class='varop'>`elem`</span> <span class='varid'>used</span>
+<a name="line-462"></a>	        <span class='keyword'>then</span> <span class='varid'>warn</span> <span class='layout'>(</span><span class='str'>"Nmtoken \""</span><span class='varop'>++</span> <span class='varid'>nmtoken</span> <span class='varop'>++</span><span class='str'>"\" should not "</span><span class='varop'>++</span>
+<a name="line-463"></a>		        <span class='str'>"occur more than once in attribute \""</span><span class='varop'>++</span> <span class='varid'>attName</span> <span class='varid'>al</span> <span class='varop'>++</span>
+<a name="line-464"></a>			<span class='str'>"\" for element \""</span><span class='varop'>++</span> <span class='varid'>elemName</span> <span class='varid'>al</span> <span class='varop'>++</span> <span class='str'>"\"."</span><span class='layout'>)</span> <span class='varid'>x</span>
+<a name="line-465"></a>		     <span class='varop'>++</span>
+<a name="line-466"></a>		     <span class='varid'>checkForUniqueType</span> <span class='varid'>xs</span> <span class='varid'>used</span>
+<a name="line-467"></a>
+<a name="line-468"></a>	        <span class='keyword'>else</span> <span class='varid'>checkForUniqueType</span> <span class='varid'>xs</span> <span class='layout'>(</span><span class='varid'>nmtoken</span> <span class='conop'>:</span> <span class='varid'>used</span><span class='layout'>)</span>
+<a name="line-469"></a>	        <span class='keyword'>where</span>
+<a name="line-470"></a>	        <span class='varid'>nmtoken</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al'</span>
+<a name="line-471"></a>
+<a name="line-472"></a>          <span class='varid'>checkForUniqueType</span> <span class='conid'>[]</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-473"></a>
+<a name="line-474"></a>          <span class='varid'>checkForUniqueType</span> <span class='varid'>nd</span> <span class='keyword'>_</span>
+<a name="line-475"></a>              <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkForUniqueType: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-476"></a>
+<a name="line-477"></a>      <span class='varid'>checkEnumeratedTypes</span> <span class='varid'>nd</span>
+<a name="line-478"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkEnumeratedTypes: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-479"></a>
+<a name="line-480"></a>
+<a name="line-481"></a>      <span class='comment'>--------------------------------------------------------------------------</span>
+<a name="line-482"></a>      <span class='comment'>-- 4. Validate that there exists only one ID attribute for an element</span>
+<a name="line-483"></a>      <span class='varid'>checkForUniqueId</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-484"></a>      <span class='varid'>checkForUniqueId</span> <span class='layout'>(</span><span class='varid'>x</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span> <span class='varid'>used</span>
+<a name="line-485"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>ename</span> <span class='varop'>`elem`</span> <span class='varid'>used</span>
+<a name="line-486"></a>	    <span class='keyword'>then</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Element \""</span><span class='varop'>++</span> <span class='varid'>ename</span> <span class='varop'>++</span> <span class='str'>"\" already has attribute of type "</span><span class='varop'>++</span>
+<a name="line-487"></a>		       <span class='str'>"ID, another attribute \""</span><span class='varop'>++</span> <span class='varid'>attName</span> <span class='varid'>al</span> <span class='varop'>++</span> <span class='str'>"\" of type ID is "</span><span class='varop'>++</span>
+<a name="line-488"></a>		       <span class='str'>"not permitted."</span><span class='layout'>)</span> <span class='varid'>x</span>
+<a name="line-489"></a>		 <span class='varop'>++</span>
+<a name="line-490"></a>		 <span class='varid'>checkForUniqueId</span> <span class='varid'>xs</span> <span class='varid'>used</span>
+<a name="line-491"></a>
+<a name="line-492"></a>	    <span class='keyword'>else</span> <span class='varid'>checkForUniqueId</span> <span class='varid'>xs</span> <span class='layout'>(</span><span class='varid'>ename</span> <span class='conop'>:</span> <span class='varid'>used</span><span class='layout'>)</span>
+<a name="line-493"></a>	    <span class='keyword'>where</span>
+<a name="line-494"></a>	    <span class='varid'>ename</span> <span class='keyglyph'>=</span> <span class='varid'>elemName</span> <span class='varid'>al</span>
+<a name="line-495"></a>
+<a name="line-496"></a>      <span class='varid'>checkForUniqueId</span> <span class='conid'>[]</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-497"></a>
+<a name="line-498"></a>      <span class='varid'>checkForUniqueId</span> <span class='varid'>nd</span> <span class='keyword'>_</span>
+<a name="line-499"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkForUniqueId: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-500"></a>
+<a name="line-501"></a>      <span class='comment'>--------------------------------------------------------------------------</span>
+<a name="line-502"></a>      <span class='comment'>-- 5. Validate that there exists only one NOTATION attribute for an element</span>
+<a name="line-503"></a>      <span class='varid'>checkForUniqueNotation</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-504"></a>      <span class='varid'>checkForUniqueNotation</span> <span class='layout'>(</span><span class='varid'>x</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span> <span class='varid'>used</span>
+<a name="line-505"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>ename</span> <span class='varop'>`elem`</span> <span class='varid'>used</span>
+<a name="line-506"></a>	    <span class='keyword'>then</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Element \""</span><span class='varop'>++</span> <span class='varid'>elemName</span> <span class='varid'>al</span> <span class='varop'>++</span> <span class='str'>"\" already has attribute of type "</span><span class='varop'>++</span>
+<a name="line-507"></a>		       <span class='str'>"NOTATION, another attribute \""</span><span class='varop'>++</span> <span class='varid'>attName</span> <span class='varid'>al</span> <span class='varop'>++</span> <span class='str'>"\" of type NOTATION "</span><span class='varop'>++</span>
+<a name="line-508"></a>		       <span class='str'>"is not permitted."</span><span class='layout'>)</span> <span class='varid'>x</span>
+<a name="line-509"></a>		 <span class='varop'>++</span>
+<a name="line-510"></a>		 <span class='varid'>checkForUniqueNotation</span> <span class='varid'>xs</span> <span class='varid'>used</span>
+<a name="line-511"></a>
+<a name="line-512"></a>	    <span class='keyword'>else</span> <span class='varid'>checkForUniqueNotation</span> <span class='varid'>xs</span> <span class='layout'>(</span><span class='varid'>ename</span> <span class='conop'>:</span> <span class='varid'>used</span><span class='layout'>)</span>
+<a name="line-513"></a>	    <span class='keyword'>where</span>
+<a name="line-514"></a>	    <span class='varid'>ename</span> <span class='keyglyph'>=</span> <span class='varid'>elemName</span> <span class='varid'>al</span>
+<a name="line-515"></a>
+<a name="line-516"></a>      <span class='varid'>checkForUniqueNotation</span> <span class='conid'>[]</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-517"></a>
+<a name="line-518"></a>      <span class='varid'>checkForUniqueNotation</span> <span class='varid'>nd</span> <span class='keyword'>_</span>
+<a name="line-519"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkForUniqueNotation: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-520"></a>
+<a name="line-521"></a>      <span class='comment'>--------------------------------------------------------------------------</span>
+<a name="line-522"></a>      <span class='comment'>-- 6. Validate that ID attributes have the type #IMPLIED or #REQUIRED</span>
+<a name="line-523"></a>      <span class='varid'>checkIdKindConstraint</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-524"></a>      <span class='varid'>checkIdKindConstraint</span> <span class='varid'>nd</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-525"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='layout'>(</span><span class='varid'>attKind</span> <span class='varop'>==</span> <span class='varid'>k_implied</span><span class='layout'>)</span> <span class='varop'>||</span> <span class='layout'>(</span><span class='varid'>attKind</span> <span class='varop'>==</span> <span class='varid'>k_required</span><span class='layout'>)</span>
+<a name="line-526"></a>	    <span class='keyword'>then</span> <span class='conid'>[]</span>
+<a name="line-527"></a>	    <span class='keyword'>else</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"ID attribute \""</span><span class='varop'>++</span> <span class='varid'>attName</span> <span class='varid'>al</span> <span class='varop'>++</span><span class='str'>"\" must have a declared default "</span><span class='varop'>++</span>
+<a name="line-528"></a>	              <span class='str'>"of \"#IMPLIED\" or \"REQUIRED\""</span><span class='layout'>)</span> <span class='varid'>nd</span>
+<a name="line-529"></a>	    <span class='keyword'>where</span>
+<a name="line-530"></a>	    <span class='varid'>attKind</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_kind</span> <span class='varid'>al</span>
+<a name="line-531"></a>
+<a name="line-532"></a>      <span class='varid'>checkIdKindConstraint</span> <span class='varid'>nd</span>
+<a name="line-533"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkIdKindConstraint: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-534"></a>
+<a name="line-535"></a>
+<a name="line-536"></a>      <span class='comment'>--------------------------------------------------------------------------</span>
+<a name="line-537"></a>      <span class='comment'>-- 7. Validate that all referenced notations are declared</span>
+<a name="line-538"></a>      <span class='varid'>checkNotationDeclaration</span> <span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-539"></a>      <span class='varid'>checkNotationDeclaration</span> <span class='varid'>notations</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-540"></a>          <span class='keyglyph'>=</span> <span class='varid'>checkNotations</span> <span class='varop'>$$</span> <span class='varid'>cs</span>
+<a name="line-541"></a>	  <span class='keyword'>where</span>
+<a name="line-542"></a>	  <span class='varid'>checkNotations</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-543"></a>	  <span class='varid'>checkNotations</span> <span class='varid'>nd</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>NAME</span> <span class='varid'>al'</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-544"></a>	      <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>notation</span> <span class='varop'>`elem`</span> <span class='varid'>notations</span>
+<a name="line-545"></a>	        <span class='keyword'>then</span> <span class='conid'>[]</span>
+<a name="line-546"></a>	        <span class='keyword'>else</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"The notation \""</span><span class='varop'>++</span> <span class='varid'>notation</span> <span class='varop'>++</span><span class='str'>"\" must be declared when "</span><span class='varop'>++</span>
+<a name="line-547"></a>		          <span class='str'>"referenced in the notation type list for attribute \""</span><span class='varop'>++</span> <span class='varid'>attName</span> <span class='varid'>al</span> <span class='varop'>++</span>
+<a name="line-548"></a>			  <span class='str'>"\" of element \""</span><span class='varop'>++</span> <span class='varid'>elemName</span> <span class='varid'>al</span> <span class='varop'>++</span><span class='str'>"\"."</span><span class='layout'>)</span> <span class='varid'>nd</span>
+<a name="line-549"></a>                <span class='keyword'>where</span>
+<a name="line-550"></a>	        <span class='varid'>notation</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al'</span>
+<a name="line-551"></a>
+<a name="line-552"></a>          <span class='varid'>checkNotations</span> <span class='varid'>nd</span>
+<a name="line-553"></a>              <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkNotations: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-554"></a>
+<a name="line-555"></a>      <span class='varid'>checkNotationDeclaration</span> <span class='keyword'>_</span> <span class='varid'>nd</span>
+<a name="line-556"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkNotationDeclaration: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-557"></a>
+<a name="line-558"></a>      <span class='comment'>--------------------------------------------------------------------------</span>
+<a name="line-559"></a>      <span class='comment'>-- 8. Validate that notations are not declared for EMPTY elements</span>
+<a name="line-560"></a>      <span class='varid'>checkNoNotationForEmptyElement</span> <span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-561"></a>      <span class='varid'>checkNoNotationForEmptyElement</span> <span class='varid'>emptyElems</span> <span class='varid'>nd</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-562"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='layout'>(</span><span class='varid'>elemName</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varop'>`elem`</span> <span class='varid'>emptyElems</span>
+<a name="line-563"></a>	    <span class='keyword'>then</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Attribute \""</span><span class='varop'>++</span> <span class='varid'>attName</span> <span class='varid'>al</span> <span class='varop'>++</span><span class='str'>"\" of type NOTATION must not be "</span><span class='varop'>++</span>
+<a name="line-564"></a>	              <span class='str'>"declared on the element \""</span><span class='varop'>++</span> <span class='varid'>elemName</span> <span class='varid'>al</span> <span class='varop'>++</span><span class='str'>"\" declared EMPTY."</span><span class='layout'>)</span>
+<a name="line-565"></a>		      <span class='varid'>nd</span>
+<a name="line-566"></a>	    <span class='keyword'>else</span> <span class='conid'>[]</span>
+<a name="line-567"></a>
+<a name="line-568"></a>      <span class='varid'>checkNoNotationForEmptyElement</span> <span class='keyword'>_</span> <span class='varid'>nd</span>
+<a name="line-569"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkNoNotationForEmptyElement: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-570"></a>
+<a name="line-571"></a>      <span class='comment'>--------------------------------------------------------------------------</span>
+<a name="line-572"></a>      <span class='comment'>-- 9. Validate that default values meet the lexical constraints of the attribute types</span>
+<a name="line-573"></a>      <span class='varid'>checkDefaultValueTypes</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-574"></a>      <span class='varid'>checkDefaultValueTypes</span> <span class='varid'>dtdPart'</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-575"></a>          <span class='keyglyph'>=</span> <span class='varid'>checkAttributeValue</span> <span class='varid'>dtdPart'</span> <span class='varid'>n</span> <span class='varid'>n</span>
+<a name="line-576"></a>
+<a name="line-577"></a>      <span class='varid'>checkDefaultValueTypes</span> <span class='keyword'>_</span> <span class='varid'>nd</span>
+<a name="line-578"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkDefaultValueTypes: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-579"></a>
+<a name="line-580"></a>
+<a name="line-581"></a>
+<a name="line-582"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-583"></a>
+<a name="line-584"></a><span class='comment'>-- |</span>
+<a name="line-585"></a><span class='comment'>-- Removes doublicate declarations from the DTD, which first declaration is</span>
+<a name="line-586"></a><span class='comment'>-- binding. This is the case for ATTLIST and ENTITY declarations.</span>
+<a name="line-587"></a><span class='comment'>--</span>
+<a name="line-588"></a><span class='comment'>--    - returns : A function that replaces the children of DOCTYPE nodes by a list</span>
+<a name="line-589"></a><span class='comment'>--               where all multiple declarations are removed.</span>
+<a name="line-590"></a>
+<a name="line-591"></a><a name="removeDoublicateDefs"></a><span class='definition'>removeDoublicateDefs</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-592"></a><span class='definition'>removeDoublicateDefs</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>DOCTYPE</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-593"></a>    <span class='keyglyph'>=</span> <span class='varid'>replaceChildren</span> <span class='layout'>(</span><span class='varid'>removeDoubleDefs</span> <span class='conid'>[]</span> <span class='varid'>cs</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-594"></a>      <span class='keyword'>where</span>
+<a name="line-595"></a>      <span class='varid'>removeDoubleDefs</span> <span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-596"></a>      <span class='varid'>removeDoubleDefs</span> <span class='varid'>used</span> <span class='layout'>(</span><span class='varid'>x</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span>
+<a name="line-597"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>elemAttr</span> <span class='varop'>`elem`</span> <span class='varid'>used</span>
+<a name="line-598"></a>            <span class='keyword'>then</span> <span class='varid'>removeDoubleDefs</span> <span class='varid'>used</span> <span class='varid'>xs</span>
+<a name="line-599"></a>            <span class='keyword'>else</span> <span class='varid'>x</span>
+<a name="line-600"></a>	         <span class='conop'>:</span>
+<a name="line-601"></a>	         <span class='varid'>removeDoubleDefs</span> <span class='layout'>(</span><span class='varid'>elemAttr</span> <span class='conop'>:</span> <span class='varid'>used</span><span class='layout'>)</span> <span class='varid'>xs</span>
+<a name="line-602"></a>            <span class='keyword'>where</span>
+<a name="line-603"></a>	    <span class='varid'>elemAttr</span> <span class='keyglyph'>=</span> <span class='varid'>elemName</span> <span class='varop'>++</span> <span class='str'>"|"</span> <span class='varop'>++</span> <span class='varid'>attrName</span>
+<a name="line-604"></a>            <span class='varid'>attrName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_value</span> <span class='varid'>al</span>
+<a name="line-605"></a>            <span class='varid'>elemName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al</span>
+<a name="line-606"></a>
+<a name="line-607"></a>
+<a name="line-608"></a>      <span class='varid'>removeDoubleDefs</span> <span class='varid'>used</span> <span class='layout'>(</span><span class='varid'>x</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ENTITY</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span>
+<a name="line-609"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>name</span> <span class='varop'>`elem`</span> <span class='varid'>used</span>
+<a name="line-610"></a>            <span class='keyword'>then</span> <span class='varid'>removeDoubleDefs</span> <span class='varid'>used</span> <span class='varid'>xs</span>
+<a name="line-611"></a>            <span class='keyword'>else</span> <span class='varid'>x</span>
+<a name="line-612"></a>	         <span class='conop'>:</span>
+<a name="line-613"></a>	         <span class='varid'>removeDoubleDefs</span> <span class='layout'>(</span><span class='varid'>name</span> <span class='conop'>:</span> <span class='varid'>used</span><span class='layout'>)</span> <span class='varid'>xs</span>
+<a name="line-614"></a>            <span class='keyword'>where</span>
+<a name="line-615"></a>            <span class='varid'>name</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al</span>
+<a name="line-616"></a>
+<a name="line-617"></a>
+<a name="line-618"></a>      <span class='varid'>removeDoubleDefs</span> <span class='varid'>used</span> <span class='layout'>(</span><span class='varid'>x</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span>
+<a name="line-619"></a>          <span class='keyglyph'>=</span> <span class='varid'>x</span> <span class='conop'>:</span> <span class='varid'>removeDoubleDefs</span> <span class='varid'>used</span> <span class='varid'>xs</span>
+<a name="line-620"></a>
+<a name="line-621"></a>      <span class='varid'>removeDoubleDefs</span> <span class='keyword'>_</span> <span class='conid'>[]</span>
+<a name="line-622"></a>          <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-623"></a>
+<a name="line-624"></a>
+<a name="line-625"></a><span class='definition'>removeDoublicateDefs</span> <span class='varid'>n</span>
+<a name="line-626"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>n</span><span class='keyglyph'>]</span>
+<a name="line-627"></a>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Validator-DocTransformation.html b/doc/hxt-filter/src/Text-XML-HXT-Validator-DocTransformation.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Validator-DocTransformation.html
@@ -0,0 +1,244 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- This module provides functions for transforming XML documents represented as</span>
+<a name="line-3"></a><span class='comment'>-- XmlTree with respect to its DTD.</span>
+<a name="line-4"></a>
+<a name="line-5"></a><span class='comment'>-- Transforming an XML document with respect to its DTD means:</span>
+<a name="line-6"></a><span class='comment'>--</span>
+<a name="line-7"></a><span class='comment'>--  - add all attributes with default values</span>
+<a name="line-8"></a><span class='comment'>--</span>
+<a name="line-9"></a><span class='comment'>--  - normalize all attribute values</span>
+<a name="line-10"></a><span class='comment'>--</span>
+<a name="line-11"></a><span class='comment'>--  - sort all attributes in lexical order</span>
+<a name="line-12"></a><span class='comment'>--</span>
+<a name="line-13"></a>
+<a name="line-14"></a>
+<a name="line-15"></a><span class='comment'>-- Note: Transformation should be started after validation.</span>
+<a name="line-16"></a>
+<a name="line-17"></a>
+<a name="line-18"></a><span class='comment'>-- Before the document is validated, a lookup-table is build on the basis of</span>
+<a name="line-19"></a><span class='comment'>-- the DTD which maps element names to their transformation functions.</span>
+<a name="line-20"></a><span class='comment'>-- After this initialization phase the whole document is traversed in preorder</span>
+<a name="line-21"></a><span class='comment'>-- and every element is transformed by the XmlFilter from the lookup-table.</span>
+<a name="line-22"></a>
+<a name="line-23"></a><span class='comment'>-- Special namings in source code:</span>
+<a name="line-24"></a><span class='comment'>--</span>
+<a name="line-25"></a><span class='comment'>--  - nd - XDTD node</span>
+<a name="line-26"></a><span class='comment'>--</span>
+<a name="line-27"></a><span class='comment'>--  - n  - XTag node</span>
+<a name="line-28"></a><span class='comment'>--</span>
+<a name="line-29"></a><span class='comment'>-- Author : .\\artin Schmidt</span>
+<a name="line-30"></a>
+<a name="line-31"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>DocTransformation</span>
+<a name="line-32"></a>    <span class='layout'>(</span> <span class='varid'>transform</span>
+<a name="line-33"></a>    <span class='layout'>)</span>
+<a name="line-34"></a><span class='keyword'>where</span>
+<a name="line-35"></a>
+<a name="line-36"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-37"></a>
+<a name="line-38"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>AttributeValueValidation</span>
+<a name="line-39"></a>
+<a name="line-40"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>
+<a name="line-41"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>List</span>
+<a name="line-42"></a>
+<a name="line-43"></a>
+<a name="line-44"></a>
+<a name="line-45"></a><span class='comment'>-- |</span>
+<a name="line-46"></a><span class='comment'>-- Lookup-table which maps element names to their transformation functions. The</span>
+<a name="line-47"></a><span class='comment'>-- transformation functions are XmlFilters.</span>
+<a name="line-48"></a>
+<a name="line-49"></a><a name="TransEnvTable"></a><span class='keyword'>type</span> <span class='conid'>TransEnvTable</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>TransEnv</span><span class='keyglyph'>]</span>
+<a name="line-50"></a><a name="TransEnv"></a><span class='keyword'>type</span> <span class='conid'>TransEnv</span> 		<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='conid'>ElemName</span><span class='layout'>,</span> <span class='conid'>TransFct</span><span class='layout'>)</span>
+<a name="line-51"></a><a name="ElemName"></a><span class='keyword'>type</span> <span class='conid'>ElemName</span>		<span class='keyglyph'>=</span> <span class='conid'>String</span>
+<a name="line-52"></a><a name="TransFct"></a><span class='keyword'>type</span> <span class='conid'>TransFct</span>		<span class='keyglyph'>=</span> <span class='conid'>XmlFilter</span>
+<a name="line-53"></a>
+<a name="line-54"></a>
+<a name="line-55"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-56"></a>
+<a name="line-57"></a>
+<a name="line-58"></a><span class='comment'>-- |</span>
+<a name="line-59"></a><span class='comment'>-- filter for transforming the document.</span>
+<a name="line-60"></a><span class='comment'>--</span>
+<a name="line-61"></a><span class='comment'>--    * 1.parameter dtdPart :  the DTD subset (Node @DOCTYPE@) of the XmlTree</span>
+<a name="line-62"></a><span class='comment'>--</span>
+<a name="line-63"></a><span class='comment'>--    - 2.parameter doc :  the document subset of the XmlTree</span>
+<a name="line-64"></a><span class='comment'>--</span>
+<a name="line-65"></a><span class='comment'>--    - returns : a list of errors</span>
+<a name="line-66"></a>
+<a name="line-67"></a><a name="transform"></a><span class='definition'>transform</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-68"></a><span class='definition'>transform</span> <span class='varid'>dtdPart</span> <span class='varid'>dom</span>
+<a name="line-69"></a>    <span class='keyglyph'>=</span> <span class='varid'>traverseTree</span> <span class='varid'>transTable</span> <span class='varid'>dom</span>
+<a name="line-70"></a>    <span class='keyword'>where</span>
+<a name="line-71"></a>    <span class='varid'>transTable</span> <span class='keyglyph'>=</span> <span class='comment'>{-# SCC "buildAllTransFcts" #-}</span> <span class='varid'>buildAllTransformationFunctions</span> <span class='varid'>dtdPart</span>
+<a name="line-72"></a>
+<a name="line-73"></a>
+<a name="line-74"></a>
+<a name="line-75"></a><span class='comment'>-- |</span>
+<a name="line-76"></a><span class='comment'>-- Traverse the XmlTree in preorder.</span>
+<a name="line-77"></a><span class='comment'>--</span>
+<a name="line-78"></a><span class='comment'>--    * 1.parameter transEnv :  lookup-table which maps element names to their transformation functions</span>
+<a name="line-79"></a><span class='comment'>--</span>
+<a name="line-80"></a><span class='comment'>--    - returns : the whole transformed document</span>
+<a name="line-81"></a>
+<a name="line-82"></a><a name="traverseTree"></a><span class='definition'>traverseTree</span> <span class='keyglyph'>::</span> <span class='conid'>TransEnvTable</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-83"></a><span class='definition'>traverseTree</span> <span class='varid'>transEnv</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>name</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-84"></a>    <span class='keyglyph'>=</span> <span class='varid'>replaceChildren</span> <span class='layout'>(</span><span class='varid'>concatMap</span> <span class='layout'>(</span><span class='varid'>traverseTree</span> <span class='varid'>transEnv</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>head</span> <span class='layout'>(</span><span class='varid'>transFct</span> <span class='varid'>n</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-85"></a>      <span class='keyword'>where</span>
+<a name="line-86"></a>      <span class='varid'>transFct</span> <span class='keyglyph'>=</span> <span class='keyword'>case</span> <span class='layout'>(</span><span class='varid'>lookup</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='varid'>transEnv</span><span class='layout'>)</span> <span class='keyword'>of</span>
+<a name="line-87"></a>          <span class='conid'>Nothing</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>this</span>   <span class='comment'>-- element not in DTD, can't be transformed</span>
+<a name="line-88"></a>	  <span class='conid'>Just</span> <span class='varid'>f</span>  <span class='keyglyph'>-&gt;</span> <span class='varid'>f</span>
+<a name="line-89"></a>
+<a name="line-90"></a><span class='definition'>traverseTree</span> <span class='keyword'>_</span> <span class='varid'>n</span> <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>n</span><span class='keyglyph'>]</span>
+<a name="line-91"></a>
+<a name="line-92"></a>
+<a name="line-93"></a><span class='comment'>-- |</span>
+<a name="line-94"></a><span class='comment'>-- Build all transformation functions.</span>
+<a name="line-95"></a><span class='comment'>--</span>
+<a name="line-96"></a><span class='comment'>--    * 1.parameter dtdPart :  the DTD subset, root node should be of type @DOCTYPE@</span>
+<a name="line-97"></a><span class='comment'>--</span>
+<a name="line-98"></a><span class='comment'>--    - returns : lookup-table which maps element names to their transformation functions</span>
+<a name="line-99"></a>
+<a name="line-100"></a><a name="buildAllTransformationFunctions"></a><span class='definition'>buildAllTransformationFunctions</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>TransEnvTable</span>
+<a name="line-101"></a><span class='definition'>buildAllTransformationFunctions</span> <span class='varid'>dtdPart</span>
+<a name="line-102"></a>    <span class='keyglyph'>=</span> <span class='varid'>buildTransRoot</span>
+<a name="line-103"></a>      <span class='conop'>:</span>
+<a name="line-104"></a>      <span class='comment'>-- construct the list of filters</span>
+<a name="line-105"></a>      <span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>buildTransformationFunctions</span> <span class='varid'>dtdNodes</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>isElement</span> <span class='varop'>$$</span> <span class='varid'>dtdNodes</span><span class='layout'>)</span>
+<a name="line-106"></a>      <span class='keyword'>where</span>
+<a name="line-107"></a>      <span class='varid'>dtdNodes</span> <span class='keyglyph'>=</span> <span class='varid'>getChildren</span> <span class='varid'>dtdPart</span>
+<a name="line-108"></a>
+<a name="line-109"></a>
+<a name="line-110"></a><span class='comment'>-- |</span>
+<a name="line-111"></a><span class='comment'>-- Build a transformation function for the document root. By root @\/@</span>
+<a name="line-112"></a><span class='comment'>-- is meant, which is the topmost dummy created by the parser. This function is only a</span>
+<a name="line-113"></a><span class='comment'>-- dummy, too.</span>
+<a name="line-114"></a><span class='comment'>--</span>
+<a name="line-115"></a><span class='comment'>--    * returns : entry for the lookup-table</span>
+<a name="line-116"></a>
+<a name="line-117"></a><a name="buildTransRoot"></a><span class='definition'>buildTransRoot</span> <span class='keyglyph'>::</span> <span class='conid'>TransEnv</span>
+<a name="line-118"></a><span class='definition'>buildTransRoot</span> <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>t_root</span><span class='layout'>,</span> <span class='varid'>this</span><span class='layout'>)</span>
+<a name="line-119"></a>
+<a name="line-120"></a>
+<a name="line-121"></a>
+<a name="line-122"></a><span class='comment'>-- |</span>
+<a name="line-123"></a><span class='comment'>-- Build transformation functions for an element.</span>
+<a name="line-124"></a><span class='comment'>--</span>
+<a name="line-125"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>
+<a name="line-126"></a><span class='comment'>--</span>
+<a name="line-127"></a><span class='comment'>--    * 1.parameter nd :  element declaration for which the transformation functions are</span>
+<a name="line-128"></a><span class='comment'>--                    created</span>
+<a name="line-129"></a><span class='comment'>--</span>
+<a name="line-130"></a><span class='comment'>--    - returns : entry for the lookup-table</span>
+<a name="line-131"></a>
+<a name="line-132"></a><a name="buildTransformationFunctions"></a><span class='definition'>buildTransformationFunctions</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>TransEnv</span>
+<a name="line-133"></a>
+<a name="line-134"></a><span class='definition'>buildTransformationFunctions</span> <span class='varid'>dtdPart</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ELEMENT</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-135"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>name</span><span class='layout'>,</span> <span class='varid'>transFct</span><span class='layout'>)</span>
+<a name="line-136"></a>    <span class='keyword'>where</span>
+<a name="line-137"></a>    <span class='varid'>name</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al</span>
+<a name="line-138"></a>    <span class='varid'>transFct</span> <span class='keyglyph'>=</span> <span class='varid'>lexicographicAttributeOrder</span>
+<a name="line-139"></a>               <span class='varop'>`o`</span>
+<a name="line-140"></a>	       <span class='varid'>normalizeAttributeValues</span> <span class='varid'>n</span> <span class='varid'>dtdPart</span>
+<a name="line-141"></a>	       <span class='varop'>`o`</span>
+<a name="line-142"></a>	       <span class='varid'>setDefaultAttributeValues</span> <span class='varid'>n</span> <span class='varid'>dtdPart</span>
+<a name="line-143"></a>
+<a name="line-144"></a><span class='definition'>buildTransformationFunctions</span> <span class='keyword'>_</span> <span class='varid'>n</span>
+<a name="line-145"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"buildTransformationFunctions: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-146"></a>
+<a name="line-147"></a>
+<a name="line-148"></a>
+<a name="line-149"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-150"></a>
+<a name="line-151"></a>
+<a name="line-152"></a><span class='comment'>-- |</span>
+<a name="line-153"></a><span class='comment'>-- Sort the attributes of an element in lexicographic order.</span>
+<a name="line-154"></a><span class='comment'>--</span>
+<a name="line-155"></a><span class='comment'>--    * returns : a function which takes an element (XTag), sorts its</span>
+<a name="line-156"></a><span class='comment'>--                  attributes in lexicographic order and returns the changed element</span>
+<a name="line-157"></a>
+<a name="line-158"></a><a name="lexicographicAttributeOrder"></a><span class='definition'>lexicographicAttributeOrder</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-159"></a><span class='definition'>lexicographicAttributeOrder</span>
+<a name="line-160"></a>    <span class='keyglyph'>=</span> <span class='varid'>processAttrl</span> <span class='varid'>sortAttrl</span>
+<a name="line-161"></a>      <span class='keyword'>where</span>
+<a name="line-162"></a>      <span class='varid'>sortAttrl</span> <span class='varid'>al</span>
+<a name="line-163"></a>	  <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>al</span> <span class='varop'>!!</span><span class='layout'>)</span> <span class='varid'>ixs</span>
+<a name="line-164"></a>	    <span class='keyword'>where</span>
+<a name="line-165"></a>	    <span class='varid'>ns</span>  <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='varid'>nameOf</span> <span class='varid'>al</span>
+<a name="line-166"></a>	    <span class='varid'>ixs</span> <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='varid'>snd</span> <span class='varop'>.</span> <span class='varid'>sort</span> <span class='varop'>.</span> <span class='varid'>zip</span> <span class='varid'>ns</span> <span class='varop'>$</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='num'>0</span><span class='keyglyph'>::</span><span class='conid'>Int</span><span class='layout'>)</span><span class='keyglyph'>..</span><span class='keyglyph'>]</span>
+<a name="line-167"></a>
+<a name="line-168"></a><span class='comment'>-- |</span>
+<a name="line-169"></a><span class='comment'>-- Normalize attribute values.</span>
+<a name="line-170"></a><span class='comment'>--</span>
+<a name="line-171"></a><span class='comment'>--    * returns : a function which takes an element (XTag), normalizes its</span>
+<a name="line-172"></a><span class='comment'>--                  attribute values and returns the changed element</span>
+<a name="line-173"></a>
+<a name="line-174"></a><a name="normalizeAttributeValues"></a><span class='definition'>normalizeAttributeValues</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-175"></a><span class='definition'>normalizeAttributeValues</span> <span class='varid'>elemDescr</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ELEMENT</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>dtdPart</span>
+<a name="line-176"></a>    <span class='keyglyph'>=</span> <span class='varid'>processAttr</span> <span class='varid'>normalizeAttr</span>
+<a name="line-177"></a>      <span class='keyword'>where</span>
+<a name="line-178"></a>      <span class='varid'>elemName</span>     <span class='keyglyph'>=</span> <span class='varid'>valueOfDTD</span> <span class='varid'>a_name</span> <span class='varid'>elemDescr</span>
+<a name="line-179"></a>      <span class='varid'>declaredAtts</span> <span class='keyglyph'>=</span> <span class='varid'>isAttlistOfElement</span> <span class='varid'>elemName</span> <span class='varop'>$$</span> <span class='varid'>dtdPart</span>
+<a name="line-180"></a>
+<a name="line-181"></a>      <span class='varid'>normalizeAttr</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-182"></a>      <span class='varid'>normalizeAttr</span> <span class='varid'>att</span>
+<a name="line-183"></a>	  <span class='keyglyph'>=</span> <span class='varid'>normalizeAttrValue</span> <span class='layout'>(</span><span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>attDescr</span>
+<a name="line-184"></a>				<span class='keyword'>then</span> <span class='conid'>Nothing</span>
+<a name="line-185"></a>				<span class='keyword'>else</span> <span class='conid'>Just</span> <span class='layout'>(</span><span class='varid'>head</span> <span class='varid'>attDescr</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>att</span>
+<a name="line-186"></a>	    <span class='keyword'>where</span>
+<a name="line-187"></a>	    <span class='varid'>attDescr</span> <span class='keyglyph'>=</span> <span class='varid'>filter</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>x</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>valueOfDTD</span> <span class='varid'>a_value</span> <span class='varid'>x</span><span class='layout'>)</span> <span class='varop'>==</span> <span class='varid'>nameOf</span> <span class='varid'>att</span><span class='layout'>)</span> <span class='varid'>declaredAtts</span>
+<a name="line-188"></a>
+<a name="line-189"></a>      <span class='varid'>normalizeAttrValue</span> <span class='keyglyph'>::</span> <span class='conid'>Maybe</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-190"></a>      <span class='varid'>normalizeAttrValue</span> <span class='varid'>descr</span>
+<a name="line-191"></a>	  <span class='keyglyph'>=</span> <span class='varid'>modifyChildren</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>modifyText</span> <span class='layout'>(</span><span class='varid'>normalizeAttributeValue</span> <span class='varid'>descr</span><span class='layout'>)</span> <span class='varop'>$$</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>xmlTreesToText</span><span class='layout'>)</span>
+<a name="line-192"></a>
+<a name="line-193"></a><span class='definition'>normalizeAttributeValues</span> <span class='varid'>n</span> <span class='keyword'>_</span>
+<a name="line-194"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"normalizeAttributeValues: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-195"></a>
+<a name="line-196"></a>
+<a name="line-197"></a>
+<a name="line-198"></a><span class='comment'>-- |</span>
+<a name="line-199"></a><span class='comment'>-- Set default attribute values if they are not set.</span>
+<a name="line-200"></a><span class='comment'>--</span>
+<a name="line-201"></a><span class='comment'>--    * returns : a function which takes an element (XTag), adds missing attribute</span>
+<a name="line-202"></a><span class='comment'>--                  defaults and returns the changed element</span>
+<a name="line-203"></a>
+<a name="line-204"></a><a name="setDefaultAttributeValues"></a><span class='definition'>setDefaultAttributeValues</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-205"></a><span class='definition'>setDefaultAttributeValues</span> <span class='varid'>elemDescr</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ELEMENT</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>dtdPart</span>
+<a name="line-206"></a>    <span class='keyglyph'>=</span> <span class='varid'>seqF</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='varid'>setDefault</span> <span class='varid'>defaultAtts</span><span class='layout'>)</span>
+<a name="line-207"></a>      <span class='keyword'>where</span>
+<a name="line-208"></a>						<span class='comment'>-- select the element name from the dtd</span>
+<a name="line-209"></a>      <span class='varid'>elemName</span> <span class='keyglyph'>=</span> <span class='varid'>valueOfDTD</span> <span class='varid'>a_name</span> <span class='varid'>elemDescr</span>
+<a name="line-210"></a>
+<a name="line-211"></a>      <span class='varid'>defaultAtts</span> <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>isFixedAttrKind</span>		<span class='comment'>-- select attributes with default values</span>
+<a name="line-212"></a>		      <span class='varop'>`orElse`</span>
+<a name="line-213"></a>		      <span class='varid'>isDefaultAttrKind</span>
+<a name="line-214"></a>		    <span class='layout'>)</span>
+<a name="line-215"></a>                    <span class='varop'>$$</span>
+<a name="line-216"></a>		    <span class='layout'>(</span><span class='varid'>isAttlistOfElement</span> <span class='varid'>elemName</span> <span class='varop'>$$</span> <span class='varid'>dtdPart</span><span class='layout'>)</span>
+<a name="line-217"></a>
+<a name="line-218"></a>      <span class='varid'>setDefault</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-219"></a>      <span class='varid'>setDefault</span> <span class='varid'>attrDescr</span>			<span class='comment'>-- add the default attributes</span>
+<a name="line-220"></a>	  <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>addAttr</span> <span class='varid'>attName</span> <span class='varid'>defaultValue</span>	<span class='comment'>-- to tag nodes with missing attributes</span>
+<a name="line-221"></a>	      <span class='varop'>`whenNot`</span>
+<a name="line-222"></a>	      <span class='varid'>hasAttr</span> <span class='varid'>attName</span>
+<a name="line-223"></a>	    <span class='layout'>)</span>
+<a name="line-224"></a>	    <span class='varop'>`when`</span>
+<a name="line-225"></a>	    <span class='varid'>isXTag</span>
+<a name="line-226"></a>	    <span class='keyword'>where</span>
+<a name="line-227"></a>	    <span class='varid'>attName</span>      <span class='keyglyph'>=</span> <span class='varid'>valueOfDTD</span> <span class='varid'>a_value</span>   <span class='varid'>attrDescr</span>
+<a name="line-228"></a>	    <span class='varid'>defaultValue</span> <span class='keyglyph'>=</span> <span class='varid'>valueOfDTD</span> <span class='varid'>a_default</span> <span class='varid'>attrDescr</span>
+<a name="line-229"></a>
+<a name="line-230"></a>
+<a name="line-231"></a><span class='definition'>setDefaultAttributeValues</span> <span class='varid'>n</span> <span class='keyword'>_</span>
+<a name="line-232"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"setDefaultAttributeValues: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-233"></a>
+<a name="line-234"></a>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Validator-DocValidation.html b/doc/hxt-filter/src/Text-XML-HXT-Validator-DocValidation.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Validator-DocValidation.html
@@ -0,0 +1,547 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- This module provides functions for validating XML Documents represented as</span>
+<a name="line-3"></a><span class='comment'>-- XmlTree.</span>
+<a name="line-4"></a>
+<a name="line-5"></a><span class='comment'>-- Unlike other popular XML validation tools the validation process returns</span>
+<a name="line-6"></a><span class='comment'>-- a list of errors instead of aborting after the first error was found.</span>
+<a name="line-7"></a>
+<a name="line-8"></a>
+<a name="line-9"></a><span class='comment'>-- Before the document is validated, a lookup-table is build on the basis of</span>
+<a name="line-10"></a><span class='comment'>-- the DTD which maps element names to their validation functions.</span>
+<a name="line-11"></a><span class='comment'>-- After this initialization phase the whole document is traversed in preorder</span>
+<a name="line-12"></a><span class='comment'>-- and every element is validated by the XmlFilter from the lookup-table.</span>
+<a name="line-13"></a>
+<a name="line-14"></a><span class='comment'>-- Special namings in source code:</span>
+<a name="line-15"></a><span class='comment'>--</span>
+<a name="line-16"></a><span class='comment'>--  - nd - XDTD node</span>
+<a name="line-17"></a><span class='comment'>--</span>
+<a name="line-18"></a><span class='comment'>--  - n  - XTag node</span>
+<a name="line-19"></a><span class='comment'>--</span>
+<a name="line-20"></a><span class='comment'>-- Author : .\\artin Schmidt</span>
+<a name="line-21"></a>
+<a name="line-22"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>DocValidation</span>
+<a name="line-23"></a>    <span class='layout'>(</span> <span class='varid'>validateDoc</span>
+<a name="line-24"></a>    <span class='layout'>)</span>
+<a name="line-25"></a><span class='keyword'>where</span>
+<a name="line-26"></a>
+<a name="line-27"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-28"></a>
+<a name="line-29"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>AttributeValueValidation</span>
+<a name="line-30"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>XmlRE</span>
+<a name="line-31"></a>
+<a name="line-32"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>
+<a name="line-33"></a>
+<a name="line-34"></a><span class='comment'>-- |</span>
+<a name="line-35"></a><span class='comment'>-- Lookup-table which maps element names to their validation functions. The</span>
+<a name="line-36"></a><span class='comment'>-- validation functions are XmlFilters.</span>
+<a name="line-37"></a>
+<a name="line-38"></a><a name="ValiEnvTable"></a><span class='keyword'>type</span> <span class='conid'>ValiEnvTable</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>ValiEnv</span><span class='keyglyph'>]</span>
+<a name="line-39"></a><a name="ValiEnv"></a><span class='keyword'>type</span> <span class='conid'>ValiEnv</span> 		<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='conid'>ElemName</span><span class='layout'>,</span> <span class='conid'>ValFct</span><span class='layout'>)</span>
+<a name="line-40"></a><a name="ElemName"></a><span class='keyword'>type</span> <span class='conid'>ElemName</span>		<span class='keyglyph'>=</span> <span class='conid'>String</span>
+<a name="line-41"></a><a name="ValFct"></a><span class='keyword'>type</span> <span class='conid'>ValFct</span>		<span class='keyglyph'>=</span> <span class='conid'>XmlFilter</span>
+<a name="line-42"></a>
+<a name="line-43"></a>
+<a name="line-44"></a>
+<a name="line-45"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-46"></a>
+<a name="line-47"></a>
+<a name="line-48"></a><span class='comment'>-- |</span>
+<a name="line-49"></a><span class='comment'>-- Validate a document.</span>
+<a name="line-50"></a><span class='comment'>--</span>
+<a name="line-51"></a><span class='comment'>--    * 1.parameter dtdPart :  the DTD subset (Node @DOCTYPE@) of the XmlTree</span>
+<a name="line-52"></a><span class='comment'>--</span>
+<a name="line-53"></a><span class='comment'>--    - 2.parameter doc :  the document subset of the XmlTree</span>
+<a name="line-54"></a><span class='comment'>--</span>
+<a name="line-55"></a><span class='comment'>--    - returns : a list of errors</span>
+<a name="line-56"></a>
+<a name="line-57"></a><a name="validateDoc"></a><span class='definition'>validateDoc</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-58"></a><span class='definition'>validateDoc</span> <span class='varid'>dtdPart</span> <span class='varid'>doc</span>
+<a name="line-59"></a>    <span class='keyglyph'>=</span> <span class='varid'>traverseTree</span> <span class='varid'>valTable</span> <span class='varid'>doc</span>
+<a name="line-60"></a>    <span class='keyword'>where</span>
+<a name="line-61"></a>    <span class='varid'>valTable</span> <span class='keyglyph'>=</span> <span class='comment'>{-# SCC "buildAllValFcts" #-}</span> <span class='varid'>buildAllValidationFunctions</span> <span class='varid'>dtdPart</span>
+<a name="line-62"></a>
+<a name="line-63"></a>
+<a name="line-64"></a><span class='comment'>-- |</span>
+<a name="line-65"></a><span class='comment'>-- Traverse the XmlTree in preorder.</span>
+<a name="line-66"></a><span class='comment'>--</span>
+<a name="line-67"></a><span class='comment'>--    * 1.parameter valiEnv :  lookup-table which maps element names to their validation functions</span>
+<a name="line-68"></a><span class='comment'>--</span>
+<a name="line-69"></a><span class='comment'>--    - returns : list of errors</span>
+<a name="line-70"></a>
+<a name="line-71"></a><a name="traverseTree"></a><span class='definition'>traverseTree</span> <span class='keyglyph'>::</span> <span class='conid'>ValiEnvTable</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-72"></a><span class='definition'>traverseTree</span> <span class='varid'>valiEnv</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>name</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-73"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>valFct</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='varid'>concatMap</span> <span class='layout'>(</span><span class='varid'>traverseTree</span> <span class='varid'>valiEnv</span><span class='layout'>)</span> <span class='varid'>cs</span>
+<a name="line-74"></a>      <span class='keyword'>where</span>
+<a name="line-75"></a>      <span class='varid'>valFct</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-76"></a>      <span class='varid'>valFct</span>
+<a name="line-77"></a>          <span class='keyglyph'>=</span> <span class='keyword'>case</span> <span class='layout'>(</span><span class='varid'>lookup</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='varid'>valiEnv</span><span class='layout'>)</span> <span class='keyword'>of</span>
+<a name="line-78"></a>	    <span class='conid'>Nothing</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Element "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>" not declared in DTD."</span><span class='layout'>)</span>
+<a name="line-79"></a>	    <span class='conid'>Just</span> <span class='varid'>f</span>  <span class='keyglyph'>-&gt;</span> <span class='varid'>f</span>
+<a name="line-80"></a>
+<a name="line-81"></a><span class='definition'>traverseTree</span> <span class='keyword'>_</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-82"></a>
+<a name="line-83"></a>
+<a name="line-84"></a>
+<a name="line-85"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-86"></a>
+<a name="line-87"></a>
+<a name="line-88"></a><span class='comment'>-- |</span>
+<a name="line-89"></a><span class='comment'>-- Build all validation functions.</span>
+<a name="line-90"></a><span class='comment'>--</span>
+<a name="line-91"></a><span class='comment'>--    * 1.parameter dtdPart :  DTD subset, root node should be of type @DOCTYPE@</span>
+<a name="line-92"></a><span class='comment'>--</span>
+<a name="line-93"></a><span class='comment'>--    - returns : lookup-table which maps element names to their validation functions</span>
+<a name="line-94"></a>
+<a name="line-95"></a><a name="buildAllValidationFunctions"></a><span class='definition'>buildAllValidationFunctions</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>ValiEnvTable</span>
+<a name="line-96"></a><span class='definition'>buildAllValidationFunctions</span> <span class='varid'>dtdPart</span>
+<a name="line-97"></a>    <span class='keyglyph'>=</span> <span class='varid'>buildValidateRoot</span> <span class='varid'>dtdPart</span>
+<a name="line-98"></a>      <span class='conop'>:</span>
+<a name="line-99"></a>      <span class='comment'>-- construct a list of validation filters for all element declarations</span>
+<a name="line-100"></a>      <span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>buildValidateFunctions</span> <span class='varid'>dtdNodes</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>isElement</span> <span class='varop'>$$</span> <span class='varid'>dtdNodes</span><span class='layout'>)</span>
+<a name="line-101"></a>      <span class='keyword'>where</span>
+<a name="line-102"></a>      <span class='varid'>dtdNodes</span> <span class='keyglyph'>=</span> <span class='varid'>getChildren</span> <span class='varid'>dtdPart</span>
+<a name="line-103"></a>
+<a name="line-104"></a>
+<a name="line-105"></a><span class='comment'>-- |</span>
+<a name="line-106"></a><span class='comment'>-- Build a validation function for the document root. By root node @\/@</span>
+<a name="line-107"></a><span class='comment'>-- is meant, which is the topmost dummy created by the parser.</span>
+<a name="line-108"></a><span class='comment'>--</span>
+<a name="line-109"></a><span class='comment'>--    * 1.parameter dtdPart :  DTD subset, root node should be of type @DOCTYPE@</span>
+<a name="line-110"></a><span class='comment'>--</span>
+<a name="line-111"></a><span class='comment'>--    - returns : entry for the lookup-table</span>
+<a name="line-112"></a>
+<a name="line-113"></a><a name="buildValidateRoot"></a><span class='definition'>buildValidateRoot</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>ValiEnv</span>
+<a name="line-114"></a><span class='definition'>buildValidateRoot</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>DOCTYPE</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-115"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>t_root</span><span class='layout'>,</span> <span class='varid'>valFct</span><span class='layout'>)</span>
+<a name="line-116"></a>      <span class='keyword'>where</span>
+<a name="line-117"></a>      <span class='varid'>name</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al</span>
+<a name="line-118"></a>
+<a name="line-119"></a>      <span class='varid'>valFct</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-120"></a>      <span class='varid'>valFct</span> <span class='varid'>nd</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='keyword'>_</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-121"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>msg</span> <span class='varop'>==</span> <span class='str'>""</span>
+<a name="line-122"></a>            <span class='keyword'>then</span> <span class='conid'>[]</span>
+<a name="line-123"></a>            <span class='keyword'>else</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Root Element must be "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>name</span> <span class='varop'>++</span> <span class='str'>". "</span> <span class='varop'>++</span> <span class='varid'>msg</span><span class='layout'>)</span> <span class='varid'>nd</span>
+<a name="line-124"></a>	    <span class='keyword'>where</span>
+<a name="line-125"></a>	    <span class='varid'>re</span> <span class='keyglyph'>=</span> <span class='varid'>re_sym</span> <span class='layout'>(</span><span class='varid'>name</span><span class='layout'>)</span>
+<a name="line-126"></a>	    <span class='varid'>msg</span> <span class='keyglyph'>=</span> <span class='varid'>checkRE</span> <span class='layout'>(</span><span class='varid'>matches</span> <span class='varid'>re</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-127"></a>
+<a name="line-128"></a>      <span class='varid'>valFct</span> <span class='varid'>n</span> <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"buildValidateRoot: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-129"></a>
+<a name="line-130"></a><span class='definition'>buildValidateRoot</span> <span class='varid'>nd</span>
+<a name="line-131"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"buildValidateRoot: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-132"></a>
+<a name="line-133"></a>
+<a name="line-134"></a><span class='comment'>-- |</span>
+<a name="line-135"></a><span class='comment'>-- Build validation functions for an element.</span>
+<a name="line-136"></a><span class='comment'>--</span>
+<a name="line-137"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>
+<a name="line-138"></a><span class='comment'>--</span>
+<a name="line-139"></a><span class='comment'>--    - 2.parameter nd :  element declaration for which the validation functions are</span>
+<a name="line-140"></a><span class='comment'>--                   created</span>
+<a name="line-141"></a><span class='comment'>--</span>
+<a name="line-142"></a><span class='comment'>--    - returns : entry for the lookup-table</span>
+<a name="line-143"></a>
+<a name="line-144"></a><a name="buildValidateFunctions"></a><span class='definition'>buildValidateFunctions</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>ValiEnv</span>
+<a name="line-145"></a>
+<a name="line-146"></a><span class='definition'>buildValidateFunctions</span> <span class='varid'>dtdPart</span> <span class='varid'>nd</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ELEMENT</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-147"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>elemName</span><span class='layout'>,</span> <span class='varid'>valFct</span><span class='layout'>)</span>
+<a name="line-148"></a>      <span class='keyword'>where</span>
+<a name="line-149"></a>      <span class='varid'>elemName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al</span>
+<a name="line-150"></a>
+<a name="line-151"></a>      <span class='varid'>valFct</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-152"></a>      <span class='varid'>valFct</span> <span class='keyglyph'>=</span> <span class='varid'>buildContentValidation</span> <span class='varid'>nd</span>
+<a name="line-153"></a>               <span class='varop'>+++</span>
+<a name="line-154"></a>	       <span class='varid'>buildAttributeValidation</span> <span class='varid'>dtdPart</span> <span class='varid'>nd</span>
+<a name="line-155"></a>
+<a name="line-156"></a><span class='definition'>buildValidateFunctions</span> <span class='keyword'>_</span> <span class='varid'>nd</span>
+<a name="line-157"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"buildValidateFunctions: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-158"></a>
+<a name="line-159"></a>
+<a name="line-160"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-161"></a>
+<a name="line-162"></a>
+<a name="line-163"></a><span class='comment'>-- |</span>
+<a name="line-164"></a><span class='comment'>-- Build validation functions for the content model of an element.</span>
+<a name="line-165"></a><span class='comment'>-- Validity constraint: Element Valid (3 \/ p.18 in Spec)</span>
+<a name="line-166"></a><span class='comment'>--</span>
+<a name="line-167"></a><span class='comment'>--    * 1.parameter nd :  element declaration for which the content validation functions</span>
+<a name="line-168"></a><span class='comment'>--                  are built</span>
+<a name="line-169"></a><span class='comment'>--</span>
+<a name="line-170"></a><span class='comment'>--    - returns : a function which takes an element (XTag), checks if its</span>
+<a name="line-171"></a><span class='comment'>--                  children match its content model and returns a list of errors</span>
+<a name="line-172"></a>
+<a name="line-173"></a><a name="buildContentValidation"></a><span class='definition'>buildContentValidation</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-174"></a><span class='definition'>buildContentValidation</span> <span class='varid'>nd</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ELEMENT</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-175"></a>    <span class='keyglyph'>=</span> <span class='varid'>contentValidation</span> <span class='varid'>attrType</span> <span class='varid'>nd</span>
+<a name="line-176"></a>      <span class='keyword'>where</span>
+<a name="line-177"></a>      <span class='varid'>attrType</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_type</span> <span class='varid'>al</span>
+<a name="line-178"></a>
+<a name="line-179"></a>
+<a name="line-180"></a>      <span class='comment'>-- Delegates construction of the validation function on the basis of the</span>
+<a name="line-181"></a>      <span class='comment'>-- content model type</span>
+<a name="line-182"></a>      <span class='varid'>contentValidation</span> <span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-183"></a>      <span class='varid'>contentValidation</span> <span class='varid'>typ</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ELEMENT</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-184"></a>          <span class='keyglyph'>|</span> <span class='varid'>typ</span> <span class='varop'>==</span> <span class='varid'>k_pcdata</span>   <span class='keyglyph'>=</span> <span class='varid'>contentValidationPcdata</span>
+<a name="line-185"></a>          <span class='keyglyph'>|</span> <span class='varid'>typ</span> <span class='varop'>==</span> <span class='varid'>k_empty</span>    <span class='keyglyph'>=</span> <span class='varid'>contentValidationEmpty</span>
+<a name="line-186"></a>          <span class='keyglyph'>|</span> <span class='varid'>typ</span> <span class='varop'>==</span> <span class='varid'>k_any</span>      <span class='keyglyph'>=</span> <span class='varid'>contentValidationAny</span>
+<a name="line-187"></a>          <span class='keyglyph'>|</span> <span class='varid'>typ</span> <span class='varop'>==</span> <span class='varid'>v_children</span> <span class='keyglyph'>=</span> <span class='varid'>contentValidationChildren</span> <span class='varid'>cs</span>
+<a name="line-188"></a>          <span class='keyglyph'>|</span> <span class='varid'>typ</span> <span class='varop'>==</span> <span class='varid'>v_mixed</span>    <span class='keyglyph'>=</span> <span class='varid'>contentValidationMixed</span> <span class='varid'>cs</span>
+<a name="line-189"></a>          <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>         <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"contentValidation: unknown type: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>typ</span><span class='layout'>)</span>
+<a name="line-190"></a>
+<a name="line-191"></a>      <span class='varid'>contentValidation</span> <span class='keyword'>_</span> <span class='varid'>nd'</span>
+<a name="line-192"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"contentValidation: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd'</span><span class='layout'>)</span>
+<a name="line-193"></a>
+<a name="line-194"></a>
+<a name="line-195"></a>      <span class='comment'>-- Checks #PCDATA content models</span>
+<a name="line-196"></a>      <span class='varid'>contentValidationPcdata</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-197"></a>      <span class='varid'>contentValidationPcdata</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>name</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-198"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>msg</span> <span class='varop'>==</span> <span class='str'>""</span>
+<a name="line-199"></a>            <span class='keyword'>then</span> <span class='conid'>[]</span>
+<a name="line-200"></a>            <span class='keyword'>else</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"The content of element "</span><span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='varop'>++</span>
+<a name="line-201"></a>	              <span class='str'>" must match (#PCDATA). "</span><span class='varop'>++</span> <span class='varid'>msg</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-202"></a>	    <span class='keyword'>where</span>
+<a name="line-203"></a>	    <span class='varid'>re</span> <span class='keyglyph'>=</span> <span class='varid'>re_rep</span> <span class='layout'>(</span><span class='varid'>re_sym</span> <span class='varid'>k_pcdata</span><span class='layout'>)</span>
+<a name="line-204"></a>	    <span class='varid'>msg</span> <span class='keyglyph'>=</span> <span class='varid'>checkRE</span> <span class='layout'>(</span><span class='varid'>matches</span> <span class='varid'>re</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-205"></a>
+<a name="line-206"></a>      <span class='varid'>contentValidationPcdata</span> <span class='varid'>n</span>
+<a name="line-207"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"contentValidationPcdata: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-208"></a>
+<a name="line-209"></a>
+<a name="line-210"></a>      <span class='comment'>-- Checks EMPTY content models</span>
+<a name="line-211"></a>      <span class='varid'>contentValidationEmpty</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-212"></a>      <span class='varid'>contentValidationEmpty</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>name</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-213"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>msg</span> <span class='varop'>==</span> <span class='str'>""</span>
+<a name="line-214"></a>            <span class='keyword'>then</span> <span class='conid'>[]</span>
+<a name="line-215"></a>            <span class='keyword'>else</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"The content of element "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='varop'>++</span>
+<a name="line-216"></a>	              <span class='str'>" must match EMPTY. "</span> <span class='varop'>++</span> <span class='varid'>msg</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-217"></a>	    <span class='keyword'>where</span>
+<a name="line-218"></a>	    <span class='varid'>re</span> <span class='keyglyph'>=</span> <span class='varid'>re_unit</span>
+<a name="line-219"></a>	    <span class='varid'>msg</span> <span class='keyglyph'>=</span> <span class='varid'>checkRE</span> <span class='layout'>(</span><span class='varid'>matches</span> <span class='varid'>re</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-220"></a>
+<a name="line-221"></a>      <span class='varid'>contentValidationEmpty</span> <span class='varid'>n</span>
+<a name="line-222"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"contentValidationEmpty: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-223"></a>
+<a name="line-224"></a>
+<a name="line-225"></a>      <span class='comment'>-- Checks ANY content models</span>
+<a name="line-226"></a>      <span class='varid'>contentValidationAny</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-227"></a>      <span class='varid'>contentValidationAny</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>name</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-228"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>msg</span> <span class='varop'>==</span> <span class='str'>""</span>
+<a name="line-229"></a>            <span class='keyword'>then</span> <span class='conid'>[]</span>
+<a name="line-230"></a>            <span class='keyword'>else</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"The content of element "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='varop'>++</span>
+<a name="line-231"></a>	              <span class='str'>" must match ANY. "</span> <span class='varop'>++</span> <span class='varid'>msg</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-232"></a>	    <span class='keyword'>where</span>
+<a name="line-233"></a>	    <span class='varid'>re</span> <span class='keyglyph'>=</span> <span class='varid'>re_rep</span> <span class='layout'>(</span><span class='varid'>re_dot</span><span class='layout'>)</span>
+<a name="line-234"></a>	    <span class='varid'>msg</span> <span class='keyglyph'>=</span> <span class='varid'>checkRE</span> <span class='layout'>(</span><span class='varid'>matches</span> <span class='varid'>re</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-235"></a>
+<a name="line-236"></a>      <span class='varid'>contentValidationAny</span> <span class='varid'>n</span>
+<a name="line-237"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"contentValidationAny: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-238"></a>
+<a name="line-239"></a>
+<a name="line-240"></a>      <span class='comment'>-- Checks "children" content models</span>
+<a name="line-241"></a>      <span class='varid'>contentValidationChildren</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-242"></a>      <span class='varid'>contentValidationChildren</span> <span class='varid'>cm</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>name</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-243"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>msg</span> <span class='varop'>==</span> <span class='str'>""</span>
+<a name="line-244"></a>            <span class='keyword'>then</span> <span class='conid'>[]</span>
+<a name="line-245"></a>            <span class='keyword'>else</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"The content of element "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='varop'>++</span>
+<a name="line-246"></a>	              <span class='str'>" must match "</span> <span class='varop'>++</span> <span class='varid'>printRE</span> <span class='varid'>re</span> <span class='varop'>++</span> <span class='str'>". "</span> <span class='varop'>++</span> <span class='varid'>msg</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-247"></a>	    <span class='keyword'>where</span>
+<a name="line-248"></a>	    <span class='varid'>re</span> <span class='keyglyph'>=</span> <span class='varid'>createRE</span> <span class='layout'>(</span><span class='varid'>head</span> <span class='varid'>cm</span><span class='layout'>)</span>
+<a name="line-249"></a>	    <span class='varid'>msg</span> <span class='keyglyph'>=</span> <span class='varid'>checkRE</span> <span class='layout'>(</span><span class='varid'>matches</span> <span class='varid'>re</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-250"></a>
+<a name="line-251"></a>      <span class='varid'>contentValidationChildren</span> <span class='keyword'>_</span> <span class='varid'>n</span>
+<a name="line-252"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"contentValidationChildren: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-253"></a>
+<a name="line-254"></a>
+<a name="line-255"></a>      <span class='comment'>-- Checks "mixed content" content models</span>
+<a name="line-256"></a>      <span class='varid'>contentValidationMixed</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-257"></a>      <span class='varid'>contentValidationMixed</span> <span class='varid'>cm</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>name</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-258"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>msg</span> <span class='varop'>==</span> <span class='str'>""</span>
+<a name="line-259"></a>            <span class='keyword'>then</span> <span class='conid'>[]</span>
+<a name="line-260"></a>            <span class='keyword'>else</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"The content of element "</span><span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='varop'>++</span>
+<a name="line-261"></a>	              <span class='str'>" must match "</span> <span class='varop'>++</span> <span class='varid'>printRE</span> <span class='varid'>re</span> <span class='varop'>++</span> <span class='str'>". "</span> <span class='varop'>++</span> <span class='varid'>msg</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-262"></a>	    <span class='keyword'>where</span>
+<a name="line-263"></a>	    <span class='varid'>re</span> <span class='keyglyph'>=</span> <span class='varid'>re_rep</span> <span class='layout'>(</span><span class='varid'>re_alt</span> <span class='layout'>(</span><span class='varid'>re_sym</span> <span class='varid'>k_pcdata</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>createRE</span> <span class='layout'>(</span><span class='varid'>head</span> <span class='varid'>cm</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-264"></a>	    <span class='varid'>msg</span> <span class='keyglyph'>=</span> <span class='varid'>checkRE</span> <span class='layout'>(</span><span class='varid'>matches</span> <span class='varid'>re</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-265"></a>
+<a name="line-266"></a>      <span class='varid'>contentValidationMixed</span> <span class='keyword'>_</span> <span class='varid'>n</span>
+<a name="line-267"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"contentValidationMixed: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-268"></a>
+<a name="line-269"></a>
+<a name="line-270"></a><span class='definition'>buildContentValidation</span> <span class='varid'>nd</span>
+<a name="line-271"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"buildContentValidation: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-272"></a>
+<a name="line-273"></a>
+<a name="line-274"></a>
+<a name="line-275"></a><span class='comment'>-- |</span>
+<a name="line-276"></a><span class='comment'>-- Build a regular expression from the content model. The regular expression</span>
+<a name="line-277"></a><span class='comment'>-- is provided by the module XmlRE.</span>
+<a name="line-278"></a><span class='comment'>--</span>
+<a name="line-279"></a><span class='comment'>--    * 1.parameter nd :  node of the content model. Expected: @CONTENT@ or</span>
+<a name="line-280"></a><span class='comment'>--              @NAME@</span>
+<a name="line-281"></a><span class='comment'>--</span>
+<a name="line-282"></a><span class='comment'>--    - returns : regular expression of the content model</span>
+<a name="line-283"></a>
+<a name="line-284"></a><a name="createRE"></a><span class='definition'>createRE</span> <span class='keyglyph'>::</span>  <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='conid'>String</span>
+<a name="line-285"></a><span class='definition'>createRE</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>CONTENT</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-286"></a>    <span class='keyglyph'>=</span> <span class='varid'>processModifier</span> <span class='varid'>modifier</span>
+<a name="line-287"></a>      <span class='keyword'>where</span>
+<a name="line-288"></a>      <span class='varid'>modifier</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_modifier</span> <span class='varid'>al</span>
+<a name="line-289"></a>      <span class='varid'>kind</span>     <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_kind</span> <span class='varid'>al</span>
+<a name="line-290"></a>
+<a name="line-291"></a>      <span class='varid'>processModifier</span> <span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='conid'>String</span>
+<a name="line-292"></a>      <span class='varid'>processModifier</span> <span class='varid'>m</span>
+<a name="line-293"></a>          <span class='keyglyph'>|</span> <span class='varid'>m</span> <span class='varop'>==</span> <span class='varid'>v_plus</span>	  <span class='keyglyph'>=</span> <span class='varid'>re_plus</span> <span class='layout'>(</span><span class='varid'>processKind</span> <span class='varid'>kind</span><span class='layout'>)</span>
+<a name="line-294"></a>	  <span class='keyglyph'>|</span> <span class='varid'>m</span> <span class='varop'>==</span> <span class='varid'>v_star</span>	  <span class='keyglyph'>=</span> <span class='varid'>re_rep</span>  <span class='layout'>(</span><span class='varid'>processKind</span> <span class='varid'>kind</span><span class='layout'>)</span>
+<a name="line-295"></a>	  <span class='keyglyph'>|</span> <span class='varid'>m</span> <span class='varop'>==</span> <span class='varid'>v_option</span> <span class='keyglyph'>=</span> <span class='varid'>re_opt</span>  <span class='layout'>(</span><span class='varid'>processKind</span> <span class='varid'>kind</span><span class='layout'>)</span>
+<a name="line-296"></a>	  <span class='keyglyph'>|</span> <span class='varid'>m</span> <span class='varop'>==</span> <span class='varid'>v_null</span>	  <span class='keyglyph'>=</span> <span class='varid'>processKind</span> <span class='varid'>kind</span>
+<a name="line-297"></a>	  <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>     <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"Unknown modifier: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>m</span><span class='layout'>)</span>
+<a name="line-298"></a>
+<a name="line-299"></a>      <span class='varid'>processKind</span> <span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='conid'>String</span>
+<a name="line-300"></a>      <span class='varid'>processKind</span> <span class='varid'>k</span>
+<a name="line-301"></a>          <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>==</span> <span class='varid'>v_seq</span>	  <span class='keyglyph'>=</span> <span class='varid'>makeSequence</span> <span class='varid'>cs</span>
+<a name="line-302"></a>	  <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>==</span> <span class='varid'>v_choice</span> <span class='keyglyph'>=</span> <span class='varid'>makeChoice</span> <span class='varid'>cs</span>
+<a name="line-303"></a>	  <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	  <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"Unknown kind: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>k</span><span class='layout'>)</span>
+<a name="line-304"></a>
+<a name="line-305"></a>      <span class='varid'>makeSequence</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='conid'>String</span>
+<a name="line-306"></a>      <span class='varid'>makeSequence</span> <span class='conid'>[]</span>     <span class='keyglyph'>=</span> <span class='varid'>re_unit</span>
+<a name="line-307"></a>      <span class='varid'>makeSequence</span> <span class='layout'>(</span><span class='varid'>x</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>re_seq</span> <span class='layout'>(</span><span class='varid'>createRE</span> <span class='varid'>x</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>makeSequence</span> <span class='varid'>xs</span><span class='layout'>)</span>
+<a name="line-308"></a>
+<a name="line-309"></a>      <span class='varid'>makeChoice</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='conid'>String</span>
+<a name="line-310"></a>      <span class='varid'>makeChoice</span> <span class='conid'>[]</span>       <span class='keyglyph'>=</span> <span class='varid'>re_zero</span> <span class='str'>""</span>
+<a name="line-311"></a>      <span class='varid'>makeChoice</span> <span class='layout'>(</span><span class='varid'>x</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span>   <span class='keyglyph'>=</span> <span class='varid'>re_alt</span> <span class='layout'>(</span><span class='varid'>createRE</span> <span class='varid'>x</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>makeChoice</span> <span class='varid'>xs</span><span class='layout'>)</span>
+<a name="line-312"></a>
+<a name="line-313"></a><span class='definition'>createRE</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>NAME</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-314"></a>    <span class='keyglyph'>=</span> <span class='varid'>re_sym</span> <span class='layout'>(</span><span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al</span><span class='layout'>)</span>
+<a name="line-315"></a>
+<a name="line-316"></a><span class='definition'>createRE</span> <span class='varid'>nd</span>
+<a name="line-317"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"createRE: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-318"></a>
+<a name="line-319"></a>
+<a name="line-320"></a>
+<a name="line-321"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-322"></a>
+<a name="line-323"></a>
+<a name="line-324"></a>
+<a name="line-325"></a><span class='comment'>-- |</span>
+<a name="line-326"></a><span class='comment'>-- Build validation functions for the attributes of an element.</span>
+<a name="line-327"></a><span class='comment'>--</span>
+<a name="line-328"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>
+<a name="line-329"></a><span class='comment'>--</span>
+<a name="line-330"></a><span class='comment'>--    - 2.parameter nd :  element declaration for which the attribute validation functions</span>
+<a name="line-331"></a><span class='comment'>--                  are created</span>
+<a name="line-332"></a><span class='comment'>--</span>
+<a name="line-333"></a><span class='comment'>--    - returns : a function which takes an element (XTag), checks if its</span>
+<a name="line-334"></a><span class='comment'>--                  attributes are valid and returns a list of errors</span>
+<a name="line-335"></a>
+<a name="line-336"></a><a name="buildAttributeValidation"></a><span class='definition'>buildAttributeValidation</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-337"></a><span class='definition'>buildAttributeValidation</span> <span class='varid'>dtdPart</span> <span class='varid'>nd</span> <span class='keyglyph'>=</span>
+<a name="line-338"></a>    <span class='varid'>noDoublicateAttributes</span>
+<a name="line-339"></a>    <span class='varop'>+++</span>
+<a name="line-340"></a>    <span class='varid'>checkNotDeclardAttributes</span> <span class='varid'>attrDecls</span> <span class='varid'>nd</span>
+<a name="line-341"></a>    <span class='varop'>+++</span>
+<a name="line-342"></a>    <span class='varid'>checkRequiredAttributes</span> <span class='varid'>attrDecls</span> <span class='varid'>nd</span>
+<a name="line-343"></a>    <span class='varop'>+++</span>
+<a name="line-344"></a>    <span class='varid'>checkFixedAttributes</span> <span class='varid'>attrDecls</span> <span class='varid'>nd</span>
+<a name="line-345"></a>    <span class='varop'>+++</span>
+<a name="line-346"></a>    <span class='varid'>checkValuesOfAttributes</span> <span class='varid'>attrDecls</span> <span class='varid'>dtdPart</span> <span class='varid'>nd</span>
+<a name="line-347"></a>    <span class='keyword'>where</span>
+<a name="line-348"></a>    <span class='varid'>attrDecls</span> <span class='keyglyph'>=</span> <span class='varid'>isAttlist</span> <span class='varop'>$$</span> <span class='varid'>dtdPart</span>
+<a name="line-349"></a>
+<a name="line-350"></a>
+<a name="line-351"></a><span class='comment'>-- |</span>
+<a name="line-352"></a><span class='comment'>-- Validate that all attributes of an element are unique.</span>
+<a name="line-353"></a><span class='comment'>-- Well-formdness constraint: Unique AttSpec (3.1 \/ p.19 in Spec)</span>
+<a name="line-354"></a><span class='comment'>--</span>
+<a name="line-355"></a><span class='comment'>--    - returns : a function which takes an element (XTag), checks if its</span>
+<a name="line-356"></a><span class='comment'>--                  attributes are unique and returns a list of errors</span>
+<a name="line-357"></a>
+<a name="line-358"></a><a name="noDoublicateAttributes"></a><span class='definition'>noDoublicateAttributes</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-359"></a><span class='definition'>noDoublicateAttributes</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='keyword'>_</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-360"></a>    <span class='keyglyph'>=</span> <span class='varid'>doubles</span> <span class='varop'>.</span> <span class='varid'>reverse</span> <span class='varop'>$</span> <span class='varid'>names</span>
+<a name="line-361"></a>      <span class='keyword'>where</span>
+<a name="line-362"></a>      <span class='varid'>tagname</span> <span class='keyglyph'>=</span> <span class='varid'>nameOf</span> <span class='varid'>n</span>
+<a name="line-363"></a>      <span class='varid'>names</span>   <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='varid'>nameOf</span> <span class='varop'>.</span> <span class='varid'>getAttrl</span> <span class='varop'>$</span> <span class='varid'>n</span>
+<a name="line-364"></a>
+<a name="line-365"></a>      <span class='varid'>doubles</span> <span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-366"></a>      <span class='varid'>doubles</span> <span class='conid'>[]</span>
+<a name="line-367"></a>	  <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-368"></a>      <span class='varid'>doubles</span> <span class='layout'>(</span><span class='varid'>n1</span><span class='conop'>:</span><span class='varid'>ns</span><span class='layout'>)</span>
+<a name="line-369"></a>	  <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>n1</span> <span class='varop'>`elem`</span> <span class='varid'>ns</span>
+<a name="line-370"></a>	      <span class='keyword'>then</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Attribute "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n1</span> <span class='varop'>++</span> <span class='str'>" was already specified for element "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>tagname</span> <span class='varop'>++</span> <span class='str'>"."</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-371"></a>	      <span class='keyword'>else</span> <span class='conid'>[]</span>
+<a name="line-372"></a>	    <span class='layout'>)</span> <span class='varop'>++</span> <span class='varid'>doubles</span> <span class='varid'>ns</span>
+<a name="line-373"></a>
+<a name="line-374"></a><span class='definition'>noDoublicateAttributes</span> <span class='varid'>n</span>
+<a name="line-375"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"noDoublicateAttributes: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-376"></a>
+<a name="line-377"></a>
+<a name="line-378"></a><span class='comment'>-- |</span>
+<a name="line-379"></a><span class='comment'>-- Validate that all \#REQUIRED attributes are provided.</span>
+<a name="line-380"></a><span class='comment'>-- Validity constraint: Required Attributes (3.3.2 \/ p.28 in Spec)</span>
+<a name="line-381"></a><span class='comment'>--</span>
+<a name="line-382"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>
+<a name="line-383"></a><span class='comment'>--</span>
+<a name="line-384"></a><span class='comment'>--    - 2.parameter nd :  element declaration which attributes have to be checked</span>
+<a name="line-385"></a><span class='comment'>--</span>
+<a name="line-386"></a><span class='comment'>--    - returns : a function which takes an element (XTag), checks if all</span>
+<a name="line-387"></a><span class='comment'>--                  required attributes are provided and returns a list of errors</span>
+<a name="line-388"></a>
+<a name="line-389"></a><a name="checkRequiredAttributes"></a><span class='definition'>checkRequiredAttributes</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-390"></a><span class='definition'>checkRequiredAttributes</span> <span class='varid'>attrDecls</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ELEMENT</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-391"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkRequired</span> <span class='varid'>requiredAtts</span>
+<a name="line-392"></a>      <span class='keyword'>where</span>
+<a name="line-393"></a>      <span class='varid'>elemName</span>     <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al</span>
+<a name="line-394"></a>      <span class='varid'>requiredAtts</span> <span class='keyglyph'>=</span> <span class='varid'>isRequiredAttrKind</span> <span class='varop'>$$</span> <span class='layout'>(</span><span class='varid'>isAttlistOfElement</span> <span class='varid'>elemName</span> <span class='varop'>$$</span> <span class='varid'>attrDecls</span><span class='layout'>)</span>
+<a name="line-395"></a>
+<a name="line-396"></a>
+<a name="line-397"></a>      <span class='varid'>checkRequired</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-398"></a>      <span class='varid'>checkRequired</span> <span class='layout'>(</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al'</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>name</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-399"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>satisfies</span> <span class='layout'>(</span><span class='varid'>hasAttr</span> <span class='varid'>attName</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-400"></a>	    <span class='keyword'>then</span> <span class='varid'>checkRequired</span> <span class='varid'>xs</span> <span class='varid'>n</span>
+<a name="line-401"></a>	    <span class='keyword'>else</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Attribute "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>attName</span> <span class='varop'>++</span> <span class='str'>" must be declared for element type "</span> <span class='varop'>++</span>
+<a name="line-402"></a>	             <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>"."</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-403"></a>	         <span class='varop'>++</span>
+<a name="line-404"></a>		 <span class='varid'>checkRequired</span> <span class='varid'>xs</span> <span class='varid'>n</span>
+<a name="line-405"></a>	    <span class='keyword'>where</span>
+<a name="line-406"></a>	    <span class='varid'>attName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_value</span> <span class='varid'>al'</span>
+<a name="line-407"></a>
+<a name="line-408"></a>      <span class='varid'>checkRequired</span> <span class='conid'>[]</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-409"></a>
+<a name="line-410"></a>      <span class='varid'>checkRequired</span> <span class='varid'>nd</span> <span class='varid'>n</span>
+<a name="line-411"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkRequired: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-412"></a>
+<a name="line-413"></a>
+<a name="line-414"></a><span class='definition'>checkRequiredAttributes</span> <span class='keyword'>_</span> <span class='varid'>nd</span>
+<a name="line-415"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkRequiredAttributes: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-416"></a>
+<a name="line-417"></a>
+<a name="line-418"></a>
+<a name="line-419"></a><span class='comment'>-- |</span>
+<a name="line-420"></a><span class='comment'>-- Validate that \#FIXED attributes match the default value.</span>
+<a name="line-421"></a><span class='comment'>-- Validity constraint: Fixed Attribute Default (3.3.2 \/ p.28 in Spec)</span>
+<a name="line-422"></a><span class='comment'>--</span>
+<a name="line-423"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>
+<a name="line-424"></a><span class='comment'>--</span>
+<a name="line-425"></a><span class='comment'>--    - 2.parameter nd :  element declaration which attributes have to be checked</span>
+<a name="line-426"></a><span class='comment'>--</span>
+<a name="line-427"></a><span class='comment'>--    - returns : a function which takes an element (XTag), checks if all</span>
+<a name="line-428"></a><span class='comment'>--                  fixed attributes match the default value and returns a list of errors</span>
+<a name="line-429"></a>
+<a name="line-430"></a><a name="checkFixedAttributes"></a><span class='definition'>checkFixedAttributes</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-431"></a><span class='definition'>checkFixedAttributes</span> <span class='varid'>attrDecls</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ELEMENT</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-432"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkFixed</span> <span class='varid'>fixedAtts</span>
+<a name="line-433"></a>      <span class='keyword'>where</span>
+<a name="line-434"></a>      <span class='varid'>elemName</span>  <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al</span>
+<a name="line-435"></a>      <span class='varid'>fixedAtts</span> <span class='keyglyph'>=</span> <span class='varid'>isFixedAttrKind</span> <span class='varop'>$$</span> <span class='layout'>(</span><span class='varid'>isAttlistOfElement</span> <span class='varid'>elemName</span> <span class='varop'>$$</span> <span class='varid'>attrDecls</span><span class='layout'>)</span>
+<a name="line-436"></a>
+<a name="line-437"></a>
+<a name="line-438"></a>      <span class='varid'>checkFixed</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-439"></a>      <span class='varid'>checkFixed</span> <span class='layout'>(</span><span class='varid'>x</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al'</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>name</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-440"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>satisfies</span> <span class='layout'>(</span><span class='varid'>hasAttr</span> <span class='varid'>attName</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-441"></a>	    <span class='keyword'>then</span> <span class='keyword'>if</span> <span class='varid'>attValue</span> <span class='varop'>==</span> <span class='varid'>fixedValue</span>
+<a name="line-442"></a>	         <span class='keyword'>then</span> <span class='varid'>checkFixed</span> <span class='varid'>xs</span> <span class='varid'>n</span>
+<a name="line-443"></a>	         <span class='keyword'>else</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Attribute "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>attName</span> <span class='varop'>++</span> <span class='str'>" of element "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='varop'>++</span>
+<a name="line-444"></a>		           <span class='str'>" with value "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>attValue</span> <span class='varop'>++</span> <span class='str'>" must have a value of "</span> <span class='varop'>++</span>
+<a name="line-445"></a>			   <span class='varid'>show</span> <span class='varid'>fixedValue</span> <span class='varop'>++</span> <span class='str'>"."</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-446"></a>	              <span class='varop'>++</span>
+<a name="line-447"></a>		      <span class='varid'>checkFixed</span> <span class='varid'>xs</span> <span class='varid'>n</span>
+<a name="line-448"></a>	    <span class='keyword'>else</span> <span class='varid'>checkFixed</span> <span class='varid'>xs</span> <span class='varid'>n</span>
+<a name="line-449"></a>	    <span class='keyword'>where</span>
+<a name="line-450"></a>	    <span class='varid'>attName</span>    <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_value</span> <span class='varid'>al'</span>
+<a name="line-451"></a>	    <span class='varid'>fixedValue</span> <span class='keyglyph'>=</span> <span class='varid'>normalizeAttributeValue</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>x</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>lookup1</span> <span class='varid'>a_default</span> <span class='varid'>al'</span><span class='layout'>)</span>
+<a name="line-452"></a>	    <span class='varid'>attValue</span>   <span class='keyglyph'>=</span> <span class='varid'>normalizeAttributeValue</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>x</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>valueOf</span> <span class='varid'>attName</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-453"></a>
+<a name="line-454"></a>      <span class='varid'>checkFixed</span> <span class='conid'>[]</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-455"></a>
+<a name="line-456"></a>      <span class='varid'>checkFixed</span> <span class='varid'>nd</span> <span class='varid'>n</span>
+<a name="line-457"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkFixed: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-458"></a>
+<a name="line-459"></a>
+<a name="line-460"></a><span class='definition'>checkFixedAttributes</span> <span class='keyword'>_</span> <span class='varid'>nd</span>
+<a name="line-461"></a>    <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkFixedAttributes: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-462"></a>
+<a name="line-463"></a>
+<a name="line-464"></a><span class='comment'>-- |</span>
+<a name="line-465"></a><span class='comment'>-- Validate that an element has no attributes which are not declared.</span>
+<a name="line-466"></a><span class='comment'>-- Validity constraint: Attribute Value Type (3.1 \/ p.19 in Spec)</span>
+<a name="line-467"></a><span class='comment'>--</span>
+<a name="line-468"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>
+<a name="line-469"></a><span class='comment'>--</span>
+<a name="line-470"></a><span class='comment'>--    - 2.parameter nd :  element declaration which attributes have to be checked</span>
+<a name="line-471"></a><span class='comment'>--</span>
+<a name="line-472"></a><span class='comment'>--    - returns : a function which takes an element (XTag), checks if all</span>
+<a name="line-473"></a><span class='comment'>--                  attributes are declared and returns a list of errors</span>
+<a name="line-474"></a>
+<a name="line-475"></a><a name="checkNotDeclardAttributes"></a><span class='definition'>checkNotDeclardAttributes</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-476"></a><span class='definition'>checkNotDeclardAttributes</span> <span class='varid'>attrDecls</span> <span class='varid'>elemDescr</span>
+<a name="line-477"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkNotDeclared</span>
+<a name="line-478"></a>      <span class='keyword'>where</span>
+<a name="line-479"></a>      <span class='varid'>elemName</span> <span class='keyglyph'>=</span> <span class='varid'>valueOfDTD</span> <span class='varid'>a_name</span> <span class='varid'>elemDescr</span>
+<a name="line-480"></a>      <span class='varid'>decls</span>    <span class='keyglyph'>=</span> <span class='varid'>isAttlistOfElement</span> <span class='varid'>elemName</span> <span class='varop'>$$</span> <span class='varid'>attrDecls</span>
+<a name="line-481"></a>
+<a name="line-482"></a>      <span class='varid'>checkNotDeclared</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-483"></a>      <span class='varid'>checkNotDeclared</span> <span class='varid'>n</span>
+<a name="line-484"></a>	  <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>isXTag</span>
+<a name="line-485"></a>	      <span class='varop'>`guards`</span>
+<a name="line-486"></a>	      <span class='varid'>cat</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>searchForDeclaredAtt</span> <span class='varid'>elemName</span> <span class='varid'>decls</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>getAttrl</span> <span class='varid'>n</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-487"></a>	    <span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-488"></a>
+<a name="line-489"></a>      <span class='varid'>searchForDeclaredAtt</span> <span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-490"></a>      <span class='varid'>searchForDeclaredAtt</span> <span class='varid'>name</span> <span class='layout'>(</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al'</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span> <span class='varid'>att</span>
+<a name="line-491"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='layout'>(</span><span class='varid'>lookup1</span> <span class='varid'>a_value</span> <span class='varid'>al'</span><span class='layout'>)</span> <span class='varop'>==</span> <span class='varid'>nameOf</span> <span class='varid'>att</span>
+<a name="line-492"></a>            <span class='keyword'>then</span> <span class='varid'>none</span>
+<a name="line-493"></a>	    <span class='keyword'>else</span> <span class='varid'>searchForDeclaredAtt</span> <span class='varid'>name</span> <span class='varid'>xs</span> <span class='varid'>att</span>
+<a name="line-494"></a>
+<a name="line-495"></a>      <span class='varid'>searchForDeclaredAtt</span> <span class='varid'>name</span> <span class='conid'>[]</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XAttr</span> <span class='varid'>attrName</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-496"></a>          <span class='keyglyph'>=</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Attribute "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>attrName</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>" of element "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>name</span> <span class='varop'>++</span> <span class='str'>" is not declared in DTD."</span><span class='layout'>)</span>
+<a name="line-497"></a>
+<a name="line-498"></a>      <span class='varid'>searchForDeclaredAtt</span> <span class='keyword'>_</span> <span class='varid'>nd</span> <span class='varid'>a</span>
+<a name="line-499"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"searchForDeclaredAtt: illegeal paramter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>a</span><span class='layout'>)</span>
+<a name="line-500"></a>
+<a name="line-501"></a><span class='comment'>-- |</span>
+<a name="line-502"></a><span class='comment'>-- Validate that the attribute value meets the lexical constraints of its type.</span>
+<a name="line-503"></a><span class='comment'>-- Validity constaint: Attribute Value Type (3.1 \/ p.19 in Spec)</span>
+<a name="line-504"></a><span class='comment'>--</span>
+<a name="line-505"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>
+<a name="line-506"></a><span class='comment'>--</span>
+<a name="line-507"></a><span class='comment'>--    - 2.parameter nd :  element declaration which attributes have to be checked</span>
+<a name="line-508"></a><span class='comment'>--</span>
+<a name="line-509"></a><span class='comment'>--    - returns : a function which takes an element (XTag), checks if all</span>
+<a name="line-510"></a><span class='comment'>--                  attributes meet the lexical constraints and returns a list of errors</span>
+<a name="line-511"></a>
+<a name="line-512"></a><a name="checkValuesOfAttributes"></a><span class='definition'>checkValuesOfAttributes</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-513"></a><span class='definition'>checkValuesOfAttributes</span> <span class='varid'>attrDecls</span> <span class='varid'>dtdPart</span> <span class='varid'>elemDescr</span>
+<a name="line-514"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkValues</span>
+<a name="line-515"></a>      <span class='keyword'>where</span>
+<a name="line-516"></a>      <span class='varid'>elemName</span> <span class='keyglyph'>=</span> <span class='varid'>valueOfDTD</span> <span class='varid'>a_name</span> <span class='varid'>elemDescr</span>
+<a name="line-517"></a>      <span class='varid'>decls</span>    <span class='keyglyph'>=</span> <span class='varid'>isAttlistOfElement</span> <span class='varid'>elemName</span> <span class='varop'>$$</span> <span class='varid'>attrDecls</span>
+<a name="line-518"></a>
+<a name="line-519"></a>      <span class='varid'>checkValues</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-520"></a>      <span class='varid'>checkValues</span> <span class='varid'>n</span>
+<a name="line-521"></a>          <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>isXTag</span>
+<a name="line-522"></a>	      <span class='varop'>`guards`</span>
+<a name="line-523"></a>	      <span class='varid'>cat</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>checkValue</span> <span class='varid'>decls</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>getAttrl</span> <span class='varid'>n</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-524"></a>	    <span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-525"></a>
+<a name="line-526"></a>      <span class='varid'>checkValue</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-527"></a>      <span class='varid'>checkValue</span> <span class='layout'>(</span><span class='varid'>attrDecl</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al'</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span> <span class='varid'>att</span>
+<a name="line-528"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='layout'>(</span><span class='varid'>lookup1</span> <span class='varid'>a_value</span> <span class='varid'>al'</span><span class='layout'>)</span> <span class='varop'>==</span> <span class='varid'>nameOf</span> <span class='varid'>att</span>
+<a name="line-529"></a>            <span class='keyword'>then</span> <span class='varid'>checkAttributeValue</span> <span class='varid'>dtdPart</span> <span class='varid'>attrDecl</span>
+<a name="line-530"></a>	    <span class='keyword'>else</span> <span class='varid'>checkValue</span> <span class='varid'>xs</span> <span class='varid'>att</span>
+<a name="line-531"></a>
+<a name="line-532"></a>      <span class='varid'>checkValue</span> <span class='conid'>[]</span> <span class='keyword'>_</span>
+<a name="line-533"></a>          <span class='keyglyph'>=</span> <span class='varid'>none</span>  <span class='comment'>-- undeclared attribute, reported by separate function</span>
+<a name="line-534"></a>
+<a name="line-535"></a>      <span class='varid'>checkValue</span> <span class='varid'>n</span> <span class='keyword'>_</span>
+<a name="line-536"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"checkValue: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-537"></a>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Validator-IdValidation.html b/doc/hxt-filter/src/Text-XML-HXT-Validator-IdValidation.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Validator-IdValidation.html
@@ -0,0 +1,278 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- This module provides functions for checking special ID/IDREF/IDREFS constraints.</span>
+<a name="line-3"></a>
+<a name="line-4"></a><span class='comment'>-- Checking special ID/IDREF/IDREFS constraints means:</span>
+<a name="line-5"></a><span class='comment'>--</span>
+<a name="line-6"></a><span class='comment'>--  - checking that all ID values are unique.</span>
+<a name="line-7"></a><span class='comment'>--</span>
+<a name="line-8"></a><span class='comment'>--  - checking that all IDREF/IDREFS values match the value of some ID attribute</span>
+<a name="line-9"></a><span class='comment'>--</span>
+<a name="line-10"></a>
+<a name="line-11"></a>
+<a name="line-12"></a><span class='comment'>-- ID-Validation should be started before or after validating the document.</span>
+<a name="line-13"></a>
+<a name="line-14"></a>
+<a name="line-15"></a><span class='comment'>-- First all nodes with ID attributes are collected from the document, then</span>
+<a name="line-16"></a><span class='comment'>-- it is validated that values of ID attributes do not occure more than once.</span>
+<a name="line-17"></a><span class='comment'>-- During a second iteration over the document it is validated that there exists</span>
+<a name="line-18"></a><span class='comment'>-- an ID attribute value for IDREF/IDREFS attribute values.</span>
+<a name="line-19"></a>
+<a name="line-20"></a><span class='comment'>-- Special namings in source code:</span>
+<a name="line-21"></a><span class='comment'>--</span>
+<a name="line-22"></a><span class='comment'>--  - nd - XDTD node</span>
+<a name="line-23"></a><span class='comment'>--</span>
+<a name="line-24"></a><span class='comment'>--  - n  - XTag node</span>
+<a name="line-25"></a><span class='comment'>--</span>
+<a name="line-26"></a><span class='comment'>-- Author : .\\artin Schmidt</span>
+<a name="line-27"></a>
+<a name="line-28"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>IdValidation</span>
+<a name="line-29"></a>    <span class='layout'>(</span> <span class='varid'>validateIds</span>
+<a name="line-30"></a>    <span class='layout'>)</span>
+<a name="line-31"></a><span class='keyword'>where</span>
+<a name="line-32"></a>
+<a name="line-33"></a>
+<a name="line-34"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-35"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>AttributeValueValidation</span>
+<a name="line-36"></a>
+<a name="line-37"></a>
+<a name="line-38"></a>
+<a name="line-39"></a><span class='comment'>-- |</span>
+<a name="line-40"></a><span class='comment'>-- Lookup-table which maps element names to their validation functions. The</span>
+<a name="line-41"></a><span class='comment'>-- validation functions are XmlFilters.</span>
+<a name="line-42"></a>
+<a name="line-43"></a><a name="IdEnvTable"></a><span class='keyword'>type</span> <span class='conid'>IdEnvTable</span>		<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>IdEnv</span><span class='keyglyph'>]</span>
+<a name="line-44"></a><a name="IdEnv"></a><span class='keyword'>type</span> <span class='conid'>IdEnv</span> 		<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='conid'>ElemName</span><span class='layout'>,</span> <span class='conid'>IdFct</span><span class='layout'>)</span>
+<a name="line-45"></a><a name="ElemName"></a><span class='keyword'>type</span> <span class='conid'>ElemName</span>		<span class='keyglyph'>=</span> <span class='conid'>String</span>
+<a name="line-46"></a><a name="IdFct"></a><span class='keyword'>type</span> <span class='conid'>IdFct</span>		<span class='keyglyph'>=</span> <span class='conid'>XmlFilter</span>
+<a name="line-47"></a>
+<a name="line-48"></a>
+<a name="line-49"></a>
+<a name="line-50"></a><span class='comment'>-- |</span>
+<a name="line-51"></a><span class='comment'>-- Perform the validation of the ID/IDREF/IDREFS constraints.</span>
+<a name="line-52"></a><span class='comment'>--</span>
+<a name="line-53"></a><span class='comment'>--    * 1.parameter dtdPart :  the DTD subset (Node @DOCTYPE@) of the XmlTree</span>
+<a name="line-54"></a><span class='comment'>--</span>
+<a name="line-55"></a><span class='comment'>--    - 2.parameter doc :  the document subset of the XmlTree</span>
+<a name="line-56"></a><span class='comment'>--</span>
+<a name="line-57"></a><span class='comment'>--    - returns : a list of errors</span>
+<a name="line-58"></a>
+<a name="line-59"></a><a name="validateIds"></a><span class='definition'>validateIds</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-60"></a><span class='definition'>validateIds</span> <span class='varid'>dtdPart</span> <span class='varid'>doc</span>
+<a name="line-61"></a>    <span class='keyglyph'>=</span> <span class='comment'>{-# SCC "checkForUniqueIds" #-}</span> <span class='varid'>checkForUniqueIds</span> <span class='varid'>idNodeList</span> <span class='varid'>dtdNodes</span>
+<a name="line-62"></a>      <span class='varop'>++</span>
+<a name="line-63"></a>      <span class='comment'>{-# SCC "checkIdReferences" #-}</span> <span class='varid'>checkIdReferences</span> <span class='varid'>idRefEnv</span> <span class='varid'>doc</span>
+<a name="line-64"></a>      <span class='keyword'>where</span>
+<a name="line-65"></a>      <span class='varid'>idEnv</span>      <span class='keyglyph'>=</span> <span class='varid'>buildIdCollectorFcts</span> <span class='varid'>dtdNodes</span>
+<a name="line-66"></a>      <span class='varid'>idRefEnv</span>   <span class='keyglyph'>=</span> <span class='varid'>buildIdrefValidationFcts</span> <span class='varid'>dtdNodes</span> <span class='varid'>idNodeList</span>
+<a name="line-67"></a>      <span class='varid'>idNodeList</span> <span class='keyglyph'>=</span> <span class='varid'>traverseTree</span> <span class='varid'>idEnv</span> <span class='varid'>doc</span>
+<a name="line-68"></a>      <span class='varid'>dtdNodes</span>   <span class='keyglyph'>=</span> <span class='varid'>getChildren</span> <span class='varid'>dtdPart</span>
+<a name="line-69"></a>
+<a name="line-70"></a>
+<a name="line-71"></a><span class='comment'>-- |</span>
+<a name="line-72"></a><span class='comment'>-- Traverse the XmlTree in preorder.</span>
+<a name="line-73"></a><span class='comment'>--</span>
+<a name="line-74"></a><span class='comment'>--    * 1.parameter idEnv :  lookup-table which maps element names to their validation functions</span>
+<a name="line-75"></a><span class='comment'>--</span>
+<a name="line-76"></a><span class='comment'>--    - returns : list of errors</span>
+<a name="line-77"></a>
+<a name="line-78"></a><a name="traverseTree"></a><span class='definition'>traverseTree</span> <span class='keyglyph'>::</span> <span class='conid'>IdEnvTable</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-79"></a><span class='definition'>traverseTree</span> <span class='varid'>idEnv</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>name</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>cs</span><span class='layout'>)</span>
+<a name="line-80"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>idFct</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='varid'>concatMap</span> <span class='layout'>(</span><span class='varid'>traverseTree</span> <span class='varid'>idEnv</span><span class='layout'>)</span> <span class='varid'>cs</span>
+<a name="line-81"></a>      <span class='keyword'>where</span>
+<a name="line-82"></a>      <span class='varid'>idFct</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-83"></a>      <span class='varid'>idFct</span>
+<a name="line-84"></a>          <span class='keyglyph'>=</span> <span class='keyword'>case</span> <span class='layout'>(</span><span class='varid'>lookup</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='varid'>idEnv</span><span class='layout'>)</span> <span class='keyword'>of</span>
+<a name="line-85"></a>	    <span class='conid'>Nothing</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>none</span>
+<a name="line-86"></a>	    <span class='conid'>Just</span> <span class='varid'>f</span>  <span class='keyglyph'>-&gt;</span> <span class='varid'>f</span>
+<a name="line-87"></a>
+<a name="line-88"></a><span class='definition'>traverseTree</span> <span class='keyword'>_</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-89"></a>
+<a name="line-90"></a>
+<a name="line-91"></a>
+<a name="line-92"></a><span class='comment'>-- |</span>
+<a name="line-93"></a><span class='comment'>-- Returns the value of an element's ID attribute. The attribute name has to be</span>
+<a name="line-94"></a><span class='comment'>-- retrieved first from the DTD.</span>
+<a name="line-95"></a><span class='comment'>--</span>
+<a name="line-96"></a><span class='comment'>--    * 1.parameter dtdPart :  list of ID attribute definitions from the DTD</span>
+<a name="line-97"></a><span class='comment'>--</span>
+<a name="line-98"></a><span class='comment'>--    - 2.parameter n :  element which ID attribute value should be returned</span>
+<a name="line-99"></a><span class='comment'>--</span>
+<a name="line-100"></a><span class='comment'>--    - returns : normalized value of the ID attribute</span>
+<a name="line-101"></a>
+<a name="line-102"></a><a name="getIdValue"></a><span class='definition'>getIdValue</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-103"></a><span class='definition'>getIdValue</span> <span class='layout'>(</span><span class='varid'>x</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>name</span> <span class='sel'>_al'</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-104"></a>    <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='varop'>==</span> <span class='varid'>elemName</span>
+<a name="line-105"></a>      <span class='keyword'>then</span> <span class='varid'>attrValue</span>
+<a name="line-106"></a>      <span class='keyword'>else</span> <span class='varid'>getIdValue</span> <span class='varid'>xs</span> <span class='varid'>n</span>
+<a name="line-107"></a>      <span class='keyword'>where</span>
+<a name="line-108"></a>      <span class='varid'>elemName</span>  <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al</span>
+<a name="line-109"></a>      <span class='varid'>attrName</span>  <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_value</span> <span class='varid'>al</span>
+<a name="line-110"></a>      <span class='varid'>attrValue</span> <span class='keyglyph'>=</span> <span class='varid'>normalizeAttributeValue</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>x</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>valueOf</span> <span class='varid'>attrName</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-111"></a>
+<a name="line-112"></a><span class='definition'>getIdValue</span> <span class='keyword'>_</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='str'>""</span>
+<a name="line-113"></a>
+<a name="line-114"></a>
+<a name="line-115"></a>
+<a name="line-116"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-117"></a>
+<a name="line-118"></a>
+<a name="line-119"></a><span class='comment'>-- |</span>
+<a name="line-120"></a><span class='comment'>-- Build collector functions which return XTag nodes with ID attributes from</span>
+<a name="line-121"></a><span class='comment'>-- a document.</span>
+<a name="line-122"></a><span class='comment'>--</span>
+<a name="line-123"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>
+<a name="line-124"></a><span class='comment'>--</span>
+<a name="line-125"></a><span class='comment'>--    - returns : lookup-table which maps element names to their collector function</span>
+<a name="line-126"></a>
+<a name="line-127"></a><a name="buildIdCollectorFcts"></a><span class='definition'>buildIdCollectorFcts</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IdEnvTable</span>
+<a name="line-128"></a><span class='definition'>buildIdCollectorFcts</span> <span class='varid'>dtdPart</span>
+<a name="line-129"></a>    <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>buildIdCollectorFct</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>isIdAttrType</span> <span class='varop'>$$</span> <span class='varid'>dtdPart</span><span class='layout'>)</span>
+<a name="line-130"></a>      <span class='keyword'>where</span>
+<a name="line-131"></a>      <span class='varid'>buildIdCollectorFct</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IdEnv</span>
+<a name="line-132"></a>      <span class='varid'>buildIdCollectorFct</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-133"></a>          <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>elemName</span><span class='layout'>,</span> <span class='varid'>hasAttr</span> <span class='varid'>attrName</span><span class='layout'>)</span>
+<a name="line-134"></a>            <span class='keyword'>where</span>
+<a name="line-135"></a>            <span class='varid'>elemName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al</span>
+<a name="line-136"></a>            <span class='varid'>attrName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_value</span> <span class='varid'>al</span>
+<a name="line-137"></a>
+<a name="line-138"></a>      <span class='varid'>buildIdCollectorFct</span> <span class='varid'>nd</span>
+<a name="line-139"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"buildIdCollectorFct: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-140"></a>
+<a name="line-141"></a>
+<a name="line-142"></a><span class='comment'>-- |</span>
+<a name="line-143"></a><span class='comment'>-- Build validation functions for checking if IDREF\/IDREFS values match a value</span>
+<a name="line-144"></a><span class='comment'>-- of some ID attributes.</span>
+<a name="line-145"></a><span class='comment'>--</span>
+<a name="line-146"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>
+<a name="line-147"></a><span class='comment'>--</span>
+<a name="line-148"></a><span class='comment'>--    - 2.parameter idNodeList :  list of all XTag nodes with ID attributes</span>
+<a name="line-149"></a><span class='comment'>--</span>
+<a name="line-150"></a><span class='comment'>--    - returns : lookup-table which maps element names to their validation function</span>
+<a name="line-151"></a>
+<a name="line-152"></a><a name="buildIdrefValidationFcts"></a><span class='definition'>buildIdrefValidationFcts</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IdEnvTable</span>
+<a name="line-153"></a><span class='definition'>buildIdrefValidationFcts</span> <span class='varid'>dtdPart</span> <span class='varid'>idNodeList</span>
+<a name="line-154"></a>    <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='varid'>buildElemValidationFct</span> <span class='varid'>elements</span>
+<a name="line-155"></a>      <span class='keyword'>where</span>
+<a name="line-156"></a>      <span class='varid'>elements</span>    <span class='keyglyph'>=</span> <span class='varid'>isElement</span> <span class='varop'>$$</span> <span class='varid'>dtdPart</span>
+<a name="line-157"></a>      <span class='varid'>idValueList</span> <span class='keyglyph'>=</span> <span class='varid'>getIdValues</span> <span class='layout'>(</span><span class='varid'>isIdAttrType</span> <span class='varop'>$$</span> <span class='varid'>dtdPart</span><span class='layout'>)</span>
+<a name="line-158"></a>
+<a name="line-159"></a>      <span class='varid'>getIdValues</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span>
+<a name="line-160"></a>      <span class='varid'>getIdValues</span> <span class='varid'>idAttrTypes</span>
+<a name="line-161"></a>          <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>getIdValue</span> <span class='varid'>idAttrTypes</span><span class='layout'>)</span> <span class='varid'>idNodeList</span>
+<a name="line-162"></a>
+<a name="line-163"></a>
+<a name="line-164"></a>      <span class='varid'>buildElemValidationFct</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IdEnv</span>
+<a name="line-165"></a>      <span class='varid'>buildElemValidationFct</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ELEMENT</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-166"></a>          <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>elemName</span><span class='layout'>,</span> <span class='varid'>buildIdrefValidationFct</span> <span class='varid'>idRefAttrTypes</span><span class='layout'>)</span>
+<a name="line-167"></a>	  <span class='keyword'>where</span>
+<a name="line-168"></a>	  <span class='varid'>elemName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span> <span class='varid'>al</span>
+<a name="line-169"></a>	  <span class='varid'>idRefAttrTypes</span> <span class='keyglyph'>=</span> <span class='varid'>isIdRefAttrType</span> <span class='varop'>$$</span> <span class='layout'>(</span><span class='varid'>isAttlistOfElement</span> <span class='varid'>elemName</span><span class='layout'>)</span> <span class='varop'>$$</span> <span class='varid'>dtdPart</span>
+<a name="line-170"></a>
+<a name="line-171"></a>      <span class='varid'>buildElemValidationFct</span> <span class='varid'>nd</span>
+<a name="line-172"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"buildIdrefValidationFct: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-173"></a>
+<a name="line-174"></a>
+<a name="line-175"></a>      <span class='varid'>buildIdrefValidationFct</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlFilter</span>
+<a name="line-176"></a>      <span class='varid'>buildIdrefValidationFct</span> <span class='layout'>(</span><span class='varid'>nd</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XDTD</span> <span class='conid'>ATTLIST</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span>
+<a name="line-177"></a>          <span class='keyglyph'>=</span> <span class='varid'>checkIdref</span> <span class='varop'>+++</span> <span class='varid'>buildIdrefValidationFct</span> <span class='varid'>xs</span>
+<a name="line-178"></a>            <span class='keyword'>where</span>
+<a name="line-179"></a>            <span class='varid'>attrName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_value</span> <span class='varid'>al</span>
+<a name="line-180"></a>	    <span class='varid'>attrType</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_type</span> <span class='varid'>al</span>
+<a name="line-181"></a>
+<a name="line-182"></a>            <span class='varid'>checkIdref</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-183"></a>            <span class='varid'>checkIdref</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>name</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>
+<a name="line-184"></a>                <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>satisfies</span> <span class='layout'>(</span><span class='varid'>hasAttr</span> <span class='varid'>attrName</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-185"></a>	          <span class='keyword'>then</span> <span class='keyword'>if</span> <span class='varid'>attrType</span> <span class='varop'>==</span> <span class='varid'>k_idref</span>
+<a name="line-186"></a>		       <span class='keyword'>then</span> <span class='varid'>checkValueDeclared</span> <span class='varid'>n</span> <span class='varid'>attrValue</span>
+<a name="line-187"></a>		       <span class='keyword'>else</span> <span class='keyword'>let</span> <span class='varid'>valueList</span> <span class='keyglyph'>=</span> <span class='varid'>words</span> <span class='varid'>attrValue</span>
+<a name="line-188"></a>		            <span class='keyword'>in</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>valueList</span>
+<a name="line-189"></a>		               <span class='keyword'>then</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Attribute "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>attrName</span> <span class='varop'>++</span>
+<a name="line-190"></a>					 <span class='str'>" of Element "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='varop'>++</span>
+<a name="line-191"></a>					 <span class='str'>" must have at least one name."</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-192"></a>		               <span class='keyword'>else</span> <span class='varid'>concatMap</span> <span class='layout'>(</span><span class='varid'>checkValueDeclared</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>words</span> <span class='varid'>attrValue</span><span class='layout'>)</span>
+<a name="line-193"></a>	          <span class='keyword'>else</span> <span class='conid'>[]</span>
+<a name="line-194"></a>		  <span class='keyword'>where</span>
+<a name="line-195"></a>		  <span class='varid'>attrValue</span> <span class='keyglyph'>=</span> <span class='varid'>normalizeAttributeValue</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>nd</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>valueOf</span> <span class='varid'>attrName</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-196"></a>
+<a name="line-197"></a>	    <span class='varid'>checkIdref</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-198"></a>
+<a name="line-199"></a>
+<a name="line-200"></a>	    <span class='varid'>checkValueDeclared</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-201"></a>	    <span class='varid'>checkValueDeclared</span> <span class='varid'>n</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='keyword'>_</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>attrValue</span>
+<a name="line-202"></a>	        <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>attrValue</span> <span class='varop'>`elem`</span> <span class='varid'>idValueList</span>
+<a name="line-203"></a>		  <span class='keyword'>then</span> <span class='conid'>[]</span>
+<a name="line-204"></a>		  <span class='keyword'>else</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"An Element with identifier "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>attrValue</span> <span class='varop'>++</span>
+<a name="line-205"></a>		            <span class='str'>" must appear in the document."</span><span class='layout'>)</span> <span class='varid'>n</span>
+<a name="line-206"></a>
+<a name="line-207"></a>            <span class='varid'>checkValueDeclared</span> <span class='keyword'>_</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-208"></a>
+<a name="line-209"></a>      <span class='varid'>buildIdrefValidationFct</span> <span class='conid'>[]</span>
+<a name="line-210"></a>          <span class='keyglyph'>=</span> <span class='varid'>none</span>
+<a name="line-211"></a>
+<a name="line-212"></a>      <span class='varid'>buildIdrefValidationFct</span> <span class='varid'>nd</span>
+<a name="line-213"></a>          <span class='keyglyph'>=</span> <span class='varid'>error</span> <span class='layout'>(</span><span class='str'>"buildIdCollectorFct: illegeal parameter:\n"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>nd</span><span class='layout'>)</span>
+<a name="line-214"></a>
+<a name="line-215"></a>
+<a name="line-216"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-217"></a>
+<a name="line-218"></a>
+<a name="line-219"></a><span class='comment'>-- |</span>
+<a name="line-220"></a><span class='comment'>-- Validate that all ID values are unique within a document.</span>
+<a name="line-221"></a><span class='comment'>-- Validity constraint: ID (3.3.1 \/p. 25 in Spec)</span>
+<a name="line-222"></a><span class='comment'>--</span>
+<a name="line-223"></a><span class='comment'>--    * 1.parameter idNodeList :  list of all XTag nodes with ID attributes</span>
+<a name="line-224"></a><span class='comment'>--</span>
+<a name="line-225"></a><span class='comment'>--    - 2.parameter dtdPart :  the children of the @DOCTYPE@ node</span>
+<a name="line-226"></a><span class='comment'>--</span>
+<a name="line-227"></a><span class='comment'>--    - returns : a list of errors</span>
+<a name="line-228"></a>
+<a name="line-229"></a><a name="checkForUniqueIds"></a><span class='definition'>checkForUniqueIds</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-230"></a><span class='definition'>checkForUniqueIds</span> <span class='varid'>idNodeList</span> <span class='varid'>dtdPart</span>
+<a name="line-231"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkForUniqueId</span> <span class='varid'>idNodeList</span> <span class='conid'>[]</span>
+<a name="line-232"></a>      <span class='keyword'>where</span>
+<a name="line-233"></a>      <span class='varid'>idAttrTypes</span> <span class='keyglyph'>=</span> <span class='varid'>isIdAttrType</span> <span class='varop'>$$</span> <span class='varid'>dtdPart</span>
+<a name="line-234"></a>
+<a name="line-235"></a>      <span class='varid'>checkForUniqueId</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-236"></a>      <span class='varid'>checkForUniqueId</span> <span class='layout'>(</span><span class='varid'>x</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>name</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span><span class='conop'>:</span><span class='varid'>xs</span><span class='layout'>)</span> <span class='varid'>used</span>
+<a name="line-237"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>attrValue</span> <span class='varop'>`elem`</span> <span class='varid'>used</span>
+<a name="line-238"></a>	    <span class='keyword'>then</span> <span class='varid'>err</span> <span class='layout'>(</span><span class='str'>"Attribute value "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>attrValue</span> <span class='varop'>++</span> <span class='str'>" of type ID for element "</span> <span class='varop'>++</span>
+<a name="line-239"></a>	              <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='varop'>++</span> <span class='str'>" must be unique within the document."</span><span class='layout'>)</span> <span class='varid'>x</span>
+<a name="line-240"></a>		 <span class='varop'>++</span>
+<a name="line-241"></a>		 <span class='varid'>checkForUniqueId</span> <span class='varid'>xs</span> <span class='varid'>used</span>
+<a name="line-242"></a>
+<a name="line-243"></a>	    <span class='keyword'>else</span> <span class='varid'>checkForUniqueId</span> <span class='varid'>xs</span> <span class='layout'>(</span><span class='varid'>attrValue</span> <span class='conop'>:</span> <span class='varid'>used</span><span class='layout'>)</span>
+<a name="line-244"></a>	    <span class='keyword'>where</span>
+<a name="line-245"></a>	    <span class='varid'>attrValue</span> <span class='keyglyph'>=</span> <span class='varid'>getIdValue</span> <span class='layout'>(</span><span class='varid'>isAttlistOfElement</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='varop'>$$</span> <span class='varid'>idAttrTypes</span><span class='layout'>)</span> <span class='varid'>x</span>
+<a name="line-246"></a>
+<a name="line-247"></a>      <span class='varid'>checkForUniqueId</span> <span class='keyword'>_</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>
+<a name="line-248"></a>
+<a name="line-249"></a>
+<a name="line-250"></a>
+<a name="line-251"></a><span class='comment'>-- |</span>
+<a name="line-252"></a><span class='comment'>-- Validate that all IDREF\/IDREFS values match the value of some ID attribute.</span>
+<a name="line-253"></a><span class='comment'>-- Validity constraint: IDREF (3.3.1 \/ p.26 in Spec)</span>
+<a name="line-254"></a><span class='comment'>--</span>
+<a name="line-255"></a><span class='comment'>--    * 1.parameter idRefEnv :  lookup-table which maps element names to their validation function</span>
+<a name="line-256"></a><span class='comment'>--</span>
+<a name="line-257"></a><span class='comment'>--    - 2.parameter doc :  the document to validate</span>
+<a name="line-258"></a><span class='comment'>--</span>
+<a name="line-259"></a><span class='comment'>--    - returns : a list of errors</span>
+<a name="line-260"></a>
+<a name="line-261"></a><a name="checkIdReferences"></a><span class='definition'>checkIdReferences</span> <span class='keyglyph'>::</span> <span class='conid'>IdEnvTable</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>
+<a name="line-262"></a><span class='definition'>checkIdReferences</span> <span class='varid'>idRefEnv</span> <span class='varid'>doc</span>
+<a name="line-263"></a>    <span class='keyglyph'>=</span> <span class='varid'>traverseTree</span> <span class='varid'>idRefEnv</span> <span class='varid'>doc</span>
+<a name="line-264"></a>
+<a name="line-265"></a>
+<a name="line-266"></a>
+<a name="line-267"></a>
+<a name="line-268"></a>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Validator-RE.html b/doc/hxt-filter/src/Text-XML-HXT-Validator-RE.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Validator-RE.html
@@ -0,0 +1,340 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- A module for regular expression matching based on derivatives of regular expressions.</span>
+<a name="line-3"></a><span class='comment'>--</span>
+<a name="line-4"></a><span class='comment'>-- The code was taken from Joe English (&lt;<a href="http://www.flightlab.com/~joe/sgml/validate.html">http://www.flightlab.com/~joe/sgml/validate.html</a>&gt;).</span>
+<a name="line-5"></a><span class='comment'>-- Tested and extended by Martin Schmidt.</span>
+<a name="line-6"></a><span class='comment'>--</span>
+<a name="line-7"></a><span class='comment'>-- Further references for the algorithm:</span>
+<a name="line-8"></a><span class='comment'>--</span>
+<a name="line-9"></a><span class='comment'>-- Janusz A. Brzozowski.</span>
+<a name="line-10"></a><span class='comment'>--</span>
+<a name="line-11"></a><span class='comment'>-- 	Derivatives of Regular Expressions. Journal of the ACM, Volume 11, Issue 4, 1964. </span>
+<a name="line-12"></a><span class='comment'>--</span>
+<a name="line-13"></a><span class='comment'>-- Mark Hopkins.</span>
+<a name="line-14"></a><span class='comment'>--</span>
+<a name="line-15"></a><span class='comment'>--	Regular Expression Package. Posted to comp.compilers, 1994.</span>
+<a name="line-16"></a><span class='comment'>--      Available per FTP at &lt;ftp://iecc.com/pub/file/regex.tar.gz&gt;.</span>
+<a name="line-17"></a>
+<a name="line-18"></a>
+<a name="line-19"></a>
+<a name="line-20"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>RE</span>
+<a name="line-21"></a>    <span class='layout'>(</span> <span class='conid'>RE</span><span class='layout'>(</span><span class='keyglyph'>..</span><span class='layout'>)</span>
+<a name="line-22"></a>
+<a name="line-23"></a>    <span class='layout'>,</span> <span class='varid'>re_unit</span>
+<a name="line-24"></a>    <span class='layout'>,</span> <span class='varid'>re_zero</span>
+<a name="line-25"></a>    <span class='layout'>,</span> <span class='varid'>re_sym</span>
+<a name="line-26"></a>    <span class='layout'>,</span> <span class='varid'>re_rep</span>
+<a name="line-27"></a>    <span class='layout'>,</span> <span class='varid'>re_plus</span>
+<a name="line-28"></a>    <span class='layout'>,</span> <span class='varid'>re_opt</span>
+<a name="line-29"></a>    <span class='layout'>,</span> <span class='varid'>re_seq</span>
+<a name="line-30"></a>    <span class='layout'>,</span> <span class='varid'>re_alt</span>
+<a name="line-31"></a>    <span class='layout'>,</span> <span class='varid'>re_dot</span>
+<a name="line-32"></a>
+<a name="line-33"></a>    <span class='layout'>,</span> <span class='varid'>checkRE</span>
+<a name="line-34"></a>    <span class='layout'>,</span> <span class='varid'>matches</span>
+<a name="line-35"></a>    <span class='layout'>,</span> <span class='varid'>nullable</span>
+<a name="line-36"></a>    <span class='layout'>,</span> <span class='varid'>printRE</span>
+<a name="line-37"></a>  <span class='layout'>)</span>
+<a name="line-38"></a><span class='keyword'>where</span>
+<a name="line-39"></a>
+<a name="line-40"></a><span class='comment'>-- |</span>
+<a name="line-41"></a><span class='comment'>-- Data type for regular expressions.</span>
+<a name="line-42"></a>
+<a name="line-43"></a><a name="RE"></a><span class='keyword'>data</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>=</span>
+<a name="line-44"></a>	<span class='conid'>RE_ZERO</span>	<span class='conid'>String</span>		<span class='comment'>--' L(0)   = {} (empty set)</span>
+<a name="line-45"></a>	<span class='keyglyph'>|</span> <span class='conid'>RE_UNIT</span>		<span class='comment'>--' L(1)   = { [] } (empty sequence)</span>
+<a name="line-46"></a>	<span class='keyglyph'>|</span> <span class='conid'>RE_SYM</span> <span class='varid'>a</span>		<span class='comment'>--' L(x)   = { [x] }</span>
+<a name="line-47"></a>	<span class='keyglyph'>|</span> <span class='conid'>RE_DOT</span>                <span class='comment'>--' accept any single symbol</span>
+<a name="line-48"></a>	<span class='keyglyph'>|</span> <span class='conid'>RE_REP</span> <span class='layout'>(</span><span class='conid'>RE</span> <span class='varid'>a</span><span class='layout'>)</span>		<span class='comment'>--' L(e*)  = { [] } `union` L(e+)</span>
+<a name="line-49"></a>	<span class='keyglyph'>|</span> <span class='conid'>RE_PLUS</span> <span class='layout'>(</span><span class='conid'>RE</span> <span class='varid'>a</span><span class='layout'>)</span>	<span class='comment'>--' L(e+)  = { x ++ y | x &lt;- L(e), y &lt;- L(e*) }</span>
+<a name="line-50"></a>	<span class='keyglyph'>|</span> <span class='conid'>RE_OPT</span> <span class='layout'>(</span><span class='conid'>RE</span> <span class='varid'>a</span><span class='layout'>)</span>		<span class='comment'>--' L(e?)  = L(e) `union` { [] }</span>
+<a name="line-51"></a>	<span class='keyglyph'>|</span> <span class='conid'>RE_SEQ</span> <span class='layout'>(</span><span class='conid'>RE</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='layout'>(</span><span class='conid'>RE</span> <span class='varid'>a</span><span class='layout'>)</span>	<span class='comment'>--' L(e,f) = { x ++ y | x &lt;- L(e), y &lt;- L(f) }</span>
+<a name="line-52"></a>	<span class='keyglyph'>|</span> <span class='conid'>RE_ALT</span> <span class='layout'>(</span><span class='conid'>RE</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='layout'>(</span><span class='conid'>RE</span> <span class='varid'>a</span><span class='layout'>)</span>	<span class='comment'>--' L(e|f) = L(e) `union` L(f)</span>
+<a name="line-53"></a>	<span class='keyword'>deriving</span> <span class='layout'>(</span><span class='conid'>Show</span><span class='layout'>,</span> <span class='conid'>Eq</span><span class='layout'>)</span>
+<a name="line-54"></a>
+<a name="line-55"></a>
+<a name="line-56"></a>
+<a name="line-57"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-58"></a><span class='comment'>-- Constructor functions to simplify regular expressions when constructing them.</span>
+<a name="line-59"></a>
+<a name="line-60"></a><span class='comment'>-- |</span>
+<a name="line-61"></a><span class='comment'>-- Constructs a regular expression for an empty set.</span>
+<a name="line-62"></a><span class='comment'>--</span>
+<a name="line-63"></a><span class='comment'>--    * 1.parameter errMsg :  error message</span>
+<a name="line-64"></a><span class='comment'>--</span>
+<a name="line-65"></a><span class='comment'>--    - returns : regular expression for an empty set</span>
+<a name="line-66"></a>
+<a name="line-67"></a><a name="re_zero"></a><span class='definition'>re_zero</span>			<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span>
+<a name="line-68"></a><span class='definition'>re_zero</span> <span class='varid'>m</span>		<span class='keyglyph'>=</span> <span class='conid'>RE_ZERO</span> <span class='varid'>m</span>
+<a name="line-69"></a>
+<a name="line-70"></a>
+<a name="line-71"></a><span class='comment'>-- |</span>
+<a name="line-72"></a><span class='comment'>-- Constructs a regular expression for an empty sequence.</span>
+<a name="line-73"></a><span class='comment'>--</span>
+<a name="line-74"></a><span class='comment'>--    - returns : regular expression for an empty sequence</span>
+<a name="line-75"></a>
+<a name="line-76"></a><a name="re_unit"></a><span class='definition'>re_unit</span>			<span class='keyglyph'>::</span> <span class='conid'>RE</span> <span class='varid'>a</span>
+<a name="line-77"></a><span class='definition'>re_unit</span>			<span class='keyglyph'>=</span> <span class='conid'>RE_UNIT</span>
+<a name="line-78"></a>
+<a name="line-79"></a>
+<a name="line-80"></a><span class='comment'>-- |</span>
+<a name="line-81"></a><span class='comment'>-- Constructs a regular expression for accepting a symbol</span>
+<a name="line-82"></a><span class='comment'>--</span>
+<a name="line-83"></a><span class='comment'>--    * 1.parameter sym :  the symbol to be accepted</span>
+<a name="line-84"></a><span class='comment'>--</span>
+<a name="line-85"></a><span class='comment'>--    - returns : regular expression for accepting a symbol</span>
+<a name="line-86"></a>
+<a name="line-87"></a><a name="re_sym"></a><span class='definition'>re_sym</span>			<span class='keyglyph'>::</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span>
+<a name="line-88"></a><span class='definition'>re_sym</span> <span class='varid'>x</span>		<span class='keyglyph'>=</span> <span class='conid'>RE_SYM</span> <span class='varid'>x</span>
+<a name="line-89"></a>
+<a name="line-90"></a>
+<a name="line-91"></a><span class='comment'>-- |</span>
+<a name="line-92"></a><span class='comment'>-- Constructs a regular expression for accepting any singel symbol</span>
+<a name="line-93"></a><span class='comment'>--</span>
+<a name="line-94"></a><span class='comment'>--    - returns : regular expression for accepting any singel symbol</span>
+<a name="line-95"></a>
+<a name="line-96"></a><a name="re_dot"></a><span class='definition'>re_dot</span>			<span class='keyglyph'>::</span> <span class='conid'>RE</span> <span class='varid'>a</span>
+<a name="line-97"></a><span class='definition'>re_dot</span>			<span class='keyglyph'>=</span> <span class='conid'>RE_DOT</span>
+<a name="line-98"></a>
+<a name="line-99"></a>
+<a name="line-100"></a><span class='comment'>-- |</span>
+<a name="line-101"></a><span class='comment'>-- Constructs an optional repetition (*) of a regular expression</span>
+<a name="line-102"></a><span class='comment'>--</span>
+<a name="line-103"></a><span class='comment'>--    * 1.parameter re_a :  regular expression to be repeted</span>
+<a name="line-104"></a><span class='comment'>--</span>
+<a name="line-105"></a><span class='comment'>--    - returns : new regular expression</span>
+<a name="line-106"></a>
+<a name="line-107"></a><a name="re_rep"></a><span class='definition'>re_rep</span>			<span class='keyglyph'>::</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span>
+<a name="line-108"></a><span class='definition'>re_rep</span> <span class='conid'>RE_UNIT</span>		<span class='keyglyph'>=</span> <span class='conid'>RE_UNIT</span>
+<a name="line-109"></a><span class='definition'>re_rep</span> <span class='layout'>(</span><span class='conid'>RE_ZERO</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>RE_UNIT</span>
+<a name="line-110"></a><span class='definition'>re_rep</span> <span class='varid'>e</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>RE_REP</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>RE_REP</span> <span class='layout'>(</span><span class='varid'>rem_rep</span> <span class='varid'>e</span><span class='layout'>)</span>		<span class='comment'>-- remove nested reps</span>
+<a name="line-111"></a><span class='definition'>re_rep</span> <span class='varid'>e</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>RE_ALT</span> <span class='keyword'>_</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>RE_REP</span> <span class='layout'>(</span><span class='varid'>rem_rep</span> <span class='varid'>e</span><span class='layout'>)</span>		<span class='comment'>-- remove nested reps in alternatives</span>
+<a name="line-112"></a><span class='definition'>re_rep</span> <span class='varid'>e</span>		<span class='keyglyph'>=</span> <span class='conid'>RE_REP</span> <span class='varid'>e</span>
+<a name="line-113"></a>
+<a name="line-114"></a><span class='comment'>-- |</span>
+<a name="line-115"></a><span class='comment'>-- remove redundant nested *'s in RE</span>
+<a name="line-116"></a><span class='comment'>-- theoretically this is unneccessary,</span>
+<a name="line-117"></a><span class='comment'>-- but without this simplification the runtime can increase exponentally</span>
+<a name="line-118"></a><span class='comment'>-- when computing deltas, e.g. for a** or (a|b*)* which is the same as (a|b)*</span>
+<a name="line-119"></a>
+<a name="line-120"></a><a name="rem_rep"></a><span class='definition'>rem_rep</span>			<span class='keyglyph'>::</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span>
+<a name="line-121"></a><span class='definition'>rem_rep</span> <span class='layout'>(</span><span class='conid'>RE_ALT</span> <span class='varid'>e1</span> <span class='varid'>e2</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>RE_ALT</span> <span class='layout'>(</span><span class='varid'>rem_rep</span> <span class='varid'>e1</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>rem_rep</span> <span class='varid'>e2</span><span class='layout'>)</span>
+<a name="line-122"></a><span class='definition'>rem_rep</span> <span class='layout'>(</span><span class='conid'>RE_REP</span> <span class='varid'>e1</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>rem_rep</span> <span class='varid'>e1</span>
+<a name="line-123"></a><span class='definition'>rem_rep</span> <span class='varid'>e1</span>		<span class='keyglyph'>=</span> <span class='varid'>e1</span>
+<a name="line-124"></a>
+<a name="line-125"></a>
+<a name="line-126"></a><span class='comment'>-- |</span>
+<a name="line-127"></a><span class='comment'>-- Constructs a repetition (+) of a regular expression</span>
+<a name="line-128"></a><span class='comment'>--</span>
+<a name="line-129"></a><span class='comment'>--    * 1.parameter re_a :  regular expression to be repeted</span>
+<a name="line-130"></a><span class='comment'>--</span>
+<a name="line-131"></a><span class='comment'>--    - returns : new regular expression</span>
+<a name="line-132"></a>
+<a name="line-133"></a><a name="re_plus"></a><span class='definition'>re_plus</span>			<span class='keyglyph'>::</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span>
+<a name="line-134"></a><span class='definition'>re_plus</span> <span class='conid'>RE_UNIT</span>		<span class='keyglyph'>=</span> <span class='conid'>RE_UNIT</span>
+<a name="line-135"></a><span class='definition'>re_plus</span> <span class='layout'>(</span><span class='conid'>RE_ZERO</span> <span class='varid'>m</span><span class='layout'>)</span> 	<span class='keyglyph'>=</span> <span class='conid'>RE_ZERO</span> <span class='varid'>m</span>
+<a name="line-136"></a><span class='definition'>re_plus</span> <span class='varid'>e</span>		<span class='keyglyph'>=</span> <span class='conid'>RE_PLUS</span> <span class='varid'>e</span>
+<a name="line-137"></a>
+<a name="line-138"></a>
+<a name="line-139"></a><span class='comment'>-- |</span>
+<a name="line-140"></a><span class='comment'>-- Constructs an option (?) of a regular expression</span>
+<a name="line-141"></a><span class='comment'>--</span>
+<a name="line-142"></a><span class='comment'>--    * 1.parameter re_a :  regular expression to be optional</span>
+<a name="line-143"></a><span class='comment'>--</span>
+<a name="line-144"></a><span class='comment'>--    - returns : new regular expression</span>
+<a name="line-145"></a>
+<a name="line-146"></a><a name="re_opt"></a><span class='definition'>re_opt</span>			<span class='keyglyph'>::</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span>
+<a name="line-147"></a><span class='definition'>re_opt</span> <span class='conid'>RE_UNIT</span>		<span class='keyglyph'>=</span> <span class='conid'>RE_UNIT</span>
+<a name="line-148"></a><span class='definition'>re_opt</span> <span class='layout'>(</span><span class='conid'>RE_ZERO</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>RE_UNIT</span>
+<a name="line-149"></a><span class='definition'>re_opt</span> <span class='varid'>e</span>		<span class='keyglyph'>=</span> <span class='conid'>RE_OPT</span> <span class='varid'>e</span>
+<a name="line-150"></a>
+<a name="line-151"></a>
+<a name="line-152"></a><span class='comment'>-- |</span>
+<a name="line-153"></a><span class='comment'>-- Constructs a sequence (,) of two regular expressions</span>
+<a name="line-154"></a><span class='comment'>--</span>
+<a name="line-155"></a><span class='comment'>--    * 1.parameter re_a :  first regular expression in sequence</span>
+<a name="line-156"></a><span class='comment'>--</span>
+<a name="line-157"></a><span class='comment'>--    - 2.parameter re_b :  second regular expression in sequence</span>
+<a name="line-158"></a><span class='comment'>--</span>
+<a name="line-159"></a><span class='comment'>--    - returns : new regular expression</span>
+<a name="line-160"></a>
+<a name="line-161"></a><a name="re_seq"></a><span class='definition'>re_seq</span>			<span class='keyglyph'>::</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span>
+<a name="line-162"></a><span class='definition'>re_seq</span> <span class='layout'>(</span><span class='conid'>RE_ZERO</span> <span class='varid'>m</span><span class='layout'>)</span> <span class='keyword'>_</span>	<span class='keyglyph'>=</span> <span class='conid'>RE_ZERO</span> <span class='varid'>m</span>
+<a name="line-163"></a><span class='definition'>re_seq</span> <span class='conid'>RE_UNIT</span> <span class='varid'>f</span>	<span class='keyglyph'>=</span> <span class='varid'>f</span>
+<a name="line-164"></a><span class='definition'>re_seq</span> <span class='keyword'>_</span> <span class='layout'>(</span><span class='conid'>RE_ZERO</span> <span class='varid'>m</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>RE_ZERO</span> <span class='varid'>m</span>
+<a name="line-165"></a><span class='definition'>re_seq</span> <span class='varid'>e</span> <span class='conid'>RE_UNIT</span>	<span class='keyglyph'>=</span> <span class='varid'>e</span>
+<a name="line-166"></a><span class='definition'>re_seq</span> <span class='varid'>e</span> <span class='varid'>f</span>		<span class='keyglyph'>=</span> <span class='conid'>RE_SEQ</span> <span class='varid'>e</span> <span class='varid'>f</span>
+<a name="line-167"></a>
+<a name="line-168"></a>
+<a name="line-169"></a><span class='comment'>-- |</span>
+<a name="line-170"></a><span class='comment'>-- Constructs an alternative (|) of two regular expressions</span>
+<a name="line-171"></a><span class='comment'>--</span>
+<a name="line-172"></a><span class='comment'>--    * 1.parameter re_a :  first regular expression of alternative</span>
+<a name="line-173"></a><span class='comment'>--</span>
+<a name="line-174"></a><span class='comment'>--    - 2.parameter re_b :  second regular expression of alternative</span>
+<a name="line-175"></a><span class='comment'>--</span>
+<a name="line-176"></a><span class='comment'>--    - returns : new regular expression</span>
+<a name="line-177"></a>
+<a name="line-178"></a><a name="re_alt"></a><span class='definition'>re_alt</span>			<span class='keyglyph'>::</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span>
+<a name="line-179"></a><span class='definition'>re_alt</span> <span class='layout'>(</span><span class='conid'>RE_ZERO</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>f</span>	<span class='keyglyph'>=</span> <span class='varid'>f</span>
+<a name="line-180"></a><span class='definition'>re_alt</span> <span class='varid'>e</span> <span class='layout'>(</span><span class='conid'>RE_ZERO</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>e</span>
+<a name="line-181"></a><span class='definition'>re_alt</span> <span class='varid'>e</span> <span class='varid'>f</span>		<span class='keyglyph'>=</span> <span class='conid'>RE_ALT</span> <span class='varid'>e</span> <span class='varid'>f</span>
+<a name="line-182"></a>
+<a name="line-183"></a>
+<a name="line-184"></a>
+<a name="line-185"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-186"></a>
+<a name="line-187"></a>
+<a name="line-188"></a><span class='comment'>-- |</span>
+<a name="line-189"></a><span class='comment'>-- Checks if a regular expression matches the empty sequence.</span>
+<a name="line-190"></a><span class='comment'>--</span>
+<a name="line-191"></a><span class='comment'>-- nullable e == [] `in` L(e)</span>
+<a name="line-192"></a><span class='comment'>--</span>
+<a name="line-193"></a><span class='comment'>-- This check indicates if a regular expression fits to a sentence or not.</span>
+<a name="line-194"></a><span class='comment'>--</span>
+<a name="line-195"></a><span class='comment'>--    * 1.parameter re :  regular expression to be checked</span>
+<a name="line-196"></a><span class='comment'>--</span>
+<a name="line-197"></a><span class='comment'>--    - returns : true if regular expression matches the empty sequence,</span>
+<a name="line-198"></a><span class='comment'>--                otherwise false</span>
+<a name="line-199"></a>
+<a name="line-200"></a><a name="nullable"></a><span class='definition'>nullable</span>		<span class='keyglyph'>::</span>  <span class='layout'>(</span><span class='conid'>Show</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-201"></a><span class='definition'>nullable</span> <span class='layout'>(</span><span class='conid'>RE_ZERO</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-202"></a><span class='definition'>nullable</span> <span class='conid'>RE_UNIT</span>	<span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-203"></a><span class='definition'>nullable</span> <span class='layout'>(</span><span class='conid'>RE_SYM</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-204"></a><span class='definition'>nullable</span> <span class='layout'>(</span><span class='conid'>RE_REP</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-205"></a><span class='definition'>nullable</span> <span class='layout'>(</span><span class='conid'>RE_PLUS</span> <span class='varid'>e</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>nullable</span> <span class='varid'>e</span>
+<a name="line-206"></a><span class='definition'>nullable</span> <span class='layout'>(</span><span class='conid'>RE_OPT</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-207"></a><span class='definition'>nullable</span> <span class='layout'>(</span><span class='conid'>RE_SEQ</span> <span class='varid'>e</span> <span class='varid'>f</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>nullable</span> <span class='varid'>e</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>nullable</span> <span class='varid'>f</span>
+<a name="line-208"></a><span class='definition'>nullable</span> <span class='layout'>(</span><span class='conid'>RE_ALT</span> <span class='varid'>e</span> <span class='varid'>f</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>nullable</span> <span class='varid'>e</span> <span class='varop'>||</span> <span class='varid'>nullable</span> <span class='varid'>f</span>
+<a name="line-209"></a><span class='definition'>nullable</span> <span class='conid'>RE_DOT</span>		<span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-210"></a>
+<a name="line-211"></a>
+<a name="line-212"></a><span class='comment'>-- |</span>
+<a name="line-213"></a><span class='comment'>-- Derives a regular expression with respect to one symbol.</span>
+<a name="line-214"></a><span class='comment'>--</span>
+<a name="line-215"></a><span class='comment'>-- L(delta e x) = x \ L(e)</span>
+<a name="line-216"></a><span class='comment'>--</span>
+<a name="line-217"></a><span class='comment'>--    * 1.parameter re :  regular expression to be derived</span>
+<a name="line-218"></a><span class='comment'>--</span>
+<a name="line-219"></a><span class='comment'>--    - 2.parameter sym :  the symbol on which the regular expression is applied</span>
+<a name="line-220"></a><span class='comment'>--</span>
+<a name="line-221"></a><span class='comment'>--    - returns : the derived regular expression</span>
+<a name="line-222"></a>
+<a name="line-223"></a><a name="delta"></a><span class='definition'>delta</span> <span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Eq</span> <span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>Show</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span>
+<a name="line-224"></a><span class='definition'>delta</span> <span class='varid'>re</span> <span class='varid'>x</span> <span class='keyglyph'>=</span> <span class='keyword'>case</span> <span class='varid'>re</span> <span class='keyword'>of</span>
+<a name="line-225"></a>	<span class='conid'>RE_ZERO</span>	<span class='keyword'>_</span>		<span class='keyglyph'>-&gt;</span> <span class='varid'>re</span>					<span class='comment'>-- re_zero m</span>
+<a name="line-226"></a>	<span class='conid'>RE_UNIT</span>			<span class='keyglyph'>-&gt;</span> <span class='varid'>re_zero</span> <span class='layout'>(</span><span class='str'>"Symbol "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>x</span> <span class='varop'>++</span> <span class='str'>" unexpected."</span><span class='layout'>)</span>
+<a name="line-227"></a>	<span class='conid'>RE_SYM</span> <span class='varid'>sym</span>
+<a name="line-228"></a>		<span class='keyglyph'>|</span> <span class='varid'>x</span> <span class='varop'>==</span> <span class='varid'>sym</span>	<span class='keyglyph'>-&gt;</span> <span class='varid'>re_unit</span>
+<a name="line-229"></a>		<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>-&gt;</span> <span class='varid'>re_zero</span> <span class='layout'>(</span><span class='str'>"Symbol "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>sym</span> <span class='varop'>++</span> <span class='str'>" expected, but symbol "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>x</span> <span class='varop'>++</span> <span class='str'>" found."</span><span class='layout'>)</span>
+<a name="line-230"></a>	<span class='conid'>RE_REP</span>  <span class='varid'>e</span>		<span class='keyglyph'>-&gt;</span> <span class='varid'>re_seq</span> <span class='layout'>(</span><span class='varid'>delta</span> <span class='varid'>e</span> <span class='varid'>x</span><span class='layout'>)</span> <span class='varid'>re</span>		<span class='comment'>-- (re_rep e)</span>
+<a name="line-231"></a>	<span class='conid'>RE_PLUS</span> <span class='varid'>e</span>		<span class='keyglyph'>-&gt;</span> <span class='varid'>re_seq</span> <span class='layout'>(</span><span class='varid'>delta</span> <span class='varid'>e</span> <span class='varid'>x</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>re_rep</span> <span class='varid'>e</span><span class='layout'>)</span>
+<a name="line-232"></a>	<span class='conid'>RE_OPT</span>  <span class='varid'>e</span>		<span class='keyglyph'>-&gt;</span> <span class='varid'>delta</span> <span class='varid'>e</span> <span class='varid'>x</span>
+<a name="line-233"></a>	<span class='conid'>RE_SEQ</span>  <span class='varid'>e</span> <span class='varid'>f</span>
+<a name="line-234"></a>		<span class='keyglyph'>|</span> <span class='varid'>nullable</span> <span class='varid'>e</span>	<span class='keyglyph'>-&gt;</span> <span class='varid'>re_alt</span> <span class='layout'>(</span><span class='varid'>re_seq</span> <span class='layout'>(</span><span class='varid'>delta</span> <span class='varid'>e</span> <span class='varid'>x</span><span class='layout'>)</span> <span class='varid'>f</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>delta</span> <span class='varid'>f</span> <span class='varid'>x</span><span class='layout'>)</span>
+<a name="line-235"></a>		<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>-&gt;</span> <span class='varid'>re_seq</span> <span class='layout'>(</span><span class='varid'>delta</span> <span class='varid'>e</span> <span class='varid'>x</span><span class='layout'>)</span> <span class='varid'>f</span>
+<a name="line-236"></a>	<span class='conid'>RE_ALT</span>  <span class='varid'>e</span> <span class='varid'>f</span>		<span class='keyglyph'>-&gt;</span> <span class='varid'>re_alt</span> <span class='layout'>(</span><span class='varid'>delta</span> <span class='varid'>e</span> <span class='varid'>x</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>delta</span> <span class='varid'>f</span> <span class='varid'>x</span><span class='layout'>)</span>
+<a name="line-237"></a>	<span class='conid'>RE_DOT</span>			<span class='keyglyph'>-&gt;</span> <span class='varid'>re_unit</span>
+<a name="line-238"></a>
+<a name="line-239"></a>
+<a name="line-240"></a><span class='comment'>-- |</span>
+<a name="line-241"></a><span class='comment'>-- Derives a regular expression with respect to a sentence.</span>
+<a name="line-242"></a><span class='comment'>--</span>
+<a name="line-243"></a><span class='comment'>--    * 1.parameter re :  regular expression</span>
+<a name="line-244"></a><span class='comment'>--</span>
+<a name="line-245"></a><span class='comment'>--    - 2.parameter s :  sentence to which the regular expression is applied</span>
+<a name="line-246"></a><span class='comment'>--</span>
+<a name="line-247"></a><span class='comment'>--    - returns : the derived regular expression</span>
+<a name="line-248"></a>
+<a name="line-249"></a><a name="matches"></a><span class='definition'>matches</span> <span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Eq</span> <span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>Show</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='varid'>a</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span>
+<a name="line-250"></a><span class='definition'>matches</span> <span class='varid'>e</span> <span class='keyglyph'>=</span> <span class='varid'>foldl</span> <span class='varid'>delta</span> <span class='varid'>e</span>
+<a name="line-251"></a>
+<a name="line-252"></a>
+<a name="line-253"></a><span class='comment'>-- |</span>
+<a name="line-254"></a><span class='comment'>-- Checks if an input matched a regular expression. The function should be</span>
+<a name="line-255"></a><span class='comment'>-- called after matches.</span>
+<a name="line-256"></a><span class='comment'>--</span>
+<a name="line-257"></a><span class='comment'>-- Was the sentence used in @matches@ in the language of the regular expression?</span>
+<a name="line-258"></a><span class='comment'>-- -&gt; matches e s == s `in` L(e)?</span>
+<a name="line-259"></a><span class='comment'>--</span>
+<a name="line-260"></a><span class='comment'>--    * 1.parameter re :  the derived regular expression</span>
+<a name="line-261"></a><span class='comment'>--</span>
+<a name="line-262"></a><span class='comment'>--    - returns : empty String if input matched the regular expression, otherwise</span>
+<a name="line-263"></a><span class='comment'>--               an error message is returned</span>
+<a name="line-264"></a>
+<a name="line-265"></a><a name="checkRE"></a><span class='definition'>checkRE</span> <span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Show</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-266"></a><span class='definition'>checkRE</span> <span class='layout'>(</span><span class='conid'>RE_UNIT</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='str'>""</span>
+<a name="line-267"></a><span class='definition'>checkRE</span> <span class='layout'>(</span><span class='conid'>RE_ZERO</span> <span class='varid'>m</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>m</span>
+<a name="line-268"></a><span class='definition'>checkRE</span> <span class='varid'>re</span>
+<a name="line-269"></a>	<span class='keyglyph'>|</span> <span class='varid'>nullable</span> <span class='varid'>re</span>	<span class='keyglyph'>=</span> <span class='str'>""</span>
+<a name="line-270"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>=</span> <span class='str'>"Input must match "</span> <span class='varop'>++</span> <span class='varid'>printRE</span> <span class='varid'>re</span>
+<a name="line-271"></a>
+<a name="line-272"></a>
+<a name="line-273"></a>
+<a name="line-274"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-275"></a>
+<a name="line-276"></a>
+<a name="line-277"></a>
+<a name="line-278"></a><span class='comment'>-- |</span>
+<a name="line-279"></a><span class='comment'>-- Constructs a string representation of a regular expression.</span>
+<a name="line-280"></a><span class='comment'>--</span>
+<a name="line-281"></a><span class='comment'>--    * 1.parameter re :  a regular expression</span>
+<a name="line-282"></a><span class='comment'>--</span>
+<a name="line-283"></a><span class='comment'>--    - returns : the string representation of the regular expression</span>
+<a name="line-284"></a>
+<a name="line-285"></a><a name="printRE"></a><span class='definition'>printRE</span> <span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Show</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-286"></a><span class='definition'>printRE</span> <span class='varid'>re'</span>
+<a name="line-287"></a>    <span class='keyglyph'>=</span> <span class='str'>"( "</span> <span class='varop'>++</span> <span class='varid'>printRE1</span> <span class='varid'>re'</span> <span class='varop'>++</span> <span class='str'>" )"</span>
+<a name="line-288"></a>      <span class='keyword'>where</span>
+<a name="line-289"></a>      <span class='varid'>printRE1</span> <span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Show</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-290"></a>      <span class='varid'>printRE1</span> <span class='varid'>re</span> <span class='keyglyph'>=</span> <span class='keyword'>case</span> <span class='varid'>re</span> <span class='keyword'>of</span>
+<a name="line-291"></a>	  <span class='conid'>RE_ZERO</span> <span class='varid'>m</span>				<span class='keyglyph'>-&gt;</span> <span class='str'>"ERROR: "</span> <span class='varop'>++</span> <span class='varid'>m</span>
+<a name="line-292"></a>	  <span class='conid'>RE_UNIT</span>				<span class='keyglyph'>-&gt;</span> <span class='str'>""</span>
+<a name="line-293"></a>	  <span class='conid'>RE_SYM</span> <span class='varid'>sym</span>				<span class='keyglyph'>-&gt;</span> <span class='varid'>show</span> <span class='varid'>sym</span>
+<a name="line-294"></a>	  <span class='conid'>RE_DOT</span>				<span class='keyglyph'>-&gt;</span> <span class='str'>"."</span>
+<a name="line-295"></a>	  <span class='conid'>RE_REP</span> <span class='varid'>e</span>
+<a name="line-296"></a>	      <span class='keyglyph'>|</span> <span class='varid'>isSingle</span> <span class='varid'>e</span>			<span class='keyglyph'>-&gt;</span> <span class='varid'>printRE1</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>"*"</span>
+<a name="line-297"></a>	      <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>-&gt;</span> <span class='str'>"("</span> <span class='varop'>++</span> <span class='varid'>printRE1</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>")*"</span>
+<a name="line-298"></a>	  <span class='conid'>RE_PLUS</span> <span class='varid'>e</span>
+<a name="line-299"></a>	      <span class='keyglyph'>|</span> <span class='varid'>isSingle</span> <span class='varid'>e</span>			<span class='keyglyph'>-&gt;</span> <span class='varid'>printRE1</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>"+"</span>
+<a name="line-300"></a>	      <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>-&gt;</span> <span class='str'>"("</span> <span class='varop'>++</span> <span class='varid'>printRE1</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>")+"</span>
+<a name="line-301"></a>	  <span class='conid'>RE_OPT</span> <span class='varid'>e</span>
+<a name="line-302"></a>	      <span class='keyglyph'>|</span> <span class='varid'>isSingle</span> <span class='varid'>e</span>			<span class='keyglyph'>-&gt;</span> <span class='varid'>printRE1</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>"?"</span>
+<a name="line-303"></a>	      <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>-&gt;</span> <span class='str'>"("</span> <span class='varop'>++</span> <span class='varid'>printRE1</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>")?"</span>
+<a name="line-304"></a>	  <span class='conid'>RE_SEQ</span> <span class='varid'>e</span> <span class='varid'>f</span>
+<a name="line-305"></a>	      <span class='keyglyph'>|</span> <span class='varid'>isAlt</span> <span class='varid'>e</span>  <span class='varop'>&amp;&amp;</span> <span class='varid'>not</span> <span class='layout'>(</span><span class='varid'>isAlt</span> <span class='varid'>f</span><span class='layout'>)</span>	<span class='keyglyph'>-&gt;</span> <span class='str'>"("</span> <span class='varop'>++</span> <span class='varid'>printRE1</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>") , "</span> <span class='varop'>++</span> <span class='varid'>printRE1</span> <span class='varid'>f</span>
+<a name="line-306"></a>	      <span class='keyglyph'>|</span> <span class='varid'>not</span> <span class='layout'>(</span><span class='varid'>isAlt</span> <span class='varid'>e</span><span class='layout'>)</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>isAlt</span> <span class='varid'>f</span>	<span class='keyglyph'>-&gt;</span> <span class='varid'>printRE1</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>" , ("</span> <span class='varop'>++</span> <span class='varid'>printRE1</span> <span class='varid'>f</span> <span class='varop'>++</span> <span class='str'>")"</span>
+<a name="line-307"></a>	      <span class='keyglyph'>|</span> <span class='varid'>isAlt</span> <span class='varid'>e</span>  <span class='varop'>&amp;&amp;</span> <span class='varid'>isAlt</span> <span class='varid'>f</span>		<span class='keyglyph'>-&gt;</span> <span class='str'>"("</span> <span class='varop'>++</span> <span class='varid'>printRE1</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>") , ("</span> <span class='varop'>++</span> <span class='varid'>printRE1</span> <span class='varid'>f</span> <span class='varop'>++</span> <span class='str'>")"</span>
+<a name="line-308"></a>	      <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>-&gt;</span> <span class='varid'>printRE1</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>" , "</span> <span class='varop'>++</span> <span class='varid'>printRE1</span> <span class='varid'>f</span>
+<a name="line-309"></a>	  <span class='conid'>RE_ALT</span> <span class='varid'>e</span> <span class='varid'>f</span>
+<a name="line-310"></a>	      <span class='keyglyph'>|</span> <span class='varid'>isSeq</span> <span class='varid'>e</span>  <span class='varop'>&amp;&amp;</span> <span class='varid'>not</span> <span class='layout'>(</span><span class='varid'>isSeq</span> <span class='varid'>f</span><span class='layout'>)</span>	<span class='keyglyph'>-&gt;</span> <span class='str'>"("</span> <span class='varop'>++</span> <span class='varid'>printRE1</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>") | "</span> <span class='varop'>++</span> <span class='varid'>printRE1</span> <span class='varid'>f</span>
+<a name="line-311"></a>	      <span class='keyglyph'>|</span> <span class='varid'>not</span> <span class='layout'>(</span><span class='varid'>isSeq</span> <span class='varid'>e</span><span class='layout'>)</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>isSeq</span> <span class='varid'>f</span>	<span class='keyglyph'>-&gt;</span> <span class='varid'>printRE1</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>" | ("</span> <span class='varop'>++</span> <span class='varid'>printRE1</span> <span class='varid'>f</span> <span class='varop'>++</span> <span class='str'>")"</span>
+<a name="line-312"></a>	      <span class='keyglyph'>|</span> <span class='varid'>isSeq</span> <span class='varid'>e</span>  <span class='varop'>&amp;&amp;</span> <span class='varid'>isSeq</span> <span class='varid'>f</span>		<span class='keyglyph'>-&gt;</span> <span class='str'>"("</span> <span class='varop'>++</span> <span class='varid'>printRE1</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>") | ("</span> <span class='varop'>++</span> <span class='varid'>printRE1</span> <span class='varid'>f</span> <span class='varop'>++</span> <span class='str'>")"</span>
+<a name="line-313"></a>	      <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>-&gt;</span> <span class='varid'>printRE1</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>" | "</span> <span class='varop'>++</span> <span class='varid'>printRE1</span> <span class='varid'>f</span>
+<a name="line-314"></a>
+<a name="line-315"></a>
+<a name="line-316"></a>      <span class='varid'>isSingle</span> <span class='keyglyph'>::</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-317"></a>      <span class='varid'>isSingle</span> <span class='layout'>(</span><span class='conid'>RE_ZERO</span> <span class='keyword'>_</span><span class='layout'>)</span>    <span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-318"></a>      <span class='varid'>isSingle</span> <span class='conid'>RE_UNIT</span>        <span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-319"></a>      <span class='varid'>isSingle</span> <span class='layout'>(</span><span class='conid'>RE_SYM</span> <span class='keyword'>_</span><span class='layout'>)</span>     <span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-320"></a>      <span class='varid'>isSingle</span> <span class='keyword'>_</span>              <span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-321"></a>
+<a name="line-322"></a>
+<a name="line-323"></a>      <span class='varid'>isSeq</span> <span class='keyglyph'>::</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-324"></a>      <span class='varid'>isSeq</span> <span class='layout'>(</span><span class='conid'>RE_SEQ</span> <span class='keyword'>_</span> <span class='keyword'>_</span><span class='layout'>)</span>      <span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-325"></a>      <span class='varid'>isSeq</span> <span class='keyword'>_</span>                 <span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-326"></a>
+<a name="line-327"></a>
+<a name="line-328"></a>      <span class='varid'>isAlt</span> <span class='keyglyph'>::</span> <span class='conid'>RE</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-329"></a>      <span class='varid'>isAlt</span> <span class='layout'>(</span><span class='conid'>RE_ALT</span> <span class='keyword'>_</span> <span class='keyword'>_</span><span class='layout'>)</span>      <span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-330"></a>      <span class='varid'>isAlt</span> <span class='keyword'>_</span>                 <span class='keyglyph'>=</span> <span class='conid'>False</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Validator-Validation.html b/doc/hxt-filter/src/Text-XML-HXT-Validator-Validation.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Validator-Validation.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- This module provides a state filter as a main function for validating XML documents.</span>
+<a name="line-3"></a><span class='comment'>--</span>
+<a name="line-4"></a><span class='comment'>-- The real validation is done with pure filters from module 'Text.XML.HXT.Validator.ValidationFilter'</span>
+<a name="line-5"></a><span class='comment'>--</span>
+<a name="line-6"></a><span class='comment'>-- Author : .\\artin Schmidt</span>
+<a name="line-7"></a>
+<a name="line-8"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>Validation</span>
+<a name="line-9"></a>    <span class='layout'>(</span> <span class='varid'>getValidatedDoc</span>
+<a name="line-10"></a>    <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>ValidationFilter</span>
+<a name="line-11"></a>    <span class='layout'>)</span>
+<a name="line-12"></a>
+<a name="line-13"></a><span class='keyword'>where</span>
+<a name="line-14"></a>
+<a name="line-15"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-16"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>
+<a name="line-17"></a>
+<a name="line-18"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>ValidationFilter</span>
+<a name="line-19"></a>
+<a name="line-20"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Parser</span><span class='varop'>.</span><span class='conid'>XmlOutput</span>
+<a name="line-21"></a>    <span class='layout'>(</span> <span class='varid'>traceTree</span>
+<a name="line-22"></a>    <span class='layout'>,</span> <span class='varid'>traceSource</span>
+<a name="line-23"></a>    <span class='layout'>,</span> <span class='varid'>traceMsg</span>
+<a name="line-24"></a>    <span class='layout'>)</span>
+<a name="line-25"></a>
+<a name="line-26"></a><span class='comment'>-- ------------------------------------------------------------</span>
+<a name="line-27"></a>
+<a name="line-28"></a><span class='comment'>-- |</span>
+<a name="line-29"></a><span class='comment'>-- monadic filter for validating and transforming a wellformed document.</span>
+<a name="line-30"></a><span class='comment'>--</span>
+<a name="line-31"></a><span class='comment'>-- the "main" function for validation.</span>
+<a name="line-32"></a><span class='comment'>--</span>
+<a name="line-33"></a><span class='comment'>-- the input tree must consist of a root node with a complete document and DTD.</span>
+<a name="line-34"></a><span class='comment'>-- Result is the single element list containing same tree but tranformed with respect to the DTD,</span>
+<a name="line-35"></a><span class='comment'>-- or, in case of errors, the root with an empty list of children</span>
+<a name="line-36"></a>
+<a name="line-37"></a><a name="getValidatedDoc"></a><span class='definition'>getValidatedDoc</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>state</span>
+<a name="line-38"></a><span class='definition'>getValidatedDoc</span>
+<a name="line-39"></a>    <span class='keyglyph'>=</span> <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='str'>"validating document"</span>
+<a name="line-40"></a>      <span class='varop'>.&gt;&gt;</span>
+<a name="line-41"></a>      <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>runValidation</span>
+<a name="line-42"></a>	  <span class='varop'>.&gt;&gt;</span>
+<a name="line-43"></a>	  <span class='varid'>traceTree</span>
+<a name="line-44"></a>	  <span class='varop'>.&gt;&gt;</span>
+<a name="line-45"></a>	  <span class='varid'>traceSource</span>
+<a name="line-46"></a>	<span class='layout'>)</span>
+<a name="line-47"></a>	<span class='varop'>`whenM`</span> <span class='layout'>(</span><span class='varid'>isRoot</span> <span class='varop'>.&gt;</span> <span class='varid'>getChildren</span><span class='layout'>)</span>
+<a name="line-48"></a>      <span class='layout'>)</span>
+<a name="line-49"></a>      <span class='keyword'>where</span>
+<a name="line-50"></a>      <span class='varid'>runValidation</span> <span class='varid'>t</span>
+<a name="line-51"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>
+<a name="line-52"></a>	    <span class='varid'>issueError</span> <span class='varop'>$$&lt;</span> <span class='varid'>res</span>
+<a name="line-53"></a>	    <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>errs</span>
+<a name="line-54"></a>	      <span class='keyword'>then</span> <span class='layout'>(</span> <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='str'>"transforming validated document"</span>
+<a name="line-55"></a>		     <span class='varop'>.&gt;&gt;</span>
+<a name="line-56"></a>		     <span class='varid'>liftMf</span> <span class='varid'>transform</span>
+<a name="line-57"></a>		   <span class='layout'>)</span>
+<a name="line-58"></a>	      <span class='keyword'>else</span> <span class='varid'>liftMf</span> <span class='layout'>(</span><span class='varid'>setStatus</span> <span class='varid'>c_err</span> <span class='str'>"validating document"</span><span class='layout'>)</span>
+<a name="line-59"></a>	      <span class='layout'>)</span> <span class='varid'>t</span>
+<a name="line-60"></a>	    <span class='keyword'>where</span>
+<a name="line-61"></a>	    <span class='varid'>res</span>  <span class='keyglyph'>=</span> <span class='varid'>validate</span> <span class='varid'>t</span>
+<a name="line-62"></a>	    <span class='varid'>errs</span> <span class='keyglyph'>=</span> <span class='varid'>isXError</span> <span class='varop'>.&gt;</span> <span class='varid'>neg</span> <span class='varid'>isWarning</span> <span class='varop'>$$</span> <span class='varid'>res</span>
+<a name="line-63"></a>
+<a name="line-64"></a><span class='comment'>-- ------------------------------------------------------------</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Validator-ValidationFilter.html b/doc/hxt-filter/src/Text-XML-HXT-Validator-ValidationFilter.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Validator-ValidationFilter.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- This module provides functions for validating XML documents represented as</span>
+<a name="line-3"></a><span class='comment'>-- XmlTree.</span>
+<a name="line-4"></a>
+<a name="line-5"></a><span class='comment'>-- Unlike other popular XML validation tools the validation functions return</span>
+<a name="line-6"></a><span class='comment'>-- a list of errors instead of aborting after the first error was found.</span>
+<a name="line-7"></a><span class='comment'>-- </span>
+<a name="line-8"></a><span class='comment'>-- Note: The validation process has been split into validation and transformation!</span>
+<a name="line-9"></a><span class='comment'>--       If @validate@ did not report any errors, @transform@</span>
+<a name="line-10"></a><span class='comment'>--       should be called, to change the document the way a validating parser</span>
+<a name="line-11"></a><span class='comment'>--       is expected to do.</span>
+<a name="line-12"></a>
+<a name="line-13"></a><span class='comment'>--</span>
+<a name="line-14"></a><span class='comment'>-- Author : .\\artin Schmidt</span>
+<a name="line-15"></a>
+<a name="line-16"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>ValidationFilter</span>
+<a name="line-17"></a>    <span class='layout'>(</span> <span class='varid'>getDTDSubset</span>
+<a name="line-18"></a>    <span class='layout'>,</span> <span class='varid'>validate</span>
+<a name="line-19"></a>    <span class='layout'>,</span> <span class='varid'>validateDTD</span>
+<a name="line-20"></a>    <span class='layout'>,</span> <span class='varid'>validateDoc</span>
+<a name="line-21"></a>    <span class='layout'>,</span> <span class='varid'>removeDoublicateDefs</span>
+<a name="line-22"></a>    <span class='layout'>,</span> <span class='varid'>transform</span>
+<a name="line-23"></a>    <span class='layout'>)</span>
+<a name="line-24"></a>
+<a name="line-25"></a><span class='keyword'>where</span>
+<a name="line-26"></a>
+<a name="line-27"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-28"></a>
+<a name="line-29"></a><span class='keyword'>import</span> <span class='keyword'>qualified</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>DTDValidation</span> <span class='keyword'>as</span> <span class='conid'>DTDValidation</span>
+<a name="line-30"></a><span class='keyword'>import</span> <span class='keyword'>qualified</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>DocValidation</span> <span class='keyword'>as</span> <span class='conid'>DocValidation</span>
+<a name="line-31"></a><span class='keyword'>import</span> <span class='keyword'>qualified</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>IdValidation</span> <span class='keyword'>as</span> <span class='conid'>IdValidation</span>
+<a name="line-32"></a><span class='keyword'>import</span> <span class='keyword'>qualified</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>DocTransformation</span> <span class='keyword'>as</span> <span class='conid'>DocTransformation</span>
+<a name="line-33"></a>
+<a name="line-34"></a><span class='comment'>-- |</span>
+<a name="line-35"></a><span class='comment'>-- Main validation filter. Check if the DTD and the document are valid.</span>
+<a name="line-36"></a><span class='comment'>--</span>
+<a name="line-37"></a><span class='comment'>--</span>
+<a name="line-38"></a><span class='comment'>--    - returns : a function which expects a complete document as XmlTree input</span>
+<a name="line-39"></a><span class='comment'>--                     and returns a list of all errors found.</span>
+<a name="line-40"></a>
+<a name="line-41"></a><a name="validate"></a><span class='definition'>validate</span> 	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-42"></a><span class='definition'>validate</span>	<span class='keyglyph'>=</span> <span class='varid'>validateDTD</span> <span class='varop'>+++</span> <span class='varid'>validateDoc</span>
+<a name="line-43"></a>
+<a name="line-44"></a><span class='comment'>-- |</span>
+<a name="line-45"></a><span class='comment'>-- Check if the DTD is valid.</span>
+<a name="line-46"></a><span class='comment'>--</span>
+<a name="line-47"></a><span class='comment'>--</span>
+<a name="line-48"></a><span class='comment'>--    - returns : a function which expects an XmlTree from the parser as input</span>
+<a name="line-49"></a><span class='comment'>--                     and returns a list of all errors found in the DTD.</span>
+<a name="line-50"></a>
+<a name="line-51"></a><a name="validateDTD"></a><span class='definition'>validateDTD</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-52"></a><span class='definition'>validateDTD</span>
+<a name="line-53"></a>    <span class='keyglyph'>=</span> <span class='varid'>choice</span> <span class='keyglyph'>[</span> <span class='varid'>getDTDSubset</span>
+<a name="line-54"></a>	       <span class='conop'>:-&gt;</span> <span class='conid'>DTDValidation</span><span class='varop'>.</span><span class='varid'>validateDTD</span>
+<a name="line-55"></a>	     <span class='layout'>,</span> <span class='varid'>this</span>
+<a name="line-56"></a>               <span class='conop'>:-&gt;</span> <span class='varid'>err</span> <span class='str'>"Can't validate DTD: There is no DOCTYPE declaration in the document."</span>
+<a name="line-57"></a>	     <span class='keyglyph'>]</span>
+<a name="line-58"></a><span class='comment'>-- |</span>
+<a name="line-59"></a><span class='comment'>-- Check if the document corresponds to the given DTD.</span>
+<a name="line-60"></a><span class='comment'>--</span>
+<a name="line-61"></a><span class='comment'>--</span>
+<a name="line-62"></a><span class='comment'>--    - returns : a function which expects a complete document as XmlTree input</span>
+<a name="line-63"></a><span class='comment'>--                     and returns a list of all errors found in the content part.</span>
+<a name="line-64"></a>
+<a name="line-65"></a><a name="validateDoc"></a><span class='definition'>validateDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-66"></a><span class='definition'>validateDoc</span> <span class='varid'>t</span>
+<a name="line-67"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>dtds</span>
+<a name="line-68"></a>	<span class='keyword'>then</span> <span class='varid'>err</span> <span class='str'>"Can't validate document: There is no DOCTYPE declaration in the document."</span>
+<a name="line-69"></a>	<span class='keyword'>else</span> <span class='layout'>(</span> <span class='conid'>DocValidation</span><span class='varop'>.</span><span class='varid'>validateDoc</span> <span class='varid'>dtdPart</span>
+<a name="line-70"></a>               <span class='varop'>+++</span>
+<a name="line-71"></a>	       <span class='conid'>IdValidation</span><span class='varop'>.</span><span class='varid'>validateIds</span> <span class='varid'>dtdPart</span>
+<a name="line-72"></a>	     <span class='layout'>)</span>
+<a name="line-73"></a>      <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>t</span>
+<a name="line-74"></a>      <span class='keyword'>where</span>
+<a name="line-75"></a>      <span class='varid'>dtds</span> <span class='keyglyph'>=</span> <span class='varid'>getDTDSubset</span> <span class='varop'>.&gt;</span> <span class='varid'>processBottomUp</span> <span class='varid'>removeDoublicateDefs</span> <span class='varop'>$</span> <span class='varid'>t</span>
+<a name="line-76"></a>      <span class='varid'>dtdPart</span>  <span class='keyglyph'>=</span> <span class='varid'>head</span> <span class='varid'>dtds</span>
+<a name="line-77"></a>
+<a name="line-78"></a><span class='comment'>-- |</span>
+<a name="line-79"></a><span class='comment'>-- filter for transforming a document with respect to the given DTD.</span>
+<a name="line-80"></a><span class='comment'>--</span>
+<a name="line-81"></a><span class='comment'>-- Validating parsers</span>
+<a name="line-82"></a><span class='comment'>-- are expected to  normalize attribute values and add default values.</span>
+<a name="line-83"></a><span class='comment'>-- This function should be called after a successful validation.</span>
+<a name="line-84"></a><span class='comment'>--</span>
+<a name="line-85"></a><span class='comment'>--</span>
+<a name="line-86"></a><span class='comment'>--    - returns : a function which expects a complete XML document tree</span>
+<a name="line-87"></a><span class='comment'>--                and returns the transformed XmlTree</span>
+<a name="line-88"></a>
+<a name="line-89"></a><a name="transform"></a><span class='definition'>transform</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-90"></a><span class='definition'>transform</span>
+<a name="line-91"></a>    <span class='keyglyph'>=</span> <span class='varid'>choice</span> <span class='keyglyph'>[</span> <span class='varid'>isRoot</span>
+<a name="line-92"></a>               <span class='conop'>:-&gt;</span> <span class='varid'>transformDoc</span>
+<a name="line-93"></a>	     <span class='layout'>,</span> <span class='varid'>this</span>
+<a name="line-94"></a>	       <span class='conop'>:-&gt;</span> <span class='varid'>fatal</span> <span class='str'>"Can't transform document: No document root given"</span>
+<a name="line-95"></a>	     <span class='keyglyph'>]</span>
+<a name="line-96"></a>      <span class='keyword'>where</span>
+<a name="line-97"></a>      <span class='varid'>transformDoc</span> <span class='varid'>t</span>
+<a name="line-98"></a>	  <span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='varid'>dtds</span>
+<a name="line-99"></a>	      <span class='keyglyph'>=</span> <span class='varid'>this</span> <span class='varid'>t</span>
+<a name="line-100"></a>	  <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>
+<a name="line-101"></a>	      <span class='keyglyph'>=</span> <span class='conid'>DocTransformation</span><span class='varop'>.</span><span class='varid'>transform</span> <span class='layout'>(</span><span class='varid'>head</span> <span class='varid'>dtds</span><span class='layout'>)</span> <span class='varid'>t</span>
+<a name="line-102"></a>	  <span class='keyword'>where</span>
+<a name="line-103"></a>	  <span class='varid'>dtds</span> <span class='keyglyph'>=</span> <span class='varid'>getDTDSubset</span> <span class='varop'>.&gt;</span> <span class='varid'>processBottomUp</span> <span class='varid'>removeDoublicateDefs</span> <span class='varop'>$</span> <span class='varid'>t</span>
+<a name="line-104"></a>
+<a name="line-105"></a><span class='comment'>-- |</span>
+<a name="line-106"></a><span class='comment'>-- Removes doublicate declarations from the DTD which first declaration is</span>
+<a name="line-107"></a><span class='comment'>-- binding. This is the case for ATTLIST and ENTITY declarations.</span>
+<a name="line-108"></a><span class='comment'>--</span>
+<a name="line-109"></a><span class='comment'>--</span>
+<a name="line-110"></a><span class='comment'>--    - returns : A function that replaces the children of DOCTYPE nodes by a list</span>
+<a name="line-111"></a><span class='comment'>--               where all multiple declarations are removed.</span>
+<a name="line-112"></a>
+<a name="line-113"></a><a name="removeDoublicateDefs"></a><span class='definition'>removeDoublicateDefs</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-114"></a><span class='definition'>removeDoublicateDefs</span>
+<a name="line-115"></a>    <span class='keyglyph'>=</span> <span class='conid'>DTDValidation</span><span class='varop'>.</span><span class='varid'>removeDoublicateDefs</span>
+<a name="line-116"></a>
+<a name="line-117"></a><span class='comment'>--</span>
+<a name="line-118"></a><span class='comment'>-- selects the DTD part of a document</span>
+<a name="line-119"></a><span class='comment'>-- but only, if there is more than the internal part for the 4 predefined XML entities</span>
+<a name="line-120"></a>
+<a name="line-121"></a><a name="getDTDSubset"></a><span class='definition'>getDTDSubset</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-122"></a><span class='definition'>getDTDSubset</span>
+<a name="line-123"></a>    <span class='keyglyph'>=</span> <span class='varid'>getChildren</span> <span class='varop'>.&gt;</span> <span class='varid'>isDoctype</span> <span class='varop'>.&gt;</span> <span class='varid'>hasRootName</span>
+<a name="line-124"></a>      <span class='keyword'>where</span>
+<a name="line-125"></a>      <span class='varid'>hasRootName</span> <span class='keyglyph'>=</span> <span class='varid'>isOf</span> <span class='layout'>(</span><span class='varid'>hasEntry</span> <span class='varid'>a_name</span> <span class='varop'>.</span> <span class='varid'>attrlOfDTD</span><span class='layout'>)</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/Text-XML-HXT-Validator-XmlRE.html b/doc/hxt-filter/src/Text-XML-HXT-Validator-XmlRE.html
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/Text-XML-HXT-Validator-XmlRE.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>Haskell Code by HsColour</title>
+<link type='text/css' rel='stylesheet' href='hscolour.css' />
+</head>
+<body>
+<pre><a name="line-1"></a><span class='comment'>-- |</span>
+<a name="line-2"></a><span class='comment'>-- A module for regular expression matching, adapted for XML DTDs.</span>
+<a name="line-3"></a><span class='comment'>--</span>
+<a name="line-4"></a><span class='comment'>-- This module is based on the module RE.</span>
+<a name="line-5"></a><span class='comment'>--</span>
+<a name="line-6"></a><span class='comment'>-- Author .\\artin Schmidt</span>
+<a name="line-7"></a>
+<a name="line-8"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>XmlRE</span>
+<a name="line-9"></a>    <span class='layout'>(</span> <span class='conid'>RE</span>
+<a name="line-10"></a>
+<a name="line-11"></a>    <span class='layout'>,</span> <span class='varid'>checkRE</span>
+<a name="line-12"></a>    <span class='layout'>,</span> <span class='varid'>matches</span>
+<a name="line-13"></a>    <span class='layout'>,</span> <span class='varid'>printRE</span>
+<a name="line-14"></a>
+<a name="line-15"></a>    <span class='layout'>,</span> <span class='varid'>re_unit</span>
+<a name="line-16"></a>    <span class='layout'>,</span> <span class='varid'>re_zero</span>
+<a name="line-17"></a>    <span class='layout'>,</span> <span class='varid'>re_sym</span>
+<a name="line-18"></a>    <span class='layout'>,</span> <span class='varid'>re_rep</span>
+<a name="line-19"></a>    <span class='layout'>,</span> <span class='varid'>re_plus</span>
+<a name="line-20"></a>    <span class='layout'>,</span> <span class='varid'>re_opt</span>
+<a name="line-21"></a>    <span class='layout'>,</span> <span class='varid'>re_seq</span>
+<a name="line-22"></a>    <span class='layout'>,</span> <span class='varid'>re_alt</span>
+<a name="line-23"></a>    <span class='layout'>,</span> <span class='varid'>re_dot</span>
+<a name="line-24"></a>    <span class='layout'>)</span>
+<a name="line-25"></a><span class='keyword'>where</span>
+<a name="line-26"></a>
+<a name="line-27"></a><span class='comment'>-- import Debug.Trace(trace)</span>
+<a name="line-28"></a>
+<a name="line-29"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>Validator</span><span class='varop'>.</span><span class='conid'>RE</span> <span class='varid'>hiding</span> <span class='layout'>(</span><span class='varid'>matches</span><span class='layout'>)</span>
+<a name="line-30"></a>
+<a name="line-31"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>
+<a name="line-32"></a>
+<a name="line-33"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>EditFilters</span>
+<a name="line-34"></a>    <span class='layout'>(</span> <span class='varid'>removeComment</span>
+<a name="line-35"></a>    <span class='layout'>,</span> <span class='varid'>removeWhiteSpace</span>
+<a name="line-36"></a>    <span class='layout'>)</span>
+<a name="line-37"></a>
+<a name="line-38"></a><span class='comment'>-- |</span>
+<a name="line-39"></a><span class='comment'>-- Derives a regular expression with respect to a list of elements.</span>
+<a name="line-40"></a><span class='comment'>--</span>
+<a name="line-41"></a><span class='comment'>--    * 1.parameter re :  regular expression</span>
+<a name="line-42"></a><span class='comment'>--</span>
+<a name="line-43"></a><span class='comment'>--    - 2.parameter list :  list of elements to which the regular expression is applied</span>
+<a name="line-44"></a><span class='comment'>--</span>
+<a name="line-45"></a><span class='comment'>--    - returns : the derived regular expression</span>
+<a name="line-46"></a>
+<a name="line-47"></a><a name="matches"></a><span class='definition'>matches</span> <span class='keyglyph'>::</span> <span class='conid'>RE</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='conid'>String</span>
+<a name="line-48"></a><span class='definition'>matches</span> <span class='varid'>re</span> <span class='varid'>list</span>
+<a name="line-49"></a>    <span class='keyglyph'>=</span> <span class='varid'>foldl</span> <span class='varid'>delta</span> <span class='varid'>re</span> <span class='layout'>(</span><span class='varid'>removeUnimportantStuff</span> <span class='varop'>$$</span> <span class='varid'>list</span><span class='layout'>)</span>
+<a name="line-50"></a>      <span class='keyword'>where</span>
+<a name="line-51"></a>      <span class='varid'>removeUnimportantStuff</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>
+<a name="line-52"></a>      <span class='varid'>removeUnimportantStuff</span> <span class='keyglyph'>=</span> <span class='varid'>processBottomUp</span> <span class='layout'>(</span><span class='varid'>removeWhiteSpace</span> <span class='varop'>`o`</span> <span class='varid'>removeComment</span><span class='layout'>)</span>
+<a name="line-53"></a>      <span class='comment'>-- trace of growth of REs</span>
+<a name="line-54"></a>      <span class='comment'>-- delta' re el = delta (trace (("RE : " ++) . (++ "\n" ) . show $ re) re) el</span>
+<a name="line-55"></a>
+<a name="line-56"></a>
+<a name="line-57"></a><span class='comment'>-- |</span>
+<a name="line-58"></a><span class='comment'>-- Derives a regular expression with respect to one element.</span>
+<a name="line-59"></a><span class='comment'>--</span>
+<a name="line-60"></a><span class='comment'>-- L(delta e x) = x \ L(e)</span>
+<a name="line-61"></a><span class='comment'>--</span>
+<a name="line-62"></a><span class='comment'>--    * 1.parameter re :  regular expression to be derived</span>
+<a name="line-63"></a><span class='comment'>--</span>
+<a name="line-64"></a><span class='comment'>--    - 2.parameter el :  the element on which the regular expression is applied</span>
+<a name="line-65"></a><span class='comment'>--</span>
+<a name="line-66"></a><span class='comment'>--    - returns : the derived regular expression</span>
+<a name="line-67"></a>
+<a name="line-68"></a><a name="delta"></a><span class='definition'>delta</span> <span class='keyglyph'>::</span> <span class='conid'>RE</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>RE</span> <span class='conid'>String</span>
+<a name="line-69"></a><span class='definition'>delta</span> <span class='varid'>re</span> <span class='varid'>el</span>
+<a name="line-70"></a>    <span class='keyglyph'>|</span> <span class='varid'>not</span> <span class='layout'>(</span><span class='varid'>allowed</span> <span class='varid'>el</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>re</span>
+<a name="line-71"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>        <span class='keyglyph'>=</span> <span class='keyword'>case</span> <span class='varid'>re</span> <span class='keyword'>of</span>
+<a name="line-72"></a>        <span class='conid'>RE_ZERO</span> <span class='varid'>m</span>		 <span class='keyglyph'>-&gt;</span> <span class='varid'>re_zero</span> <span class='varid'>m</span>
+<a name="line-73"></a>        <span class='conid'>RE_UNIT</span>			 <span class='keyglyph'>-&gt;</span> <span class='varid'>re_zero</span> <span class='layout'>(</span><span class='varid'>elemName</span> <span class='varid'>el</span> <span class='varop'>++</span><span class='str'>" unexpected."</span><span class='layout'>)</span>
+<a name="line-74"></a>        <span class='conid'>RE_SYM</span> <span class='varid'>sym</span>
+<a name="line-75"></a>    	    <span class='keyglyph'>|</span> <span class='varid'>sym</span> <span class='varop'>==</span> <span class='varid'>k_pcdata</span>	 <span class='keyglyph'>-&gt;</span> <span class='keyword'>let</span> <span class='varid'>node</span> <span class='keyglyph'>=</span> <span class='varid'>getNode</span> <span class='varid'>el</span> <span class='keyword'>in</span>
+<a name="line-76"></a>	                            <span class='keyword'>if</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>isXTextNode</span> <span class='varid'>node</span><span class='layout'>)</span> <span class='varop'>||</span> <span class='layout'>(</span><span class='varid'>isXCdataNode</span> <span class='varid'>node</span><span class='layout'>)</span><span class='layout'>)</span>
+<a name="line-77"></a>				    <span class='keyword'>then</span> <span class='varid'>re_unit</span>
+<a name="line-78"></a>				    <span class='keyword'>else</span> <span class='varid'>re_zero</span> <span class='layout'>(</span><span class='str'>"Character data expected, but "</span><span class='varop'>++</span> <span class='varid'>elemName</span> <span class='varid'>el</span> <span class='varop'>++</span><span class='str'>" found."</span><span class='layout'>)</span>
+<a name="line-79"></a>       	    <span class='keyglyph'>|</span> <span class='varid'>expectedNode</span> <span class='varid'>el</span> <span class='varid'>sym</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>re_unit</span>
+<a name="line-80"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>           <span class='keyglyph'>-&gt;</span> <span class='varid'>re_zero</span> <span class='layout'>(</span><span class='str'>"Element "</span><span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>sym</span> <span class='varop'>++</span><span class='str'>" expected, but "</span><span class='varop'>++</span> <span class='varid'>elemName</span> <span class='varid'>el</span> <span class='varop'>++</span><span class='str'>" found."</span><span class='layout'>)</span>
+<a name="line-81"></a>        <span class='conid'>RE_REP</span> <span class='varid'>e</span>                  <span class='keyglyph'>-&gt;</span> <span class='varid'>re_seq</span> <span class='layout'>(</span><span class='varid'>delta</span> <span class='varid'>e</span> <span class='varid'>el</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>re_rep</span> <span class='varid'>e</span><span class='layout'>)</span>
+<a name="line-82"></a>        <span class='conid'>RE_PLUS</span> <span class='varid'>e</span>                 <span class='keyglyph'>-&gt;</span> <span class='varid'>re_seq</span> <span class='layout'>(</span><span class='varid'>delta</span> <span class='varid'>e</span> <span class='varid'>el</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>re_rep</span> <span class='varid'>e</span><span class='layout'>)</span>
+<a name="line-83"></a>        <span class='conid'>RE_OPT</span> <span class='varid'>e</span>                  <span class='keyglyph'>-&gt;</span> <span class='varid'>delta</span> <span class='varid'>e</span> <span class='varid'>el</span>
+<a name="line-84"></a>        <span class='conid'>RE_SEQ</span> <span class='varid'>e</span> <span class='varid'>f</span>
+<a name="line-85"></a>       	    <span class='keyglyph'>|</span> <span class='varid'>nullable</span> <span class='varid'>e</span>          <span class='keyglyph'>-&gt;</span> <span class='varid'>re_alt</span> <span class='layout'>(</span><span class='varid'>re_seq</span> <span class='layout'>(</span><span class='varid'>delta</span> <span class='varid'>e</span> <span class='varid'>el</span><span class='layout'>)</span> <span class='varid'>f</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>delta</span> <span class='varid'>f</span> <span class='varid'>el</span><span class='layout'>)</span>
+<a name="line-86"></a>       	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>           <span class='keyglyph'>-&gt;</span> <span class='varid'>re_seq</span> <span class='layout'>(</span><span class='varid'>delta</span> <span class='varid'>e</span> <span class='varid'>el</span><span class='layout'>)</span> <span class='varid'>f</span>
+<a name="line-87"></a>        <span class='conid'>RE_ALT</span> <span class='varid'>e</span> <span class='varid'>f</span>                <span class='keyglyph'>-&gt;</span> <span class='varid'>re_alt</span> <span class='layout'>(</span><span class='varid'>delta</span> <span class='varid'>e</span> <span class='varid'>el</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>delta</span> <span class='varid'>f</span> <span class='varid'>el</span><span class='layout'>)</span>
+<a name="line-88"></a>        <span class='conid'>RE_DOT</span>                    <span class='keyglyph'>-&gt;</span> <span class='varid'>re_unit</span>
+<a name="line-89"></a>
+<a name="line-90"></a>    <span class='keyword'>where</span>
+<a name="line-91"></a>    <span class='varid'>expectedNode</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-92"></a>    <span class='varid'>expectedNode</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>n</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>sym</span> <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>n</span><span class='layout'>)</span> <span class='varop'>==</span> <span class='varid'>sym</span>
+<a name="line-93"></a>    <span class='varid'>expectedNode</span> <span class='keyword'>_</span> <span class='keyword'>_</span>			  <span class='keyglyph'>=</span> <span class='conid'>False</span>
+<a name="line-94"></a>
+<a name="line-95"></a>    <span class='varid'>elemName</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>
+<a name="line-96"></a>    <span class='varid'>elemName</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='varid'>n</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='str'>"element "</span><span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span><span class='varid'>qualifiedName</span> <span class='varid'>n</span><span class='layout'>)</span>
+<a name="line-97"></a>    <span class='varid'>elemName</span> <span class='keyword'>_</span>				<span class='keyglyph'>=</span> <span class='str'>"character data"</span>
+<a name="line-98"></a>
+<a name="line-99"></a>    <span class='varid'>allowed</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>
+<a name="line-100"></a>    <span class='varid'>allowed</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XTag</span> <span class='keyword'>_</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-101"></a>    <span class='varid'>allowed</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XText</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>		<span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-102"></a>    <span class='varid'>allowed</span> <span class='layout'>(</span><span class='conid'>NTree</span> <span class='layout'>(</span><span class='conid'>XCdata</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>True</span>
+<a name="line-103"></a>    <span class='varid'>allowed</span> <span class='keyword'>_</span>				<span class='keyglyph'>=</span> <span class='conid'>False</span>
+</pre></body>
+</html>
diff --git a/doc/hxt-filter/src/hscolour.css b/doc/hxt-filter/src/hscolour.css
new file mode 100644
--- /dev/null
+++ b/doc/hxt-filter/src/hscolour.css
@@ -0,0 +1,5 @@
+.keyglyph, .layout {color: red;}
+.keyword {color: blue;}
+.comment, .comment a {color: green;}
+.str, .chr {color: teal;}
+.keyword,.conid, .varid, .conop, .varop, .num, .cpp, .sel, .definition {}
diff --git a/examples/Makefile b/examples/Makefile
new file mode 100644
--- /dev/null
+++ b/examples/Makefile
@@ -0,0 +1,40 @@
+# Example Applications
+#
+
+include ../Version.mk
+
+HXT_HOME	= ..
+
+EXAMPLES	= mini hparser hfilter hunit hsvg dtd2haskell
+MORE_SAMPLES	= blutgraetsche photoalbum
+DIST		= ../$(DIST_NAME)
+DIST_DIR	= $(DIST)/examples
+
+all		:
+		if [ -f $(HXT_HOME)/lib/$(SOFTWARE)/package.conf ] ; \
+		then $(MAKE) alllocal ; \
+		else $(MAKE) alldist ; \
+		fi 
+
+alllocal		:
+		$(foreach i,$(EXAMPLES),$(MAKE) -C $i PKGFLAGS="-ignore-package $(SOFTWARE)-$(LASTVERSION) -package-conf `pwd`/$(HXT_HOME)/lib/$(SOFTWARE)/package.conf -package $(SOFTWARE)" all ;)
+
+alldist		:
+		$(foreach i,$(EXAMPLES),$(MAKE) -C $i all ;)
+
+test		:
+		$(foreach i,$(EXAMPLES),$(MAKE) -C $i $@ ;)
+
+dist		:
+		[ -d $(DIST_DIR) ] || mkdir -p $(DIST_DIR)
+		$(foreach i,$(EXAMPLES),$(MAKE) -C $i dist DIST=../$(DIST_DIR);)
+		[ -d $(DIST_DIR)/xhtml ] || mkdir -p $(DIST_DIR)/xhtml
+		cp xhtml/xhtml*.dtd xhtml/xhtml*.ent xhtml/xhtml*.xml $(DIST_DIR)/xhtml
+		cp Makefile $(DIST_DIR)
+
+clean		:
+		$(foreach i,$(EXAMPLES),$(MAKE) -C $i $@ ;)
+
+
+.PHONY		: all clean test dist
+
diff --git a/examples/dtd2haskell/DTDtoHXT.hs b/examples/dtd2haskell/DTDtoHXT.hs
new file mode 100644
--- /dev/null
+++ b/examples/dtd2haskell/DTDtoHXT.hs
@@ -0,0 +1,434 @@
+-- |
+-- DTDtoHXml - A program for generating access functions for the Haskell XML Toolbox
+-- from a DTD
+--
+-- Author : Uwe Schmidt
+--
+-- Version : $Id: DTDtoHXT.hs,v 1.2 2005/04/14 12:52:51 hxml Exp $
+--
+-- this program may be used as example main program for the
+-- Haskell XML Toolbox
+
+module Main
+where
+
+import Text.XML.HXT.Parser		-- import all stuff for parsing, validating, and transforming XML
+
+import System.IO			-- import the IO and commandline option stuff
+import System.Environment
+import System.Console.GetOpt
+import System.Exit
+
+import Data.Maybe
+import Data.Char
+import Data.List
+
+-- ------------------------------------------------------------
+
+-- |
+-- the main program
+
+main :: IO ()
+main
+    = do
+      argv <- getArgs					-- get the commandline arguments
+      al   <- cmdlineOpts argv				-- and evaluate them, return a key-value list
+      res  <- run'					-- build a XML root from the list and start parsing
+	      $ getDocumentAndGenerateHaskellCode al emptyRoot
+      exitProg (null res)				-- set return code and terminate
+
+-- ------------------------------------------------------------
+
+exitProg	:: Bool -> IO a
+exitProg True	= exitWith (ExitFailure (-1))
+exitProg False	= exitWith ExitSuccess
+
+-- ------------------------------------------------------------
+
+uppercaseInitials, namespaceAware, prefixUnderline	:: String
+
+uppercaseInitials	= "uppercase-initials"
+namespaceAware		= "namespace-aware"
+prefixUnderline		= "prefix-underline"
+
+-- ------------------------------------------------------------
+
+generateHXmlToolboxAccessFuntions	:: XmlFilter
+generateHXmlToolboxAccessFuntions t
+    = processChildren (isXDTD `guards` genHaskell) t
+    where
+    genHaskell dt
+	= cat
+	  [ code [ sepl
+		 , "--"
+		 , "-- don't edit this module"
+		 , "-- generated with " ++ progName
+		 , "-- simple access function for Haskell XML Toolbox"
+		 , "-- generated from DTD of document: " ++ show source
+		 , ""
+		 , "module " ++ hsmodul
+		 , "where"
+		 , ""
+		 , "import Text.XML.HXT.DOM.XmlTree (XmlFilter)"
+		 , "import qualified Text.XML.HXT.DOM.XmlTree as X hiding (XmlFilter)"
+		 ]
+
+          , comm "namespace declarations"
+	  , code (map nsType nsPrefixes)
+          , comm ""
+	  , code (zipWith nsDef nsPrefixes nsUris)
+
+	  , comm "element names (tag names)"
+	  , code (map (constNameType maxElemLen "tag") elements)
+          , comm ""
+	  , code (map (constNameDef  maxElemLen "tag") elements)
+
+	  , comm "isTag test filter"
+	  , code (map isTagType elements)
+          , comm ""
+	  , code (map isTagDef  elements)
+
+          , comm "make tag nodes constructor filter"
+	  , code (map mkTagType elements)
+          , comm ""
+	  , code (map mkTagDef  elements)
+
+	  , comm "attribute names"
+	  , code (map (constNameType maxAttrLen "attr") attributes)
+	  , comm ""
+	  , code (map (constNameDef  maxAttrLen "attr") attributes)
+
+	  , comm "get attribute value access filter"
+	  , code (map getValueType attributes)
+          , comm ""
+	  , code (map getValueDef  attributes)
+
+	  , comm "has attribute test filter"
+	  , code (map hasAttrType attributes)
+          , comm ""
+	  , code (map hasAttrDef  attributes)
+
+          , comm "make attribute nodes constructor filter for computed attribute values"
+	  , code (map mkAttrType attributes)
+          , comm ""
+	  , code (map mkAttrDef attributes)
+          , comm "make attribute nodes constructor filter for string attribute values"
+	  , code (map mkSAttrType attributes)
+          , comm ""
+	  , code (map mkSAttrDef attributes)
+
+	  , comm ("end of module " ++ hsmodul)
+
+	  ]
+          $ dt
+	where
+	code	= txt . concatMap (++ "\n")
+
+	comm cm	= code [ "", sepl, "--", "-- " ++ cm, ""]		-- generate a headline comment
+
+	sepl	= "-- ----------------------------------------"
+
+	nn	= trInitial . concatMap nc				-- normalize names
+
+	nc c
+	    | c `elem` ['a'..'z'] ++ ['A'..'Z'] ++ ['0'..'9'] ++ "_"	= [c]
+	    | c == ':' || c == '-'					= "_" 
+	    | otherwise							= ("_" ++) . show . fromEnum $ c
+
+	trInitial str
+	    | null str	= str
+	    | underLn	= '_' : str
+	    | upperCs	= toUpper (head str) : tail str
+	    | otherwise	= str
+
+	modname = reverse
+		  . (\ n -> if '.' `elem` n				-- remove extension
+		            then drop 1 . dropWhile (/= '.') $ n
+		            else n
+		    )
+		  . takeWhile (/= '/')					-- remove dir path
+		  . reverse
+
+        maxLen		= maximum . (0 :) . map length
+
+	padd n x	= take n (x ++ repeat ' ')
+
+        tagPrefix	= "tag"
+	attrPrefix	= "attr"
+	nsPrefix	= "ns"
+
+	tagName n	= tagPrefix  ++ nn n
+	attName a	= attrPrefix ++ nn a
+	nspName n	= nsPrefix   ++ nn n
+
+        constNameType ln prefix n
+	    = prefix ++ padd ln (nn n) ++ " :: String"
+
+	constNameDef ln prefix n
+	    = prefix ++ padd ln (nn n) ++ " =  " ++ show n
+
+        isTagType n
+	    = "is" ++ padd maxElemLen (nn n) ++ " :: XmlFilter"
+
+        isTagDef n
+	    = "is" ++ padd maxElemLen (nn n) ++ " =  " ++
+	      ( either
+		(const ("X.isTag " ++ tagPrefix ++ nn n))
+		(\ (ns, pr, lp)
+		 -> "X.isNsTag " ++ ( if null pr
+				    then tagName n
+				    else show lp
+				  ) ++ " " ++ nspName ns
+		)
+		. quName
+		$ n
+	      )
+
+        mkTagType n
+	    = "t" ++ padd maxElemLen (nn n) ++ " :: XmlFilter"
+
+        mkTagDef n
+	    = "t" ++ padd maxElemLen (nn n) ++ " = " ++
+	      ( either
+		(const ("X.etag " ++ tagName n))
+		(\ (ns, _pr, _lp)
+		 -> "X.mkXNsTag " ++ tagName n ++ " " ++ nspName ns ++ " X.none X.none"
+		)
+		. quName
+		$ n
+	      )
+
+        hasAttrType n
+	    = "has" ++ padd maxAttrLen (nn n) ++ " :: XmlFilter"
+
+        hasAttrDef n
+	    = "has" ++ padd maxAttrLen (nn n) ++ " = " ++
+	      ( either
+		(const ("X.hasAttr " ++ attName n))
+		(\ (ns, _pr, lp)
+		 -> "X.hasNsAttr " ++ show lp ++ " " ++ nspName ns
+		)
+		. quNameAttr
+	        $ n
+	      )
+
+        mkAttrType n
+	    = "af" ++ padd maxAttrLen (nn n) ++ " :: XmlFilter -> XmlFilter"
+
+        mkAttrDef n
+	    = "af" ++ padd maxAttrLen (nn n) ++ " = " ++
+	      ( either
+		(const ("X.mkXAttr " ++ attName n))
+		(\ (ns, _pr, _lp)
+		 -> "X.mkXNsAttr " ++ attName n ++ " " ++ nspName ns
+		)
+		. quNameAttr
+	        $ n
+	      )
+
+        mkSAttrType n
+	    = "a" ++ padd maxAttrLen (nn n) ++ " :: String -> XmlFilter"
+
+        mkSAttrDef n
+	    = "a" ++ padd maxAttrLen (nn n) ++ " = \\ v -> " ++
+	      ( either
+		(const ( "X.mkXAttr " ++ attName n ++ " (X.txt v)" ))
+		(\ (ns, _pr, _lp)
+		 -> "X.mkXNsAttr " ++ attName n ++ " " ++ nspName ns ++ " (X.txt v)"
+		)
+		. quNameAttr
+	        $ n
+	      )
+
+        getValueType n
+	    = "get" ++ padd maxAttrLen (nn n) ++ " :: XmlFilter"
+
+        getValueDef n
+	    = "get" ++ padd maxAttrLen (nn n) ++ " =  " ++
+	      ( either
+		(const ("X.getValue " ++ attName n))
+		(\ (ns, _pr, lp)
+		 -> "X.getNsValue " ++ show lp ++ " " ++ nspName ns
+		)
+		. quNameAttr
+		$ n
+	      )
+
+        nsType n
+	    = nsPrefix ++ padd maxNsLen (nn n) ++ " :: String"
+
+        nsDef n v
+	    = nsPrefix ++ padd maxNsLen (nn n) ++ " =  " ++ show v
+
+        source  = xshow . getValue a_source                     $ t        
+	modul	= modname . xshow . getValue a_output_file	$ t
+	root	= xshow . (isDoctype .> getDTDValue a_name)	$ dt
+	hsmodul
+	    | null modul	= "DTD" ++ nn root
+	    | otherwise		= modul
+
+	upperCs	= satisfies (hasAttr uppercaseInitials)	$ t
+	underLn	= satisfies (hasAttr prefixUnderline)	$ t
+	nsAware = satisfies (hasAttr namespaceAware)		$ t
+
+	elements							-- select all element names from dtd 
+	    = nub
+	      . sort
+	      . map ( xshow . this)
+	      . (deep isElement .> getDTDValue a_name)
+	      $ dt
+
+        maxElemLen = maxLen . map nn $ elements
+
+        attributes
+	    = nub
+	      . sort
+	      . map ( xshow . this)
+	      . (deep isAttlist .> getDTDValue a_value)
+	      $ dt
+
+        maxAttrLen = maxLen . map nn $ attributes
+
+        nsName [] = root
+	nsName n  = n
+
+        namespaces
+	    = map (\ (n,v) -> (drop 6 n, v))
+	      . map (\ t' -> (xshow . getDTDValue a_value $ t', xshow . getDTDValue a_default $ t'))
+	      . isNSAttr
+	      $ dt
+	
+        nsPrefixes = map (nsName . fst) namespaces
+        nsUris     = map snd namespaces
+
+        maxNsLen = maxLen . map nn $ nsPrefixes
+
+        quName	:: String -> Either String (String, String, String)
+	quName	n
+	    | not nsAware		 = Left n
+	    | null lp && isNothing defns = Left n
+	    | null lp                    = Right (nsName "", "", pr)
+	    |            isNothing expns = Left n
+	    |            otherwise	 = Right (nsName pr, pr, tail lp)
+	      where
+	      (pr, lp) = span (/= ':') n
+	      defns    = lookup "" namespaces
+	      expns    = lookup pr namespaces
+
+        quNameAttr	:: String -> Either String (String, String, String)
+	quNameAttr an
+	    | ':' `elem` an	= quName an
+	    | otherwise		= Left an
+
+        isNSAttr	:: XmlFilter
+	isNSAttr
+	    = deep isAttlist
+	      .>
+	      ( ( getDTDValue a_value
+		  .>
+		  isOfText (\ s' -> s' == "xmlns" || "xmlns:" `isPrefixOf` s')
+		)
+		`guards`
+		( isFixedAttrKind `guards` this)
+	      )
+              
+-- ------------------------------------------------------------
+
+-- |
+-- the /real/ main program
+--
+-- get wellformed document, validates document, propagates and check namespaces
+-- and controls output
+
+getDocumentAndGenerateHaskellCode	:: Attributes -> XmlStateFilter state
+getDocumentAndGenerateHaskellCode al
+    = parseDocument ( al
+		      ++
+		      [ (a_parse_html, v_0)
+		      , (a_canonicalize, v_0)
+		      , (a_remove_whitespace, v_0)
+		      ]
+		    )
+      .>>
+      traceMsg 1 "start processing"
+      .>>
+      liftMf generateHXmlToolboxAccessFuntions
+      .>>
+      traceMsg 1 "processing finished"
+      .>>
+      traceSource
+      .>>
+      traceTree
+      .>>
+      writeDocument [ (a_output_xml, v_0)
+		    ]
+      .>>
+      checkStatus
+
+-- ------------------------------------------------------------
+--
+-- the boring option definition and evaluation part
+--
+-- see doc for System.Console.GetOpt
+
+progName	:: String
+progName	= "DTDtoHXml"
+    
+options 	:: [OptDescr (String, String)]
+options
+    = selectOptions [ a_help
+		    ] generalOptions
+      ++
+      selectOptions [ a_trace
+		    , a_proxy
+		    , a_use_curl
+		    , a_options_curl
+		    , a_encoding
+		    , a_validate
+		    , a_check_namespaces
+		    ] inputOptions
+      ++
+      selectOptions [ a_output_file
+		    ] outputOptions
+      ++
+      [ Option "u"	[prefixUnderline]	(NoArg	(prefixUnderline,   v_1))	"separate tag and attribute names with a '_'"
+      , Option "U"	[uppercaseInitials]	(NoArg	(uppercaseInitials, v_1))	"transform the first char of tag and attribute names to uppercase"
+      , Option "N"	[namespaceAware]	(NoArg	(namespaceAware,    v_1))	"filter are namespace aware, if namespace attributes occur in the DTD"
+      ]
+      ++
+      showOptions
+
+usage		:: [String] -> IO a
+usage errl
+    | null errl
+	= do
+	  hPutStrLn stdout use
+	  exitProg False
+    | otherwise
+	= do
+	  hPutStrLn stderr (concat errl ++ "\n" ++ use)
+	  exitProg True
+    where
+    header = "DTDtoHXml - Generation of access function for the Haskell XML Toolbox from a DTD\n" ++
+             "Usage: " ++ progName ++ " [OPTION...] [URI or FILE]"
+    use    = usageInfo header options
+
+cmdlineOpts 	:: [String] -> IO (Attributes)
+cmdlineOpts argv
+    = case (getOpt Permute options argv) of
+      (ol,n,[]  )
+	  -> do
+	     sa <- src n
+	     help (lookup a_help ol)
+	     return (ol ++ sa)
+      (_,_,errs)
+	  -> usage errs
+    where
+    src []	= return [(a_source, "")]
+    src [uri]	= return [(a_source, uri)]
+    src _	= usage  ["only one input url or file allowed\n"]
+
+    help Nothing	= return ()
+    help (Just _)	= usage []
+
+-- ------------------------------------------------------------
diff --git a/examples/dtd2haskell/Makefile b/examples/dtd2haskell/Makefile
new file mode 100644
--- /dev/null
+++ b/examples/dtd2haskell/Makefile
@@ -0,0 +1,56 @@
+# $Id: Makefile,v 1.5 2005/04/14 12:52:51 hxml Exp $
+
+HXT_HOME	= ../..
+PKGFLAGS	= 
+GHCFLAGS	= -Wall -O2
+GHC		= ghc $(GHCFLAGS) $(PKGFLAGS)
+
+prog		= ./DTDtoHXT
+
+all		: $(prog)
+
+$(prog)		: $(prog).hs
+		$(GHC) --make -o $@ $<
+
+force		:
+		$(GHC) --make -o $(prog) $(prog).hs
+
+test		:
+		@echo "===> run a few generation examples"
+		$(MAKE) XHTML.o XHTML2.o XHTML3.o
+		@echo "===> the generated modules"
+		ls -l XHTML*.hs XHTML*.o
+
+EX1		= ../xhtml/xhtml.xml
+EX2		= ../photoalbum/photos.xml
+
+XHTML.o		: $(prog) $(EX1)
+		@echo "===> generate a module for XHTML access function from the XHTML DTD with naming convention is<Tag>, get<Attr>, ..."
+		$(prog) --output-file XHTML.hs --uppercase-initials $(EX1)
+		$(GHC) -c XHTML.hs
+
+XHTML2.o	: $(prog) $(EX1)
+		@echo "===> generate a module for XHTML access function from the XHTML DTD with naming convention is_<tag>, get_<attr>, ..."
+		$(prog) --output-file XHTML2.hs --prefix-underline $(EX1)
+		$(GHC) -c XHTML2.hs
+
+XHTML3.o	: $(prog) $(EX1)
+		@echo "===> same as test2, but with namespace aware access functions, if xmlns is used in DTD"
+		$(prog) --output-file XHTML3.hs --prefix-underline --namespace-aware $(EX1)
+		$(GHC) -c XHTML3.hs
+
+Photo.hs	: $(prog) $(EX2)
+		$(prog) --output-file $@ --uppercase-initials $(EX2)
+
+
+DIST		= $(HXT_HOME)/dist/examples
+DIST_DIR	= $(DIST)/dtd2haskell
+DIST_FILES	= $(prog).hs Makefile
+
+dist		:
+		[ -d $(DIST_DIR) ] || mkdir -p $(DIST_DIR)
+		cp $(DIST_FILES) $(DIST_DIR)
+
+clean		:
+		rm -f $(prog) XHTML*.hs *.o *.hi
+
diff --git a/examples/hfilter/FilterExample.hs b/examples/hfilter/FilterExample.hs
new file mode 100644
--- /dev/null
+++ b/examples/hfilter/FilterExample.hs
@@ -0,0 +1,172 @@
+-- |
+-- HXPath - XPath Evaluator of the Haskell XML Toolbox
+--
+-- Author : Torben Kuseler, Uwe Schmidt
+--
+-- Version : $Id: FilterExample.hs,v 1.9 2004/09/02 19:11:50 hxml Exp $
+
+module Main(main)
+where
+
+import Text.XML.HXT.Parser		-- import all stuff for parsing, validating, and transforming XML
+
+import System.IO			-- import the IO and commandline option stuff
+import System.Environment
+import System.Console.GetOpt
+import System.Exit
+
+import Network.URI
+
+import Data.Maybe
+
+
+-- ------------------------------------------------------------
+
+-- |
+-- the main program of the Filter example 
+
+main :: IO ()
+main
+    = do
+      argv <- getArgs
+      al   <- cmdlineOpts argv
+      res  <- run' $ filterEx al emptyRoot
+      exitProg (null res)				-- set return code and terminate
+
+-- ------------------------------------------------------------
+
+exitProg	:: Bool -> IO a
+exitProg True	= exitWith (ExitFailure (-1))
+exitProg False	= exitWith ExitSuccess
+
+-- ------------------------------------------------------------
+
+-- |
+-- the /real/ main program
+--
+-- runs in the trivial XmlState monad (with user state set to ())
+-- so IO and access to global options is possible
+
+filterEx	:: Attributes -> XmlStateFilter state
+filterEx al
+    = parseDocument al
+      .>>
+      liftMf filterDocument
+      .>>
+      writeDocument []
+      .>>
+      checkStatus
+
+-- ------------------------------------------------------------
+--
+-- some simple selection and editing filter
+
+filterDocument	:: XmlFilter		-- the main processing filter
+filterDocument t
+    = processChildren (filterexamples xf) t
+      where
+      xf = xshow . getValue "filter" $ t
+
+filterexamples	:: String -> XmlFilter
+filterexamples "all-text"				= deep isXText
+filterexamples "all-body-text-without-whitespace"	= getAllBodyText
+filterexamples "all-a-tags-with-href-attr"		= getAllTagsWithAttr "a" "href"
+filterexamples "all-href-values-of-a-tags"		= getAllAttrValues   "a" "href"
+filterexamples "change-img-src-to-abs-uri"		= changeToAbsolutURIs "http://localhost/images/" "img" "src"
+filterexamples f					= cmt ("error: " ++ f ++ " not defined") +++ this
+
+getAllBodyText		:: XmlFilter
+getAllBodyText
+    = isTag "html" .> getChildren .> isTag "body" .> getChildren .> deep (isOfText noWhiteSpace)
+      where
+      noWhiteSpace = not . all (`elem` " \t\n")
+
+getAllTagsWithAttr	:: String -> String -> XmlFilter
+getAllTagsWithAttr tn an
+    = multi (isTag tn .> hasAttr an)
+
+getAllAttrValues	:: String -> String -> XmlFilter
+getAllAttrValues tn an
+    = multi (isTag tn .> getValue an)
+
+changeToAbsolutURIs	:: String -> String -> String -> XmlFilter
+changeToAbsolutURIs base tn an
+    = processTopDown (changeURI `when` isTag tn)
+      where
+      changeURI    = modifyAttr an (toAbsURI base)
+
+toAbsURI	:: String -> String -> String
+toAbsURI base uri
+    = fromMaybe "" $ expand
+    where
+    expand = do
+	     base' <- parseURI base
+	     uri'  <- parseURI uri
+	     abs'  <- relativeTo uri' base'
+	     return $ show abs'
+
+-- ------------------------------------------------------------
+--
+-- the options definition part
+-- see doc for System.Console.GetOpt
+
+progName	:: String
+progName	= "HXmlFilter"
+    
+options 	:: [OptDescr (String, String)]
+options
+    = generalOptions
+      ++
+      inputOptions
+      ++
+      outputOptions
+      ++
+      [ Option "f"	["filter"]		(ReqArg flt "FILTER")			( "filter to be applied, one of: " ++ nl ++
+											  "\"all-text\"," ++ nl ++
+											  "\"all-body-text-without-whitespace\"," ++ nl ++
+											  "\"all-a-tags-with-href-attr\"," ++ nl ++
+											  "\"all-href-values-of-a-tags\"," ++ nl ++
+											  "\"change-img-src-to-abs-uri\"" )
+      ]
+      ++
+      showOptions
+    where
+    nl = "\n\t\t\t\t\t  "
+    att n v	= (n, v)
+    flt = att "filter"
+
+
+usage		:: [String] -> IO a
+usage errl
+    | null errl
+	= do
+	  hPutStrLn stdout use
+	  exitProg False
+    | otherwise
+	= do
+	  hPutStrLn stderr (concat errl ++ "\n" ++ use)
+	  exitProg True
+    where
+    header = "FilterExamples - Examples for applying XML filter from the Haskell XML Toolbox\n" ++
+             "Usage: " ++ progName ++ " [OPTION...] [URI or FILE]"
+    use    = usageInfo header options
+
+cmdlineOpts 	:: [String] -> IO (Attributes)
+cmdlineOpts argv
+    = case (getOpt Permute options argv) of
+      (ol,n,[]  )
+	  -> do
+	     sa <- src n
+	     help (lookup a_help ol)
+	     return (ol ++ sa)
+      (_,_,errs)
+	  -> usage errs
+    where
+    src []	= return [("source", "")]
+    src [uri]	= return [("source", uri)]
+    src _	= usage ["only one input uri or file allowed\n"]
+
+    help Nothing	= return ()
+    help (Just _)	= usage []
+
+-- ------------------------------------------------------------
diff --git a/examples/hfilter/Makefile b/examples/hfilter/Makefile
new file mode 100644
--- /dev/null
+++ b/examples/hfilter/Makefile
@@ -0,0 +1,63 @@
+# $Id: Makefile,v 1.7 2005/04/14 12:52:51 hxml Exp $
+
+HXT_HOME	= ../..
+PKGFLAGS	= 
+GHCFLAGS	= -Wall -O2
+GHC		= ghc $(GHCFLAGS) $(PKGFLAGS)
+
+prog		= ./FilterExample
+opts		= --parse-html --do-not-issue-warnings
+runprog		= $(prog) $(opts)
+
+all		: $(prog)
+
+force		:
+		$(GHC) --make -o $(prog) $(prog).hs
+
+$(prog)		: $(prog).hs
+		$(GHC) --make -o $@ $<
+
+EX		= ./lousy.html
+
+test		: $(prog)
+		@echo "===> Filter examples"
+		@echo ; echo "===> the filter parses a document and selects or modifies parts of it"
+		@echo ; echo "===> usage" ; echo
+		./FilterExample --help
+		@echo ; sleep 2
+		@$(MAKE) test1 test2 test3 test4 test5
+
+test1		:
+		@sleep 2 ; echo ; echo "===> extract all a tags with a href attribute" ; echo ; sleep 2
+		$(runprog) --filter=all-a-tags-with-href-attr $(EX)
+		@echo
+
+test2		:
+		@sleep 2 ; echo ; echo "===> extract all href attribute values for a tags" ; echo ; sleep 2
+		$(runprog) --filter=all-href-values-of-a-tags $(EX)
+		@echo
+
+test3		:
+		@sleep 2 ; echo ; echo "===> change all src attribute values of img tags to absolut uris" ; echo ; sleep 2
+		$(runprog) --filter=change-img-src-to-abs-uri $(EX)
+		@echo
+
+test4		:
+		@sleep 2 ; echo ; echo "===> select all text" ; echo ; sleep 2
+		$(runprog) --filter=all-text $(EX)
+		@echo
+
+test5		:
+		@sleep 2 ; echo ; echo "===> select all text within body, but remove whitespace" ; echo ; sleep 2
+		$(runprog) --filter=all-body-text-without-whitespace $(EX)
+		@echo
+
+DIST		= $(HXT_HOME)/dist/examples
+DIST_DIR	= $(DIST)/hfilter
+
+dist		:
+		[ -d $(DIST_DIR) ] || mkdir -p $(DIST_DIR)
+		cp $(EX) Makefile $(prog).hs $(DIST_DIR)
+
+clean		:
+		rm -f $(prog) *.o *.hi
diff --git a/examples/hfilter/lousy.html b/examples/hfilter/lousy.html
new file mode 100644
--- /dev/null
+++ b/examples/hfilter/lousy.html
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>A HTML Documents with some Errors</title>
+  </head>
+
+  <body>
+    <h1>HTML
+    <h2>html
+	<p>some text and a &xxx;
+	  <p>more text
+	    </p
+    <img alt='&lt; &yyy; &gt;' src="abc.gif">
+    <table border>
+    <tr><td>1<td>2<td>3
+    </table>
+
+
+    <hr>
+    <address><a href="mailto:uwe@muehle.welt.all">Uwe
+		Schmidt</a></address>
+<!-- Created: Tue Apr 29 16:07:57 CEST 2003 -->
+<!-- hhmts start -->
+Last modified: Mon May 12 13:11:29 CEST 2003
+<!-- hhmts end -->
+</html>
diff --git a/examples/hparser/HXmlParser.hs b/examples/hparser/HXmlParser.hs
new file mode 100644
--- /dev/null
+++ b/examples/hparser/HXmlParser.hs
@@ -0,0 +1,136 @@
+-- |
+-- HXmlParser - Validating XML Parser of the Haskell XML Toolbox
+-- XML well-formed checker and validator.
+--
+-- Author : .\\artin Schmidt and Uwe Schmidt
+--
+-- Version : $Id: HXmlParser.hs,v 1.14 2005/04/14 12:52:51 hxml Exp $
+--
+-- this program may be used as example main program for the
+-- Haskell XML Toolbox
+
+module Main
+where
+
+import Text.XML.HXT.Parser		-- import all stuff for parsing, validating, and transforming XML
+
+import System.IO			-- import the IO and commandline option stuff
+import System.Environment
+import System.Console.GetOpt
+import System.Exit
+
+import Data.Maybe
+
+-- ------------------------------------------------------------
+
+-- |
+-- the main program of the Haskell XML Validating Parser
+
+main :: IO ()
+main
+    = do
+      argv <- getArgs					-- get the commandline arguments
+      al   <- cmdlineOpts argv				-- and evaluate them, return a key-value list
+      res  <- run' $ parser al emptyRoot		-- build a XML root from the list and start parsing
+      exitProg (null res)				-- set return code and terminate
+
+-- ------------------------------------------------------------
+
+exitProg	:: Bool -> IO a
+exitProg True	= exitWith (ExitFailure (-1))
+exitProg False	= exitWith ExitSuccess
+
+-- ------------------------------------------------------------
+
+-- |
+-- the /real/ main program
+--
+-- get wellformed document, validates document, propagates and check namespaces
+-- and controls output
+
+parser	:: Attributes -> XmlStateFilter state
+parser al
+    = parseDocument al					-- read document
+      .>>
+      traceMsg 1 "start processing"
+      .>>
+      liftMf processDocument				-- process document: in this case rather simple, just apply a pure filter
+      .>>
+      traceMsg 1 "processing finished"
+      .>>
+      traceSource
+      .>>
+      traceTree
+      .>>
+      ( writeDocument []				-- write result, all options already set with parseDocument
+	`whenNotM`
+	hasAttr "no-output"
+      )
+      .>>
+      checkStatus					-- check status
+
+processDocument	:: XmlFilter
+processDocument
+    = ( processChildren (deep isXText)			-- process document, just select text when option \"show-text\" is set
+	`when`
+	hasAttr "show-text"
+      )
+
+-- ------------------------------------------------------------
+--
+-- the options definition part
+-- see doc for System.Console.GetOpt
+
+progName	:: String
+progName	= "HXmlParser"
+    
+options 	:: [OptDescr (String, String)]
+options
+    = generalOptions
+      ++
+      inputOptions
+      ++
+      outputOptions
+      ++
+      [ Option "q"	["no-output"]		(NoArg  ("no-output", "1"))	"no output of resulting document"
+      , Option "x"	["show-text"]		(NoArg	("show-text", "1"))	"output only the raw text, remove all markup"
+      ]
+      ++
+      showOptions
+
+usage		:: [String] -> IO a
+usage errl
+    | null errl
+	= do
+	  hPutStrLn stdout use
+	  exitProg False
+    | otherwise
+	= do
+	  hPutStrLn stderr (concat errl ++ "\n" ++ use)
+	  exitProg True
+    where
+    header = "HXmlParser - Validating XML Parser of the Haskell XML Toolbox\n" ++
+             "XML well-formed checker and validator.\n\n" ++
+             "Usage: " ++ progName ++ " [OPTION...] [URI or FILE]"
+    use    = usageInfo header options
+
+cmdlineOpts 	:: [String] -> IO (Attributes)
+cmdlineOpts argv
+    = case (getOpt Permute options argv) of
+      (ol,n,[])
+	  -> do
+	     sa <- src n
+	     help (lookup a_help ol) sa
+	     return (ol ++ sa)
+      (_,_,errs)
+	  -> usage errs
+    where
+    src []	= return []
+    src [uri]	= return [("source", uri)]
+    src _	= usage ["only one input uri or file allowed\n"]
+
+    help (Just _) _	= usage []
+    help Nothing []	= usage ["no input uri or file given\n"]
+    help Nothing _	= return ()
+
+-- ------------------------------------------------------------
diff --git a/examples/hparser/Makefile b/examples/hparser/Makefile
new file mode 100644
--- /dev/null
+++ b/examples/hparser/Makefile
@@ -0,0 +1,111 @@
+# $Id: Makefile,v 1.7 2005/04/14 12:52:51 hxml Exp $
+
+HXT_HOME	= ../..
+PKGFLAGS	=
+GHCFLAGS	= -Wall -O2
+GHC		= ghc $(GHCFLAGS) $(PKGFLAGS)
+
+prog		= ./HXmlParser
+
+all	: $(prog)
+
+HXmlParser	: HXmlParser.hs
+		$(GHC) --make -o $@ $<
+
+force		:
+		$(GHC) --make -o $(prog) $(prog).hs
+
+test		:
+		@echo "===> run a few simple test cases with the validating parser"
+		@echo "===> first see all command line options"
+		./HXmlParser --help
+		@echo
+		$(MAKE) test0 test1 test2 test3 test4
+
+EX1		= ./example1.xml
+EXi		= ./invalid.xml
+EX2		= ../xhtml/xhtml.xml
+EX3		= ./namespace0.xml
+EX3a		= ./namespace1.xml
+EX4		= ./lousy.html
+
+EX		= $(EX1) $(EXi) $(EX3) $(EX3a) $(EX4)
+
+test0		: HXmlParser
+		@echo "===> a 1. simple valid document"
+		./HXmlParser $(EX1)
+		@echo
+		@echo "===> the dom tree of the same document (without any redundant whitespace)"
+		./HXmlParser --show-tree --remove-whitespace $(EX1)
+		@echo
+		@echo "===> the next test case contains validation erors, it must fail"
+		./HXmlParser --verbose $(EXi) || true
+		@echo
+		@echo "===> same source, but only wellformed check"
+		./HXmlParser --do-not-validate $(EXi) || true
+		@echo
+		@echo "===> only validation, no output of an XHTML source"
+		./HXmlParser --verbose --no-output $(EX2)
+		@echo
+
+test1		: HXmlParser
+		@echo "===> the source of a very simple valid document" ; echo ; sleep 2
+		cat $(EX1)
+		@sleep 2 ; echo ; echo "===> parser will emit UTF-8" ; echo ; sleep 2
+		./HXmlParser --output-encoding=UTF-8 $(EX1)
+		@echo
+		@sleep 2 ; echo ; echo "===> once again with ISO-8859-1 (latin1) output" ; echo ; sleep 2
+		./HXmlParser --output-encoding=ISO-8859-1 $(EX1)
+		@echo
+		@sleep 2 ; echo ; echo "===> once again with US-ASCII output" ; echo ; sleep 2
+		./HXmlParser --output-encoding=US-ASCII $(EX1)
+		@echo
+		@sleep 2 ; echo ; echo "===> once again with hdom tree output" ; echo ; sleep 2
+		./HXmlParser --show-tree --output-encoding=ISO-8859-1 $(EX1)
+		@echo
+		@sleep 2 ; echo ; echo "===> once again, but without any markup" ; echo ; sleep 2
+		./HXmlParser --show-text --output-encoding=ISO-8859-1 $(EX1)
+		@echo
+
+test2		: HXmlParser
+		@echo "===> the source of a xhtml document" ; echo ; sleep 2
+		cat $(EX2)
+		@echo "that document has" `cat $(EX2) | wc -l` "lines"
+		@sleep 2 ; echo ; echo "===> parser will validate this document and try to indent the output" ; echo ; sleep 2
+		./HXmlParser --indent $(EX2)
+		@sleep 2 ; echo ; echo "===> once again, but remove all markup" ; echo ; sleep 2
+		./HXmlParser --show-text --remove-whitespace $(EX2)
+		@sleep 2 ; echo ; echo "===> once again with hdom tree output" ; echo ; sleep 2
+		./HXmlParser --show-tree --remove-whitespace $(EX2)
+
+test3		: HXmlParser
+		@echo "===> namespace processing examples" ; echo ; sleep 2
+		@echo "===> namespace propagation test" ; echo ; sleep 2
+		./HXmlParser --verbose --check-namespaces  --indent --output-encoding=ISO-8859-1 $(EX3)
+		@echo
+		@echo ; sleep 2 ; echo "===> namespace propagation test: tree output with attached namespaces" ; echo ; sleep 2
+		./HXmlParser --verbose --check-namespaces  --remove-whitespace --show-tree --output-encoding=ISO-8859-1 $(EX3)
+		@echo
+		@echo ; sleep 2 ; echo "===> namespace validation test: this test produces namespace errors" ; echo ; sleep 2
+		./HXmlParser --verbose --do-not-validate --check-namespaces --indent --output-encoding=ISO-8859-1 $(EX3a) || true
+		@echo
+
+
+test4		: HXmlParser
+		@echo "===> HTML parsing examples" ; echo ; sleep 2
+		@echo "===> the source of a lousy html document" ; echo ; sleep 2
+		cat $(EX4)
+		@sleep 2 ; echo ; echo "===> parser accepts this document and tries to build a document tree" ; echo ; sleep 2
+		./HXmlParser --indent --preserve-comment --parse-html $(EX4)
+		@echo
+
+DIST		= $(HXT_HOME)/dist/examples
+DIST_DIR	= $(DIST)/hparser
+
+dist		:
+		[ -d $(DIST_DIR) ] || mkdir -p $(DIST_DIR)
+		cp $(EX) Makefile $(prog).hs $(DIST_DIR)
+
+clean		:
+		rm -f $(prog) *.o *.hi
+
diff --git a/examples/hparser/example1.xml b/examples/hparser/example1.xml
new file mode 100644
--- /dev/null
+++ b/examples/hparser/example1.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<!DOCTYPE a [
+<!ATTLIST a  att1  NMTOKENS  #IMPLIED
+             att2  ID        #REQUIRED>
+<!ATTLIST b  btt2  ID        #REQUIRED
+             btt3  IDREF     #REQUIRED>
+<!ELEMENT a  (b, cü?)>
+<!ELEMENT b  EMPTY>
+<!ELEMENT cü (#PCDATA)>
+]>
+
+<?pi a processing instruction?>
+
+<a att1=" test
+          äöüß
+          test "
+   att2="root"
+>
+    <b btt2="b1" btt3="root"/>
+    <cü>hello world äöüß test</cü>
+</a>
diff --git a/examples/hparser/invalid.xml b/examples/hparser/invalid.xml
new file mode 100644
--- /dev/null
+++ b/examples/hparser/invalid.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+
+<!DOCTYPE a [
+<!ATTLIST a  att1  CDATA  #IMPLIED>
+<!ELEMENT a  (z, c?)>
+<!ELEMENT b  EMPTY>
+<!ELEMENT c  (#PCDATA)>
+]>
+
+<a att2="test">
+    <y/>
+    <c>hello world</c>
+</a>
diff --git a/examples/hparser/lousy.html b/examples/hparser/lousy.html
new file mode 100644
--- /dev/null
+++ b/examples/hparser/lousy.html
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+  <head>
+    <title>A HTML Documents with some Errors</title>
+  </head>
+
+  <body>
+    <h1>HTML
+    <h2>html
+	<p>some text and a &xxx;
+	  <p>more text
+	    </p
+    <img alt='&lt; &yyy; &gt;' src="abc.gif">
+    <table border>
+    <tr><td>1<td>2<td>3
+    </table>
+
+
+    <hr>
+    <address><a href="mailto:uwe@muehle.welt.all">Uwe
+		Schmidt</a></address>
+<!-- Created: Tue Apr 29 16:07:57 CEST 2003 -->
+<!-- hhmts start -->
+Last modified: Mon May 12 13:11:29 CEST 2003
+<!-- hhmts end -->
+</html>
diff --git a/examples/hparser/namespace0.xml b/examples/hparser/namespace0.xml
new file mode 100644
--- /dev/null
+++ b/examples/hparser/namespace0.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
+
+<!DOCTYPE a [
+<!ATTLIST a  x:att1  NMTOKENS  #IMPLIED>
+<!ATTLIST a  x:att2  NMTOKENS  #IMPLIED>
+<!ATTLIST a  y:att3  CDATA  #FIXED "a fixed value">
+<!ATTLIST a  att4  CDATA  "&lt; default &gt;">
+<!ATTLIST a  att5  CDATA #IMPLIED>
+<!ATTLIST a  xmlns   CDATA #IMPLIED>
+<!ATTLIST a  xmlns:x CDATA #IMPLIED>
+<!ATTLIST a  xmlns:y CDATA #IMPLIED>
+<!ELEMENT a  (x:b, cü?)>
+<!ELEMENT x:b  EMPTY>
+<!ELEMENT cü  (#PCDATA)>
+]>
+
+<!-- some namespace declarations for testing namespace propagation -->
+<a xmlns="default namespace"
+   xmlns:x="namespace for x"
+   xmlns:y="namespace for y"
+   x:att2="xxx
+           yyy"
+   y:att3="a fixed value"
+   x:att1=" test
+            äöüß
+            test "
+   att5="&lt; &gt;"
+>
+    <x:b/>
+    <cü>hello world äöüß test</cü>
+</a>
diff --git a/examples/hparser/namespace1.xml b/examples/hparser/namespace1.xml
new file mode 100644
--- /dev/null
+++ b/examples/hparser/namespace1.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
+
+<!-- $Id: namespace1.xml,v 1.1 2004/03/03 12:52:19 hxml Exp $ -->
+
+<!DOCTYPE a [
+<!ATTLIST a xmlns   CDATA #IMPLIED>
+<!ATTLIST a xmlns:d CDATA #IMPLIED>
+<!ATTLIST a xmlns:x CDATA #IMPLIED>
+<!ATTLIST a xmlns:y CDATA #IMPLIED>
+<!ATTLIST a xmlns:z CDATA #IMPLIED>
+<!ELEMENT a ANY>
+
+<!-- error: a DTD part contains a not wellformed qualified Name: "a:b:c" -->
+<!ELEMENT a:b:c ANY>
+
+<!-- error: an ATTLIST declaration contains as attribute name a not wellformed qualified Name: "x:y:z" -->
+<!ATTLIST a:b:c x:y:z CDATA #IMPLIED>
+
+<!-- error: an entity or notation declaration contains a not wellformed NCName: "xyz:abc" -->
+<!ENTITY xyz:abc "123">
+<!ENTITY % xxx:yyy "zzz">
+
+]>
+
+<!-- everythin is legal here -->
+<a
+   xmlns  ="default namespace"
+   xmlns:d="default namespace"
+   xmlns:x="namespace for x"
+   xmlns:y="namespace common for y and z"
+   xmlns:z="namespace common for y and z"
+
+     att1="abc"
+   x:att1="xxx yyy"
+   y:att1="abc">
+
+  <!-- legal -->
+  <d:b attr2="xxx" d:attr2="yyy" xml:lang="de"/>
+
+  <!-- 4 x error: tag name "..." is not a wellformed qualified name -->
+  <d:tag:name/><:tag/><:/><:::/>
+
+  <!-- error: namespace for prefix in tag name "a:a" is undefined -->
+  <a:a/>
+
+  <!-- error: multiple occurences of universal names for attributes of tag "d:b" : "{namespace common for y and z}att2" -->
+  <d:b y:att2="y" z:att2="z"/>
+
+  <!-- 4 x error: attribute name "..." is not a wellformed qualified name -->
+  <d:b d:attr:name="" :attr="" :="" :::=""/>
+
+  <!-- error: namespace value of namespace declaration for "xmlns:x" has no value -->
+  <d:b xmlns:x=""/>
+
+  <!-- error: illegal namespace declaration with reserved prefix "..." starting with "xml" -->
+  <d:b xmlns:xml="something else"/><d:b xmlns:xml123="something else"/>
+
+  <!-- error: a PI contains a not wellformed NCName: "pi:pi" -->
+  <?pi:pi ?>
+</a>
diff --git a/examples/hsvg/.ghci b/examples/hsvg/.ghci
new file mode 100644
--- /dev/null
+++ b/examples/hsvg/.ghci
@@ -0,0 +1,11 @@
+:set -package-conf ../../lib/hxt/package.conf
+:set -package hxt
+:set -Wall
+
+:def ex0 (\ _ -> return ":set args --trace=1 --encoding=ISO-8859-1 --do-not-validate -o ISO-8859-1 example1.xml")
+
+:def x (\ _ -> return ":load TreeVisualisation\n:ex0\nmain")
+
+:x
+
+:module + IO Main
diff --git a/examples/hsvg/Makefile b/examples/hsvg/Makefile
new file mode 100644
--- /dev/null
+++ b/examples/hsvg/Makefile
@@ -0,0 +1,83 @@
+# $Id: Makefile,v 1.7 2006/06/01 15:03:21 hxml Exp $
+
+HXT_HOME	= ../..
+PKGFLAGS	= 
+GHCFLAGS	= -Wall -O2
+GHC		= ghc $(GHCFLAGS) $(PKGFLAGS)
+
+prog		= ./TreeVisualisation
+
+all		: $(prog)
+
+force		:
+		$(GHC) --make -o $(prog) $(prog).hs
+
+$(prog)		: $(prog).hs
+		$(GHC) --make -o $@ $<
+
+# Tree Visualisation Examples
+
+proxy		:= $(shell if [ `hostname` = "si" ] ; then echo -n "--proxy=www-cache.fh-wedel.de:3128" ; else echo -n ; fi)
+
+HTV		= $(prog) -t1 --use-curl --options-curl="-L" --encoding=ISO-8859-1 --parse-html --do-not-issue-warnings --remove-whitespace
+XTV		= $(prog) -t1 --use-curl --do-not-validate --do-not-issue-warnings --remove-whitespace
+
+JPGS		= index.html.jpg \
+		  www.fh-wedel.de.index.html.jpg \
+		  www.w3.org.index.html.jpg \
+		  www.haskell.org.index.html.jpg
+
+vtree		: $(prog) $(JPGS)
+
+index.html.svg	: $(HXT_HOME)/doc/index.html
+		@echo "get Haskell XML Toolbox homepage"
+		$(HTV) --width=800 --height=400 \
+			 $< > $@
+
+www.fh-wedel.de.index.html.svg	:
+		@echo "get FH Wedel homepage"
+		$(HTV) --horizontalTree --horizontalLines --width=600 --height=800 --border 30 \
+			 http://www.fh-wedel.de/ > $@
+
+www.w3.org.index.html.svg	:
+		@echo "get www.w3.org"
+		$(XTV) --centricTree --withAttr --width=1000 --height=1000 $(proxy) \
+			 http://www.w3.org/ > $@
+
+www.haskell.org.index.html.svg	:
+		@echo "get www.haskell.org"
+		$(HTV) --horizontalLines --withAttr --width=600 --height=400 $(proxy) \
+			 http://www.haskell.org/haskellwiki/Haskell > $@
+
+%.jpg		: %.svg
+		svgtoraster -m image/jpeg -q 0.7 `pwd`/$<
+
+%.png		: %.svg
+		svgtoraster -m image/png `pwd`/$<
+
+
+test		:
+		$(MAKE) index.html.svg
+
+DIST		= $(HXT_HOME)/dist/examples
+DIST_DIR	= $(DIST)/hsvg
+DIST_FILES	= $(prog).hs Makefile .ghci
+
+dist		:
+		[ -d $(DIST_DIR) ] || mkdir -p $(DIST_DIR)
+		cp $(DIST_FILES) $(DIST_DIR)
+
+clean		:
+		rm -f $(prog) *.o *.hi *.jpg *.png
+
+cleanvt		:
+		rm -f \
+		  index.html.jpg \
+		  www.fh-wedel.de.index.html.jpg \
+		  www.w3.org.index.html.jpg \
+		  www.haskell.org.index.html.jpg \
+		  index.html.svg \
+		  www.fh-wedel.de.index.html.svg \
+		  www.w3.org.index.html.svg \
+		  www.haskell.org.index.html.svg
+
diff --git a/examples/hsvg/TreeVisualisation.hs b/examples/hsvg/TreeVisualisation.hs
new file mode 100644
--- /dev/null
+++ b/examples/hsvg/TreeVisualisation.hs
@@ -0,0 +1,449 @@
+-- |
+-- TreeVisualisation - A Haskell XML Toolbox application for
+-- a graphic representation of n-ary trees, e.g. XmlTrees
+-- with SGML. Input is a XML or HTML document, output a SGML document
+-- consisting of a graphical representation of the tree
+--
+-- Author: Uwe Schmidt uwe@fh-wedel.de
+--
+-- Version : $Id: TreeVisualisation.hs,v 1.9 2004/09/02 19:11:50 hxml Exp $
+
+module Main where
+
+import Text.XML.HXT.Parser
+
+import System.IO
+import System.Environment
+import System.Console.GetOpt
+
+import System.Exit
+
+import Data.Maybe
+
+-- ----------------------------------------------------------
+
+-- |
+-- compute a layout tree for a given NTree
+--
+-- the layout tree has a stucture isomophic to the input tree
+-- the layout is a pair of (x,y) coordinates. for every node
+-- a weight is computed, the space for a tree will be proprtional to
+-- the sum of the weight in the tree
+
+treeToWeightedTree	:: (Num b) => (a -> b) -> NTree a -> NTree (b, b)
+treeToWeightedTree wf (NTree n cs)
+    = (NTree (wot, woc) cs')
+      where
+      cs' = map (treeToWeightedTree wf) cs
+      woc = sum . map (\ (NTree (sum', _) _) -> sum') $ cs'
+      wot = woc + wf n
+
+-- |
+-- auxiliary function called by 'horizontalLayout' for doint the hard work
+
+weightedTreeToHLayout	:: (Fractional a) => a -> a -> NTree (a,a) -> NTree (a,a)
+weightedTreeToHLayout from to (NTree (_wot, woc) cs)
+    = NTree (from, to) cs'
+      where
+      len = to - from
+      cs' = layoutChildren (fromInteger 0) cs
+      layoutChildren _ []
+	  = []
+      layoutChildren start (t1@(NTree (wot1, _woc1) _cs1) : ts)
+	  = weightedTreeToHLayout from' to' t1 : layoutChildren start' ts
+	    where
+	    from'  = (start  / woc) * len + from
+	    to'    = (start' / woc) * len + from
+	    start' = start + wot1
+      
+-- |
+-- A horizontal layout for a tree generated with 'treeToWeightedTree'
+-- is computed. The nodes are positioned in the unit square ((0,0),(1,1))
+-- with the origin in the left upper corner. The root node is centered
+-- at the top of the square
+
+horizontalLayout	:: (Fractional b) => (a -> b) -> NTree a -> NTree (b,b)
+horizontalLayout weightFct
+    = weightedTreeToHLayout (fromInteger 0) (fromInteger 1) . treeToWeightedTree weightFct
+
+-- |
+-- layout of a tree in a 1.0 x 1.0 square
+-- with the root node centered at the top and the
+-- deepest leaves at the bottom
+
+vTreeLayout		:: (Fractional b) => (a -> b) -> NTree a -> NTree (b,b)
+vTreeLayout weightFct t
+    = vLayout (0::Int) . horizontalLayout weightFct $ t
+      where
+      d = (depthNTree t - 1) `max` 1
+      vLayout i (NTree (l,u) cs)
+	  = NTree (x, y) cs'
+	    where
+	    x = (l + u) / fromInteger 2
+	    y = fromInteger (toInteger i) / fromInteger (toInteger d)
+	    cs' = map (vLayout (i + 1)) cs
+
+mirrorLayout		:: NTree (a,a) -> NTree (a,a)
+mirrorLayout
+    = mapNTree (\ (x,y) -> (y, x))
+      
+scaleLayout	:: (RealFrac a) => Int -> Int -> Int -> NTree (a,a) -> NTree (Int,Int)
+scaleLayout border dx dy
+    = mapNTree scale
+      where
+      scale (x,y) = (truncate (x * dx') + border, truncate (y * dy') + border)
+      dx' = fromIntegral (dx - 2 * border)
+      dy' = fromIntegral (dy - 2 * border)
+
+centricLayout	:: (Floating a) => NTree (a,a) -> NTree (a,a)
+centricLayout
+    = mapNTree center
+      where
+      center (x, y)
+	  = ((x' + 1) /2, (y' + 1) /2)
+	    where
+	    phi = (2 * x - 0.5) * pi
+	    r   = y
+	    x'  = cos phi * r
+	    y'  = sin phi * r
+-- |
+-- map nodes of a NTree to SVG tags
+
+mapNodesToXml	:: (a -> (Int, Int) -> XmlTrees) -> NTree a -> NTree (Int, Int) -> XmlTrees
+mapNodesToXml formatNode layoutTree orgTree
+    = concat . zipWith formatNode (nTreeToList layoutTree) $ (nTreeToList orgTree)
+
+mapNodesToSVG	:: (a -> XmlFilter) -> NTree a -> NTree (Int, Int) -> XmlTrees
+mapNodesToSVG circleLayout
+    = mapNodesToXml drawNode
+      where
+      drawNode n (x,y)
+	  = atag "circle" [ sattr "cx" (show x)
+			  , sattr "cy" (show y)
+			  , circleLayout n
+			  ] $ undefined
+
+mapEdgesToSVG	:: ((Int, Int) -> (Int, Int) -> XmlTrees) -> NTree (Int, Int) -> XmlTrees
+mapEdgesToSVG draw (NTree p1 cs)
+    = concatMap (\ t' -> mkLine t' ++ mapEdgesToSVG draw t') cs
+      where
+      mkLine (NTree p2 _) = draw p1 p2
+
+drawLine	:: XmlFilter -> (Int, Int) -> (Int, Int) -> XmlTrees
+drawLine lineAttrl p1 p2
+    = drawLines lineAttrl [p1,p2]
+
+drawHPath	:: XmlFilter -> (Int, Int) -> (Int, Int) -> XmlTrees
+drawHPath lineAttrl p1@(x1, y1) p2@(x2, y2)
+    = drawLines lineAttrl [p1, (x1,y12), (x2,y12), p2]
+      where
+      y12 = (y1 + y2) `div` 2
+
+drawVPath	:: XmlFilter -> (Int, Int) -> (Int, Int) -> XmlTrees
+drawVPath lineAttrl p1@(x1, y1) p2@(x2, y2)
+    = drawLines lineAttrl [p1, (x12,y1), (x12,y2), p2]
+      where
+      x12 = (x1 + x2) `div` 2
+
+drawLines	:: XmlFilter -> [(Int, Int)] -> XmlTrees
+drawLines attl ps
+    = concat . zipWith draw ps $ tail ps
+      where
+      draw (x1, y1) (x2, y2)
+	  = atag "line" [ sattr "x1" (show x1)
+			, sattr "y1" (show y1)
+			, sattr "x2" (show x2)
+			, sattr "y2" (show y2)
+			, attl
+			] $ undefined
+
+-- |
+-- filter for copying the attributes into the content part
+-- the result does not correspont to a wellformed XML document
+-- but for drawing the tree inclusive attributes this works fine
+
+moveAttrlToContent	:: XmlFilter
+moveAttrlToContent
+    = processChildren
+      ( processBottomUp
+	( substChildren (getAttrl +++ getChildren) `when` isXTag ) )
+
+-- |
+-- the main transformation filter
+
+xmlTreeToSVG	:: XmlFilter
+xmlTreeToSVG t
+    = rootTag [ getAttrl ]
+      [ getChildren
+	.>
+        isXTag						-- get the root tag
+	.>
+	cat [ dtd DOCTYPE [ sattr a_name "svg"
+			  , sattr k_public "-//W3C//DTD SVG 1.1//EN"
+			  , sattr k_system "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"
+			  ] []
+	    , tag "svg"
+	      [ sattr "width"		(show widthInt)
+	      , sattr "height"		(show heightInt)
+	      , sattr "version"		"1.1"
+	      , sattr "xmlns"		"http://www.w3.org/2000/svg"
+	      , sattr "xmlns:xlink"	"http://www.w3.org/1999/xlink"		-- currently not used
+	      ]
+	      [ stag "title" [ txt source]
+	      , tag "text" [ sattr "x" "10"		-- draw source uri
+			   , sattr "y" "22"
+			   , sattr "font-size" "12"
+			   , sattr "fill" "grey"
+			   ] [ txt ("source: " ++ source)
+			     ]
+	      , legend (10, heightInt - 5 * pixelPerLine - 10)
+		[ (tagColor,  "tag")
+		, (textColor, "text")
+		, (attrColor, "attribute")
+		, (cmtColor,  "comment")
+		, (defColor,  "others")
+				]
+	      , nodesToSVG
+		. scaleLayout borderWidthInt widthInt heightInt
+		. layoutFct
+		. vTreeLayout nSize
+	      ]
+	    ]
+      ] .> addXmlPiToDoc $ t
+      where
+      t1 = head . (getChildren .> isXTag) $ t		-- the root tag
+	   
+      pixelPerLine = 15
+
+      legend	:: (Int, Int) -> [(String, String)] -> XmlFilter
+      legend (x1, y1) ls
+	  = cat (zipWith legend1 ps ls)
+	    where
+	    ps = map (\ y' -> (x1, y1 + y' * pixelPerLine)) [0..]
+	    legend1 (x', y') (color, text)
+		= cat [ atag "circle" [ sattr "cx" (show (x' + 5))
+				      , sattr "cy" (show (y' + 10))
+				      , sattr "r" "5"
+				      , sattr "fill" color
+				      , sattr "stroke-width" lineWidth
+				      , sattr "stroke" lineColor
+				      ]
+		      , tag "text" [ sattr "x" (show (x' + pixelPerLine))
+				   , sattr "y" (show (y' + pixelPerLine))
+				   , sattr "font-size" "12"
+				   , sattr "fill" "grey"
+				   ] [ txt text
+				     ]
+		      ]
+	    
+      defValueOf attr' def' t'
+	  | null res  = def'
+	  | otherwise = res
+	  where
+	  res = valueOf attr' t'
+
+      width	    = defValueOf "width"		"800"		t
+      height        = defValueOf "height"		"600"		t
+      nodeScale     = defValueOf "nodeSize"		"1"		t
+      borderWidth   = defValueOf "borderWidth"          "20"		t
+      lineWidth     = defValueOf "lineWidht"		"1"		t
+      lineColor     = defValueOf "lineColor"		"grey"		t
+      textColor     = defValueOf "textNodeColor"	"blue"		t
+      tagColor      = defValueOf "tagNodeColor"		"red"		t
+      attrColor     = defValueOf "attrNodeColor"	"green"		t
+      cmtColor      = defValueOf "cmtNodeColor"		"magenta"	t
+      defColor      = defValueOf "defaultNodeColor"	"grey"		t
+      layout	    = defValueOf "layout"               "vertical"      t
+      lineStyle     = defValueOf "lineStyle"	        "line"          t
+      source        = valueOf a_source               			t
+
+      widthInt, heightInt, borderWidthInt	    :: Int
+
+      widthInt	    = read width  `max` 100
+      heightInt	    = read height `max` 100
+      borderWidthInt= read borderWidth
+
+      nodesToSVG t' = mapEdgesToSVG (edgeLayoutFct edgeLayout) t'
+		      ++
+		      mapNodesToSVG nodeLayout t1 t'
+
+      nodeLayout n
+	  = cat [ sattr "fill"         nColor
+		, sattr "stroke"       ( if r < 5	-- if circle too small
+					 then nColor	-- border is drawn in the same color as cirle
+					 else lineColor
+				       )
+		, sattr "stroke-width" lineWidth
+		, sattr "r"            (show r)
+		]
+	    where
+	    (nColor, nSz) = nLayout n
+	    nSz1          = nSz * (read nodeScale)
+	    r             = (round (sqrt (fromInteger (toInteger nSz1))::Double))::Int
+
+      nSize	:: XNode -> Double
+      nSize	= fromInteger . toInteger . snd . nLayout
+
+      nLayout (XTag _tn _)	= (tagColor,	9)		-- constant size for tags
+      nLayout (XText tx)	= (textColor,	length tx)
+      nLayout (XAttr _an)	= (attrColor,	4)		-- attributes are smaller than tags
+      nLayout (XCmt c)		= (cmtColor,	length c)
+      nLayout _			= (defColor,	1)		-- entities, PI's, dtd stuff, ...
+
+      layoutFct	    :: NTree (Double,Double) -> NTree (Double,Double)
+      layoutFct
+	  = fromJust . lookup layout
+	    $ [ ("vertical",	           id)
+	      , ("horizontal",	mirrorLayout )
+	      , ("centric",    centricLayout )
+	      ]
+
+      edgeLayoutFct
+	  = fromJust . lookup (layout, lineStyle)
+	    $ [ (("vertical",	"line"),	drawLine  )
+	      , (("vertical",	"fork"),	drawHPath )
+	      , (("horizontal",	"line"),	drawLine  )
+	      , (("horizontal",	"fork"),	drawVPath )
+	      , (("centric",	"line"),	drawLine  )
+	      , (("centric",	"fork"),	drawLine  )
+	      ]
+
+      edgeLayout
+	  = cat [ sattr "stroke"       lineColor
+		, sattr "stroke-width" "1"
+		]
+
+-- ----------------------------------------------------------
+
+-- |
+-- the main program of the Haskell XML Validating Parser
+
+main :: IO ()
+main
+    = do
+      argv <- getArgs
+      al   <- cmdlineOpts argv
+      res  <- run' (xmlToSVG al emptyRoot)
+      exitProg (null res)				-- set return code and terminate
+
+-- ------------------------------------------------------------
+
+exitProg	:: Bool -> IO a
+exitProg True	= exitWith (ExitFailure (-1))
+exitProg False	= exitWith ExitSuccess
+
+-- ------------------------------------------------------------
+
+-- |
+-- the /real/ main program
+--
+-- runs in the trivial XmlState monad (with user state set to ())
+-- so IO and access to global options is possible
+
+xmlToSVG	:: Attributes -> XmlStateFilter state
+xmlToSVG al
+    = parseDocument al					-- read document
+      .>>
+      traceMsg 1 "start processing"
+      .>>
+      liftMf
+      ( canonicalizeAllNodes
+	.>
+	( moveAttrlToContent `when` hasAttr "withAttr" )
+	.>
+	xmlTreeToSVG
+	.>
+	indentDoc
+      )
+      .>>
+      traceMsg 1 "processing finished"
+      .>>
+      traceSource
+      .>>
+      traceTree
+      .>>
+      ( writeDocument [ (a_indent, v_1) ]
+	`whenM`
+	getChildren
+      )
+      .>>
+      checkStatus
+
+-- ------------------------------------------------------------
+--
+-- the options definition part
+-- see doc for System.Console.GetOpt
+
+progName	:: String
+progName	= "TreeVisualisation"
+    
+options 	:: [OptDescr (String, String)]
+options
+    = generalOptions
+      ++
+      inputOptions
+      ++
+      outputOptions
+      ++
+      showOptions
+      ++
+      [ Option ""	["width"]		(ReqArg (nat "width")	"NUM")		"SVG image width in pixel, default: 800"
+      , Option ""	["height"]		(ReqArg (nat "height")	"NUM")		"SVG image height in pixel, default: 600"
+      , Option ""	["withAttr"]		(NoArg  (att "withAttr"	"1"))		"show tag attributes, default: no"
+      , Option ""	["nodeSize"]		(ReqArg (nat "nodeSize") "NUM")		"scale size of nodes, default: 1"
+      , Option ""	["lineWidth"]		(ReqArg (nat "lineWidth") "NUM")	"width of edges in pixel, default: 1\n"
+      , Option ""	["border"]		(ReqArg (nat "borderWidth") "NUM")	"border around tree in pixel, default: 20\n"
+
+      , Option ""	["verticalTree"]	(NoArg  (att "layout" "vertical"))	"vertical tree layout, root centered at the top border"
+      , Option ""	["horizontalTree"]	(NoArg  (att "layout" "horizontal"))	"horizontal tree layout, root centered at the left border"
+      , Option ""	["centricTree"]		(NoArg  (att "layout" "centric"))	"layout with root in the center"
+      , Option ""	["directLines"]		(NoArg  (att "lineStyle" "line"))	"edges are drawn as direct lines"
+      , Option ""	["horizontalLines"]	(NoArg  (att "lineStyle" "fork"))	"edges are drawn as a path of horizontal and vertical lines\n"
+
+      , Option ""	["textNodeColor"]	(ReqArg (att "textNodeColor") "COLOR")	"text node: color name or RGB value in format \"#RRGGBB\""
+      , Option ""	["tagNodeColor"]	(ReqArg (att "tagNodeColor") "COLOR")	"tag node color"
+      , Option ""	["attrNodeColor"]	(ReqArg (att "attrNodeColor") "COLOR")	"attribute node color"
+      , Option ""	["cmtNodeColor"]	(ReqArg (att "cmtNodeColor") "COLOR")	"comment node color"
+      , Option ""	["defaultNodeColor"]	(ReqArg (att "defNodeColor") "COLOR")	"other node color"
+      ]
+    where
+    att n v	= (n, v)
+    nat n v	= (n, filter (`elem` "0123456789") v)
+
+usage		:: [String] -> IO a
+usage errl
+    | null errl
+	= do
+	  hPutStrLn stdout use
+	  exitProg False
+    | otherwise
+	= do
+	  hPutStrLn stderr (concat errl ++ "\n" ++ use)
+	  exitProg True
+    where
+    header = "TreeVisualisation - An example application of the Haskell XML Toolbox\n" ++
+             "for the visualisation of the structure of a XML document with SVG\n" ++
+             "Usage: " ++ progName ++ " [OPTION...] [URI or FILE]"
+    use    = usageInfo header options
+
+cmdlineOpts 	:: [String] -> IO (Attributes)
+cmdlineOpts argv
+    = case (getOpt Permute options argv) of
+      (ol,n,[]  )
+	  -> do
+	     sa <- src n
+	     help (lookup a_help ol)
+	     return (ol ++ sa)
+      (_,_,errs)
+	  -> usage errs
+    where
+    src []	= usage ["no input url or file given\n"]
+    src [url]	= return [("source", url)]
+    src _	= usage ["only one input uri or file allowed\n"]
+
+    help Nothing	= return ()
+    help (Just _)	= usage []
+
+-- ------------------------------------------------------------
+
+
diff --git a/examples/hunit/HUnitExample.hs b/examples/hunit/HUnitExample.hs
new file mode 100644
--- /dev/null
+++ b/examples/hunit/HUnitExample.hs
@@ -0,0 +1,616 @@
+-- |
+-- HUnit - Haskell XML Toolbox examples and tests
+--
+-- Author: Uwe Schmidt uwe@fh-wedel.de
+--
+-- Version : $Id: HUnitExample.hs,v 1.8 2005/04/14 12:52:51 hxml Exp $
+
+module Main where
+
+import System
+import Test.HUnit
+import Text.XML.HXT.Parser
+import Data.Char
+
+aMinimalDoc	:: XmlTree
+aMinimalDoc	= mkRootTree [] (xtext "<?xml version='1.0'?><x/>")
+
+aSimpleXHTMLDoc	:: XmlTree
+aSimpleXHTMLDoc
+    = mkRootTree
+      ( xattr a_source "simple.xml" )
+      ( xtext 
+	( concatMap (++ "\n")
+	  [ "<?xml version='1.0'?>"
+	  , "<html>"
+	  , " <head><title>A Simple XHTML Document</title></head>"
+	  , " <body>"
+	  , " </body>"
+	  , "</html>"
+	  ]
+	)
+      )
+
+mkMinimalDoc	:: String -> XmlTree
+mkMinimalDoc cont
+    = mkRootTree [] (xtext cont)
+
+mkInputDoc	:: String -> XmlTree
+mkInputDoc src
+    = mkRootTree ( xattr a_source src) []
+
+mkDoc	:: String -> XmlTree
+mkDoc cont
+    = mkRootTree
+      ( xattr a_source "a test")
+      ( xtext ("<?xml version='1.0' encoding='" ++ isoLatin1 ++ "'?>\n" ++ cont) )
+
+-- |
+-- compare trees
+
+testEqualTrees	:: XmlTrees -> XmlTrees -> Test
+testEqualTrees e1 e2
+    = TestCase $
+      assertEqual "" e1 e2
+
+-- |
+-- testDocFilter creates a test for the application of a pure
+-- functional filter to a XML tree. The result is converted into
+-- the external string representation and compared with the expected
+-- result.
+--
+-- see also: 'testStateFilter' and 'testEditFilter'
+
+testDocFilter	:: String -> XmlFilter -> XmlTree -> Test
+testDocFilter expected xfilter doc
+    = TestCase $
+      assertEqual "" expected (xshow $ xfilter doc)
+
+-- |
+-- testStateFilter creates a test for monadic filters, doing IO and using
+-- the internal state, consisting of program options and status information
+-- The filter is applied to a XML tree, the result is converted to a string
+-- and this result is compared with the expected result.
+--
+-- see also: 'testEditFilter' for pure functional filters
+
+testStateFilter	:: String -> XmlStateFilter () -> XmlTree -> Test
+testStateFilter expected xfilter input
+    = TestCase $
+      do
+      res <- run' $ xfilter input
+      assertEqual "" expected (xshow res)
+
+-- |
+-- The test bed for edit filter for external documents.
+-- The input tree must specify the external document to be read.
+-- This document is checked for wellformedness, canonicalized
+-- (char refs substituted, ...) and processed with the edit filter.
+-- The result is transformed into the string representation and compared
+-- with the expected string.
+
+testEditFilter	:: String -> XmlFilter -> XmlTree -> Test
+testEditFilter expected xfilter input
+    = TestCase $
+      do
+      res <- run'
+	     $ ( getWellformedDoc					-- read the document
+		 .>>
+		 liftMf canonicalizeAllNodes				-- normalize the document and remove <?xml ... ?> decl
+		 .>>
+		 liftMf ( processChildren xfilter )			-- apply the editing filter only to the 'real' document
+		 .>>				  			-- nodes, not to nodes surrounding the document tag
+		 putXmlTree						-- just trace output
+		 .>>
+		 liftMf getChildren					-- just for comparing the document contents
+	       )
+	     input
+      assertEqual "" expected (xshow res)
+
+
+-- |
+-- ausiliary function to make haskell string constants with quotes more readable
+
+singleToDoubleQuote	:: String -> String
+singleToDoubleQuote
+    = map (\ c -> if c == '\'' then '"' else c)
+
+-- |
+-- the complete set of test cases
+
+allTests	:: Test
+allTests
+    = TestList
+      [ constructionTests
+      , treeConstructionTests
+      , parseTests
+      , inputTests
+      , removeTests
+      , simpleSelectionTests
+      , namespaceTests
+      ]
+
+-- |
+-- tree versus filter construction tests
+-- documents may be constructed by tree operations
+-- or with the more flexible filter operations applied to an arbitray tree
+
+treeConstructionTests :: Test
+treeConstructionTests
+    = TestLabel "tree and filter construction tests" $
+      TestList $
+      map (\ (t, f) -> testEqualTrees t (f undefined) )
+      [ (xtext "xyz",				txt "xyz"			)
+      , (xcmt "cmt",				cmt "cmt"			)
+      , (xtag "img" [] [],			tag "img" [] []			)
+      , (xtag "img" [] [],			etag "img"			)
+
+      , (xtag "img" (xattr "b" "13") [],	tag "img" [sattr "b" "13"] []	)
+
+      , (xtag "img" (xattr "b" "13") [],	atag "img" [sattr "b" "13"]	)
+
+      , (xtag "t" (xattr "a" "42" ++ xattr "b" "id")
+	          (xtext "abc"),
+						tag "t" [sattr "a" "42", sattr "b" "id"]
+	 						[txt "abc"]		)
+      ]
+
+-- |
+-- construction tests are all applied to the empty document,
+-- no information is used from that document,
+-- but construction is lifted to the filter level.
+-- this is more general than explicit construction.
+-- in more complex examples some information may be extracted from
+-- the source, some can be constant.
+-- 
+-- see also: 'testDocFilter'
+
+constructionTests	:: Test
+constructionTests
+    = TestLabel "document construction tests" $
+      TestList $
+      map (\ (res, f) -> testDocFilter res f undefined)		-- undefined or something else, e.g. emptyRoot
+      [ ("<x/>"		, mkXTag  "x" none none	)
+      , ("<x/>"		, tag "x"  [] []	)		-- syntactically more comfortable shortcut for mkXTag
+      , ("<x/>"		, stag "x" []		)		-- shortcut for tags without attributes
+      , ("<x/>"		, atag "x" []		)		-- shortcut for empty tags with attributes
+      , ("<x/>"		, etag "x"		)		-- shortcut for empty tags without attributes
+
+      , ("<x a=\"1\"/>"
+			, mkXTag "x" (mkXAttr "a" (mkXText "1")) none	)
+      , ("<x a=\"1\">42</x>"
+			, mkXTag "x" (mkXAttr "a" (mkXText "1")) (mkXText "42")	)
+      , ("<x a=\"1\">42</x>"
+			, tag "x" [ attr "a" $ txt "1" ] [ txt "42" ]	)
+      , ("<x a=\"1\">42</x>"
+			, tag "x" [ sattr "a" "1" ] [ txt "42" ]	)
+
+      , ("<x a=\"1\"/>"	, atag "x" [ sattr "a" "1" ]	)
+
+      , ("<x a=\"1\" b=\"2\">42<y/>43</x>"
+			, tag "x" [ sattr "a" "1"
+				  , sattr "b" "2"
+				  ] [ txt  "42"
+				    , etag "y"
+				    , txt  "43"
+				    ]	)
+      , ("<!-- a comment -->"
+			, mkXCmt $ txt " a comment "	)
+      , ("<!--a comment-->"
+			, cmt "a comment"	)		-- short cut for uncomputed comment
+
+      , ("<!-- an illegal XML comment containing 2 -- in comment text -->"
+			, cmt " an illegal XML comment containing 2 -- in comment text "	)
+
+      , ("&#42;"   	, mkXCharRef 42		)
+      , ("&lt;"    	, mkXEntityRef "lt"	)
+      , ("<![CDATA[<abc>]]>"
+			, mkXCdata $ txt "<abc>")
+      , ("<![CDATA[<abc>]]>"			-- short cut for uncomputed cdata content
+			, cdata "<abc>")
+      , ("<?abc xyz?>"	, mkXPi "abc" $ txt "xyz"	)
+      , ("<?abc xyz?>"	, spi "abc" "xyz"	)	-- short cut for an uncomputed pi content
+      ]
+
+-- |
+-- simple selection tests
+
+simpleSelectionTests	:: Test
+simpleSelectionTests
+    = TestLabel "simple tree selection tests" $
+      TestList $
+      map (\ (res, f) -> testDocFilter (singleToDoubleQuote res) f simpleDoc)
+      [ (src		, this	)
+      , ("1"		, getValue "a"	)
+      , (""		, getValue "b"	)
+      , (body1		, getChildren	)
+
+				-- text selection
+      , ("xyz"		, getChildren .> isXText	)
+      , ("xyz"		, getChildren .> isText "xyz"	)
+      , (""		, getChildren .> isText "abc"	)
+      , ("xyz"		, getChildren .> isOfText (>="x")	)
+      , (""		, getChildren .> isOfText (<"x")	)
+      , (""		, getChildren .> isWhiteSpace	)
+
+				-- tag selection
+      , ("<t a='42' b='id'>abc</t><img b='13'/><y x='0'/><z/>"
+			, getChildren .> isXTag	)
+
+				-- comment selection
+      , ("<!--cmt-->"	, getChildren .> isXCmt	)
+
+				-- text OR tag selection
+      , ("<t a='42' b='id'>abc</t><img b='13'/>xyz<y x='0'/><z/>"
+			, getChildren .> (isXTag +++ isXText)	)
+
+				-- generalised OR
+      , ("<t a='42' b='id'>abc</t><img b='13'/>xyz<y x='0'/><z/>"
+			, getChildren .> cat [isXTag, isXText]	)
+
+      , ("abc"		, getChildren .> getChildren	)
+
+				-- atribute value selection
+      , ("1"		, getValue "a"	)
+
+      , ("<t a='42' b='id'>abc</t>"
+			, getChildren .> isTag "t"	)
+
+				-- attribute selection
+      , ("<t a='42' b='id'>abc</t>"
+			, getChildren .> hasAttr "a"	)
+
+      , ("42"		, getChildren .> getValue "a"	)
+      , ("42"		, getChildren .> hasValue "a" (all isDigit)	)
+      , ("13"		, getChildren .> hasValue "b" (all isDigit)	)
+      , (""		, getChildren .> isTag "t" .> hasValue "b" (all isDigit)	)
+      , ("42"		, getChildren .> hasValue "a" (== "42")	)
+      , (""		, getChildren .> hasValue "a" (== "43")	)
+      , ("42"		, getChildren .> hasValue "a" (\ str -> ((read str)::Int) > 40)	)
+      , ("42"		, getChildren .> hasValue "a" (not . null)	)
+      , ("id13"		, getChildren .> hasValue "b" (const True)	)
+      , ("13"		, getChildren .> isTag "img" .> hasValue "b" (const True)	)
+      , (""		, getChildren .> hasValue "c" (const True)	)
+
+      , (" a='42' b='id' b='13' x='0'"
+			, getChildren .> getAttrl	)
+
+      , (" a='42' b='id'"
+			, getChildren .> isTag "t" .> getAttrl	)
+
+      , ("42id"		, getChildren .> isTag "t" .> getAttrl .> getChildren	)
+
+      , (" b='id' b='13'"
+			, getChildren .> getAttrl .> isAttr "b"	)
+
+      , (" b='13'"	, getChildren .> isTag "img" .> getAttrl .> isAttr "b"	)
+      , ("13"		, getChildren .> isTag "img" .> getAttrl .> isAttr "b" .> getChildren	)
+      , ("13"		, getChildren .> isTag "img" .> getValue "b"	)
+      , ("timgyz"	, getChildren .> getName	)
+      , ("t"		, getChildren .> isTag "t" .> getName	)
+      , ("abbx"		, getChildren .> getAttrl  .> getName	)
+      , ("bb"		, getChildren .> getAttrl  .> isAttr "b" .> getName	)
+      , ("ab"		, getChildren .> isTag "t" .> getAttrl   .> getName	)
+      , ("b"		, getChildren .> isTag "t" .> getAttrl   .> isAttr "b" .> getName	)
+
+				-- deep search for text or tags
+      , ("abcxyz"       , deep isXText	)
+      , ("abc"	        , deep (isTag "t") .> deep isXText	)
+      ]
+    where
+    src = "<r a='1'>" ++ body1 ++ "</r>"
+    body1 = "<!--cmt-->"
+	    ++ "<t a='42' b='id'>abc</t>"
+	    ++ "<img b='13'/>"
+	    ++ "xyz"
+	    ++ "<y x='0'/>"
+	    ++ "<z/>"
+
+    sDocFilter
+	= tag "r" [ sattr "a" "1" ]
+	    [ cmt "cmt"
+	    , tag "t" [ sattr "a" "42", sattr "b" "id" ]
+		[ txt "abc"
+		]
+	    , atag "img" [ sattr "b" "13" ]
+	    , txt "xyz"
+	    , atag "y" [ sattr "x" "0" ]
+	    , etag "z"
+	    ]
+    simpleDoc = head $ sDocFilter undefined
+
+-- |
+-- simple tests with namespaces
+
+namespaceTests	:: Test
+namespaceTests
+    = TestLabel "namespace tests" $
+      TestList $
+      map (\ (res, f) -> testDocFilter (singleToDoubleQuote res) f simpleDoc)
+      [ (src		, this	)
+					-- select all "t" tags, even nested ones (multi) and extract the text from the body
+      , ("sssaaa"	, multi (isTag "t"                    .> getChildren .> isXText)	)
+
+					-- select all text within all tags of a specific namespace
+      , ("sssaaazzzeee"	, multi (isXTag .> hasNamespace "dns" .> getChildren .> isXText)	)
+      , ("bbb"		, multi (isXTag .> hasNamespace "n1"  .> getChildren .> isXText)	)
+      , ("cccdddfffggg"	, multi (isXTag .> hasNamespace "n2"  .> getChildren .> isXText)	)
+
+					-- select all text within all tags with a specific local name
+      , ("sssaaabbbcccdddzzz"
+			, multi (isXTag .> hasLocalPart "t"   .> getChildren .> isXText)	)
+      , ("eee"		, multi (isXTag .> hasLocalPart "e"   .> getChildren .> isXText)	)
+
+					-- select all text within all tags with a specific prefix
+      , ("bbbddd"	, multi (isXTag .> hasPrefix "x"      .> getChildren .> isXText)	)
+      , ("ccc"		, multi (isXTag .> hasPrefix "y"      .> getChildren .> isXText)	)
+      , ("zzz"		, multi (isXTag .> hasPrefix "z"      .> getChildren .> isXText)	)
+      , ("sssaaaeeefffggg"
+			, multi (isXTag .> hasPrefix ""       .> getChildren .> isXText)	)
+
+					-- select all attribute values of a specific namespace
+					-- !!! the default namespace is not propagated to attribute names
+      , ("z5"		, multi (isXTag .> getAttrl .> hasNamespace "dns"   .> getChildren)	)
+      , ("2z4"		, multi (isXTag .> getAttrl .> hasNamespace "n1"    .> getChildren)	)
+      , ("x3y3u4"	, multi (isXTag .> getAttrl .> hasNamespace "n2"    .> getChildren)	)
+      , ("dnsn2"	, multi (isXTag .> getAttrl .> hasLocalPart "xmlns" .> getChildren)	)
+
+					-- select namespaces from all namespace declarations
+      , ("dnsn1n2dnsn2n2"
+			, multi (isXTag .> getAttrl .> isNamespaceDecl .> getChildren)	)
+
+					-- all default namespace declarations
+      , ("dnsn2"	, multi (isXTag .> getAttrl .> hasLocalPart "xmlns" .> getChildren)	)
+
+					-- all none default namespace declarations
+      , ("n1n2dnsn2"	, multi (isXTag .> getAttrl .> hasPrefix "xmlns" .> getChildren)	)
+      , ("n1n2"		, multi (isXTag .> getAttrl .> hasPrefix "xmlns" .> hasLocalPart "x" .> getChildren)	)
+      , ("n2"		, multi (isXTag .> getAttrl .> hasPrefix "xmlns" .> hasLocalPart "y" .> getChildren)	)
+      , ("dns"		, multi (isXTag .> getAttrl .> hasPrefix "xmlns" .> hasLocalPart "z" .> getChildren)	)
+      ]
+    where
+						-- the text representation of the tree
+						-- with ' instead of " for readablility of the string constants
+    src = "<t xmlns='dns' xmlns:x='n1' xmlns:y='n2' xmlns:z='dns'>"
+	  ++ "sss"
+	  ++ "<t a='1' x:a='2'>aaa</t>"
+	  ++ "<x:t a='x1' y:a='x3'>bbb</x:t>"
+	  ++ "<y:t a='y1' y:a='y3'>ccc</y:t>"
+	  ++ "<x:t xmlns:x='n2' x:a='u4'>ddd</x:t>"
+	  ++ "<z:t x:a='z4' z:a='z5'>zzz</z:t>"
+	  ++ "<e b='42'>eee</e>"
+	  ++ "<f xmlns='n2'>fff<g>ggg</g></f>" ++
+	  "</t>"
+
+						-- the filter for generating the test document
+    sDocFilter
+	= tag "t" [ sattr "xmlns"   "dns"	-- 4 namespace declarations
+		  , sattr "xmlns:x" "n1"
+		  , sattr "xmlns:y" "n2"
+		  , sattr "xmlns:z" "dns"
+		  ]
+            [ txt "sss"
+	    , tag "t" [ sattr "a"   "1"
+		      , sattr "x:a" "2" ]
+	        [ txt "aaa"
+		]
+	    , tag "x:t" [ sattr "a"   "x1"
+			, sattr "y:a" "x3"
+			]
+	        [ txt "bbb"
+		]
+	    , tag "y:t" [ sattr "a"   "y1"
+			, sattr "y:a" "y3"
+			]
+	        [ txt "ccc"
+		]
+	    , tag "x:t" [ sattr "xmlns:x" "n2"	-- redefinition of prefix x:
+			, sattr "x:a" "u4"
+			]
+	        [ txt "ddd"
+		]
+	    , tag "z:t" [ sattr "x:a" "z4"
+			, sattr "z:a" "z5"
+			]
+	        [ txt "zzz"
+		]
+	    , tag "e" [ sattr "b" "42" ]
+                [ txt "eee"
+		]
+	    , tag "f" [ sattr "xmlns" "n2"	-- redefinition of default namespace
+		      ]
+                [ txt "fff"
+		, tag "g" [ ]
+		    [ txt "ggg" ]
+		]
+	    ]
+						-- create document and propagate namespaces
+    simpleDoc = head $ (sDocFilter .> propagateNamespaces) undefined
+
+-- |
+-- minimal tests for parsing data.
+--
+-- the tests are document trees with a root
+-- node containing a single text node with the document source.
+-- That tree is passed to the parser, which substitutes the text node with the parsed xml tree.
+-- In general this may be a list of trees containing also the
+-- surrounding parts like the xml declaraion, the document type definition
+-- possibly comments and processing instructions.
+--
+-- see also: 'testStateFilter'
+
+parseTests	:: Test
+parseTests
+    = TestLabel "minimal parser tests" $
+      TestList 
+      [ testStateFilter "</><x/><//>"	parseXmlDoc				mini	-- the tree inclusive root node
+      , testStateFilter "<x/>"	(parseXmlDoc .>> liftMf getChildren)		mini	-- only the content
+      , testStateFilter "<x/>"	(parseXmlDoc .>> liftMf getChildren)		min2	-- same content
+      , testStateFilter ""	(parseXmlDoc .>> liftMf getChildren)		minErr	-- syntax error: content empty
+      , testStateFilter errr	(parseXmlDoc .>> liftMf (getValue a_status))	minErr	-- syntax error reported in a_status
+      ]
+    where
+    errr	= show c_err
+    mini	= mkMinimalDoc "<x/>"
+    min2	= mkMinimalDoc "<x></x>"
+    minErr	= mkMinimalDoc "<x>"
+
+
+-- |
+-- simple external file containing one tag
+
+mini1		:: XmlTree
+mini1		= newDocument "mini1.xml"		-- test documents
+
+-- |
+-- simple external file containing one tag
+
+mini2		:: XmlTree
+mini2		= newDocument "mini2.xml"
+
+-- |
+-- simple not existing external file
+
+notThere	:: XmlTree
+notThere	= newDocument "notThere.xml"		-- does not exist
+
+-- |
+-- These test check the access to external files
+-- and error reporting in case of input or parse errors
+-- Some test issue tree like trace output of the documents read
+-- to show the internal structure and nesting
+
+inputTests	:: Test
+inputTests
+    = TestLabel "input tests" $
+      TestList
+      [ testStateFilter "mini1.xml"
+	                        ( putXmlTree .>>
+				  liftMf (getValue a_source)
+				)					mini1
+      , testStateFilter ok	( liftMf (getValue a_status)
+				)					mini1
+      , testStateFilter ""	( liftMf getChildren
+				)					mini1
+      , testStateFilter "<x/>"	( getXmlContents .>>
+				  putXmlTree .>>
+				  liftMf getChildren
+				)					mini1
+      , testStateFilter ok	( getXmlContents .>>
+				  liftMf (getValue a_status)
+				)					mini1
+      , testStateFilter "4"	( getXmlContents .>>
+				  liftMf getContentLength .>>
+				  putXmlTree .>>
+				  liftMf (getValue a_contentLength)
+				)					mini1
+      , testStateFilter ok	( getXmlContents .>>
+				  liftMf (getValue a_status)
+				)					mini2
+      , testStateFilter ""	( getXmlContents .>>
+				  putXmlTree .>>
+				  liftMf getChildren
+				)					notThere
+      , testStateFilter fat	( getXmlContents .>>
+				  liftMf (getValue a_status)
+				)					notThere
+      ]
+    where
+    ok	= show c_ok
+    fat	= show c_fatal
+
+-- |
+-- A few tests for removing parts of a document tree.
+-- As input tree the document in file mini2.xml is used.
+
+removeTests	:: Test
+removeTests
+    = TestLabel "document transformation tests" $
+      TestList
+      [ testEditFilter allText	getAllText				mini2
+      , testEditFilter allData  (removeAllWhiteSpace .> getAllText)	mini2
+      , testEditFilter allImp	(removeIgnorableData .> getAllText)	mini2
+      , testEditFilter allDat	(removeMeta .> getAllText)		mini2
+      ]
+    where
+    getAllText			= deep isXText
+    containsUnknownOrIgnore	= getChildren .> ( isText "unknown"
+						   +++
+						   isText "ignore"
+						 )
+    removeIgnorableData		= processTopDown ( none
+						   `when`
+						   ( isTag "data" .> containsUnknownOrIgnore )
+						 )
+    removeMeta			= processTopDown ( none
+						   `when`
+						   ( isTag "data" .> hasValue "class" ( == "meta" ) )
+						 )
+    allText	= " ignore unknown important important "
+    allData	= "ignoreunknownimportantimportant"
+    allImp	= "   important important "
+    allDat	= " ignore  important  "
+
+
+ys :: XmlTree
+ys = head $
+     tag "s:Envelope"
+     [ sattr "xmlns:s" "http://schemas.xmlsoap.org/soap/envelope/",
+       sattr "xmlns:xenc" "http://www.w3.org/2001/04/xmlenc#",
+       sattr "xmlns:eg" "http://example.org/paymentv2",
+       sattr "xmlns:wsse" "http://schemas.xmlsoap.org/ws/2002/12/secext"
+     ]
+     [ stag "s:Header"
+       [ stag "wsse:Security"
+         [ tag "wsse:BinarySecurityToken"
+           [ sattr "ValueType" "wsse:Kerberosv5ST",
+             sattr "EncodingType" "wsse:Base64Binary"
+           ]
+           [ txt "QMwcAG ..."
+           ]
+	 ]
+       ],
+       stag "s:Body"
+       [ stag "eg:OrderCurrency"
+         [ stag "eg:Name"
+           [ txt "John Smith" ],
+	   tag "eg:Amount"
+           [ sattr "Currency" "'USD'" ]
+	   [ txt "1000" ],
+	   tag "eg:CreditCard"
+           [ sattr "Limit" "'5000'",
+	     sattr "Currency" "'GBP'"
+	   ]
+	   [ stag "xenc:EncryptedData"
+             [ atag "xenc:EncryptionMethod"
+               [ sattr "Algorithm" "http://www.w3.org/2001/04/xmlenc#tripledes-cbc" ]
+             ],
+	     stag "xenc:CipherData"
+             [ stag "xenc:CipherValue"
+               [ txt "r5KipsDV ..." ]
+             ]
+	   ]
+         ]
+       ]
+     ]
+     .> propagateNamespaces
+     .> indentDoc
+     $ undefined
+
+
+main	:: IO ()
+main
+    = do
+      c <- runTestTT allTests
+      putStrLn $ show c
+      let errs = errors c
+	  fails = failures c
+      System.exitWith (codeGet errs fails)
+
+codeGet	:: Int -> Int -> ExitCode
+codeGet errs fails
+    | fails > 0       = ExitFailure 2
+    | errs > 0        = ExitFailure 1
+    | otherwise       = ExitSuccess
+
+-- ----------------------------------------------------------
diff --git a/examples/hunit/Makefile b/examples/hunit/Makefile
new file mode 100644
--- /dev/null
+++ b/examples/hunit/Makefile
@@ -0,0 +1,32 @@
+# $Id: Makefile,v 1.6 2005/04/14 12:52:51 hxml Exp $
+
+HXT_HOME	= ../..
+PKGFLAGS	=
+GHCFLAGS	= -Wall -O2
+GHC		= ghc $(GHCFLAGS) $(PKGFLAGS)
+
+prog		= ./HUnitExample
+
+all		: $(prog)
+
+force		:
+		$(GHC) --make $(GHCPACKAGES) -o $(prog) $(prog).hs
+
+$(prog)		: $(prog).hs
+		$(GHC) --make $(GHCPACKAGES) -o $@ $<
+
+test		: $(prog)
+		@echo "===> run HUnit examples" ; echo ; sleep 2
+		$(prog)
+
+DIST		= $(HXT_HOME)/dist/examples
+DIST_DIR	= $(DIST)/hunit
+DIST_FILES	= mini1.xml mini2.xml Makefile $(prog).hs
+
+dist		:
+		[ -d $(DIST_DIR) ] || mkdir -p $(DIST_DIR)
+		cp $(DIST_FILES) $(DIST_DIR)
+
+clean		:
+		rm -f $(prog) $(prog).o $(prog).hi
+
diff --git a/examples/hunit/mini1.xml b/examples/hunit/mini1.xml
new file mode 100644
--- /dev/null
+++ b/examples/hunit/mini1.xml
@@ -0,0 +1,1 @@
+<x/>
diff --git a/examples/hunit/mini2.xml b/examples/hunit/mini2.xml
new file mode 100644
--- /dev/null
+++ b/examples/hunit/mini2.xml
@@ -0,0 +1,1 @@
+<data> <data class="data">ignore</data> <data class="meta">unknown</data> <data><data class="data">important</data> <data class="meta">important</data></data> </data>
diff --git a/examples/mini/Makefile b/examples/mini/Makefile
new file mode 100644
--- /dev/null
+++ b/examples/mini/Makefile
@@ -0,0 +1,34 @@
+# $Id: Makefile,v 1.5 2005/04/14 12:52:52 hxml Exp $
+
+HXT_HOME	= ../..
+PKGFLAGS	=
+GHCFLAGS	= -Wall -O2
+GHC		= ghc $(GHCFLAGS) $(PKGFLAGS)
+
+prog		= ./ParseExample
+
+all		: $(prog)
+
+force		:
+		$(GHC) --make -o $(prog) $(prog).hs
+
+$(prog)		: $(prog).hs
+		$(GHC) --make -o $@ $<
+
+test		: $(prog)
+		@echo "===> a very simple test"
+		@echo "===> a xml source"
+		@cat example1.xml
+		@sleep 2; echo "===> parse, validate and normalise the document"
+		$(prog) example1.xml
+
+DIST		= $(HXT_HOME)/dist/examples
+DIST_DIR	= $(DIST)/mini
+
+dist		:
+		[ -d $(DIST_DIR) ] || mkdir -p $(DIST_DIR)
+		cp example1.xml Makefile $(prog).hs $(DIST_DIR)
+
+clean		:
+		rm -f $(prog) *.o *.hi
+
diff --git a/examples/mini/ParseExample.hs b/examples/mini/ParseExample.hs
new file mode 100644
--- /dev/null
+++ b/examples/mini/ParseExample.hs
@@ -0,0 +1,50 @@
+-- |
+-- This is a simple example for parsing and validating an XML file and printing the generated
+-- XmlTree to standard out.
+--
+-- Author : .\\artin Schmidt
+-- Version : $Id: ParseExample.hs,v 1.4 2004/09/02 19:11:53 hxml Exp $
+
+module Main(main)
+where
+
+import Text.XML.HXT.Parser
+
+import System.IO
+import System
+
+--
+-- call this program with a single parameter for the file or uri to be processed
+-- e.g. ParseExample example1.xml
+
+main :: IO ()
+main
+    = do
+      argv <- getArgs
+			      -- take the first cmdline argument as source name
+			      -- start the XState monad with the runParser command
+      res  <- run' $ parser [(a_source, head argv)] emptyRoot
+      exitProg res
+
+-- run a command in the XState monad.
+-- this monad includes the IO monad, a system state for global options
+-- and a user definable state (type parameter state). This user state is
+-- set to () (the empty state) by the run' command.
+-- There are more general run commands: run, run0 in case of a proccessing
+-- function, that requires e.g. an environment
+
+parser	:: Attributes -> XmlStateFilter ()
+parser al
+    = parseDocument al
+      .>>
+      writeDocument [(a_indent, v_1)]	-- indent document and output to stdout
+      .>>
+      checkStatus			-- check status
+
+-- ------------------------------------------------------------
+
+exitProg	:: [a] -> IO ()
+exitProg []	= exitWith (ExitFailure (-1))
+exitProg _	= exitWith ExitSuccess
+
+-- ------------------------------------------------------------
diff --git a/examples/mini/example1.xml b/examples/mini/example1.xml
new file mode 100644
--- /dev/null
+++ b/examples/mini/example1.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<!DOCTYPE a [
+<!ATTLIST a  att1  NMTOKENS  #IMPLIED
+             att2  ID        #REQUIRED>
+<!ATTLIST b  btt2  ID        #REQUIRED
+             btt3  IDREF     #REQUIRED>
+<!ELEMENT a  (b, cü?)>
+<!ELEMENT b  EMPTY>
+<!ELEMENT cü (#PCDATA)>
+]>
+
+<?pi a processing instruction?>
+
+<a att1=" test
+          äöüß
+          test "
+   att2="root"
+>
+    <b btt2="b1" btt3="root"/>
+    <cü>hello world äöüß test</cü>
+</a>
diff --git a/examples/xhtml/xhtml-lat1.ent b/examples/xhtml/xhtml-lat1.ent
new file mode 100644
--- /dev/null
+++ b/examples/xhtml/xhtml-lat1.ent
@@ -0,0 +1,196 @@
+<!-- Portions (C) International Organization for Standardization 1986
+     Permission to copy in any form is granted for use with
+     conforming SGML systems and applications as defined in
+     ISO 8879, provided this notice is included in all copies.
+-->
+<!-- Character entity set. Typical invocation:
+    <!ENTITY % HTMLlat1 PUBLIC
+       "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
+    %HTMLlat1;
+-->
+
+<!ENTITY nbsp   "&#160;"> <!-- no-break space = non-breaking space,
+                                  U+00A0 ISOnum -->
+<!ENTITY iexcl  "&#161;"> <!-- inverted exclamation mark, U+00A1 ISOnum -->
+<!ENTITY cent   "&#162;"> <!-- cent sign, U+00A2 ISOnum -->
+<!ENTITY pound  "&#163;"> <!-- pound sign, U+00A3 ISOnum -->
+<!ENTITY curren "&#164;"> <!-- currency sign, U+00A4 ISOnum -->
+<!ENTITY yen    "&#165;"> <!-- yen sign = yuan sign, U+00A5 ISOnum -->
+<!ENTITY brvbar "&#166;"> <!-- broken bar = broken vertical bar,
+                                  U+00A6 ISOnum -->
+<!ENTITY sect   "&#167;"> <!-- section sign, U+00A7 ISOnum -->
+<!ENTITY uml    "&#168;"> <!-- diaeresis = spacing diaeresis,
+                                  U+00A8 ISOdia -->
+<!ENTITY copy   "&#169;"> <!-- copyright sign, U+00A9 ISOnum -->
+<!ENTITY ordf   "&#170;"> <!-- feminine ordinal indicator, U+00AA ISOnum -->
+<!ENTITY laquo  "&#171;"> <!-- left-pointing double angle quotation mark
+                                  = left pointing guillemet, U+00AB ISOnum -->
+<!ENTITY not    "&#172;"> <!-- not sign = discretionary hyphen,
+                                  U+00AC ISOnum -->
+<!ENTITY shy    "&#173;"> <!-- soft hyphen = discretionary hyphen,
+                                  U+00AD ISOnum -->
+<!ENTITY reg    "&#174;"> <!-- registered sign = registered trade mark sign,
+                                  U+00AE ISOnum -->
+<!ENTITY macr   "&#175;"> <!-- macron = spacing macron = overline
+                                  = APL overbar, U+00AF ISOdia -->
+<!ENTITY deg    "&#176;"> <!-- degree sign, U+00B0 ISOnum -->
+<!ENTITY plusmn "&#177;"> <!-- plus-minus sign = plus-or-minus sign,
+                                  U+00B1 ISOnum -->
+<!ENTITY sup2   "&#178;"> <!-- superscript two = superscript digit two
+                                  = squared, U+00B2 ISOnum -->
+<!ENTITY sup3   "&#179;"> <!-- superscript three = superscript digit three
+                                  = cubed, U+00B3 ISOnum -->
+<!ENTITY acute  "&#180;"> <!-- acute accent = spacing acute,
+                                  U+00B4 ISOdia -->
+<!ENTITY micro  "&#181;"> <!-- micro sign, U+00B5 ISOnum -->
+<!ENTITY para   "&#182;"> <!-- pilcrow sign = paragraph sign,
+                                  U+00B6 ISOnum -->
+<!ENTITY middot "&#183;"> <!-- middle dot = Georgian comma
+                                  = Greek middle dot, U+00B7 ISOnum -->
+<!ENTITY cedil  "&#184;"> <!-- cedilla = spacing cedilla, U+00B8 ISOdia -->
+<!ENTITY sup1   "&#185;"> <!-- superscript one = superscript digit one,
+                                  U+00B9 ISOnum -->
+<!ENTITY ordm   "&#186;"> <!-- masculine ordinal indicator,
+                                  U+00BA ISOnum -->
+<!ENTITY raquo  "&#187;"> <!-- right-pointing double angle quotation mark
+                                  = right pointing guillemet, U+00BB ISOnum -->
+<!ENTITY frac14 "&#188;"> <!-- vulgar fraction one quarter
+                                  = fraction one quarter, U+00BC ISOnum -->
+<!ENTITY frac12 "&#189;"> <!-- vulgar fraction one half
+                                  = fraction one half, U+00BD ISOnum -->
+<!ENTITY frac34 "&#190;"> <!-- vulgar fraction three quarters
+                                  = fraction three quarters, U+00BE ISOnum -->
+<!ENTITY iquest "&#191;"> <!-- inverted question mark
+                                  = turned question mark, U+00BF ISOnum -->
+<!ENTITY Agrave "&#192;"> <!-- latin capital letter A with grave
+                                  = latin capital letter A grave,
+                                  U+00C0 ISOlat1 -->
+<!ENTITY Aacute "&#193;"> <!-- latin capital letter A with acute,
+                                  U+00C1 ISOlat1 -->
+<!ENTITY Acirc  "&#194;"> <!-- latin capital letter A with circumflex,
+                                  U+00C2 ISOlat1 -->
+<!ENTITY Atilde "&#195;"> <!-- latin capital letter A with tilde,
+                                  U+00C3 ISOlat1 -->
+<!ENTITY Auml   "&#196;"> <!-- latin capital letter A with diaeresis,
+                                  U+00C4 ISOlat1 -->
+<!ENTITY Aring  "&#197;"> <!-- latin capital letter A with ring above
+                                  = latin capital letter A ring,
+                                  U+00C5 ISOlat1 -->
+<!ENTITY AElig  "&#198;"> <!-- latin capital letter AE
+                                  = latin capital ligature AE,
+                                  U+00C6 ISOlat1 -->
+<!ENTITY Ccedil "&#199;"> <!-- latin capital letter C with cedilla,
+                                  U+00C7 ISOlat1 -->
+<!ENTITY Egrave "&#200;"> <!-- latin capital letter E with grave,
+                                  U+00C8 ISOlat1 -->
+<!ENTITY Eacute "&#201;"> <!-- latin capital letter E with acute,
+                                  U+00C9 ISOlat1 -->
+<!ENTITY Ecirc  "&#202;"> <!-- latin capital letter E with circumflex,
+                                  U+00CA ISOlat1 -->
+<!ENTITY Euml   "&#203;"> <!-- latin capital letter E with diaeresis,
+                                  U+00CB ISOlat1 -->
+<!ENTITY Igrave "&#204;"> <!-- latin capital letter I with grave,
+                                  U+00CC ISOlat1 -->
+<!ENTITY Iacute "&#205;"> <!-- latin capital letter I with acute,
+                                  U+00CD ISOlat1 -->
+<!ENTITY Icirc  "&#206;"> <!-- latin capital letter I with circumflex,
+                                  U+00CE ISOlat1 -->
+<!ENTITY Iuml   "&#207;"> <!-- latin capital letter I with diaeresis,
+                                  U+00CF ISOlat1 -->
+<!ENTITY ETH    "&#208;"> <!-- latin capital letter ETH, U+00D0 ISOlat1 -->
+<!ENTITY Ntilde "&#209;"> <!-- latin capital letter N with tilde,
+                                  U+00D1 ISOlat1 -->
+<!ENTITY Ograve "&#210;"> <!-- latin capital letter O with grave,
+                                  U+00D2 ISOlat1 -->
+<!ENTITY Oacute "&#211;"> <!-- latin capital letter O with acute,
+                                  U+00D3 ISOlat1 -->
+<!ENTITY Ocirc  "&#212;"> <!-- latin capital letter O with circumflex,
+                                  U+00D4 ISOlat1 -->
+<!ENTITY Otilde "&#213;"> <!-- latin capital letter O with tilde,
+                                  U+00D5 ISOlat1 -->
+<!ENTITY Ouml   "&#214;"> <!-- latin capital letter O with diaeresis,
+                                  U+00D6 ISOlat1 -->
+<!ENTITY times  "&#215;"> <!-- multiplication sign, U+00D7 ISOnum -->
+<!ENTITY Oslash "&#216;"> <!-- latin capital letter O with stroke
+                                  = latin capital letter O slash,
+                                  U+00D8 ISOlat1 -->
+<!ENTITY Ugrave "&#217;"> <!-- latin capital letter U with grave,
+                                  U+00D9 ISOlat1 -->
+<!ENTITY Uacute "&#218;"> <!-- latin capital letter U with acute,
+                                  U+00DA ISOlat1 -->
+<!ENTITY Ucirc  "&#219;"> <!-- latin capital letter U with circumflex,
+                                  U+00DB ISOlat1 -->
+<!ENTITY Uuml   "&#220;"> <!-- latin capital letter U with diaeresis,
+                                  U+00DC ISOlat1 -->
+<!ENTITY Yacute "&#221;"> <!-- latin capital letter Y with acute,
+                                  U+00DD ISOlat1 -->
+<!ENTITY THORN  "&#222;"> <!-- latin capital letter THORN,
+                                  U+00DE ISOlat1 -->
+<!ENTITY szlig  "&#223;"> <!-- latin small letter sharp s = ess-zed,
+                                  U+00DF ISOlat1 -->
+<!ENTITY agrave "&#224;"> <!-- latin small letter a with grave
+                                  = latin small letter a grave,
+                                  U+00E0 ISOlat1 -->
+<!ENTITY aacute "&#225;"> <!-- latin small letter a with acute,
+                                  U+00E1 ISOlat1 -->
+<!ENTITY acirc  "&#226;"> <!-- latin small letter a with circumflex,
+                                  U+00E2 ISOlat1 -->
+<!ENTITY atilde "&#227;"> <!-- latin small letter a with tilde,
+                                  U+00E3 ISOlat1 -->
+<!ENTITY auml   "&#228;"> <!-- latin small letter a with diaeresis,
+                                  U+00E4 ISOlat1 -->
+<!ENTITY aring  "&#229;"> <!-- latin small letter a with ring above
+                                  = latin small letter a ring,
+                                  U+00E5 ISOlat1 -->
+<!ENTITY aelig  "&#230;"> <!-- latin small letter ae
+                                  = latin small ligature ae, U+00E6 ISOlat1 -->
+<!ENTITY ccedil "&#231;"> <!-- latin small letter c with cedilla,
+                                  U+00E7 ISOlat1 -->
+<!ENTITY egrave "&#232;"> <!-- latin small letter e with grave,
+                                  U+00E8 ISOlat1 -->
+<!ENTITY eacute "&#233;"> <!-- latin small letter e with acute,
+                                  U+00E9 ISOlat1 -->
+<!ENTITY ecirc  "&#234;"> <!-- latin small letter e with circumflex,
+                                  U+00EA ISOlat1 -->
+<!ENTITY euml   "&#235;"> <!-- latin small letter e with diaeresis,
+                                  U+00EB ISOlat1 -->
+<!ENTITY igrave "&#236;"> <!-- latin small letter i with grave,
+                                  U+00EC ISOlat1 -->
+<!ENTITY iacute "&#237;"> <!-- latin small letter i with acute,
+                                  U+00ED ISOlat1 -->
+<!ENTITY icirc  "&#238;"> <!-- latin small letter i with circumflex,
+                                  U+00EE ISOlat1 -->
+<!ENTITY iuml   "&#239;"> <!-- latin small letter i with diaeresis,
+                                  U+00EF ISOlat1 -->
+<!ENTITY eth    "&#240;"> <!-- latin small letter eth, U+00F0 ISOlat1 -->
+<!ENTITY ntilde "&#241;"> <!-- latin small letter n with tilde,
+                                  U+00F1 ISOlat1 -->
+<!ENTITY ograve "&#242;"> <!-- latin small letter o with grave,
+                                  U+00F2 ISOlat1 -->
+<!ENTITY oacute "&#243;"> <!-- latin small letter o with acute,
+                                  U+00F3 ISOlat1 -->
+<!ENTITY ocirc  "&#244;"> <!-- latin small letter o with circumflex,
+                                  U+00F4 ISOlat1 -->
+<!ENTITY otilde "&#245;"> <!-- latin small letter o with tilde,
+                                  U+00F5 ISOlat1 -->
+<!ENTITY ouml   "&#246;"> <!-- latin small letter o with diaeresis,
+                                  U+00F6 ISOlat1 -->
+<!ENTITY divide "&#247;"> <!-- division sign, U+00F7 ISOnum -->
+<!ENTITY oslash "&#248;"> <!-- latin small letter o with stroke,
+                                  = latin small letter o slash,
+                                  U+00F8 ISOlat1 -->
+<!ENTITY ugrave "&#249;"> <!-- latin small letter u with grave,
+                                  U+00F9 ISOlat1 -->
+<!ENTITY uacute "&#250;"> <!-- latin small letter u with acute,
+                                  U+00FA ISOlat1 -->
+<!ENTITY ucirc  "&#251;"> <!-- latin small letter u with circumflex,
+                                  U+00FB ISOlat1 -->
+<!ENTITY uuml   "&#252;"> <!-- latin small letter u with diaeresis,
+                                  U+00FC ISOlat1 -->
+<!ENTITY yacute "&#253;"> <!-- latin small letter y with acute,
+                                  U+00FD ISOlat1 -->
+<!ENTITY thorn  "&#254;"> <!-- latin small letter thorn with,
+                                  U+00FE ISOlat1 -->
+<!ENTITY yuml   "&#255;"> <!-- latin small letter y with diaeresis,
+                                  U+00FF ISOlat1 -->
diff --git a/examples/xhtml/xhtml-special.ent b/examples/xhtml/xhtml-special.ent
new file mode 100644
--- /dev/null
+++ b/examples/xhtml/xhtml-special.ent
@@ -0,0 +1,79 @@
+<!-- Special characters for HTML -->
+
+<!-- Character entity set. Typical invocation:
+     <!ENTITY % HTMLspecial PUBLIC
+        "-//W3C//ENTITIES Special for XHTML//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">
+     %HTMLspecial;
+-->
+
+<!-- Portions (C) International Organization for Standardization 1986:
+     Permission to copy in any form is granted for use with
+     conforming SGML systems and applications as defined in
+     ISO 8879, provided this notice is included in all copies.
+-->
+
+<!-- Relevant ISO entity set is given unless names are newly introduced.
+     New names (i.e., not in ISO 8879 list) do not clash with any
+     existing ISO 8879 entity names. ISO 10646 character numbers
+     are given for each character, in hex. values are decimal
+     conversions of the ISO 10646 values and refer to the document
+     character set. Names are Unicode names. 
+-->
+
+<!-- C0 Controls and Basic Latin -->
+<!ENTITY quot    "&#34;"> <!--  quotation mark = APL quote,
+                                    U+0022 ISOnum -->
+<!ENTITY amp     "&#38;#38;"> <!--  ampersand, U+0026 ISOnum -->
+<!ENTITY lt      "&#38;#60;"> <!--  less-than sign, U+003C ISOnum -->
+<!ENTITY gt      "&#62;"> <!--  greater-than sign, U+003E ISOnum -->
+<!ENTITY apos	 "&#39;"> <!--  apostrophe mark, U+0027 ISOnum -->
+
+<!-- Latin Extended-A -->
+<!ENTITY OElig   "&#338;"> <!--  latin capital ligature OE,
+                                    U+0152 ISOlat2 -->
+<!ENTITY oelig   "&#339;"> <!--  latin small ligature oe, U+0153 ISOlat2 -->
+<!-- ligature is a misnomer, this is a separate character in some languages -->
+<!ENTITY Scaron  "&#352;"> <!--  latin capital letter S with caron,
+                                    U+0160 ISOlat2 -->
+<!ENTITY scaron  "&#353;"> <!--  latin small letter s with caron,
+                                    U+0161 ISOlat2 -->
+<!ENTITY Yuml    "&#376;"> <!--  latin capital letter Y with diaeresis,
+                                    U+0178 ISOlat2 -->
+
+<!-- Spacing Modifier Letters -->
+<!ENTITY circ    "&#710;"> <!--  modifier letter circumflex accent,
+                                    U+02C6 ISOpub -->
+<!ENTITY tilde   "&#732;"> <!--  small tilde, U+02DC ISOdia -->
+
+<!-- General Punctuation -->
+<!ENTITY ensp    "&#8194;"> <!-- en space, U+2002 ISOpub -->
+<!ENTITY emsp    "&#8195;"> <!-- em space, U+2003 ISOpub -->
+<!ENTITY thinsp  "&#8201;"> <!-- thin space, U+2009 ISOpub -->
+<!ENTITY zwnj    "&#8204;"> <!-- zero width non-joiner,
+                                    U+200C NEW RFC 2070 -->
+<!ENTITY zwj     "&#8205;"> <!-- zero width joiner, U+200D NEW RFC 2070 -->
+<!ENTITY lrm     "&#8206;"> <!-- left-to-right mark, U+200E NEW RFC 2070 -->
+<!ENTITY rlm     "&#8207;"> <!-- right-to-left mark, U+200F NEW RFC 2070 -->
+<!ENTITY ndash   "&#8211;"> <!-- en dash, U+2013 ISOpub -->
+<!ENTITY mdash   "&#8212;"> <!-- em dash, U+2014 ISOpub -->
+<!ENTITY lsquo   "&#8216;"> <!-- left single quotation mark,
+                                    U+2018 ISOnum -->
+<!ENTITY rsquo   "&#8217;"> <!-- right single quotation mark,
+                                    U+2019 ISOnum -->
+<!ENTITY sbquo   "&#8218;"> <!-- single low-9 quotation mark, U+201A NEW -->
+<!ENTITY ldquo   "&#8220;"> <!-- left double quotation mark,
+                                    U+201C ISOnum -->
+<!ENTITY rdquo   "&#8221;"> <!-- right double quotation mark,
+                                    U+201D ISOnum -->
+<!ENTITY bdquo   "&#8222;"> <!-- double low-9 quotation mark, U+201E NEW -->
+<!ENTITY dagger  "&#8224;"> <!-- dagger, U+2020 ISOpub -->
+<!ENTITY Dagger  "&#8225;"> <!-- double dagger, U+2021 ISOpub -->
+<!ENTITY permil  "&#8240;"> <!-- per mille sign, U+2030 ISOtech -->
+<!ENTITY lsaquo  "&#8249;"> <!-- single left-pointing angle quotation mark,
+                                    U+2039 ISO proposed -->
+<!-- lsaquo is proposed but not yet ISO standardized -->
+<!ENTITY rsaquo  "&#8250;"> <!-- single right-pointing angle quotation mark,
+                                    U+203A ISO proposed -->
+<!-- rsaquo is proposed but not yet ISO standardized -->
+<!ENTITY euro   "&#8364;"> <!--  euro sign, U+20AC NEW -->
diff --git a/examples/xhtml/xhtml-symbol.ent b/examples/xhtml/xhtml-symbol.ent
new file mode 100644
--- /dev/null
+++ b/examples/xhtml/xhtml-symbol.ent
@@ -0,0 +1,242 @@
+<!-- Mathematical, Greek and Symbolic characters for HTML -->
+
+<!-- Character entity set. Typical invocation:
+     <!ENTITY % HTMLsymbol PUBLIC
+        "-//W3C//ENTITIES Symbols for XHTML//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent">
+     %HTMLsymbol;
+-->
+
+<!-- Portions (C) International Organization for Standardization 1986:
+     Permission to copy in any form is granted for use with
+     conforming SGML systems and applications as defined in
+     ISO 8879, provided this notice is included in all copies.
+-->
+
+<!-- Relevant ISO entity set is given unless names are newly introduced.
+     New names (i.e., not in ISO 8879 list) do not clash with any
+     existing ISO 8879 entity names. ISO 10646 character numbers
+     are given for each character, in hex. values are decimal
+     conversions of the ISO 10646 values and refer to the document
+     character set. Names are Unicode names. 
+-->
+
+<!-- Latin Extended-B -->
+<!ENTITY fnof     "&#402;"> <!-- latin small f with hook = function
+                                    = florin, U+0192 ISOtech -->
+
+<!-- Greek -->
+<!ENTITY Alpha    "&#913;"> <!-- greek capital letter alpha, U+0391 -->
+<!ENTITY Beta     "&#914;"> <!-- greek capital letter beta, U+0392 -->
+<!ENTITY Gamma    "&#915;"> <!-- greek capital letter gamma,
+                                    U+0393 ISOgrk3 -->
+<!ENTITY Delta    "&#916;"> <!-- greek capital letter delta,
+                                    U+0394 ISOgrk3 -->
+<!ENTITY Epsilon  "&#917;"> <!-- greek capital letter epsilon, U+0395 -->
+<!ENTITY Zeta     "&#918;"> <!-- greek capital letter zeta, U+0396 -->
+<!ENTITY Eta      "&#919;"> <!-- greek capital letter eta, U+0397 -->
+<!ENTITY Theta    "&#920;"> <!-- greek capital letter theta,
+                                    U+0398 ISOgrk3 -->
+<!ENTITY Iota     "&#921;"> <!-- greek capital letter iota, U+0399 -->
+<!ENTITY Kappa    "&#922;"> <!-- greek capital letter kappa, U+039A -->
+<!ENTITY Lambda   "&#923;"> <!-- greek capital letter lambda,
+                                    U+039B ISOgrk3 -->
+<!ENTITY Mu       "&#924;"> <!-- greek capital letter mu, U+039C -->
+<!ENTITY Nu       "&#925;"> <!-- greek capital letter nu, U+039D -->
+<!ENTITY Xi       "&#926;"> <!-- greek capital letter xi, U+039E ISOgrk3 -->
+<!ENTITY Omicron  "&#927;"> <!-- greek capital letter omicron, U+039F -->
+<!ENTITY Pi       "&#928;"> <!-- greek capital letter pi, U+03A0 ISOgrk3 -->
+<!ENTITY Rho      "&#929;"> <!-- greek capital letter rho, U+03A1 -->
+<!-- there is no Sigmaf, and no U+03A2 character either -->
+<!ENTITY Sigma    "&#931;"> <!-- greek capital letter sigma,
+                                    U+03A3 ISOgrk3 -->
+<!ENTITY Tau      "&#932;"> <!-- greek capital letter tau, U+03A4 -->
+<!ENTITY Upsilon  "&#933;"> <!-- greek capital letter upsilon,
+                                    U+03A5 ISOgrk3 -->
+<!ENTITY Phi      "&#934;"> <!-- greek capital letter phi,
+                                    U+03A6 ISOgrk3 -->
+<!ENTITY Chi      "&#935;"> <!-- greek capital letter chi, U+03A7 -->
+<!ENTITY Psi      "&#936;"> <!-- greek capital letter psi,
+                                    U+03A8 ISOgrk3 -->
+<!ENTITY Omega    "&#937;"> <!-- greek capital letter omega,
+                                    U+03A9 ISOgrk3 -->
+
+<!ENTITY alpha    "&#945;"> <!-- greek small letter alpha,
+                                    U+03B1 ISOgrk3 -->
+<!ENTITY beta     "&#946;"> <!-- greek small letter beta, U+03B2 ISOgrk3 -->
+<!ENTITY gamma    "&#947;"> <!-- greek small letter gamma,
+                                    U+03B3 ISOgrk3 -->
+<!ENTITY delta    "&#948;"> <!-- greek small letter delta,
+                                    U+03B4 ISOgrk3 -->
+<!ENTITY epsilon  "&#949;"> <!-- greek small letter epsilon,
+                                    U+03B5 ISOgrk3 -->
+<!ENTITY zeta     "&#950;"> <!-- greek small letter zeta, U+03B6 ISOgrk3 -->
+<!ENTITY eta      "&#951;"> <!-- greek small letter eta, U+03B7 ISOgrk3 -->
+<!ENTITY theta    "&#952;"> <!-- greek small letter theta,
+                                    U+03B8 ISOgrk3 -->
+<!ENTITY iota     "&#953;"> <!-- greek small letter iota, U+03B9 ISOgrk3 -->
+<!ENTITY kappa    "&#954;"> <!-- greek small letter kappa,
+                                    U+03BA ISOgrk3 -->
+<!ENTITY lambda   "&#955;"> <!-- greek small letter lambda,
+                                    U+03BB ISOgrk3 -->
+<!ENTITY mu       "&#956;"> <!-- greek small letter mu, U+03BC ISOgrk3 -->
+<!ENTITY nu       "&#957;"> <!-- greek small letter nu, U+03BD ISOgrk3 -->
+<!ENTITY xi       "&#958;"> <!-- greek small letter xi, U+03BE ISOgrk3 -->
+<!ENTITY omicron  "&#959;"> <!-- greek small letter omicron, U+03BF NEW -->
+<!ENTITY pi       "&#960;"> <!-- greek small letter pi, U+03C0 ISOgrk3 -->
+<!ENTITY rho      "&#961;"> <!-- greek small letter rho, U+03C1 ISOgrk3 -->
+<!ENTITY sigmaf   "&#962;"> <!-- greek small letter final sigma,
+                                    U+03C2 ISOgrk3 -->
+<!ENTITY sigma    "&#963;"> <!-- greek small letter sigma,
+                                    U+03C3 ISOgrk3 -->
+<!ENTITY tau      "&#964;"> <!-- greek small letter tau, U+03C4 ISOgrk3 -->
+<!ENTITY upsilon  "&#965;"> <!-- greek small letter upsilon,
+                                    U+03C5 ISOgrk3 -->
+<!ENTITY phi      "&#966;"> <!-- greek small letter phi, U+03C6 ISOgrk3 -->
+<!ENTITY chi      "&#967;"> <!-- greek small letter chi, U+03C7 ISOgrk3 -->
+<!ENTITY psi      "&#968;"> <!-- greek small letter psi, U+03C8 ISOgrk3 -->
+<!ENTITY omega    "&#969;"> <!-- greek small letter omega,
+                                    U+03C9 ISOgrk3 -->
+<!ENTITY thetasym "&#977;"> <!-- greek small letter theta symbol,
+                                    U+03D1 NEW -->
+<!ENTITY upsih    "&#978;"> <!-- greek upsilon with hook symbol,
+                                    U+03D2 NEW -->
+<!ENTITY piv      "&#982;"> <!-- greek pi symbol, U+03D6 ISOgrk3 -->
+
+<!-- General Punctuation -->
+<!ENTITY bull     "&#8226;"> <!-- bullet = black small circle,
+                                     U+2022 ISOpub  -->
+<!-- bullet is NOT the same as bullet operator, U+2219 -->
+<!ENTITY hellip   "&#8230;"> <!-- horizontal ellipsis = three dot leader,
+                                     U+2026 ISOpub  -->
+<!ENTITY prime    "&#8242;"> <!-- prime = minutes = feet, U+2032 ISOtech -->
+<!ENTITY Prime    "&#8243;"> <!-- double prime = seconds = inches,
+                                     U+2033 ISOtech -->
+<!ENTITY oline    "&#8254;"> <!-- overline = spacing overscore,
+                                     U+203E NEW -->
+<!ENTITY frasl    "&#8260;"> <!-- fraction slash, U+2044 NEW -->
+
+<!-- Letterlike Symbols -->
+<!ENTITY weierp   "&#8472;"> <!-- script capital P = power set
+                                     = Weierstrass p, U+2118 ISOamso -->
+<!ENTITY image    "&#8465;"> <!-- blackletter capital I = imaginary part,
+                                     U+2111 ISOamso -->
+<!ENTITY real     "&#8476;"> <!-- blackletter capital R = real part symbol,
+                                     U+211C ISOamso -->
+<!ENTITY trade    "&#8482;"> <!-- trade mark sign, U+2122 ISOnum -->
+<!ENTITY alefsym  "&#8501;"> <!-- alef symbol = first transfinite cardinal,
+                                     U+2135 NEW -->
+<!-- alef symbol is NOT the same as hebrew letter alef,
+     U+05D0 although the same glyph could be used to depict both characters -->
+
+<!-- Arrows -->
+<!ENTITY larr     "&#8592;"> <!-- leftwards arrow, U+2190 ISOnum -->
+<!ENTITY uarr     "&#8593;"> <!-- upwards arrow, U+2191 ISOnum-->
+<!ENTITY rarr     "&#8594;"> <!-- rightwards arrow, U+2192 ISOnum -->
+<!ENTITY darr     "&#8595;"> <!-- downwards arrow, U+2193 ISOnum -->
+<!ENTITY harr     "&#8596;"> <!-- left right arrow, U+2194 ISOamsa -->
+<!ENTITY crarr    "&#8629;"> <!-- downwards arrow with corner leftwards
+                                     = carriage return, U+21B5 NEW -->
+<!ENTITY lArr     "&#8656;"> <!-- leftwards double arrow, U+21D0 ISOtech -->
+<!-- Unicode does not say that lArr is the same as the 'is implied by' arrow
+    but also does not have any other character for that function. So ? lArr can
+    be used for 'is implied by' as ISOtech suggests -->
+<!ENTITY uArr     "&#8657;"> <!-- upwards double arrow, U+21D1 ISOamsa -->
+<!ENTITY rArr     "&#8658;"> <!-- rightwards double arrow,
+                                     U+21D2 ISOtech -->
+<!-- Unicode does not say this is the 'implies' character but does not have 
+     another character with this function so ?
+     rArr can be used for 'implies' as ISOtech suggests -->
+<!ENTITY dArr     "&#8659;"> <!-- downwards double arrow, U+21D3 ISOamsa -->
+<!ENTITY hArr     "&#8660;"> <!-- left right double arrow,
+                                     U+21D4 ISOamsa -->
+
+<!-- Mathematical Operators -->
+<!ENTITY forall   "&#8704;"> <!-- for all, U+2200 ISOtech -->
+<!ENTITY part     "&#8706;"> <!-- partial differential, U+2202 ISOtech  -->
+<!ENTITY exist    "&#8707;"> <!-- there exists, U+2203 ISOtech -->
+<!ENTITY empty    "&#8709;"> <!-- empty set = null set = diameter,
+                                     U+2205 ISOamso -->
+<!ENTITY nabla    "&#8711;"> <!-- nabla = backward difference,
+                                     U+2207 ISOtech -->
+<!ENTITY isin     "&#8712;"> <!-- element of, U+2208 ISOtech -->
+<!ENTITY notin    "&#8713;"> <!-- not an element of, U+2209 ISOtech -->
+<!ENTITY ni       "&#8715;"> <!-- contains as member, U+220B ISOtech -->
+<!-- should there be a more memorable name than 'ni'? -->
+<!ENTITY prod     "&#8719;"> <!-- n-ary product = product sign,
+                                     U+220F ISOamsb -->
+<!-- prod is NOT the same character as U+03A0 'greek capital letter pi' though
+     the same glyph might be used for both -->
+<!ENTITY sum      "&#8721;"> <!-- n-ary sumation, U+2211 ISOamsb -->
+<!-- sum is NOT the same character as U+03A3 'greek capital letter sigma'
+     though the same glyph might be used for both -->
+<!ENTITY minus    "&#8722;"> <!-- minus sign, U+2212 ISOtech -->
+<!ENTITY lowast   "&#8727;"> <!-- asterisk operator, U+2217 ISOtech -->
+<!ENTITY radic    "&#8730;"> <!-- square root = radical sign,
+                                     U+221A ISOtech -->
+<!ENTITY prop     "&#8733;"> <!-- proportional to, U+221D ISOtech -->
+<!ENTITY infin    "&#8734;"> <!-- infinity, U+221E ISOtech -->
+<!ENTITY ang      "&#8736;"> <!-- angle, U+2220 ISOamso -->
+<!ENTITY and      "&#8743;"> <!-- logical and = wedge, U+2227 ISOtech -->
+<!ENTITY or       "&#8744;"> <!-- logical or = vee, U+2228 ISOtech -->
+<!ENTITY cap      "&#8745;"> <!-- intersection = cap, U+2229 ISOtech -->
+<!ENTITY cup      "&#8746;"> <!-- union = cup, U+222A ISOtech -->
+<!ENTITY int      "&#8747;"> <!-- integral, U+222B ISOtech -->
+<!ENTITY there4   "&#8756;"> <!-- therefore, U+2234 ISOtech -->
+<!ENTITY sim      "&#8764;"> <!-- tilde operator = varies with = similar to,
+                                     U+223C ISOtech -->
+<!-- tilde operator is NOT the same character as the tilde, U+007E,
+     although the same glyph might be used to represent both  -->
+<!ENTITY cong     "&#8773;"> <!-- approximately equal to, U+2245 ISOtech -->
+<!ENTITY asymp    "&#8776;"> <!-- almost equal to = asymptotic to,
+                                     U+2248 ISOamsr -->
+<!ENTITY ne       "&#8800;"> <!-- not equal to, U+2260 ISOtech -->
+<!ENTITY equiv    "&#8801;"> <!-- identical to, U+2261 ISOtech -->
+<!ENTITY le       "&#8804;"> <!-- less-than or equal to, U+2264 ISOtech -->
+<!ENTITY ge       "&#8805;"> <!-- greater-than or equal to,
+                                     U+2265 ISOtech -->
+<!ENTITY sub      "&#8834;"> <!-- subset of, U+2282 ISOtech -->
+<!ENTITY sup      "&#8835;"> <!-- superset of, U+2283 ISOtech -->
+<!-- note that nsup, 'not a superset of, U+2283' is not covered by the Symbol 
+     font encoding and is not included. Should it be, for symmetry?
+     It is in ISOamsn  --> 
+<!ENTITY nsub     "&#8836;"> <!-- not a subset of, U+2284 ISOamsn -->
+<!ENTITY sube     "&#8838;"> <!-- subset of or equal to, U+2286 ISOtech -->
+<!ENTITY supe     "&#8839;"> <!-- superset of or equal to,
+                                     U+2287 ISOtech -->
+<!ENTITY oplus    "&#8853;"> <!-- circled plus = direct sum,
+                                     U+2295 ISOamsb -->
+<!ENTITY otimes   "&#8855;"> <!-- circled times = vector product,
+                                     U+2297 ISOamsb -->
+<!ENTITY perp     "&#8869;"> <!-- up tack = orthogonal to = perpendicular,
+                                     U+22A5 ISOtech -->
+<!ENTITY sdot     "&#8901;"> <!-- dot operator, U+22C5 ISOamsb -->
+<!-- dot operator is NOT the same character as U+00B7 middle dot -->
+
+<!-- Miscellaneous Technical -->
+<!ENTITY lceil    "&#8968;"> <!-- left ceiling = apl upstile,
+                                     U+2308 ISOamsc  -->
+<!ENTITY rceil    "&#8969;"> <!-- right ceiling, U+2309 ISOamsc  -->
+<!ENTITY lfloor   "&#8970;"> <!-- left floor = apl downstile,
+                                     U+230A ISOamsc  -->
+<!ENTITY rfloor   "&#8971;"> <!-- right floor, U+230B ISOamsc  -->
+<!ENTITY lang     "&#9001;"> <!-- left-pointing angle bracket = bra,
+                                     U+2329 ISOtech -->
+<!-- lang is NOT the same character as U+003C 'less than' 
+     or U+2039 'single left-pointing angle quotation mark' -->
+<!ENTITY rang     "&#9002;"> <!-- right-pointing angle bracket = ket,
+                                     U+232A ISOtech -->
+<!-- rang is NOT the same character as U+003E 'greater than' 
+     or U+203A 'single right-pointing angle quotation mark' -->
+
+<!-- Geometric Shapes -->
+<!ENTITY loz      "&#9674;"> <!-- lozenge, U+25CA ISOpub -->
+
+<!-- Miscellaneous Symbols -->
+<!ENTITY spades   "&#9824;"> <!-- black spade suit, U+2660 ISOpub -->
+<!-- black here seems to mean filled as opposed to hollow -->
+<!ENTITY clubs    "&#9827;"> <!-- black club suit = shamrock,
+                                     U+2663 ISOpub -->
+<!ENTITY hearts   "&#9829;"> <!-- black heart suit = valentine,
+                                     U+2665 ISOpub -->
+<!ENTITY diams    "&#9830;"> <!-- black diamond suit, U+2666 ISOpub -->
diff --git a/examples/xhtml/xhtml.xml b/examples/xhtml/xhtml.xml
new file mode 100644
--- /dev/null
+++ b/examples/xhtml/xhtml.xml
@@ -0,0 +1,1484 @@
+<!DOCTYPE html SYSTEM "xhtml1-strict.dtd">
+<?xml-stylesheet href="http://www.w3.org/StyleSheets/TR/W3C-REC.css" type="text/css"?>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+<title>XHTML 1.0: The Extensible HyperText Markup
+Language</title>
+<link rel="stylesheet"
+href="http://www.w3.org/StyleSheets/TR/W3C-REC.css" type="text/css" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<style type="text/css">
+span.term { font-style: italic; color: rgb(0, 0, 192) }
+code {
+	color: green;
+	font-family: monospace;
+	font-weight: bold;
+}
+
+code.greenmono {
+	color: green;
+	font-family: monospace;
+	font-weight: bold;
+}
+.good {
+	border: solid green;
+	border-width: 2px;
+	color: green;
+	font-weight: bold;
+	margin-right: 5%;
+	margin-left: 0;
+}
+.bad  {
+	border: solid red;
+	border-width: 2px;
+	margin-left: 0;
+	margin-right: 5%;
+	color: rgb(192, 101, 101);
+}
+
+img {
+	color: white;
+	border: none;
+}
+
+div.navbar { text-align: center; }
+div.contents {
+	background-color: rgb(204,204,255);
+	padding: 0.5em;
+	border: none;
+	margin-right: 5%;
+}
+.tocline { list-style: none; }
+table.exceptions { background-color: rgb(255,255,153); }
+</style>
+</head>
+<body>
+<div class="navbar">
+  <a href="#toc">table of contents</a>
+  <hr />
+</div>
+<div class="head"><p><a href="http://www.w3.org/"><img class="head"
+src="http://www.w3.org/Icons/WWW/w3c_home.gif" alt="W3C" /></a></p>
+
+<h1 class="head"><a name="title" id="title">XHTML</a><sup>&#8482;</sup> 1.0:
+The Extensible HyperText Markup Language</h1>
+
+<h2>A Reformulation of HTML 4 in XML 1.0</h2>
+
+<h3>W3C Recommendation 26 January 2000</h3>
+
+<dl>
+<dt>This version:</dt>
+
+<dd><a href=
+"http://www.w3.org/TR/2000/REC-xhtml1-20000126">
+http://www.w3.org/TR/2000/REC-xhtml1-20000126</a> <br />
+(<a href="xhtml1.ps">Postscript version</a>,
+<a href="xhtml1.pdf">PDF version</a>,
+<a href="xhtml1.zip">ZIP archive</a>, or
+<a href="xhtml1.tgz">Gzip'd TAR archive</a>)
+</dd>
+
+<dt>Latest version:</dt>
+
+<dd><a href="http://www.w3.org/TR/xhtml1">
+http://www.w3.org/TR/xhtml1</a></dd>
+
+<dt>Previous version:</dt>
+
+<dd><a href=
+"http://www.w3.org/TR/1999/PR-xhtml1-19991210">
+http://www.w3.org/TR/1999/PR-xhtml1-19991210</a></dd>
+
+<dt>Authors:</dt>
+
+<dd>See <a href="#acks">acknowledgements</a>.</dd>
+</dl>
+
+<p class="copyright"><a
+href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright"> Copyright</a>
+&copy;2000 <a href="http://www.w3.org/"><abbr title="World Wide Web
+Consortium">W3C</abbr></a><sup>&reg;</sup> (<a
+href="http://www.lcs.mit.edu/"><abbr
+title="Massachusetts Institute of Technology">MIT</abbr></a>, <a
+href="http://www.inria.fr/"><abbr
+lang="fr" title="Institut National de Recherche en Informatique et
+Automatique">INRIA</abbr></a>, <a
+href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C <a
+href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+<a
+href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+<a
+href="http://www.w3.org/Consortium/Legal/copyright-documents-19990405">document
+use</a> and <a
+href="http://www.w3.org/Consortium/Legal/copyright-software-19980720">software
+licensing</a> rules
+apply.</p>
+<hr />
+</div>
+
+<h2 class="notoc">Abstract</h2>
+
+<p>This specification defines <abbr title="Extensible Hypertext Markup
+Language">XHTML</abbr> 1.0, a reformulation of HTML&nbsp;4
+as an XML 1.0 application, and three <abbr title="Document Type
+Definition">DTDs</abbr> corresponding to
+the ones defined by HTML&nbsp;4. The semantics of the elements and
+their attributes are defined in the W3C Recommendation for HTML&nbsp;4.
+These semantics provide the foundation for future
+extensibility of XHTML. Compatibility with existing HTML user
+agents is possible by following a small set of guidelines.</p>
+
+<h2>Status of this document</h2>
+
+<p><em>This section describes the status of this document at the time
+of its publication. Other documents may supersede this document. The
+latest status of this document series is maintained at the W3C.</em></p>
+
+<p>
+This document has been reviewed by W3C Members and other
+interested parties and has been endorsed by the Director
+as a W3C Recommendation. It is a stable document and may be
+used as reference material or cited as a normative
+reference from another document. W3C's role in making the
+Recommendation is to draw attention to the specification and
+to promote its widespread deployment. This enhances the
+functionality and interoperability of the Web.
+</p>
+<p>This document has been produced as part of the <a href=
+"http://www.w3.org/MarkUp/">W3C HTML Activity</a>. The goals of
+the <a href="http://www.w3.org/MarkUp/Group/">HTML Working
+Group</a> <i>(<a href="http://cgi.w3.org/MemberAccess/">members
+only</a>)</i> are discussed in the <a href=
+"http://www.w3.org/MarkUp/Group/HTMLcharter">HTML Working Group
+charter</a> <i>(<a href="http://cgi.w3.org/MemberAccess/">members
+only</a>)</i>.</p>
+
+<p>A list of current W3C Recommendations and other technical documents
+can be found at <a
+href="http://www.w3.org/TR">http://www.w3.org/TR</a>.</p>
+
+<p>Public discussion on <abbr title="HyperText Markup
+Language">HTML</abbr> features takes place on the mailing list <a
+href="mailto:www-html@w3.org"> www-html@w3.org</a> (<a href=
+"http://lists.w3.org/Archives/Public/www-html/">archive</a>).</p>
+
+<p>Please report errors in this document to <a
+href="mailto:www-html-editor@w3.org">www-html-editor@w3.org</a>.</p>
+
+<p>The list of known errors in this specification is available at <a
+href="http://www.w3.org/2000/01/REC-xhtml1-20000126-errata">http://www.w3.org/2000/01/REC-xhtml1-20000126-errata</a>.</p>
+
+<h2 class="notoc"><a id="toc" name="toc">Contents</a></h2>
+
+<div class="contents">
+<ul class="toc">
+<li class="tocline">1. <a href="#xhtml">What is XHTML?</a>
+
+<ul class="toc">
+<li class="tocline">1.1 <a href="#html4">What is HTML 4?</a></li>
+
+<li class="tocline">1.2 <a href="#xml">What is XML?</a></li>
+
+<li class="tocline">1.3 <a href="#why">Why the need for XHTML?</a></li>
+</ul>
+</li>
+
+<li class="tocline">2. <a href="#defs">Definitions</a>
+
+<ul class="toc">
+<li class="tocline">2.1 <a href="#terms">Terminology</a></li>
+
+<li class="tocline">2.2 <a href="#general">General Terms</a></li>
+</ul>
+</li>
+
+<li class="tocline">3. <a href="#normative">Normative Definition of XHTML 1.0</a>
+
+
+<ul class="toc">
+<li class="tocline">3.1 <a href="#docconf">Document Conformance</a></li>
+
+<li class="tocline">3.2 <a href="#uaconf">User Agent Conformance</a></li>
+</ul>
+</li>
+
+<li class="tocline">4. <a href="#diffs">Differences with HTML 4</a>
+
+</li>
+
+<li class="tocline">5. <a href="#issues">Compatibility Issues</a>
+
+<ul class="toc">
+<li class="tocline">5.1 <a href="#media">Internet Media Types</a></li>
+</ul>
+</li>
+
+<li class="tocline">6. <a href="#future">Future Directions</a>
+
+<ul class="toc">
+<li class="tocline">6.1 <a href="#mods">Modularizing HTML</a></li>
+
+<li class="tocline">6.2 <a href="#extensions">Subsets and Extensibility</a></li>
+
+<li class="tocline">6.3 <a href="#profiles">Document Profiles</a></li>
+</ul>
+</li>
+
+<li class="tocline"><a href="#dtds">Appendix A. DTDs</a></li>
+
+<li class="tocline"><a href="#prohibitions">Appendix B. Element
+Prohibitions</a></li>
+
+<li class="tocline"><a href="#guidelines">Appendix C. HTML Compatibility Guidelines</a></li>
+
+<li class="tocline"><a href="#acks">Appendix D. Acknowledgements</a></li>
+
+<li class="tocline"><a href="#refs">Appendix E. References</a></li>
+</ul>
+</div>
+
+<!--OddPage-->
+<h1><a name="xhtml" id="xhtml">1. What is XHTML?</a></h1>
+
+<p>XHTML is a family of current and future document types and modules that
+reproduce, subset, and extend HTML&nbsp;4 <a href="#ref-html4">[HTML]</a>. XHTML family document types are <abbr title="Extensible Markup Language">XML</abbr> based,
+and ultimately are designed to work in conjunction with XML-based user agents.
+The details of this family and its evolution are
+discussed in more detail in the section on <a href="#future">Future
+Directions</a>. </p>
+
+<p>XHTML 1.0 (this specification) is the first document type in the XHTML
+family. It is a reformulation of the three HTML&nbsp;4 document types as
+applications of XML 1.0 <a href="#ref-xml"> [XML]</a>. It is intended
+to be used as a language for content that is both XML-conforming and, if some
+simple <a href="#guidelines">guidelines</a> are followed,
+operates in HTML&nbsp;4 conforming user agents. Developers who migrate
+their content to XHTML 1.0 will realize the following benefits:</p>
+
+<ul>
+<li>XHTML documents are XML conforming. As such, they are readily viewed,
+edited, and validated with standard XML tools.</li>
+<li>XHTML documents can be written to
+to operate as well or better than they did before in existing
+HTML&nbsp;4-conforming user agents as well as in new, XHTML 1.0 conforming user
+agents.</li>
+<li>XHTML documents can utilize applications (e.g. scripts and applets) that rely
+upon either the HTML Document Object Model or the XML Document Object Model <a
+href="#ref-dom">[DOM]</a>.</li>
+<li>As the XHTML family evolves, documents conforming to XHTML 1.0 will be more
+likely to interoperate within and among various XHTML environments.</li>
+</ul>
+
+<p>The XHTML family is the next step in the evolution of the Internet. By
+migrating to XHTML today, content developers can enter the XML world with all
+of its attendant benefits, while still remaining confident in their
+content's backward and future compatibility.</p>
+
+<h2><a name="html4" id="html4">1.1 What is HTML&nbsp;4?</a></h2>
+
+<p>HTML 4 <a href="#ref-html4">[HTML]</a> is an <abbr title="Standard
+Generalized Markup Language">SGML</abbr> (Standard
+Generalized Markup Language) application conforming to
+International Standard <abbr title="Organization for International
+Standardization">ISO</abbr> 8879, and is widely regarded as the
+standard publishing language of the World Wide Web.</p>
+
+<p>SGML is a language for describing markup languages,
+particularly those used in electronic document exchange, document
+management, and document publishing. HTML is an example of a
+language defined in SGML.</p>
+
+<p>SGML has been around since the middle 1980's and has remained
+quite stable. Much of this stability stems from the fact that the
+language is both feature-rich and flexible. This flexibility,
+however, comes at a price, and that price is a level of
+complexity that has inhibited its adoption in a diversity of
+environments, including the World Wide Web.</p>
+
+<p>HTML, as originally conceived, was to be a language for the
+exchange of scientific and other technical documents, suitable
+for use by non-document specialists. HTML addressed the problem
+of SGML complexity by specifying a small set of structural and
+semantic tags suitable for authoring relatively simple documents.
+In addition to simplifying the document structure, HTML added
+support for hypertext. Multimedia capabilities were added
+later.</p>
+
+<p>In a remarkably short space of time, HTML became wildly
+popular and rapidly outgrew its original purpose. Since HTML's
+inception, there has been rapid invention of new elements for use
+within HTML (as a standard) and for adapting HTML to vertical,
+highly specialized, markets. This plethora of new elements has
+led to compatibility problems for documents across different
+platforms.</p>
+
+<p>As the heterogeneity of both software and platforms rapidly
+proliferate, it is clear that the suitability of 'classic' HTML&nbsp;4
+for use on these platforms is somewhat limited.</p>
+
+<h2><a name="xml" id="xml">1.2 What is XML?</a></h2>
+
+<p>XML<sup>&#8482;</sup> is the shorthand for Extensible Markup
+Language, and is an acronym of Extensible Markup Language <a
+href="#ref-xml">[XML]</a>.</p>
+
+<p>XML was conceived as a means of regaining the power and
+flexibility of SGML without most of its complexity. Although a
+restricted form of SGML, XML nonetheless preserves most of SGML's
+power and richness, and yet still retains all of SGML's commonly
+used features.</p>
+
+<p>While retaining these beneficial features, XML removes many of
+the more complex features of SGML that make the authoring and
+design of suitable software both difficult and costly.</p>
+
+<h2><a name="why" id="why">1.3 Why the need for XHTML?</a></h2>
+
+<p>The benefits of migrating to XHTML 1.0 are described above. Some of the
+benefits of migrating to XHTML in general are:</p>
+
+<ul>
+<li>Document developers and user agent designers are constantly
+discovering new ways to express their ideas through new markup. In XML, it is
+relatively easy to introduce new elements or additional element
+attributes.  The XHTML family is designed to accommodate these extensions
+through XHTML modules and techniques for developing new XHTML-conforming
+modules (described in the forthcoming XHTML Modularization specification).
+These modules will permit the combination of existing and
+new feature sets when developing content and when designing new user
+agents.</li>
+
+<li>Alternate ways of accessing the Internet are constantly being
+introduced.  Some estimates indicate that by the year 2002, 75% of
+Internet document viewing will be carried out on these alternate
+platforms.  The XHTML family is designed with general user agent
+interoperability in mind. Through a new user agent and document profiling
+mechanism, servers, proxies, and user agents will be able to perform
+best effort content transformation. Ultimately, it will be possible to
+develop XHTML-conforming content that is usable by any XHTML-conforming
+user agent.</li>
+
+</ul>
+<!--OddPage-->
+<h1><a name="defs" id="defs">2. Definitions</a></h1>
+
+<h2><a name="terms" id="terms">2.1 Terminology</a></h2>
+
+<p>The following terms are used in this specification. These
+terms extend the definitions in <a href="#ref-rfc2119">
+[RFC2119]</a> in ways based upon similar definitions in ISO/<abbr
+title="International Electro-technical Commission">IEC</abbr>
+9945-1:1990 <a href="#ref-posix">[POSIX.1]</a>:</p>
+
+<dl>
+<dt>Implementation-defined</dt>
+
+<dd>A value or behavior is implementation-defined when it is left
+to the implementation to define [and document] the corresponding
+requirements for correct document construction.</dd>
+
+<dt>May</dt>
+
+<dd>With respect to implementations, the word "may" is to be
+interpreted as an optional feature that is not required in this
+specification but can be provided. With respect to <a href=
+"#docconf">Document Conformance</a>, the word "may" means that
+the optional feature must not be used. The term "optional" has
+the same definition as "may".</dd>
+
+<dt>Must</dt>
+
+<dd>In this specification, the word "must" is to be interpreted
+as a mandatory requirement on the implementation or on Strictly
+Conforming XHTML Documents, depending upon the context. The term
+"shall" has the same definition as "must".</dd>
+
+<dt>Reserved</dt>
+
+<dd>A value or behavior is unspecified, but it is not allowed to
+be used by Conforming Documents nor to be supported by a
+Conforming User Agents.</dd>
+
+<dt>Should</dt>
+
+<dd>With respect to implementations, the word "should" is to be
+interpreted as an implementation recommendation, but not a
+requirement. With respect to documents, the word "should" is to
+be interpreted as recommended programming practice for documents
+and a requirement for Strictly Conforming XHTML Documents.</dd>
+
+<dt>Supported</dt>
+
+<dd>Certain facilities in this specification are optional. If a
+facility is supported, it behaves as specified by this
+specification.</dd>
+
+<dt>Unspecified</dt>
+
+<dd>When a value or behavior is unspecified, the specification
+defines no portability requirements for a facility on an
+implementation even when faced with a document that uses the
+facility. A document that requires specific behavior in such an
+instance, rather than tolerating any behavior when using that
+facility, is not a Strictly Conforming XHTML Document.</dd>
+</dl>
+
+<h2><a name="general" id="general">2.2 General Terms</a></h2>
+
+<dl>
+<dt>Attribute</dt>
+
+<dd>An attribute is a parameter to an element declared in the
+DTD. An attribute's type and value range, including a possible
+default value, are defined in the DTD.</dd>
+
+<dt>DTD</dt>
+
+<dd>A DTD, or document type definition, is a collection of XML
+declarations that, as a collection, defines the legal structure,
+<span class="term">elements</span>, and <span class="term">
+attributes</span> that are available for use in a document that
+complies to the DTD.</dd>
+
+<dt>Document</dt>
+
+<dd>A document is a stream of data that, after being combined
+with any other streams it references, is structured such that it
+holds information contained within <span class="term">
+elements</span> that are organized as defined in the associated
+<span class="term">DTD</span>. See <a href="#docconf">Document
+Conformance</a> for more information.</dd>
+
+<dt>Element</dt>
+
+<dd>An element is a document structuring unit declared in the
+<span class="term">DTD</span>. The element's content model is
+defined in the <span class="term">DTD</span>, and additional
+semantics may be defined in the prose description of the
+element.</dd>
+
+<dt><a name="facilities" id="facilities">Facilities</a></dt>
+
+<dd>Functionality includes <span class="term">elements</span>,
+<span class="term">attributes</span>, and the semantics
+associated with those <span class="term">elements</span> and
+<span class="term">attributes</span>. An implementation
+supporting that functionality is said to provide the necessary
+facilities.</dd>
+
+<dt>Implementation</dt>
+
+<dd>An implementation is a system that provides collection of
+<span class="term">facilities</span> and services that supports
+this specification. See <a href="#uaconf">User Agent
+Conformance</a> for more information.</dd>
+
+<dt>Parsing</dt>
+
+<dd>Parsing is the act whereby a <span class="term">
+document</span> is scanned, and the information contained within
+the <span class="term">document</span> is filtered into the
+context of the <span class="term">elements</span> in which the
+information is structured.</dd>
+
+<dt>Rendering</dt>
+
+<dd>Rendering is the act whereby the information in a <span
+class="term">document</span> is presented. This presentation is
+done in the form most appropriate to the environment (e.g.
+aurally, visually, in print).</dd>
+
+<dt>User Agent</dt>
+
+<dd>A user agent is an <span class="term">implementation</span>
+that retrieves and processes XHTML documents. See <a href=
+"#uaconf">User Agent Conformance</a> for more information.</dd>
+
+<dt>Validation</dt>
+
+<dd>Validation is a process whereby <span class="term">
+documents</span> are verified against the associated <span class=
+"term">DTD</span>, ensuring that the structure, use of <span
+class="term">elements</span>, and use of <span class="term">
+attributes</span> are consistent with the definitions in the
+<span class="term">DTD</span>.</dd>
+
+<dt><a name="wellformed" id="wellformed">Well-formed</a></dt>
+
+<dd>A <span class="term">document</span> is well-formed when it
+is structured according to the rules defined in <a href=
+"http://www.w3.org/TR/REC-xml#sec-well-formed">Section 2.1</a> of
+the XML 1.0 Recommendation <a href="#ref-xml">[XML]</a>.
+Basically, this definition states that elements, delimited by
+their start and end tags, are nested properly within one
+another.</dd>
+</dl>
+
+<!--OddPage-->
+<h1><a name="normative" id="normative">3. Normative Definition of
+XHTML 1.0</a></h1>
+
+<h2><a name="docconf" id="docconf">3.1 Document
+Conformance</a></h2>
+
+<p>This version of XHTML provides a definition of strictly
+conforming XHTML documents, which are restricted to tags and
+attributes from the XHTML namespace. See <a href=
+"#well-formed">Section 3.1.2</a> for information on using XHTML
+with other namespaces, for instance, to include metadata
+expressed in <abbr title="Resource Description Format">RDF</abbr> within XHTML documents.</p>
+
+<h3><a name="strict" id="strict">3.1.1 Strictly Conforming
+Documents</a></h3>
+
+<p>A Strictly Conforming XHTML Document is a document that
+requires only the facilities described as mandatory in this
+specification. Such a document must meet all of the following
+criteria:</p>
+
+<ol>
+<li>
+<p>It must validate against one of the three DTDs found in <a
+href="#dtds">Appendix&#160;A</a>.</p>
+</li>
+
+<li>
+<p>The root element of the document must be <code>
+&lt;html&gt;</code>.</p>
+</li>
+
+<li>
+<p>The root element of the document must designate the XHTML
+namespace using the <code>xmlns</code> attribute <a href=
+"#ref-xmlns">[XMLNAMES]</a>. The namespace for XHTML is
+defined to be
+<code>http://www.w3.org/1999/xhtml</code>.</p>
+</li>
+
+<li>
+<p>There must be a DOCTYPE declaration in the document prior to
+the root element. The public identifier included in
+the DOCTYPE declaration must reference one of the three DTDs
+found in <a href="#dtds">Appendix&#160;A</a> using the respective
+Formal Public Identifier. The system identifier may be changed to reflect
+local system conventions.</p>
+
+<pre>
+&lt;!DOCTYPE html
+     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+     "DTD/xhtml1-strict.dtd"&gt;
+
+&lt;!DOCTYPE html
+     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+     "DTD/xhtml1-transitional.dtd"&gt;
+
+&lt;!DOCTYPE html
+     PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+     "DTD/xhtml1-frameset.dtd"&gt;
+</pre>
+</li>
+</ol>
+
+<p>Here is an example of a minimal XHTML document.</p>
+
+<div class="good">
+<pre>
+&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;!DOCTYPE html
+     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "DTD/xhtml1-strict.dtd"&gt;
+&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;
+  &lt;head&gt;
+    &lt;title&gt;Virtual Library&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+    &lt;p&gt;Moved to &lt;a href="http://vlib.org/"&gt;vlib.org&lt;/a&gt;.&lt;/p&gt;
+  &lt;/body&gt;
+&lt;/html&gt;</pre>
+</div>
+
+<p>Note that in this example, the XML declaration is included. An XML
+declaration like the one above is
+not required in all XML documents. XHTML document authors are strongly encouraged to use XML declarations in all their documents. Such a declaration is required
+when the character encoding of the document is other than the default UTF-8 or
+UTF-16.</p>
+
+<h3><a name="well-formed" id="well-formed">3.1.2 Using XHTML with
+other namespaces</a></h3>
+
+<p>The XHTML namespace may be used with other XML namespaces
+as per <a href="#ref-xmlns">[XMLNAMES]</a>, although such
+documents are not strictly conforming XHTML 1.0 documents as
+defined above. Future work by W3C will address ways to specify
+conformance for documents involving multiple namespaces.</p>
+
+<p>The following example shows the way in which XHTML 1.0 could
+be used in conjunction with the MathML Recommendation:</p>
+
+<div class="good">
+<pre>
+&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;
+  &lt;head&gt;
+    &lt;title&gt;A Math Example&lt;/title&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+    &lt;p&gt;The following is MathML markup:&lt;/p&gt;
+    &lt;math xmlns="http://www.w3.org/1998/Math/MathML"&gt;
+      &lt;apply&gt; &lt;log/&gt;
+        &lt;logbase&gt;
+          &lt;cn&gt; 3 &lt;/cn&gt;
+        &lt;/logbase&gt;
+        &lt;ci&gt; x &lt;/ci&gt;
+      &lt;/apply&gt;
+    &lt;/math&gt;
+  &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+</div>
+
+<p>The following example shows the way in which XHTML 1.0 markup
+could be incorporated into another XML namespace:</p>
+
+<div class="good">
+<pre>
+&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;!-- initially, the default namespace is "books" --&gt;
+&lt;book xmlns='urn:loc.gov:books'
+    xmlns:isbn='urn:ISBN:0-395-36341-6' xml:lang="en" lang="en"&gt;
+  &lt;title&gt;Cheaper by the Dozen&lt;/title&gt;
+  &lt;isbn:number&gt;1568491379&lt;/isbn:number&gt;
+  &lt;notes&gt;
+    &lt;!-- make HTML the default namespace for a hypertext commentary --&gt;
+    &lt;p xmlns='http://www.w3.org/1999/xhtml'&gt;
+        This is also available &lt;a href="http://www.w3.org/"&gt;online&lt;/a&gt;.
+    &lt;/p&gt;
+  &lt;/notes&gt;
+&lt;/book&gt;
+</pre>
+</div>
+
+<h2><a name="uaconf" id="uaconf">3.2 User Agent
+Conformance</a></h2>
+
+<p>A conforming user agent must meet all of the following
+criteria:</p>
+
+<ol>
+<li>In order to be consistent with the XML 1.0 Recommendation <a
+href="#ref-xml">[XML]</a>, the user agent must parse and evaluate
+an XHTML document for well-formedness. If the user agent claims
+to be a validating user agent, it must also validate documents
+against their referenced DTDs according to <a href="#ref-xml">
+[XML]</a>.</li>
+
+<li>When the user agent claims to support <a href="#facilities">
+facilities</a> defined within this specification or required by
+this specification through normative reference, it must do so in
+ways consistent with the facilities' definition.</li>
+
+<li>When a user agent processes an XHTML document as generic XML,
+it shall only recognize attributes of type
+<code>ID</code> (e.g. the <code>id</code> attribute on most XHTML elements)
+as fragment identifiers.</li>
+
+<li>If a user agent encounters an element it does not recognize,
+it must render the element's content.</li>
+
+<li>If a user agent encounters an attribute it does not
+recognize, it must ignore the entire attribute specification
+(i.e., the attribute and its value).</li>
+
+<li>If a user agent encounters an attribute value it doesn't
+recognize, it must use the default attribute value.</li>
+
+<li>If it encounters an entity reference (other than one
+of the predefined entities) for which the User Agent has
+processed no declaration (which could happen if the declaration
+is in the external subset which the User Agent hasn't read), the entity
+reference should be rendered as the characters (starting
+with the ampersand and ending with the semi-colon) that
+make up the entity reference.</li>
+
+<li>When rendering content, User Agents that encounter
+characters or character entity references that are recognized but not renderable should display the document in such a way that it is obvious to the user that normal rendering has not taken place.</li>
+
+<li>
+The following characters are defined in [XML] as whitespace characters:
+
+<ul>
+<li>Space (&amp;#x0020;)</li>
+<li>Tab (&amp;#x0009;)</li>
+<li>Carriage return (&amp;#x000D;)</li>
+<li>Line feed (&amp;#x000A;)</li>
+</ul>
+
+<p>
+The XML processor normalizes different system's line end codes into one
+single line-feed character, that is passed up to the application. The XHTML
+user agent in addition, must treat the following characters as whitespace:
+</p>
+
+<ul>
+<li>Form feed (&amp;#x000C;)</li>
+<li>Zero-width space (&amp;#x200B;)</li>
+</ul>
+
+<p>
+In elements where the 'xml:space' attribute is set to 'preserve', the user
+agent must leave all whitespace characters intact (with the exception of
+leading and trailing whitespace characters, which should be removed).
+Otherwise, whitespace
+is handled according to the following rules:
+</p>
+
+<ul>
+<li>
+All whitespace surrounding block elements should be removed.
+</li>
+<li>
+Comments are removed entirely and do not affect whitespace handling. One
+whitespace character on either side of a comment is treated as two white
+space characters.
+</li>
+<li>
+Leading and trailing whitespace inside a block element must be removed.
+</li>
+<li>Line feed characters within a block element must be converted into a
+space (except when the 'xml:space' attribute is set to 'preserve').
+</li>
+<li>
+A sequence of white space characters must be reduced to a single space
+character (except when the 'xml:space' attribute is set to 'preserve').
+</li>
+<li>
+With regard to rendition,
+the User Agent should render the content in a
+manner appropriate to the language in which the content is written.
+In languages whose primary script is Latinate, the ASCII space
+character is typically used to encode both grammatical word boundaries and
+typographic whitespace; in languages whose script is related to Nagari
+(e.g., Sanskrit, Thai, etc.), grammatical boundaries may be encoded using
+the ZW 'space' character, but will not typically be represented by
+typographic whitespace in rendered output; languages using Arabiform scripts
+may encode typographic whitespace using a space character, but may also use
+the ZW space character to delimit 'internal' grammatical boundaries (what
+look like words in Arabic to an English eye frequently encode several words,
+e.g. 'kitAbuhum' = 'kitAbu-hum' = 'book them' == their book); and languages
+in the Chinese script tradition typically neither encode such delimiters nor
+use typographic whitespace in this way.
+</li>
+</ul>
+
+<p>Whitespace in attribute values is processed according to <a
+href="#ref-xml">[XML]</a>.</p>
+</li>
+</ol>
+
+<!--OddPage-->
+<h1><a name="diffs" id="diffs">4. Differences with HTML&nbsp;4</a></h1>
+
+<p>Due to the fact that XHTML is an XML application, certain
+practices that were perfectly legal in SGML-based HTML&nbsp;4 <a
+href="#ref-html4">[HTML]</a> must be changed.</p>
+
+<h2><a name="h-4.1" id="h-4.1">4.1 Documents must be
+well-formed</a></h2>
+
+<p><a href="#wellformed">Well-formedness</a> is a new concept
+introduced by <a href="#ref-xml">[XML]</a>. Essentially this
+means that all elements must either have closing tags or be
+written in a special form (as described below), and that all the
+elements must nest.</p>
+
+<p>Although overlapping is illegal in SGML, it was widely
+tolerated in existing browsers.</p>
+
+<div class="good">
+<p><strong><em>CORRECT: nested elements.</em></strong></p>
+
+<p>&lt;p&gt;here is an emphasized
+&lt;em&gt;paragraph&lt;/em&gt;.&lt;/p&gt;</p>
+</div>
+
+<div class="bad">
+<p><strong><em>INCORRECT: overlapping elements</em></strong></p>
+
+<p>&lt;p&gt;here is an emphasized
+&lt;em&gt;paragraph.&lt;/p&gt;&lt;/em&gt;</p>
+</div>
+
+<h2><a name="h-4.2" id="h-4.2">4.2 Element and attribute
+names must be in lower case</a></h2>
+
+<p>XHTML documents must use lower case for all HTML element and
+attribute names. This difference is necessary because XML is
+case-sensitive e.g. &lt;li&gt; and &lt;LI&gt; are different
+tags.</p>
+
+<h2><a name="h-4.3" id="h-4.3">4.3 For non-empty elements,
+end tags are required</a></h2>
+
+<p>In SGML-based HTML 4 certain elements were permitted to omit
+the end tag; with the elements that followed implying closure.
+This omission is not permitted in XML-based XHTML. All elements
+other than those declared in the DTD as <code>EMPTY</code> must
+have an end tag.</p>
+
+<div class="good">
+<p><strong><em>CORRECT: terminated elements</em></strong></p>
+
+<p>&lt;p&gt;here is a paragraph.&lt;/p&gt;&lt;p&gt;here is
+another paragraph.&lt;/p&gt;</p>
+</div>
+
+<div class="bad">
+<p><strong><em>INCORRECT: unterminated elements</em></strong></p>
+
+<p>&lt;p&gt;here is a paragraph.&lt;p&gt;here is another
+paragraph.</p>
+</div>
+
+<h2><a name="h-4.4" id="h-4.4">4.4 Attribute values must
+always be quoted</a></h2>
+
+<p>All attribute values must be quoted, even those which appear
+to be numeric.</p>
+
+<div class="good">
+<p><strong><em>CORRECT: quoted attribute values</em></strong></p>
+
+<p>&lt;table rows="3"&gt;</p>
+</div>
+
+<div class="bad">
+<p><strong><em>INCORRECT: unquoted attribute values</em></strong></p>
+
+<p>&lt;table rows=3&gt;</p>
+</div>
+
+<h2><a name="h-4.5" id="h-4.5">4.5 Attribute
+Minimization</a></h2>
+
+<p>XML does not support attribute minimization. Attribute-value
+pairs must be written in full. Attribute names such as <code>
+compact</code> and <code>checked</code> cannot occur in elements
+without their value being specified.</p>
+
+<div class="good">
+<p><strong><em>CORRECT: unminimized attributes</em></strong></p>
+
+<p>&lt;dl compact="compact"&gt;</p>
+</div>
+
+<div class="bad">
+<p><strong><em>INCORRECT: minimized attributes</em></strong></p>
+
+<p>&lt;dl compact&gt;</p>
+</div>
+
+<h2><a name="h-4.6" id="h-4.6">4.6 Empty Elements</a></h2>
+
+<p>Empty elements must either have an end tag or the start tag must end with <code>/&gt;</code>. For instance,
+<code>&lt;br/&gt;</code> or <code>&lt;hr&gt;&lt;/hr&gt;</code>. See <a
+href="#guidelines">HTML Compatibility Guidelines</a> for information on ways to
+ensure this is backward compatible with HTML 4 user agents.</p>
+
+<div class="good">
+<p><strong><em>CORRECT: terminated empty tags</em></strong></p>
+
+<p>&lt;br/&gt;&lt;hr/&gt;</p>
+</div>
+
+<div class="bad">
+<p><strong><em>INCORRECT: unterminated empty tags</em></strong></p>
+
+<p>&lt;br&gt;&lt;hr&gt;</p>
+</div>
+
+<h2><a name="h-4.7" id="h-4.7">4.7 Whitespace handling in
+attribute values</a></h2>
+
+<p>In attribute values, user agents will strip leading and
+trailing whitespace from attribute values and map sequences
+of one or more whitespace characters (including line breaks) to
+a single inter-word space (an ASCII space character for western
+scripts). See <a href="http://www.w3.org/TR/REC-xml#AVNormalize">
+Section 3.3.3</a> of <a href="#ref-xml">[XML]</a>.</p>
+
+<h2><a name="h-4.8" id="h-4.8">4.8 Script and Style
+elements</a></h2>
+
+<p>In XHTML, the script and style elements are declared as having
+<code>#PCDATA</code> content. As a result, <code>&lt;</code> and
+<code>&amp;</code> will be treated as the start of markup, and
+entities such as <code>&amp;lt;</code> and <code>&amp;amp;</code>
+will be recognized as entity references by the XML processor to
+<code>&lt;</code> and <code>&amp;</code> respectively. Wrapping
+the content of the script or style element within a <code>
+CDATA</code> marked section avoids the expansion of these
+entities.</p>
+
+<div class="good">
+<pre>
+&lt;script&gt;
+ &lt;![CDATA[
+ ... unescaped script content ...
+ ]]&gt;
+ &lt;/script&gt;
+</pre>
+</div>
+
+<p><code>CDATA</code> sections are recognized by the XML
+processor and appear as nodes in the Document Object Model, see
+<a href=
+"http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-E067D597">
+Section 1.3</a> of the DOM Level 1 Recommendation <a href=
+"#ref-dom">[DOM]</a>.</p>
+
+<p>An alternative is to use external script and style
+documents.</p>
+
+<h2><a name="h-4.9" id="h-4.9">4.9 SGML exclusions</a></h2>
+
+<p>SGML gives the writer of a DTD the ability to exclude specific
+elements from being contained within an element. Such
+prohibitions (called "exclusions") are not possible in XML.</p>
+
+<p>For example, the HTML 4 Strict DTD forbids the nesting of an
+'<code>a</code>' element within another '<code>a</code>' element
+to any descendant depth. It is not possible to spell out such
+prohibitions in XML. Even though these prohibitions cannot be
+defined in the DTD, certain elements should not be nested. A
+summary of such elements and the elements that should not be
+nested in them is found in the normative <a href="#prohibitions">
+Appendix&#160;B</a>.</p>
+
+<h2><a name="h-4.10" id="h-4.10">4.10 The elements with 'id' and 'name'
+attributes</a></h2>
+
+<p>HTML 4 defined the <code>name</code> attribute for the elements
+<code>a</code>,
+<code>applet</code>, <code>form</code>, <code>frame</code>,
+<code>iframe</code>, <code>img</code>, and <code>map</code>.
+HTML 4 also introduced
+the <code>id</code> attribute. Both of these attributes are designed to be
+used as fragment identifiers.</p>
+<p>In XML, fragment identifiers are of type <code>ID</code>, and
+there can only be a single attribute of type <code>ID</code> per element.
+Therefore, in XHTML 1.0 the <code>id</code>
+attribute is defined to be of type <code>ID</code>. In order to
+ensure that XHTML 1.0 documents are well-structured XML documents, XHTML 1.0
+documents MUST use the <code>id</code> attribute when defining fragment
+identifiers, even on elements that historically have also had a
+<code>name</code> attribute.
+See the <a href="#guidelines">HTML Compatibility
+Guidelines</a> for information on ensuring such anchors are backwards
+compatible when serving XHTML documents as media type <code>text/html</code>.
+</p>
+<p>Note that in XHTML 1.0, the <code>name</code> attribute of these
+elements is formally deprecated, and will be removed in a
+subsequent version of XHTML.</p>
+
+<!--OddPage-->
+<h1><a name="issues" id="issues">5. Compatibility Issues</a></h1>
+
+<p>Although there is no requirement for XHTML 1.0 documents to be
+compatible with existing user agents, in practice this is easy to
+accomplish. Guidelines for creating compatible documents can be
+found in <a href="#guidelines">Appendix&#160;C</a>.</p>
+
+<h2><a name="media" id="media">5.1 Internet Media Type</a></h2>
+<p>As of the publication of this recommendation, the general
+recommended MIME labeling for XML-based applications
+has yet to be resolved.</p>
+
+<p>However, XHTML Documents which follow the guidelines set forth
+in <a href="#guidelines">Appendix C</a>, "HTML Compatibility Guidelines" may be
+labeled with the Internet Media Type "text/html", as they
+are compatible with most HTML browsers. This document
+makes no recommendation about MIME labeling of other
+XHTML documents.</p>
+
+<!--OddPage-->
+<h1><a name="future" id="future">6. Future Directions</a></h1>
+
+<p>XHTML 1.0 provides the basis for a family of document types
+that will extend and subset XHTML, in order to support a wide
+range of new devices and applications, by defining modules and
+specifying a mechanism for combining these modules. This
+mechanism will enable the extension and sub-setting of XHTML 1.0
+in a uniform way through the definition of new modules.</p>
+
+<h2><a name="mods" id="mods">6.1 Modularizing HTML</a></h2>
+
+<p>As the use of XHTML moves from the traditional desktop user
+agents to other platforms, it is clear that not all of the XHTML
+elements will be required on all platforms. For example a hand
+held device or a cell-phone may only support a subset of XHTML
+elements.</p>
+
+<p>The process of modularization breaks XHTML up into a series of
+smaller element sets. These elements can then be recombined to
+meet the needs of different communities.</p>
+
+<p>These modules will be defined in a later W3C document.</p>
+
+<h2><a name="extensions" id="extensions">6.2 Subsets and
+Extensibility</a></h2>
+
+<p>Modularization brings with it several advantages:</p>
+
+<ul>
+<li>
+<p>It provides a formal mechanism for sub-setting XHTML.</p>
+</li>
+
+<li>
+<p>It provides a formal mechanism for extending XHTML.</p>
+</li>
+
+<li>
+<p>It simplifies the transformation between document types.</p>
+</li>
+
+<li>
+<p>It promotes the reuse of modules in new document types.</p>
+</li>
+</ul>
+
+<h2><a name="profiles" id="profiles">6.3 Document
+Profiles</a></h2>
+
+<p>A document profile specifies the syntax and semantics of a set
+of documents. Conformance to a document profile provides a basis
+for interoperability guarantees. The document profile specifies
+the facilities required to process documents of that type, e.g.
+which image formats can be used, levels of scripting, style sheet
+support, and so on.</p>
+
+<p>For product designers this enables various groups to define
+their own standard profile.</p>
+
+<p>For authors this will obviate the need to write several
+different versions of documents for different clients.</p>
+
+<p>For special groups such as chemists, medical doctors, or
+mathematicians this allows a special profile to be built using
+standard HTML elements plus a group of elements geared to the
+specialist's needs.</p>
+
+<!--OddPage-->
+<h1><a name="appendices" id="appendices"></a>
+<a name="dtds" id="dtds">Appendix A. DTDs</a></h1>
+
+<p><b>This appendix is normative.</b></p>
+
+<p>These DTDs and entity sets form a normative part of this
+specification. The complete set of DTD files together with an XML
+declaration and SGML Open Catalog is included in the <a href=
+"xhtml1.zip">zip file</a> for this specification.</p>
+
+<h2><a name="h-A1" id="h-A1">A.1 Document Type
+Definitions</a></h2>
+
+<p>These DTDs approximate the HTML 4 DTDs. It is likely that
+when the DTDs are modularized, a method of DTD construction will
+be employed that corresponds more closely to HTML 4.</p>
+
+<ul>
+<li>
+<p><a href="DTD/xhtml1-strict.dtd" type="text/plain">
+XHTML-1.0-Strict</a></p>
+</li>
+
+<li>
+<p><a href="DTD/xhtml1-transitional.dtd" type="text/plain">
+XHTML-1.0-Transitional</a></p>
+</li>
+
+<li>
+<p><a href="DTD/xhtml1-frameset.dtd" type="text/plain">
+XHTML-1.0-Frameset</a></p>
+</li>
+</ul>
+
+<h2><a name="h-A2" id="h-A2">A.2 Entity Sets</a></h2>
+
+<p>The XHTML entity sets are the same as for HTML 4, but have
+been modified to be valid XML 1.0 entity declarations. Note the
+entity for the Euro currency sign (<code>&amp;euro;</code> or
+<code>&amp;#8364;</code> or <code>&amp;#x20AC;</code>) is defined
+as part of the special characters.</p>
+
+<ul>
+<li>
+<p><a href="DTD/xhtml-lat1.ent">Latin-1 characters</a></p>
+</li>
+
+<li>
+<p><a href="DTD/xhtml-special.ent">Special characters</a></p>
+</li>
+
+<li>
+<p><a href="DTD/xhtml-symbol.ent">Symbols</a></p>
+</li>
+</ul>
+
+<!--OddPage-->
+<h1><a name="prohibitions" id="prohibitions">Appendix B. Element
+Prohibitions</a></h1>
+
+<p><b>This appendix is normative.</b></p>
+
+<p>The following elements have prohibitions on which elements
+they can contain (see <a href="#h-4.9">Section 4.9</a>). This
+prohibition applies to all depths of nesting, i.e. it contains
+all the descendant elements.</p>
+
+<dl><dt><code class="tag">a</code></dt>
+<dd>
+cannot contain other <code>a</code> elements.</dd>
+<dt><code class="tag">pre</code></dt>
+<dd>cannot contain the <code>img</code>, <code>object</code>,
+<code>big</code>, <code>small</code>, <code>sub</code>, or <code>
+sup</code> elements.</dd>
+
+<dt><code class="tag">button</code></dt>
+<dd>cannot contain the <code>input</code>, <code>select</code>,
+<code>textarea</code>, <code>label</code>, <code>button</code>,
+<code>form</code>, <code>fieldset</code>, <code>iframe</code> or
+<code>isindex</code> elements.</dd>
+<dt><code class="tag">label</code></dt>
+<dd>cannot contain other <code class="tag">label</code> elements.</dd>
+<dt><code class="tag">form</code></dt>
+<dd>cannot contain other <code>form</code> elements.</dd>
+</dl>
+
+<!--OddPage-->
+<h1><a name="guidelines" id="guidelines">Appendix C.
+HTML Compatibility Guidelines</a></h1>
+
+<p><b>This appendix is informative.</b></p>
+
+<p>This appendix summarizes design guidelines for authors who
+wish their XHTML documents to render on existing HTML user
+agents.</p>
+
+<h2>C.1 Processing Instructions</h2>
+<p>Be aware that processing instructions are rendered on some
+user agents. However, also note that when the XML declaration is not included
+in a document, the document can only use the default character encodings UTF-8
+or UTF-16.</p>
+
+<h2>C.2 Empty Elements</h2>
+<p>Include a space before the trailing <code>/</code> and <code>
+&gt;</code> of empty elements, e.g. <code class="greenmono">
+&lt;br&#160;/&gt;</code>, <code class="greenmono">
+&lt;hr&#160;/&gt;</code> and <code class="greenmono">&lt;img
+src="karen.jpg" alt="Karen"&#160;/&gt;</code>. Also, use the
+minimized tag syntax for empty elements, e.g. <code class=
+"greenmono">&lt;br /&gt;</code>, as the alternative syntax <code
+class="greenmono">&lt;br&gt;&lt;/br&gt;</code> allowed by XML
+gives uncertain results in many existing user agents.</p>
+
+<h2>C.3 Element Minimization and Empty Element Content</h2>
+<p>Given an empty instance of an element whose content model is
+not <code>EMPTY</code> (for example, an empty title or paragraph)
+do not use the minimized form (e.g. use <code class="greenmono">
+&lt;p&gt; &lt;/p&gt;</code> and not <code class="greenmono">
+&lt;p&#160;/&gt;</code>).</p>
+
+<h2>C.4 Embedded Style Sheets and Scripts</h2>
+<p>Use external style sheets if your style sheet uses <code>
+&lt;</code> or <code>&amp;</code> or <code>]]&gt;</code> or <code>--</code>. Use
+external scripts if your script uses <code>&lt;</code> or <code>
+&amp;</code> or <code>]]&gt;</code> or <code>--</code>. Note that XML parsers
+are permitted to silently remove the contents of comments. Therefore, the historical
+practice of "hiding" scripts and style sheets within comments to make the
+documents backward compatible is likely to not work as expected in XML-based
+implementations.</p>
+
+<h2>C.5 Line Breaks within Attribute Values</h2>
+<p>Avoid line breaks and multiple whitespace characters within
+attribute values. These are handled inconsistently by user
+agents.</p>
+
+<h2>C.6 Isindex</h2>
+<p>Don't include more than one <code>isindex</code> element in
+the document <code>head</code>. The <code>isindex</code> element
+is deprecated in favor of the <code>input</code> element.</p>
+
+<h2>C.7 The <code>lang</code> and <code>xml:lang</code> Attributes</h2>
+<p>Use both the <code>lang</code> and <code>xml:lang</code>
+attributes when specifying the language of an element. The value
+of the <code>xml:lang</code> attribute takes precedence.</p>
+
+<h2>C.8 Fragment Identifiers</h2>
+<p>In XML, <abbr title="Uniform Resource Identifiers">URIs</abbr> [<a href="#ref-rfc2396">RFC2396</a>] that end with fragment identifiers of the form
+<code>"#foo"</code> do not refer to elements with an attribute
+<code>name="foo"</code>; rather, they refer to elements with an
+attribute defined to be of type <code>ID</code>, e.g., the <code>
+id</code> attribute in HTML 4. Many existing HTML clients don't
+support the use of <code>ID</code>-type attributes in this way,
+so identical values may be supplied for both of these attributes to ensure
+maximum forward and backward compatibility (e.g., <code class=
+"greenmono">&lt;a id="foo" name="foo"&gt;...&lt;/a&gt;</code>).</p>
+
+<p>Further, since the set of
+legal values for attributes of type <code>ID</code> is much smaller than
+for those of type <code>CDATA</code>, the type of the <code>name</code>
+attribute has been changed to <code>NMTOKEN</code>. This attribute is
+constrained such that it can only have the same values as type
+<code>ID</code>, or as the <code>Name</code> production in XML 1.0 Section
+2.5, production 5. Unfortunately, this constraint cannot be expressed in the
+XHTML 1.0 DTDs.  Because of this change, care must be taken when
+converting existing HTML documents. The values of these attributes
+must be unique within the document, valid, and any references to these
+fragment identifiers (both
+internal and external) must be updated should the values be changed during
+conversion.</p>
+<p>Finally, note that XHTML 1.0 has deprecated the
+<code>name</code> attribute of the <code>a</code>, <code>applet</code>, <code>form</code>, <code>frame</code>, <code>iframe</code>, <code>img</code>, and <code>map</code>
+elements, and it will be
+removed from XHTML in subsequent versions.</p>
+
+<h2>C.9 Character Encoding</h2>
+<p>To specify a character encoding in the document, use both the
+encoding attribute specification on the xml declaration (e.g.
+<code class="greenmono">&lt;?xml version="1.0"
+encoding="EUC-JP"?&gt;</code>) and a meta http-equiv statement
+(e.g. <code class="greenmono">&lt;meta http-equiv="Content-type"
+content='text/html; charset="EUC-JP"'&#160;/&gt;</code>). The
+value of the encoding attribute of the xml processing instruction
+takes precedence.</p>
+
+<h2>C.10 Boolean Attributes</h2>
+<p>Some HTML user agents are unable to interpret boolean
+attributes when these appear in their full (non-minimized) form,
+as required by XML 1.0. Note this problem doesn't affect user
+agents compliant with HTML 4. The following attributes are
+involved: <code>compact</code>, <code>nowrap</code>, <code>
+ismap</code>, <code>declare</code>, <code>noshade</code>, <code>
+checked</code>, <code>disabled</code>, <code>readonly</code>,
+<code>multiple</code>, <code>selected</code>, <code>
+noresize</code>, <code>defer</code>.</p>
+
+<h2>C.11 Document Object Model and XHTML</h2>
+<p>
+The Document Object Model level 1 Recommendation [<a href="#ref-dom">DOM</a>]
+defines document object model interfaces for XML and HTML 4. The HTML 4
+document object model specifies that HTML element and attribute names are
+returned in upper-case. The XML document object model specifies that
+element and attribute names are returned in the case they are specified. In
+XHTML 1.0, elements and attributes are specified in lower-case. This apparent difference can be
+addressed in two ways:
+</p>
+<ol>
+<li>Applications that access XHTML documents served as Internet media type
+<code>text/html</code>
+via the <abbr title="Document Object Model">DOM</abbr> can use the HTML DOM,
+and can rely upon element and attribute names being returned in
+upper-case from those interfaces.</li>
+<li>Applications that access XHTML documents served as Internet media types
+<code>text/xml</code> or <code>application/xml</code>
+can also use the XML DOM. Elements and attributes will be returned in lower-case.
+Also, some XHTML elements may or may
+not appear
+in the object tree because they are optional in the content model
+(e.g. the <code>tbody</code> element within
+<code>table</code>).  This occurs because in HTML 4 some elements were
+permitted to be minimized such that their start and end tags are both omitted
+(an SGML feature).
+This is not possible in XML. Rather than require document authors to insert
+extraneous elements, XHTML has made the elements optional.
+Applications need to adapt to this
+accordingly.</li>
+</ol>
+
+<h2>C.12 Using Ampersands in Attribute Values</h2>
+<p>
+When an attribute value contains an ampersand, it must be expressed as a character
+entity reference
+(e.g. "<code>&amp;amp;</code>"). For example, when the
+<code>href</code> attribute
+of the <code>a</code> element refers to a
+CGI script that takes parameters, it must be expressed as
+<code>http://my.site.dom/cgi-bin/myscript.pl?class=guest&amp;amp;name=user</code>
+rather than as
+<code>http://my.site.dom/cgi-bin/myscript.pl?class=guest&amp;name=user</code>.
+</p>
+
+<h2>C.13 Cascading Style Sheets (CSS) and XHTML</h2>
+
+<p>The Cascading Style Sheets level 2 Recommendation [<a href="#ref-css2">CSS2</a>] defines style
+properties which are applied to the parse tree of the HTML or XML
+document.  Differences in parsing will produce different visual or
+aural results, depending on the selectors used. The following hints
+will reduce this effect for documents which are served without
+modification as both media types:</p>
+
+<ol>
+<li>
+CSS style sheets for XHTML should use lower case element and
+attribute names.</li>
+
+
+<li>In tables, the tbody element will be inferred by the parser of an
+HTML user agent, but not by the parser of an XML user agent. Therefore
+you should always explicitly add a tbody element if it is referred to
+in a CSS selector.</li>
+
+<li>Within the XHTML name space, user agents are expected to
+recognize the "id" attribute as an attribute of type ID.
+Therefore, style sheets should be able to continue using the
+shorthand "#" selector syntax even if the user agent does not read
+the DTD.</li>
+
+<li>Within the XHTML name space, user agents are expected to
+recognize the "class" attribute. Therefore, style sheets should be
+able to continue using the shorthand "." selector syntax.</li>
+
+<li>
+CSS defines different conformance rules for HTML and XML documents;
+be aware that the HTML rules apply to XHTML documents delivered as
+HTML and the XML rules apply to XHTML documents delivered as XML.</li>
+</ol>
+<!--OddPage-->
+<h1><a name="acks" id="acks">Appendix D.
+Acknowledgements</a></h1>
+
+<p><b>This appendix is informative.</b></p>
+
+<p>This specification was written with the participation of the
+members of the W3C HTML working group:</p>
+
+<dl>
+<dd>Steven Pemberton, CWI (HTML Working Group Chair)<br />
+Murray Altheim, Sun Microsystems<br />
+Daniel Austin, AskJeeves (CNET: The Computer Network through July 1999)<br />
+Frank Boumphrey, HTML Writers Guild<br />
+John Burger, Mitre<br />
+Andrew W. Donoho, IBM<br />
+Sam Dooley, IBM<br />
+Klaus Hofrichter, GMD<br />
+Philipp Hoschka, W3C<br />
+Masayasu Ishikawa, W3C<br />
+Warner ten Kate, Philips Electronics<br />
+Peter King, Phone.com<br />
+Paula Klante, JetForm<br />
+Shin'ichi Matsui, Panasonic (W3C visiting engineer through September 1999)<br />
+Shane McCarron, Applied Testing and Technology (The Open Group through August
+1999)<br />
+Ann Navarro, HTML Writers Guild<br />
+Zach Nies, Quark<br />
+Dave Raggett, W3C/HP (W3C lead for HTML)<br />
+Patrick Schmitz, Microsoft<br />
+Sebastian Schnitzenbaumer, Stack Overflow<br />
+Peter Stark, Phone.com<br />
+Chris Wilson, Microsoft<br />
+Ted Wugofski, Gateway 2000<br />
+Dan Zigmond, WebTV Networks</dd>
+</dl>
+
+<!--OddPage-->
+<h1><a name="refs" id="refs">Appendix E. References</a></h1>
+
+<p><b>This appendix is informative.</b></p>
+
+<dl>
+
+<dt><a name="ref-css2" id="ref-css2"><b>[CSS2]</b></a></dt>
+
+<dd><a href="http://www.w3.org/TR/1998/REC-CSS2-19980512">"Cascading Style Sheets, level 2 (CSS2) Specification"</a>, B.
+Bos, H. W. Lie, C. Lilley, I. Jacobs, 12 May 1998.<br />
+Latest version available at: <a href="http://www.w3.org/TR/REC-CSS2">
+http://www.w3.org/TR/REC-CSS2</a></dd>
+
+<dt><a name="ref-dom" id="ref-dom"><b>[DOM]</b></a></dt>
+
+<dd><a href="http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001">"Document Object Model (DOM) Level 1 Specification"</a>, Lauren
+Wood <i>et al.</i>, 1 October 1998.<br />
+Latest version available at: <a href="http://www.w3.org/TR/REC-DOM-Level-1">
+http://www.w3.org/TR/REC-DOM-Level-1</a></dd>
+
+<dt><a name="ref-html4" id="ref-html4"><b>[HTML]</b></a></dt>
+
+<dd><a href="http://www.w3.org/TR/1999/REC-html401-19991224">"HTML 4.01 Specification"</a>, D. Raggett, A. Le&#160;Hors, I.
+Jacobs, 24 December 1999.<br />
+Latest version available at: <a href="http://www.w3.org/TR/html401">
+http://www.w3.org/TR/html401</a></dd>
+
+<dt><a name="ref-posix" id="ref-posix"><b>[POSIX.1]</b></a></dt>
+
+<dd>"ISO/IEC 9945-1:1990 Information Technology - Portable
+Operating System Interface (POSIX) - Part 1: System Application
+Program Interface (API) [C Language]", Institute of Electrical
+and Electronics Engineers, Inc, 1990.</dd>
+
+<dt><a name="ref-rfc2046" id="ref-rfc2046"><b>
+[RFC2046]</b></a></dt>
+
+<dd><a href="http://www.ietf.org/rfc/rfc2046.txt">"RFC2046: Multipurpose Internet Mail Extensions (MIME) Part
+Two: Media Types"</a>, N. Freed and N. Borenstein, November
+1996.<br />
+Available at <a href="http://www.ietf.org/rfc/rfc2046.txt">
+http://www.ietf.org/rfc/rfc2046.txt</a>. Note that this RFC
+obsoletes RFC1521, RFC1522, and RFC1590.</dd>
+
+<dt><a name="ref-rfc2119" id="ref-rfc2119"><b>
+[RFC2119]</b></a></dt>
+
+<dd><a href="http://www.ietf.org/rfc/rfc2119.txt">"RFC2119: Key words for use in RFCs to Indicate Requirement
+Levels"</a>, S. Bradner, March 1997.<br />
+Available at: <a href="http://www.ietf.org/rfc/rfc2119.txt">
+http://www.ietf.org/rfc/rfc2119.txt</a></dd>
+
+<dt><a name="ref-rfc2376" id="ref-rfc2376"><b>
+[RFC2376]</b></a></dt>
+
+<dd><a href="http://www.ietf.org/rfc/rfc2376.txt">"RFC2376: XML Media Types"</a>, E. Whitehead, M. Murata, July
+1998.<br />
+Available at: <a href="http://www.ietf.org/rfc/rfc2376.txt">
+http://www.ietf.org/rfc/rfc2376.txt</a></dd>
+
+<dt><a name="ref-rfc2396" id="ref-rfc2396"><b>
+[RFC2396]</b></a></dt>
+
+<dd><a href="http://www.ietf.org/rfc/rfc2396.txt">"RFC2396: Uniform Resource Identifiers (URI): Generic
+Syntax"</a>, T. Berners-Lee, R. Fielding, L. Masinter, August
+1998.<br />
+This document updates RFC1738 and RFC1808.<br />
+Available at: <a href="http://www.ietf.org/rfc/rfc2396.txt">
+http://www.ietf.org/rfc/rfc2396.txt</a></dd>
+
+<dt><a name="ref-xml" id="ref-xml"><b>[XML]</b></a></dt>
+
+<dd><a href="http://www.w3.org/TR/1998/REC-xml-19980210">"Extensible Markup Language (XML) 1.0 Specification"</a>, T.
+Bray, J. Paoli, C. M. Sperberg-McQueen, 10 February 1998.<br />
+Latest version available at: <a href="http://www.w3.org/TR/REC-xml">
+http://www.w3.org/TR/REC-xml</a></dd>
+
+<dt><a name="ref-xmlns" id="ref-xmlns"><b>[XMLNAMES]</b></a></dt>
+
+<dd><a href="http://www.w3.org/TR/1999/REC-xml-names-19990114">"Namespaces in XML"</a>, T. Bray, D. Hollander, A. Layman, 14
+January 1999.<br />
+XML namespaces provide a simple method for qualifying names used
+in XML documents by associating them with namespaces identified
+by URI.<br />
+Latest version available at: <a href="http://www.w3.org/TR/REC-xml-names">
+http://www.w3.org/TR/REC-xml-names</a></dd>
+
+</dl>
+<p><a href="http://www.w3.org/WAI/WCAG1AAA-Conformance"
+title="Explanation of Level Triple-A Conformance">
+<img height="32" width="88"
+src="http://www.w3.org/WAI/wcag1AAA.gif"
+alt="Level Triple-A conformance icon, W3C-WAI Web Content Accessibility Guidelines 1.0" /></a></p>
+<div class="navbar">
+  <hr />
+  <a href="#toc">table of contents</a>
+</div>
+</body>
+</html>
+
diff --git a/examples/xhtml/xhtml1-frameset.dtd b/examples/xhtml/xhtml1-frameset.dtd
new file mode 100644
--- /dev/null
+++ b/examples/xhtml/xhtml1-frameset.dtd
@@ -0,0 +1,1225 @@
+<!--
+   Extensible HTML version 1.0 Frameset DTD
+
+   This is the same as HTML 4.0 Frameset except for
+   changes due to the differences between XML and SGML.
+
+   Namespace = http://www.w3.org/1999/xhtml
+
+   For further information, see: http://www.w3.org/TR/xhtml1
+
+   Copyright (c) 1998-2000 W3C (MIT, INRIA, Keio),
+   All Rights Reserved. 
+
+   This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+   PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+   SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"
+
+   $Revision: 1.1 $
+   $Date: 2002/10/01 13:47:08 $
+
+-->
+
+<!--================ Character mnemonic entities =========================-->
+
+<!ENTITY % HTMLlat1 PUBLIC
+   "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+   "xhtml-lat1.ent">
+%HTMLlat1;
+
+<!ENTITY % HTMLsymbol PUBLIC
+   "-//W3C//ENTITIES Symbols for XHTML//EN"
+   "xhtml-symbol.ent">
+%HTMLsymbol;
+
+<!ENTITY % HTMLspecial PUBLIC
+   "-//W3C//ENTITIES Special for XHTML//EN"
+   "xhtml-special.ent">
+%HTMLspecial;
+
+<!--================== Imported Names ====================================-->
+
+<!ENTITY % ContentType "CDATA">
+    <!-- media type, as per [RFC2045] -->
+
+<!ENTITY % ContentTypes "CDATA">
+    <!-- comma-separated list of media types, as per [RFC2045] -->
+
+<!ENTITY % Charset "CDATA">
+    <!-- a character encoding, as per [RFC2045] -->
+
+<!ENTITY % Charsets "CDATA">
+    <!-- a space separated list of character encodings, as per [RFC2045] -->
+
+<!ENTITY % LanguageCode "NMTOKEN">
+    <!-- a language code, as per [RFC1766] -->
+
+<!ENTITY % Character "CDATA">
+    <!-- a single character from [ISO10646] -->
+
+<!ENTITY % Number "CDATA">
+    <!-- one or more digits -->
+
+<!ENTITY % LinkTypes "CDATA">
+    <!-- space-separated list of link types -->
+
+<!ENTITY % MediaDesc "CDATA">
+    <!-- single or comma-separated list of media descriptors -->
+
+<!ENTITY % URI "CDATA">
+    <!-- a Uniform Resource Identifier, see [RFC2396] -->
+
+<!ENTITY % UriList "CDATA">
+    <!-- a space separated list of Uniform Resource Identifiers -->
+
+<!ENTITY % Datetime "CDATA">
+    <!-- date and time information. ISO date format -->
+
+<!ENTITY % Script "CDATA">
+    <!-- script expression -->
+
+<!ENTITY % StyleSheet "CDATA">
+    <!-- style sheet data -->
+
+<!ENTITY % Text "CDATA">
+    <!-- used for titles etc. -->
+
+<!ENTITY % FrameTarget "NMTOKEN">
+    <!-- render in this frame -->
+
+<!ENTITY % Length "CDATA">
+    <!-- nn for pixels or nn% for percentage length -->
+
+<!ENTITY % MultiLength "CDATA">
+    <!-- pixel, percentage, or relative -->
+
+<!ENTITY % MultiLengths "CDATA">
+    <!-- comma-separated list of MultiLength -->
+
+<!ENTITY % Pixels "CDATA">
+    <!-- integer representing length in pixels -->
+
+<!-- these are used for image maps -->
+
+<!ENTITY % Shape "(rect|circle|poly|default)">
+
+<!ENTITY % Coords "CDATA">
+    <!-- comma separated list of lengths -->
+
+<!-- used for object, applet, img, input and iframe -->
+<!ENTITY % ImgAlign "(top|middle|bottom|left|right)">
+
+<!-- a color using sRGB: #RRGGBB as Hex values -->
+<!ENTITY % Color "CDATA">
+
+<!-- There are also 16 widely known color names with their sRGB values:
+
+    Black  = #000000    Green  = #008000
+    Silver = #C0C0C0    Lime   = #00FF00
+    Gray   = #808080    Olive  = #808000
+    White  = #FFFFFF    Yellow = #FFFF00
+    Maroon = #800000    Navy   = #000080
+    Red    = #FF0000    Blue   = #0000FF
+    Purple = #800080    Teal   = #008080
+    Fuchsia= #FF00FF    Aqua   = #00FFFF
+-->
+
+<!--=================== Generic Attributes ===============================-->
+
+<!-- core attributes common to most elements
+  id       document-wide unique id
+  class    space separated list of classes
+  style    associated style info
+  title    advisory title/amplification
+-->
+<!ENTITY % coreattrs
+ "id          ID             #IMPLIED
+  class       CDATA          #IMPLIED
+  style       %StyleSheet;   #IMPLIED
+  title       %Text;         #IMPLIED"
+  >
+
+<!-- internationalization attributes
+  lang        language code (backwards compatible)
+  xml:lang    language code (as per XML 1.0 spec)
+  dir         direction for weak/neutral text
+-->
+<!ENTITY % i18n
+ "lang        %LanguageCode; #IMPLIED
+  xml:lang    %LanguageCode; #IMPLIED
+  dir         (ltr|rtl)      #IMPLIED"
+  >
+
+<!-- attributes for common UI events
+  onclick     a pointer button was clicked
+  ondblclick  a pointer button was double clicked
+  onmousedown a pointer button was pressed down
+  onmouseup   a pointer button was released
+  onmousemove a pointer was moved onto the element
+  onmouseout  a pointer was moved away from the element
+  onkeypress  a key was pressed and released
+  onkeydown   a key was pressed down
+  onkeyup     a key was released
+-->
+<!ENTITY % events
+ "onclick     %Script;       #IMPLIED
+  ondblclick  %Script;       #IMPLIED
+  onmousedown %Script;       #IMPLIED
+  onmouseup   %Script;       #IMPLIED
+  onmouseover %Script;       #IMPLIED
+  onmousemove %Script;       #IMPLIED
+  onmouseout  %Script;       #IMPLIED
+  onkeypress  %Script;       #IMPLIED
+  onkeydown   %Script;       #IMPLIED
+  onkeyup     %Script;       #IMPLIED"
+  >
+
+<!-- attributes for elements that can get the focus
+  accesskey   accessibility key character
+  tabindex    position in tabbing order
+  onfocus     the element got the focus
+  onblur      the element lost the focus
+-->
+<!ENTITY % focus
+ "accesskey   %Character;    #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED"
+  >
+
+<!ENTITY % attrs "%coreattrs; %i18n; %events;">
+
+<!-- text alignment for p, div, h1-h6. The default is
+     align="left" for ltr headings, "right" for rtl -->
+
+<!ENTITY % TextAlign "align (left|center|right) #IMPLIED">
+
+<!--=================== Text Elements ====================================-->
+
+<!ENTITY % special
+   "br | span | bdo |object | applet | img | map | iframe">
+
+<!ENTITY % fontstyle "tt | i | b | big | small | u
+                      | s | strike |font | basefont">
+
+<!ENTITY % phrase "em | strong | dfn | code | q | sub | sup |
+                   samp | kbd | var | cite | abbr | acronym">
+
+<!ENTITY % inline.forms "input | select | textarea | label | button">
+
+<!-- these can occur at block or inline level -->
+<!ENTITY % misc "ins | del | script | noscript">
+
+<!ENTITY % inline "a | %special; | %fontstyle; | %phrase; | %inline.forms;">
+
+<!-- %Inline; covers inline or "text-level" elements -->
+<!ENTITY % Inline "(#PCDATA | %inline; | %misc;)*">
+
+<!--================== Block level elements ==============================-->
+
+<!ENTITY % heading "h1|h2|h3|h4|h5|h6">
+<!ENTITY % lists "ul | ol | dl | menu | dir">
+<!ENTITY % blocktext "pre | hr | blockquote | address | center">
+
+<!ENTITY % block
+    "p | %heading; | div | %lists; | %blocktext; | isindex | fieldset | table">
+
+<!ENTITY % Block "(%block; | form | %misc;)*">
+
+<!-- %Flow; mixes Block and Inline and is used for list items etc. -->
+<!ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*">
+
+<!--================== Content models for exclusions =====================-->
+
+<!-- a elements use %Inline; excluding a -->
+
+<!ENTITY % a.content
+   "(#PCDATA | %special; | %fontstyle; | %phrase; | %inline.forms; | %misc;)*">
+
+<!-- pre uses %Inline excluding img, object, applet, big, small,
+     sub, sup, font, or basefont -->
+
+<!ENTITY % pre.content
+   "(#PCDATA | a | br | span | bdo | map | tt | i | b | u | s |
+      %phrase; | %inline.forms;)*">
+
+<!-- form uses %Flow; excluding form -->
+
+<!ENTITY % form.content "(#PCDATA | %block; | %inline; | %misc;)*">
+
+<!-- button uses %Flow; but excludes a, form, form controls, iframe -->
+
+<!ENTITY % button.content
+   "(#PCDATA | p | %heading; | div | %lists; | %blocktext; |
+      table | br | span | bdo | object | applet | img | map |
+      %fontstyle; | %phrase; | %misc;)*">
+
+<!--================ Document Structure ==================================-->
+
+<!-- the namespace URI designates the document profile -->
+
+<!ELEMENT html (head, frameset)>
+<!ATTLIST html
+  %i18n;
+  xmlns       %URI;          #FIXED 'http://www.w3.org/1999/xhtml'
+  >
+
+<!--================ Document Head =======================================-->
+
+<!ENTITY % head.misc "(script|style|meta|link|object|isindex)*">
+
+<!-- content model is %head.misc; combined with a single
+     title and an optional base element in any order -->
+
+<!ELEMENT head (%head.misc;,
+     ((title, %head.misc;, (base, %head.misc;)?) |
+      (base, %head.misc;, (title, %head.misc;))))>
+
+<!ATTLIST head
+  %i18n;
+  profile     %URI;          #IMPLIED
+  >
+
+<!-- The title element is not considered part of the flow of text.
+       It should be displayed, for example as the page header or
+       window title. Exactly one title is required per document.
+    -->
+<!ELEMENT title (#PCDATA)>
+<!ATTLIST title %i18n;>
+
+<!-- document base URI -->
+
+<!ELEMENT base EMPTY>
+<!ATTLIST base
+  href        %URI;          #IMPLIED
+  target      %FrameTarget;  #IMPLIED
+  >
+
+<!-- generic metainformation -->
+<!ELEMENT meta EMPTY>
+<!ATTLIST meta
+  %i18n;
+  http-equiv  CDATA          #IMPLIED
+  name        CDATA          #IMPLIED
+  content     CDATA          #REQUIRED
+  scheme      CDATA          #IMPLIED
+  >
+
+<!--
+  Relationship values can be used in principle:
+
+   a) for document specific toolbars/menus when used
+      with the link element in document head e.g.
+        start, contents, previous, next, index, end, help
+   b) to link to a separate style sheet (rel="stylesheet")
+   c) to make a link to a script (rel="script")
+   d) by stylesheets to control how collections of
+      html nodes are rendered into printed documents
+   e) to make a link to a printable version of this document
+      e.g. a PostScript or PDF version (rel="alternate" media="print")
+-->
+
+<!ELEMENT link EMPTY>
+<!ATTLIST link
+  %attrs;
+  charset     %Charset;      #IMPLIED
+  href        %URI;          #IMPLIED
+  hreflang    %LanguageCode; #IMPLIED
+  type        %ContentType;  #IMPLIED
+  rel         %LinkTypes;    #IMPLIED
+  rev         %LinkTypes;    #IMPLIED
+  media       %MediaDesc;    #IMPLIED
+  target      %FrameTarget;  #IMPLIED
+  >
+
+<!-- style info, which may include CDATA sections -->
+<!ELEMENT style (#PCDATA)>
+<!ATTLIST style
+  %i18n;
+  type        %ContentType;  #REQUIRED
+  media       %MediaDesc;    #IMPLIED
+  title       %Text;         #IMPLIED
+  xml:space   (preserve)     #FIXED 'preserve'
+  >
+
+<!-- script statements, which may include CDATA sections -->
+<!ELEMENT script (#PCDATA)>
+<!ATTLIST script
+  charset     %Charset;      #IMPLIED
+  type        %ContentType;  #REQUIRED
+  language    CDATA          #IMPLIED
+  src         %URI;          #IMPLIED
+  defer       (defer)        #IMPLIED
+  xml:space   (preserve)     #FIXED 'preserve'
+  >
+
+<!-- alternate content container for non script-based rendering -->
+
+<!ELEMENT noscript %Flow;>
+<!ATTLIST noscript
+  %attrs;
+  >
+
+<!--======================= Frames =======================================-->
+
+<!-- only one noframes element permitted per document -->
+
+<!ELEMENT frameset (frameset|frame|noframes)*>
+<!ATTLIST frameset
+  %coreattrs;
+  rows        %MultiLengths; #IMPLIED
+  cols        %MultiLengths; #IMPLIED
+  onload      %Script;       #IMPLIED
+  onunload    %Script;       #IMPLIED
+  >
+
+<!-- reserved frame names start with "_" otherwise starts with letter -->
+
+<!-- tiled window within frameset -->
+
+<!ELEMENT frame EMPTY>
+<!ATTLIST frame
+  %coreattrs;
+  longdesc    %URI;          #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  src         %URI;          #IMPLIED
+  frameborder (1|0)          "1"
+  marginwidth %Pixels;       #IMPLIED
+  marginheight %Pixels;      #IMPLIED
+  noresize    (noresize)     #IMPLIED
+  scrolling   (yes|no|auto)  "auto"
+  >
+
+<!-- inline subwindow -->
+
+<!ELEMENT iframe %Flow;>
+<!ATTLIST iframe
+  %coreattrs;
+  longdesc    %URI;          #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  src         %URI;          #IMPLIED
+  frameborder (1|0)          "1"
+  marginwidth %Pixels;       #IMPLIED
+  marginheight %Pixels;      #IMPLIED
+  scrolling   (yes|no|auto)  "auto"
+  align       %ImgAlign;     #IMPLIED
+  height      %Length;       #IMPLIED
+  width       %Length;       #IMPLIED
+  >
+
+<!-- alternate content container for non frame-based rendering -->
+
+<!ELEMENT noframes (body)>
+<!ATTLIST noframes
+  %attrs;
+  >
+
+<!--=================== Document Body ====================================-->
+
+<!ELEMENT body %Flow;>
+<!ATTLIST body
+  %attrs;
+  onload      %Script;       #IMPLIED
+  onunload    %Script;       #IMPLIED
+  background  %URI;          #IMPLIED
+  bgcolor     %Color;        #IMPLIED
+  text        %Color;        #IMPLIED
+  link        %Color;        #IMPLIED
+  vlink       %Color;        #IMPLIED
+  alink       %Color;        #IMPLIED
+  >
+
+<!ELEMENT div %Flow;>  <!-- generic language/style container -->
+<!ATTLIST div
+  %attrs;
+  %TextAlign;
+  >
+
+<!--=================== Paragraphs =======================================-->
+
+<!ELEMENT p %Inline;>
+<!ATTLIST p
+  %attrs;
+  %TextAlign;
+  >
+
+<!--=================== Headings =========================================-->
+
+<!--
+  There are six levels of headings from h1 (the most important)
+  to h6 (the least important).
+-->
+
+<!ELEMENT h1  %Inline;>
+<!ATTLIST h1
+  %attrs;
+  %TextAlign;
+  >
+
+<!ELEMENT h2 %Inline;>
+<!ATTLIST h2
+  %attrs;
+  %TextAlign;
+  >
+
+<!ELEMENT h3 %Inline;>
+<!ATTLIST h3
+  %attrs;
+  %TextAlign;
+  >
+
+<!ELEMENT h4 %Inline;>
+<!ATTLIST h4
+  %attrs;
+  %TextAlign;
+  >
+
+<!ELEMENT h5 %Inline;>
+<!ATTLIST h5
+  %attrs;
+  %TextAlign;
+  >
+
+<!ELEMENT h6 %Inline;>
+<!ATTLIST h6
+  %attrs;
+  %TextAlign;
+  >
+
+<!--=================== Lists ============================================-->
+
+<!-- Unordered list bullet styles -->
+
+<!ENTITY % ULStyle "(disc|square|circle)">
+
+<!-- Unordered list -->
+
+<!ELEMENT ul (li)+>
+<!ATTLIST ul
+  %attrs;
+  type        %ULStyle;     #IMPLIED
+  compact     (compact)     #IMPLIED
+  >
+
+<!-- Ordered list numbering style
+
+    1   arabic numbers      1, 2, 3, ...
+    a   lower alpha         a, b, c, ...
+    A   upper alpha         A, B, C, ...
+    i   lower roman         i, ii, iii, ...
+    I   upper roman         I, II, III, ...
+
+    The style is applied to the sequence number which by default
+    is reset to 1 for the first list item in an ordered list.
+-->
+<!ENTITY % OLStyle "CDATA">
+
+<!-- Ordered (numbered) list -->
+
+<!ELEMENT ol (li)+>
+<!ATTLIST ol
+  %attrs;
+  type        %OLStyle;      #IMPLIED
+  compact     (compact)      #IMPLIED
+  start       %Number;       #IMPLIED
+  >
+
+<!-- single column list (DEPRECATED) --> 
+<!ELEMENT menu (li)+>
+<!ATTLIST menu
+  %attrs;
+  compact     (compact)     #IMPLIED
+  >
+
+<!-- multiple column list (DEPRECATED) --> 
+<!ELEMENT dir (li)+>
+<!ATTLIST dir
+  %attrs;
+  compact     (compact)     #IMPLIED
+  >
+
+<!-- LIStyle is constrained to: "(%ULStyle;|%OLStyle;)" -->
+<!ENTITY % LIStyle "CDATA">
+
+<!-- list item -->
+
+<!ELEMENT li %Flow;>
+<!ATTLIST li
+  %attrs;
+  type        %LIStyle;      #IMPLIED
+  value       %Number;       #IMPLIED
+  >
+
+<!-- definition lists - dt for term, dd for its definition -->
+
+<!ELEMENT dl (dt|dd)+>
+<!ATTLIST dl
+  %attrs;
+  compact     (compact)      #IMPLIED
+  >
+
+<!ELEMENT dt %Inline;>
+<!ATTLIST dt
+  %attrs;
+  >
+
+<!ELEMENT dd %Flow;>
+<!ATTLIST dd
+  %attrs;
+  >
+
+<!--=================== Address ==========================================-->
+
+<!-- information on author -->
+
+<!ELEMENT address %Inline;>
+<!ATTLIST address
+  %attrs;
+  >
+
+<!--=================== Horizontal Rule ==================================-->
+
+<!ELEMENT hr EMPTY>
+<!ATTLIST hr
+  %attrs;
+  align       (left|center|right) #IMPLIED
+  noshade     (noshade)      #IMPLIED
+  size        %Pixels;       #IMPLIED
+  width       %Length;       #IMPLIED
+  >
+
+<!--=================== Preformatted Text ================================-->
+
+<!-- content is %Inline; excluding 
+        "img|object|applet|big|small|sub|sup|font|basefont" -->
+
+<!ELEMENT pre %pre.content;>
+<!ATTLIST pre
+  %attrs;
+  width       %Number;      #IMPLIED
+  xml:space   (preserve)    #FIXED 'preserve'
+  >
+
+<!--=================== Block-like Quotes ================================-->
+
+<!ELEMENT blockquote %Flow;>
+<!ATTLIST blockquote
+  %attrs;
+  cite        %URI;          #IMPLIED
+  >
+
+<!--=================== Text alignment ===================================-->
+
+<!-- center content -->
+<!ELEMENT center %Flow;>
+<!ATTLIST center
+  %attrs;
+  >
+
+<!--=================== Inserted/Deleted Text ============================-->
+
+
+<!--
+  ins/del are allowed in block and inline content, but its
+  inappropriate to include block content within an ins element
+  occurring in inline content.
+-->
+<!ELEMENT ins %Flow;>
+<!ATTLIST ins
+  %attrs;
+  cite        %URI;          #IMPLIED
+  datetime    %Datetime;     #IMPLIED
+  >
+
+<!ELEMENT del %Flow;>
+<!ATTLIST del
+  %attrs;
+  cite        %URI;          #IMPLIED
+  datetime    %Datetime;     #IMPLIED
+  >
+
+<!--================== The Anchor Element ================================-->
+
+<!-- content is %Inline; except that anchors shouldn't be nested -->
+
+<!ELEMENT a %a.content;>
+<!ATTLIST a
+  %attrs;
+  charset     %Charset;      #IMPLIED
+  type        %ContentType;  #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  href        %URI;          #IMPLIED
+  hreflang    %LanguageCode; #IMPLIED
+  rel         %LinkTypes;    #IMPLIED
+  rev         %LinkTypes;    #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  shape       %Shape;        "rect"
+  coords      %Coords;       #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  target      %FrameTarget;  #IMPLIED
+  >
+
+<!--===================== Inline Elements ================================-->
+
+<!ELEMENT span %Inline;> <!-- generic language/style container -->
+<!ATTLIST span
+  %attrs;
+  >
+
+<!ELEMENT bdo %Inline;>  <!-- I18N BiDi over-ride -->
+<!ATTLIST bdo
+  %coreattrs;
+  %events;
+  lang        %LanguageCode; #IMPLIED
+  xml:lang    %LanguageCode; #IMPLIED
+  dir         (ltr|rtl)      #REQUIRED
+  >
+
+<!ELEMENT br EMPTY>   <!-- forced line break -->
+<!ATTLIST br
+  %coreattrs;
+  clear       (left|all|right|none) "none"
+  >
+
+<!ELEMENT em %Inline;>   <!-- emphasis -->
+<!ATTLIST em %attrs;>
+
+<!ELEMENT strong %Inline;>   <!-- strong emphasis -->
+<!ATTLIST strong %attrs;>
+
+<!ELEMENT dfn %Inline;>   <!-- definitional -->
+<!ATTLIST dfn %attrs;>
+
+<!ELEMENT code %Inline;>   <!-- program code -->
+<!ATTLIST code %attrs;>
+
+<!ELEMENT samp %Inline;>   <!-- sample -->
+<!ATTLIST samp %attrs;>
+
+<!ELEMENT kbd %Inline;>  <!-- something user would type -->
+<!ATTLIST kbd %attrs;>
+
+<!ELEMENT var %Inline;>   <!-- variable -->
+<!ATTLIST var %attrs;>
+
+<!ELEMENT cite %Inline;>   <!-- citation -->
+<!ATTLIST cite %attrs;>
+
+<!ELEMENT abbr %Inline;>   <!-- abbreviation -->
+<!ATTLIST abbr %attrs;>
+
+<!ELEMENT acronym %Inline;>   <!-- acronym -->
+<!ATTLIST acronym %attrs;>
+
+<!ELEMENT q %Inline;>   <!-- inlined quote -->
+<!ATTLIST q
+   %attrs;
+  cite        %URI;          #IMPLIED
+   >
+
+<!ELEMENT sub %Inline;> <!-- subscript -->
+<!ATTLIST sub %attrs;>
+
+<!ELEMENT sup %Inline;> <!-- superscript -->
+<!ATTLIST sup %attrs;>
+
+<!ELEMENT tt %Inline;>   <!-- fixed pitch font -->
+<!ATTLIST tt %attrs;>
+
+<!ELEMENT i %Inline;>   <!-- italic font -->
+<!ATTLIST i %attrs;>
+
+<!ELEMENT b %Inline;>   <!-- bold font -->
+<!ATTLIST b %attrs;>
+
+<!ELEMENT big %Inline;>   <!-- bigger font -->
+<!ATTLIST big %attrs;>
+
+<!ELEMENT small %Inline;>   <!-- smaller font -->
+<!ATTLIST small %attrs;>
+
+<!ELEMENT u %Inline;>   <!-- underline -->
+<!ATTLIST u %attrs;>
+
+<!ELEMENT s %Inline;>   <!-- strike-through -->
+<!ATTLIST s %attrs;>
+
+<!ELEMENT strike %Inline;>   <!-- strike-through -->
+<!ATTLIST strike %attrs;>
+
+<!ELEMENT basefont EMPTY>  <!-- base font size -->
+<!ATTLIST basefont
+  id          ID             #IMPLIED
+  size        CDATA          #REQUIRED
+  color       %Color;        #IMPLIED
+  face        CDATA          #IMPLIED
+  >
+
+<!ELEMENT font %Inline;> <!-- local change to font -->
+<!ATTLIST font
+  %coreattrs;
+  %i18n;
+  size        CDATA          #IMPLIED
+  color       %Color;        #IMPLIED
+  face        CDATA          #IMPLIED
+  >
+
+<!--==================== Object ======================================-->
+<!--
+  object is used to embed objects as part of HTML pages.
+  param elements should precede other content. Parameters
+  can also be expressed as attribute/value pairs on the
+  object element itself when brevity is desired.
+-->
+
+<!ELEMENT object (#PCDATA | param | %block; | form |%inline; | %misc;)*>
+<!ATTLIST object
+  %attrs;
+  declare     (declare)      #IMPLIED
+  classid     %URI;          #IMPLIED
+  codebase    %URI;          #IMPLIED
+  data        %URI;          #IMPLIED
+  type        %ContentType;  #IMPLIED
+  codetype    %ContentType;  #IMPLIED
+  archive     %UriList;      #IMPLIED
+  standby     %Text;         #IMPLIED
+  height      %Length;       #IMPLIED
+  width       %Length;       #IMPLIED
+  usemap      %URI;          #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  align       %ImgAlign;     #IMPLIED
+  border      %Pixels;       #IMPLIED
+  hspace      %Pixels;       #IMPLIED
+  vspace      %Pixels;       #IMPLIED
+  >
+
+<!--
+  param is used to supply a named property value.
+  In XML it would seem natural to follow RDF and support an
+  abbreviated syntax where the param elements are replaced
+  by attribute value pairs on the object start tag.
+-->
+<!ELEMENT param EMPTY>
+<!ATTLIST param
+  id          ID             #IMPLIED
+  name        CDATA          #REQUIRED
+  value       CDATA          #IMPLIED
+  valuetype   (data|ref|object) "data"
+  type        %ContentType;  #IMPLIED
+  >
+
+<!--=================== Java applet ==================================-->
+<!--
+  One of code or object attributes must be present.
+  Place param elements before other content.
+-->
+<!ELEMENT applet (#PCDATA | param | %block; | form | %inline; | %misc;)*>
+<!ATTLIST applet
+  %coreattrs;
+  codebase    %URI;          #IMPLIED
+  archive     CDATA          #IMPLIED
+  code        CDATA          #IMPLIED
+  object      CDATA          #IMPLIED
+  alt         %Text;         #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  width       %Length;       #REQUIRED
+  height      %Length;       #REQUIRED
+  align       %ImgAlign;     #IMPLIED
+  hspace      %Pixels;       #IMPLIED
+  vspace      %Pixels;       #IMPLIED
+  >
+
+<!--=================== Images ===========================================-->
+
+<!--
+   To avoid accessibility problems for people who aren't
+   able to see the image, you should provide a text
+   description using the alt and longdesc attributes.
+   In addition, avoid the use of server-side image maps.
+-->
+
+<!ELEMENT img EMPTY>
+<!ATTLIST img
+  %attrs;
+  src         %URI;          #REQUIRED
+  alt         %Text;         #REQUIRED
+  name        NMTOKEN        #IMPLIED
+  longdesc    %URI;          #IMPLIED
+  height      %Length;       #IMPLIED
+  width       %Length;       #IMPLIED
+  usemap      %URI;          #IMPLIED
+  ismap       (ismap)        #IMPLIED
+  align       %ImgAlign;     #IMPLIED
+  border      %Pixels;       #IMPLIED
+  hspace      %Pixels;       #IMPLIED
+  vspace      %Pixels;       #IMPLIED
+  >
+
+<!-- usemap points to a map element which may be in this document
+  or an external document, although the latter is not widely supported -->
+
+<!--================== Client-side image maps ============================-->
+
+<!-- These can be placed in the same document or grouped in a
+     separate document although this isn't yet widely supported -->
+
+<!ELEMENT map ((%block; | form | %misc;)+ | area+)>
+<!ATTLIST map
+  %i18n;
+  %events;
+  id          ID             #REQUIRED
+  class       CDATA          #IMPLIED
+  style       %StyleSheet;   #IMPLIED
+  title       %Text;         #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  >
+
+<!ELEMENT area EMPTY>
+<!ATTLIST area
+  %attrs;
+  shape       %Shape;        "rect"
+  coords      %Coords;       #IMPLIED
+  href        %URI;          #IMPLIED
+  nohref      (nohref)       #IMPLIED
+  alt         %Text;         #REQUIRED
+  tabindex    %Number;       #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  target      %FrameTarget;  #IMPLIED
+  >
+
+<!--================ Forms ===============================================-->
+
+<!ELEMENT form %form.content;>   <!-- forms shouldn't be nested -->
+
+<!ATTLIST form
+  %attrs;
+  action      %URI;          #REQUIRED
+  method      (get|post)     "get"
+  name        NMTOKEN        #IMPLIED
+  enctype     %ContentType;  "application/x-www-form-urlencoded"
+  onsubmit    %Script;       #IMPLIED
+  onreset     %Script;       #IMPLIED
+  accept      %ContentTypes; #IMPLIED
+  accept-charset %Charsets;  #IMPLIED
+  target      %FrameTarget;  #IMPLIED
+  >
+
+<!--
+  Each label must not contain more than ONE field
+  Label elements shouldn't be nested.
+-->
+<!ELEMENT label %Inline;>
+<!ATTLIST label
+  %attrs;
+  for         IDREF          #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  >
+
+<!ENTITY % InputType
+  "(text | password | checkbox |
+    radio | submit | reset |
+    file | hidden | image | button)"
+   >
+
+<!-- the name attribute is required for all but submit & reset -->
+
+<!ELEMENT input EMPTY>     <!-- form control -->
+<!ATTLIST input
+  %attrs;
+  type        %InputType;    "text"
+  name        CDATA          #IMPLIED
+  value       CDATA          #IMPLIED
+  checked     (checked)      #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  readonly    (readonly)     #IMPLIED
+  size        CDATA          #IMPLIED
+  maxlength   %Number;       #IMPLIED
+  src         %URI;          #IMPLIED
+  alt         CDATA          #IMPLIED
+  usemap      %URI;          #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  onselect    %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  accept      %ContentTypes; #IMPLIED
+  align       %ImgAlign;     #IMPLIED
+  >
+
+<!ELEMENT select (optgroup|option)+>  <!-- option selector -->
+<!ATTLIST select
+  %attrs;
+  name        CDATA          #IMPLIED
+  size        %Number;       #IMPLIED
+  multiple    (multiple)     #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  >
+
+<!ELEMENT optgroup (option)+>   <!-- option group -->
+<!ATTLIST optgroup
+  %attrs;
+  disabled    (disabled)     #IMPLIED
+  label       %Text;         #REQUIRED
+  >
+
+<!ELEMENT option (#PCDATA)>     <!-- selectable choice -->
+<!ATTLIST option
+  %attrs;
+  selected    (selected)     #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  label       %Text;         #IMPLIED
+  value       CDATA          #IMPLIED
+  >
+
+<!ELEMENT textarea (#PCDATA)>     <!-- multi-line text field -->
+<!ATTLIST textarea
+  %attrs;
+  name        CDATA          #IMPLIED
+  rows        %Number;       #REQUIRED
+  cols        %Number;       #REQUIRED
+  disabled    (disabled)     #IMPLIED
+  readonly    (readonly)     #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  onselect    %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  >
+
+<!--
+  The fieldset element is used to group form fields.
+  Only one legend element should occur in the content
+  and if present should only be preceded by whitespace.
+-->
+<!ELEMENT fieldset (#PCDATA | legend | %block; | form | %inline; | %misc;)*>
+<!ATTLIST fieldset
+  %attrs;
+  >
+
+<!ENTITY % LAlign "(top|bottom|left|right)">
+
+<!ELEMENT legend %Inline;>     <!-- fieldset label -->
+<!ATTLIST legend
+  %attrs;
+  accesskey   %Character;    #IMPLIED
+  align       %LAlign;       #IMPLIED
+  >
+
+<!--
+ Content is %Flow; excluding a, form, form controls, iframe
+--> 
+<!ELEMENT button %button.content;>  <!-- push button -->
+<!ATTLIST button
+  %attrs;
+  name        CDATA          #IMPLIED
+  value       CDATA          #IMPLIED
+  type        (button|submit|reset) "submit"
+  disabled    (disabled)     #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  >
+
+<!-- single-line text input control (DEPRECATED) -->
+<!ELEMENT isindex EMPTY>
+<!ATTLIST isindex
+  %coreattrs;
+  %i18n;
+  prompt      %Text;         #IMPLIED
+  >
+
+<!--======================= Tables =======================================-->
+
+<!-- Derived from IETF HTML table standard, see [RFC1942] -->
+
+<!--
+ The border attribute sets the thickness of the frame around the
+ table. The default units are screen pixels.
+
+ The frame attribute specifies which parts of the frame around
+ the table should be rendered. The values are not the same as
+ CALS to avoid a name clash with the valign attribute.
+-->
+<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)">
+
+<!--
+ The rules attribute defines which rules to draw between cells:
+
+ If rules is absent then assume:
+     "none" if border is absent or border="0" otherwise "all"
+-->
+
+<!ENTITY % TRules "(none | groups | rows | cols | all)">
+  
+<!-- horizontal placement of table relative to document -->
+<!ENTITY % TAlign "(left|center|right)">
+
+<!-- horizontal alignment attributes for cell contents
+
+  char        alignment char, e.g. char=":"
+  charoff     offset for alignment char
+-->
+<!ENTITY % cellhalign
+  "align      (left|center|right|justify|char) #IMPLIED
+   char       %Character;    #IMPLIED
+   charoff    %Length;       #IMPLIED"
+  >
+
+<!-- vertical alignment attributes for cell contents -->
+<!ENTITY % cellvalign
+  "valign     (top|middle|bottom|baseline) #IMPLIED"
+  >
+
+<!ELEMENT table
+     (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>
+<!ELEMENT caption  %Inline;>
+<!ELEMENT thead    (tr)+>
+<!ELEMENT tfoot    (tr)+>
+<!ELEMENT tbody    (tr)+>
+<!ELEMENT colgroup (col)*>
+<!ELEMENT col      EMPTY>
+<!ELEMENT tr       (th|td)+>
+<!ELEMENT th       %Flow;>
+<!ELEMENT td       %Flow;>
+
+<!ATTLIST table
+  %attrs;
+  summary     %Text;         #IMPLIED
+  width       %Length;       #IMPLIED
+  border      %Pixels;       #IMPLIED
+  frame       %TFrame;       #IMPLIED
+  rules       %TRules;       #IMPLIED
+  cellspacing %Length;       #IMPLIED
+  cellpadding %Length;       #IMPLIED
+  align       %TAlign;       #IMPLIED
+  bgcolor     %Color;        #IMPLIED
+  >
+
+<!ENTITY % CAlign "(top|bottom|left|right)">
+
+<!ATTLIST caption
+  %attrs;
+  align       %CAlign;       #IMPLIED
+  >
+
+<!--
+colgroup groups a set of col elements. It allows you to group
+several semantically related columns together.
+-->
+<!ATTLIST colgroup
+  %attrs;
+  span        %Number;       "1"
+  width       %MultiLength;  #IMPLIED
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!--
+ col elements define the alignment properties for cells in
+ one or more columns.
+
+ The width attribute specifies the width of the columns, e.g.
+
+     width=64        width in screen pixels
+     width=0.5*      relative width of 0.5
+
+ The span attribute causes the attributes of one
+ col element to apply to more than one column.
+-->
+<!ATTLIST col
+  %attrs;
+  span        %Number;       "1"
+  width       %MultiLength;  #IMPLIED
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!--
+    Use thead to duplicate headers when breaking table
+    across page boundaries, or for static headers when
+    tbody sections are rendered in scrolling panel.
+
+    Use tfoot to duplicate footers when breaking table
+    across page boundaries, or for static footers when
+    tbody sections are rendered in scrolling panel.
+
+    Use multiple tbody sections when rules are needed
+    between groups of table rows.
+-->
+<!ATTLIST thead
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tfoot
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tbody
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tr
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  bgcolor     %Color;        #IMPLIED
+  >
+
+<!-- Scope is simpler than headers attribute for common tables -->
+<!ENTITY % Scope "(row|col|rowgroup|colgroup)">
+
+<!-- th is for headers, td for data and for cells acting as both -->
+
+<!ATTLIST th
+  %attrs;
+  abbr        %Text;         #IMPLIED
+  axis        CDATA          #IMPLIED
+  headers     IDREFS         #IMPLIED
+  scope       %Scope;        #IMPLIED
+  rowspan     %Number;       "1"
+  colspan     %Number;       "1"
+  %cellhalign;
+  %cellvalign;
+  nowrap      (nowrap)       #IMPLIED
+  bgcolor     %Color;        #IMPLIED
+  width       %Pixels;       #IMPLIED
+  height      %Pixels;       #IMPLIED
+  >
+
+<!ATTLIST td
+  %attrs;
+  abbr        %Text;         #IMPLIED
+  axis        CDATA          #IMPLIED
+  headers     IDREFS         #IMPLIED
+  scope       %Scope;        #IMPLIED
+  rowspan     %Number;       "1"
+  colspan     %Number;       "1"
+  %cellhalign;
+  %cellvalign;
+  nowrap      (nowrap)       #IMPLIED
+  bgcolor     %Color;        #IMPLIED
+  width       %Pixels;       #IMPLIED
+  height      %Pixels;       #IMPLIED
+  >
+
diff --git a/examples/xhtml/xhtml1-strict.dtd b/examples/xhtml/xhtml1-strict.dtd
new file mode 100644
--- /dev/null
+++ b/examples/xhtml/xhtml1-strict.dtd
@@ -0,0 +1,988 @@
+<!--
+   Extensible HTML version 1.0 Strict DTD
+
+   This is the same as HTML 4.0 Strict except for
+   changes due to the differences between XML and SGML.
+
+   Namespace = http://www.w3.org/1999/xhtml
+
+   For further information, see: http://www.w3.org/TR/xhtml1
+
+   Copyright (c) 1998-2000 W3C (MIT, INRIA, Keio),
+   All Rights Reserved. 
+
+   This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+   PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+   SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+
+   $Revision: 1.1 $
+   $Date: 2002/10/01 13:47:08 $
+
+-->
+
+<!--================ Character mnemonic entities =========================-->
+
+<!ENTITY % HTMLlat1 PUBLIC
+   "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+   "xhtml-lat1.ent">
+%HTMLlat1;
+
+<!ENTITY % HTMLsymbol PUBLIC
+   "-//W3C//ENTITIES Symbols for XHTML//EN"
+   "xhtml-symbol.ent">
+%HTMLsymbol;
+
+<!ENTITY % HTMLspecial PUBLIC
+   "-//W3C//ENTITIES Special for XHTML//EN"
+   "xhtml-special.ent">
+%HTMLspecial;
+
+<!--================== Imported Names ====================================-->
+
+<!ENTITY % ContentType "CDATA">
+    <!-- media type, as per [RFC2045] -->
+
+<!ENTITY % ContentTypes "CDATA">
+    <!-- comma-separated list of media types, as per [RFC2045] -->
+
+<!ENTITY % Charset "CDATA">
+    <!-- a character encoding, as per [RFC2045] -->
+
+<!ENTITY % Charsets "CDATA">
+    <!-- a space separated list of character encodings, as per [RFC2045] -->
+
+<!ENTITY % LanguageCode "NMTOKEN">
+    <!-- a language code, as per [RFC1766] -->
+
+<!ENTITY % Character "CDATA">
+    <!-- a single character from [ISO10646] -->
+
+<!ENTITY % Number "CDATA">
+    <!-- one or more digits -->
+
+<!ENTITY % LinkTypes "CDATA">
+    <!-- space-separated list of link types -->
+
+<!ENTITY % MediaDesc "CDATA">
+    <!-- single or comma-separated list of media descriptors -->
+
+<!ENTITY % URI "CDATA">
+    <!-- a Uniform Resource Identifier, see [RFC2396] -->
+
+<!ENTITY % UriList "CDATA">
+    <!-- a space separated list of Uniform Resource Identifiers -->
+
+<!ENTITY % Datetime "CDATA">
+    <!-- date and time information. ISO date format -->
+
+<!ENTITY % Script "CDATA">
+    <!-- script expression -->
+
+<!ENTITY % StyleSheet "CDATA">
+    <!-- style sheet data -->
+
+<!ENTITY % Text "CDATA">
+    <!-- used for titles etc. -->
+
+<!ENTITY % FrameTarget "NMTOKEN">
+    <!-- render in this frame -->
+
+<!ENTITY % Length "CDATA">
+    <!-- nn for pixels or nn% for percentage length -->
+
+<!ENTITY % MultiLength "CDATA">
+    <!-- pixel, percentage, or relative -->
+
+<!ENTITY % MultiLengths "CDATA">
+    <!-- comma-separated list of MultiLength -->
+
+<!ENTITY % Pixels "CDATA">
+    <!-- integer representing length in pixels -->
+
+<!-- these are used for image maps -->
+
+<!ENTITY % Shape "(rect|circle|poly|default)">
+
+<!ENTITY % Coords "CDATA">
+    <!-- comma separated list of lengths -->
+
+<!--=================== Generic Attributes ===============================-->
+
+<!-- core attributes common to most elements
+  id       document-wide unique id
+  class    space separated list of classes
+  style    associated style info
+  title    advisory title/amplification
+-->
+<!ENTITY % coreattrs
+ "id          ID             #IMPLIED
+  class       CDATA          #IMPLIED
+  style       %StyleSheet;   #IMPLIED
+  title       %Text;         #IMPLIED"
+  >
+
+<!-- internationalization attributes
+  lang        language code (backwards compatible)
+  xml:lang    language code (as per XML 1.0 spec)
+  dir         direction for weak/neutral text
+-->
+<!ENTITY % i18n
+ "lang        %LanguageCode; #IMPLIED
+  xml:lang    %LanguageCode; #IMPLIED
+  dir         (ltr|rtl)      #IMPLIED"
+  >
+
+<!-- attributes for common UI events
+  onclick     a pointer button was clicked
+  ondblclick  a pointer button was double clicked
+  onmousedown a pointer button was pressed down
+  onmouseup   a pointer button was released
+  onmousemove a pointer was moved onto the element
+  onmouseout  a pointer was moved away from the element
+  onkeypress  a key was pressed and released
+  onkeydown   a key was pressed down
+  onkeyup     a key was released
+-->
+<!ENTITY % events
+ "onclick     %Script;       #IMPLIED
+  ondblclick  %Script;       #IMPLIED
+  onmousedown %Script;       #IMPLIED
+  onmouseup   %Script;       #IMPLIED
+  onmouseover %Script;       #IMPLIED
+  onmousemove %Script;       #IMPLIED
+  onmouseout  %Script;       #IMPLIED
+  onkeypress  %Script;       #IMPLIED
+  onkeydown   %Script;       #IMPLIED
+  onkeyup     %Script;       #IMPLIED"
+  >
+
+<!-- attributes for elements that can get the focus
+  accesskey   accessibility key character
+  tabindex    position in tabbing order
+  onfocus     the element got the focus
+  onblur      the element lost the focus
+-->
+<!ENTITY % focus
+ "accesskey   %Character;    #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED"
+  >
+
+<!ENTITY % attrs "%coreattrs; %i18n; %events;">
+
+<!--=================== Text Elements ====================================-->
+
+<!ENTITY % special
+   "br | span | bdo | object | img | map">
+
+<!ENTITY % fontstyle "tt | i | b | big | small">
+
+<!ENTITY % phrase "em | strong | dfn | code | q | sub | sup |
+                   samp | kbd | var | cite | abbr | acronym">
+
+<!ENTITY % inline.forms "input | select | textarea | label | button">
+
+<!-- these can occur at block or inline level -->
+<!ENTITY % misc "ins | del | script | noscript">
+
+<!ENTITY % inline "a | %special; | %fontstyle; | %phrase; | %inline.forms;">
+
+<!-- %Inline; covers inline or "text-level" elements -->
+<!ENTITY % Inline "(#PCDATA | %inline; | %misc;)*">
+
+<!--================== Block level elements ==============================-->
+
+<!ENTITY % heading "h1|h2|h3|h4|h5|h6">
+<!ENTITY % lists "ul | ol | dl">
+<!ENTITY % blocktext "pre | hr | blockquote | address">
+
+<!ENTITY % block
+     "p | %heading; | div | %lists; | %blocktext; | fieldset | table">
+
+<!ENTITY % Block "(%block; | form | %misc;)*">
+
+<!-- %Flow; mixes Block and Inline and is used for list items etc. -->
+<!ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*">
+
+<!--================== Content models for exclusions =====================-->
+
+<!-- a elements use %Inline; excluding a -->
+
+<!ENTITY % a.content
+   "(#PCDATA | %special; | %fontstyle; | %phrase; | %inline.forms; | %misc;)*">
+
+<!-- pre uses %Inline excluding img, object, big, small, sup or sup -->
+
+<!ENTITY % pre.content
+   "(#PCDATA | a | br | span | bdo | map | tt | i | b |
+      %phrase; | %inline.forms;)*">
+
+<!-- form uses %Block; excluding form -->
+
+<!ENTITY % form.content "(%block; | %misc;)*">
+
+<!-- button uses %Flow; but excludes a, form and form controls -->
+
+<!ENTITY % button.content
+   "(#PCDATA | p | %heading; | div | %lists; | %blocktext; |
+    table | %special; | %fontstyle; | %phrase; | %misc;)*">
+
+<!--================ Document Structure ==================================-->
+
+<!-- the namespace URI designates the document profile -->
+
+<!ELEMENT html (head, body)>
+<!ATTLIST html
+  %i18n;
+  xmlns       %URI;          #FIXED 'http://www.w3.org/1999/xhtml'
+  >
+
+<!--================ Document Head =======================================-->
+
+<!ENTITY % head.misc "(script|style|meta|link|object)*">
+
+<!-- content model is %head.misc; combined with a single
+     title and an optional base element in any order -->
+
+<!ELEMENT head (%head.misc;,
+     ((title, %head.misc;, (base, %head.misc;)?) |
+      (base, %head.misc;, (title, %head.misc;))))>
+
+<!ATTLIST head
+  %i18n;
+  profile     %URI;          #IMPLIED
+  >
+
+<!-- The title element is not considered part of the flow of text.
+       It should be displayed, for example as the page header or
+       window title. Exactly one title is required per document.
+    -->
+<!ELEMENT title (#PCDATA)>
+<!ATTLIST title %i18n;>
+
+<!-- document base URI -->
+
+<!ELEMENT base EMPTY>
+<!ATTLIST base
+  href        %URI;          #IMPLIED
+  >
+
+<!-- generic metainformation -->
+<!ELEMENT meta EMPTY>
+<!ATTLIST meta
+  %i18n;
+  http-equiv  CDATA          #IMPLIED
+  name        CDATA          #IMPLIED
+  content     CDATA          #REQUIRED
+  scheme      CDATA          #IMPLIED
+  >
+
+<!--
+  Relationship values can be used in principle:
+
+   a) for document specific toolbars/menus when used
+      with the link element in document head e.g.
+        start, contents, previous, next, index, end, help
+   b) to link to a separate style sheet (rel="stylesheet")
+   c) to make a link to a script (rel="script")
+   d) by stylesheets to control how collections of
+      html nodes are rendered into printed documents
+   e) to make a link to a printable version of this document
+      e.g. a PostScript or PDF version (rel="alternate" media="print")
+-->
+
+<!ELEMENT link EMPTY>
+<!ATTLIST link
+  %attrs;
+  charset     %Charset;      #IMPLIED
+  href        %URI;          #IMPLIED
+  hreflang    %LanguageCode; #IMPLIED
+  type        %ContentType;  #IMPLIED
+  rel         %LinkTypes;    #IMPLIED
+  rev         %LinkTypes;    #IMPLIED
+  media       %MediaDesc;    #IMPLIED
+  >
+
+<!-- style info, which may include CDATA sections -->
+<!ELEMENT style (#PCDATA)>
+<!ATTLIST style
+  %i18n;
+  type        %ContentType;  #REQUIRED
+  media       %MediaDesc;    #IMPLIED
+  title       %Text;         #IMPLIED
+  xml:space   (preserve)     #FIXED 'preserve'
+  >
+
+<!-- script statements, which may include CDATA sections -->
+<!ELEMENT script (#PCDATA)>
+<!ATTLIST script
+  charset     %Charset;      #IMPLIED
+  type        %ContentType;  #REQUIRED
+  src         %URI;          #IMPLIED
+  defer       (defer)        #IMPLIED
+  xml:space   (preserve)     #FIXED 'preserve'
+  >
+
+<!-- alternate content container for non script-based rendering -->
+
+<!ELEMENT noscript %Block;>
+<!ATTLIST noscript
+  %attrs;
+  >
+
+<!--=================== Document Body ====================================-->
+
+<!ELEMENT body %Block;>
+<!ATTLIST body
+  %attrs;
+  onload          %Script;   #IMPLIED
+  onunload        %Script;   #IMPLIED
+  >
+
+<!ELEMENT div %Flow;>  <!-- generic language/style container -->
+<!ATTLIST div
+  %attrs;
+  >
+
+<!--=================== Paragraphs =======================================-->
+
+<!ELEMENT p %Inline;>
+<!ATTLIST p
+  %attrs;
+  >
+
+<!--=================== Headings =========================================-->
+
+<!--
+  There are six levels of headings from h1 (the most important)
+  to h6 (the least important).
+-->
+
+<!ELEMENT h1  %Inline;>
+<!ATTLIST h1
+   %attrs;
+   >
+
+<!ELEMENT h2 %Inline;>
+<!ATTLIST h2
+   %attrs;
+   >
+
+<!ELEMENT h3 %Inline;>
+<!ATTLIST h3
+   %attrs;
+   >
+
+<!ELEMENT h4 %Inline;>
+<!ATTLIST h4
+   %attrs;
+   >
+
+<!ELEMENT h5 %Inline;>
+<!ATTLIST h5
+   %attrs;
+   >
+
+<!ELEMENT h6 %Inline;>
+<!ATTLIST h6
+   %attrs;
+   >
+
+<!--=================== Lists ============================================-->
+
+<!-- Unordered list -->
+
+<!ELEMENT ul (li)+>
+<!ATTLIST ul
+  %attrs;
+  >
+
+<!-- Ordered (numbered) list -->
+
+<!ELEMENT ol (li)+>
+<!ATTLIST ol
+  %attrs;
+  >
+
+<!-- list item -->
+
+<!ELEMENT li %Flow;>
+<!ATTLIST li
+  %attrs;
+  >
+
+<!-- definition lists - dt for term, dd for its definition -->
+
+<!ELEMENT dl (dt|dd)+>
+<!ATTLIST dl
+  %attrs;
+  >
+
+<!ELEMENT dt %Inline;>
+<!ATTLIST dt
+  %attrs;
+  >
+
+<!ELEMENT dd %Flow;>
+<!ATTLIST dd
+  %attrs;
+  >
+
+<!--=================== Address ==========================================-->
+
+<!-- information on author -->
+
+<!ELEMENT address %Inline;>
+<!ATTLIST address
+  %attrs;
+  >
+
+<!--=================== Horizontal Rule ==================================-->
+
+<!ELEMENT hr EMPTY>
+<!ATTLIST hr
+  %attrs;
+  >
+
+<!--=================== Preformatted Text ================================-->
+
+<!-- content is %Inline; excluding "img|object|big|small|sub|sup" -->
+
+<!ELEMENT pre %pre.content;>
+<!ATTLIST pre
+  %attrs;
+  xml:space (preserve) #FIXED 'preserve'
+  >
+
+<!--=================== Block-like Quotes ================================-->
+
+<!ELEMENT blockquote %Block;>
+<!ATTLIST blockquote
+  %attrs;
+  cite        %URI;          #IMPLIED
+  >
+
+<!--=================== Inserted/Deleted Text ============================-->
+
+<!--
+  ins/del are allowed in block and inline content, but its
+  inappropriate to include block content within an ins element
+  occurring in inline content.
+-->
+<!ELEMENT ins %Flow;>
+<!ATTLIST ins
+  %attrs;
+  cite        %URI;          #IMPLIED
+  datetime    %Datetime;     #IMPLIED
+  >
+
+<!ELEMENT del %Flow;>
+<!ATTLIST del
+  %attrs;
+  cite        %URI;          #IMPLIED
+  datetime    %Datetime;     #IMPLIED
+  >
+
+<!--================== The Anchor Element ================================-->
+
+<!-- content is %Inline; except that anchors shouldn't be nested -->
+
+<!ELEMENT a %a.content;>
+<!ATTLIST a
+  %attrs;
+  charset     %Charset;      #IMPLIED
+  type        %ContentType;  #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  href        %URI;          #IMPLIED
+  hreflang    %LanguageCode; #IMPLIED
+  rel         %LinkTypes;    #IMPLIED
+  rev         %LinkTypes;    #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  shape       %Shape;        "rect"
+  coords      %Coords;       #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  >
+
+<!--===================== Inline Elements ================================-->
+
+<!ELEMENT span %Inline;> <!-- generic language/style container -->
+<!ATTLIST span
+  %attrs;
+  >
+
+<!ELEMENT bdo %Inline;>  <!-- I18N BiDi over-ride -->
+<!ATTLIST bdo
+  %coreattrs;
+  %events;
+  lang        %LanguageCode; #IMPLIED
+  xml:lang    %LanguageCode; #IMPLIED
+  dir         (ltr|rtl)      #REQUIRED
+  >
+
+<!ELEMENT br EMPTY>   <!-- forced line break -->
+<!ATTLIST br
+  %coreattrs;
+  >
+
+<!ELEMENT em %Inline;>   <!-- emphasis -->
+<!ATTLIST em %attrs;>
+
+<!ELEMENT strong %Inline;>   <!-- strong emphasis -->
+<!ATTLIST strong %attrs;>
+
+<!ELEMENT dfn %Inline;>   <!-- definitional -->
+<!ATTLIST dfn %attrs;>
+
+<!ELEMENT code %Inline;>   <!-- program code -->
+<!ATTLIST code %attrs;>
+
+<!ELEMENT samp %Inline;>   <!-- sample -->
+<!ATTLIST samp %attrs;>
+
+<!ELEMENT kbd %Inline;>  <!-- something user would type -->
+<!ATTLIST kbd %attrs;>
+
+<!ELEMENT var %Inline;>   <!-- variable -->
+<!ATTLIST var %attrs;>
+
+<!ELEMENT cite %Inline;>   <!-- citation -->
+<!ATTLIST cite %attrs;>
+
+<!ELEMENT abbr %Inline;>   <!-- abbreviation -->
+<!ATTLIST abbr %attrs;>
+
+<!ELEMENT acronym %Inline;>   <!-- acronym -->
+<!ATTLIST acronym %attrs;>
+
+<!ELEMENT q %Inline;>   <!-- inlined quote -->
+<!ATTLIST q
+  %attrs;
+  cite        %URI;          #IMPLIED
+  >
+
+<!ELEMENT sub %Inline;> <!-- subscript -->
+<!ATTLIST sub %attrs;>
+
+<!ELEMENT sup %Inline;> <!-- superscript -->
+<!ATTLIST sup %attrs;>
+
+<!ELEMENT tt %Inline;>   <!-- fixed pitch font -->
+<!ATTLIST tt %attrs;>
+
+<!ELEMENT i %Inline;>   <!-- italic font -->
+<!ATTLIST i %attrs;>
+
+<!ELEMENT b %Inline;>   <!-- bold font -->
+<!ATTLIST b %attrs;>
+
+<!ELEMENT big %Inline;>   <!-- bigger font -->
+<!ATTLIST big %attrs;>
+
+<!ELEMENT small %Inline;>   <!-- smaller font -->
+<!ATTLIST small %attrs;>
+
+<!--==================== Object ======================================-->
+<!--
+  object is used to embed objects as part of HTML pages.
+  param elements should precede other content. Parameters
+  can also be expressed as attribute/value pairs on the
+  object element itself when brevity is desired.
+-->
+
+<!ELEMENT object (#PCDATA | param | %block; | form | %inline; | %misc;)*>
+<!ATTLIST object
+  %attrs;
+  declare     (declare)      #IMPLIED
+  classid     %URI;          #IMPLIED
+  codebase    %URI;          #IMPLIED
+  data        %URI;          #IMPLIED
+  type        %ContentType;  #IMPLIED
+  codetype    %ContentType;  #IMPLIED
+  archive     %UriList;      #IMPLIED
+  standby     %Text;         #IMPLIED
+  height      %Length;       #IMPLIED
+  width       %Length;       #IMPLIED
+  usemap      %URI;          #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  >
+
+<!--
+  param is used to supply a named property value.
+  In XML it would seem natural to follow RDF and support an
+  abbreviated syntax where the param elements are replaced
+  by attribute value pairs on the object start tag.
+-->
+<!ELEMENT param EMPTY>
+<!ATTLIST param
+  id          ID             #IMPLIED
+  name        CDATA          #IMPLIED
+  value       CDATA          #IMPLIED
+  valuetype   (data|ref|object) "data"
+  type        %ContentType;  #IMPLIED
+  >
+
+<!--=================== Images ===========================================-->
+
+<!--
+   To avoid accessibility problems for people who aren't
+   able to see the image, you should provide a text
+   description using the alt and longdesc attributes.
+   In addition, avoid the use of server-side image maps.
+   Note that in this DTD there is no name attribute. That
+   is only available in the transitional and frameset DTD.
+-->
+
+<!ELEMENT img EMPTY>
+<!ATTLIST img
+  %attrs;
+  src         %URI;          #REQUIRED
+  alt         %Text;         #REQUIRED
+  longdesc    %URI;          #IMPLIED
+  height      %Length;       #IMPLIED
+  width       %Length;       #IMPLIED
+  usemap      %URI;          #IMPLIED
+  ismap       (ismap)        #IMPLIED
+  >
+
+<!-- usemap points to a map element which may be in this document
+  or an external document, although the latter is not widely supported -->
+
+<!--================== Client-side image maps ============================-->
+
+<!-- These can be placed in the same document or grouped in a
+     separate document although this isn't yet widely supported -->
+
+<!ELEMENT map ((%block; | form | %misc;)+ | area+)>
+<!ATTLIST map
+  %i18n;
+  %events;
+  id          ID             #REQUIRED
+  class       CDATA          #IMPLIED
+  style       %StyleSheet;   #IMPLIED
+  title       %Text;         #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  >
+
+<!ELEMENT area EMPTY>
+<!ATTLIST area
+  %attrs;
+  shape       %Shape;        "rect"
+  coords      %Coords;       #IMPLIED
+  href        %URI;          #IMPLIED
+  nohref      (nohref)       #IMPLIED
+  alt         %Text;         #REQUIRED
+  tabindex    %Number;       #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  >
+
+<!--================ Forms ===============================================-->
+<!ELEMENT form %form.content;>   <!-- forms shouldn't be nested -->
+
+<!ATTLIST form
+  %attrs;
+  action      %URI;          #REQUIRED
+  method      (get|post)     "get"
+  enctype     %ContentType;  "application/x-www-form-urlencoded"
+  onsubmit    %Script;       #IMPLIED
+  onreset     %Script;       #IMPLIED
+  accept      %ContentTypes; #IMPLIED
+  accept-charset %Charsets;  #IMPLIED
+  >
+
+<!--
+  Each label must not contain more than ONE field
+  Label elements shouldn't be nested.
+-->
+<!ELEMENT label %Inline;>
+<!ATTLIST label
+  %attrs;
+  for         IDREF          #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  >
+
+<!ENTITY % InputType
+  "(text | password | checkbox |
+    radio | submit | reset |
+    file | hidden | image | button)"
+   >
+
+<!-- the name attribute is required for all but submit & reset -->
+
+<!ELEMENT input EMPTY>     <!-- form control -->
+<!ATTLIST input
+  %attrs;
+  type        %InputType;    "text"
+  name        CDATA          #IMPLIED
+  value       CDATA          #IMPLIED
+  checked     (checked)      #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  readonly    (readonly)     #IMPLIED
+  size        CDATA          #IMPLIED
+  maxlength   %Number;       #IMPLIED
+  src         %URI;          #IMPLIED
+  alt         CDATA          #IMPLIED
+  usemap      %URI;          #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  onselect    %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  accept      %ContentTypes; #IMPLIED
+  >
+
+<!ELEMENT select (optgroup|option)+>  <!-- option selector -->
+<!ATTLIST select
+  %attrs;
+  name        CDATA          #IMPLIED
+  size        %Number;       #IMPLIED
+  multiple    (multiple)     #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  >
+
+<!ELEMENT optgroup (option)+>   <!-- option group -->
+<!ATTLIST optgroup
+  %attrs;
+  disabled    (disabled)     #IMPLIED
+  label       %Text;         #REQUIRED
+  >
+
+<!ELEMENT option (#PCDATA)>     <!-- selectable choice -->
+<!ATTLIST option
+  %attrs;
+  selected    (selected)     #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  label       %Text;         #IMPLIED
+  value       CDATA          #IMPLIED
+  >
+
+<!ELEMENT textarea (#PCDATA)>     <!-- multi-line text field -->
+<!ATTLIST textarea
+  %attrs;
+  name        CDATA          #IMPLIED
+  rows        %Number;       #REQUIRED
+  cols        %Number;       #REQUIRED
+  disabled    (disabled)     #IMPLIED
+  readonly    (readonly)     #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  onselect    %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  >
+
+<!--
+  The fieldset element is used to group form fields.
+  Only one legend element should occur in the content
+  and if present should only be preceded by whitespace.
+-->
+<!ELEMENT fieldset (#PCDATA | legend | %block; | form | %inline; | %misc;)*>
+<!ATTLIST fieldset
+  %attrs;
+  >
+
+<!ELEMENT legend %Inline;>     <!-- fieldset label -->
+<!ATTLIST legend
+  %attrs;
+  accesskey   %Character;    #IMPLIED
+  >
+
+<!--
+ Content is %Flow; excluding a, form and form controls
+--> 
+<!ELEMENT button %button.content;>  <!-- push button -->
+<!ATTLIST button
+  %attrs;
+  name        CDATA          #IMPLIED
+  value       CDATA          #IMPLIED
+  type        (button|submit|reset) "submit"
+  disabled    (disabled)     #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  >
+
+<!--======================= Tables =======================================-->
+
+<!-- Derived from IETF HTML table standard, see [RFC1942] -->
+
+<!--
+ The border attribute sets the thickness of the frame around the
+ table. The default units are screen pixels.
+
+ The frame attribute specifies which parts of the frame around
+ the table should be rendered. The values are not the same as
+ CALS to avoid a name clash with the valign attribute.
+-->
+<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)">
+
+<!--
+ The rules attribute defines which rules to draw between cells:
+
+ If rules is absent then assume:
+     "none" if border is absent or border="0" otherwise "all"
+-->
+
+<!ENTITY % TRules "(none | groups | rows | cols | all)">
+  
+<!-- horizontal placement of table relative to document -->
+<!ENTITY % TAlign "(left|center|right)">
+
+<!-- horizontal alignment attributes for cell contents
+
+  char        alignment char, e.g. char=':'
+  charoff     offset for alignment char
+-->
+<!ENTITY % cellhalign
+  "align      (left|center|right|justify|char) #IMPLIED
+   char       %Character;    #IMPLIED
+   charoff    %Length;       #IMPLIED"
+  >
+
+<!-- vertical alignment attributes for cell contents -->
+<!ENTITY % cellvalign
+  "valign     (top|middle|bottom|baseline) #IMPLIED"
+  >
+
+<!ELEMENT table
+     (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>
+<!ELEMENT caption  %Inline;>
+<!ELEMENT thead    (tr)+>
+<!ELEMENT tfoot    (tr)+>
+<!ELEMENT tbody    (tr)+>
+<!ELEMENT colgroup (col)*>
+<!ELEMENT col      EMPTY>
+<!ELEMENT tr       (th|td)+>
+<!ELEMENT th       %Flow;>
+<!ELEMENT td       %Flow;>
+
+<!ATTLIST table
+  %attrs;
+  summary     %Text;         #IMPLIED
+  width       %Length;       #IMPLIED
+  border      %Pixels;       #IMPLIED
+  frame       %TFrame;       #IMPLIED
+  rules       %TRules;       #IMPLIED
+  cellspacing %Length;       #IMPLIED
+  cellpadding %Length;       #IMPLIED
+  >
+
+<!ENTITY % CAlign "(top|bottom|left|right)">
+
+<!ATTLIST caption
+  %attrs;
+  >
+
+<!--
+colgroup groups a set of col elements. It allows you to group
+several semantically related columns together.
+-->
+<!ATTLIST colgroup
+  %attrs;
+  span        %Number;       "1"
+  width       %MultiLength;  #IMPLIED
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!--
+ col elements define the alignment properties for cells in
+ one or more columns.
+
+ The width attribute specifies the width of the columns, e.g.
+
+     width=64        width in screen pixels
+     width=0.5*      relative width of 0.5
+
+ The span attribute causes the attributes of one
+ col element to apply to more than one column.
+-->
+<!ATTLIST col
+  %attrs;
+  span        %Number;       "1"
+  width       %MultiLength;  #IMPLIED
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!--
+    Use thead to duplicate headers when breaking table
+    across page boundaries, or for static headers when
+    tbody sections are rendered in scrolling panel.
+
+    Use tfoot to duplicate footers when breaking table
+    across page boundaries, or for static footers when
+    tbody sections are rendered in scrolling panel.
+
+    Use multiple tbody sections when rules are needed
+    between groups of table rows.
+-->
+<!ATTLIST thead
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tfoot
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tbody
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tr
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+
+<!-- Scope is simpler than headers attribute for common tables -->
+<!ENTITY % Scope "(row|col|rowgroup|colgroup)">
+
+<!-- th is for headers, td for data and for cells acting as both -->
+
+<!ATTLIST th
+  %attrs;
+  abbr        %Text;         #IMPLIED
+  axis        CDATA          #IMPLIED
+  headers     IDREFS         #IMPLIED
+  scope       %Scope;        #IMPLIED
+  rowspan     %Number;       "1"
+  colspan     %Number;       "1"
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST td
+  %attrs;
+  abbr        %Text;         #IMPLIED
+  axis        CDATA          #IMPLIED
+  headers     IDREFS         #IMPLIED
+  scope       %Scope;        #IMPLIED
+  rowspan     %Number;       "1"
+  colspan     %Number;       "1"
+  %cellhalign;
+  %cellvalign;
+  >
+
diff --git a/examples/xhtml/xhtml1-transitional.dtd b/examples/xhtml/xhtml1-transitional.dtd
new file mode 100644
--- /dev/null
+++ b/examples/xhtml/xhtml1-transitional.dtd
@@ -0,0 +1,1196 @@
+<!--
+   Extensible HTML version 1.0 Transitional DTD
+
+   This is the same as HTML 4.0 Transitional except for
+   changes due to the differences between XML and SGML.
+
+   Namespace = http://www.w3.org/1999/xhtml
+
+   For further information, see: http://www.w3.org/TR/xhtml1
+
+   Copyright (c) 1998-2000 W3C (MIT, INRIA, Keio),
+   All Rights Reserved. 
+
+   This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+   PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+   SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
+
+   $Revision: 1.1 $
+   $Date: 2002/10/01 13:47:08 $
+
+-->
+
+<!--================ Character mnemonic entities =========================-->
+
+<!ENTITY % HTMLlat1 PUBLIC
+   "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+   "xhtml-lat1.ent">
+%HTMLlat1;
+
+<!ENTITY % HTMLsymbol PUBLIC
+   "-//W3C//ENTITIES Symbols for XHTML//EN"
+   "xhtml-symbol.ent">
+%HTMLsymbol;
+
+<!ENTITY % HTMLspecial PUBLIC
+   "-//W3C//ENTITIES Special for XHTML//EN"
+   "xhtml-special.ent">
+%HTMLspecial;
+
+<!--================== Imported Names ====================================-->
+
+<!ENTITY % ContentType "CDATA">
+    <!-- media type, as per [RFC2045] -->
+
+<!ENTITY % ContentTypes "CDATA">
+    <!-- comma-separated list of media types, as per [RFC2045] -->
+
+<!ENTITY % Charset "CDATA">
+    <!-- a character encoding, as per [RFC2045] -->
+
+<!ENTITY % Charsets "CDATA">
+    <!-- a space separated list of character encodings, as per [RFC2045] -->
+
+<!ENTITY % LanguageCode "NMTOKEN">
+    <!-- a language code, as per [RFC1766] -->
+
+<!ENTITY % Character "CDATA">
+    <!-- a single character from [ISO10646] -->
+
+<!ENTITY % Number "CDATA">
+    <!-- one or more digits -->
+
+<!ENTITY % LinkTypes "CDATA">
+    <!-- space-separated list of link types -->
+
+<!ENTITY % MediaDesc "CDATA">
+    <!-- single or comma-separated list of media descriptors -->
+
+<!ENTITY % URI "CDATA">
+    <!-- a Uniform Resource Identifier, see [RFC2396] -->
+
+<!ENTITY % UriList "CDATA">
+    <!-- a space separated list of Uniform Resource Identifiers -->
+
+<!ENTITY % Datetime "CDATA">
+    <!-- date and time information. ISO date format -->
+
+<!ENTITY % Script "CDATA">
+    <!-- script expression -->
+
+<!ENTITY % StyleSheet "CDATA">
+    <!-- style sheet data -->
+
+<!ENTITY % Text "CDATA">
+    <!-- used for titles etc. -->
+
+<!ENTITY % FrameTarget "NMTOKEN">
+    <!-- render in this frame -->
+
+<!ENTITY % Length "CDATA">
+    <!-- nn for pixels or nn% for percentage length -->
+
+<!ENTITY % MultiLength "CDATA">
+    <!-- pixel, percentage, or relative -->
+
+<!ENTITY % MultiLengths "CDATA">
+    <!-- comma-separated list of MultiLength -->
+
+<!ENTITY % Pixels "CDATA">
+    <!-- integer representing length in pixels -->
+
+<!-- these are used for image maps -->
+
+<!ENTITY % Shape "(rect|circle|poly|default)">
+
+<!ENTITY % Coords "CDATA">
+    <!-- comma separated list of lengths -->
+
+<!-- used for object, applet, img, input and iframe -->
+<!ENTITY % ImgAlign "(top|middle|bottom|left|right)">
+
+<!-- a color using sRGB: #RRGGBB as Hex values -->
+<!ENTITY % Color "CDATA">
+
+<!-- There are also 16 widely known color names with their sRGB values:
+
+    Black  = #000000    Green  = #008000
+    Silver = #C0C0C0    Lime   = #00FF00
+    Gray   = #808080    Olive  = #808000
+    White  = #FFFFFF    Yellow = #FFFF00
+    Maroon = #800000    Navy   = #000080
+    Red    = #FF0000    Blue   = #0000FF
+    Purple = #800080    Teal   = #008080
+    Fuchsia= #FF00FF    Aqua   = #00FFFF
+-->
+
+<!--=================== Generic Attributes ===============================-->
+
+<!-- core attributes common to most elements
+  id       document-wide unique id
+  class    space separated list of classes
+  style    associated style info
+  title    advisory title/amplification
+-->
+<!ENTITY % coreattrs
+ "id          ID             #IMPLIED
+  class       CDATA          #IMPLIED
+  style       %StyleSheet;   #IMPLIED
+  title       %Text;         #IMPLIED"
+  >
+
+<!-- internationalization attributes
+  lang        language code (backwards compatible)
+  xml:lang    language code (as per XML 1.0 spec)
+  dir         direction for weak/neutral text
+-->
+<!ENTITY % i18n
+ "lang        %LanguageCode; #IMPLIED
+  xml:lang    %LanguageCode; #IMPLIED
+  dir         (ltr|rtl)      #IMPLIED"
+  >
+
+<!-- attributes for common UI events
+  onclick     a pointer button was clicked
+  ondblclick  a pointer button was double clicked
+  onmousedown a pointer button was pressed down
+  onmouseup   a pointer button was released
+  onmousemove a pointer was moved onto the element
+  onmouseout  a pointer was moved away from the element
+  onkeypress  a key was pressed and released
+  onkeydown   a key was pressed down
+  onkeyup     a key was released
+-->
+<!ENTITY % events
+ "onclick     %Script;       #IMPLIED
+  ondblclick  %Script;       #IMPLIED
+  onmousedown %Script;       #IMPLIED
+  onmouseup   %Script;       #IMPLIED
+  onmouseover %Script;       #IMPLIED
+  onmousemove %Script;       #IMPLIED
+  onmouseout  %Script;       #IMPLIED
+  onkeypress  %Script;       #IMPLIED
+  onkeydown   %Script;       #IMPLIED
+  onkeyup     %Script;       #IMPLIED"
+  >
+
+<!-- attributes for elements that can get the focus
+  accesskey   accessibility key character
+  tabindex    position in tabbing order
+  onfocus     the element got the focus
+  onblur      the element lost the focus
+-->
+<!ENTITY % focus
+ "accesskey   %Character;    #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED"
+  >
+
+<!ENTITY % attrs "%coreattrs; %i18n; %events;">
+
+<!-- text alignment for p, div, h1-h6. The default is
+     align="left" for ltr headings, "right" for rtl -->
+
+<!ENTITY % TextAlign "align (left|center|right) #IMPLIED">
+
+<!--=================== Text Elements ====================================-->
+
+<!ENTITY % special
+   "br | span | bdo | object | applet | img | map | iframe">
+
+<!ENTITY % fontstyle "tt | i | b | big | small | u
+                      | s | strike |font | basefont">
+
+<!ENTITY % phrase "em | strong | dfn | code | q | sub | sup |
+                   samp | kbd | var | cite | abbr | acronym">
+
+<!ENTITY % inline.forms "input | select | textarea | label | button">
+
+<!-- these can occur at block or inline level -->
+<!ENTITY % misc "ins | del | script | noscript">
+
+<!ENTITY % inline "a | %special; | %fontstyle; | %phrase; | %inline.forms;">
+
+<!-- %Inline; covers inline or "text-level" elements -->
+<!ENTITY % Inline "(#PCDATA | %inline; | %misc;)*">
+
+<!--================== Block level elements ==============================-->
+
+<!ENTITY % heading "h1|h2|h3|h4|h5|h6">
+<!ENTITY % lists "ul | ol | dl | menu | dir">
+<!ENTITY % blocktext "pre | hr | blockquote | address | center | noframes">
+
+<!ENTITY % block
+    "p | %heading; | div | %lists; | %blocktext; | isindex |fieldset | table">
+
+<!ENTITY % Block "(%block; | form | %misc;)*">
+
+<!-- %Flow; mixes Block and Inline and is used for list items etc. -->
+<!ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*">
+
+<!--================== Content models for exclusions =====================-->
+
+<!-- a elements use %Inline; excluding a -->
+
+<!ENTITY % a.content
+   "(#PCDATA | %special; | %fontstyle; | %phrase; | %inline.forms; | %misc;)*">
+
+<!-- pre uses %Inline excluding img, object, applet, big, small,
+     sub, sup, font, or basefont -->
+
+<!ENTITY % pre.content
+   "(#PCDATA | a | br | span | bdo | map | tt | i | b | u | s |
+      %phrase; | %inline.forms;)*">
+
+<!-- form uses %Flow; excluding form -->
+
+<!ENTITY % form.content "(#PCDATA | %block; | %inline; | %misc;)*">
+
+<!-- button uses %Flow; but excludes a, form, form controls, iframe -->
+
+<!ENTITY % button.content
+   "(#PCDATA | p | %heading; | div | %lists; | %blocktext; |
+      table | br | span | bdo | object | applet | img | map |
+      %fontstyle; | %phrase; | %misc;)*">
+
+<!--================ Document Structure ==================================-->
+
+<!-- the namespace URI designates the document profile -->
+
+<!ELEMENT html (head, body)>
+<!ATTLIST html
+  %i18n;
+  xmlns       %URI;          #FIXED 'http://www.w3.org/1999/xhtml'
+  >
+
+<!--================ Document Head =======================================-->
+
+<!ENTITY % head.misc "(script|style|meta|link|object|isindex)*">
+
+<!-- content model is %head.misc; combined with a single
+     title and an optional base element in any order -->
+
+<!ELEMENT head (%head.misc;,
+     ((title, %head.misc;, (base, %head.misc;)?) |
+      (base, %head.misc;, (title, %head.misc;))))>
+
+<!ATTLIST head
+  %i18n;
+  profile     %URI;          #IMPLIED
+  >
+
+<!-- The title element is not considered part of the flow of text.
+       It should be displayed, for example as the page header or
+       window title. Exactly one title is required per document.
+    -->
+<!ELEMENT title (#PCDATA)>
+<!ATTLIST title %i18n;>
+
+<!-- document base URI -->
+
+<!ELEMENT base EMPTY>
+<!ATTLIST base
+  href        %URI;          #IMPLIED
+  target      %FrameTarget;  #IMPLIED
+  >
+
+<!-- generic metainformation -->
+<!ELEMENT meta EMPTY>
+<!ATTLIST meta
+  %i18n;
+  http-equiv  CDATA          #IMPLIED
+  name        CDATA          #IMPLIED
+  content     CDATA          #REQUIRED
+  scheme      CDATA          #IMPLIED
+  >
+
+<!--
+  Relationship values can be used in principle:
+
+   a) for document specific toolbars/menus when used
+      with the link element in document head e.g.
+        start, contents, previous, next, index, end, help
+   b) to link to a separate style sheet (rel="stylesheet")
+   c) to make a link to a script (rel="script")
+   d) by stylesheets to control how collections of
+      html nodes are rendered into printed documents
+   e) to make a link to a printable version of this document
+      e.g. a PostScript or PDF version (rel="alternate" media="print")
+-->
+
+<!ELEMENT link EMPTY>
+<!ATTLIST link
+  %attrs;
+  charset     %Charset;      #IMPLIED
+  href        %URI;          #IMPLIED
+  hreflang    %LanguageCode; #IMPLIED
+  type        %ContentType;  #IMPLIED
+  rel         %LinkTypes;    #IMPLIED
+  rev         %LinkTypes;    #IMPLIED
+  media       %MediaDesc;    #IMPLIED
+  target      %FrameTarget;  #IMPLIED
+  >
+
+<!-- style info, which may include CDATA sections -->
+<!ELEMENT style (#PCDATA)>
+<!ATTLIST style
+  %i18n;
+  type        %ContentType;  #REQUIRED
+  media       %MediaDesc;    #IMPLIED
+  title       %Text;         #IMPLIED
+  xml:space   (preserve)     #FIXED 'preserve'
+  >
+
+<!-- script statements, which may include CDATA sections -->
+<!ELEMENT script (#PCDATA)>
+<!ATTLIST script
+  charset     %Charset;      #IMPLIED
+  type        %ContentType;  #REQUIRED
+  language    CDATA          #IMPLIED
+  src         %URI;          #IMPLIED
+  defer       (defer)        #IMPLIED
+  xml:space   (preserve)     #FIXED 'preserve'
+  >
+
+<!-- alternate content container for non script-based rendering -->
+
+<!ELEMENT noscript %Flow;>
+<!ATTLIST noscript
+  %attrs;
+  >
+
+<!--======================= Frames =======================================-->
+
+<!-- inline subwindow -->
+
+<!ELEMENT iframe %Flow;>
+<!ATTLIST iframe
+  %coreattrs;
+  longdesc    %URI;          #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  src         %URI;          #IMPLIED
+  frameborder (1|0)          "1"
+  marginwidth %Pixels;       #IMPLIED
+  marginheight %Pixels;      #IMPLIED
+  scrolling   (yes|no|auto)  "auto"
+  align       %ImgAlign;     #IMPLIED
+  height      %Length;       #IMPLIED
+  width       %Length;       #IMPLIED
+  >
+
+<!-- alternate content container for non frame-based rendering -->
+
+<!ELEMENT noframes %Flow;>
+<!ATTLIST noframes
+  %attrs;
+  >
+
+<!--=================== Document Body ====================================-->
+
+<!ELEMENT body %Flow;>
+<!ATTLIST body
+  %attrs;
+  onload      %Script;       #IMPLIED
+  onunload    %Script;       #IMPLIED
+  background  %URI;          #IMPLIED
+  bgcolor     %Color;        #IMPLIED
+  text        %Color;        #IMPLIED
+  link        %Color;        #IMPLIED
+  vlink       %Color;        #IMPLIED
+  alink       %Color;        #IMPLIED
+  >
+
+<!ELEMENT div %Flow;>  <!-- generic language/style container -->
+<!ATTLIST div
+  %attrs;
+  %TextAlign;
+  >
+
+<!--=================== Paragraphs =======================================-->
+
+<!ELEMENT p %Inline;>
+<!ATTLIST p
+  %attrs;
+  %TextAlign;
+  >
+
+<!--=================== Headings =========================================-->
+
+<!--
+  There are six levels of headings from h1 (the most important)
+  to h6 (the least important).
+-->
+
+<!ELEMENT h1  %Inline;>
+<!ATTLIST h1
+  %attrs;
+  %TextAlign;
+  >
+
+<!ELEMENT h2 %Inline;>
+<!ATTLIST h2
+  %attrs;
+  %TextAlign;
+  >
+
+<!ELEMENT h3 %Inline;>
+<!ATTLIST h3
+  %attrs;
+  %TextAlign;
+  >
+
+<!ELEMENT h4 %Inline;>
+<!ATTLIST h4
+  %attrs;
+  %TextAlign;
+  >
+
+<!ELEMENT h5 %Inline;>
+<!ATTLIST h5
+  %attrs;
+  %TextAlign;
+  >
+
+<!ELEMENT h6 %Inline;>
+<!ATTLIST h6
+  %attrs;
+  %TextAlign;
+  >
+
+<!--=================== Lists ============================================-->
+
+<!-- Unordered list bullet styles -->
+
+<!ENTITY % ULStyle "(disc|square|circle)">
+
+<!-- Unordered list -->
+
+<!ELEMENT ul (li)+>
+<!ATTLIST ul
+  %attrs;
+  type        %ULStyle;     #IMPLIED
+  compact     (compact)     #IMPLIED
+  >
+
+<!-- Ordered list numbering style
+
+    1   arabic numbers      1, 2, 3, ...
+    a   lower alpha         a, b, c, ...
+    A   upper alpha         A, B, C, ...
+    i   lower roman         i, ii, iii, ...
+    I   upper roman         I, II, III, ...
+
+    The style is applied to the sequence number which by default
+    is reset to 1 for the first list item in an ordered list.
+-->
+<!ENTITY % OLStyle "CDATA">
+
+<!-- Ordered (numbered) list -->
+
+<!ELEMENT ol (li)+>
+<!ATTLIST ol
+  %attrs;
+  type        %OLStyle;      #IMPLIED
+  compact     (compact)      #IMPLIED
+  start       %Number;       #IMPLIED
+  >
+
+<!-- single column list (DEPRECATED) --> 
+<!ELEMENT menu (li)+>
+<!ATTLIST menu
+  %attrs;
+  compact     (compact)     #IMPLIED
+  >
+
+<!-- multiple column list (DEPRECATED) --> 
+<!ELEMENT dir (li)+>
+<!ATTLIST dir
+  %attrs;
+  compact     (compact)     #IMPLIED
+  >
+
+<!-- LIStyle is constrained to: "(%ULStyle;|%OLStyle;)" -->
+<!ENTITY % LIStyle "CDATA">
+
+<!-- list item -->
+
+<!ELEMENT li %Flow;>
+<!ATTLIST li
+  %attrs;
+  type        %LIStyle;      #IMPLIED
+  value       %Number;       #IMPLIED
+  >
+
+<!-- definition lists - dt for term, dd for its definition -->
+
+<!ELEMENT dl (dt|dd)+>
+<!ATTLIST dl
+  %attrs;
+  compact     (compact)      #IMPLIED
+  >
+
+<!ELEMENT dt %Inline;>
+<!ATTLIST dt
+  %attrs;
+  >
+
+<!ELEMENT dd %Flow;>
+<!ATTLIST dd
+  %attrs;
+  >
+
+<!--=================== Address ==========================================-->
+
+<!-- information on author -->
+
+<!ELEMENT address %Inline;>
+<!ATTLIST address
+  %attrs;
+  >
+
+<!--=================== Horizontal Rule ==================================-->
+
+<!ELEMENT hr EMPTY>
+<!ATTLIST hr
+  %attrs;
+  align       (left|center|right) #IMPLIED
+  noshade     (noshade)      #IMPLIED
+  size        %Pixels;       #IMPLIED
+  width       %Length;       #IMPLIED
+  >
+
+<!--=================== Preformatted Text ================================-->
+
+<!-- content is %Inline; excluding 
+        "img|object|applet|big|small|sub|sup|font|basefont" -->
+
+<!ELEMENT pre %pre.content;>
+<!ATTLIST pre
+  %attrs;
+  width       %Number;      #IMPLIED
+  xml:space   (preserve)    #FIXED 'preserve'
+  >
+
+<!--=================== Block-like Quotes ================================-->
+
+<!ELEMENT blockquote %Flow;>
+<!ATTLIST blockquote
+  %attrs;
+  cite        %URI;          #IMPLIED
+  >
+
+<!--=================== Text alignment ===================================-->
+
+<!-- center content -->
+<!ELEMENT center %Flow;>
+<!ATTLIST center
+  %attrs;
+  >
+
+<!--=================== Inserted/Deleted Text ============================-->
+
+<!--
+  ins/del are allowed in block and inline content, but its
+  inappropriate to include block content within an ins element
+  occurring in inline content.
+-->
+<!ELEMENT ins %Flow;>
+<!ATTLIST ins
+  %attrs;
+  cite        %URI;          #IMPLIED
+  datetime    %Datetime;     #IMPLIED
+  >
+
+<!ELEMENT del %Flow;>
+<!ATTLIST del
+  %attrs;
+  cite        %URI;          #IMPLIED
+  datetime    %Datetime;     #IMPLIED
+  >
+
+<!--================== The Anchor Element ================================-->
+
+<!-- content is %Inline; except that anchors shouldn't be nested -->
+
+<!ELEMENT a %a.content;>
+<!ATTLIST a
+  %attrs;
+  charset     %Charset;      #IMPLIED
+  type        %ContentType;  #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  href        %URI;          #IMPLIED
+  hreflang    %LanguageCode; #IMPLIED
+  rel         %LinkTypes;    #IMPLIED
+  rev         %LinkTypes;    #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  shape       %Shape;        "rect"
+  coords      %Coords;       #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  target      %FrameTarget;  #IMPLIED
+  >
+
+<!--===================== Inline Elements ================================-->
+
+<!ELEMENT span %Inline;> <!-- generic language/style container -->
+<!ATTLIST span
+  %attrs;
+  >
+
+<!ELEMENT bdo %Inline;>  <!-- I18N BiDi over-ride -->
+<!ATTLIST bdo
+  %coreattrs;
+  %events;
+  lang        %LanguageCode; #IMPLIED
+  xml:lang    %LanguageCode; #IMPLIED
+  dir         (ltr|rtl)      #REQUIRED
+  >
+
+<!ELEMENT br EMPTY>   <!-- forced line break -->
+<!ATTLIST br
+  %coreattrs;
+  clear       (left|all|right|none) "none"
+  >
+
+<!ELEMENT em %Inline;>   <!-- emphasis -->
+<!ATTLIST em %attrs;>
+
+<!ELEMENT strong %Inline;>   <!-- strong emphasis -->
+<!ATTLIST strong %attrs;>
+
+<!ELEMENT dfn %Inline;>   <!-- definitional -->
+<!ATTLIST dfn %attrs;>
+
+<!ELEMENT code %Inline;>   <!-- program code -->
+<!ATTLIST code %attrs;>
+
+<!ELEMENT samp %Inline;>   <!-- sample -->
+<!ATTLIST samp %attrs;>
+
+<!ELEMENT kbd %Inline;>  <!-- something user would type -->
+<!ATTLIST kbd %attrs;>
+
+<!ELEMENT var %Inline;>   <!-- variable -->
+<!ATTLIST var %attrs;>
+
+<!ELEMENT cite %Inline;>   <!-- citation -->
+<!ATTLIST cite %attrs;>
+
+<!ELEMENT abbr %Inline;>   <!-- abbreviation -->
+<!ATTLIST abbr %attrs;>
+
+<!ELEMENT acronym %Inline;>   <!-- acronym -->
+<!ATTLIST acronym %attrs;>
+
+<!ELEMENT q %Inline;>   <!-- inlined quote -->
+<!ATTLIST q
+  %attrs;
+  cite        %URI;          #IMPLIED
+  >
+
+<!ELEMENT sub %Inline;> <!-- subscript -->
+<!ATTLIST sub %attrs;>
+
+<!ELEMENT sup %Inline;> <!-- superscript -->
+<!ATTLIST sup %attrs;>
+
+<!ELEMENT tt %Inline;>   <!-- fixed pitch font -->
+<!ATTLIST tt %attrs;>
+
+<!ELEMENT i %Inline;>   <!-- italic font -->
+<!ATTLIST i %attrs;>
+
+<!ELEMENT b %Inline;>   <!-- bold font -->
+<!ATTLIST b %attrs;>
+
+<!ELEMENT big %Inline;>   <!-- bigger font -->
+<!ATTLIST big %attrs;>
+
+<!ELEMENT small %Inline;>   <!-- smaller font -->
+<!ATTLIST small %attrs;>
+
+<!ELEMENT u %Inline;>   <!-- underline -->
+<!ATTLIST u %attrs;>
+
+<!ELEMENT s %Inline;>   <!-- strike-through -->
+<!ATTLIST s %attrs;>
+
+<!ELEMENT strike %Inline;>   <!-- strike-through -->
+<!ATTLIST strike %attrs;>
+
+<!ELEMENT basefont EMPTY>  <!-- base font size -->
+<!ATTLIST basefont
+  id          ID             #IMPLIED
+  size        CDATA          #REQUIRED
+  color       %Color;        #IMPLIED
+  face        CDATA          #IMPLIED
+  >
+
+<!ELEMENT font %Inline;> <!-- local change to font -->
+<!ATTLIST font
+  %coreattrs;
+  %i18n;
+  size        CDATA          #IMPLIED
+  color       %Color;        #IMPLIED
+  face        CDATA          #IMPLIED
+  >
+
+<!--==================== Object ======================================-->
+<!--
+  object is used to embed objects as part of HTML pages.
+  param elements should precede other content. Parameters
+  can also be expressed as attribute/value pairs on the
+  object element itself when brevity is desired.
+-->
+
+<!ELEMENT object (#PCDATA | param | %block; | form | %inline; | %misc;)*>
+<!ATTLIST object
+  %attrs;
+  declare     (declare)      #IMPLIED
+  classid     %URI;          #IMPLIED
+  codebase    %URI;          #IMPLIED
+  data        %URI;          #IMPLIED
+  type        %ContentType;  #IMPLIED
+  codetype    %ContentType;  #IMPLIED
+  archive     %UriList;      #IMPLIED
+  standby     %Text;         #IMPLIED
+  height      %Length;       #IMPLIED
+  width       %Length;       #IMPLIED
+  usemap      %URI;          #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  align       %ImgAlign;     #IMPLIED
+  border      %Pixels;       #IMPLIED
+  hspace      %Pixels;       #IMPLIED
+  vspace      %Pixels;       #IMPLIED
+  >
+
+<!--
+  param is used to supply a named property value.
+  In XML it would seem natural to follow RDF and support an
+  abbreviated syntax where the param elements are replaced
+  by attribute value pairs on the object start tag.
+-->
+<!ELEMENT param EMPTY>
+<!ATTLIST param
+  id          ID             #IMPLIED
+  name        CDATA          #REQUIRED
+  value       CDATA          #IMPLIED
+  valuetype   (data|ref|object) "data"
+  type        %ContentType;  #IMPLIED
+  >
+
+<!--=================== Java applet ==================================-->
+<!--
+  One of code or object attributes must be present.
+  Place param elements before other content.
+-->
+<!ELEMENT applet (#PCDATA | param | %block; | form | %inline; | %misc;)*>
+<!ATTLIST applet
+  %coreattrs;
+  codebase    %URI;          #IMPLIED
+  archive     CDATA          #IMPLIED
+  code        CDATA          #IMPLIED
+  object      CDATA          #IMPLIED
+  alt         %Text;         #IMPLIED
+  name        NMTOKEN        #IMPLIED
+  width       %Length;       #REQUIRED
+  height      %Length;       #REQUIRED
+  align       %ImgAlign;     #IMPLIED
+  hspace      %Pixels;       #IMPLIED
+  vspace      %Pixels;       #IMPLIED
+  >
+
+<!--=================== Images ===========================================-->
+
+<!--
+   To avoid accessibility problems for people who aren't
+   able to see the image, you should provide a text
+   description using the alt and longdesc attributes.
+   In addition, avoid the use of server-side image maps.
+-->
+
+<!ELEMENT img EMPTY>
+<!ATTLIST img
+  %attrs;
+  src         %URI;          #REQUIRED
+  alt         %Text;         #REQUIRED
+  name        NMTOKEN        #IMPLIED
+  longdesc    %URI;          #IMPLIED
+  height      %Length;       #IMPLIED
+  width       %Length;       #IMPLIED
+  usemap      %URI;          #IMPLIED
+  ismap       (ismap)        #IMPLIED
+  align       %ImgAlign;     #IMPLIED
+  border      %Length;       #IMPLIED
+  hspace      %Pixels;       #IMPLIED
+  vspace      %Pixels;       #IMPLIED
+  >
+
+<!-- usemap points to a map element which may be in this document
+  or an external document, although the latter is not widely supported -->
+
+<!--================== Client-side image maps ============================-->
+
+<!-- These can be placed in the same document or grouped in a
+     separate document although this isn't yet widely supported -->
+
+<!ELEMENT map ((%block; | form | %misc;)+ | area+)>
+<!ATTLIST map
+  %i18n;
+  %events;
+  id          ID             #REQUIRED
+  class       CDATA          #IMPLIED
+  style       %StyleSheet;   #IMPLIED
+  title       %Text;         #IMPLIED
+  name        CDATA          #IMPLIED
+  >
+
+<!ELEMENT area EMPTY>
+<!ATTLIST area
+  %attrs;
+  shape       %Shape;        "rect"
+  coords      %Coords;       #IMPLIED
+  href        %URI;          #IMPLIED
+  nohref      (nohref)       #IMPLIED
+  alt         %Text;         #REQUIRED
+  tabindex    %Number;       #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  target      %FrameTarget;  #IMPLIED
+  >
+
+<!--================ Forms ===============================================-->
+
+<!ELEMENT form %form.content;>   <!-- forms shouldn't be nested -->
+
+<!ATTLIST form
+  %attrs;
+  action      %URI;          #REQUIRED
+  method      (get|post)     "get"
+  name        NMTOKEN        #IMPLIED
+  enctype     %ContentType;  "application/x-www-form-urlencoded"
+  onsubmit    %Script;       #IMPLIED
+  onreset     %Script;       #IMPLIED
+  accept      %ContentTypes; #IMPLIED
+  accept-charset %Charsets;  #IMPLIED
+  target      %FrameTarget;  #IMPLIED
+  >
+
+<!--
+  Each label must not contain more than ONE field
+  Label elements shouldn't be nested.
+-->
+<!ELEMENT label %Inline;>
+<!ATTLIST label
+  %attrs;
+  for         IDREF          #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  >
+
+<!ENTITY % InputType
+  "(text | password | checkbox |
+    radio | submit | reset |
+    file | hidden | image | button)"
+   >
+
+<!-- the name attribute is required for all but submit & reset -->
+
+<!ELEMENT input EMPTY>     <!-- form control -->
+<!ATTLIST input
+  %attrs;
+  type        %InputType;    "text"
+  name        CDATA          #IMPLIED
+  value       CDATA          #IMPLIED
+  checked     (checked)      #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  readonly    (readonly)     #IMPLIED
+  size        CDATA          #IMPLIED
+  maxlength   %Number;       #IMPLIED
+  src         %URI;          #IMPLIED
+  alt         CDATA          #IMPLIED
+  usemap      %URI;          #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  onselect    %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  accept      %ContentTypes; #IMPLIED
+  align       %ImgAlign;     #IMPLIED
+  >
+
+<!ELEMENT select (optgroup|option)+>  <!-- option selector -->
+<!ATTLIST select
+  %attrs;
+  name        CDATA          #IMPLIED
+  size        %Number;       #IMPLIED
+  multiple    (multiple)     #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  >
+
+<!ELEMENT optgroup (option)+>   <!-- option group -->
+<!ATTLIST optgroup
+  %attrs;
+  disabled    (disabled)     #IMPLIED
+  label       %Text;         #REQUIRED
+  >
+
+<!ELEMENT option (#PCDATA)>     <!-- selectable choice -->
+<!ATTLIST option
+  %attrs;
+  selected    (selected)     #IMPLIED
+  disabled    (disabled)     #IMPLIED
+  label       %Text;         #IMPLIED
+  value       CDATA          #IMPLIED
+  >
+
+<!ELEMENT textarea (#PCDATA)>     <!-- multi-line text field -->
+<!ATTLIST textarea
+  %attrs;
+  name        CDATA          #IMPLIED
+  rows        %Number;       #REQUIRED
+  cols        %Number;       #REQUIRED
+  disabled    (disabled)     #IMPLIED
+  readonly    (readonly)     #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  onselect    %Script;       #IMPLIED
+  onchange    %Script;       #IMPLIED
+  >
+
+<!--
+  The fieldset element is used to group form fields.
+  Only one legend element should occur in the content
+  and if present should only be preceded by whitespace.
+-->
+<!ELEMENT fieldset (#PCDATA | legend | %block; | form | %inline; | %misc;)*>
+<!ATTLIST fieldset
+  %attrs;
+  >
+
+<!ENTITY % LAlign "(top|bottom|left|right)">
+
+<!ELEMENT legend %Inline;>     <!-- fieldset label -->
+<!ATTLIST legend
+  %attrs;
+  accesskey   %Character;    #IMPLIED
+  align       %LAlign;       #IMPLIED
+  >
+
+<!--
+ Content is %Flow; excluding a, form, form controls, iframe
+--> 
+<!ELEMENT button %button.content;>  <!-- push button -->
+<!ATTLIST button
+  %attrs;
+  name        CDATA          #IMPLIED
+  value       CDATA          #IMPLIED
+  type        (button|submit|reset) "submit"
+  disabled    (disabled)     #IMPLIED
+  tabindex    %Number;       #IMPLIED
+  accesskey   %Character;    #IMPLIED
+  onfocus     %Script;       #IMPLIED
+  onblur      %Script;       #IMPLIED
+  >
+
+<!-- single-line text input control (DEPRECATED) -->
+<!ELEMENT isindex EMPTY>
+<!ATTLIST isindex
+  %coreattrs;
+  %i18n;
+  prompt      %Text;         #IMPLIED
+  >
+
+<!--======================= Tables =======================================-->
+
+<!-- Derived from IETF HTML table standard, see [RFC1942] -->
+
+<!--
+ The border attribute sets the thickness of the frame around the
+ table. The default units are screen pixels.
+
+ The frame attribute specifies which parts of the frame around
+ the table should be rendered. The values are not the same as
+ CALS to avoid a name clash with the valign attribute.
+-->
+<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)">
+
+<!--
+ The rules attribute defines which rules to draw between cells:
+
+ If rules is absent then assume:
+     "none" if border is absent or border="0" otherwise "all"
+-->
+
+<!ENTITY % TRules "(none | groups | rows | cols | all)">
+  
+<!-- horizontal placement of table relative to document -->
+<!ENTITY % TAlign "(left|center|right)">
+
+<!-- horizontal alignment attributes for cell contents
+
+  char        alignment char, e.g. char=':'
+  charoff     offset for alignment char
+-->
+<!ENTITY % cellhalign
+  "align      (left|center|right|justify|char) #IMPLIED
+   char       %Character;    #IMPLIED
+   charoff    %Length;       #IMPLIED"
+  >
+
+<!-- vertical alignment attributes for cell contents -->
+<!ENTITY % cellvalign
+  "valign     (top|middle|bottom|baseline) #IMPLIED"
+  >
+
+<!ELEMENT table
+     (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>
+<!ELEMENT caption  %Inline;>
+<!ELEMENT thead    (tr)+>
+<!ELEMENT tfoot    (tr)+>
+<!ELEMENT tbody    (tr)+>
+<!ELEMENT colgroup (col)*>
+<!ELEMENT col      EMPTY>
+<!ELEMENT tr       (th|td)+>
+<!ELEMENT th       %Flow;>
+<!ELEMENT td       %Flow;>
+
+<!ATTLIST table
+  %attrs;
+  summary     %Text;         #IMPLIED
+  width       %Length;       #IMPLIED
+  border      %Pixels;       #IMPLIED
+  frame       %TFrame;       #IMPLIED
+  rules       %TRules;       #IMPLIED
+  cellspacing %Length;       #IMPLIED
+  cellpadding %Length;       #IMPLIED
+  align       %TAlign;       #IMPLIED
+  bgcolor     %Color;        #IMPLIED
+  >
+
+<!ENTITY % CAlign "(top|bottom|left|right)">
+
+<!ATTLIST caption
+  %attrs;
+  align       %CAlign;       #IMPLIED
+  >
+
+<!--
+colgroup groups a set of col elements. It allows you to group
+several semantically related columns together.
+-->
+<!ATTLIST colgroup
+  %attrs;
+  span        %Number;       "1"
+  width       %MultiLength;  #IMPLIED
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!--
+ col elements define the alignment properties for cells in
+ one or more columns.
+
+ The width attribute specifies the width of the columns, e.g.
+
+     width=64        width in screen pixels
+     width=0.5*      relative width of 0.5
+
+ The span attribute causes the attributes of one
+ col element to apply to more than one column.
+-->
+<!ATTLIST col
+  %attrs;
+  span        %Number;       "1"
+  width       %MultiLength;  #IMPLIED
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!--
+    Use thead to duplicate headers when breaking table
+    across page boundaries, or for static headers when
+    tbody sections are rendered in scrolling panel.
+
+    Use tfoot to duplicate footers when breaking table
+    across page boundaries, or for static footers when
+    tbody sections are rendered in scrolling panel.
+
+    Use multiple tbody sections when rules are needed
+    between groups of table rows.
+-->
+<!ATTLIST thead
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tfoot
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tbody
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  >
+
+<!ATTLIST tr
+  %attrs;
+  %cellhalign;
+  %cellvalign;
+  bgcolor     %Color;        #IMPLIED
+  >
+
+<!-- Scope is simpler than headers attribute for common tables -->
+<!ENTITY % Scope "(row|col|rowgroup|colgroup)">
+
+<!-- th is for headers, td for data and for cells acting as both -->
+
+<!ATTLIST th
+  %attrs;
+  abbr        %Text;         #IMPLIED
+  axis        CDATA          #IMPLIED
+  headers     IDREFS         #IMPLIED
+  scope       %Scope;        #IMPLIED
+  rowspan     %Number;       "1"
+  colspan     %Number;       "1"
+  %cellhalign;
+  %cellvalign;
+  nowrap      (nowrap)       #IMPLIED
+  bgcolor     %Color;        #IMPLIED
+  width       %Pixels;       #IMPLIED
+  height      %Pixels;       #IMPLIED
+  >
+
+<!ATTLIST td
+  %attrs;
+  abbr        %Text;         #IMPLIED
+  axis        CDATA          #IMPLIED
+  headers     IDREFS         #IMPLIED
+  scope       %Scope;        #IMPLIED
+  rowspan     %Number;       "1"
+  colspan     %Number;       "1"
+  %cellhalign;
+  %cellvalign;
+  nowrap      (nowrap)       #IMPLIED
+  bgcolor     %Color;        #IMPLIED
+  width       %Pixels;       #IMPLIED
+  height      %Pixels;       #IMPLIED
+  >
+
diff --git a/hxt-filter.cabal b/hxt-filter.cabal
new file mode 100644
--- /dev/null
+++ b/hxt-filter.cabal
@@ -0,0 +1,61 @@
+-- arch-tag: Haskell XML Toolbox main description file
+name: hxt-filter
+version: 8.0.0
+license: OtherLicense
+license-file: LICENCE
+maintainer: Uwe Schmidt <uwe@fh-wedel.de>
+stability: stable
+category: XML
+synopsis: A collection of tools for processing XML with Haskell (Filter variant). 
+description:  The Haskell XML Toolbox bases on the ideas of HaXml and HXML. This package is a compatibitlity package for old software working with the filter approach like in HaXml. For new projects it's recomended to use the arrow based library (hxt).
+homepage: http://www.fh-wedel.de/~si/HXmlToolbox/index.html
+copyright: Copyright (c) 2005-8 Uwe Schmidt
+build-type: Simple
+cabal-version: >=1.2
+
+flag splitBase
+  description: Choose the new smaller, split-up base package.
+
+library
+ exposed-modules:
+  Control.Monad.MonadStateIO,
+  Text.XML.HXT.DOM,
+  Text.XML.HXT.DOM.EditFilters,
+  Text.XML.HXT.DOM.Namespace,
+  Text.XML.HXT.DOM.NamespaceFilter,
+  Text.XML.HXT.DOM.XmlState,
+  Text.XML.HXT.DOM.XmlTree,
+  Text.XML.HXT.DOM.XmlTreeFilter,
+  Text.XML.HXT.DOM.XmlTreeFunctions,
+  Text.XML.HXT.Parser,
+  Text.XML.HXT.Parser.DTDProcessing,
+  Text.XML.HXT.Parser.DefaultURI,
+  Text.XML.HXT.Parser.HtmlParser,
+  Text.XML.HXT.Parser.MainFunctions,
+  Text.XML.HXT.Parser.ProtocolHandler,
+  Text.XML.HXT.Parser.ProtocolHandlerFile,
+  Text.XML.HXT.Parser.ProtocolHandlerHttpCurl,
+  Text.XML.HXT.Parser.ProtocolHandlerHttpNative,
+  Text.XML.HXT.Parser.ProtocolHandlerHttpNativeOrCurl,
+  Text.XML.HXT.Parser.XmlInput,
+  Text.XML.HXT.Parser.XmlOutput,
+  Text.XML.HXT.Parser.XmlParser,
+  Text.XML.HXT.Validator.AttributeValueValidation,
+  Text.XML.HXT.Validator.DTDValidation,
+  Text.XML.HXT.Validator.DocTransformation,
+  Text.XML.HXT.Validator.DocValidation,
+  Text.XML.HXT.Validator.IdValidation,
+  Text.XML.HXT.Validator.RE,
+  Text.XML.HXT.Validator.Validation,
+  Text.XML.HXT.Validator.ValidationFilter,
+  Text.XML.HXT.Validator.XmlRE
+ hs-source-dirs: src
+ ghc-options: -Wall
+ extensions: MultiParamTypeClasses DeriveDataTypeable FunctionalDependencies FlexibleInstances
+
+ build-depends: base, haskell98 >= 1, parsec >= 2.1 && < 3, HTTP, HUnit >= 1.2, network >= 2.1, hxt >= 8.0
+ if flag(splitBase)
+   build-depends: base >= 3, containers >= 0.1, directory >= 1, process >= 1
+ else
+   build-depends: base < 3
+
diff --git a/src/Control/Monad/MonadStateIO.hs b/src/Control/Monad/MonadStateIO.hs
new file mode 100644
--- /dev/null
+++ b/src/Control/Monad/MonadStateIO.hs
@@ -0,0 +1,97 @@
+-- |
+-- general usefull state monad for a local state and IO
+--
+-- This module is used for threading a state and io actions
+-- through a computation.
+-- Here the monad is constructed by hand.
+-- It could easily be refactored with the use of the monad transformer library.
+
+
+module Control.Monad.MonadStateIO
+    ( module Control.Monad.MonadStateIO
+    )
+where
+
+import System.IO
+
+-- ------------------------------------------------------------
+
+newtype StateIO state res = STIO { trans :: state -> IO (res, state) }
+
+instance Monad (StateIO state) where
+    return v
+	= STIO ( \s -> return (v, s))
+
+    STIO cmd >>= f
+	= STIO ( \s ->
+		  cmd s >>= \ (rl, s') ->
+		  (trans . f) rl s'
+		)
+
+-- ------------------------------------------------------------
+-- |
+-- lift IO command to 'StateIO'
+
+io :: IO a -> StateIO state a
+io iocmd
+    = STIO ( \s ->
+	     do
+	     a <- iocmd
+	     return (a, s)
+	   )
+
+-- ------------------------------------------------------------
+
+-- |
+-- state inspection command: a \"show\"-like function is applied to the state
+-- and the result is written to stderr.
+
+trcState	:: (state -> String) -> StateIO state ()
+trcState fct
+    = STIO ( \s ->
+	      do
+	      hPutStr stderr $ fct s
+	      return ((), s)
+	    )
+
+-- ------------------------------------------------------------
+--
+-- state access commands
+
+-- |
+-- change the state with a given function and return the new state
+
+changeState	:: (state -> state) -> StateIO state state
+changeState f
+    = STIO ( \s ->
+	     let s' = f s
+	     in
+	     return (s', s')
+	    )
+
+-- |
+-- set the state
+
+setState	:: state -> StateIO state state
+setState s
+    = changeState ( \_ -> s )
+
+-- |
+-- read the state
+
+getState	:: StateIO state state
+getState
+    = changeState id
+
+-- ------------------------------------------------------------
+-- |
+-- run a 'StateIO' command with an initial state
+
+run :: state -> StateIO state res -> IO res
+run initialState (STIO cmd)
+    = do
+      (res, _finalState) <- cmd initialState
+      return res
+
+
+-- ------------------------------------------------------------
diff --git a/src/HXT.hs b/src/HXT.hs
new file mode 100644
--- /dev/null
+++ b/src/HXT.hs
@@ -0,0 +1,5 @@
+module HXT
+where
+
+import Text.XML.HXT.DOM    as DOM ()
+import Text.XML.HXT.Parser as P()
diff --git a/src/Makefile b/src/Makefile
new file mode 100644
--- /dev/null
+++ b/src/Makefile
@@ -0,0 +1,159 @@
+# ------------------------------------------------------------
+#
+# global names and dirs
+
+include ../Version.mk
+
+HXT_HOME	= ..
+HXT_HOME_PATH	= $(shell cd $(HXT_HOME) ; pwd)
+PACKAGE_DIR	= $(HXT_HOME_PATH)/lib/$(SOFTWARE)
+IMPORT_DIR	= imports
+HXT_PACKAGE	= $(SOFTWARE)
+
+# ------------------------------------------------------------
+#
+# commands
+
+GHCFLAGS	= -Wall -O2 -fglasgow-exts -ignore-package $(SOFTWARE)
+GHC             = ghc $(GHCFLAGS)
+GHCVERSION	=  $(shell ghc -v 2>&1 | head -n 2 | tail -n 1 | cut -d " " -f 5 | sed 's|^.*ghc-\([0-9.]*\)/package.conf|\1|')
+
+HXT_PACKAGE_NAME=$(DIST_NAME)
+
+RM              = rm -f
+
+all	:
+
+packagename	:
+		@echo $(HXT_PACKAGE_NAME)
+
+# ------------------------------------------------------------
+#
+# protocol handler config (for removing http or popen)
+
+./Text/XML/HXT/Parser/ProtocolHandler.hs	: ./Text/XML/HXT/ProtocolHandler/ProtocolHandler.hs
+		$(MAKE) -C ./Text/XML/HXT/ProtocolHandler default_http
+
+# ------------------------------------------------------------
+#
+# hxt package variables and rules
+
+HXT_SRC	= \
+	$(wildcard Control/Monad/*.hs) \
+	$(wildcard Text/XML/HXT/*.hs) \
+	$(wildcard Text/XML/HXT/DOM/*.hs) \
+	$(wildcard Text/XML/HXT/Parser/*.hs) \
+	$(wildcard Text/XML/HXT/Validator/*.hs)
+
+HXT_OBJ		= $(HXT_SRC:.hs=.o)
+HXT_HI		= $(HXT_SRC:.hs=.hi)
+
+HXT_DRIVER	= HXT.o
+HXT_LIBA	= libHS$(HXT_PACKAGE).a
+HXT_LIBO	= HS$(HXT_PACKAGE).o
+HXT_LIB		= $(HXT_LIBA) $(HXT_LIBO)
+HXT_REQ_PKG	= -package parsec -package HTTP -package hxt
+
+$(HXT_LIBA)	: $(HXT_SRC)
+		$(GHC) -package-name $(HXT_PACKAGE_NAME) $(HXT_REQ_PKG) --make $(HXT_DRIVER:.o=.hs)
+		ar crs $@ $(HXT_OBJ)
+		@echo "#  please note: !! GNU ar (at least 2.15.90) does not set exit code on missing .o files !!"
+
+$(HXT_LIBO)	: $(HXT_LIBA)
+		ld -r --whole-archive -o $@ $<
+
+# ------------------------------------------------------------
+#
+
+PROFFLAGS	= -Wall -fglasgow-exts $(HXT_REQ_PKG) -prof -auto -ignore-package hxt -ignore-package HTTP -i../profiling
+
+prof		:
+		ghc $(PROFFLAGS) --make $(HXT_DRIVER:.o=.hs)
+
+# ------------------------------------------------------------
+
+LOCAL_INSTALL_DIR	= $(PACKAGE_DIR)
+LOCAL_IMPORT_DIR	= $(PACKAGE_DIR)/$(IMPORT_DIR)
+
+PKG_LIB		= 
+PKG_NAME	=
+PKG_HI		=
+
+install_local_$(HXT_PACKAGE)	: $(HXT_LIB) $(SOFTWARE)-package.conf
+		$(MAKE) install_local_package PKG_NAME=$(HXT_PACKAGE) PKG_LIB="$(HXT_LIB)" PKG_HI="$(HXT_HI)"
+
+install_local_package	: $(PKG_NAME)-package.conf
+		[ -d $(LOCAL_INSTALL_DIR) ] || mkdir -p $(LOCAL_INSTALL_DIR)
+		[ -d $(LOCAL_IMPORT_DIR)  ] || mkdir -p $(LOCAL_IMPORT_DIR)
+		cp -f  $(PKG_LIB)    $(LOCAL_INSTALL_DIR)
+		tar cvf - $(PKG_HI) | ( cd $(LOCAL_IMPORT_DIR) ; tar xf - )
+		[ -f $(LOCAL_INSTALL_DIR)/package.conf ] || echo "[]" > $(LOCAL_INSTALL_DIR)/package.conf
+		cat $(PKG_NAME)-package.conf \
+		| ghc-pkg --update-package --config-file $(LOCAL_INSTALL_DIR)/package.conf
+		@echo use package with: ghc\(i\) ... -package-conf $(LOCAL_INSTALL_DIR)/package.conf -package $(PKG_NAME) ...
+
+GHC_INSTALL	= $(shell ghc -v 2>&1 | head -n 2 | tail -n 1 | cut -d " " -f 5 | sed 's|/package.conf||')
+GHC_INSTALL_DIR	= $(GHC_INSTALL)/$(SOFTWARE)
+GHC_PKG_CONF	=
+
+install		: $(SOFTWARE)-package.conf
+		@[ -d $(GHC_INSTALL)     ] || ( echo "ghc install dir not found"       1>&2 ; exit 1 )
+		@[ -w $(GHC_INSTALL)     ] || ( echo "you need root access for this target" ; exit 1 )
+		[ -d $(GHC_INSTALL_DIR) ] || mkdir -p $(GHC_INSTALL_DIR)
+		cp -r $(LOCAL_INSTALL_DIR)/*.[ao] $(LOCAL_INSTALL_DIR)/imports $(GHC_INSTALL_DIR)
+		$(MAKE) install_packages
+		@echo
+		@echo use package with: ghc\(i\) ... -package $(HXT_PACKAGE) ...
+
+uninstall	:
+		@[ -d $(GHC_INSTALL) ] || ( echo "ghc install dir not found"       1>&2 ; exit 1 )
+		@[ -w $(GHC_INSTALL) ] || ( echo "you need root access for this target" ; exit 1 )
+		$(MAKE) uninstall_packages
+		rm -rf $(GHC_INSTALL_DIR)
+
+# ------------------------------------------------------------
+
+all		:
+		$(MAKE) install_local_$(HXT_PACKAGE)
+
+$(SOFTWARE)-package.conf	: $(SOFTWARE)-package.hs
+		runghc $(SOFTWARE)-package.hs $(VERSION) "ghc" $(LOCAL_INSTALL_DIR) $(HXT_SRC) > $@
+
+../$(SOFTWARE).cabal	: $(SOFTWARE)-package.hs Makefile ../Makefile
+		runghc $(SOFTWARE)-package.hs $(VERSION) "cabal" $(GHC_INSTALL_DIR) $(HXT_SRC) > $@
+
+install_packages	:
+		runghc $(SOFTWARE)-package.hs $(VERSION) "ghc" $(GHC_INSTALL_DIR) $(HXT_SRC) \
+		| ghc-pkg --update-package
+
+uninstall_packages	:
+		ghc-pkg --remove-package $(HXT_PACKAGE) || true
+
+clean_packages	:
+		$(MAKE) clean_$(HXT_PACKAGE)
+
+clean		:
+		$(MAKE) clean_packages
+		$(MAKE) -C ./Text/XML/HXT/ProtocolHandler clean
+		rm -rf $(LOCAL_INSTALL_DIR) $(SOFTWARE)-package.conf ../$(SOFTWARE).cabal
+
+clean_$(HXT_PACKAGE)	:
+		$(RM) $(HXT_DRIVER) $(HXT_DRIVER:.o=.hi) $(HXT_OBJ) $(HXT_HI) $(HXT_LIB)
+
+# ------------------------------------------------------------
+
+DIST		= ../$(DIST_NAME)
+DIST_DIR	= $(DIST)/src
+DIST_FILES	= Makefile \
+		  $(HXT_SRC) $(HXT_DRIVER:.o=.hs) $(SOFTWARE)-package.hs \
+		  ./Text/XML/HXT/ProtocolHandler/ProtocolHandler.hs \
+		  ./Text/XML/HXT/ProtocolHandler/Makefile
+
+
+dist		:
+		[ -d $(DIST_DIR) ] || mkdir -p $(DIST_DIR)
+		tar cvf - $(DIST_FILES) | ( cd $(DIST_DIR) ; tar xf - )
+
+.PHONY		: all install doc clean dist
+
+# eof ------------------------------------------------------------
diff --git a/src/Text/XML/HXT/DOM.hs b/src/Text/XML/HXT/DOM.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/DOM.hs
@@ -0,0 +1,24 @@
+-- |
+-- DOM data types and functions
+--
+-- export of all basic datatypes and functions of the toolbox DOM.
+
+module Text.XML.HXT.DOM
+    ( module Text.XML.HXT.DOM.XmlTree
+    , module Text.XML.HXT.DOM.XmlState
+    , module Text.XML.HXT.DOM.EditFilters
+    , module Text.XML.HXT.DOM.FormatXmlTree
+    , module Text.XML.HXT.DOM.Namespace
+    , module Text.XML.HXT.DOM.XmlOptions
+    )
+where
+
+import Text.XML.HXT.DOM.XmlTree
+import Text.XML.HXT.DOM.XmlState
+import Text.XML.HXT.DOM.EditFilters
+import Text.XML.HXT.DOM.FormatXmlTree
+import Text.XML.HXT.DOM.Namespace
+import Text.XML.HXT.DOM.XmlOptions
+
+-- ------------------------------------------------------------
+
diff --git a/src/Text/XML/HXT/DOM/EditFilters.hs b/src/Text/XML/HXT/DOM/EditFilters.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/DOM/EditFilters.hs
@@ -0,0 +1,567 @@
+-- |
+-- XML editing filters
+
+module Text.XML.HXT.DOM.EditFilters
+    ( canonicalizeTree
+    , canonicalizeAllNodes
+    , canonicalizeForXPath
+
+    , collapseXText
+    , collapseAllXText
+
+    , indentDoc
+
+    , removeWhiteSpace
+    , removeAllWhiteSpace
+    , removeDocWhiteSpace
+
+    , removeComment
+    , removeAllComment
+
+    , transfCdata		, transfAllCdata	-- CDATA to text
+    , transfCdataEscaped	, transfAllCdataEscaped	-- CDATA to text
+    , transfCharRef		, transfAllCharRef	-- &#nnn; to text
+
+    , escapeXmlDoc
+    , escapeXmlText
+    , escapeXmlAttrValue
+
+    , unparseXmlDoc
+    , numberLinesInXmlDoc	, numberLines
+    , treeRepOfXmlDoc
+    , haskellRepOfXmlDoc
+    , addHeadlineToXmlDoc
+    , addXmlPiToDoc
+    )
+where
+
+import Text.XML.HXT.DOM.XmlTree
+
+import Text.XML.HXT.DOM.Unicode
+    ( getOutputEncodingFct)
+
+import Text.XML.HXT.DOM.FormatXmlTree
+    ( formatXmlContents )
+
+import Data.Maybe
+
+-- ------------------------------------------------------------
+
+-- |
+-- remove Comments
+
+removeComment		:: XmlFilter
+removeComment		= none `when` isXCmt
+
+-- |
+-- remove all Comments recursively
+
+removeAllComment	:: XmlFilter
+removeAllComment	= processBottomUp removeComment
+
+-- ------------------------------------------------------------
+
+-- |
+-- simple filter for removing whitespace.
+--
+-- no check on sigificant whitespace is done.
+--
+--
+-- see also : 'removeAllWhiteSpace', 'removeDocWhiteSpace'
+
+removeWhiteSpace	:: XmlFilter
+removeWhiteSpace	= none `when` isWhiteSpace
+
+-- |
+-- simple recursive filter for removing all whitespace.
+--
+-- removes all text nodes in a tree that consist only of whitespace.
+--
+--
+-- see also : 'removeWhiteSpace', 'removeDocWhiteSpace'
+
+removeAllWhiteSpace	:: XmlFilter
+removeAllWhiteSpace	= processBottomUp removeWhiteSpace
+
+-- ------------------------------------------------------------
+-- |
+-- converts CDATA sections in whole document tree into normal text nodes
+
+transfAllCdataEscaped	:: XmlFilter
+transfAllCdataEscaped	= processBottomUp transfCdataEscaped
+
+-- |
+-- converts CDATA section in normal text nodes
+
+transfCdataEscaped	:: XmlFilter
+transfCdataEscaped (NTree (XCdata str) _)
+    = xtext str
+
+transfCdataEscaped n
+    = [n]
+
+
+-- ------------------------------------------------------------
+-- |
+-- converts CDATA sections in whole document tree
+
+transfAllCdata		:: XmlFilter
+transfAllCdata		= processBottomUp transfCdata
+
+-- |
+-- converts CDATA section in normal text sections
+
+transfCdata		:: XmlFilter
+transfCdata (NTree (XCdata str) _)
+    = xtext str
+
+transfCdata n
+    = [n]
+
+
+-- ------------------------------------------------------------
+-- |
+-- converts character references to normal text
+
+transfCharRef		:: XmlFilter
+transfCharRef (NTree (XCharRef i) _)
+    = xtext $ [toEnum i]
+
+transfCharRef n
+    = [n]
+
+-- ------------------------------------------------------------
+-- |
+-- recursively converts all character references to normal text
+
+transfAllCharRef	:: XmlFilter
+transfAllCharRef	= processBottomUp transfCharRef
+
+-- ------------------------------------------------------------
+
+-- |
+-- Applies some "Canonical XML" rules to the nodes of a tree.
+--
+-- The rule differ slightly for canonical XML and XPath in handling of comments
+--
+-- Note: This is not the whole canonicalization as it is specified by the W3C
+-- Recommendation. Adding attribute defaults or sorting attributes in lexicographic
+-- order is done by the @transform@ function of module @Text.XML.HXT.Validator.Validation@.
+-- Replacing entities or line feed normalization is done by the parser.
+--
+--
+-- Not implemented yet:
+--
+--  - Whitespace within start and end tags is normalized
+--
+--  - Special characters in attribute values and character content are replaced by character references
+--
+-- see 'canonicalizeAllNodes' and 'canonicalizeForXPath'
+
+canonicalizeTree	:: XmlFilter -> XmlFilter
+canonicalizeTree toBeRemoved
+    = processChildren (none `when` isXText)
+      .>
+      processBottomUp canonicalize1Node
+      where
+      canonicalize1Node	:: XmlFilter
+      canonicalize1Node
+	  = (deep isXPi `when` isXDTD)		-- remove DTD parts, except PIs
+	    .>
+	    (none `when` toBeRemoved)		-- remove unintersting nodes
+	    .>
+	    ( processAttr ( processChildren transfCharRef
+			    .>
+			    collapseXText
+			  ) `when` isXTag)
+	    .>
+	    transfCdata				-- CDATA -> text
+	    .>
+	    transfCharRef			-- Char refs -> text
+	    .>
+	    collapseXText			-- combine text
+
+
+-- |
+-- canonicalize tree and remove comments and \<?xml ... ?> declarations
+--
+-- see 'canonicalizeTree'
+
+canonicalizeAllNodes	:: XmlFilter
+canonicalizeAllNodes
+    = canonicalizeTree (isXCmt		-- remove comment
+			+++
+			isPi t_xml	-- remove xml declaration
+		       )
+
+-- |
+-- Canonicalize a tree for XPath
+-- Comment nodes are not removed
+--
+-- see 'canonicalizeTree'
+
+canonicalizeForXPath	:: XmlFilter
+canonicalizeForXPath
+    = canonicalizeTree (isPi t_xml)
+
+-- ------------------------------------------------------------
+
+-- |
+-- Collects sequences of child XText nodes into one XText node.
+
+collapseXText		:: XmlFilter
+collapseXText n
+    = replaceChildren (collapseXText' $ getChildren n) n
+    where
+    collapseXText' :: XmlSFilter
+    collapseXText' ((NTree n1 _) : (NTree n2 _) : zs)
+	| isXTextNode n1 && isXTextNode n2
+            = collapseXText' $ (xtext (t1 ++ t2)) ++ zs
+	      where
+	      t1 = textOfXNode n1
+	      t2 = textOfXNode n2
+
+    collapseXText' (x:xs)
+        = x : (collapseXText' xs)
+
+    collapseXText' []
+        = []
+
+
+-- |
+-- Applies collapseXText recursively.
+--
+--
+-- see also : 'collapseXText'
+
+collapseAllXText	:: XmlFilter
+collapseAllXText	= processBottomUp collapseXText
+
+
+-- ------------------------------------------------------------
+--
+
+-- |
+-- filter for indenting a document tree for pretty printing.
+--
+-- the tree is traversed for inserting whitespace for tag indentation.
+--
+-- whitespace is only inserted or changed at places, where it isn't significant,
+-- is's not inserted between tags and text containing non whitespace chars.
+--
+-- whitespace is only inserted or changed at places, where it's not significant.
+-- preserving whitespace may be controlled in a document tree
+-- by a tag attribute @xml:space@
+--
+-- allowed values for this attribute are @default | preserve@.
+--
+-- input is a complete document tree.
+-- result the semantically equivalent formatted tree.
+--
+--
+-- see also : 'removeDocWhiteSpace'
+
+indentDoc	:: XmlFilter
+indentDoc 
+    = modifyChildren (indentRootChildren $$)
+      `when`
+      isRoot
+      where
+      indentRootChildren	:: XmlFilter
+      indentRootChildren
+	  = insertNL `o` indentChild `o` removeText
+	    where
+	    removeText
+		= none `when` isXText
+	    insertNL
+		= this +++ txt "\n"
+	    indentChild
+		= modifyChildren (indentTrees (insertIndentation 2) False 1)
+		  `whenNot`
+		  isXDTD		-- DTD elements are not indented
+
+-- |
+-- filter for removing all not significant whitespace.
+--
+-- the tree traversed for removing whitespace between tags,
+-- that was inserted for indentation and readability.
+-- whitespace is only removed at places, where it's not significat
+-- preserving whitespace may be controlled in a document tree
+-- by a tag attribute @xml:space@
+--
+-- allowed values for this attribute are @default | preserve@
+--
+-- input is root node of the document to be cleaned up
+-- output the semantically equivalent simplified tree
+--
+--
+-- see also : 'indentDoc', 'removeAllWhiteSpace'
+
+removeDocWhiteSpace	:: XmlFilter
+removeDocWhiteSpace
+    =  processChildren processRootElement
+      `when`
+      isRoot
+      where
+      processRootElement	:: XmlFilter
+      processRootElement
+	  = removeText .> processChild
+	    where
+	    removeText
+		= none `when` isWhiteSpace
+	    processChild
+		= choice [ isXDTD
+			   :-> removeAllWhiteSpace			-- whitespace in DTD is redundant
+			 , this
+			   :-> modifyChildren				-- same strategie as for indentation
+			         (indentTrees insertNothing False 1)
+			 ]
+
+indentTrees	:: (Int -> XmlFilter) -> Bool -> Int -> XmlTrees -> XmlTrees
+indentTrees _ _ _ []
+    = []
+indentTrees indentFilter preserveSpace level ts
+    = (lsf $$ ls) ++ indentRest rs
+      where
+      (ls, rs)
+	  = break (satisfies isXTag) ts
+
+      isSignificant	:: Bool
+      isSignificant
+	  = preserveSpace
+	    ||
+	    any (satisfies isSignificantPart) ls
+
+      isSignificantPart	:: XmlFilter
+      isSignificantPart
+	  = cat [ isXText `guards` neg isWhiteSpace
+		, isXCdata
+		, isXCharRef
+		, isXEntityRef
+		]
+
+      lsf	:: XmlFilter
+      lsf
+	  | isSignificant
+	      = this
+	  | otherwise
+	      = (none `when` isWhiteSpace)
+                .>
+                (indentFilter level +++ this)
+
+      indentRest	:: XmlSFilter
+
+      indentRest []
+	  | isSignificant
+	      = []
+	  | otherwise
+	      = indentFilter (level - 1) (mkXTextTree "")
+
+      indentRest (t':ts')
+	      = ( (modifyChildren indentChildren .> lsf)
+		  `when`
+                  isXTag
+		  $ t'
+		)
+                ++
+		( if null ts'
+		  then indentRest ts'
+		  else indentTrees indentFilter preserveSpace level ts'
+		)
+		where
+		xmlSpaceAttrName  = "xml:space"
+		xmlSpaceAttrValue = valueOf xmlSpaceAttrName t'
+		preserveSpace'
+		    = fromMaybe preserveSpace
+		      .
+		      lookup xmlSpaceAttrValue
+                      $ [ ("preserve", True)
+			, ("default",  False)
+			]
+		indentChildren
+		    | all (satisfies isWhiteSpace) $ getChildren t'
+			= (none $$)
+		    | otherwise
+			= indentTrees indentFilter preserveSpace' (level + 1)
+
+-- filter for indenting tags
+
+insertIndentation	:: Int -> Int -> XmlFilter
+insertIndentation indentWidth level
+    = txt ('\n' : replicate (level * indentWidth) ' ')
+
+-- filter for removing all whitespace
+
+insertNothing		:: Int -> XmlFilter
+insertNothing _		= none
+
+-- ------------------------------------------------------------
+
+-- |
+-- escape XmlText,
+-- transform all special XML chars into CharRefs
+
+escapeString	:: (Char -> Bool) -> String -> XmlTrees
+escapeString _isEsc []
+    = []
+escapeString isEsc (c:s1)
+    | isEsc c
+	= mkXCharRefTree (fromEnum c) : escapeString isEsc s1
+escapeString isEsc s
+    = mkXTextTree s1 : escapeString isEsc s2
+      where
+      (s1, s2) = break isEsc s
+
+escapeText		:: (Char -> Bool) -> XmlFilter
+escapeText isEsc (NTree n _)
+    | isXTextNode n
+	= escapeString isEsc (textOfXNode n)
+
+escapeText isEsc (NTree (XCmt c) _)
+    = xcmt (xshow . escapeString isEsc $ c)
+
+escapeText _ t
+    = [t]
+
+-- |
+-- convert the special XML chars in a text or comment node
+-- into character references
+--
+-- see also 'escapeXmlDoc'
+ 
+escapeXmlText		:: XmlFilter
+escapeXmlText		= escapeText (`elem` "<&")	-- no escape for ", ' and > required: XML standard 2.4
+
+-- |
+-- convert the special XML chars in an attribute value into
+-- charachter references. Not only the XML specials but also \\n, \\r and \\t are converted
+--
+-- see also: 'escapeXmlDoc', 'escapeXmlText'
+
+escapeXmlAttrValue	:: XmlFilter
+escapeXmlAttrValue	= escapeText (`elem` "<>\"\'&\n\r\t")
+
+-- |
+-- convert the special XML chars \", \<, \>, & and \' in a document to char references,
+-- attribute values are converted with 'escapeXmlAttrValue'
+--
+-- see also: 'escapeXmlText', 'escapeXmlAttrValue'
+
+escapeXmlDoc		:: XmlFilter
+escapeXmlDoc
+    = choice [ isXTag  :-> (processChildren (escapeXmlDoc)
+			    .>
+			    processAttr escVal
+			   )
+	     , isXText :-> escapeXmlText
+	     -- , isXCmt  :-> escapeXmlText -- no escape in comments reqired: XML standard 2.4
+	     , isXDTD  :-> processTopDown escDTD
+	     , this    :-> this
+	     ]
+      where
+      escVal   = processChildren escapeXmlAttrValue
+      escDTD   = escVal `when` (isEntity +++ isParameterEntity)
+
+-- ------------------------------------------------------------
+
+-- |
+-- convert a document tree into an output string representation
+-- with respect to the output encoding.
+--
+-- The children of the document root are stubstituted by
+-- a single text node for the text representation of the document.
+--
+-- Encoding of the document is performed with respect
+-- to the @output-encoding@ attribute in the root node, or if not present,
+-- of the @encoding@ attribute for the original input encoding.
+-- If the encoding is not specified or not supported, UTF-8 is taken.
+
+unparseXmlDoc	:: XmlFilter
+unparseXmlDoc n
+    = modifyChildren ((modifyText encFct $$) . xmlTreesToText) n
+    where
+    encFct = fromMaybe id (getOutputEncodingFct (encSpec n))
+
+encSpec :: XmlTree -> String
+encSpec n
+    = head . filter (not . null)
+      $ [ valueOf a_output_encoding n
+	, valueOf a_encoding n
+	, utf8
+	]
+
+-- ------------------------------------------------------------
+--
+-- add or modify a XML directive for a document
+-- for specifying the encoding scheme
+
+addXmlPiToDoc		:: XmlFilter
+addXmlPiToDoc n
+    = ( modifyChildren addX				-- add <?xml ...>, if neccessary
+	`whenNot`
+	(getChildren .> isPi t_xml)
+      )
+      .>
+      processChildren ( addAttr a_encoding enc		-- set or replace encoding="..."
+			`when`
+			isPi t_xml
+		      )
+      $ n
+    where
+    enc = encSpec n
+    addX cs = mkXmlDeclTree (xattr a_version "1.0") : xtext "\n" ++ cs
+
+-- ------------------------------------------------------------
+
+-- |
+-- convert a document into a text and add line numbers to the text representation.
+-- 
+-- Result is a root node with a single text node as child.
+-- Useful for debugging and trace output.
+-- see also : 'haskellRepOfXmlDoc', 'treeRepOfXmlDoc'
+
+numberLinesInXmlDoc	:: XmlFilter
+numberLinesInXmlDoc
+    = modifyChildren ((modifyText numberLines $$) . xmlTreesToText)
+
+numberLines	:: String -> String
+numberLines str
+    = concat $
+      zipWith (\ n l -> lineNr n ++ l ++ "\n") [1..] (lines str)
+      where
+      lineNr	:: Int -> String
+      lineNr n	= (reverse (take 6(reverse (show n) ++ replicate 6 ' '))) ++ "  "
+
+-- ------------------------------------------------------------
+
+-- |
+-- convert a document into a text representation in tree form.
+--
+-- Useful for debugging and trace output.
+-- see also : 'haskellRepOfXmlDoc', 'numberLinesInXmlDoc'
+
+treeRepOfXmlDoc		:: XmlFilter
+treeRepOfXmlDoc
+    = rootTag [getAttrl] [formatXmlContents]
+
+-- |
+-- convert a document into a Haskell representation (with show).
+--
+-- Useful for debugging and trace output.
+-- see also : 'treeRepOfXmlDoc', 'numberLinesInXmlDoc'
+
+haskellRepOfXmlDoc	:: XmlFilter
+haskellRepOfXmlDoc n
+    = rootTag [getAttrl] [txt $ show n] n
+
+-- ------------------------------------------------------------
+
+addHeadlineToXmlDoc	:: XmlFilter
+addHeadlineToXmlDoc n
+    = replaceChildren (xtext title ++ getChildren n ++ xtext "\n") n
+      where
+      headline  = "content of: " ++ valueOf a_source n
+      underline = map (\_ -> '=') headline
+      title     = "\n" ++ headline ++ "\n" ++ underline ++ "\n\n"
+
+-- ------------------------------------------------------------
diff --git a/src/Text/XML/HXT/DOM/Namespace.hs b/src/Text/XML/HXT/DOM/Namespace.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/DOM/Namespace.hs
@@ -0,0 +1,52 @@
+-- |
+-- main namespace filter for propagation, checking, tracing and error handling
+
+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)
+	  
+-- -----------------------------------------------------------------------------
diff --git a/src/Text/XML/HXT/DOM/NamespaceFilter.hs b/src/Text/XML/HXT/DOM/NamespaceFilter.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/DOM/NamespaceFilter.hs
@@ -0,0 +1,224 @@
+-- |
+-- Namespace filter
+--
+-- Namespaces are processed with two main filter, 'propagateNamespaces'
+-- and 'validateNamespaces'.
+--
+-- 'propagateNamespaces' takes a XML tree and
+-- attaches extra namespace info at every tag name and attribute name.
+-- So after processing a tree with 'propagateNamespaces', the access functions
+-- "namespaceOf" and "universalNameOf" deliver the associated namespace (or \"\")
+-- for tag names and attribute names.
+--
+-- 'validateNamespaces' checks whether names are wellformed related to the XML namespace definition.
+-- whether a legal namespace is declared for all prefixes, and whether attribute names are unique
+-- related to universal names.
+
+module Text.XML.HXT.DOM.NamespaceFilter
+    ( module Text.XML.HXT.DOM.NamespaceFilter
+    , module Text.XML.HXT.DOM.NamespacePredicates
+    )
+where
+
+import Text.XML.HXT.DOM.XmlTree
+
+import Text.XML.HXT.DOM.NamespacePredicates
+
+import Text.XML.HXT.DOM.Util
+    ( doubles )
+
+-- -----------------------------------------------------------------------------
+--
+
+-- |
+-- Type for the namespace association list, used when propagating namespaces by
+-- modifying the 'QName' values in a tree
+
+type NamespaceTable = NsEnv
+
+-- -----------------------------------------------------------------------------
+
+-- |
+-- propagate all namespace declarations \"xmlns:ns=...\" to all
+-- tag and attribute nodes of a document.
+--
+-- This filter does not check for illegal use of namespaces.
+-- The real work is done by 'propagateNamespaceEnv'.
+--
+-- The filter may be applied repeatedly if neccessary.
+
+propagateNamespaces	:: XmlFilter
+propagateNamespaces	= propagateNamespaceEnv [ (a_xml, xmlNamespace), (a_xmlns, xmlnsNamespace) ]
+
+-- |
+-- attaches the namespace info given by the namespace table
+-- to a tag node and its attributes and children.
+
+propagateNamespaceEnv	:: NamespaceTable -> XmlFilter
+propagateNamespaceEnv env n
+    = ( ( processAttr (attachNamespaceUrisToAttr newEnv)
+	  .>
+	  processChildren (propagateNamespaceEnv newEnv)
+	  .>
+	  modifyQName (setNamespace newEnv)
+	)
+	`when`
+	isXTag
+      )
+      $ n
+    where
+    nsAttrs	= getAttrl				-- scan all attributes
+		  .>
+		  isOfAttr ( (\ (px, lp)
+			     -> (px == a_xmlns		-- check for prefix or whole name is "xmlns"
+				 &&
+				 lp /= ":"		-- check for none empty local part, "xmlns:" is not a legal name
+				)
+			     )
+			     . span (/= ':')		-- break the name into a pair ("prefix", ":localPart")
+			     . qualifiedName		-- select attribute name
+			   )
+		  $ n
+    nsDecl	= zip (map (drop 1			-- drop the ":", empty local part represents default name space
+			    . snd			-- take the local part with leading ":"
+			    . span (/= ':')		-- break it like above
+			    . nameOf			-- select attribute name
+			   ) nsAttrs)
+		      (map (xshow
+			    .
+			    getChildren
+			   ) nsAttrs)
+    newEnv	= addEntries nsDecl env
+
+    attachNamespaceUrisToAttr	:: NamespaceTable -> XmlFilter
+    attachNamespaceUrisToAttr attrEnv
+	= ( isOfAttr ( (\ (px, lp)
+			-> ( (not . null . drop 1) lp	-- prefix and local part must not be empty
+			     &&
+			     (not . null) px
+			   )
+		       )
+		       . span (/= ':')			-- break the name into a pair ("prefix", ":localPart")
+		       . qualifiedName			-- select attribute name
+		     )
+	    `guards`
+	    modifyQName (setNamespace attrEnv)
+	  )
+          `orElse`
+	  ( modifyQName (const xmlnsQN)			-- "xmlns" ist the only attr name without prefix but with an associated namespace URI
+	    `when`
+	    isAttr a_xmlns
+	  )
+
+-- -----------------------------------------------------------------------------
+
+-- |
+-- validate the namespace constraints in a whole tree.
+-- result is the list of errors concerning namespaces.
+-- Work is done by applying 'validate1Namespaces' to all nodes.
+-- Predicates 'isWellformedQName', 'isWellformedQualifiedName', 'isDeclaredNamespace'
+-- and 'isWellformedNSDecl' are applied to the appropriate tags and attributes.
+
+validateNamespaces	:: XmlFilter
+validateNamespaces
+    = choice [ isRoot
+               :-> getChildren .> validateNamespaces		-- root is correct by definition
+	     , this
+	       :-> multi validate1Namespaces
+	     ]
+
+-- |
+-- a single node for namespace constrains.
+
+validate1Namespaces	:: XmlFilter
+validate1Namespaces
+    = choice [ isXTag
+	       :->
+	       cat [ isOfTag ( not . isWellformedQName )
+		     `guards`
+		     (\ n -> err ("tag name " ++ show (nameOf n) ++ " is not a wellformed qualified name") n )
+
+		   , isOfTag ( not . isDeclaredNamespace )
+		     `guards`
+		     (\ n -> err ("namespace for prefix in tag name " ++ show (nameOf n) ++ " is undefined") n )
+
+                   , (\ n -> ( let
+		               dbls = doubles ((map universalNameOf . getAttrl) n)
+		               in
+		               if null dbls
+		               then none
+                               else err ( "multiple occurences of universal names for attributes of tag "
+					  ++ show (nameOf n)
+					  ++ " : " ++ foldr1 (\ x y -> x ++ ", " ++ y) (map show dbls)
+					)
+			     ) $ n
+		     )
+
+		   , getAttrl .> validate1Namespaces
+		   ]
+
+	     , isXAttr
+	       :->
+	       cat [ isOfAttr ( not . isWellformedQName )
+		     `guards`
+		     (\ n -> err ("attribute name " ++ show (nameOf n) ++ " is not a wellformed qualified name") n )
+
+		   , isOfAttr ( not . isDeclaredNamespace )
+	             `guards`
+		     (\ n -> err ("namespace for prefix in attribute name " ++ show (nameOf n) ++ " is undefined") n )
+
+                   , ( hasPrefix a_xmlns .> neg (xmlTreesToText . getChildren) )
+		     `guards`
+		     (\ n -> err ("namespace value of namespace declaration for " ++ show (nameOf n) ++ " has no value") n )
+
+                   , isOfAttr ( not . isWellformedNSDecl )
+		     `guards`
+		     (\ n -> err ("illegal namespace declaration with reserved prefix " ++ show (localPartOf n) ++ " starting with \"xml\"") n )
+	           ]
+
+             , isXDTD
+	       :->
+	       cat [ ( ( isDoctype +++ isAttlist +++ isElement +++ isDTDName )
+		       .>
+		       isOf ( not . isWellformedQualifiedName . valueOfDTD a_name )
+		     )
+		     `guards`
+                     (\ n -> err ("a DTD part contains a not wellformed qualified Name: " ++ show (valueOfDTD a_name n)) n )
+
+		   , ( isAttlist
+		       .>
+		       isOf ( not . isWellformedQualifiedName . valueOfDTD a_value )
+		     )
+		     `guards`
+                     (\ n -> err ("an ATTLIST declaration contains as attribute name a not wellformed qualified Name: " ++ show (valueOfDTD a_value n)) n )
+
+                   , ( ( isEntity +++ isParameterEntity +++ isNotation )
+		       .>
+		       isOf ( not . isNCName . valueOfDTD a_name )
+		     )
+                     `guards`
+                     (\ n -> err ("an entity or notation declaration contains a not wellformed NCName: " ++ show (valueOfDTD a_name n)) n )
+		   ]
+             , isXPi
+	       :->
+	       ( isOf ( not . isNCName . nameOf )
+	         `guards`
+                 (\ n -> err ("a PI contains a not wellformed NCName: " ++ show (nameOf n)) n )
+	       )
+	     ]
+
+-- -----------------------------------------------------------------------------
+
+isNamespaceDecl	:: XmlFilter
+isNamespaceDecl
+    = isOfAttr xmlnsName
+      where
+      xmlnsName	:: AttrName -> Bool
+      xmlnsName a
+	  = px == a_xmlns
+	    &&
+	    ( null ln || head ln == ':')
+	  where
+	  (px, ln) = splitAt 5 . qualifiedName $ a
+
+-- -----------------------------------------------------------------------------
diff --git a/src/Text/XML/HXT/DOM/XmlState.hs b/src/Text/XML/HXT/DOM/XmlState.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/DOM/XmlState.hs
@@ -0,0 +1,687 @@
+-- |
+-- This module provides a Monad for an internal state and IO commands.
+-- The state consists of two parts, the user state and the system state
+-- user state ist a type parameter, the system state is a list
+-- name-value pair. If the user state is not needed, the type parameter
+-- can be instantiated with @()@.
+--
+-- Furthermore there are types for Xml filter working on this monad
+-- and functions for manipulating the state components
+-- and for lifting i\/o commands and XmlFilter to monad filters.
+--
+-- Error reporting functions are also located in this module.
+
+module Text.XML.HXT.DOM.XmlState
+    ( module Text.XML.HXT.DOM.XmlState
+    )
+where
+
+import Text.XML.HXT.DOM.XmlTree
+
+import qualified Control.Monad.MonadStateIO as MonadStateIO
+
+import System.IO
+import Data.Maybe
+
+-- ------------------------------------------------------------
+
+-- |
+-- The internal system state consists of a list of name-value pairs
+-- of type @(String, XmlTrees)@, so arbitrary lists of trees can be stored.
+-- For options, often only strings are used as values, so a set of access
+-- functions with string values is available
+-- The error handling method can be controlled by an error handler filter,
+-- the default filter issues the errors on stderr
+
+data SysState			= SysState { sysStateAttrs		:: ! SysStateAttrs
+					   , sysStateErrorHandler	:: ! (XmlStateFilter ())
+					   }
+
+type SysStateAttrs		= AssocList String XmlTrees
+
+-- |
+-- The State has a system and a user part
+-- the user state is a type parameter
+
+data XmlState state		= XmlState { sysState	:: ! SysState
+					   , userState	:: ! state
+					   }
+
+-- |
+-- The monad type for commands. It is an instance of "StateIO" from the
+-- general module "Control.Monad.MonadStateIO".
+
+type XState state res		= MonadStateIO.StateIO (XmlState state) res
+
+-- |
+-- The "XmlFilter" type for filters working on a state
+
+type XmlStateFilter state	= XmlTree -> XState state XmlTrees
+
+-- ------------------------------------------------------------
+--
+-- user defined state
+-- access functions
+
+-- |
+-- change the user state
+--
+--    * 1.parameter fct :  the user state change function
+--
+--    - returns : the new state
+
+changeState	:: (state -> state) -> XState state state
+changeState f
+    = do
+      ns <- MonadStateIO.changeState f'
+      return (userState ns)
+      where
+      f' s = s { userState = f (userState s) }
+
+-- |
+-- set the user state.
+--
+--    * 1.parameter s :  the new state
+--
+--    - returns : the new state
+
+setState	:: state -> XState state state
+setState s
+    = changeState ( \_ -> s )
+
+-- |
+-- read the user state
+--
+--    - returns : the current state
+
+getState	:: XState state state
+getState
+    = changeState id
+
+-- ------------------------------------------------------------
+
+-- |
+-- change the system part of the state.
+--
+-- see also : 'changeState'
+
+changeSysState	:: (SysState -> SysState) -> XState state SysState
+changeSysState f
+    = do
+      ns <- MonadStateIO.changeState f'
+      return (sysState ns)
+      where
+      f' s = s { sysState = f (sysState s) }
+
+-- |
+-- set the system part of the state.
+--
+-- see also : 'setState'
+
+setSysState		:: SysState -> XState state SysState
+setSysState s
+    = changeSysState ( \_ -> s )
+
+-- |
+-- read the system part of the state.
+--
+-- see also : 'getState'
+
+getSysState		:: XState state SysState
+getSysState
+    = changeSysState id
+
+-- |
+-- the initial system state
+--
+-- an empty list of attribute value pairs
+
+initialSysState		:: SysState
+initialSysState
+    = SysState { sysStateAttrs        = []
+	       , sysStateErrorHandler = errorMsgToStderr
+	       }
+
+-- |
+-- change the attributes in the system state
+
+changeSysStateAttrs		:: (SysStateAttrs -> SysStateAttrs) -> (SysState -> SysState)
+changeSysStateAttrs cf sstate
+    = sstate { sysStateAttrs = cf (sysStateAttrs sstate) }
+
+
+-- |
+-- set the error message handler
+
+setSysErrorHandler		:: XmlStateFilter () -> XState state ()
+setSysErrorHandler ehf
+    = do
+      changeSysState (\ s -> s { sysStateErrorHandler = ehf })
+      return ()
+
+-- |
+-- get the error handler
+
+getSysErrorHandler		:: XState state (XmlStateFilter ())
+getSysErrorHandler
+    = do
+      s <- getSysState
+      return (sysStateErrorHandler s)
+
+-- ------------------------------------------------------------
+
+-- |
+-- set or change a single system parameter.
+--
+--    * 1.parameter name :  the name of the parameter
+--
+--    - 2.parameter value :  the list of associated trees
+--
+--    - returns : nothing
+--
+-- see also : 'setSysParam', 'setSysParamInt'
+
+setSysParamTree		:: String -> XmlTrees -> XState state ()
+setSysParamTree name val
+    = do
+      changeSysState (changeSysStateAttrs (addEntry name val))
+      return ()
+
+-- |
+-- set or change a single system parameter of type string.
+--
+--    * 1.parameter name :  the name of the parameter
+--
+--    - 2.parameter value :  the (new) string value
+--
+--    - returns : nothing
+--
+-- see also : 'setSysParamTree', setSysParamInt
+
+setSysParam		:: String -> String -> XState state ()
+setSysParam name val
+    = setSysParamTree name (xtext val)
+
+-- |
+-- set or change a single integer type system parameter
+--
+-- see also : 'setSysParam'
+
+setSysParamInt		:: String -> Int -> XState state ()
+setSysParamInt name val	= setSysParam name (show val)
+
+-- |
+-- add (or change) all attributes of the document root to the system state
+--     - returns : this
+
+setSystemParams	:: XmlStateFilter state
+setSystemParams t
+    = do
+      changeSysState (changeSysStateAttrs (addEntries (toTreel . getAttrl $ t)))
+      thisM t
+
+-- ------------------------------------------------------------
+
+-- |
+-- read a system parameter
+--
+--    * 1.parameter name :  the name of the parameter
+--
+--    - returns : the list of tres associated with the key, or the empty list for unknown parameters
+
+getSysParamTree		:: String -> XState state XmlTrees
+getSysParamTree name
+    = do
+      s <- getSysState
+      return (lookup1 name (sysStateAttrs s))
+
+-- |
+-- read a system string parameter
+--
+--    * 1.parameter name :  the name of the parameter
+--
+--    - returns : the value, or the empty string for unknown parameters
+
+getSysParam		:: String -> XState state String
+getSysParam name
+    = do
+      ts <- getSysParamTree name
+      return (xshow ts)
+
+-- |
+-- read a system parameter or return a default value
+--
+--    * 1.parameter name :  the name of the parameter
+--
+--    - 2.parameter default :  the default value
+--
+--    - returns : the value if found, else the default
+
+getSysParamWithDefault	:: String -> String -> XState state String
+getSysParamWithDefault name def
+    = do
+      val <- getSysParam name
+      return ( if null val
+	       then def
+	       else val
+	     )
+
+-- |
+-- read an integer system parameter
+--
+--    * 1.parameter name : 
+--
+--    - 2.parameter default : 
+--
+-- see also : 'getSysParamWithDefault'
+
+getSysParamInt	:: String -> Int -> XState state Int
+getSysParamInt var def
+    = do
+      val <- getSysParamWithDefault var (show def)
+      return (read val)
+
+-- ------------------------------------------------------------
+
+-- |
+-- exec a XState command with initial state.
+--
+--    * 1.parameter initalState :  the inital user state
+--
+--    - 2.parameter cmd :  the command
+--
+--    - returns : the i\/o command with result and user state
+
+run0		:: XmlState state -> XState state res -> IO (res, XmlState state)
+run0 initialState (MonadStateIO.STIO cmd)
+    = do
+      (res, finalState) <- cmd initialState
+      return (res, finalState)
+
+-- |
+-- exec a XState command with initial user state.
+-- ignore final user state.
+-- like run0, but ignore the resulting user state
+
+run		:: state -> XState state res -> IO res
+run initialUserState cmd
+    = do
+      (res, _finalState) <- run0 (XmlState initialSysState initialUserState) cmd
+      return res
+
+-- |
+-- exec a XState command in th IO monad.
+-- like run with the empty state ().
+
+run'		:: XState () res -> IO res
+run'		= run ()
+
+-- ------------------------------------------------------------
+
+-- |
+-- run a command in a new user state.
+-- chain the system state part,
+-- init new system state with the current one, run the command and
+-- update the old system state with the resulting new system state
+--
+--    * 1.parameter initialUserState :  the initial user state
+--
+--    - 2.parameter cmd :  the command
+--
+--    - returns : the result of executing cmd and the final state
+
+chain'		:: state1 -> XState state1 res -> XState state0 (res, state1)
+chain' initialUserState1 cmd1
+    = do
+      sysState0 <- getSysState
+      (res, finalState1) <- io $ run0 (XmlState sysState0 initialUserState1) cmd1
+      setSysState (sysState finalState1)
+      return (res, (userState finalState1))
+
+-- |
+-- like chain' but forget the final user state
+--
+--    * 1.parameter initialUserState :  the initial user state
+--
+--    - 2.parameter cmd :  the command
+--
+--    - returns : only the result of executing cmd
+
+chain		:: state1 -> XState state1 res -> XState state0 res
+chain initialUserState1 cmd1
+    = do
+      (res, _) <- chain' initialUserState1 cmd1
+      return res
+
+-- ------------------------------------------------------------
+--
+-- lift functions
+
+-- |
+-- lift a XmlFilter to a XmlStateFilter filter
+-- issue all error nodes as error messages
+-- and remove the error nodes from the result
+--
+--    * 1.parameter f :  the filter
+--
+--    - returns : the filter running in the state monad
+--
+--		  all errors are filtered from the result and issued on stderr
+
+liftF		:: XmlFilter -> XmlStateFilter state
+liftF f		= liftMf f .>> issueError
+
+-- |
+-- lift an I\/O command
+--
+--    * 1.parameter cmd :  the i\/o command
+--
+--    - returns : the i\/o command lifted to the XML state monad
+
+io		:: IO a -> XState state a
+io		= MonadStateIO.io
+
+-- ------------------------------------------------------------
+--
+
+-- |
+-- set the trace level.
+--
+-- convention:
+--
+-- 0: no trace output (default)
+--
+-- 1: trace important computation steps, e.g. accessing a document
+--
+-- 2: trace small computation steps
+--
+-- 3: output an intermediate result XmlTree in XML source format
+--
+-- 4: output an intermediate result XmlTree in tree representation
+--
+--    * 1.parameter level :  the trace level
+--
+--    - returns : nothing
+
+setTraceLevel	:: Int -> XState state ()
+setTraceLevel l	= setSysParamInt a_trace l
+
+-- |
+-- get the current trace level.
+--
+--    - returns : the current trace level
+
+getTraceLevel	:: XState state Int
+getTraceLevel	= getSysParamInt a_trace 0
+
+-- |
+-- trace output for arbitray commands.
+--
+--    * 1.parameter level :  the trace level,
+--			  for which the command will be execuded
+--			  if level \<= current trace level
+--
+--    - 2.parameter cmd :  the command to be executed
+--
+--    - returns : nothing
+
+traceCmd	:: Int -> XState state a -> XState state ()
+traceCmd level cmd
+    = do
+      trcLevel <- getTraceLevel
+      if level <= trcLevel
+        then do
+	     _ <- cmd
+	     return ()
+        else return ()
+
+-- |
+-- trace output function for simple text.
+--
+--    * 1.parameter level :  like in traceCmd
+--
+--    - 2.parameter str :  the test
+--
+--    - returns : nothing
+
+trace		:: Int -> String -> XState state ()
+trace level str
+    = traceCmd level
+      $ do
+	io $ hPutStrLn stderr ("-- (" ++ show level ++ ") " ++ str)
+
+-- |
+-- trace output of the user part of the program state.
+--
+--    * 1.parameter level :  like in traceCmd
+--
+--    - 2.parameter showFct :  the toString function
+--
+--    - returns : nothing
+
+traceState	:: Int -> (state -> String) -> XState state ()
+traceState level fct
+    = traceCmd level
+      $ do
+	s <- getState
+	io $ hPutStrLn stderr (fct s)
+
+-- ------------------------------------------------------------
+--
+-- error functions
+
+-- |
+-- filter to reset the state attribute 'a_status'
+--    - returns : this
+
+clearStatus	:: XmlStateFilter state
+clearStatus t
+    = do
+      setSysParamInt a_status c_ok
+      thisM t
+
+-- |
+-- report an error message.
+--
+--    - returns : if the input tree n represents an error, @res = []@
+--		  and the error is processed by the errror handler filter (default: error is issued on stderr)
+--		  else @res = [n]@
+--
+-- see also : 'issueErr'
+
+issueError	:: XmlStateFilter state
+issueError
+    = (setErrorMsgLevel .>> errorMsgHandler .>> noneM)
+      `whenM`
+      isXError
+
+errorMsgHandler	:: XmlStateFilter state
+errorMsgHandler
+    = performAction
+      ( \ t -> chain' () ( do
+			   ehf <- getSysErrorHandler
+			   ehf t
+			   return ()
+			 )
+      )
+
+-- |
+-- set the error level in system state
+
+setErrorMsgLevel	:: XmlStateFilter state
+setErrorMsgLevel
+    = performAction
+      ( \ (NTree (XError level _str) _cs) ->
+	do
+	errLevel <- getSysParamInt a_status 0
+	setSysParamInt a_status (max errLevel level)
+      )
+
+-- |
+-- default error handler for writing errors to stderr
+
+errorMsgToStderr	:: XmlStateFilter state
+errorMsgToStderr
+    = performAction
+      ( \ (NTree (XError level str) _cs) ->
+	io $ hPutStrLn stderr ("\n" ++ errClass level ++ ": " ++ str)
+      )
+
+-- |
+-- error message handler for collecting all error messages
+-- all messages are stored under attribute 'a_error_log'
+-- they can be read with @getSysParamTree a_error_log@ or by
+-- applying the filter 'getErrorMsg' to the root node
+
+errorMsgLogging		:: XmlStateFilter state
+errorMsgLogging
+    = performAction
+      ( \ t ->
+	do
+	errLog <- getSysParamTree a_error_log
+	setSysParamTree a_error_log (t : errLog)
+      )
+
+errorMsgLoggingAndToStderr      :: XmlStateFilter state
+errorMsgLoggingAndToStderr	= errorMsgLogging.>> errorMsgToStderr
+
+-- |
+-- the filter for reading all collected error mesages
+--
+-- result is the list of error messages, the input tree is ignored
+
+getErrorMsg	:: XmlStateFilter state
+getErrorMsg _t
+    = do
+      el <- getSysParamTree a_error_log
+      setSysParamTree a_error_log []
+      return (reverse el)
+
+-- |
+-- error level translation
+-- 'c_warn' (1) : warning,
+-- 'c_err' (2): error (e.g. parse error, validation error, ...),
+-- 'c_fatal' (3) : fatal error (document access error, internal error, ...)
+
+errClass	:: Int -> String
+errClass l
+    = fromMaybe "fatal error" . lookup l $ msgList
+      where
+      msgList	= [ (c_ok,	"no error")
+		  , (c_warn,	"warning")
+		  , (c_err,	"error")
+		  , (c_fatal,	"fatal error")
+		  ]
+
+-- |
+-- short cut for issuing a warning
+--
+-- see also : 'issueError', 'issueErr'
+
+issueWarn	:: String -> XmlStateFilter state
+issueWarn msg	= liftMf (warn msg) .>> issueError
+
+-- |
+-- short cut for issuing an error
+--
+-- see also : 'issueError'
+
+issueErr	:: String -> XmlStateFilter state
+issueErr msg	= liftMf (err msg) .>> issueError
+
+-- |
+-- short cut for issuing a fatal error
+--
+-- see also : 'issueError', 'issueErr'
+
+issueFatal	:: String -> XmlStateFilter state
+issueFatal msg	= liftMf (fatal msg) .>> issueError
+
+
+-- ------------------------------------------------------------
+--
+-- issue an error, add the error to the document root tree
+-- and return the tree
+
+addFatal	:: String -> XmlStateFilter state
+addFatal msg
+    = liftF ( fatal msg
+	      +++
+	      setStatus c_fatal "accessing documents"
+	    )
+
+-- ------------------------------------------------------------
+
+-- |
+-- checks the value of the attribute 'a_status' in a document root.
+-- if it contains a value greater or equal to 'c_err', an error with error message
+-- stored in attribute 'a_module' is issued and the filter acts as the 'noneM' filter
+-- else its the 'thisM' filter
+
+checkStatus	:: XmlStateFilter state
+checkStatus t
+    = if status >= c_err
+      then do
+	   errorMsgHandler (mkXErrorTree c_warn (errClass status ++ "s detected in " ++ msg) [])
+	   noneM t
+	else
+           thisM t
+    where
+    status = intValueOf a_status t
+    msg    =    valueOf a_module t
+
+-- |
+-- add the error level and the module where the error occured
+-- to the attributes of a document root node and remove the children when level is greater or equal to 'c_err'
+
+setStatus	:: Int -> String -> XmlFilter
+setStatus level msg
+    = ( addAttrInt a_status level
+	.>
+	addAttr a_module msg
+	.>
+	( if level >= c_err
+	  then replaceChildren []
+	  else this
+	)
+      )
+      `when` isRoot
+
+-- |
+-- check whether tree is a document root and the status attribute has a value less than 'c_err'
+
+statusOk	:: XmlFilter
+statusOk
+    = isRoot
+      .>
+      isOf (\ t -> not (intValueOf a_status t >= c_err))
+-- |
+-- check whether the error level attribute in the system state
+-- is set to error, in this case the children of the document root are
+-- removed and error info is added as attributes with 'setStatus'
+-- else nothing is changed
+
+checkResult	:: String -> XmlStateFilter state
+checkResult msg t
+    = do
+      level <- getSysParamInt a_status 0
+      ( if level <= c_warn
+	then thisM
+	else liftMf ( setStatus level msg )
+        ) t
+
+-- |
+-- monadic filter for processing the attribute list of a tag.
+-- for other trees this filter acts like 'noneM'
+--
+-- see also : 'processAttr', 'processAttrl'
+
+processAttrM				:: XmlStateFilter a -> XmlStateFilter a
+processAttrM f t
+    = do
+      res <- f $$< al
+      return $ replaceAttrl res t
+    where
+    al = getAttrl t
+
+-- ------------------------------------------------------------
diff --git a/src/Text/XML/HXT/DOM/XmlTree.hs b/src/Text/XML/HXT/DOM/XmlTree.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/DOM/XmlTree.hs
@@ -0,0 +1,19 @@
+-- |
+-- This helper module exports elements from the basic libraries:
+-- XmlTreeTypes, XmlKeywords, XNodeFunctions, XmlTreeFunctions and XmlTreeFilter
+
+module Text.XML.HXT.DOM.XmlTree
+    ( module Text.XML.HXT.DOM.XmlTreeTypes
+    , module Text.XML.HXT.DOM.XmlKeywords
+    , module Text.XML.HXT.DOM.XmlTreeFunctions
+    , module Text.XML.HXT.DOM.XmlTreeFilter
+    )
+
+where
+
+import Text.XML.HXT.DOM.XmlTreeTypes		-- NTree and XNode types
+import Text.XML.HXT.DOM.XmlKeywords		-- keywords for DTD
+import Text.XML.HXT.DOM.XmlTreeFunctions	-- tree constructors and selector
+import Text.XML.HXT.DOM.XmlTreeFilter		-- basic filter
+
+
diff --git a/src/Text/XML/HXT/DOM/XmlTreeFilter.hs b/src/Text/XML/HXT/DOM/XmlTreeFilter.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/DOM/XmlTreeFilter.hs
@@ -0,0 +1,955 @@
+-- |
+-- basic XmlTree filter
+
+module Text.XML.HXT.DOM.XmlTreeFilter
+    ( module Text.XML.HXT.DOM.XmlTreeFilter
+    )
+where
+
+import Text.XML.HXT.DOM.XmlTreeTypes
+import Text.XML.HXT.DOM.XmlTreeFunctions
+import Text.XML.HXT.DOM.XmlKeywords
+import Text.XML.HXT.DOM.Unicode	( isXmlSpaceChar	)
+import Text.XML.HXT.DOM.Util	( decimalStringToInt	)
+
+import Data.List		( partition	)
+
+infixl 7 += , ++=
+
+-- -----------------------------------------------------------------------------
+--
+-- filter predicates
+
+-- |
+-- test whether the root of a tree contains a document root node.
+
+isRoot			:: XmlFilter
+isRoot			= isOfNode (isTagNode t_root)
+
+-- |
+-- test whether the root of a tree contains a tag node.
+--
+-- see also: 'isNsTag'
+
+isTag			:: String -> XmlFilter
+isTag tn		= isOfNode (isTagNode tn)
+
+-- |
+-- namespace aware test whether the root of a tree contains a tag node. Parameters are the local part and namespace.
+-- Only usable after namespace propagation.
+--
+-- see also: 'isTag'
+
+isNsTag			:: String -> String -> XmlFilter
+isNsTag lp ns		= isOfTag (\ t -> localPart t == lp && namespaceUri t == ns)
+
+-- |
+-- test whether the root of a tree has a given local name
+-- see also : 'hasNamespace', 'hasPrefix', 'isTag', 'isAttr'
+
+hasLocalPart		:: String -> XmlFilter
+hasLocalPart lp		= isOf ((== lp) . localPartOf)
+
+-- |
+-- test whether the root of a tree has a given prefix name
+-- see also : 'hasNamespace', 'hasLocalPart', 'isTag', 'isAttr'
+
+hasPrefix		:: String -> XmlFilter
+hasPrefix px		= isOf ((== px) . prefixOf)
+
+-- |
+-- test whether the root of a tree belongs to a given namespace
+-- see also : 'isTag', 'isAttr', 'hasLocalPart', 'hasPrefix'
+
+hasNamespace		:: String -> XmlFilter
+hasNamespace ns		= isOf ((== ns) . namespaceOf)
+
+-- |
+-- test whether the root of a tree contains a tag node with a special name.
+
+isOfTag			:: (TagName -> Bool) -> XmlFilter
+isOfTag			= isOfNode . isOfTagNode
+
+-- |
+-- test whether the node of a tree is a XTag node or a XPi node with an attibute of a specific name
+--
+-- see also: 'isAttr', 'hasNsAttr'
+
+hasAttr			:: String -> XmlFilter
+hasAttr an		= (getAttrl .> isAttr an) `guards` this
+
+-- |
+-- test whether the tree is a XTag node with an attibute of a specific local name and namespace uri
+--
+-- see also: 'hasAttr', 'isNsAttr'
+
+hasNsAttr		:: String -> String -> XmlFilter
+hasNsAttr an ns		= (getAttrl .> isNsAttr an ns) `guards` this
+
+-- |
+-- test whether the given node is a XTag node or a XPI node with an attribute with a value with a specific property.
+-- In case of a match, the attribute value represented by a text node is returned as single element list,
+-- else the empty list is the result.
+--
+-- see also : 'getValue'
+
+hasValue		:: String -> (String -> Bool) -> XmlFilter
+hasValue a p t
+   | (not . null) att
+     &&
+     p val
+       = xtext val
+   | otherwise
+       = []
+   where
+   att = getAttrl .> isAttr a $ t
+   val = xshow . getChildren $$ att
+
+-- |
+-- test whether the tree is a processing instruction with a given name.
+
+isPi			:: String -> XmlFilter
+isPi pn			= isOfNode (isPiNode pn)
+
+-- |
+-- test whether the tree is a \<?xml ... ?\> declaration
+
+isXmlPi			:: XmlFilter
+isXmlPi			= isPi t_xml
+
+-- |
+-- test whether the root of a tree contains a processing instruction of a special name.
+
+isOfPi			:: (TagName -> Bool) -> XmlFilter
+isOfPi			= isOfNode . isOfPiNode
+
+-- -----------------------------------------------------------------------------
+
+-- simple XNode Filter predicates
+--
+
+-- |
+-- test whether the root of a tree contains a CDATA node.
+
+isXCdata		:: XmlFilter
+isXCdata		= isOfNode isXCdataNode
+
+-- |
+-- test whether the root of a tree contains a character reference node.
+
+isXCharRef		:: XmlFilter
+isXCharRef		= isOfNode isXCharRefNode
+
+-- |
+-- test whether the root of a tree contains a comment node.
+
+isXCmt			:: XmlFilter
+isXCmt			= isOfNode isXCmtNode
+
+-- |
+-- test whether the root of a tree contains a DTD part.
+
+isXDTD			:: XmlFilter
+isXDTD			= isOfNode isXDTDNode
+
+-- |
+-- test whether the root of a tree contains an entity reference node.
+
+isXEntityRef		:: XmlFilter
+isXEntityRef		= isOfNode isXEntityRefNode
+
+-- |
+-- test whether the root of a tree contains an error node.
+
+isXError		:: XmlFilter
+isXError		= isOfNode isXErrorNode
+
+-- |
+-- test whether the root of a tree contains a processing instruction node.
+
+isXPi			:: XmlFilter
+isXPi			= isOfNode isXPiNode
+
+-- |
+-- test whether the root of a tree contains a tag node.
+
+isXTag			:: XmlFilter
+isXTag			= isOfNode isXTagNode
+
+-- |
+-- test whether the root of a tree contains an attribute node.
+
+isXAttr			:: XmlFilter
+isXAttr			= isOfNode isXAttrNode
+
+-- |
+-- test whether the root of a tree is an attribute node for a given attribute name
+
+isAttr			:: String -> XmlFilter
+isAttr an		= isOfNode (isAttrNode an)
+
+-- |
+-- namespace aware test whether the tree contains an attribute node. Parameters are the local part of the atribute name and the namespace.
+-- Only usable after namespace propagation.
+--
+-- see also: 'isNsTag', 'isAttr', 'hasNsAttr'
+
+isNsAttr		:: String -> String -> XmlFilter
+isNsAttr lp ns		= isOfAttr (\ a -> localPart a == lp && namespaceUri a == ns)
+
+-- |
+-- general test for an attribute name
+
+isOfAttr		:: (AttrName -> Bool) -> XmlFilter
+isOfAttr		= isOfNode . isOfAttrNode
+
+-- |
+-- test whether the root of a tree contains a text node.
+
+isXText			:: XmlFilter
+isXText			= isOfNode isXTextNode
+
+-- |
+-- test whether the root of a tree contains a special text.
+
+isText			:: String -> XmlFilter
+isText t		= isOfNode (isTextNode t)
+
+-- |
+-- test whether the root of a tree contains a text node with a special property
+
+isOfText		:: (String -> Bool) -> XmlFilter
+isOfText		= isOfNode . isOfTextNode
+
+-- |
+-- test whether the root of a tree contains a text node only with whitespace.
+
+isWhiteSpace		:: XmlFilter
+isWhiteSpace
+    = isOfNode isWS
+      where
+      isWS n
+	  = isXTextNode n
+	    && all isXmlSpaceChar (textOfXNode n)
+
+-- ------------------------------------------------------------
+--
+-- XDTD Predicates
+
+-- |
+-- test whether the root of a tree contains a DOCTYPE DTD part.
+
+isDoctype			:: XmlFilter
+isDoctype			= isOfNode (isDTDElemNode DOCTYPE)
+
+-- |
+-- test whether the root of a tree contains an ATTLIST DTD part.
+
+isAttlist			:: XmlFilter
+isAttlist			= isOfNode (isDTDElemNode ATTLIST)
+
+-- |
+-- test whether the root of a tree contains an ELEMENT DTD part.
+
+isElement			:: XmlFilter
+isElement			= isOfNode (isDTDElemNode ELEMENT)
+
+-- |
+-- test whether the root of a tree contains an ENTITY DTD part.
+
+isEntity			:: XmlFilter
+isEntity			= isOfNode (isDTDElemNode ENTITY)
+
+-- |
+-- test whether the root of a tree contains a parameter ENTITY reference.
+
+isPeRef				:: XmlFilter
+isPeRef				= isOfNode (isDTDElemNode PEREF)
+
+-- |
+-- test whether the root of a tree contains a DTD name part.
+
+isDTDName			:: XmlFilter
+isDTDName			= isOfNode (isDTDElemNode NAME)
+
+-- |
+-- test whether the root of a tree contains a conditional section DTD part.
+
+isCondSect			:: XmlFilter
+isCondSect			= isOfNode (isDTDElemNode CONDSECT)
+
+-- |
+-- test whether the root of a tree contains a parameter entity declaration.
+
+isParameterEntity		:: XmlFilter
+isParameterEntity		= isOfNode (isDTDElemNode PENTITY)
+
+-- |
+-- test whether the root of a tree contains a NOTATION DTD part.
+
+isNotation			:: XmlFilter
+isNotation			= isOfNode (isDTDElemNode NOTATION)
+
+-- ATTLIST predicates
+
+isDefaultAttrKind		:: XmlFilter
+isDefaultAttrKind		= isOf (a_kind `ofDTDequals` k_default)
+
+isEnumAttrType			:: XmlFilter
+isEnumAttrType			= isOf (a_type `ofDTDequals` k_enumeration)
+
+isFixedAttrKind			:: XmlFilter
+isFixedAttrKind			= isOf (a_kind `ofDTDequals` k_fixed)
+
+isIdAttrType			:: XmlFilter
+isIdAttrType			= isOf (a_type `ofDTDequals` k_id)
+
+isIdRefAttrType			:: XmlFilter
+isIdRefAttrType			= isOf ((`elem` [k_idref, k_idrefs]) . valueOfDTD a_type)
+
+isNotationAttrType		:: XmlFilter
+isNotationAttrType		= isOf (a_type `ofDTDequals` k_notation)
+
+isRequiredAttrKind		:: XmlFilter
+isRequiredAttrKind		= isOf (a_kind `ofDTDequals` k_required)
+
+isAttlistParameterEntity	:: XmlFilter
+isAttlistParameterEntity	= isAttlist .> isOf (a_type `ofDTDequals` k_peref)
+
+-- ELEMENT predicates
+
+isEmptyElement			:: XmlFilter
+isEmptyElement			= isOf (a_type `ofDTDequals` k_empty)
+
+isMixedContentElement		:: XmlFilter
+isMixedContentElement		= isOf (a_type `ofDTDequals` v_mixed)
+
+isElemWithContent		:: XmlFilter
+isElemWithContent		= isElement
+				  .>
+				  isOf ((`elem` [v_mixed, v_children]) . valueOfDTD a_type)
+
+isAttlistOfElement		:: String -> XmlFilter
+isAttlistOfElement el		= isAttlist
+				  .>
+				  isOf (a_name `ofDTDequals` el)
+
+isElemContentParamEntity	:: XmlFilter
+isElemContentParamEntity	= isElement
+				  .>
+				  isOf (a_type `ofDTDequals` k_peref)
+
+-- ENTITY predicates
+
+isUnparsedEntity		:: XmlFilter
+isUnparsedEntity		= isOf (hasEntry k_ndata . attrlOfDTD)
+
+isExternalParameterEntity	:: XmlFilter
+isExternalParameterEntity	= isParameterEntity
+				  .>
+				  isOf (hasEntry k_system . attrlOfDTD)
+
+isInternalParameterEntity	:: XmlFilter
+isInternalParameterEntity	= isParameterEntity
+				  .> isOf (not . hasEntry k_system . attrlOfDTD)
+
+-- -----------------------------------------------------------------------------
+
+-- |
+-- test whether the root of a tree contains an error node for a warning.
+
+isWarning 			:: XmlFilter
+isWarning			= isOfNode $ isErrorNode c_warn
+
+-- |
+-- test whether the root of a tree contains an error node for an error.
+
+isError 			:: XmlFilter
+isError				= isOfNode $ isErrorNode c_err
+
+-- |
+-- test whether the root of a tree contains an error node for a fatal error.
+
+isFatalError 			:: XmlFilter
+isFatalError			= isOfNode $ isErrorNode c_fatal
+
+-- -----------------------------------------------------------------------------
+--
+-- constructor filter
+
+-- |
+-- constructor filter for a tag node.
+-- a new tree is constructed.
+-- the attributes and the children are computed by applying the aproprate filter to the input tree
+--
+--    * 1.parameter n :  the tag name
+--
+--    - 2.parameter af :  the filter for the attribute list
+--
+--    - 3.parameter cf :  the filter for the children
+--
+--    - returns : the constructor filter
+
+mkXTag		:: String -> XmlFilter -> XmlFilter -> XmlFilter
+mkXTag n af cf
+    = \ t -> [ mkXTagTree n (af t) (cf t) ]
+
+-- | Version with qualified names of 'mkXTag'
+
+mkQTag		:: QName -> XmlFilter -> XmlFilter -> XmlFilter
+mkQTag q af cf
+    = \ t -> [ mkQTagTree q (af t) (cf t) ]
+
+-- |
+-- constructor filter for a tag node.
+-- a new tree is constructed.
+-- the attributes and the children are computed by applying the aproprate filter to the input tree
+--
+--    * 1.parameter n :  the tag name in form of prefix:localpart
+--
+--    - 2.parameter ns:   the namespace uri
+--
+--    - 3.parameter af :  the filter for the attribute list
+--
+--    - 4.parameter cf :  the filter for the children
+--
+--    - returns : the constructor filter
+
+mkXNsTag	:: String -> String -> XmlFilter -> XmlFilter -> XmlFilter
+mkXNsTag n ns af cf
+    = \ t -> [ mkXNsTagTree n ns (af t) (cf t) ]
+
+-- |
+-- filter for attribute construction.
+-- a new tree with attribute name and a value computed by a filter
+-- is build.
+
+mkXAttr		:: String -> XmlFilter -> XmlFilter
+mkXAttr n af
+    = \ t -> [ mkXAttrTree n (af t) ]
+
+-- | Qualified version 'mkXAttr'
+
+mkQAttr		:: QName -> XmlFilter -> XmlFilter
+mkQAttr q af
+    = \ t -> [ mkQAttrTree q (af t) ]
+
+-- |
+-- filter for attribute construction.
+-- a new tree with attribute name and namespace and a value computed by a filter
+-- is build.
+
+mkXNsAttr	:: String -> String -> XmlFilter -> XmlFilter
+mkXNsAttr n ns af
+    = \ t -> [ mkXNsAttrTree n ns (af t) ]
+
+-- |
+-- constructor filter for a text node.
+-- a new tree is constructed.
+-- the input tree is ignored.
+
+mkXText		:: String                          -> XmlFilter
+mkXText		= mkNTree . mkXTextTree
+
+-- |
+-- constructor filter for a character reference node.
+-- a new tree is constructed.
+-- the input tree is ignored.
+
+mkXCharRef	:: Int                             -> XmlFilter
+mkXCharRef	= mkNTree . mkXCharRefTree
+
+-- |
+-- constructor filter for an entity reference node.
+-- a new tree is constructed.
+-- the input tree is ignored.
+
+mkXEntityRef	:: String                          -> XmlFilter
+mkXEntityRef	= mkNTree . mkXEntityRefTree
+
+-- |
+-- constructor filter for a comment node.
+-- a new tree is constructed.
+-- the xml string representation of the filter result
+-- forms the comment
+
+mkXCmt		:: XmlFilter -> XmlFilter
+mkXCmt cf
+    = \ t -> [ mkXCmtTree ((xshow . cf) t) ]
+
+-- |
+-- constructor filter for a DTD part.
+-- a new tree is constructed.
+-- the input tree is ignored.
+
+mkXDTD		:: DTDElem -> Attributes -> XmlTrees -> XmlFilter
+mkXDTD n al	= mkNTree . mkXDTDTree n al
+
+-- |
+-- constructor filter for a CDATA section node.
+-- a new tree is constructed.
+-- the input tree is ignored.
+
+mkXCdata	:: XmlFilter -> XmlFilter
+mkXCdata cf
+    = \ t -> [ mkXCdataTree ((xshow . cf) t) ]
+
+-- |
+-- constructor filter for a processing instruction
+-- a new tree is constructed from the text representation
+-- of the input tree
+
+mkXPi		:: String -> XmlFilter -> XmlFilter
+mkXPi piName cf
+    = \ t -> [ mkXPiTree piName ((xshow . cf) t) ]
+
+-- |
+-- constructor filter for an error message node.
+-- a new tree is constructed.
+-- the input tree is ignored.
+
+mkXError	:: Int -> String                   -> XmlFilter
+mkXError l s	= this . mkXErrorTree l s . this
+
+-- -----------------------------------------------------------------------------
+--
+-- selector filters
+
+-- |
+-- filter for selecting the name of a tag node, an attribute node or a pi node.
+-- Result of the filter is a single element list with a text node or the empty list
+
+getName	::             XmlFilter
+getName t
+    | null s    = []
+    | otherwise = xtext s
+    where
+    s = nameOf t
+
+-- |
+-- filter for selecting the attibute list
+
+getAttrl	:: XmlFilter
+getAttrl
+    = selAttrl . getNode
+    where
+    selAttrl (XTag _ al) = al
+    selAttrl (XPi  _ al) = al
+    selAttrl _           = []
+
+-- |
+-- filter for selecting the value of an attribute in a tag node.
+-- Result of the filter is a single element list with a text node or the empty list
+--
+-- see also : 'hasValue', 'getNsValue'
+
+getValue		:: String -> XmlFilter
+getValue a		= xmlTreesToText . (getAttrl .> isAttr a .> getChildren)
+
+-- |
+-- filter for selecting the value of an attribute with namespace in a tag node.
+-- Result of the filter is a single element list with a text node or the empty list
+--
+-- see also : 'getValue', 'isNsAttr'
+
+getNsValue		:: String -> String -> XmlFilter
+getNsValue lp ns	= xmlTreesToText . (getAttrl .> isNsAttr lp ns .> getChildren)
+
+-- |
+-- filter for selecting an attribute of a DTD node.
+-- Result of the filter is a single element list with a text node or the empty list
+
+getDTDValue		:: String -> XmlFilter
+getDTDValue a		= xtext . valueOfDTD a
+
+-- |
+-- filter for selecting content of a comment.
+-- Result of the filter is a single element list with a text node or the empty list
+
+getXCmt			:: XmlFilter
+getXCmt
+    = selCmt . getNode
+      where
+      selCmt (XCmt c)	= xtext c
+      selCmt _          = []
+
+-- |
+-- filter for selecting the CDATA content.
+-- Result of the filter is a single element list with a text node or the empty list
+
+getXCdata		:: XmlFilter
+getXCdata
+    = selData . getNode
+      where
+      selData (XCdata d)	= xtext d
+      selData _			= []
+
+-- -----------------------------------------------------------------------------
+--
+-- edit filter
+
+-- |
+-- edit filter for changing the name of a tag node, an attribute or a pi.
+-- result of the filter is a single element list with a tag node or the empty list
+
+replaceQName				:: String -> XmlFilter
+replaceQName n				= modifyQName (const (mkName n))
+
+-- |
+-- edit filter for changing the text of a text node.
+-- result of the filter is a single element list with a text node or the empty list
+--
+-- example for editing all text nodes of a tree with an edit function @f@:
+--
+-- @processBottomUp (modifyText f \`when\` isXText)@
+
+modifyText				:: (String -> String) -> XmlFilter
+modifyText f t@(NTree n _)
+    | isXTextNode n			= replaceNode (XText (f (textOfXNode n))) t
+modifyText _ _				= []
+
+-- |
+-- edit filter for changing the name of a tag node.
+-- result of the filter is a single element list with a text node or the empty list
+
+modifyQName				::  (TagName -> TagName) -> XmlFilter
+modifyQName f (NTree (XTag n al) cs)	= [NTree (XTag (f n) al) cs]
+modifyQName f (NTree (XPi  n al) cs)	= [NTree (XPi  (f n) al) cs]
+modifyQName f (NTree (XAttr n)   cs)	= [NTree (XAttr (f n)  ) cs]
+modifyQName _ _			= []
+
+-- -----------------------------------------------------------------------------
+
+-- |
+-- process the attribute list of a tag node with a tree list filter.
+-- for other trees this filter acts like 'none'
+
+processAttrl				:: XmlSFilter -> XmlFilter
+processAttrl f t
+    = replaceAttrl (f al) t
+      where
+      al = getAttrl t
+
+-- |
+-- elementwise processing of the attributes of a tag.
+-- for other trees this filter acts like 'none'
+--
+-- see also : 'processAttrl'
+processAttr				:: XmlFilter -> XmlFilter
+processAttr f
+    = processAttrl (f $$)
+
+-- |
+-- replace an attribute list
+-- to be renamed when replaceAttrl is eliminated
+
+replaceAttrl				:: XmlTrees -> XmlFilter
+replaceAttrl al (NTree (XTag n _al) cs)	= [ NTree (XTag n al) cs ]
+replaceAttrl al (NTree (XPi  n _al) cs)	= [ NTree (XPi  n al) cs ]
+replaceAttrl _ _			= []
+
+-- |
+-- delete an attribute from the attribute list of a tag tree
+
+del1Attr				:: String -> XmlFilter
+del1Attr an				= processAttr (none `when` isAttr an)
+
+-- |
+-- add an attribute to the attribute list of a tag.
+-- If the attribute already exists, it\'s substituted,
+--
+-- see also: 'sattr', '+='
+
+add1Attr				:: XmlTree -> XmlFilter
+add1Attr a@(NTree (XAttr an) _av) t
+    = replaceAttrl (replace al) t
+      where
+      al = getAttrl t
+      replace [] = [a]
+      replace (a1 : as)
+	  | satisfies (isAttr (qualifiedName an)) a1
+	      = a : as
+	  | otherwise
+	      = a1 : replace as
+
+add1Attr _ t
+    = this t
+
+-- |
+-- adds an attribute list computed by a filter, uses 'add1Attr'.
+--
+-- see also: '+='
+
+addAttrl				:: XmlFilter -> XmlFilter
+addAttrl attrFilter t
+    = ((foldl (.>) this . map add1Attr) al) t
+      where
+      al = attrFilter t
+
+-- |
+-- add or change an attribute with a given string as value for a XTag or XPi tree,
+-- uses 'add1Attr'.
+
+addAttr					:: String -> String -> XmlFilter
+addAttr an av
+    = add1Attr (mkXAttrTree an (if null av then [] else xtext av))
+
+-- |
+-- add or change an attribute with an Int value.
+-- uses 'addAttr'.
+
+addAttrInt				:: String -> Int -> XmlFilter
+addAttrInt an av
+    = addAttr an (show av)
+
+-- |
+-- edit filter for changing the value of an attribute in a tag node.
+-- result of the filter is a single element list with the tag node or the empty list.
+--
+--    * 1.parameter n :  the name of the attribute
+--
+--    - 2.parameter f :  the edit function for the attribute value
+--
+--    - returns : the edit filter
+
+modifyAttr				:: String -> (String -> String) -> XmlFilter
+modifyAttr an f
+    = processAttr (modifyValue `when` isAttr an)
+      where
+      modifyValue = modifyChildren ((modifyText f $$) . xmlTreesToText)
+
+-- |
+-- add or change an attribute of a DTD tree
+
+addDTDAttr				:: String -> String -> XmlFilter
+addDTDAttr an av (NTree (XDTD e al) cs)
+    = [NTree (XDTD e (addEntry an av al)) cs]
+
+addDTDAttr _ _ _
+    = []
+
+
+-- -----------------------------------------------------------------------------
+--
+
+-- |
+-- convenient function for tag node tree construction
+--
+-- infixl 7
+--
+-- filter combinator for tag tree constrcution
+-- take a 1. filter for computing a tag node tree (or a whole list of tag node trees)
+-- then add all trees computed by the 2. filter to the attribute list when they represent attributes
+-- else append them to the list of children.
+--
+-- if the 1. filter computes a list of tag nodes, the results of the 2. filter are added to all trees
+--
+-- example: @ etag \"a\" += sattr \"href\" \"\#42\" += txt \"the answer\" @
+-- gives the tree @ \<a href=\"\#42\"\>the answer\<\/a\> @
+--
+-- example: @ ( etag \"a\" +++ etag \"b\" ) += sattr \"x\" \"42\" @
+-- gives the tree @ \<a x=\"42\"\/\>\<b x=\"42\"\/\> @
+--
+-- see also : 'etag', 'tag', 'add1Attr', 'modifyChildren', '++='
+
+(+=)	:: XmlFilter -> XmlFilter -> XmlFilter
+(+=) tf cf t
+    = concat
+      [ ( isXTag `guards` ( addaf .> addcf )) $ t'
+	| t' <- tf t
+      ]
+    where
+    (as, cs) = partition (satisfies isXAttr) . cf $ t
+
+    addaf | null as   = this
+          | otherwise = addAttrl (const as)
+
+    addcf | null cs   = this
+          | otherwise = modifyChildren (++ cs)
+
+-- |
+-- convenient filter function adding a whole list of trees, just for not writing to many ( ... ).
+--
+-- infixl 7
+--
+-- @ f ++= gl  == f += cat gl @
+--
+-- see also : '+='
+
+(++=)	:: XmlFilter -> [XmlFilter] -> XmlFilter
+tf ++= cfs
+    = tf += cat cfs
+
+-- -----------------------------------------------------------------------------
+--
+-- string access functions
+
+-- |
+-- combination of 'getValue' and conversion into a String
+
+valueOf			:: String -> XmlTree -> String
+valueOf a		= xshow . getValue a
+
+-- |
+-- combination of 'getValue' and conversion to a Int
+
+intValueOf		:: String -> XmlTree -> Int
+intValueOf a		= decimalStringToInt . valueOf a
+
+-- -----------------------------------------------------------------------------
+--
+-- convenient filter (short cuts)
+
+-- |
+-- variant of mkXTag with a list of filters for the attributes and a list of filters for the children.
+-- this variant leads to a more readable source for a complicated construction filter
+-- than the simple solution with a combination of 'mkXTag' and 'cat'.
+--
+-- see also : 'mkXTag', 'stag', 'etag', 'cat', '+='
+
+tag		:: String -> [XmlFilter] -> [XmlFilter] -> XmlFilter
+tag n afs cfs	= mkXTag n (cat afs) (cat cfs)
+
+-- |
+-- variant of tag, useful for tags without attributes and with a list of filters for
+-- constructing the children
+--
+-- see also : 'mkXTag', 'tag', 'etag', 'cat', '+='
+
+stag		:: String -> [XmlFilter] -> XmlFilter
+stag n cfs	= mkXTag n none (cat cfs)
+
+-- |
+-- variant of tag, useful for tags with attributes but without children
+--
+-- see also : 'mkXTag', 'tag', 'stag', 'etag', 'cat'
+
+atag		:: String -> [XmlFilter] -> XmlFilter
+atag n cfs	= mkXTag n (cat cfs) none
+
+-- |
+-- Short cut for empty tags without attributes
+--
+-- see also : 'tag', 'atag', 'stag', 'mkXTag' and '+='
+
+etag		:: String -> XmlFilter
+etag n		= mkXTag n none none
+
+-- | Qualified version of etag
+
+qetag		:: QName -> XmlFilter
+qetag q		= mkQTag q none none
+
+-- | Alias for mkQTag
+
+qtag		:: QName -> XmlFilter -> XmlFilter -> XmlFilter
+qtag = mkQTag
+
+
+-- |
+-- filter for creating a document root node with a list of filters for the attributes and a list of filters for the document.
+--
+-- see also : 'tag'
+
+rootTag		:: [XmlFilter] -> [XmlFilter] -> XmlFilter
+rootTag afs cfs	= mkXTag t_root (cat afs) (cat cfs)
+
+-- |
+-- Alias for 'mkXAttr'
+
+attr		:: String -> XmlFilter -> XmlFilter
+attr		= mkXAttr
+
+-- | Alias for mkQAttr
+qattr		:: QName -> XmlFilter -> XmlFilter
+qattr = mkQAttr
+
+-- |
+-- short cut for attribute construction with string constants
+--
+-- set also : 'attr', 'mkXAttr' and 'mkXText'
+
+sattr		:: String -> String -> XmlFilter
+sattr a v	= mkXAttr a (mkXText v)
+
+-- |
+-- short cut for 'mkXText'
+
+txt		:: String  -> XmlFilter
+txt		= mkXText
+
+-- |
+-- short cut for simple comment
+-- the input tree is ignored
+--
+-- see also : 'mkXCmt'
+
+cmt		:: String  -> XmlFilter
+cmt c		= mkXCmt (txt c)
+
+-- |
+-- short cut for generating simple processing instructions (spi)
+-- the input tree is ignored
+--
+-- @spi \"xyz\" \"abc\"@ is equal to @mkXPi \"xyz\" (txt \"abc\")@
+-- (the name pi is already used in prelude)
+
+spi		:: String -> String -> XmlFilter
+spi n c		= mkXPi n (txt c)
+
+-- |
+-- short cut for generating simple cdata sections,
+-- the input tree is ignored
+
+cdata		:: String -> XmlFilter
+cdata s		= mkXCdata (txt s)
+
+-- |
+-- DTD part generation with filter for attributes and children
+-- see also: 'mkXDTDTree'
+
+dtd		:: DTDElem -> [XmlFilter] -> [XmlFilter] -> XmlFilter
+dtd dtdpart afs cfs t
+    = mkXDTD dtdpart (toAttrl . cat afs $ t) (cat cfs t) $ t
+
+-- |
+-- short cut for mkXError c_warn.
+--
+-- see also : 'mkXError'
+
+warn		:: String -> XmlFilter
+warn		= mkXError c_warn
+
+-- |
+-- short cut for mkXError c_fatal.
+--
+-- see also : 'mkXError'
+
+err		:: String -> XmlFilter
+err		= mkXError c_err
+
+-- |
+-- short cut for mkXError c_fatal.
+--
+-- see also : 'mkXError'
+
+fatal		::  String -> XmlFilter
+fatal		= mkXError c_fatal
+
+-- |
+-- check whether an option is set
+--
+-- reads the value of an attribute, usually applied to a document root node,
+-- and checks if the value represents True. The following strings are interpreted
+-- as true: \"1\", \"True\", \"true\", \"yes\", \"Yes\".
+
+hasOption	:: String -> XmlFilter
+hasOption opt
+    = getValue opt .> isOfText isSet
+      where
+      isSet x
+	  = x `elem` ["1", "True", "true", "yes", "Yes"]
+
+
+-- -----------------------------------------------------------------------------
+
diff --git a/src/Text/XML/HXT/DOM/XmlTreeFunctions.hs b/src/Text/XML/HXT/DOM/XmlTreeFunctions.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/DOM/XmlTreeFunctions.hs
@@ -0,0 +1,551 @@
+-- ------------------------------------------------------------
+
+{- |
+   Module     : Text.XML.HXT.DOM.XmlTreeFunctions
+   Copyright  : Copyright (C) 2008 Uwe Schmidt
+   License    : MIT
+
+   Maintainer : Uwe Schmidt (uwe@fh-wedel.de)
+   Stability  : stable
+   Portability: portable
+
+   Basic XmlTree functions
+
+-}
+
+-- ------------------------------------------------------------
+
+module Text.XML.HXT.DOM.XmlTreeFunctions
+    ( module Text.XML.HXT.DOM.XmlTreeFunctions
+    , module Text.XML.HXT.DOM.ShowXml
+    )
+where
+
+import Text.XML.HXT.DOM.XmlTreeTypes
+import Text.XML.HXT.DOM.XmlKeywords
+import Text.XML.HXT.DOM.ShowXml
+
+import Data.Maybe
+
+-- -----------------------------------------------------------------------------
+--
+-- XNode Predicates
+--
+
+isXCdataNode			:: XNode -> Bool
+isXCdataNode (XCdata _)		= True
+isXCdataNode _			= False
+
+isXCharRefNode			:: XNode -> Bool
+isXCharRefNode (XCharRef _)	= True
+isXCharRefNode _		= False
+
+isXCmtNode			:: XNode -> Bool
+isXCmtNode (XCmt _)		= True
+isXCmtNode _			= False
+
+isXDTDNode			:: XNode -> Bool
+isXDTDNode (XDTD _ _)		= True
+isXDTDNode _			= False
+
+isXAttrNode			:: XNode -> Bool
+isXAttrNode (XAttr _)		= True
+isXAttrNode _			= False
+
+isXEntityRefNode		:: XNode -> Bool
+isXEntityRefNode (XEntityRef _)	= True
+isXEntityRefNode _		= False
+
+isXErrorNode			:: XNode -> Bool
+isXErrorNode (XError _ _)	= True
+isXErrorNode _			= False
+
+isXPiNode			:: XNode -> Bool
+isXPiNode (XPi _ _)		= True
+isXPiNode _			= False
+
+isXTagNode			:: XNode -> Bool
+isXTagNode  (XTag _ _)		= True
+isXTagNode _			= False
+
+isXTextNode			:: XNode -> Bool
+isXTextNode (XText _)		= True
+isXTextNode _			= False
+
+-- -----------------------------------------------------------------------------
+
+isRootNode			:: XNode -> Bool
+isRootNode			= isTagNode t_root
+
+isTagNode			:: String -> XNode -> Bool
+isTagNode n			= isOfTagNode ((== n) . qualifiedName)
+
+isOfTagNode			:: (TagName -> Bool) -> XNode -> Bool
+isOfTagNode p (XTag n _)	= p n
+isOfTagNode _ _			= False
+
+isAttrNode			:: String -> XNode -> Bool
+isAttrNode n			= isOfAttrNode ((== n) . qualifiedName)
+
+isOfAttrNode			:: (AttrName -> Bool) -> XNode -> Bool
+isOfAttrNode p (XAttr n)	= p n
+isOfAttrNode _ _		= False
+
+isTextNode			:: String -> XNode -> Bool
+isTextNode t			= isOfTextNode (== t)
+
+isOfTextNode			:: (String -> Bool) -> XNode -> Bool
+isOfTextNode p (XText t)	= p t
+isOfTextNode _ _		= False
+
+isPiNode			:: String -> XNode -> Bool
+isPiNode n			= isOfPiNode ((== n) . qualifiedName)
+
+isOfPiNode			:: (TagName -> Bool) -> XNode -> Bool
+isOfPiNode p (XPi n _)		= p n
+isOfPiNode _ _			= False
+
+isDTDElemNode 			:: DTDElem -> XNode -> Bool
+isDTDElemNode e	(XDTD n _)	= n == e
+isDTDElemNode _ _		= False
+
+isErrorNode 			:: Int -> XNode -> Bool
+isErrorNode l (XError l'  _)    = l == l'
+isErrorNode _ _  = False
+
+-- -----------------------------------------------------------------------------
+
+textOfXNode			:: XNode -> String
+textOfXNode (XText t)		= t
+textOfXNode _			= ""
+
+-- -----------------------------------------------------------------------------
+--
+-- XmlTree constructors
+
+-- |
+-- Create a tree with a tag node.
+--
+--    * 1.parameter n :  the name of the tag
+--
+--    - 2.parameter al :  the tag attribte list
+--
+--    - 3.parameter cs :  the list of children
+--
+--    - returns : the new tree
+
+mkXTagTree		:: String -> XmlTrees -> XmlTrees -> XmlTree
+mkXTagTree n al cs	= mkNode (XTag (mkName n) al) cs
+
+-- | Version with qualified name of 'mkXTagTree'
+
+mkQTagTree		:: QName -> XmlTrees -> XmlTrees -> XmlTree
+mkQTagTree q al cs	= mkNode (XTag q al) cs
+
+-- |
+-- create a tree with a namespace aware tag node.
+--
+--    * 1.parameter n :  the prefix:localpart of the tag
+--
+--    - 2.parameter ns:  the namespace uri
+--
+--    - 3.parameter al :  the tag attribte list
+--
+--    - 4.parameter cs :  the list of children
+--
+--    - returns : the new tree
+--
+-- see also: 'mkXTagTree'
+
+mkXNsTagTree		:: String -> String -> XmlTrees -> XmlTrees -> XmlTree
+mkXNsTagTree n ns al cs	= mkNode (XTag (mkNsName n ns) al) cs
+
+-- |
+-- creates a new document tree with empty contents.
+--
+--   * 1.parameter al : the attribute list for the root node
+--
+-- returns a single node tree with tag name \"\/\" indicating a root and
+-- with empty list of children
+--
+-- see also : 'emptyRoot'
+
+newRoot			:: XmlTrees -> XmlTree
+newRoot al		= mkXTagTree t_root al []
+
+-- | the empty document tree
+--
+-- see also : 'newRoot'
+
+emptyRoot		:: XmlTree
+emptyRoot		= newRoot []
+
+-- |
+-- create a new empty document with source name as parameter
+
+newDocument		:: String -> XmlTree
+newDocument n
+    = newDocument' [(a_source, n), (a_status, show c_ok)]
+
+-- |
+-- create a new empty document with a list of attributes for source location and options
+--
+-- see also : 'newDocument'
+
+newDocument'		:: Attributes -> XmlTree
+newDocument' al
+    = newRoot (fromAttrl al)
+
+-- |
+-- create a document root tree.
+--
+--    * 1.parameter al :  the attribute list for the root. This list must contain at
+--		  least an attribute \"source\" that contains the URI of the document to be processed
+--
+--    - 2.parameter cs :  the list for the document content
+--
+--    - returns : the document root
+
+mkRootTree		:: XmlTrees -> XmlTrees -> XmlTree
+mkRootTree al cs	= mkXTagTree t_root al cs
+
+-- |
+-- create a leaf for a text element.
+--
+--    * 1.parameter txt :  the text
+--
+--    - returns : the tree with the single node containing the text
+
+mkXTextTree		:: String -> XmlTree
+mkXTextTree s		= mkLeaf (XText s)
+
+-- |
+-- create a leaf for a char reference.
+--
+--    * 1.parameter i :  the integer representing the Unicode char
+--
+--    - returns : the tree with the single node containing the char reference
+
+mkXCharRefTree		:: Int -> XmlTree
+mkXCharRefTree s	= mkLeaf (XCharRef s)
+
+-- |
+-- create a leaf for an entity reference.
+--
+--    * 1.parameter n :  the name of the entity reference
+--
+--    - returns : the tree with the single node containing the entity reference
+
+mkXEntityRefTree	:: String -> XmlTree
+mkXEntityRefTree s	= mkLeaf (XEntityRef s)
+
+-- |
+-- create a leaf for a comment,
+--
+--    * 1.parameter c :  the comment text
+--
+--    - returns : the tree with the single node containing the comment
+
+mkXCmtTree		:: String -> XmlTree
+mkXCmtTree c		= mkLeaf (XCmt c)
+
+-- |
+-- create a tree for a part of a DTD
+--
+--    * 1.parameter d :  the type of the DTD part
+--
+--    - 2.parameter al :  the attribute list for the DTD part
+--
+--    - 3.parameter ds :  the possibly empty list of components for the DTD part
+--
+--    - returns : the tree with the composed DTD part
+
+mkXDTDTree		:: DTDElem -> Attributes -> XmlTrees -> XmlTree
+mkXDTDTree d al	ds	= mkNode (XDTD d al) ds
+
+
+-- |
+-- create an attribute tree as part of a tag attribute list of tag nodes
+--
+--    * 1.parameter al : the attribute name
+--
+--    - 2.parameter av : the attribute value as tree list, usually containing a single text node
+
+mkXAttrTree		:: String -> XmlTrees -> XmlTree
+mkXAttrTree an av	= mkNode (XAttr (mkName an)) av
+
+-- | Qualified version of 'mkXAttrTree'
+
+mkQAttrTree		:: QName -> XmlTrees -> XmlTree
+mkQAttrTree aq av	= mkNode (XAttr aq) av
+
+
+-- |
+-- create an attribute tree with a namespace
+--
+--    * 1.parameter al : the attribute name
+--
+--    - 2.parameter ns : namespace uri
+--
+--    - 3.parameter av : the attribute value as tree list, usually containing a single text node
+--
+-- see also: 'mkXAttrTree', 'mkXNsTagTree'
+
+mkXNsAttrTree		:: String -> String -> XmlTrees -> XmlTree
+mkXNsAttrTree an ns av	= mkNode (XAttr (mkNsName an ns)) av
+
+-- |
+-- create a parameter entity reference DTD part.
+--
+--    * 1.parameter ref :  the name of the reference
+--
+--    - returns : the DTD part for a PERef
+
+mkXPERefTree		:: String -> XmlTree
+mkXPERefTree ref	= mkLeaf (XDTD PEREF [(a_peref, ref)])
+
+-- |
+-- create a processing instruction tree.
+--
+--    * 1.parameter n :  the name of the PI
+--
+--    - 2.parameter str :  the content of a PI
+--
+--    - returns : the processing instruction tree with a single attribute \"value\"
+--      with the str parameter as attribute value, with @valueOf a_value@ applied to the result tree
+--      the content of the PI can be selected
+
+mkXPiTree	:: String -> String -> XmlTree
+mkXPiTree n str	= mkLeaf (XPi (mkName n) (xattr a_value str))
+
+-- |
+-- create xml declaration
+
+mkXmlDeclTree	:: XmlTrees -> XmlTree
+mkXmlDeclTree al = mkLeaf (XPi (mkName t_xml) al)
+
+-- |
+-- create a CDATA section tree.
+--
+--    * 1.parameter s :  the content of the CDATA section
+--
+--    - returns : the tree for the CDATA section
+
+mkXCdataTree		:: String -> XmlTree
+mkXCdataTree s		= mkLeaf (XCdata s)
+
+-- |
+-- create an error tree.
+--
+--    * 1.parameter l :  the level of the error (warning, error fatal)
+--
+--    - 2.parameter msg :  the error message
+--
+--    - 3.parameter cs :  the context, where the error was detected
+
+mkXErrorTree		:: Int -> String -> XmlTrees -> XmlTree
+mkXErrorTree l s cs	= mkNode (XError l s) cs
+
+maybeString2XText	:: Maybe String -> XmlTrees
+maybeString2XText	= map mkXTextTree . maybeToList
+
+-- ------------------------------------------------------------
+--
+-- text selection
+
+showXText	:: XmlTrees -> String
+showXText
+    = concatMap showT
+      where
+      showT (NTree (XText      t) _) = t
+      showT _                        = ""
+
+showXCharRef	:: XmlTrees -> String
+showXCharRef
+    = concatMap showT
+      where
+      showT (NTree (XCharRef   r) _) = "&#" ++ show r ++ ";"
+      showT _                        = ""
+
+showXEntityRef	:: XmlTrees -> String
+showXEntityRef
+    = concatMap showT
+      where
+      showT (NTree (XEntityRef r) _) = "&" ++ r ++ ";"
+      showT _                        = ""
+
+showXErrors	:: XmlTrees -> String
+showXErrors
+    = concatMap showE
+      where
+      showE (NTree (XError level str) _) = msg level ++ ": " ++ str ++ "\n"
+      showE _                            = ""
+
+      msg :: Int -> String
+      msg l
+          | l == c_warn = "Warning"
+          | l == c_err  = "Error"
+          | otherwise   = "Fatal error"
+
+-- ------------------------------------------------------------
+--
+-- the toString conversion functions
+
+-- |
+-- old name for 'xshow' (deprecated)
+
+xmlTreesToString	:: XmlTrees -> String
+xmlTreesToString	= xshow
+
+-- |
+-- conversion of a filter result into a text node
+--
+-- see also : 'xshow'
+
+xmlTreesToText		:: XmlSFilter
+xmlTreesToText ts@[(NTree (XText _) _)]	= ts		-- special case optimisation
+xmlTreesToText ts@[]			= ts
+xmlTreesToText ts			= xtext . xshow $ ts
+
+-- ------------------------------------------------------------
+
+xmlContentModelToString	:: XmlTree -> String
+xmlContentModelToString (NTree (XDTD ELEMENT al) cs)
+    = showElemType (lookup1 a_type al) cs ""
+
+xmlContentModelToString _
+    = ""
+
+-- -----------------------------------------------------------------------------
+--
+-- string access functions
+
+-- |
+-- select the name of a node. For tags, attributes and pi\'s the name string
+-- is returned, else the empty string.
+
+nameOf				:: XmlTree -> String
+nameOf
+    = selName . getNode
+      where
+      selName (XTag  n _)	= qualifiedName n
+      selName (XAttr n  )	= qualifiedName n
+      selName (XPi   n _)	= qualifiedName n
+      selName _			= ""
+
+-- |
+-- select the local part of a name of a node. For tags, attributes the name string
+-- is returned, for pi's the whole name, else the empty string.
+
+localPartOf				:: XmlTree -> String
+localPartOf
+    = selName . getNode
+      where
+      selName (XTag  n _)	= localPart n
+      selName (XAttr n  )	= localPart n
+      selName (XPi   n _)	= qualifiedName n
+      selName _			= ""
+
+-- |
+-- select the namespace URI of a tag or an attribute tree, else the empty string is returned
+-- see also : 'nameOf'
+
+namespaceOf				:: XmlTree -> String
+namespaceOf
+    = selName . getNode
+      where
+      selName (XTag n _)	= namespaceUri n
+      selName (XAttr n )	= namespaceUri n
+      selName _			= ""
+
+-- |
+-- select the namespace prefix of a tag or an attribute tree, else the empty string is returned
+-- see also : 'nameOf', 'localPartOf'
+
+prefixOf				:: XmlTree -> String
+prefixOf
+    = selName . getNode
+      where
+      selName (XTag n _)	= namePrefix n
+      selName (XAttr n )	= namePrefix n
+      selName _			= ""
+
+-- |
+-- select the universal name (namespace uri ++ localPart) of a tag or an attribute tree, else the empty string is returned
+-- see also : 'nameOf', 'namespaceOf'
+
+universalNameOf				:: XmlTree -> String
+universalNameOf
+    = selName . getNode
+      where
+      selName (XTag n _)	= universalName n
+      selName (XAttr n )	= universalName n
+      selName _			= ""
+
+-- |
+-- select the attributes of a dtd tree
+
+attrlOfDTD				:: XmlTree -> Attributes
+attrlOfDTD (NTree (XDTD _ al) _)	= al
+attrlOfDTD _				= []
+
+
+-- |
+-- select a special attribute of a DTD part
+
+valueOfDTD		:: String -> XmlTree -> String
+valueOfDTD n		= lookup1 n . attrlOfDTD
+
+-- |
+-- test an attribute of a DTD part
+
+ofDTDequals	:: String -> String -> XmlTree -> Bool
+ofDTDequals n v	= (== v) . valueOfDTD n
+
+-- -----------------------------------------------------------------------------
+--
+-- convenient functions
+
+xcmt		:: String -> XmlTrees
+xcmt cmt	= [ mkXCmtTree cmt ]
+
+xerr		:: String -> XmlTrees
+xerr msg	= [ mkXErrorTree c_err msg []]
+
+xwarn		:: String -> XmlTrees
+xwarn msg	= [ mkXErrorTree c_warn msg []]
+
+xtext		:: String -> XmlTrees
+xtext t		= [ mkXTextTree t]
+
+xtag		:: String -> XmlTrees -> XmlTrees -> XmlTrees
+xtag t al cl	= [ mkXTagTree t al cl ]
+
+xattr		:: String -> String -> XmlTrees
+xattr n v	= [ mkXAttrTree n (xtext v) ]
+
+-- -----------------------------------------------------------------------------
+--
+-- conversion functions: XmlTrees <-> Attributes
+
+toTreel		:: XmlTrees -> AssocList String XmlTrees
+toTreel
+    = concatMap toTree
+      where
+      toTree (NTree (XAttr n) cs) = [(qualifiedName n, cs)]
+      toTree _			  = []
+
+toAttrl		:: XmlTrees -> Attributes
+toAttrl
+    = map (\ (k,tl) -> (k, xshow tl)) . toTreel
+
+
+fromTreel	:: AssocList String XmlTrees -> XmlTrees
+fromTreel
+    = map (\ (k,tl) -> mkXAttrTree k tl)
+
+fromAttrl	:: Attributes -> XmlTrees
+fromAttrl
+    = fromTreel . map (\ (k,v) -> (k, xtext v))
+
+-- -----------------------------------------------------------------------------
diff --git a/src/Text/XML/HXT/Parser.hs b/src/Text/XML/HXT/Parser.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Parser.hs
@@ -0,0 +1,35 @@
+-- |
+-- Simple parse functions.
+--
+-- the "main" building blocks for an application.
+-- this module exports all important functions for parsing, validating and transforming XML.
+-- it also exports all basic datatypes and functions of the toolbox.
+--
+
+module Text.XML.HXT.Parser
+    ( module Text.XML.HXT.DOM
+
+    , module Text.XML.HXT.Parser.XmlParser
+    , module Text.XML.HXT.Parser.HtmlParser
+    , module Text.XML.HXT.Parser.XmlInput
+    , module Text.XML.HXT.Parser.XmlOutput
+    , module Text.XML.HXT.Parser.DTDProcessing
+    , module Text.XML.HXT.Parser.MainFunctions
+
+    , module Text.XML.HXT.Validator.Validation
+    )
+where
+
+import Text.XML.HXT.DOM
+
+import Text.XML.HXT.Parser.XmlParser
+import Text.XML.HXT.Parser.HtmlParser
+import Text.XML.HXT.Parser.XmlInput
+import Text.XML.HXT.Parser.XmlOutput
+import Text.XML.HXT.Parser.DTDProcessing
+import Text.XML.HXT.Parser.MainFunctions
+
+import Text.XML.HXT.Validator.Validation
+
+-- ------------------------------------------------------------
+
diff --git a/src/Text/XML/HXT/Parser/DTDProcessing.hs b/src/Text/XML/HXT/Parser/DTDProcessing.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Parser/DTDProcessing.hs
@@ -0,0 +1,931 @@
+-- ------------------------------------------------------------
+
+{- |
+   Module     : Text.XML.HXT.Parser.DTDProcessing
+   Copyright  : Copyright (C) 2005 Uwe Schmidt
+   License    : MIT
+
+   Maintainer : Uwe Schmidt (uwe@fh-wedel.de)
+   Stability  : experimental
+   Portability: portable
+
+   DTD processing function for
+   including external parts of a DTD
+   parameter entity substitution and general entity substitution
+
+-}
+
+-- ------------------------------------------------------------
+
+module Text.XML.HXT.Parser.DTDProcessing
+    ( getWellformedDoc
+    , checkWellformedDoc
+    , processDTD
+    , processGeneralEntities
+    )
+where
+
+import Text.XML.HXT.DOM.XmlTree
+
+import Text.XML.HXT.Parser.XmlOutput
+    ( traceTree
+    , traceSource
+    , traceMsg
+    )
+
+import Text.XML.HXT.Parser.XmlParser
+    ( parseXmlDoc
+    , parseXmlDTDPart
+    , parseXmlAttrValue
+    , parseXmlGeneralEntityValue
+    )
+
+import Text.XML.HXT.Parser.XmlDTDParser
+    ( parseXmlDTDdecl
+    , parseXmlDTDdeclPart
+    , parseXmlDTDEntityValue
+    )
+
+import Text.XML.HXT.Parser.XmlInput
+    ( getXmlContents
+    , getXmlEntityContents
+    , runInLocalURIContext
+    , runInNewURIContext
+    , getBaseURI
+    , setBaseURI
+    , getAbsolutURI
+    , isStandaloneDocument
+    )
+
+import Text.XML.HXT.DOM.EditFilters
+    ( transfCharRef
+    , transfAllCharRef
+    )
+
+import Text.XML.HXT.DOM.XmlState
+
+import Data.Maybe
+
+import qualified Data.Map as M
+    ( Map
+    , empty
+    , lookup
+    , insert
+    -- , foldWithKey
+    )
+
+-- ------------------------------------------------------------
+--
+-- the "main" building blocks
+
+-- |
+-- monadic filter for reading, parsing and checking a wellformed document.
+-- the input tree must consist of a root node with a source attribute
+-- in its attribute list.
+--
+-- All attributes from the document root are copied into the system state,
+-- and may be queried by the monadic filters, e.g. trace options.
+--
+-- Result is the single element list containing the well-formed document tree
+-- or, in case of errors, the document root with an empty list as children
+-- and attributes 'a_status' and 'a_module' for error level and the module,
+-- where the error occured.
+--
+-- this is a shortcut for 'getXmlContents' .\>\> 'checkWellformedDoc'
+--
+-- example for a main program:
+--
+-- @
+-- main =
+--   run\' \$
+--   do
+--   res  \<- getWellformedDoc \$ newDocument \"myfile.xml\"
+--   ...
+-- @
+
+getWellformedDoc	:: XmlStateFilter state
+getWellformedDoc
+    = setSystemParams
+      .>>
+      getXmlContents
+      .>>
+      checkWellformedDoc
+
+-- |
+-- parses a text node with 'parseXmlDoc', processes the DTD and general entities
+-- and transforms all char references into characters
+
+checkWellformedDoc		:: XmlStateFilter state
+checkWellformedDoc
+    = parseXmlDoc
+      .>>
+      processDTD
+      .>>
+      processGeneralEntities
+      .>>
+      liftMf transfAllCharRef
+
+-- ------------------------------------------------------------
+--
+
+type RecList		= [String]
+
+type DTDState res	= XState PeEnv res
+
+type DTDStateFilter	= XmlTree -> DTDState XmlTrees
+
+data DTDPart		= Internal
+			| External
+			  deriving (Eq)
+
+-- ------------------------------------------------------------
+
+type PeEnv		= M.Map String XmlTree
+
+emptyPeEnv	:: PeEnv
+emptyPeEnv	= M.empty
+
+lookupPeEnv	:: String -> PeEnv -> Maybe XmlTree
+lookupPeEnv	= M.lookup
+
+addPeEntry	:: String -> XmlTree -> PeEnv -> PeEnv
+addPeEntry	= M.insert
+
+-- ------------------------------------------------------------
+
+-- |
+-- a filter for DTD processing
+--
+-- inclusion of external parts of DTD,
+-- parameter entity substitution
+-- conditional section evaluation
+--
+-- input tree must represent a complete document including root node
+
+processDTD		:: XmlStateFilter a
+processDTD
+    = runInLocalURIContext
+         ( processRoot
+	   .>>
+	   traceTree
+	   .>>
+	   traceSource
+	 )
+      `whenM` ( isRoot .> getChildren )
+      where
+
+      processRoot	:: XmlStateFilter a
+      processRoot t
+	  = do
+	    sequence_ . map (\ (a, ts) -> setSysParamTree a ts) . toTreel . getAttrl $ t
+	    setSysParam a_standalone ""
+	    ( traceMsg 1 ("processDTD: process parameter entities")
+	      .>>
+	      liftMf (modifyChildren addDoctype)
+	      .>>
+	      processChildrenM substParamEntities
+	      .>>
+	      checkResult "in XML DTD processing"
+	      ) `whenM` statusOk
+	      $ t
+
+      -- Adds an empty DOCTYPE node to document. Needed for documents without a DTD.
+      -- Otherwise processor can not substitute predefined entities. If an xml declaration
+      -- is present, the node is inserted after this node.
+      addDoctype :: XmlSFilter
+      addDoctype docChilds
+          = if null doctype
+            then if null xmlDecl
+                 then [mkXDTDTree DOCTYPE [] []] ++ docChilds
+                 else (head docChilds) : [mkXDTDTree DOCTYPE [] []] ++ (tail docChilds)
+            else docChilds
+            where
+            doctype = isDoctype $$ docChilds
+            xmlDecl = isPi t_xml $$ isXPi $$ docChilds
+
+
+substParamEntities	:: XmlStateFilter a
+substParamEntities
+    = processParamEntities
+      `whenM`
+      isDoctype
+      where
+
+      processParamEntities	:: XmlStateFilter a
+      processParamEntities t'
+	  = do
+	    (dtdPre, envPre) <- processPredef
+
+	    -- process internal part of DTD with initial empty env for parameter entities
+	    (dtdInt, envInt) <- processInt envPre t'
+
+	    -- process external part of DTD with resulting env from internal DTD
+	    dtdExt <- runInLocalURIContext (processExt envInt) t'
+
+	    -- merge predefined, internal and external part
+	    trace 2 "substParamEntities: merge internal and external DTD parts"
+	    return (replaceChildren (foldl1 mergeDTDs [dtdPre, dtdInt, dtdExt]) t')
+
+      processPredef
+	  = do
+	    trace 2 "substParamEntities: substitute predefined entities"
+	    chain' emptyPeEnv (substParamEntity Internal $$< predefDTDPart)
+
+      processInt env' n'
+	  = do
+	    trace 2 "substParamEntities: substitute parameter entities in internal DTD part"
+	    chain' env' (substParamEntity Internal $$< getChildren n')
+
+      processExt env' n'
+	  = do
+	    trace 2 "substParamEntities: process external part of DTD"
+            extDtd <- processExternalDTD n'
+	    trace 2 "substParamEntities: substitute parameter entities in external DTD part"
+	    chain env' ( (substParamEntity External) $$< extDtd)
+
+-- ------------------------------------------------------------
+-- |
+-- substitute parameter entities
+-- result is the input tree with the list of text nodes as children or an error message
+
+substPEref'	:: DTDPart -> PeEnv -> XmlFilter
+
+substPEref' loc env n@(NTree (XDTD PEREF al) _)
+    | isInternalRef	= xerr ("a parameter entity reference of " ++ peName' ++ " occurs in the internal subset of the DTD")
+
+    | isUndefinedRef	= xerr ("parameter entity " ++ peName' ++ " not found (forward reference?)")
+
+    | null baseUri	= [setChildren peContent n]
+
+    | otherwise		= [(NTree (XDTD PEREF ((a_url,baseUri):al)) peContent)]
+    where
+    peName		= lookup1 a_peref al
+    peName'		= show peName
+    peVal		= lookupPeEnv peName env
+    isInternalRef	= loc == Internal
+    isUndefinedRef	= isNothing peVal
+
+    (NTree (XDTD PENTITY peAl) peContent) = fromJust peVal
+    baseUri		= lookup1 a_url peAl
+
+    -- peContent		= getChildren $ fromJust peVal
+
+substPEref' _ _ n
+    = [n]
+
+-- ------------------------------------------------------------
+
+{-
+dumpPE	:: DTDStateFilter
+dumpPE t
+    = do
+      env <- getState
+      ( traceMsg 2 ("dumpPE: parameter entity environment\n" ++ M.foldWithKey showPE "" env)
+	.>>
+	thisM ) t
+    where
+    showPE k v b = k ++ "\t" ++ show v ++ "\n" ++ b
+-}
+
+traceDTD	:: String -> XmlStateFilter a
+traceDTD msg	= traceMsg 4 msg .>> traceTree
+
+-- ------------------------------------------------------------
+
+getExternalParamEntityValue	:: DTDStateFilter
+getExternalParamEntityValue n@(NTree (XDTD PENTITY al) _cl)
+    = do
+      rl <- ( getXmlEntityContents
+	      .>>
+	      liftMf getChildren
+	    )
+	    $ newDocument' ((a_source, sysVal) : al)
+      base <- getBaseURI
+      if null rl
+	 then issueErr ("illegal external parameter entity value for entity %" ++ peName ++";") n
+	 else thisM (NTree (XDTD PENTITY ((a_url, base) : al)) rl)
+    where
+    sysVal = lookup1 k_system al
+    peName = lookup1 a_name   al
+
+getExternalParamEntityValue n
+    = error ("getExternalParamEntityValue: illegal argument: " ++ show n)
+
+-- ------------------------------------------------------------
+
+-- |
+-- the dtd parameter entity substitution filter
+
+substParamEntity	:: DTDPart -> DTDStateFilter
+
+substParamEntity loc n@(NTree xn _cs)
+    | isDTDElemNode ENTITY xn					-- ENITITY and parameter ENTITY decl
+	= traceDTD ("ENTITY declaration before DTD declaration parsing")
+	  .>>
+	  processChildrenM (substPeRefsInDTDdecl [])
+          .>>
+	  liftF parseXmlDTDdecl
+          .>>
+	  substRefsInEntityValue
+          .>>
+	  processEntityDecl
+          .>>
+          traceDTD ("ENTITY declaration after DTD declaration parsing")
+          $ n
+
+    | isDTDElemNode PEREF xn					-- parameter entity ref in DTD
+	= substPeRefsInDTDpart [] n
+
+    | isDTDElemNode ELEMENT xn					-- ELEMENT, ATTLIST, NOTATION
+      ||
+      isDTDElemNode ATTLIST xn
+      ||
+      isDTDElemNode NOTATION xn
+	= traceDTD  "DTD declaration before PE substitution"
+	  .>>
+	  processChildrenM (substPeRefsInDTDdecl [])
+          .>>
+	  liftF parseXmlDTDdecl
+          .>>
+	  traceDTD "DTD declaration after DTD declaration parsing"
+	  $ n
+
+    | isDTDElemNode CONDSECT xn					-- conditional section
+      &&
+      loc == Internal
+	  = do
+	    issueErr "conditional sections in internal part of the DTD is not allowed" n
+            return []
+
+    | isDTDElemNode CONDSECT xn					-- conditional section
+      &&
+      loc == External
+	  = let
+	    (XDTD _ al) = xn
+	    content	= mkXTextTree (lookup1 a_value al)
+	    in
+	    traceDTD "substParamEntity: process conditional section"
+	    .>>
+	    processChildrenM (substPeRefsInCondSect [])
+            .>>
+	    liftF parseXmlDTDdecl
+	    .>>
+            evalCond content
+	    $ n
+
+    | isXCmtNode xn						-- remove comments
+	= noneM n
+
+    | otherwise							-- default: keep things unchanged (should not occur)
+	= thisM n
+    where
+
+    processEntityDecl	:: DTDStateFilter
+    processEntityDecl n'@(NTree (XDTD ENTITY al) cs)	= if isExtern
+	  then ( do
+		 url <- getAbsolutURI sysVal			-- add the absolute URI
+		 return [NTree (XDTD ENTITY ((a_url, url) : al)) cs]
+	       )
+	  else liftMf (substChildren (xmlTreesToText . getChildren)) n'
+	where
+	isExtern = hasEntry k_system al
+	sysVal   = lookup1  k_system al
+      
+    processEntityDecl n'@(NTree (XDTD PENTITY al) _)
+	= do
+	  env <- getState
+	  if (isJust . lookupPeEnv peName) $ env
+	     then
+	     issueWarn ("parameter entity " ++ show peName ++ " already defined") n
+	     else
+	     ( ifM isExternalParameterEntity
+	           ( runInLocalURIContext getExternalParamEntityValue )
+                   ( liftMf (substChildren (xmlTreesToText . getChildren)) )
+	       .>>
+	       addPE peName
+	     ) n'
+	  where
+	  peName = lookup1 a_name al
+
+    processEntityDecl n'
+	= error ("processEntityDecl called with wrong argument" ++ show n')
+
+    addPE	:: String -> DTDStateFilter
+    addPE name t
+	= do
+	  trace 2 ("substParamEntity: add entity to env: " ++ xshow [t])
+	  changeState $ addPeEntry name t
+	  return []
+
+    substPEref	:: DTDStateFilter
+    substPEref n'
+	= do
+	  env <- getState
+	  liftF (substPEref' loc env) $ n'
+
+    substPeRefsInValue	:: [String] -> DTDStateFilter
+    substPeRefsInValue recList n'@(NTree (XDTD PEREF al) _cl)
+	= ( if peName `elem` recList
+	    then issueErr ("recursive call of parameter entity " ++ show peName ++ " in entity value")
+	    else ( substPEref
+		   .>>
+		   liftF parseXmlDTDEntityValue
+		   .>>
+		   liftF transfCharRef
+		   .>>
+		   ( substPeRefsInValue (peName : recList)
+		     `whenM`
+		     isPeRef
+		   )
+		 )
+	  ) $ n'
+	where
+	peName = lookup1 a_peref al
+
+    substPeRefsInValue _ n'
+	= thisM n'
+
+    substRefsInEntityValue	:: DTDStateFilter
+    substRefsInEntityValue n'@(NTree (XDTD decl al) _cl)
+	| decl `elem` [ENTITY, PENTITY]
+	    = ( if hasEntry k_system al
+		then thisM							-- externals not yet handled ??? really
+		else processChildrenM ( liftF transfCharRef
+					.>>
+					substPeRefsInValue []
+				      )
+	      ) n'
+    substRefsInEntityValue  n'
+	= error ("substRefsInEntityValue called with wrong argument" ++ show n')
+
+    runInPeContext	:: DTDStateFilter -> DTDStateFilter
+    runInPeContext f n'@(NTree (XDTD PEREF al) _)
+	| null base
+	    = f n'
+	| otherwise
+	    = runInNewURIContext base f n'
+	where
+	base = lookup1 a_url al
+
+    runInPeContext f n'
+	= f n'
+
+    substPeRefsInDTDdecl	:: [String] -> DTDStateFilter
+    substPeRefsInDTDdecl recList n'@(NTree (XDTD PEREF al) _cl)
+	= ( if peName `elem` recList
+	    then issueErr ("recursive call of parameter entity " ++ show peName ++ " in DTD declaration")
+	    else ( substPEref
+		   .>>
+		   traceDTD "substPeRefsInDTDdecl: parseXmlDTDdeclPart"
+		   .>>
+		   ( runInPeContext
+		     ( liftF ( parseXmlDTDdeclPart )
+		       .>>
+		       traceDTD "substPeRefsInDTDdecl: after parseXmlDTDdeclPart"
+		       .>>
+		       processChildrenM ( substPeRefsInDTDdecl (peName : recList) )
+		     )
+		     `whenM`
+		     isPeRef
+		   )
+		 )
+	  ) $ n'
+	where
+	peName = lookup1 a_peref al
+
+    substPeRefsInDTDdecl _ n'
+	= thisM n'
+
+    substPeRefsInDTDpart	:: [String] -> DTDStateFilter
+    substPeRefsInDTDpart recList n'@(NTree (XDTD PEREF al) _cl)
+	= ( if peName `elem` recList
+	    then issueErr ("recursive call of parameter entity " ++ show peName ++ " in DTD part")
+	    else ( substPEref
+		   .>>
+		   traceDTD "substPeRefsInDTDpart: parseXmlDTDPart"
+		   .>>
+		   runInPeContext
+		   ( liftF (getChildren .> parseXmlDTDPart ("parameter entity " ++ show peName))
+		     .>>
+		     traceDTD "substPeRefsInDTDdecl: after parseXmlDTDPart"
+		     .>>
+		     substParamEntity loc -- cyclic check not yet done (peName : recList)
+		   )
+		 )
+	  ) $ n'
+	where
+	peName = lookup1 a_peref al
+
+    substPeRefsInDTDpart _ n'
+	= thisM n'
+
+    substPeRefsInCondSect	:: [String] -> DTDStateFilter
+    substPeRefsInCondSect recList n'@(NTree (XDTD PEREF al) _cl)
+	= ( if peName `elem` recList
+	    then issueErr ("recursive call of parameter entity " ++ show peName ++ " in conditional section")
+	    else ( substPEref
+		   .>>
+		   traceDTD "substPeRefsInCondSect: parseXmlDTDdeclPart"
+		   .>>
+		   ( runInPeContext
+		     ( liftF ( parseXmlDTDdeclPart )
+		       .>>
+		       traceDTD "substPeRefsInCondSect: after parseXmlDTDdeclPart"
+		       .>>
+		       processChildrenM ( substPeRefsInCondSect (peName : recList) )
+		     )
+		     `whenM`
+		     isPeRef
+		   )
+		 )
+	  ) $ n'
+	where
+	peName = lookup1 a_peref al
+
+    substPeRefsInCondSect _ n'
+	= thisM n'
+
+
+evalCond :: XmlTree -> DTDStateFilter
+evalCond content (NTree n _)
+    | c == k_include
+	= liftF (parseXmlDTDPart "conditional section")
+	  .>>
+	  traceDTD "evalCond: DTD part"
+	  .>>
+	  substParamEntity External
+          $ content 
+    | otherwise
+	= return []
+    where
+    c = textOfXNode n
+
+-- ------------------------------------------------------------
+
+processExternalDTD	:: XmlStateFilter a
+processExternalDTD n@(NTree (XDTD DOCTYPE al) _dtd)
+    | null sysVal
+	= return []
+    | otherwise
+	= do
+	  checkStandalone
+	  dtdContent <- ( getXmlEntityContents
+			  .>>
+			  traceMsg 2 ("processExternalDTD: parsing DTD part for " ++ show sysVal)
+			  .>>
+			  liftMf getChildren
+			  .>>
+			  liftF (parseXmlDTDPart sysVal)
+			)
+		       $ newDocument sysVal
+	  trace 2 "processExternalDTD: parsing DTD part done"
+	  traceTree $ mkRootTree [] dtdContent
+	  return dtdContent
+    where
+    sysVal		= lookup1 k_system al
+    checkStandalone	= do
+			  _isAlone <- isStandaloneDocument
+			  if False -- isAlone
+			     then issueErr ("external DTD " ++ show sysVal ++ " specified for standalone document") n
+			     else return []
+
+processExternalDTD  _
+    = return []
+
+-- ------------------------------------------------------------
+-- |
+-- merge the external and the internal part of a DTD into one internal part.
+-- parameter entity substitution should be made before applying this filter
+-- internal definitions shadow external ones
+--
+--
+-- preliminary: no real merge is done
+
+mergeDTDs	:: XmlTrees -> XmlTrees -> XmlTrees
+mergeDTDs dtdInt dtdExt
+    = dtdInt ++ (mergeDTDentry dtdInt $$ dtdExt)
+
+mergeDTDentry	:: XmlTrees -> XmlFilter
+mergeDTDentry dtdPart
+    = none `when` found
+      where
+      filterList = map filterDTDNode dtdPart	-- construct the list of filters
+      found      = cat filterList		-- concatenate the filters (set union)
+
+
+filterDTDNode	:: XmlTree -> XmlFilter
+
+filterDTDNode (NTree (XDTD dtdElem al) _)
+    | dtdElem `elem` [ELEMENT, NOTATION, ENTITY]
+	= filterElement
+	  where
+	  filterElement n@(NTree (XDTD dtdElem' al') _cl')
+	      | dtdElem == dtdElem' &&
+		lookup a_name al' == lookup a_name al
+		  = [n]
+	      | otherwise
+		  = []
+	  filterElement _
+	      = []
+
+filterDTDNode (NTree (XDTD ATTLIST al) _)
+    = filterAttlist
+      where
+      filterAttlist n@(NTree (XDTD ATTLIST al') _cl')
+	  | lookup a_name  al' == lookup a_name  al &&
+	    lookup a_value al' == lookup a_value al
+		= [n]
+      filterAttlist _
+	  = []
+
+filterDTDNode _
+    =  none
+
+-- ------------------------------------------------------------
+
+predefinedEntities	:: String
+predefinedEntities
+    = concat [ "<!ENTITY lt   '&#38;#60;'>"
+	     , "<!ENTITY gt   '&#62;'>"
+	     , "<!ENTITY amp  '&#38;#38;'>"
+	     , "<!ENTITY apos '&#39;'>"
+	     , "<!ENTITY quot '&#34;'>"
+	     ]
+
+predefDTDPart		:: XmlTrees
+predefDTDPart
+    = parseXmlDTDPart "predefined entities" $ mkXTextTree predefinedEntities
+
+-- ------------------------------------------------------------
+--
+-- 4.4 XML Processor Treatment of General Entities and References
+
+data GeContext
+    = ReferenceInContent
+    | ReferenceInAttributeValue
+    | ReferenceInEntityValue
+    -- or OccursInAttributeValue				-- not used during substitution but during validation
+    -- or ReferenceInDTD					-- not used: syntax check detects errors
+
+type GeFct		= GeContext -> RecList -> GeStateFilter
+
+type GeState res	= XState GeEnv res
+
+type GeStateFilter	= XmlTree -> GeState XmlTrees
+
+-- ------------------------------------------------------------
+
+newtype GeEnv	= GeEnv (M.Map String GeFct)
+
+emptyGeEnv	:: GeEnv
+emptyGeEnv	= GeEnv M.empty
+
+lookupGeEnv		:: String -> GeEnv -> Maybe GeFct
+lookupGeEnv k (GeEnv env)
+    = M.lookup k env
+
+addGeEntry	:: String -> GeFct -> GeEnv -> GeEnv
+addGeEntry k a (GeEnv env)
+    = GeEnv $ M.insert k a env
+
+-- ------------------------------------------------------------
+
+-- |
+-- substitution of general entities
+--
+-- input: a complete document tree including root node
+
+processGeneralEntities	:: XmlStateFilter a
+processGeneralEntities
+    = ( traceMsg 1 "processGeneralEntities: collect and substitute general entities"
+	.>>
+	processEntities
+	.>>
+	checkResult "in general entity processing"
+	.>>
+	traceTree
+	.>>
+	traceSource
+      )
+      `whenM` statusOk
+      where
+      processEntities t'
+	  = do
+	    res <- chain initialEnv (processGeneralEntity ReferenceInContent [] $$< getChildren t')
+	    return $ replaceChildren res t'
+	    where
+	    initialEnv = emptyGeEnv
+
+-- ------------------------------------------------------------
+
+processGeneralEntity	:: GeContext -> RecList -> GeStateFilter
+processGeneralEntity cx rl n@(NTree (XDTD DOCTYPE _) dtdPart)
+    = do
+      res <- processGeneralEntity cx rl $$< dtdPart
+      return $ replaceChildren res n
+
+processGeneralEntity cx rl n@(NTree (XDTD ENTITY al) cl)
+    | isIntern
+	= do
+	  trace 2 ("processGeneralEnity: general entity definition for " ++ show name)
+	  value <- liftF (parseXmlGeneralEntityValue ("general internal entity " ++ show name)) $ mkXTextTree (xshow cl)
+	  res   <- processGeneralEntity ReferenceInEntityValue (name:rl) $$< value
+	  insertEntity name (substInternal res)
+    | isExtern
+	= do
+	  baseUri <- getBaseURI
+	  insertEntity name (substExternalParsed1Time baseUri)
+
+    | isUnparsed
+	= do
+	  trace 2 ("processGeneralEnity: unparsed entity definition for " ++ show name)
+	  insertEntity name (substUnparsed [])
+    where
+    isUnparsed	= not isIntern && not isExtern
+    isExtern	= not isIntern && not (hasEntry k_ndata al)
+    isIntern	= not (hasEntry k_system al)
+
+    name	= lookup1 a_name   al
+    -- sysVal	= lookup1 k_system al
+    url		= lookup1 a_url    al		-- a_url contains absolut url for k_system
+    context	= addEntry a_source url al
+
+    processExternalEntityContents	:: XmlTrees -> GeState XmlTrees
+    processExternalEntityContents cl'
+	| null cl'						-- reading content did not succeed
+	    = return []
+	| null txt'						-- something weird in entity content
+	    = do
+	      issueErr ("illegal external parsed entity value for entity " ++ show name) n
+	      return []
+	| otherwise						-- o.k.: parse the contents
+	    = do
+	      res' <- liftF (parseXmlGeneralEntityValue ("external parsed entity " ++ show name)) $$< txt'
+	      ( traceSource
+		.>>
+		traceTree ) $ mkRootTree (fromAttrl context) res'
+	      return res'
+	where
+	txt' = (getChildren .> isXText) $$ cl'
+
+    insertEntity	:: String -> GeFct -> GeState XmlTrees
+    insertEntity name' fct'
+	= do
+	  geEnv' <- getState
+	  case lookupGeEnv name' geEnv' of
+	    Just _fct
+		-> do
+		   issueWarn ("entity " ++ show name ++ " already defined, repeated definition ignored") n
+		   return []
+            Nothing
+		-> do
+		   changeState $ addGeEntry name' fct' 
+		   return $ this n
+
+    -- --------
+    --
+    -- 4.4 XML Processor Treatment of Entities and References
+
+    substInternal	:: XmlTrees -> GeContext -> RecList -> GeStateFilter
+    substInternal nl ReferenceInContent rl' _n'
+	= included nl rl'
+
+    substInternal nl ReferenceInAttributeValue rl' _n'
+	= includedInLiteral nl rl'
+
+    substInternal _nl ReferenceInEntityValue _rl n'
+	= bypassed n'
+
+    -- --------
+
+    substExternalParsed1Time	:: String -> GeContext -> RecList -> GeStateFilter
+    substExternalParsed1Time baseUri' cx' rl' n'
+	= do
+	  trace 2 ("substExternalParsed1Time: read and parse external parsed entity " ++ show name)
+	  res  <- runInLocalURIContext getContents' $ newDocument' context
+	  changeState $ addGeEntry name (substExternalParsed res)
+	  substExternalParsed res cx' rl' n' 
+	  where
+	  getContents'	:: GeStateFilter
+	  getContents' t''
+	      = do
+		setBaseURI baseUri'
+		rs' <- getXmlEntityContents t''
+		processExternalEntityContents rs'
+
+
+    substExternalParsed	:: XmlTrees -> GeContext -> RecList -> GeStateFilter
+    substExternalParsed  nl ReferenceInContent rl' _n'
+	= includedIfValidating nl rl'
+
+    substExternalParsed _nl ReferenceInAttributeValue _rl _n'
+	= forbidden "external parsed general" "in attribute value"
+
+    substExternalParsed _nl ReferenceInEntityValue _rl n'
+	= bypassed n'
+
+    -- --------
+
+    substUnparsed	:: XmlTrees -> GeContext -> RecList -> GeStateFilter
+    substUnparsed _nl ReferenceInContent _rl _n'
+	= forbidden "unparsed" "content"
+    substUnparsed _nl ReferenceInAttributeValue _rl _n'
+	= forbidden "unparsed" "attribute value"
+    substUnparsed _nl ReferenceInEntityValue _rl _n'
+	= forbidden "unparsed" "entity value"
+
+    -- --------
+							-- see XML 1.0 chapter:
+
+    included nl	rl'					-- 4.4.2
+	= processGeneralEntity cx (name:rl') $$< nl
+
+    includedIfValidating				-- 4.4.3
+	= included
+
+    includedInLiteral					-- 4.4.5
+	= included
+
+    bypassed n'						-- 4.4.7
+	= return $ this n'
+
+    forbidden msg' cx'					-- 4.4.4
+	= do
+	  issueErr ("reference of " ++ msg' ++ show name ++ " forbidden in " ++ cx') n
+          return []
+
+							-- normalize default value in ATTLIST
+processGeneralEntity _cx rl n@(NTree (XDTD ATTLIST al) _cl)
+    | hasDefaultValue
+	= do
+	  res <- ( liftF (parseXmlAttrValue "default value of attribute ")
+                   .>>
+		   substGeneralEntityInAValue rl
+		 ) $ mkXTextTree defaultValue
+	  return $ addDTDAttr a_default (xshow res) n
+    | otherwise
+	= return $ this n
+    where
+    hasDefaultValue = hasEntry  a_default al
+    defaultValue    = lookup1   a_default al
+
+processGeneralEntity cx rl n@(NTree (XEntityRef name) _)
+    = do
+      trace 2 ("processGeneralEnity: entity reference for entity " ++ show name)
+      trace 3 ("recursion list = " ++ show rl)
+      geEnv <- getState
+      case lookupGeEnv name geEnv of
+        Just fct
+	  -> if name `elem` rl
+	     then do
+		  issueErr ("recursive substitution of general entity reference " ++ show ref ++ " not processed") n
+		  return nl
+	     else do
+		  fct cx rl n
+        Nothing
+	  -> do
+	     issueErr ("general entity reference " ++ show ref ++ " not processed, no definition found, (forward reference?)") n
+	     return nl
+      where
+      nl  = this n
+      ref = xshow nl
+
+
+processGeneralEntity cx rl n@(NTree (XTag _tagName al) cl)
+    = do
+      al' <- substGeneralEntityInAttr rl $$< al
+      cl' <- processGeneralEntity cx rl  $$< cl
+      return $ (replaceAttrl al' .> replaceChildren cl') n
+
+processGeneralEntity _cx _rl n
+    = return $ this n
+
+-- ------------------------------------------------------------
+
+substGeneralEntityInAttr	:: RecList -> XmlTree -> GeState XmlTrees
+substGeneralEntityInAttr rl a@(NTree (XAttr _) aValue)
+    = do
+      nv <- substGeneralEntityInAValue rl $$< aValue
+      return (replaceChildren nv a)
+
+substGeneralEntityInAttr _ _
+    = return []
+
+substGeneralEntityInAValue	:: RecList -> GeStateFilter
+substGeneralEntityInAValue rl
+    = ( processGeneralEntity ReferenceInAttributeValue rl
+	`whenM`
+	isXEntityRef
+      )
+      .>>
+      liftMf ( ( modifyText normalizeWhiteSpace `when` isXText)
+	      .>
+	      (transfCharRef `when` isXCharRef)
+	    )
+      where
+      normalizeWhiteSpace
+	  = map ( \c -> if c `elem` "\n\t\r" then ' ' else c )
+
+-- ------------------------------------------------------------
+
+
diff --git a/src/Text/XML/HXT/Parser/DefaultURI.hs b/src/Text/XML/HXT/Parser/DefaultURI.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Parser/DefaultURI.hs
@@ -0,0 +1,47 @@
+-- ------------------------------------------------------------
+--
+-- defaut uri computation
+-- this routine is platform dependent
+-- and must be exchanged when porting the toolbox e.g. to windows
+
+module Text.XML.HXT.Parser.DefaultURI
+    ( setDefaultURI
+    )
+
+where
+
+import Text.XML.HXT.DOM.XmlTree
+
+import Text.XML.HXT.DOM.XmlState
+
+import System.Directory
+    ( getCurrentDirectory
+    )
+
+import Network.URI
+    ( escapeURIChar
+    , isUnescapedInURI
+    )
+
+setDefaultURI   :: XState state ()
+setDefaultURI
+     = do
+       wd <- io getCurrentDirectory
+       setSysParam transferDefaultURI ("file://" ++ normalize wd ++ "/")
+
+       where
+
+       -- under Windows getCurrentDirectory returns something like: "c:\path\to\file"
+       -- backslaches are not allowed in URIs and paths must start with a /
+       -- so this is transformed into "/c:/path/to/file"
+
+       normalize wd'@(d : ':' : _)
+	   | d `elem` ['A'..'Z'] || d `elem` ['a'..'z']
+	       = '/' : concatMap win32ToUriChar wd'
+       normalize wd'
+	   = concatMap escapeNonUriChar wd'
+				 
+       win32ToUriChar '\\' = "/"
+       win32ToUriChar c    = escapeNonUriChar c
+
+       escapeNonUriChar c  = escapeURIChar isUnescapedInURI c   -- from Network.URI
diff --git a/src/Text/XML/HXT/Parser/HtmlParser.hs b/src/Text/XML/HXT/Parser/HtmlParser.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Parser/HtmlParser.hs
@@ -0,0 +1,170 @@
+-- ------------------------------------------------------------
+
+{- |
+   Module     : Text.XML.HXT.Parser.HtmlParser
+   Copyright  : Copyright (C) 2005 Uwe Schmidt
+   License    : MIT
+
+   Maintainer : Uwe Schmidt (uwe@fh-wedel.de)
+   Stability  : stable
+   Portability: portable
+
+   This parser tries to interprete everything as HTML
+   no errors are emitted during parsing. If something looks
+   weired, warning messages are inserted in the document tree.
+  
+   Module contains state filter for easy parsing and error handling
+   real work is done in 'Text.XML.HXT.Parser.HtmlParsec'
+
+-}
+
+-- ------------------------------------------------------------
+
+module Text.XML.HXT.Parser.HtmlParser
+    ( getHtmlDoc
+    , parseHtmlDoc
+    , runHtmlParser
+    , substHtmlEntities
+    , module Text.XML.HXT.Parser.HtmlParsec
+    )
+
+where
+
+import Text.XML.HXT.DOM.XmlTree
+import Text.XML.HXT.DOM.XmlState
+import Text.XML.HXT.Parser.HtmlParsec
+
+import Text.XML.HXT.Parser.XmlInput
+    ( getXmlContents
+    )
+
+import Text.XML.HXT.Parser.XmlOutput
+    ( traceTree
+    , traceSource
+    , traceMsg
+    )
+
+import Text.XML.HXT.Parser.XhtmlEntities
+    ( xhtmlEntities
+    )
+
+-- ------------------------------------------------------------
+
+-- |
+-- read a document and parse it with 'parseHtmlDoc'. The main entry point of this module
+--
+-- The input tree must be a root tree like in '	Text.XML.HXT.Parser.MainFunctions.getXmlDoc'. The content is read with 'Text.XML.HXT.Parser.XmlInput.getXmlContents',
+-- is parsed with 'parseHtmlDoc' and canonicalized (char refs are substituted in content and attributes,
+-- but comment is preserved)
+--
+-- see also : 'Text.XML.HXT.Parser.DTDProcessing.getWellformedDoc'
+
+getHtmlDoc	:: XmlStateFilter state
+getHtmlDoc
+    = setSystemParams
+      .>>
+      getXmlContents
+      .>>
+      parseHtmlDoc
+
+-- | The HTML parsing filter
+--
+-- The input is parsed with 'runHtmlParser', everything is interpreted as HTML,
+-- if errors ocuur, the parser will try to do some meaningfull action and continues
+-- parsing. Afterwards the entitiy references for defined for XHTML are resovled,
+-- any unresolved reference is transformed into plain text.
+--
+-- Error messages
+-- during parsing and entity resolving are added as warning nodes into the resulting tree.
+--
+-- The warnings are issued, if the 1. parameter noWarnings is set to True,
+-- afterwards all are removed from the resulting tree.
+
+parseHtmlDoc	:: XmlStateFilter a
+parseHtmlDoc
+    = parseDoc
+      `whenM` ( isRoot .> getChildren .> isXText )
+      where
+      parseDoc t'
+	  = ( traceMsg 2 ("parseHtmlDoc: parse HTML document " ++ show loc)
+	      .>>
+	      runHtmlParser
+	      .>>
+	      liftMf (processTopDown substHtmlEntities)
+	      .>>
+	      removeWarnings
+	      .>>
+	      traceTree
+	      .>>
+	      traceSource
+              ) $ t'
+	  where
+	  loc    = valueOf a_source t'			-- get document source uri
+
+      removeWarnings	:: XmlStateFilter a
+      removeWarnings t'
+	  = let
+	    noWarnings  = not (satisfies (hasOption a_issue_warnings) t')
+	    selWarnings = deep
+			  ( choice [ isWarning :-> this
+				   , isXTag    :-> (getAttrl .> selWarnings)
+				   ]
+			  )
+	    remWarnings = processTopDown
+			  ( choice [ isWarning :-> none
+				   , isXTag    :-> (processAttrl (remWarnings $$))
+				   , this      :-> this
+				   ]
+			  )
+	    warnings = selWarnings t'
+	    in do 
+	       if null warnings
+		  then thisM t'
+		  else do
+		       if noWarnings
+			  then return []
+			  else do
+			       issueError $$< warnings
+		       return (remWarnings t')
+
+-- | The pure HTML parser, usually called via 'parseHtmlDoc'.
+--
+
+runHtmlParser	:: XmlStateFilter a
+runHtmlParser t
+    = if null errs
+      then do
+	   return (replaceChildren res t)
+      else do
+	   issueError $$< errs
+	   return (setStatus c_err "parsing HTML" t)
+      where
+      res  = getChildren .> parseHtmlText loc $ t
+      errs = isXError .> neg isWarning $$ res
+      loc  = valueOf a_source t
+
+
+-- ------------------------------------------------------------
+--
+-- XHTML entities
+
+substHtmlEntities	:: XmlTree -> XmlTrees
+substHtmlEntities
+    = choice [ isXEntityRef	:-> substEntity
+	     , isXTag		:-> processAttr (processChildren substHtmlEntities)
+	     , this		:-> this
+	     ]
+      where
+      substEntity t'@(NTree (XEntityRef en) _)
+	  = case (lookup en xhtmlEntities) of
+	    Just i
+		-> [mkXCharRefTree i]
+	    Nothing
+		-> xwarn ("no XHTML entity found for reference: \"&" ++ en ++ ";\"")
+		   ++
+		   (xmlTreesToText [t'])
+
+      substEntity _
+	  = error "substHtmlEntities: illegal argument"
+
+-- ------------------------------------------------------------
diff --git a/src/Text/XML/HXT/Parser/MainFunctions.hs b/src/Text/XML/HXT/Parser/MainFunctions.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Parser/MainFunctions.hs
@@ -0,0 +1,455 @@
+-- |
+-- Simple parse functions.
+--
+-- the main building blocks for an application.
+-- this module exports complex filters and functions for
+-- common tasks for input and parsing, output and option handling.
+--
+
+module Text.XML.HXT.Parser.MainFunctions
+    ( getXmlDocument
+    , putXmlDocument
+
+    , parseDocument
+    , writeDocument
+    )
+where
+
+import Text.XML.HXT.DOM.XmlTree
+import Text.XML.HXT.DOM.XmlState
+import Text.XML.HXT.Parser.HtmlParser
+import Text.XML.HXT.Parser.XmlInput
+import Text.XML.HXT.Parser.XmlOutput
+import Text.XML.HXT.Parser.DTDProcessing
+import Text.XML.HXT.Validator.Validation
+import Text.XML.HXT.DOM.EditFilters
+import Text.XML.HXT.DOM.Namespace
+
+import System.IO
+
+-- ------------------------------------------------------------
+
+-- |
+-- convenient function for reading a XML document without
+-- dealing with state monads, error messages collection and other details
+--
+-- getXmlDocument calls 'parseDocument' with the list of parsing options
+-- and an url or filename as document source.
+--
+-- result is a triple
+--
+-- * the resulting document tree with a root node containing all
+--   meta info about the document (options, status info, http header, ...)
+--
+-- - the list of errors and warnings
+--
+-- - the error level: one of 'c_ok', 'c_warn', 'c_err', 'c_fatal'
+--
+-- example for input (see also example in 'putXmlDocument' and example in 'writeDocument')
+--
+-- > main :: IO ()
+-- > main
+-- >   = do
+-- >     (res, errs, rc) <- getXmlDocument [] "test.xml"
+-- >     if rc >= c_err
+-- >       then issueErrors errs
+-- >       else processTree res
+-- >
+-- > issueErrors :: XmlTrees -> IO ()
+-- >
+-- > processTree :: XmlTree  -> IO ()
+--
+-- for options see 'parseDocument', 'a_collect_errors' is set implicitly
+
+getXmlDocument	:: Attributes -> String -> IO (XmlTree, XmlTrees, Int)
+getXmlDocument options url
+    = do
+      let options' = [ (a_collect_errors, v_1)		-- collect errors
+		     , (a_issue_errors,   v_0)		-- but don't issue
+		     ]					-- can be overwritten by supporting other values in options
+	             ++
+		     options
+		     ++
+		     [ (a_source, url)			-- set the source url
+		     ]
+      res <- run' $ parseDocument options' emptyRoot
+      let root = head res
+      let errs = tail res
+      let elvl = intValueOf a_status root
+      return (root, errs, elvl)
+
+
+-- |
+-- the inverse operation to 'getXmlDocument'
+--
+-- writes a complete document tree to a file, writing can be
+-- controlled by options, the real work is done with filter 'writeDocument'.
+-- useful options are the options of 'writeDocument'.
+--
+-- result is a pair: 1.part is a list of error messages, 2. part is the return code,
+-- the status info of the write filter
+--
+-- this filter is useful, when processing XML in an arbitray context in the IO monad
+--
+-- an example main program for such an application is:
+--
+-- > main :: IO ()
+-- > main
+-- >   = do
+-- >     (input, readErrs, rc) <- getXmlDocument [...] "test.xml"
+-- >     if rc >= c_err
+-- >       then issueErrors readErrs
+-- >       else processTree input
+-- >
+-- > processTree :: XmlTree -> IO ()
+-- > processTree t
+-- >   = let res = computeNewTree input
+-- >     in do
+-- >        (writeErrs, rc2) <- putXmlDocument [...] "out.xml" res
+-- >        if rc2 >= c_err
+-- >          then issueErrors writeErrs
+-- >          else return ()
+-- >
+-- > issueErrors :: XmlTrees -> IO ()
+-- >
+-- > computeNewTree :: XmlTree -> XmlTree
+
+
+putXmlDocument	:: Attributes -> String -> XmlTree -> IO (XmlTrees, Int)
+putXmlDocument options fileName t
+    = do
+      let options' = [ (a_collect_errors, v_1)		-- collect errors
+		     , (a_issue_errors,   v_0)		-- but don't issue
+		     ]					-- can be overwritten by supporting other values in options
+	             ++
+		     options
+		     ++
+		     [ (a_output_file, fileName)	-- set the source url
+		     ]
+      res <- run' $ writeDocument options' t
+      let root = head res
+      let errs = tail res
+      let elvl = intValueOf a_status root
+      return (errs, elvl)
+
+-- ------------------------------------------------------------
+
+-- |
+-- the main parsing filter
+--
+-- this filter can be configured by an option list, a list of
+-- option name, option value pairs.
+-- the input tree must be a possibly empty document root tree.
+-- all the options are stored as attributes in this root node to control processing.
+--
+-- available options:
+--
+-- * 'a_parse_html': use HTML parser, else use XML parser (default)
+--
+-- - 'a_validate' : validate document (default), else skip validation
+--
+-- - 'a_check_namespaces' : check namespaces, else skip namespace processing (default)
+--
+-- - 'a_canonicalize' : canonicalize document (default), else skip canonicalization
+--
+-- - 'a_preserve_comment' : preserve comments during canonicalization, else remove comments (default)
+--
+-- - 'a_remove_whitespace' : remove all whitespace, used for document indentation, else skip this step (default)
+--
+-- - 'a_indent' : indent document by inserting whitespace, else skip this step (default)
+--
+-- - 'a_issue_warnings' : issue warnings, when parsing HTML (default), else ignore HTML parser warnings
+--
+-- - 'a_issue_errors' : issue all error messages on stderr (default), or ignore all error messages
+--
+-- - 'a_collect_errors' : all error messages are collected during processing and appended to the result document
+-- 			  for further processing within the calling modules
+--
+-- - 'a_trace' : trace level: values: 0 -4
+--
+-- - 'a_proxy' : proxy for http access, e.g. www-cache:3128
+--
+-- - 'a_use_curl' : for http access via external programm curl, default is native HTTP access
+--
+-- - 'a_options_curl' : more options for external program curl
+--
+-- - 'a_source' : the document source url
+--
+-- - 'a_encoding' : default document encoding ('utf8', 'isoLatin1', 'usAscii', ...)
+--
+-- examples:
+--
+-- > parseDocument [ (a_source,   "test.xml")
+-- >               , (a_validate, "0")
+-- >               , (a_encoding, isoLatin1)
+-- >               ] emptyRoot
+--
+-- reads document \"test.xml\" without validation and default encoding 'isoLatin1'
+--
+-- > parseDocument [ (a_source,         "http://www.haskell.org/")
+-- >               , (a_parse_html,     "1")
+-- >               , (a_proxy,          "www-cache:3128")
+-- >               , (a_curl,           "1")
+-- >               , (a_issue_warnings, "0")
+-- >               ] emptyRoot
+--
+-- reads Haskell homepage with HTML parser ignoring any warnings and with http access via external program curl and proxy \"www-cache\" at port 3128
+--
+-- > parseDocument [ (a_source,            "http://www.w3c.org/")
+-- >               , (a_parse_html,        "0")                       -- default
+-- >               , (a_validate,          "1")                       -- default
+-- >               , (a_check_namespace,   "1")
+-- >               , (a_remove_whitespace, "1")
+-- >               , (a_trace,             "2")
+-- >               ] emptyRoot
+--
+-- read w3c home page, validate and chech namespaces, remove whitespace between tags, trace activities with level 2
+--
+-- > parseDocument [ (a_source,   "test.xml")
+-- >               , (a_validate,        "1")
+-- >               , (a_check_namespace, "1")
+-- >               , (a_collect_errors,  "1")
+-- >               , (a_issue_errors,    "0")
+-- >               ] emptyRoot
+--
+-- reads file \"test.xml\", validates it, checks namespaces, does not issue any erros
+-- but collects errors and appends the list of errors to the single element list for the document.
+-- this enables the calling application to define own error handlers.
+
+parseDocument	:: Attributes -> XmlStateFilter state
+parseDocument userOptions
+    = processDocument userOptions defaultOptions
+      ( traceMsg 1 "parseDocument: options added, start processing"
+	.>>
+	traceTree
+	.>>
+	getXmlContents					-- get the content as text
+	.>>
+	choiceM						-- select parser
+	[ hasOption a_parse_html
+		:-> parseHtmlDoc			-- parse everything as HTML
+	, this
+		:-> checkWellformedDoc			-- parse XML and process entities
+	            .>>
+                    ( getValidatedDoc			-- validate
+		      `whenM`
+		      hasOption a_validate
+		    )
+	]
+	.>>
+	( propagateAndValidateNamespaces			-- namespace processing
+	  `whenM`
+	  hasOption a_check_namespaces
+	)
+	.>>
+	liftMf						-- canonicalization
+	( choice
+	  [ hasOption a_preserve_comment		-- don't remove comments (in XPath required)
+ 	  	:-> canonicalizeForXPath
+	  , this
+		:-> canonicalizeAllNodes		-- do normal canonicaliazion
+	  ]
+	  `when`
+	  hasOption a_canonicalize			-- caconicalization can be switched off
+	)
+	.>>
+	liftMf
+	( removeDocWhiteSpace				-- remove all whitespace between tags
+	  `when`
+	  hasOption a_remove_whitespace
+	)
+	.>>
+	traceMsg 1 "parseDocument: document processed"	-- trace output
+	.>>
+	traceSource
+	.>>
+	traceTree
+      )
+    where
+    defaultOptions
+	= [ ( a_parse_html,		v_0 )
+	  , ( a_validate,		v_1 )
+	  , ( a_issue_errors,		v_1 )
+	  , ( a_issue_warnings,		v_1 )
+	  , ( a_check_namespaces,	v_0 )
+	  , ( a_canonicalize,		v_1 )
+	  , ( a_preserve_comment,	v_0 )
+	  , ( a_remove_whitespace,	v_0 )
+	  ]
+
+-- ------------------------------------------------------------
+
+addOptions		:: Attributes -> XmlFilter
+addOptions
+    = seqF . map (\ (n,v) -> addAttr n v )
+
+addDefaultOptions	:: Attributes -> XmlFilter
+addDefaultOptions
+    = seqF . map (\ (n,v) -> addAttr n v `whenNot` hasAttr n)
+
+-- ------------------------------------------------------------
+
+-- |
+-- the main filter for writing documents
+--
+-- this filter can be configured by an option list like 'getXmlDocument'
+--
+-- available options are
+--
+-- * 'a_indent' : indent document for readability, (default: no indentation)
+--
+-- - 'a_remove_whitespace' : remove all redundant whitespace for shorten text (default: no removal)
+--
+-- - 'a_output_file' : destination file for document, default is \"-\" for stdout
+--
+-- - 'a_output_encoding' : encoding of document, default is 'a_encoding' or 'utf8'
+--
+-- - 'a_output_xml' : (default) issue XML: quote special XML chars \>,\<,\",\',&
+--                    add XML processing instruction
+--                    and encode document with respect to 'a_output_encoding',
+--                    if explizitly switched of, the plain text is issued, this is useful
+--                    for non XML output, e.g. generated Haskell code, LaTex, Java, ...
+--
+-- - 'a_show_tree' : show tree representation of document (for debugging)
+--
+-- - 'a_show_haskell' : show Haskell representaion of document (for debugging)
+--
+-- - 'a_issue_errors', 'a_collect_errors' : see 'parseDocument'
+--
+--  a typical main program running in the XmlState monad
+--  has the following structure:
+--
+-- >
+-- > main :: IO ()
+-- > main
+-- >     = do
+-- >       argv <- getArgs                                              -- get the commandline arguments
+-- >       (inp, outp, options) <- cmdlineOpts argv                     -- and evaluate them, return a key-value list
+-- >                                                                    -- and input and output
+-- >       res  <- run' $ application inp outp options $ emptyRoot      -- run the application
+-- > 
+-- >       exitWith (if null res
+-- >                 then ExitFailure (-1)
+-- >                 else exitSuccess
+-- >                )
+-- >
+-- > application :: String -> String -> Attributes -> XmlStateFilter ()
+-- > application inp outp al
+-- >   = parseDocument (al ++ [(a_source, inp)])                        -- set options and source
+-- >     .>>                                                            -- and parse document
+-- >     processDocument                                                -- the hard work
+-- >     .>>
+-- >     writeDocument [(a_output_file, outp)]                          -- issue results
+-- >     .>>
+-- >     checkStatus                                                    -- check errors
+-- >
+
+
+writeDocument	:: Attributes -> XmlStateFilter state
+writeDocument userOptions
+    = processDocument userOptions defaultOptions
+      ( traceMsg 1 "writeDocument: options added, start processing"
+	.>>
+	liftMf
+	( choice
+	  [ hasOption a_indent			:-> indentDoc			-- document indentation
+	  , hasOption a_remove_whitespace	:-> removeDocWhiteSpace		-- remove all whitespace between tags
+	  , this				:-> this
+	  ]
+	)
+	.>>
+	liftMf
+	( choice
+	  [ hasOption a_show_tree	:-> treeRepOfXmlDoc
+	  , hasOption a_show_haskell	:-> haskellRepOfXmlDoc
+	  , hasOption a_output_xml	:-> ( escapeXmlDoc		-- escape lt, gt, amp, quot, 
+					      .>
+					      addXmlPiToDoc		-- add <?xml ... > pi
+					      .>
+					      unparseXmlDoc		-- convert doc into text with respect to output encoding
+					    )
+	  , this			:-> this
+	  ]
+	)
+	.>>
+	writeXmlDoc
+	.>>
+	traceMsg 1 "writeDocument: finished"
+      )
+    where
+    defaultOptions
+	= [ ( a_output_file,		"-" )
+	  , ( a_indent,			v_0 )
+	  , ( a_remove_whitespace,	v_0 )
+	  , ( a_output_xml,		v_1 )
+	  , ( a_output_encoding,       utf8 )
+	  , ( a_show_tree,		v_0 )
+	  , ( a_show_haskell,		v_0 )
+	  ]
+
+writeXmlDoc	:: XmlStateFilter state
+writeXmlDoc t'
+    = put t'
+    where
+    put
+	| null fn || fn == "-"	= putXmlDoc
+	| otherwise		= putXmlDocToFile fn
+
+    fn = xshow . getValue a_output_file $ t'
+
+
+-- ------------------------------------------------------------
+--
+
+-- |
+-- wrapper filter for running a monadic filter
+-- controlled by common options
+--
+-- input tree must be a complete document
+-- parameters and default parameters can be used to contol
+-- the filer and common tasks like error message handling
+
+processDocument	:: Attributes -> Attributes -> XmlStateFilter state -> XmlStateFilter state
+processDocument userOptions defaultOptions processFilter
+    = liftMf isRoot
+      .>>
+      liftMf (addOptions userOptions
+	      .>
+	      addOptions [(a_status, show c_ok)]
+	     )
+      .>>
+      liftMf (addDefaultOptions defaultOptions)
+      .>>
+      setSystemParams							-- store options in system state
+      .>>
+      choiceM
+      [ hasOption a_propagate_errors					-- error handling is set by calling environment
+		:-> thisM
+
+      , hasOption a_collect_errors
+	.>
+	hasOption a_issue_errors
+		:-> performAction (\ _ -> setSysErrorHandler (errorMsgLogging.>> errorMsgToStderr)	)
+
+      , hasOption a_collect_errors
+		:-> performAction (\ _ -> setSysErrorHandler errorMsgLogging	)
+
+      , hasOption a_issue_errors
+		:-> performAction (\ _ -> setSysErrorHandler errorMsgToStderr	)
+
+      , this
+		:-> performAction (\ _ -> setSysErrorHandler noneM		)
+      ]
+      .>>
+      processFilter
+      .>>
+      ( thisM
+        +++>>
+	( hasOption a_collect_errors
+          `guardsM`
+	  getErrorMsg
+	)
+      )
+
+-- ------------------------------------------------------------
+
diff --git a/src/Text/XML/HXT/Parser/ProtocolHandler.hs b/src/Text/XML/HXT/Parser/ProtocolHandler.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Parser/ProtocolHandler.hs
@@ -0,0 +1,83 @@
+{-# LINE 1 "ProtocolHandler.hs" #-}
+-- ------------------------------------------------------------
+--
+-- protocol handler functions
+-- configuration file
+-- real handler is generated with cpp
+
+module Text.XML.HXT.Parser.ProtocolHandler
+    ( getProtocolHandler
+    )
+
+where
+
+import Text.XML.HXT.DOM.XmlState
+
+-- ------------------------------------------------------------
+--
+-- file io and network
+
+import Data.Maybe
+    ( fromMaybe
+    )
+
+import Network.URI
+    ( URI
+    , uriScheme
+    )
+
+import Text.XML.HXT.Parser.ProtocolHandlerFile
+    ( getFileContents
+    )
+
+
+import Text.XML.HXT.Parser.ProtocolHandlerHttpNativeOrCurl
+    ( getHttpContentsNativeOrWithCurl
+    )
+
+
+
+
+
+-- ------------------------------------------------------------
+--
+
+getProtocolHandler	:: String -> (URI -> XmlStateFilter a)
+getProtocolHandler proto
+    = fromMaybe getUnsupported handler
+      where
+      handler  = lookup proto protocolHandler
+
+--
+-- the fall back protocol handler
+
+getUnsupported	:: URI -> XmlStateFilter a
+getUnsupported uri
+    = addFatal ( "unsupported protocol "
+		 ++ show (uriScheme uri)
+		 ++ " in URI: "
+		 ++ show uri
+	       )
+
+-- ------------------------------------------------------------
+--
+-- the table of potocol handlers
+-- looked up in getProtocolHandler
+
+protocolHandler	:: [(String, URI -> XmlStateFilter a)]
+protocolHandler
+    = [ ("file", getFileContents)
+      , ("http",
+
+
+	 getHttpContentsNativeOrWithCurl
+
+
+
+
+	)
+      ]
+
+-- ------------------------------------------------------------
+
+
diff --git a/src/Text/XML/HXT/Parser/ProtocolHandlerFile.hs b/src/Text/XML/HXT/Parser/ProtocolHandlerFile.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Parser/ProtocolHandlerFile.hs
@@ -0,0 +1,77 @@
+-- ------------------------------------------------------------
+--
+-- protocol handler function for file protocol
+-- implemented as filer
+
+module Text.XML.HXT.Parser.ProtocolHandlerFile
+    ( getFileContents
+    )
+
+where
+
+import Text.XML.HXT.DOM.XmlTree
+
+import Text.XML.HXT.DOM.XmlState
+
+import System.Directory
+    ( doesFileExist
+    , getPermissions
+    , readable
+    )
+
+import Network.URI
+    ( URI
+    , unEscapeString
+    , uriPath
+    )
+
+import System.IO
+import System.IO.Error
+
+-- ------------------------------------------------------------
+--
+-- the file protocol handler
+
+getFileContents	:: URI -> XmlStateFilter a
+getFileContents uri n
+    = do
+      trace 2 ("getFileContent: reading file " ++ show source)
+      exists <- io $ doesFileExist source
+      if exists
+	 then do
+	      perm <- io $ getPermissions source
+	      if readable perm
+		 then do
+		      h <- io $ try ( openFile source ReadMode )
+		      case h of
+			     Left e
+				 -> readErr ( "system error when reading file "
+					      ++ show source
+					      ++ ": "
+					      ++ ioeGetErrorString e
+					    )
+			     Right h'
+				 -> do
+				    c <- io $ hGetContents h'
+				    return ( ( addAttrInt transferStatus 200
+					       .>
+					       addAttr transferMessage "OK"
+					       .>
+					       replaceChildren (xtext c)
+					     ) n
+					   )
+
+		 else readErr ("file " ++ show source ++ " not readable")
+         else readErr ("file " ++ show source ++ " not found")
+    where
+    source	= fileUriPath . unEscapeString . uriPath $ uri
+    readErr msg	= addFatal msg n
+
+    -- remove leading / if file starts with windows drive letter, e.g. /c:/windows -> c:/windows
+    fileUriPath ('/' : file@(d : ':' : _more))
+	| d `elem` ['A'..'Z'] || d `elem` ['a'..'z']
+	    = file
+    fileUriPath file
+	= file
+
+-- ------------------------------------------------------------
diff --git a/src/Text/XML/HXT/Parser/ProtocolHandlerHttpCurl.hs b/src/Text/XML/HXT/Parser/ProtocolHandlerHttpCurl.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Parser/ProtocolHandlerHttpCurl.hs
@@ -0,0 +1,192 @@
+-- ------------------------------------------------------------
+--
+-- protocol handler functions for native http access
+
+module Text.XML.HXT.Parser.ProtocolHandlerHttpCurl
+    ( getHttpContentsWithCurl
+    )
+
+where
+
+import Text.XML.HXT.DOM.XmlTree
+
+import Text.XML.HXT.DOM.XmlState
+
+import Text.XML.HXT.Parser.ProtocolHandlerUtil
+    ( parseContentType
+    )
+
+import Text.ParserCombinators.Parsec
+    ( Parser
+    , parse
+    , anyChar
+    , char
+    , digit
+    , getInput
+    , many1
+    , manyTill
+    , spaces
+    , string
+    , (<|>)
+    )
+
+import qualified Text.ParserCombinators.Parsec
+    ( try
+    )
+
+import Network.URI
+    ( URI
+    )
+
+import System.PipeOpen
+    ( popen
+    )
+
+import Data.Char
+    ( toLower
+    )
+
+-- ------------------------------------------------------------
+--
+-- the http protocol handler implemented by calling external program curl
+
+getHttpContentsWithCurl	:: URI -> XmlStateFilter a
+getHttpContentsWithCurl uri n
+    = do
+      trace 2 ( "getHttpContentWithCurl: reading from URL " ++ show uri )
+
+      proxy       <- getSysParam a_proxy
+      curlOptions <- getSysParam a_options_curl
+
+      let allArgs = args ++ proxyArgs proxy ++ words curlOptions
+
+      trace 4 ( "getHttpContentWithCurl: running " ++ show (unwords (cmd : allArgs)) )
+
+      (res, errs, rc) <- io $ popen cmd allArgs
+
+      trace 4 ( "getHttpContentWithCurl: PID:    " ++ show rc   )
+      trace 4 ( "getHttpContentWithCurl: stdin:  " ++ show res  )
+      trace 4 ( "getHttpContentWithCurl: stderr: " ++ show errs )
+
+      if rc /= 0
+	 then addFatal ( "http error when requesting URI (rc=" ++ show rc ++ ") "
+			 ++ show uri
+			 ++ ": "
+			 ++ errs
+		       ) n
+	 else let
+	      (st, al, contents) = parseResponse res
+	      in
+	      liftMf ( addAttrl (const al)
+		       .>
+		       replaceChildren (xtext contents)
+		     )
+	      .>> ( if st >= 200 && st < 300
+		    then thisM
+		    else
+		    addFatal ( "http error when accessing URI "
+			       ++ show uri
+			       ++ ": "
+			       ++ show st
+			       ++ " "
+			       ++ (valueOf transferMessage $ newRoot al)
+			     )
+		  )
+	      $ n
+    where
+    cmd  = "curl"
+    args = [ "--silent"
+	   , "--show-error"
+	   , "--dump-header", "-"
+	   , show uri
+	   ]
+    proxyArgs ""
+	= []
+    proxyArgs prx
+	= [ "--proxy", prx ]
+
+parseResponse	:: String -> (Int, XmlTrees, String)
+parseResponse inp
+    = case (parse parseHttpResponse "HTTP Header" inp) of
+      Right res -> res
+      Left  _   -> (999, xattr transferMessage "illegal HTTP response", inp)
+
+-- ------------------------------------------------------------
+--
+-- parsers for HTTP response
+
+parseHttpResponse		:: Parser (Int, XmlTrees, String)
+parseHttpResponse
+    = do
+      allResponses <- many1
+		      ( do
+			(rc, rh) <- parseResp
+			rhs      <- parseHeaders
+			return (rc, rh, rhs)
+		      )
+      let (rc, rh, rhs) = last allResponses
+      content  <- getInput
+      return (rc, rh ++ rhs, content)
+    where
+
+    crlf		:: Parser ()
+    crlf
+	= do
+	  ( Text.ParserCombinators.Parsec.try (string "\r\n") <|> string "\n" )
+	  return ()
+
+    parseResp		:: Parser (Int, XmlTrees)
+    parseResp
+	= do
+	  vers <- ( do
+		    http <- string "HTTP/"
+		    mav <- many1 digit
+		    char '.'
+		    miv <- many1 digit
+		    return (http ++ mav ++ "." ++ miv)
+		  )
+	  spaces
+	  ds <- many1 digit
+	  spaces
+	  reason <- manyTill anyChar crlf
+	  return ( read ds,
+		   xattr transferMessage reason ++ xattr transferVersion vers
+		 )
+
+    parseHeaders	:: Parser XmlTrees
+    parseHeaders
+	= ( do
+	    crlf
+	    return []
+	  )
+	  <|>
+	  ( do
+	    header1 <- parse1Header
+	    rest    <- parseHeaders
+	    return $ header1 ++ rest
+	  )
+	  <|>
+	  ( do
+	    return $ xattr (httpPrefix ++ "IllegalHeaders") ""
+	  )
+
+    parse1Header	:: Parser XmlTrees
+    parse1Header
+	= do
+	  header <- manyTill anyChar (char ':')
+	  spaces
+	  value  <- manyTill anyChar crlf
+	  let ct = parseCT header value
+	  return $ ct ++ xattr (httpPrefix ++ header) value
+	where
+	parseCT	:: String -> String -> XmlTrees
+	parseCT h v
+	    | map toLower h == "content-type"
+		= ( case (parse parseContentType h v) of
+		    Right res -> concatMap (uncurry xattr) res
+		    Left  _   -> []
+		  )
+	    | otherwise
+		= []
+
+-- ------------------------------------------------------------
diff --git a/src/Text/XML/HXT/Parser/ProtocolHandlerHttpNative.hs b/src/Text/XML/HXT/Parser/ProtocolHandlerHttpNative.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Parser/ProtocolHandlerHttpNative.hs
@@ -0,0 +1,149 @@
+-- ------------------------------------------------------------
+--
+-- protocol handler functions for native http access
+--
+
+module Text.XML.HXT.Parser.ProtocolHandlerHttpNative
+    ( getHttpContentsWithHttp
+    )
+
+where
+
+import Text.XML.HXT.DOM.XmlTree
+
+import Text.XML.HXT.DOM.XmlState
+
+import Text.XML.HXT.Parser.ProtocolHandlerUtil
+    ( parseContentType
+    )
+
+import Text.XML.HXT.DOM.Util
+    ( stringTrim
+    )
+
+import Text.ParserCombinators.Parsec
+    ( parse
+    )
+
+import System.IO
+import System.IO.Error
+
+import Network.URI
+    ( URI
+    )
+
+import Network.Socket
+    ( withSocketsDo
+    )
+
+import Network.HTTP		-- http modules
+import Network.Browser
+
+-- ------------------------------------------------------------
+--
+-- the native http protocol handler
+
+-- ------------------------------------------------------------
+--
+-- the http protocol handler, haskell implementation
+
+getHttpContentsWithHttp	:: URI -> XmlStateFilter a
+getHttpContentsWithHttp uri n
+    = do
+      traceLevel <- getTraceLevel
+      trace 2 ("getHttpContent: reading from URL " ++ show uri)
+      proxy <- getSysParam a_proxy
+      res <- io $  try (getHttp traceLevel uri proxy)
+      case res of
+	       Left e
+		   -> readErr ( "http error when requesting URI "
+				++ show uri
+				++ ": "
+				++ ioeGetErrorString e
+				++ " (perhaps server does not understand HTTP/1.1) "
+			      )
+	       Right response
+		   -> let
+		      al = convertResponseHeaders response
+		      cs = xtext (rspBody response)
+		      st = convertResponseStatus (rspCode response)
+		      in
+		      if st >= 200 && st < 300
+			 then
+			 return $ (addAttrl (const al) .> replaceChildren cs) n
+			 else 
+			 readErr ( "http error when accessing URI "
+				   ++ show (show uri)
+				   ++ ": "
+				   ++ show st
+				   ++ " "
+				   ++ rspReason response
+				 )
+    where
+    readErr msg	= addFatal msg n
+
+    getHttp		:: Int -> URI -> String -> IO Response
+    getHttp trc' uri' proxy'
+	= withSocketsDo $
+	  browse ( do
+		   setOutHandler (trcFct)
+		   setErrHandler (trcFct)
+
+		   setProxy' proxy'
+		   (_ruri, rsp) <- request rq
+		   return rsp
+		 )
+	where
+	trcFct s
+	    | trc' >= 5
+		= hPutStrLn stderr ("-- (" ++ show trc' ++ ") http: " ++ s)
+	    | otherwise
+		= return ()
+
+	rq = defaultGETRequest uri'
+	
+	setProxy' ""	= return ()
+	setProxy' p	= setProxy (Proxy p Nothing)
+
+    convertResponseStatus	:: (Int, Int, Int) -> Int
+    convertResponseStatus (a, b, c)
+	= 100 * a + 10 * b + c
+
+    convertResponseHeaders	:: Response -> XmlTrees
+    convertResponseHeaders r'
+	= cvResponseCode (rspCode r')
+	  ++
+	  cvResponseReason (rspReason r')
+          ++
+	  cvResponseHeaders (rspHeaders r')
+	where
+	cvResponseCode	:: (Int, Int, Int) -> XmlTrees
+	cvResponseCode st'
+	    = xattr transferStatus (show (convertResponseStatus st'))
+	      ++
+	      xattr transferVersion httpVersion
+
+	cvResponseReason	:: String -> XmlTrees
+	cvResponseReason r''
+	    = xattr transferMessage (stringTrim r'')
+
+	cvResponseHeaders	:: [Header] -> XmlTrees
+	cvResponseHeaders
+	    = concatMap cvResponseHeader
+
+	cvResponseHeader	:: Header -> XmlTrees
+	cvResponseHeader (Header name value)
+	    | name == HdrContentType
+		= ( case (parse parseContentType (show HdrContentType) value) of
+		    Right res -> concatMap (uncurry xattr) res
+		    Left  _   -> []
+		  )
+                  ++
+		  addHttpAttr
+	    | otherwise
+		= addHttpAttr
+	    where
+	    addHttpAttr = xattr (httpPrefix ++ (show name)) value
+
+
+-- ------------------------------------------------------------
diff --git a/src/Text/XML/HXT/Parser/ProtocolHandlerHttpNativeOrCurl.hs b/src/Text/XML/HXT/Parser/ProtocolHandlerHttpNativeOrCurl.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Parser/ProtocolHandlerHttpNativeOrCurl.hs
@@ -0,0 +1,43 @@
+-- ------------------------------------------------------------
+--
+-- protocol handler functions for native http access
+
+module Text.XML.HXT.Parser.ProtocolHandlerHttpNativeOrCurl
+    ( getHttpContentsNativeOrWithCurl
+    )
+
+where
+
+import Text.XML.HXT.DOM.XmlKeywords
+    ( a_use_curl
+    )
+
+import Text.XML.HXT.DOM.XmlState
+
+import Network.URI
+    ( URI
+    )
+
+import Text.XML.HXT.Parser.ProtocolHandlerHttpNative
+    ( getHttpContentsWithHttp
+    )
+
+import Text.XML.HXT.Parser.ProtocolHandlerHttpCurl
+    ( getHttpContentsWithCurl
+    )
+
+
+-- ------------------------------------------------------------
+--
+-- the http protocol handler switch for internal / external access
+
+getHttpContentsNativeOrWithCurl		:: URI -> XmlStateFilter a
+getHttpContentsNativeOrWithCurl uri n
+    = do
+      curl <- getSysParamInt a_use_curl 0
+      ( if curl /= 0
+	then getHttpContentsWithCurl
+	else getHttpContentsWithHttp ) uri n
+
+
+-- ------------------------------------------------------------
diff --git a/src/Text/XML/HXT/Parser/XmlInput.hs b/src/Text/XML/HXT/Parser/XmlInput.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Parser/XmlInput.hs
@@ -0,0 +1,382 @@
+-- ------------------------------------------------------------
+--
+-- input functions
+-- implemented as filer
+
+module Text.XML.HXT.Parser.XmlInput
+    ( getXmlContents
+    , getXmlEntityContents
+    , getUrlContents
+    , getContentLength
+    , guessDocEncoding
+    , runInLocalURIContext
+    , runInNewURIContext
+    , getBaseURI
+    , setBaseURI
+    , getAbsolutURI
+    , isStandaloneDocument
+    )
+
+where
+
+import Text.XML.HXT.DOM.XmlTree
+
+import Text.XML.HXT.DOM.XmlState
+
+import Text.XML.HXT.Parser.DefaultURI
+    ( setDefaultURI
+    )
+
+import Text.XML.HXT.Parser.XmlParser
+    ( parseXmlDocEncodingSpec
+    , parseXmlEntityEncodingSpec
+    , removeEncodingSpec
+    )
+
+import Text.XML.HXT.DOM.Unicode
+    ( getDecodingFct
+    , guessEncoding
+    , normalizeNL
+    )
+
+import Text.XML.HXT.Parser.XmlOutput
+    ( traceTree
+    , traceSource
+    , traceMsg
+    )
+
+import Text.XML.HXT.Parser.ProtocolHandler
+    ( getProtocolHandler
+    )
+
+-- ------------------------------------------------------------
+--
+-- URI manipulation
+
+import Network.URI
+    ( parseURIReference
+    , relativeTo
+    , uriScheme
+    )
+
+-- ------------------------------------------------------------
+--
+-- utilities
+
+import Data.Maybe
+
+-- ------------------------------------------------------------
+--
+-- filter for reading the content
+-- input: a root node with arguments in tag attribute list
+-- and without any children.
+
+-- attribute a_source   ("source")   for input file or uri
+--
+-- attribute a_encoding ("encoding") for encoding scheme
+--
+-- attribute a_proxy    ("proxy")    for proxy tob be used in http access
+
+getXmlContents'		:: XmlFilter -> XmlStateFilter a
+getXmlContents' parseEncodingSpec
+    = getContent'
+      `whenM` isRoot
+      where
+      getContent' t'
+	  = ( liftMf (setStatus c_ok "getXmlContents")
+	      .>>
+	      getUrlContents
+	      .>>
+	      liftF parseEncodingSpec
+	      .>>
+	      guessDocEncoding
+	      .>>
+	      traceMsg 1 ("getXmlContents: content read and decoded from " ++ show input')
+	      .>>
+	      traceTree
+	      .>>
+	      traceSource
+	    ) t'
+	    where
+	    input' = valueOf a_source t'
+
+-- |
+-- filter for reading the content of a XML document
+--
+-- input is a root node with the source as an attibute
+-- the text is read, the encoding scheme is parsed and selected
+-- and the input is translated into the internal UTF-8 string representation
+
+getXmlContents		:: XmlStateFilter a
+getXmlContents
+    = getXmlContents' parseXmlDocEncodingSpec
+      .>>
+      setBaseURIFilter
+      .>>
+      setStandAloneFilter
+
+-- |
+-- filter for reading the content of an external XML entity
+--
+--
+-- see also : 'getXmlContents'
+
+getXmlEntityContents	:: XmlStateFilter a
+getXmlEntityContents
+    = getXmlContents' parseXmlEntityEncodingSpec
+      .>>
+      liftF (processChildren removeEncodingSpec)	-- remove encoding spec, it's not part of the entity value
+      .>> 
+      setBaseURIFilter
+
+-- ------------------------------------------------------------
+
+setBaseURIFilter	:: XmlStateFilter a
+setBaseURIFilter
+    = performAction (\ t -> setBaseURI (valueOf transferURI t))
+      `whenM` isRoot
+
+-- |
+-- filter command for saving and restoring
+-- the base URI
+--
+--    * 1.parameter f :  the filter that possible changes the base URI
+--
+--
+--    - returns : a filter with the same effect as f, that restores the base URI after application of f
+
+runInLocalURIContext		:: XmlStateFilter a -> XmlStateFilter a
+runInLocalURIContext f t
+    = do
+      oldContext <- getBaseURI
+      trace 2 ("runInLocalURIContext: save base URI " ++ show oldContext)
+      res <- f t
+      setBaseURI oldContext
+      trace 2 ("runInLocalURIContext: restore base URI " ++ show oldContext)
+      return res
+
+-- |
+-- filter command for running an action in a new URI context
+
+runInNewURIContext	:: String -> XmlStateFilter a -> XmlStateFilter a
+runInNewURIContext uri f
+    | null uri
+	= f
+    | otherwise
+	= runInLocalURIContext
+	  ( \ t -> ( do
+		     trace 2 ("runInNewURIContext: new base URI " ++ show uri)
+		     setBaseURI uri
+		     f t
+		   )
+	  )
+
+-- ------------------------------------------------------------
+-- |
+-- guessEncoding uses encoding attribute and content
+-- to determine the encoding scheme.
+--
+-- it's assumed that an encoding spec has been tried to parse before guessing the encoding.
+--
+-- UTF-8 is the default encoding
+--
+-- other supported encodings are ISO-8859-1 (also known as ISO-Latin-1),
+-- US-ASCII, UTF-16 or ISO-10646-UCS-2, UTF-16BE, UTF-16LE
+
+guessDocEncoding	:: XmlStateFilter a
+guessDocEncoding
+    = addDocEncoding
+      `whenM` isRoot
+    where
+    addDocEncoding n'
+	= do
+	  trace 2 ( "guessDocEncoding: encoding is " ++ show guess)
+	  ( encFilter (getDecodingFct guess)
+	    .>>
+	    issueError
+	    .>>
+	    liftMf (addAttr transferEncoding guess) ) n'
+	  where
+	  guess	:: String
+	  guess	= head . filter (not . null)
+		  $ [ (guessEncoding . showXText . getChildren) n'
+		    , valueOf transferEncoding n'
+		    , valueOf a_encoding n'
+		    , utf8
+		    ]
+	  encFilter (Just fct)
+	      = decodeDoc fct
+
+	  encFilter Nothing
+	      = addFatal ("encoding scheme not supported: " ++ show guess)
+
+	  decodeDoc df n''
+	      | null errs	= liftMf (replaceChildren (xtext (normalizeNL res))) $ n''
+	      | otherwise	= ( liftMf (replaceChildren (xtext ""))
+				    .>>
+				    ( issueDecodingErrs
+				      +++>>
+				      addFatal "decoding errors detected"
+				    )
+				  ) n''
+	      where
+	      str = xshow . getChildren $ n''
+	      (res, errs) = df str
+	      issueDecodingErrs = catM . map (issueErr . (guess ++) . (" encoding error" ++)) $ errs
+
+-- ------------------------------------------------------------
+
+getDefaultURI	:: XState state String
+getDefaultURI
+    = do
+      uri <- getSysParam transferDefaultURI
+      if null uri
+	 then do
+	      setDefaultURI
+	      getDefaultURI
+	 else return uri
+
+-- |
+-- set the base URI, all other URIs are handled relative to this base URI
+--
+-- the default base URI is @file:\/\/\/\<current-working-dir\>\/@
+--
+-- see also : 'getBaseURI'
+
+setBaseURI	:: String -> XState state ()
+setBaseURI str
+    = do
+      trace 2 ("setBaseURI: new base URI: " ++ show str)
+      setSysParam transferURI str
+
+-- |
+-- read the current base URI
+--
+-- see also : 'setBaseURI'
+
+getBaseURI	:: XState state String
+getBaseURI
+    = do
+      uri <- getSysParam transferURI
+      if null uri
+	 then do
+	      res <- getDefaultURI
+	      setBaseURI res
+	      getBaseURI
+	 else return uri
+
+-- |
+-- transform an URI into an absolut URI using the current base URI
+--
+--
+--    * 1.parameter uri :  the URI as string
+--
+--
+--    - returns : the absolut URI as string or \"\" in case of an error
+
+getAbsolutURI	:: String -> XState state String
+getAbsolutURI uri
+    = do
+      baseUri <- getBaseURI
+      return $ expandURI uri baseUri
+
+expandURI	:: String -> String -> String
+expandURI uri base
+    = fromMaybe "" $ expand
+    where
+    expand = do
+	     base' <- parseURIReference base
+	     uri'  <- parseURIReference uri
+	     abs'  <- relativeTo uri' base'
+	     return $ show abs'
+
+-- ------------------------------------------------------------
+
+setStandAloneFilter	:: XmlStateFilter a
+setStandAloneFilter
+    = performAction setStandAlone
+      where
+      setStandAlone t
+	  = do
+	    if null standalone
+	       then return ()
+	       else do
+		    trace 2 ("setStandAloneFilter: standalone=" ++ show standaloneVal)
+		    setSysParam a_standalone standaloneVal
+	    where
+	    standalone	= getValue a_standalone t
+	    standaloneVal	= showXText standalone
+
+-- |
+-- predicate for testing the standalone document attribute
+
+isStandaloneDocument	:: XState state Bool
+isStandaloneDocument
+    = do
+      val <- getSysParam a_standalone
+      return (val == "yes")
+
+-- ------------------------------------------------------------
+
+-- |
+-- the hard io operations
+--
+-- for reading a file or accessing a document via http
+-- input must be a root node with a @source@ attribute specifying the URI
+
+getUrlContents	:: XmlStateFilter a
+getUrlContents
+    =  getCont
+      `whenM` isRoot
+    where
+    getCont n'
+	= do
+	  trace 1 ("getUrlContent: reading " ++ show src)
+	  uri <- getAbsolutURI src
+	  if null uri
+	     then urlErr ( "illegal URI for input: " ++ show src )
+	     else let
+		  uri'     = fromJust $ parseURIReference uri
+		  proto    = init . uriScheme $ uri'
+		  handler  = getProtocolHandler proto
+		  in
+		  ( liftMf (addAttr transferProtocol proto
+			   .>
+			   addAttr transferURI uri
+			  )
+		    .>>
+		    handler uri'
+		  ) $ n'
+	where
+	src        = valueOf a_source n'
+	urlErr msg = addFatal msg n'
+
+-- ------------------------------------------------------------
+
+-- |
+-- compute the length of the data for a document read previously
+-- by a call of 'getUrlContents. The result is stored as an attribute
+-- value in the document root node. the attribute name is 'a_contentLength'
+
+getContentLength	:: XmlFilter
+getContentLength
+    = addAttrl contentLengthAttr
+      `when` isRoot
+      where
+      http_contentLength	= httpPrefix ++ "Content-Length"
+
+      contentLengthAttr		:: XmlFilter
+      contentLengthAttr t
+	  = choice [ hasAttr a_contentLength
+		     :-> none
+		   , hasAttr http_contentLength
+		     :-> mkXAttr a_contentLength (getValue http_contentLength)
+		   , this
+                     :-> mkXAttr a_contentLength getLength
+		   ] t
+
+      getLength			:: XmlFilter
+      getLength t
+	  = xtext (show . length . xshow . getChildren $ t)
+
+-- ------------------------------------------------------------
diff --git a/src/Text/XML/HXT/Parser/XmlOutput.hs b/src/Text/XML/HXT/Parser/XmlOutput.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Parser/XmlOutput.hs
@@ -0,0 +1,166 @@
+-- |
+-- output functions
+-- implemented as filer
+
+module Text.XML.HXT.Parser.XmlOutput
+    ( putXmlDoc
+    , putXmlDocToFile
+    , putXmlTree	-- for trace output
+    , putXmlSource	--  "    "     "
+
+    , hPutXmlDoc
+    , hPutXmlTree
+    , hPutXmlSource
+
+    , traceF
+    , traceMsg
+    , traceTree
+    , traceSource
+    )
+
+where
+
+import Text.XML.HXT.DOM.XmlTree
+
+import Text.XML.HXT.DOM.XmlState
+
+import Text.XML.HXT.DOM.EditFilters	( indentDoc
+					, numberLinesInXmlDoc
+					, treeRepOfXmlDoc
+					, addHeadlineToXmlDoc
+					)
+
+import System.IO
+import System.IO.Error
+
+-- ------------------------------------------------------------
+
+-- |
+-- document output for standard output
+--
+-- see also : 'hPutXmlDoc'
+
+putXmlDoc	:: XmlStateFilter a
+putXmlDoc	= hPutXmlDoc stdout
+
+-- |
+-- document output for arbitrary files.
+--
+-- Result is the input document
+
+hPutXmlDoc	:: Handle -> XmlStateFilter a
+hPutXmlDoc handle t
+    = do
+      res <- io $ try (hPutStr handle content)
+      case res of
+        Left ioerr
+	    -> ( issueFatal (show ioerr)
+		 +++>>
+		 thisM
+	       ) t
+	Right _
+	    -> thisM t
+
+    where
+    content = xshow . getChildren $ t
+
+-- |
+-- document output on a given file name
+--
+-- Result is the input document
+--
+-- see also : 'hPutXmlDoc', 'putXmlDoc'
+
+putXmlDocToFile	:: String -> XmlStateFilter a
+putXmlDocToFile fn t
+    = do
+      res <- io $ try (openFile fn WriteMode)
+      case res of
+        Left ioerr
+	    -> ( issueFatal (show ioerr)
+		 +++>>
+		 thisM
+	       ) t
+	Right h
+	    -> do
+	       t' <- hPutXmlDoc h t
+	       io $ try (hClose h)
+	       trace 2 ("document written to file: " ++ fn)
+	       return t'
+
+-- ------------------------------------------------------------
+
+-- |
+-- output of tree representation for trace
+
+hPutXmlTree	:: Handle -> XmlStateFilter a
+hPutXmlTree handle
+    = performAction
+      (\ n -> liftMf (treeRepOfXmlDoc
+		     .>
+		     addHeadlineToXmlDoc
+		    )
+              .>>
+              hPutXmlDoc handle
+              $ n
+      )
+
+putXmlTree	:: XmlStateFilter a
+putXmlTree	= hPutXmlTree stdout
+
+-- |
+-- output of text representation for trace
+
+hPutXmlSource	:: Handle -> XmlStateFilter a
+hPutXmlSource handle
+    = performAction
+      (\ n -> liftMf ( ( rootTag
+			[ sattr a_source "internal tree" ]
+			[ this ]
+			`whenNot` isRoot
+		      )
+		      .>
+		      indentDoc
+		      .>
+		      numberLinesInXmlDoc
+		      .>
+		      addHeadlineToXmlDoc
+		    )
+              .>>
+              hPutXmlDoc handle
+              $ n
+      )
+
+putXmlSource	:: XmlStateFilter a
+putXmlSource	= hPutXmlSource stdout
+
+-- ------------------------------------------------------------
+
+-- trace filter for inserting trace operations
+-- into a filter sequence
+--
+--    * 1.parameter level : like in 'traceCmd'
+--
+--    - 2.parameter cmd : the output filter, e.g. putXmlTree or putXmlSource
+--
+--    - 3.parameter : the tree
+--
+--    - returns: the tree
+
+traceF		:: Int -> XmlStateFilter a -> XmlStateFilter a
+traceF level cmd
+    = performAction (\ t -> traceCmd level (cmd t))
+
+traceMsg	:: Int -> String -> XmlStateFilter a
+traceMsg level msg
+    = performAction (\ _ -> trace level msg)
+
+traceTree	:: XmlStateFilter a
+traceTree
+    = traceF 4 (hPutXmlTree stderr)
+
+traceSource	:: XmlStateFilter a
+traceSource
+    = traceF 3 (hPutXmlSource stderr)
+
+-- ------------------------------------------------------------
diff --git a/src/Text/XML/HXT/Parser/XmlParser.hs b/src/Text/XML/HXT/Parser/XmlParser.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Parser/XmlParser.hs
@@ -0,0 +1,81 @@
+-- |
+-- Xml Parser: the main parse filter 
+
+module Text.XML.HXT.Parser.XmlParser
+    ( module Text.XML.HXT.Parser.XmlParsec
+    , module Text.XML.HXT.Parser.XmlTokenParser
+    , parseXmlDoc
+    , substXmlEntities
+    )
+where
+
+import Text.XML.HXT.DOM.XmlTree
+import Text.XML.HXT.DOM.XmlState
+
+import Text.XML.HXT.Parser.XmlTokenParser
+
+import Text.XML.HXT.Parser.XmlEntities
+import Text.XML.HXT.Parser.XmlParsec
+import Text.XML.HXT.Parser.XmlOutput
+    ( traceTree
+    , traceSource
+    , traceMsg
+    )
+
+-- ------------------------------------------------------------
+
+-- |
+-- The monadic parser for a whole document.
+-- input must be a root node with a single text child.
+-- Error messages are issued and global error state is set.
+
+parseXmlDoc	:: XmlStateFilter a
+parseXmlDoc
+    = parseDoc
+      `whenM` ( isRoot .> getChildren .> isXText )
+      where
+      parseDoc t
+	  = ( traceMsg 2 ("parseXmlDoc: parse XML document " ++ show loc)
+	      .>>
+	      parser
+	      .>>
+	      liftMf checkRes
+	      .>>
+	      traceTree
+	      .>>
+	      traceSource
+	    ) $ t
+	  where
+	  loc = valueOf a_source t			-- document name
+	  checkRes
+	      = setStatus c_err ("parsing XML source " ++ show loc)
+	        `whenNot`
+	        getChildren
+	  parser
+	      = processChildrenM (liftF (parseXmlText document' loc))
+
+-- ------------------------------------------------------------
+
+-- |
+-- Filter for substitution of all occurences of the predefined XML entites quot, amp, lt, gt, apos
+-- by equivalent character references
+
+substXmlEntities	:: XmlFilter
+substXmlEntities
+    = choice
+      [ isXEntityRef	:-> substEntity
+      , isXTag		:-> processAttr (processChildren substXmlEntities)
+      , this		:-> this
+      ]
+      where
+      substEntity t'@(NTree (XEntityRef en) _)
+	  = case (lookup en xmlEntities) of
+	    Just i
+		-> [mkXCharRefTree i]
+	    Nothing
+		-> this t'
+
+      substEntity _					-- just for preventing ghc warning
+	  = error "substXmlEntities: illegal argument"
+
+-- ------------------------------------------------------------
diff --git a/src/Text/XML/HXT/ProtocolHandler/Makefile b/src/Text/XML/HXT/ProtocolHandler/Makefile
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/ProtocolHandler/Makefile
@@ -0,0 +1,45 @@
+# $Id: Makefile,v 1.1 2004/09/02 19:12:02 hxml Exp $
+#
+# Makefile to configure the http handlers to be used
+#
+# default is: http access may be done via a native http module
+# or via an external program curl called via pipes
+# the access can be controlled at runtime by option --withCurl
+#
+# variants:
+#
+# 1. ONLY_NATIVE_HTTP: does not need the code for calling external programs via pipes
+# activate this variant by running "make only_native_http" in this dir before compilation
+#
+# 2. ONLY_CURL_HTTP: does not need the code for a socked connection and other stuff used by http modules
+# activate this variant by running "make only_curl_http" in this dir before compilation
+#
+# 3. NO_HTTP: does not need any code for http, only local file access is supported
+# activate this variant by running "make no_http" in this dir before compilation
+#
+# reset to default (both variants compiled in and selected by runtime options) by
+# running "make default_http"
+
+source	= ProtocolHandler.hs
+tmp	= ProtocolHandler.tmp
+target	= ../Parser/ProtocolHandler.hs
+
+all		:
+		@echo "make a target out of \"only_native_http only_curl_http no_http default_http\""
+
+only_native_http	:
+		ghc -E -cpp -DONLY_NATIVE_HTTP=1 -o $(tmp) $(source) ; grep -v '^#' $(tmp) > $(target)
+
+only_curl_http	:
+		ghc -E -cpp -DONLY_CURL_HTTP=1   -o $(tmp) $(source) ; grep -v '^#' $(tmp) > $(target)
+
+no_http	:
+		ghc -E -cpp -DNO_HTTP=1          -o $(tmp) $(source) ; grep -v '^#' $(tmp) > $(target)
+
+default_http	:
+		ghc -E -cpp                      -o $(tmp) $(source) ; grep -v '^#' $(tmp) > $(target)
+
+clean		:
+		rm -f $(tmp)
+
+.PHONY		: all only_native_http only_curl_http no_http default_http clean
diff --git a/src/Text/XML/HXT/ProtocolHandler/ProtocolHandler.hs b/src/Text/XML/HXT/ProtocolHandler/ProtocolHandler.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/ProtocolHandler/ProtocolHandler.hs
@@ -0,0 +1,113 @@
+-- ------------------------------------------------------------
+--
+-- protocol handler functions
+-- configuration file
+-- real handler is generated with cpp
+
+module Text.XML.HXT.Parser.ProtocolHandler
+    ( getProtocolHandler
+    )
+
+where
+
+import Text.XML.HXT.DOM.XmlState
+
+-- ------------------------------------------------------------
+--
+-- file io and network
+
+import Data.Maybe
+    ( fromMaybe
+    )
+
+import Network.URI
+    ( URI
+    , uriScheme
+    )
+
+import Text.XML.HXT.Parser.ProtocolHandlerFile
+    ( getFileContents
+    )
+
+#ifdef ONLY_NATIVE_HTTP
+
+import Text.XML.HXT.Parser.ProtocolHandlerHttpNative
+    ( getHttpContentsWithHttp
+    )
+
+#else
+#ifdef ONLY_CURL_HTTP
+
+import Text.XML.HXT.Parser.ProtocolHandlerHttpCurl
+    ( getHttpContentsWithCurl
+    )
+
+#else
+#ifdef NO_HTTP
+#else
+
+import Text.XML.HXT.Parser.ProtocolHandlerHttpNativeOrCurl
+    ( getHttpContentsNativeOrWithCurl
+    )
+
+#endif
+#endif
+#endif
+
+-- ------------------------------------------------------------
+--
+
+getProtocolHandler	:: String -> (URI -> XmlStateFilter a)
+getProtocolHandler proto
+    = fromMaybe getUnsupported handler
+      where
+      handler  = lookup proto protocolHandler
+
+--
+-- the fall back protocol handler
+
+getUnsupported	:: URI -> XmlStateFilter a
+getUnsupported uri
+    = addFatal ( "unsupported protocol "
+		 ++ show (uriScheme uri)
+		 ++ " in URI: "
+		 ++ show uri
+	       )
+
+-- ------------------------------------------------------------
+--
+-- the table of potocol handlers
+-- looked up in getProtocolHandler
+
+protocolHandler	:: [(String, URI -> XmlStateFilter a)]
+protocolHandler
+    = [ ("file", getFileContents)
+      , ("http",
+
+#ifdef ONLY_NATIVE_HTTP
+
+	 getHttpContentsWithHttp
+
+#else
+#ifdef ONLY_CURL_HTTP
+
+	 getHttpContentsWithCurl
+
+#else
+#ifdef NO_HTTP
+
+         getUnsupported
+
+#else
+
+	 getHttpContentsNativeOrWithCurl
+
+#endif
+#endif
+#endif
+	)
+      ]
+
+-- ------------------------------------------------------------
+
+
diff --git a/src/Text/XML/HXT/Validator/AttributeValueValidation.hs b/src/Text/XML/HXT/Validator/AttributeValueValidation.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Validator/AttributeValueValidation.hs
@@ -0,0 +1,357 @@
+-- |
+-- This module provides functions for validating attributes.
+
+-- The main functions are:
+--
+--  - Check if the attribute value meets the lexical constraints of its type
+--
+--  - Normalization of an attribute value
+--
+
+-- Special namings in source code:
+--
+--  - nd - XDTD node
+--
+--  - n  - XTag node
+--
+
+module Text.XML.HXT.Validator.AttributeValueValidation
+    ( checkAttributeValue
+    , normalizeAttributeValue
+    )
+where
+
+import Text.XML.HXT.Parser.XmlParser
+    ( parseNMToken
+    , parseName
+    )
+
+import Text.XML.HXT.DOM.XmlTree
+import Text.XML.HXT.DOM.Util
+
+-- |
+-- Checks if the attribute value meets the lexical constraints of its type.
+--
+--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node
+--
+--    - 2.parameter attrDecl :  the declaration of the attribute from the DTD
+--
+--    - returns : a function which takes an element (XTag or XDTD ATTLIST),
+--                    checks if the attribute value meets the lexical constraints
+--                    of its type and returns a list of errors
+
+checkAttributeValue :: XmlTrees -> XmlTree -> XmlFilter
+checkAttributeValue dtdPart attrDecl@(NTree (XDTD ATTLIST al) _) n@(NTree (XTag _ _al') _)
+    = checkValue attrType dtdPart normalizedVal attrDecl n
+      where
+      attrType      = lookup1 a_type al
+      attrValue     = valueOf (getAttrName al) n
+      normalizedVal = normalizeAttributeValue (Just attrDecl) attrValue
+
+checkAttributeValue dtdPart attrDecl@(NTree (XDTD ATTLIST al) _) n@(NTree (XDTD ATTLIST al') _)
+    = checkValue attrType dtdPart normalizedVal attrDecl n
+      where
+      attrType      = lookup1 a_type al
+      attrValue     = lookup1 a_default al'
+      normalizedVal = normalizeAttributeValue (Just attrDecl) attrValue
+
+checkAttributeValue _ nd n
+    = error ("checkAttributeValue: illegeal parameter:\n" ++ show nd ++ show n)
+
+
+-- |
+-- Dispatches the attibute check by the attribute type.
+--
+--    * 1.parameter typ :  the attribute type
+--
+--    - 2.parameter dtdPart :  the children of the @DOCTYPE@ node
+--
+--    - 3.parameter attrValue :  the normalized attribute value to be checked
+--
+--    - 4.parameter attrDecl :  the declaration of the attribute from the DTD
+--
+--    - returns : a functions which takes an element (XTag or XDTD ATTLIST),
+--                        checks if the attribute value meets the lexical constraints
+--                        of its type and returns a list of errors
+
+checkValue :: String -> XmlTrees -> String -> XmlTree -> XmlFilter
+checkValue typ dtdPart attrValue attrDecl
+	| typ == k_cdata	= none
+	| typ == k_enumeration	= checkValueEnumeration attrDecl attrValue
+	| typ == k_entity	= checkValueEntity dtdPart attrDecl attrValue
+	| typ == k_entities	= checkValueEntities dtdPart attrDecl attrValue
+	| typ == k_id		= checkValueId attrDecl attrValue
+	| typ == k_idref	= checkValueIdref attrDecl attrValue
+	| typ == k_idrefs	= checkValueIdrefs attrDecl attrValue
+	| typ == k_nmtoken	= checkValueNmtoken attrDecl attrValue
+	| typ == k_nmtokens	= checkValueNmtokens attrDecl attrValue
+	| typ == k_notation	= checkValueEnumeration attrDecl attrValue
+	| otherwise		= error ("Attribute type " ++ show typ ++ " unknown.")
+
+-- |
+-- Checks the value of Enumeration attribute types. (3.3.1 \/ p.27 in Spec)
+--
+--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD
+--
+--    - 2.parameter attrValue :  the normalized attribute value to be checked
+
+checkValueEnumeration :: XmlTree -> String -> XmlFilter
+checkValueEnumeration (NTree (XDTD ATTLIST al) cs) attrValue
+    = if attrValue `elem` enumVals
+      then none
+      else err ("Attribute " ++ show (getAttrName al) ++ " for element " ++ show (getElemName al) ++
+                " must have a value from list "++ show enumVals ++ ".")
+      where
+      enumVals :: [String]
+      enumVals = map (getEnumVal) cs
+
+      getEnumVal :: XmlTree -> String
+      getEnumVal (NTree (XDTD NAME al') _) = lookup1 a_name al'
+      getEnumVal _                         = ""
+
+checkValueEnumeration n _
+    = error ("checkValueEnumeration: illegeal parameter:\n" ++ show n)
+
+
+-- |
+-- Checks the value of ENTITY attribute types. (3.3.1 \/ p.26 in Spec)
+--
+--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node, to get the
+--                    unparsed entity declarations
+--
+--    - 2.parameter attrDecl :  the declaration of the attribute from the DTD
+--
+--    - 3.parameter attrValue :  the normalized attribute value to be checked
+
+checkValueEntity :: XmlTrees -> XmlTree -> String -> XmlFilter
+checkValueEntity dtdPart (NTree (XDTD ATTLIST al) _) attrValue
+    = if attrValue `elem` upEntities
+      then none
+      else err ("Entity " ++ show attrValue ++ " of attribute " ++ show (getAttrName al) ++
+                " for element " ++ show (getElemName al) ++ " is not unparsed. " ++
+                "The following unparsed entities exist: " ++ show upEntities ++ ".")
+      where
+      upEntities :: [String]
+      upEntities = map (getEnumVal) (isUnparsedEntity $$ dtdPart)
+
+      getEnumVal :: XmlTree -> String
+      getEnumVal (NTree (XDTD ENTITY al') _) = lookup1 a_name al'
+      getEnumVal _                           = ""
+
+
+checkValueEntity _ n _
+    = error ("checkValueEntity: illegeal parameter:\n" ++ show n)
+
+
+-- |
+-- Checks the value of ENTITIES attribute types. (3.3.1 \/ p.26 in Spec)
+--
+--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node, to get the
+--                    unparsed entity declarations
+--
+--    - 2.parameter attrDecl :  the declaration of the attribute from the DTD
+--
+--    - 3.parameter attrValue :  the normalized attribute value to be checked
+
+checkValueEntities ::XmlTrees -> XmlTree -> String -> XmlFilter
+checkValueEntities dtdPart attrDecl@(NTree (XDTD ATTLIST al) _) attrValue
+    = if null valueList
+      then err ("Attribute " ++ show (getAttrName al) ++ " of element " ++
+                 show (getElemName al) ++ " must be one or more names.")
+      else cat (map (checkValueEntity dtdPart attrDecl) valueList)
+      where
+      valueList = words attrValue
+
+checkValueEntities _ n _
+    = error ("checkValueEntities: illegeal parameter:\n" ++ show n)
+
+
+-- |
+-- Checks the value of NMTOKEN attribute types. (3.3.1 \/ p.26 in Spec)
+--
+--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD
+--
+--    - 2.parameter attrValue :  the normalized attribute value to be checked
+
+checkValueNmtoken :: XmlTree -> String -> XmlFilter
+checkValueNmtoken (NTree (XDTD ATTLIST al) _) attrValue
+    = checkNmtoken parseRes
+      where
+      parseRes :: XmlTrees
+      parseRes = parseNMToken "" (mkXTextTree attrValue)
+
+      checkNmtoken :: XmlTrees -> XmlFilter
+      checkNmtoken ((NTree (XError _ s) _):_)
+          = err ("Attribute value " ++ show attrValue ++ " of attribute " ++ show (getAttrName al) ++
+	         " for element " ++ show (getElemName al) ++ " must be a name token, "++ (lines s) !! 1 ++".")
+
+      checkNmtoken _ = none
+
+
+checkValueNmtoken n _
+    = error ("checkValueNmtoken: illegeal parameter:\n" ++ show n)
+
+
+-- |
+-- Checks the value of NMTOKENS attribute types. (3.3.1 \/ p.26 in Spec)
+--
+--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD
+--
+--    - 2.parameter attrValue :  the normalized attribute value to be checked
+
+checkValueNmtokens :: XmlTree -> String -> XmlFilter
+checkValueNmtokens attrDecl@(NTree (XDTD ATTLIST al) _) attrValue
+    = if null valueList
+      then err ("Attribute "++ show (getAttrName al) ++" of element " ++
+                 show (getElemName al) ++ " must be one or more name tokens.")
+      else cat (map (checkValueNmtoken attrDecl) valueList)
+      where
+      valueList = words attrValue
+
+checkValueNmtokens n _
+    = error ("checkValueNmtokens: illegeal parameter:\n" ++ show n)
+
+
+-- |
+-- Checks the value of ID attribute types. (3.3.1 \/ p.25 in Spec)
+--
+--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD
+--
+--    - 2.parameter attrValue :  the normalized attribute value to be checked
+
+checkValueId :: XmlTree -> String -> XmlFilter
+checkValueId attrDecl attrValue
+    = checkForName "Attribute value" attrDecl attrValue
+
+
+-- |
+-- Checks the value of IDREF attribute types. (3.3.1 \/ p.26 in Spec)
+--
+--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD
+--
+--    - 2.parameter attrValue :  the normalized attribute value to be checked
+
+checkValueIdref :: XmlTree -> String -> XmlFilter
+checkValueIdref attrDecl attrValue
+    = checkForName "Attribute value" attrDecl attrValue
+
+
+-- |
+-- Checks the value of IDREFS attribute types. (3.3.1 \/ p.26 in Spec)
+--
+--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD
+--
+--    - 2.parameter attrValue :  the normalized attribute value to be checked
+
+checkValueIdrefs :: XmlTree -> String -> XmlFilter
+checkValueIdrefs attrDecl attrValue
+    = cat (map (checkValueIdref attrDecl) (words attrValue))
+
+
+
+-- -----------------------------------------------------------------------------
+-- General helper functions for checking attribute values
+--
+
+-- |
+-- Checks if the value of an attribute is a name.
+--
+--    * 1.parameter msg :  error message, should be "Entity" or "Attribute value"
+--
+--    - 2.parameter attrDecl :  the declaration of the attribute from the DTD
+--
+--    - 3.parameter attrValue :  the normalized attribute value to be checked
+
+checkForName ::  String -> XmlTree -> String -> XmlFilter
+checkForName msg (NTree (XDTD ATTLIST al) _) attrValue
+    = checkName parseRes
+      where
+      parseRes :: XmlTrees
+      parseRes = parseName "" (mkXTextTree attrValue)
+
+      checkName :: XmlTrees -> XmlFilter
+      checkName ((NTree (XError _ s) _):_)
+          = err (msg ++ " "++ show attrValue ++" of attribute " ++ show (getAttrName al) ++
+	    " for element "++ show (getElemName al) ++" must be a name, " ++ (lines s) !! 1 ++ ".")
+
+      checkName _ = none
+
+
+checkForName _ n _
+    = error ("checkForName: illegeal parameter:\n" ++ show n)
+
+
+-- |
+-- Gets the element name from an attribute list of an XDTD ATTLIST node.
+--
+--    * 1.parameter tag :  the attibute list of an XDTD ATTLIST
+--
+--    - returns : the element name
+
+getElemName :: Attributes -> String
+getElemName = lookup1 a_name
+
+
+-- |
+-- Gets the attribute name from an attribute list of an XDTD ATTLIST node.
+--
+--    * 1.parameter tag :  the attibute list of an XDTD ATTLIST
+--
+--    - returns : the attribute name
+
+getAttrName :: Attributes -> String
+getAttrName = lookup1 a_value
+
+
+
+-- -----------------------------------------------------------------------------
+
+
+-- |
+-- Normalizes an attribute value with respect to its type. (3.3.3 \/ p.29 in Spec)
+--
+--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD. Expected
+--                   is a list. If the list is empty, no declaration exists.
+--
+--    - 2.parameter value :  the attribute value to be normalized
+--
+--    - returns : the normalized value
+--
+normalizeAttributeValue :: Maybe XmlTree -> String -> String
+normalizeAttributeValue (Just (NTree (XDTD ATTLIST al) _)) value
+    = normalizeAttribute attrType
+      where
+      attrType = lookup1 a_type al
+
+      normalizeAttribute :: String -> String
+      normalizeAttribute typ
+          | typ == k_cdata	= cdataNormalization value
+          | otherwise		= otherNormalization value
+
+
+-- Attribute not declared in DTD, normalization as CDATA
+normalizeAttributeValue _ value
+    = cdataNormalization value
+
+
+-- ------------------------------------------------------------
+-- Helper functions for normalization
+
+
+-- |
+-- Normalization of CDATA attribute values.
+-- is already done when parsing
+-- during entity substituion for attribute values
+cdataNormalization :: String -> String
+cdataNormalization = id
+
+
+-- | Normalization of attribute values other than CDATA.
+otherNormalization :: String -> String
+otherNormalization = reduceWSSequences . stringTrim . cdataNormalization
+
+-- | Reduce whitespace sequences to a single whitespace.
+reduceWSSequences :: String -> String
+reduceWSSequences str = unwords (words str)
+
+
diff --git a/src/Text/XML/HXT/Validator/DTDValidation.hs b/src/Text/XML/HXT/Validator/DTDValidation.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Validator/DTDValidation.hs
@@ -0,0 +1,627 @@
+-- |
+-- This module provides functions for validating the DTD of XML documents
+-- represented as XmlTree.
+
+-- Unlike other popular XML validation tools the validation process returns
+-- a list of errors instead of aborting after the first error was found.
+
+
+-- Unlike validation of the document, the DTD branch is traversed four times:
+--
+--  - Validation of Notations
+--
+--  - Validation of Unparsed Entities
+--
+--  - Validation of Element declarations
+--
+--  - Validation of Attribute declarations
+
+-- Special namings in source code:
+--
+--  - nd - XDTD node
+--
+-- Author : .\\artin Schmidt
+
+module Text.XML.HXT.Validator.DTDValidation
+    ( removeDoublicateDefs
+    , validateDTD
+    )
+where
+
+import Text.XML.HXT.DOM.XmlTree
+
+import Text.XML.HXT.Validator.AttributeValueValidation
+
+
+
+-- |
+-- Validate a DTD.
+--
+--    - returns : a functions which takes the DTD subset of the XmlTree, checks
+--                  if the DTD is valid and returns a list of errors
+
+validateDTD :: XmlFilter
+validateDTD dtdPart
+    = {-# SCC "validateNotations" #-} validateNotations dtdPart'
+      ++
+      {-# SCC "validateEntities" #-} validateEntities dtdPart' notationNames
+      ++
+      {-# SCC "validateElements" #-} validateElements dtdPart' elemNames
+      ++
+      {-# SCC "validateAttributes" #-} validateAttributes dtdPart' elemNames notationNames
+
+      where
+      dtdPart' = getChildren dtdPart
+
+      notationNames :: [String]
+      notationNames
+          = getXTextValues (isNotation .> getDTDValue a_name $$ dtdPart')
+
+      elemNames :: [String]
+      elemNames
+          = getXTextValues (isElement  .> getDTDValue a_name $$ dtdPart')
+
+
+
+
+-- ------------------------------------------------------------
+
+-- |
+-- Returns a list of XText values.
+--
+--    * 1.parameter xtextList :  a list of XText nodes
+--
+--    - returns : the values of the XText nodes
+
+getXTextValues :: XmlTrees -> [String]
+getXTextValues
+  = concatMap showT
+  where
+    showT (NTree n _)
+	| isXTextNode n = [textOfXNode n]
+    showT _             = []
+
+
+-- ------------------------------------------------------------
+
+
+-- |
+-- Validation of Notations, checks if all notation names are unique.
+-- Validity constraint: Unique Notation Name (4.7 \/ p.44 in Spec)
+--
+--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node
+--
+--    - returns : a list of errors
+
+validateNotations :: XmlTrees -> XmlTrees
+validateNotations dtdPart
+    = checkForUniqueNotation notations []
+      where
+      notations = isNotation $$ dtdPart
+
+      checkForUniqueNotation :: XmlTrees -> [String] -> XmlTrees
+      checkForUniqueNotation (x@(NTree (XDTD NOTATION al) _):xs) used
+          = if name `elem` used
+	    then err ("Notation "++ show name ++ " was already specified.") x
+		 ++
+		 checkForUniqueNotation xs used
+
+	    else checkForUniqueNotation xs (name : used)
+	    where
+	    name = lookup1 a_name al
+
+      checkForUniqueNotation [] _ = []
+
+      checkForUniqueNotation nd _
+          = error ("checkForUniqueNotation: illegeal parameter:\n" ++ show nd)
+
+
+-- |
+-- Validation of Entities.
+--
+-- 1. Issues a warning if entities are declared multiple times.
+--
+--    Optional warning: (4.2 \/ p.35 in Spec) 
+--
+--
+-- 2. Validates that a notation is declared for an unparsed entity.
+--
+--    Validity constraint: Notation Declared (4.2.2 \/ p.36 in Spec)
+--
+--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node
+--
+--    - 2.parameter notationNames :  list of all notation names declared in the DTD
+--
+--    - returns : a list of errors
+
+validateEntities :: XmlTrees -> [String] -> XmlTrees
+validateEntities dtdPart notationNames
+    = checkForUniqueEntity entities []
+      ++
+      checkNotationDecls notationNames upEntities
+
+      where
+      entities   = isEntity $$ dtdPart
+      upEntities = isUnparsedEntity $$ dtdPart
+
+      -- Check if entities are declared multiple times
+      checkForUniqueEntity :: XmlTrees -> [String] -> XmlTrees
+      checkForUniqueEntity (x@(NTree (XDTD ENTITY al) _):xs) used
+          = if name `elem` used
+	    then warn ("Entity "++ show name ++ " was already specified. " ++
+	               "First declaration will be used.") x
+		 ++
+		 checkForUniqueEntity xs used
+
+	    else checkForUniqueEntity xs (name : used)
+	    where
+	    name = lookup1 a_name al
+
+      checkForUniqueEntity [] _ = []
+
+      checkForUniqueEntity nd _
+          = error ("checkForUniqueEntity: illegeal parameter:\n" ++ show nd)
+
+
+      -- Find unparsed entities for which no notation is specified
+      checkNotationDecls :: [String] -> XmlTrees -> XmlTrees
+      checkNotationDecls notationNames' upEntities'
+	  = concatMap (checkNotationDecl) upEntities'
+          where
+          checkNotationDecl :: XmlTree -> XmlTrees
+          checkNotationDecl n@(NTree (XDTD ENTITY al) _)
+              = if (notationName al) `elem` notationNames'
+	        then []
+                else err ("The notation " ++ show (notationName al) ++ " must be declared " ++
+	                  "when referenced in the unparsed entity declaration for " ++
+		          show (upEntityName al) ++ ".") n
+                where
+		notationName = lookup1 k_ndata
+                upEntityName = lookup1 a_name
+
+          checkNotationDecl nd
+              = error ("checkNotationDecl: illegeal parameter:\n" ++ show nd)
+
+
+
+-- |
+-- Validation of Element declarations.
+--
+-- 1. Validates that an element is not declared multiple times.
+--
+--    Validity constraint: Unique Element Type Declaration (3.2 \/ p.21 in Spec) 
+--
+--
+-- 2. Validates that an element name only appears once in a mixed-content declaration.
+--
+--    Validity constraint: No Duplicate Types (3.2 \/ p.21 in Spec) 
+--
+--
+-- 3. Issues a warning if an element mentioned in a content model is not declared in the
+--    DTD.
+--
+--    Optional warning: (3.2 \/ p.21 in Spec)
+--
+--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node
+--
+--    - 2.parameter elemNames :  list of all element names declared in the DTD
+--
+--    - returns : a list of errors
+
+
+validateElements :: XmlTrees -> [String] -> XmlTrees
+validateElements dtdPart elemNames
+    = checkForUniqueElement elements []
+      ++
+      checkMixedContents mixedContentElems
+      ++
+      checkContentModels elemNames elements
+
+      where
+      elements          = isElement $$ dtdPart
+      mixedContentElems = isMixedContentElement $$ dtdPart
+
+
+      -- Validates that an element is not declared multiple times
+      checkForUniqueElement :: XmlTrees -> [String] -> XmlTrees
+      checkForUniqueElement (x@(NTree (XDTD ELEMENT al) _):xs) used
+          = if name `elem` used
+	    then err ("Element type " ++ show name ++
+		      " must not be declared more than once.") x
+		 ++
+		 checkForUniqueElement xs used
+
+	    else checkForUniqueElement xs (name : used)
+	    where
+	    name = lookup1 a_name al
+
+      checkForUniqueElement [] _ = []
+
+      checkForUniqueElement nd _
+          = error ("checkForUniqueElement: illegeal parameter:\n" ++ show nd)
+
+
+      -- Validates that an element name only appears once in a mixed-content declaration
+      checkMixedContents elems
+          = concatMap (checkMixedContent) elems
+	  where
+          checkMixedContent (NTree (XDTD ELEMENT al) cs)
+	      = checkMC (getChildren (head cs)) []
+	      where
+	      elemName = lookup1 a_name al
+
+	      checkMC :: XmlTrees -> [String] -> XmlTrees
+	      checkMC (x@(NTree (XDTD NAME al') _):xs) used
+                  = if name `elem` used
+	            then err ("The element type " ++ show name ++
+			      " was already specified in the mixed-content model of the element declaration " ++
+		              show elemName ++ ".") x
+		         ++
+		         checkMC xs used
+
+	            else checkMC xs (name : used)
+	            where
+	            name = lookup1 a_name al'
+
+              checkMC [] _ = []
+
+              checkMC nd _
+	          = error ("checkMC: illegeal parameter:\n" ++ show nd)
+
+	  checkMixedContent nd
+	      = error ("checkMixedContent: illegeal parameter:\n" ++ show nd)
+
+
+      -- Issues a warning if an element mentioned in a content model is not
+      -- declared in the DTD.
+      checkContentModels names elems
+          = concatMap checkContentModel elems
+	  where
+          checkContentModel :: XmlFilter
+          checkContentModel (NTree (XDTD ELEMENT al) cs)
+              = validateContent (lookup1 a_type al)
+	      where
+	      elemName = lookup1 a_name al
+
+	      validateContent :: String -> XmlTrees
+	      validateContent cm
+	          | cm == v_children = checkContent (head cs)
+	          | cm == v_mixed    = checkContent (head cs)
+	          | otherwise        = []  -- no child elements to check
+
+	      checkContent :: XmlFilter
+	      checkContent n@(NTree (XDTD NAME al') _)
+	          = if childElemName `elem` names
+	            then []
+	            else warn ("The element type "++ show childElemName ++
+		               ", used in content model of element "++ show elemName ++
+			       ", is not declared.") n
+	            where
+		    childElemName = lookup1 a_name al'
+
+	      checkContent (NTree (XDTD CONTENT _) cs')
+	          = concatMap (checkContent) cs'
+
+	      checkContent nd
+	          = error ("checkContent: illegeal parameter:\n" ++ show nd)
+
+          checkContentModel nd
+              = error ("checkContentModel: illegeal parameter:\n" ++ show nd)
+
+
+-- |
+-- Validation of Attribute declarations.
+--
+-- (1) Issues a warning if an attribute is declared for an element type not itself
+--    decared.
+--
+--    Optinal warning: (3.3 \/ p. 24 in Spec)
+--
+--
+-- 2. Issues a warning if more than one definition is provided for the same
+--    attribute of a given element type. Fist declaration is binding, later
+--    definitions are ignored.
+--
+--    Optional warning: (3.3 \/ p.24 in Spec)
+--
+--
+-- 3. Issues a warning if the same Nmtoken occures more than once in enumerated
+--    attribute types of a single element type.
+--
+--    Optional warning: (3.3.1 \/ p.27 in Spec) 
+--
+--
+-- 4. Validates that an element type has not more than one ID attribute defined.
+--
+--    Validity constraint: One ID per Element Type (3.3.1 \/ p.26 in Spec) 
+--
+--
+-- 5. Validates that an element type has not more than one NOTATION attribute defined.
+--
+--    Validity constraint: One Notation per Element Type (3.3.1 \/ p.27 in Spec) 
+--
+--
+-- 6. Validates that an ID attributes has the type #IMPLIED or #REQUIRED.
+--
+--    Validity constraint: ID Attribute Default (3.3.1 \/ p.26 in Spec) 
+--
+--
+-- 7. Validates that all referenced notations are declared.
+--
+--    Validity constraint: Notation Attributes (3.3.1 \/ p.27 in Spec) 
+--
+--
+-- 8. Validates that notations are not declared for EMPTY elements.
+--
+--    Validity constraint: No Notation on Empty Element (3.3.1 \/p.27 in Spec) 
+--
+--
+-- 9. Validates that the default value matches the lexical constraints of it's type.
+--
+--    Validity constraint: Attribute default legal (3.3.2 \/ p.28 in Spec)
+--
+--
+--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node
+--
+--    - 2.parameter elemNames :  list of all element names declared in the DTD
+--
+--    - 3.parameter notationNames :  list of all notation names declared in the DTD
+--
+--    - returns : a list of errors
+
+validateAttributes :: XmlTrees -> [String] -> [String] -> XmlTrees
+validateAttributes dtdPart elemNames notationNames
+    = -- 1. Find attributes for which no elements are declared
+      ((checkDeclaredElements elemNames) $$ attributes)
+      ++
+      -- 2. Find attributes which are declared more than once
+      (checkForUniqueAttributeDeclaration attributes [])
+      ++
+      -- 3. Find enumerated attribute types which nmtokens are declared more than once
+      (checkEnumeratedTypes
+      `o`
+      (isEnumAttrType `orElse` isNotationAttrType) $$ attributes)
+      ++
+      -- 4. Validate that there exists only one ID attribute for an element
+      (checkForUniqueId idAttributes [])
+      ++
+      -- 5. Validate that there exists only one NOTATION attribute for an element
+      (checkForUniqueNotation notationAttributes [])
+      ++
+      -- 6. Validate that ID attributes have the type #IMPLIED or #REQUIRED
+      (checkIdKindConstraint $$ idAttributes)
+      ++
+      -- 7. Validate that all referenced notations are declared
+      ((checkNotationDeclaration notationNames) $$ notationAttributes)
+      ++
+      -- 8. Validate that notations are not declared for EMPTY elements
+      ((checkNoNotationForEmptyElement
+      	  (
+    	      getXTextValues (getDTDValue a_name $$ (isEmptyElement $$ dtdPart))
+       	  )
+        ) $$ notationAttributes)
+      ++
+      -- 9. Validate that the default value matches the lexical constraints of it's type
+      ((checkDefaultValueTypes dtdPart) $$ (isDefaultAttrKind $$ attributes))
+
+      where
+      --------------------------------------------------------------------------
+      -- helper functions
+      attributes         = isAttlist $$ dtdPart
+      idAttributes       = isIdAttrType $$ attributes
+      notationAttributes = isNotationAttrType $$ attributes
+
+
+      elemName = lookup1 a_name
+      attName  = lookup1 a_value
+
+      --------------------------------------------------------------------------
+      -- 1. Find attributes for which no elements are declared
+      checkDeclaredElements :: [String] -> XmlFilter
+      checkDeclaredElements elemNames' n@(NTree (XDTD ATTLIST al) _)
+          = if (elemName al) `elem` elemNames'
+	    then []
+	    else warn ("The element type \""++ elemName al ++ "\" used in declaration "++
+	               "of attribute \""++ attName al ++"\" is not declared.") n
+
+      checkDeclaredElements _ nd
+          = error ("checkDeclaredElements: illegeal parameter:\n" ++ show nd)
+
+      --------------------------------------------------------------------------
+      -- 2. Find attributes which are declared more than once
+      checkForUniqueAttributeDeclaration :: XmlTrees -> [String] -> XmlTrees
+      checkForUniqueAttributeDeclaration (x@(NTree (XDTD ATTLIST al) _):xs) used
+          = if name `elem` used
+	    then warn ("Attribute \""++ aname ++"\" for element type \""++
+		        ename ++"\" is already declared. First "++
+		        "declaration will be used.") x
+		 ++
+		 checkForUniqueAttributeDeclaration xs used
+
+	    else checkForUniqueAttributeDeclaration xs (name : used)
+	    where
+	    ename = elemName al
+	    aname = attName al
+	    name  = ename ++ "|" ++ aname
+
+      checkForUniqueAttributeDeclaration [] _ = []
+
+      checkForUniqueAttributeDeclaration nd _
+          = error ("checkForUniqueAttributeDeclaration: illegeal parameter:\n" ++ show nd)
+
+
+      --------------------------------------------------------------------------
+      -- 3. Find enumerated attribute types which nmtokens are declared more than once
+      checkEnumeratedTypes :: XmlFilter
+      checkEnumeratedTypes (NTree (XDTD ATTLIST al) cs)
+          = checkForUniqueType cs []
+	  where
+	  checkForUniqueType :: XmlTrees -> [String] -> XmlTrees
+          checkForUniqueType (x@(NTree (XDTD NAME al') _):xs) used
+              = if nmtoken `elem` used
+	        then warn ("Nmtoken \""++ nmtoken ++"\" should not "++
+		        "occur more than once in attribute \""++ attName al ++
+			"\" for element \""++ elemName al ++ "\".") x
+		     ++
+		     checkForUniqueType xs used
+
+	        else checkForUniqueType xs (nmtoken : used)
+	        where
+	        nmtoken = lookup1 a_name al'
+
+          checkForUniqueType [] _ = []
+
+          checkForUniqueType nd _
+              = error ("checkForUniqueType: illegeal parameter:\n" ++ show nd)
+
+      checkEnumeratedTypes nd
+          = error ("checkEnumeratedTypes: illegeal parameter:\n" ++ show nd)
+
+
+      --------------------------------------------------------------------------
+      -- 4. Validate that there exists only one ID attribute for an element
+      checkForUniqueId :: XmlTrees -> [String] -> XmlTrees
+      checkForUniqueId (x@(NTree (XDTD ATTLIST al) _):xs) used
+          = if ename `elem` used
+	    then err ("Element \""++ ename ++ "\" already has attribute of type "++
+		       "ID, another attribute \""++ attName al ++ "\" of type ID is "++
+		       "not permitted.") x
+		 ++
+		 checkForUniqueId xs used
+
+	    else checkForUniqueId xs (ename : used)
+	    where
+	    ename = elemName al
+
+      checkForUniqueId [] _ = []
+
+      checkForUniqueId nd _
+          = error ("checkForUniqueId: illegeal parameter:\n" ++ show nd)
+
+      --------------------------------------------------------------------------
+      -- 5. Validate that there exists only one NOTATION attribute for an element
+      checkForUniqueNotation :: XmlTrees -> [String] -> XmlTrees
+      checkForUniqueNotation (x@(NTree (XDTD ATTLIST al) _):xs) used
+          = if ename `elem` used
+	    then err ("Element \""++ elemName al ++ "\" already has attribute of type "++
+		       "NOTATION, another attribute \""++ attName al ++ "\" of type NOTATION "++
+		       "is not permitted.") x
+		 ++
+		 checkForUniqueNotation xs used
+
+	    else checkForUniqueNotation xs (ename : used)
+	    where
+	    ename = elemName al
+
+      checkForUniqueNotation [] _ = []
+
+      checkForUniqueNotation nd _
+          = error ("checkForUniqueNotation: illegeal parameter:\n" ++ show nd)
+
+      --------------------------------------------------------------------------
+      -- 6. Validate that ID attributes have the type #IMPLIED or #REQUIRED
+      checkIdKindConstraint :: XmlFilter
+      checkIdKindConstraint nd@(NTree (XDTD ATTLIST al) _)
+          = if (attKind == k_implied) || (attKind == k_required)
+	    then []
+	    else err ("ID attribute \""++ attName al ++"\" must have a declared default "++
+	              "of \"#IMPLIED\" or \"REQUIRED\"") nd
+	    where
+	    attKind = lookup1 a_kind al
+
+      checkIdKindConstraint nd
+          = error ("checkIdKindConstraint: illegeal parameter:\n" ++ show nd)
+
+
+      --------------------------------------------------------------------------
+      -- 7. Validate that all referenced notations are declared
+      checkNotationDeclaration :: [String] -> XmlFilter
+      checkNotationDeclaration notations (NTree (XDTD ATTLIST al) cs)
+          = checkNotations $$ cs
+	  where
+	  checkNotations :: XmlFilter
+	  checkNotations nd@(NTree (XDTD NAME al') _)
+	      = if notation `elem` notations
+	        then []
+	        else err ("The notation \""++ notation ++"\" must be declared when "++
+		          "referenced in the notation type list for attribute \""++ attName al ++
+			  "\" of element \""++ elemName al ++"\".") nd
+                where
+	        notation = lookup1 a_name al'
+
+          checkNotations nd
+              = error ("checkNotations: illegeal parameter:\n" ++ show nd)
+
+      checkNotationDeclaration _ nd
+          = error ("checkNotationDeclaration: illegeal parameter:\n" ++ show nd)
+
+      --------------------------------------------------------------------------
+      -- 8. Validate that notations are not declared for EMPTY elements
+      checkNoNotationForEmptyElement :: [String] -> XmlFilter
+      checkNoNotationForEmptyElement emptyElems nd@(NTree (XDTD ATTLIST al) _)
+          = if (elemName al) `elem` emptyElems
+	    then err ("Attribute \""++ attName al ++"\" of type NOTATION must not be "++
+	              "declared on the element \""++ elemName al ++"\" declared EMPTY.")
+		      nd
+	    else []
+
+      checkNoNotationForEmptyElement _ nd
+          = error ("checkNoNotationForEmptyElement: illegeal parameter:\n" ++ show nd)
+
+      --------------------------------------------------------------------------
+      -- 9. Validate that default values meet the lexical constraints of the attribute types
+      checkDefaultValueTypes :: XmlTrees -> XmlFilter
+      checkDefaultValueTypes dtdPart' n@(NTree (XDTD ATTLIST _) _)
+          = checkAttributeValue dtdPart' n n
+
+      checkDefaultValueTypes _ nd
+          = error ("checkDefaultValueTypes: illegeal parameter:\n" ++ show nd)
+
+
+
+-- ------------------------------------------------------------
+
+-- |
+-- Removes doublicate declarations from the DTD, which first declaration is
+-- binding. This is the case for ATTLIST and ENTITY declarations.
+--
+--    - returns : A function that replaces the children of DOCTYPE nodes by a list
+--               where all multiple declarations are removed.
+
+removeDoublicateDefs :: XmlFilter
+removeDoublicateDefs n@(NTree (XDTD DOCTYPE _) cs)
+    = replaceChildren (removeDoubleDefs [] cs) n
+      where
+      removeDoubleDefs :: [String] -> XmlTrees -> XmlTrees
+      removeDoubleDefs used (x@(NTree (XDTD ATTLIST al) _):xs)
+          = if elemAttr `elem` used
+            then removeDoubleDefs used xs
+            else x
+	         :
+	         removeDoubleDefs (elemAttr : used) xs
+            where
+	    elemAttr = elemName ++ "|" ++ attrName
+            attrName = lookup1 a_value al
+            elemName = lookup1 a_name al
+
+
+      removeDoubleDefs used (x@(NTree (XDTD ENTITY al) _):xs)
+          = if name `elem` used
+            then removeDoubleDefs used xs
+            else x
+	         :
+	         removeDoubleDefs (name : used) xs
+            where
+            name = lookup1 a_name al
+
+
+      removeDoubleDefs used (x:xs)
+          = x : removeDoubleDefs used xs
+
+      removeDoubleDefs _ []
+          = []
+
+
+removeDoublicateDefs n
+    = [n]
+
diff --git a/src/Text/XML/HXT/Validator/DocTransformation.hs b/src/Text/XML/HXT/Validator/DocTransformation.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Validator/DocTransformation.hs
@@ -0,0 +1,234 @@
+-- |
+-- This module provides functions for transforming XML documents represented as
+-- XmlTree with respect to its DTD.
+
+-- Transforming an XML document with respect to its DTD means:
+--
+--  - add all attributes with default values
+--
+--  - normalize all attribute values
+--
+--  - sort all attributes in lexical order
+--
+
+
+-- Note: Transformation should be started after validation.
+
+
+-- Before the document is validated, a lookup-table is build on the basis of
+-- the DTD which maps element names to their transformation functions.
+-- After this initialization phase the whole document is traversed in preorder
+-- and every element is transformed by the XmlFilter from the lookup-table.
+
+-- Special namings in source code:
+--
+--  - nd - XDTD node
+--
+--  - n  - XTag node
+--
+-- Author : .\\artin Schmidt
+
+module Text.XML.HXT.Validator.DocTransformation
+    ( transform
+    )
+where
+
+import Text.XML.HXT.DOM.XmlTree
+
+import Text.XML.HXT.Validator.AttributeValueValidation
+
+import Data.Maybe
+import Data.List
+
+
+
+-- |
+-- Lookup-table which maps element names to their transformation functions. The
+-- transformation functions are XmlFilters.
+
+type TransEnvTable	= [TransEnv]
+type TransEnv 		= (ElemName, TransFct)
+type ElemName		= String
+type TransFct		= XmlFilter
+
+
+-- ------------------------------------------------------------
+
+
+-- |
+-- filter for transforming the document.
+--
+--    * 1.parameter dtdPart :  the DTD subset (Node @DOCTYPE@) of the XmlTree
+--
+--    - 2.parameter doc :  the document subset of the XmlTree
+--
+--    - returns : a list of errors
+
+transform :: XmlTree -> XmlTree -> XmlTrees
+transform dtdPart dom
+    = traverseTree transTable dom
+    where
+    transTable = {-# SCC "buildAllTransFcts" #-} buildAllTransformationFunctions dtdPart
+
+
+
+-- |
+-- Traverse the XmlTree in preorder.
+--
+--    * 1.parameter transEnv :  lookup-table which maps element names to their transformation functions
+--
+--    - returns : the whole transformed document
+
+traverseTree :: TransEnvTable -> XmlFilter
+traverseTree transEnv n@(NTree (XTag name _) cs)
+    = replaceChildren (concatMap (traverseTree transEnv) cs) (head (transFct n))
+      where
+      transFct = case (lookup (qualifiedName name) transEnv) of
+          Nothing -> this   -- element not in DTD, can't be transformed
+	  Just f  -> f
+
+traverseTree _ n = [n]
+
+
+-- |
+-- Build all transformation functions.
+--
+--    * 1.parameter dtdPart :  the DTD subset, root node should be of type @DOCTYPE@
+--
+--    - returns : lookup-table which maps element names to their transformation functions
+
+buildAllTransformationFunctions :: XmlTree -> TransEnvTable
+buildAllTransformationFunctions dtdPart
+    = buildTransRoot
+      :
+      -- construct the list of filters
+      map (buildTransformationFunctions dtdNodes) (isElement $$ dtdNodes)
+      where
+      dtdNodes = getChildren dtdPart
+
+
+-- |
+-- Build a transformation function for the document root. By root @\/@
+-- is meant, which is the topmost dummy created by the parser. This function is only a
+-- dummy, too.
+--
+--    * returns : entry for the lookup-table
+
+buildTransRoot :: TransEnv
+buildTransRoot = (t_root, this)
+
+
+
+-- |
+-- Build transformation functions for an element.
+--
+--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node
+--
+--    * 1.parameter nd :  element declaration for which the transformation functions are
+--                    created
+--
+--    - returns : entry for the lookup-table
+
+buildTransformationFunctions :: XmlTrees -> XmlTree -> TransEnv
+
+buildTransformationFunctions dtdPart n@(NTree (XDTD ELEMENT al) _)
+    = (name, transFct)
+    where
+    name = lookup1 a_name al
+    transFct = lexicographicAttributeOrder
+               `o`
+	       normalizeAttributeValues n dtdPart
+	       `o`
+	       setDefaultAttributeValues n dtdPart
+
+buildTransformationFunctions _ n
+    = error ("buildTransformationFunctions: illegeal parameter:\n" ++ show n)
+
+
+
+-- ------------------------------------------------------------
+
+
+-- |
+-- Sort the attributes of an element in lexicographic order.
+--
+--    * returns : a function which takes an element (XTag), sorts its
+--                  attributes in lexicographic order and returns the changed element
+
+lexicographicAttributeOrder :: XmlFilter
+lexicographicAttributeOrder
+    = processAttrl sortAttrl
+      where
+      sortAttrl al
+	  = map (al !!) ixs
+	    where
+	    ns  = map nameOf al
+	    ixs = map snd . sort . zip ns $ [(0::Int)..]
+
+-- |
+-- Normalize attribute values.
+--
+--    * returns : a function which takes an element (XTag), normalizes its
+--                  attribute values and returns the changed element
+
+normalizeAttributeValues :: XmlTree -> XmlTrees -> XmlFilter
+normalizeAttributeValues elemDescr@(NTree (XDTD ELEMENT _) _) dtdPart
+    = processAttr normalizeAttr
+      where
+      elemName     = valueOfDTD a_name elemDescr
+      declaredAtts = isAttlistOfElement elemName $$ dtdPart
+
+      normalizeAttr :: XmlFilter
+      normalizeAttr att
+	  = normalizeAttrValue (if null attDescr
+				then Nothing
+				else Just (head attDescr)) att
+	    where
+	    attDescr = filter (\ x -> (valueOfDTD a_value x) == nameOf att) declaredAtts
+
+      normalizeAttrValue :: Maybe XmlTree -> XmlFilter
+      normalizeAttrValue descr
+	  = modifyChildren ((modifyText (normalizeAttributeValue descr) $$) . xmlTreesToText)
+
+normalizeAttributeValues n _
+    = error ("normalizeAttributeValues: illegeal parameter:\n" ++ show n)
+
+
+
+-- |
+-- Set default attribute values if they are not set.
+--
+--    * returns : a function which takes an element (XTag), adds missing attribute
+--                  defaults and returns the changed element
+
+setDefaultAttributeValues :: XmlTree -> XmlTrees -> XmlFilter
+setDefaultAttributeValues elemDescr@(NTree (XDTD ELEMENT _) _) dtdPart
+    = seqF (map setDefault defaultAtts)
+      where
+						-- select the element name from the dtd
+      elemName = valueOfDTD a_name elemDescr
+
+      defaultAtts = ( isFixedAttrKind		-- select attributes with default values
+		      `orElse`
+		      isDefaultAttrKind
+		    )
+                    $$
+		    (isAttlistOfElement elemName $$ dtdPart)
+
+      setDefault	:: XmlTree -> XmlFilter
+      setDefault attrDescr			-- add the default attributes
+	  = ( addAttr attName defaultValue	-- to tag nodes with missing attributes
+	      `whenNot`
+	      hasAttr attName
+	    )
+	    `when`
+	    isXTag
+	    where
+	    attName      = valueOfDTD a_value   attrDescr
+	    defaultValue = valueOfDTD a_default attrDescr
+
+
+setDefaultAttributeValues n _
+    = error ("setDefaultAttributeValues: illegeal parameter:\n" ++ show n)
+
+
diff --git a/src/Text/XML/HXT/Validator/DocValidation.hs b/src/Text/XML/HXT/Validator/DocValidation.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Validator/DocValidation.hs
@@ -0,0 +1,537 @@
+-- |
+-- This module provides functions for validating XML Documents represented as
+-- XmlTree.
+
+-- Unlike other popular XML validation tools the validation process returns
+-- a list of errors instead of aborting after the first error was found.
+
+
+-- Before the document is validated, a lookup-table is build on the basis of
+-- the DTD which maps element names to their validation functions.
+-- After this initialization phase the whole document is traversed in preorder
+-- and every element is validated by the XmlFilter from the lookup-table.
+
+-- Special namings in source code:
+--
+--  - nd - XDTD node
+--
+--  - n  - XTag node
+--
+-- Author : .\\artin Schmidt
+
+module Text.XML.HXT.Validator.DocValidation
+    ( validateDoc
+    )
+where
+
+import Text.XML.HXT.DOM.XmlTree
+
+import Text.XML.HXT.Validator.AttributeValueValidation
+import Text.XML.HXT.Validator.XmlRE
+
+import Data.Maybe
+
+-- |
+-- Lookup-table which maps element names to their validation functions. The
+-- validation functions are XmlFilters.
+
+type ValiEnvTable	= [ValiEnv]
+type ValiEnv 		= (ElemName, ValFct)
+type ElemName		= String
+type ValFct		= XmlFilter
+
+
+
+-- ------------------------------------------------------------
+
+
+-- |
+-- Validate a document.
+--
+--    * 1.parameter dtdPart :  the DTD subset (Node @DOCTYPE@) of the XmlTree
+--
+--    - 2.parameter doc :  the document subset of the XmlTree
+--
+--    - returns : a list of errors
+
+validateDoc :: XmlTree -> XmlTree -> XmlTrees
+validateDoc dtdPart doc
+    = traverseTree valTable doc
+    where
+    valTable = {-# SCC "buildAllValFcts" #-} buildAllValidationFunctions dtdPart
+
+
+-- |
+-- Traverse the XmlTree in preorder.
+--
+--    * 1.parameter valiEnv :  lookup-table which maps element names to their validation functions
+--
+--    - returns : list of errors
+
+traverseTree :: ValiEnvTable -> XmlFilter
+traverseTree valiEnv n@(NTree (XTag name _) cs)
+    = (valFct n) ++ concatMap (traverseTree valiEnv) cs
+      where
+      valFct :: XmlFilter
+      valFct
+          = case (lookup (qualifiedName name) valiEnv) of
+	    Nothing -> err ("Element " ++ show (qualifiedName name) ++ " not declared in DTD.")
+	    Just f  -> f
+
+traverseTree _ _ = []
+
+
+
+-- ------------------------------------------------------------
+
+
+-- |
+-- Build all validation functions.
+--
+--    * 1.parameter dtdPart :  DTD subset, root node should be of type @DOCTYPE@
+--
+--    - returns : lookup-table which maps element names to their validation functions
+
+buildAllValidationFunctions :: XmlTree -> ValiEnvTable
+buildAllValidationFunctions dtdPart
+    = buildValidateRoot dtdPart
+      :
+      -- construct a list of validation filters for all element declarations
+      map (buildValidateFunctions dtdNodes) (isElement $$ dtdNodes)
+      where
+      dtdNodes = getChildren dtdPart
+
+
+-- |
+-- Build a validation function for the document root. By root node @\/@
+-- is meant, which is the topmost dummy created by the parser.
+--
+--    * 1.parameter dtdPart :  DTD subset, root node should be of type @DOCTYPE@
+--
+--    - returns : entry for the lookup-table
+
+buildValidateRoot :: XmlTree -> ValiEnv
+buildValidateRoot (NTree (XDTD DOCTYPE al) _)
+    = (t_root, valFct)
+      where
+      name = lookup1 a_name al
+
+      valFct :: XmlFilter
+      valFct nd@(NTree (XTag _ _) cs)
+          = if msg == ""
+            then []
+            else err ("Root Element must be " ++ show name ++ ". " ++ msg) nd
+	    where
+	    re = re_sym (name)
+	    msg = checkRE (matches re cs)
+
+      valFct n = error ("buildValidateRoot: illegeal parameter:\n" ++ show n)
+
+buildValidateRoot nd
+    = error ("buildValidateRoot: illegeal parameter:\n" ++ show nd)
+
+
+-- |
+-- Build validation functions for an element.
+--
+--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node
+--
+--    - 2.parameter nd :  element declaration for which the validation functions are
+--                   created
+--
+--    - returns : entry for the lookup-table
+
+buildValidateFunctions :: XmlTrees -> XmlTree -> ValiEnv
+
+buildValidateFunctions dtdPart nd@(NTree (XDTD ELEMENT al) _)
+    = (elemName, valFct)
+      where
+      elemName = lookup1 a_name al
+
+      valFct :: XmlFilter
+      valFct = buildContentValidation nd
+               +++
+	       buildAttributeValidation dtdPart nd
+
+buildValidateFunctions _ nd
+    = error ("buildValidateFunctions: illegeal parameter:\n" ++ show nd)
+
+
+-- ------------------------------------------------------------
+
+
+-- |
+-- Build validation functions for the content model of an element.
+-- Validity constraint: Element Valid (3 \/ p.18 in Spec)
+--
+--    * 1.parameter nd :  element declaration for which the content validation functions
+--                  are built
+--
+--    - returns : a function which takes an element (XTag), checks if its
+--                  children match its content model and returns a list of errors
+
+buildContentValidation :: XmlTree -> XmlFilter
+buildContentValidation nd@(NTree (XDTD ELEMENT al) _)
+    = contentValidation attrType nd
+      where
+      attrType = lookup1 a_type al
+
+
+      -- Delegates construction of the validation function on the basis of the
+      -- content model type
+      contentValidation :: String -> XmlTree -> XmlFilter
+      contentValidation typ (NTree (XDTD ELEMENT _) cs)
+          | typ == k_pcdata   = contentValidationPcdata
+          | typ == k_empty    = contentValidationEmpty
+          | typ == k_any      = contentValidationAny
+          | typ == v_children = contentValidationChildren cs
+          | typ == v_mixed    = contentValidationMixed cs
+          | otherwise         = error ("contentValidation: unknown type: " ++ show typ)
+
+      contentValidation _ nd'
+          = error ("contentValidation: illegeal parameter:\n" ++ show nd')
+
+
+      -- Checks #PCDATA content models
+      contentValidationPcdata :: XmlFilter
+      contentValidationPcdata n@(NTree (XTag name _) cs)
+          = if msg == ""
+            then []
+            else err ("The content of element "++ show (qualifiedName name) ++
+	              " must match (#PCDATA). "++ msg) n
+	    where
+	    re = re_rep (re_sym k_pcdata)
+	    msg = checkRE (matches re cs)
+
+      contentValidationPcdata n
+          = error ("contentValidationPcdata: illegeal parameter:\n" ++ show n)
+
+
+      -- Checks EMPTY content models
+      contentValidationEmpty :: XmlFilter
+      contentValidationEmpty n@(NTree (XTag name _) cs)
+          = if msg == ""
+            then []
+            else err ("The content of element " ++ show (qualifiedName name) ++
+	              " must match EMPTY. " ++ msg) n
+	    where
+	    re = re_unit
+	    msg = checkRE (matches re cs)
+
+      contentValidationEmpty n
+          = error ("contentValidationEmpty: illegeal parameter:\n" ++ show n)
+
+
+      -- Checks ANY content models
+      contentValidationAny :: XmlFilter
+      contentValidationAny n@(NTree (XTag name _) cs)
+          = if msg == ""
+            then []
+            else err ("The content of element " ++ show (qualifiedName name) ++
+	              " must match ANY. " ++ msg) n
+	    where
+	    re = re_rep (re_dot)
+	    msg = checkRE (matches re cs)
+
+      contentValidationAny n
+          = error ("contentValidationAny: illegeal parameter:\n" ++ show n)
+
+
+      -- Checks "children" content models
+      contentValidationChildren :: XmlTrees -> XmlFilter
+      contentValidationChildren cm n@(NTree (XTag name _) cs)
+          = if msg == ""
+            then []
+            else err ("The content of element " ++ show (qualifiedName name) ++
+	              " must match " ++ printRE re ++ ". " ++ msg) n
+	    where
+	    re = createRE (head cm)
+	    msg = checkRE (matches re cs)
+
+      contentValidationChildren _ n
+          = error ("contentValidationChildren: illegeal parameter:\n" ++ show n)
+
+
+      -- Checks "mixed content" content models
+      contentValidationMixed :: XmlTrees -> XmlFilter
+      contentValidationMixed cm n@(NTree (XTag name _) cs)
+          = if msg == ""
+            then []
+            else err ("The content of element "++ show (qualifiedName name) ++
+	              " must match " ++ printRE re ++ ". " ++ msg) n
+	    where
+	    re = re_rep (re_alt (re_sym k_pcdata) (createRE (head cm)))
+	    msg = checkRE (matches re cs)
+
+      contentValidationMixed _ n
+          = error ("contentValidationMixed: illegeal parameter:\n" ++ show n)
+
+
+buildContentValidation nd
+    = error ("buildContentValidation: illegeal parameter:\n" ++ show nd)
+
+
+
+-- |
+-- Build a regular expression from the content model. The regular expression
+-- is provided by the module XmlRE.
+--
+--    * 1.parameter nd :  node of the content model. Expected: @CONTENT@ or
+--              @NAME@
+--
+--    - returns : regular expression of the content model
+
+createRE ::  XmlTree -> RE String
+createRE (NTree (XDTD CONTENT al) cs)
+    = processModifier modifier
+      where
+      modifier = lookup1 a_modifier al
+      kind     = lookup1 a_kind al
+
+      processModifier :: String -> RE String
+      processModifier m
+          | m == v_plus	  = re_plus (processKind kind)
+	  | m == v_star	  = re_rep  (processKind kind)
+	  | m == v_option = re_opt  (processKind kind)
+	  | m == v_null	  = processKind kind
+	  | otherwise     = error ("Unknown modifier: " ++ show m)
+
+      processKind :: String -> RE String
+      processKind k
+          | k == v_seq	  = makeSequence cs
+	  | k == v_choice = makeChoice cs
+	  | otherwise	  = error ("Unknown kind: " ++ show k)
+
+      makeSequence :: XmlTrees -> RE String
+      makeSequence []     = re_unit
+      makeSequence (x:xs) = re_seq (createRE x) (makeSequence xs)
+
+      makeChoice :: XmlTrees -> RE String
+      makeChoice []       = re_zero ""
+      makeChoice (x:xs)   = re_alt (createRE x) (makeChoice xs)
+
+createRE (NTree (XDTD NAME al) _)
+    = re_sym (lookup1 a_name al)
+
+createRE nd
+    = error ("createRE: illegeal parameter:\n" ++ show nd)
+
+
+
+-- ------------------------------------------------------------
+
+
+
+-- |
+-- Build validation functions for the attributes of an element.
+--
+--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node
+--
+--    - 2.parameter nd :  element declaration for which the attribute validation functions
+--                  are created
+--
+--    - returns : a function which takes an element (XTag), checks if its
+--                  attributes are valid and returns a list of errors
+
+buildAttributeValidation :: XmlTrees -> XmlTree -> XmlFilter
+buildAttributeValidation dtdPart nd =
+    noDoublicateAttributes
+    +++
+    checkNotDeclardAttributes attrDecls nd
+    +++
+    checkRequiredAttributes attrDecls nd
+    +++
+    checkFixedAttributes attrDecls nd
+    +++
+    checkValuesOfAttributes attrDecls dtdPart nd
+    where
+    attrDecls = isAttlist $$ dtdPart
+
+
+-- |
+-- Validate that all attributes of an element are unique.
+-- Well-formdness constraint: Unique AttSpec (3.1 \/ p.19 in Spec)
+--
+--    - returns : a function which takes an element (XTag), checks if its
+--                  attributes are unique and returns a list of errors
+
+noDoublicateAttributes :: XmlFilter
+noDoublicateAttributes n@(NTree (XTag _ _) _)
+    = doubles . reverse $ names
+      where
+      tagname = nameOf n
+      names   = map nameOf . getAttrl $ n
+
+      doubles :: [String] -> XmlTrees
+      doubles []
+	  = []
+      doubles (n1:ns)
+	  = ( if n1 `elem` ns
+	      then err ("Attribute " ++ show n1 ++ " was already specified for element " ++ show tagname ++ ".") n
+	      else []
+	    ) ++ doubles ns
+
+noDoublicateAttributes n
+    = error ("noDoublicateAttributes: illegeal parameter:\n" ++ show n)
+
+
+-- |
+-- Validate that all \#REQUIRED attributes are provided.
+-- Validity constraint: Required Attributes (3.3.2 \/ p.28 in Spec)
+--
+--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node
+--
+--    - 2.parameter nd :  element declaration which attributes have to be checked
+--
+--    - returns : a function which takes an element (XTag), checks if all
+--                  required attributes are provided and returns a list of errors
+
+checkRequiredAttributes :: XmlTrees -> XmlTree -> XmlFilter
+checkRequiredAttributes attrDecls (NTree (XDTD ELEMENT al) _)
+    = checkRequired requiredAtts
+      where
+      elemName     = lookup1 a_name al
+      requiredAtts = isRequiredAttrKind $$ (isAttlistOfElement elemName $$ attrDecls)
+
+
+      checkRequired :: XmlTrees -> XmlFilter
+      checkRequired ((NTree (XDTD ATTLIST al') _):xs) n@(NTree (XTag name _) _)
+          = if satisfies (hasAttr attName) n
+	    then checkRequired xs n
+	    else err ("Attribute " ++ show attName ++ " must be declared for element type " ++
+	             show (qualifiedName name) ++ ".") n
+	         ++
+		 checkRequired xs n
+	    where
+	    attName = lookup1 a_value al'
+
+      checkRequired [] _ = []
+
+      checkRequired nd n
+          = error ("checkRequired: illegeal parameter:\n" ++ show nd ++ show n)
+
+
+checkRequiredAttributes _ nd
+    = error ("checkRequiredAttributes: illegeal parameter:\n" ++ show nd)
+
+
+
+-- |
+-- Validate that \#FIXED attributes match the default value.
+-- Validity constraint: Fixed Attribute Default (3.3.2 \/ p.28 in Spec)
+--
+--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node
+--
+--    - 2.parameter nd :  element declaration which attributes have to be checked
+--
+--    - returns : a function which takes an element (XTag), checks if all
+--                  fixed attributes match the default value and returns a list of errors
+
+checkFixedAttributes :: XmlTrees -> XmlTree -> XmlFilter
+checkFixedAttributes attrDecls (NTree (XDTD ELEMENT al) _)
+    = checkFixed fixedAtts
+      where
+      elemName  = lookup1 a_name al
+      fixedAtts = isFixedAttrKind $$ (isAttlistOfElement elemName $$ attrDecls)
+
+
+      checkFixed :: XmlTrees -> XmlFilter
+      checkFixed (x@(NTree (XDTD ATTLIST al') _):xs) n@(NTree (XTag name _) _)
+          = if satisfies (hasAttr attName) n
+	    then if attValue == fixedValue
+	         then checkFixed xs n
+	         else err ("Attribute " ++ show attName ++ " of element " ++ show (qualifiedName name) ++
+		           " with value " ++ show attValue ++ " must have a value of " ++
+			   show fixedValue ++ ".") n
+	              ++
+		      checkFixed xs n
+	    else checkFixed xs n
+	    where
+	    attName    = lookup1 a_value al'
+	    fixedValue = normalizeAttributeValue (Just x) (lookup1 a_default al')
+	    attValue   = normalizeAttributeValue (Just x) (valueOf attName n)
+
+      checkFixed [] _ = []
+
+      checkFixed nd n
+          = error ("checkFixed: illegeal parameter:\n" ++ show nd ++ show n)
+
+
+checkFixedAttributes _ nd
+    = error ("checkFixedAttributes: illegeal parameter:\n" ++ show nd)
+
+
+-- |
+-- Validate that an element has no attributes which are not declared.
+-- Validity constraint: Attribute Value Type (3.1 \/ p.19 in Spec)
+--
+--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node
+--
+--    - 2.parameter nd :  element declaration which attributes have to be checked
+--
+--    - returns : a function which takes an element (XTag), checks if all
+--                  attributes are declared and returns a list of errors
+
+checkNotDeclardAttributes :: XmlTrees -> XmlTree -> XmlFilter
+checkNotDeclardAttributes attrDecls elemDescr
+    = checkNotDeclared
+      where
+      elemName = valueOfDTD a_name elemDescr
+      decls    = isAttlistOfElement elemName $$ attrDecls
+
+      checkNotDeclared :: XmlFilter
+      checkNotDeclared n
+	  = ( isXTag
+	      `guards`
+	      cat (map (searchForDeclaredAtt elemName decls) (getAttrl n))
+	    ) n
+
+      searchForDeclaredAtt :: String -> XmlTrees -> XmlTree -> XmlFilter
+      searchForDeclaredAtt name ((NTree (XDTD ATTLIST al') _):xs) att
+          = if (lookup1 a_value al') == nameOf att
+            then none
+	    else searchForDeclaredAtt name xs att
+
+      searchForDeclaredAtt name [] (NTree (XAttr attrName) _)
+          = err ("Attribute " ++ show (qualifiedName attrName) ++ " of element " ++ show name ++ " is not declared in DTD.")
+
+      searchForDeclaredAtt _ nd a
+          = error ("searchForDeclaredAtt: illegeal paramter:\n" ++ show nd ++ show a)
+
+-- |
+-- Validate that the attribute value meets the lexical constraints of its type.
+-- Validity constaint: Attribute Value Type (3.1 \/ p.19 in Spec)
+--
+--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node
+--
+--    - 2.parameter nd :  element declaration which attributes have to be checked
+--
+--    - returns : a function which takes an element (XTag), checks if all
+--                  attributes meet the lexical constraints and returns a list of errors
+
+checkValuesOfAttributes :: XmlTrees -> XmlTrees -> XmlTree -> XmlFilter
+checkValuesOfAttributes attrDecls dtdPart elemDescr
+    = checkValues
+      where
+      elemName = valueOfDTD a_name elemDescr
+      decls    = isAttlistOfElement elemName $$ attrDecls
+
+      checkValues :: XmlFilter
+      checkValues n
+          = ( isXTag
+	      `guards`
+	      cat (map (checkValue decls) (getAttrl n))
+	    ) n
+
+      checkValue :: XmlTrees -> XmlTree -> XmlFilter
+      checkValue (attrDecl@(NTree (XDTD ATTLIST al') _):xs) att
+          = if (lookup1 a_value al') == nameOf att
+            then checkAttributeValue dtdPart attrDecl
+	    else checkValue xs att
+
+      checkValue [] _
+          = none  -- undeclared attribute, reported by separate function
+
+      checkValue n _
+          = error ("checkValue: illegeal parameter:\n" ++ show n)
+
diff --git a/src/Text/XML/HXT/Validator/IdValidation.hs b/src/Text/XML/HXT/Validator/IdValidation.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Validator/IdValidation.hs
@@ -0,0 +1,268 @@
+-- |
+-- This module provides functions for checking special ID/IDREF/IDREFS constraints.
+
+-- Checking special ID/IDREF/IDREFS constraints means:
+--
+--  - checking that all ID values are unique.
+--
+--  - checking that all IDREF/IDREFS values match the value of some ID attribute
+--
+
+
+-- ID-Validation should be started before or after validating the document.
+
+
+-- First all nodes with ID attributes are collected from the document, then
+-- it is validated that values of ID attributes do not occure more than once.
+-- During a second iteration over the document it is validated that there exists
+-- an ID attribute value for IDREF/IDREFS attribute values.
+
+-- Special namings in source code:
+--
+--  - nd - XDTD node
+--
+--  - n  - XTag node
+--
+-- Author : .\\artin Schmidt
+
+module Text.XML.HXT.Validator.IdValidation
+    ( validateIds
+    )
+where
+
+
+import Text.XML.HXT.DOM.XmlTree
+import Text.XML.HXT.Validator.AttributeValueValidation
+
+
+
+-- |
+-- Lookup-table which maps element names to their validation functions. The
+-- validation functions are XmlFilters.
+
+type IdEnvTable		= [IdEnv]
+type IdEnv 		= (ElemName, IdFct)
+type ElemName		= String
+type IdFct		= XmlFilter
+
+
+
+-- |
+-- Perform the validation of the ID/IDREF/IDREFS constraints.
+--
+--    * 1.parameter dtdPart :  the DTD subset (Node @DOCTYPE@) of the XmlTree
+--
+--    - 2.parameter doc :  the document subset of the XmlTree
+--
+--    - returns : a list of errors
+
+validateIds :: XmlTree -> XmlTree -> XmlTrees
+validateIds dtdPart doc
+    = {-# SCC "checkForUniqueIds" #-} checkForUniqueIds idNodeList dtdNodes
+      ++
+      {-# SCC "checkIdReferences" #-} checkIdReferences idRefEnv doc
+      where
+      idEnv      = buildIdCollectorFcts dtdNodes
+      idRefEnv   = buildIdrefValidationFcts dtdNodes idNodeList
+      idNodeList = traverseTree idEnv doc
+      dtdNodes   = getChildren dtdPart
+
+
+-- |
+-- Traverse the XmlTree in preorder.
+--
+--    * 1.parameter idEnv :  lookup-table which maps element names to their validation functions
+--
+--    - returns : list of errors
+
+traverseTree :: IdEnvTable -> XmlFilter
+traverseTree idEnv n@(NTree (XTag name _) cs)
+    = (idFct n) ++ concatMap (traverseTree idEnv) cs
+      where
+      idFct :: XmlFilter
+      idFct
+          = case (lookup (qualifiedName name) idEnv) of
+	    Nothing -> none
+	    Just f  -> f
+
+traverseTree _ _ = []
+
+
+
+-- |
+-- Returns the value of an element's ID attribute. The attribute name has to be
+-- retrieved first from the DTD.
+--
+--    * 1.parameter dtdPart :  list of ID attribute definitions from the DTD
+--
+--    - 2.parameter n :  element which ID attribute value should be returned
+--
+--    - returns : normalized value of the ID attribute
+
+getIdValue :: XmlTrees -> XmlTree -> String
+getIdValue (x@(NTree (XDTD ATTLIST al) _):xs) n@(NTree (XTag name _al') _)
+    = if (qualifiedName name) == elemName
+      then attrValue
+      else getIdValue xs n
+      where
+      elemName  = lookup1 a_name al
+      attrName  = lookup1 a_value al
+      attrValue = normalizeAttributeValue (Just x) (valueOf attrName n)
+
+getIdValue _ _ = ""
+
+
+
+-- ------------------------------------------------------------
+
+
+-- |
+-- Build collector functions which return XTag nodes with ID attributes from
+-- a document.
+--
+--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node
+--
+--    - returns : lookup-table which maps element names to their collector function
+
+buildIdCollectorFcts :: XmlTrees -> IdEnvTable
+buildIdCollectorFcts dtdPart
+    = map (buildIdCollectorFct) (isIdAttrType $$ dtdPart)
+      where
+      buildIdCollectorFct :: XmlTree -> IdEnv
+      buildIdCollectorFct (NTree (XDTD ATTLIST al) _)
+          = (elemName, hasAttr attrName)
+            where
+            elemName = lookup1 a_name al
+            attrName = lookup1 a_value al
+
+      buildIdCollectorFct nd
+          = error ("buildIdCollectorFct: illegeal parameter:\n" ++ show nd)
+
+
+-- |
+-- Build validation functions for checking if IDREF\/IDREFS values match a value
+-- of some ID attributes.
+--
+--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node
+--
+--    - 2.parameter idNodeList :  list of all XTag nodes with ID attributes
+--
+--    - returns : lookup-table which maps element names to their validation function
+
+buildIdrefValidationFcts :: XmlTrees -> XmlTrees -> IdEnvTable
+buildIdrefValidationFcts dtdPart idNodeList
+    = map buildElemValidationFct elements
+      where
+      elements    = isElement $$ dtdPart
+      idValueList = getIdValues (isIdAttrType $$ dtdPart)
+
+      getIdValues :: XmlTrees -> [String]
+      getIdValues idAttrTypes
+          = map (getIdValue idAttrTypes) idNodeList
+
+
+      buildElemValidationFct :: XmlTree -> IdEnv
+      buildElemValidationFct (NTree (XDTD ELEMENT al) _)
+          = (elemName, buildIdrefValidationFct idRefAttrTypes)
+	  where
+	  elemName = lookup1 a_name al
+	  idRefAttrTypes = isIdRefAttrType $$ (isAttlistOfElement elemName) $$ dtdPart
+
+      buildElemValidationFct nd
+          = error ("buildIdrefValidationFct: illegeal parameter:\n" ++ show nd)
+
+
+      buildIdrefValidationFct :: XmlTrees -> XmlFilter
+      buildIdrefValidationFct (nd@(NTree (XDTD ATTLIST al) _):xs)
+          = checkIdref +++ buildIdrefValidationFct xs
+            where
+            attrName = lookup1 a_value al
+	    attrType = lookup1 a_type al
+
+            checkIdref :: XmlFilter
+            checkIdref n@(NTree (XTag name _) _)
+                = if satisfies (hasAttr attrName) n
+	          then if attrType == k_idref
+		       then checkValueDeclared n attrValue
+		       else let valueList = words attrValue
+		            in if null valueList
+		               then err ("Attribute " ++ show attrName ++
+					 " of Element " ++ show (qualifiedName name) ++
+					 " must have at least one name.") n
+		               else concatMap (checkValueDeclared n) (words attrValue)
+	          else []
+		  where
+		  attrValue = normalizeAttributeValue (Just nd) (valueOf attrName n)
+
+	    checkIdref _ = []
+
+
+	    checkValueDeclared :: XmlTree -> String -> XmlTrees
+	    checkValueDeclared n@(NTree (XTag _ _) _) attrValue
+	        = if attrValue `elem` idValueList
+		  then []
+		  else err ("An Element with identifier " ++ show attrValue ++
+		            " must appear in the document.") n
+
+            checkValueDeclared _ _ = []
+
+      buildIdrefValidationFct []
+          = none
+
+      buildIdrefValidationFct nd
+          = error ("buildIdCollectorFct: illegeal parameter:\n" ++ show nd)
+
+
+-- ------------------------------------------------------------
+
+
+-- |
+-- Validate that all ID values are unique within a document.
+-- Validity constraint: ID (3.3.1 \/p. 25 in Spec)
+--
+--    * 1.parameter idNodeList :  list of all XTag nodes with ID attributes
+--
+--    - 2.parameter dtdPart :  the children of the @DOCTYPE@ node
+--
+--    - returns : a list of errors
+
+checkForUniqueIds :: XmlTrees -> XmlTrees -> XmlTrees
+checkForUniqueIds idNodeList dtdPart
+    = checkForUniqueId idNodeList []
+      where
+      idAttrTypes = isIdAttrType $$ dtdPart
+
+      checkForUniqueId :: XmlTrees -> [String] -> XmlTrees
+      checkForUniqueId (x@(NTree (XTag name _) _):xs) used
+          = if attrValue `elem` used
+	    then err ("Attribute value " ++ show attrValue ++ " of type ID for element " ++
+	              show (qualifiedName name) ++ " must be unique within the document.") x
+		 ++
+		 checkForUniqueId xs used
+
+	    else checkForUniqueId xs (attrValue : used)
+	    where
+	    attrValue = getIdValue (isAttlistOfElement (qualifiedName name) $$ idAttrTypes) x
+
+      checkForUniqueId _ _ = []
+
+
+
+-- |
+-- Validate that all IDREF\/IDREFS values match the value of some ID attribute.
+-- Validity constraint: IDREF (3.3.1 \/ p.26 in Spec)
+--
+--    * 1.parameter idRefEnv :  lookup-table which maps element names to their validation function
+--
+--    - 2.parameter doc :  the document to validate
+--
+--    - returns : a list of errors
+
+checkIdReferences :: IdEnvTable -> XmlTree -> XmlTrees
+checkIdReferences idRefEnv doc
+    = traverseTree idRefEnv doc
+
+
+
+
+
diff --git a/src/Text/XML/HXT/Validator/RE.hs b/src/Text/XML/HXT/Validator/RE.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Validator/RE.hs
@@ -0,0 +1,330 @@
+-- |
+-- A module for regular expression matching based on derivatives of regular expressions.
+--
+-- The code was taken from Joe English (<http://www.flightlab.com/~joe/sgml/validate.html>).
+-- Tested and extended by Martin Schmidt.
+--
+-- Further references for the algorithm:
+--
+-- Janusz A. Brzozowski.
+--
+-- 	Derivatives of Regular Expressions. Journal of the ACM, Volume 11, Issue 4, 1964. 
+--
+-- Mark Hopkins.
+--
+--	Regular Expression Package. Posted to comp.compilers, 1994.
+--      Available per FTP at <ftp://iecc.com/pub/file/regex.tar.gz>.
+
+
+
+module Text.XML.HXT.Validator.RE
+    ( RE(..)
+
+    , re_unit
+    , re_zero
+    , re_sym
+    , re_rep
+    , re_plus
+    , re_opt
+    , re_seq
+    , re_alt
+    , re_dot
+
+    , checkRE
+    , matches
+    , nullable
+    , printRE
+  )
+where
+
+-- |
+-- Data type for regular expressions.
+
+data RE a =
+	RE_ZERO	String		--' L(0)   = {} (empty set)
+	| RE_UNIT		--' L(1)   = { [] } (empty sequence)
+	| RE_SYM a		--' L(x)   = { [x] }
+	| RE_DOT                --' accept any single symbol
+	| RE_REP (RE a)		--' L(e*)  = { [] } `union` L(e+)
+	| RE_PLUS (RE a)	--' L(e+)  = { x ++ y | x <- L(e), y <- L(e*) }
+	| RE_OPT (RE a)		--' L(e?)  = L(e) `union` { [] }
+	| RE_SEQ (RE a) (RE a)	--' L(e,f) = { x ++ y | x <- L(e), y <- L(f) }
+	| RE_ALT (RE a) (RE a)	--' L(e|f) = L(e) `union` L(f)
+	deriving (Show, Eq)
+
+
+
+-- ------------------------------------------------------------
+-- Constructor functions to simplify regular expressions when constructing them.
+
+-- |
+-- Constructs a regular expression for an empty set.
+--
+--    * 1.parameter errMsg :  error message
+--
+--    - returns : regular expression for an empty set
+
+re_zero			:: String -> RE a
+re_zero m		= RE_ZERO m
+
+
+-- |
+-- Constructs a regular expression for an empty sequence.
+--
+--    - returns : regular expression for an empty sequence
+
+re_unit			:: RE a
+re_unit			= RE_UNIT
+
+
+-- |
+-- Constructs a regular expression for accepting a symbol
+--
+--    * 1.parameter sym :  the symbol to be accepted
+--
+--    - returns : regular expression for accepting a symbol
+
+re_sym			:: a -> RE a
+re_sym x		= RE_SYM x
+
+
+-- |
+-- Constructs a regular expression for accepting any singel symbol
+--
+--    - returns : regular expression for accepting any singel symbol
+
+re_dot			:: RE a
+re_dot			= RE_DOT
+
+
+-- |
+-- Constructs an optional repetition (*) of a regular expression
+--
+--    * 1.parameter re_a :  regular expression to be repeted
+--
+--    - returns : new regular expression
+
+re_rep			:: RE a -> RE a
+re_rep RE_UNIT		= RE_UNIT
+re_rep (RE_ZERO _)	= RE_UNIT
+re_rep e@(RE_REP _)	= RE_REP (rem_rep e)		-- remove nested reps
+re_rep e@(RE_ALT _ _)	= RE_REP (rem_rep e)		-- remove nested reps in alternatives
+re_rep e		= RE_REP e
+
+-- |
+-- remove redundant nested *'s in RE
+-- theoretically this is unneccessary,
+-- but without this simplification the runtime can increase exponentally
+-- when computing deltas, e.g. for a** or (a|b*)* which is the same as (a|b)*
+
+rem_rep			:: RE a -> RE a
+rem_rep (RE_ALT e1 e2)	= RE_ALT (rem_rep e1) (rem_rep e2)
+rem_rep (RE_REP e1)	= rem_rep e1
+rem_rep e1		= e1
+
+
+-- |
+-- Constructs a repetition (+) of a regular expression
+--
+--    * 1.parameter re_a :  regular expression to be repeted
+--
+--    - returns : new regular expression
+
+re_plus			:: RE a -> RE a
+re_plus RE_UNIT		= RE_UNIT
+re_plus (RE_ZERO m) 	= RE_ZERO m
+re_plus e		= RE_PLUS e
+
+
+-- |
+-- Constructs an option (?) of a regular expression
+--
+--    * 1.parameter re_a :  regular expression to be optional
+--
+--    - returns : new regular expression
+
+re_opt			:: RE a -> RE a
+re_opt RE_UNIT		= RE_UNIT
+re_opt (RE_ZERO _)	= RE_UNIT
+re_opt e		= RE_OPT e
+
+
+-- |
+-- Constructs a sequence (,) of two regular expressions
+--
+--    * 1.parameter re_a :  first regular expression in sequence
+--
+--    - 2.parameter re_b :  second regular expression in sequence
+--
+--    - returns : new regular expression
+
+re_seq			:: RE a -> RE a -> RE a
+re_seq (RE_ZERO m) _	= RE_ZERO m
+re_seq RE_UNIT f	= f
+re_seq _ (RE_ZERO m)	= RE_ZERO m
+re_seq e RE_UNIT	= e
+re_seq e f		= RE_SEQ e f
+
+
+-- |
+-- Constructs an alternative (|) of two regular expressions
+--
+--    * 1.parameter re_a :  first regular expression of alternative
+--
+--    - 2.parameter re_b :  second regular expression of alternative
+--
+--    - returns : new regular expression
+
+re_alt			:: RE a -> RE a -> RE a
+re_alt (RE_ZERO _) f	= f
+re_alt e (RE_ZERO _)	= e
+re_alt e f		= RE_ALT e f
+
+
+
+-- ------------------------------------------------------------
+
+
+-- |
+-- Checks if a regular expression matches the empty sequence.
+--
+-- nullable e == [] `in` L(e)
+--
+-- This check indicates if a regular expression fits to a sentence or not.
+--
+--    * 1.parameter re :  regular expression to be checked
+--
+--    - returns : true if regular expression matches the empty sequence,
+--                otherwise false
+
+nullable		::  (Show a) => RE a -> Bool
+nullable (RE_ZERO _)	= False
+nullable RE_UNIT	= True
+nullable (RE_SYM _)	= False
+nullable (RE_REP _)	= True
+nullable (RE_PLUS e)	= nullable e
+nullable (RE_OPT _)	= True
+nullable (RE_SEQ e f)	= nullable e && nullable f
+nullable (RE_ALT e f)	= nullable e || nullable f
+nullable RE_DOT		= False
+
+
+-- |
+-- Derives a regular expression with respect to one symbol.
+--
+-- L(delta e x) = x \ L(e)
+--
+--    * 1.parameter re :  regular expression to be derived
+--
+--    - 2.parameter sym :  the symbol on which the regular expression is applied
+--
+--    - returns : the derived regular expression
+
+delta :: (Eq a, Show a) => RE a -> a -> RE a
+delta re x = case re of
+	RE_ZERO	_		-> re					-- re_zero m
+	RE_UNIT			-> re_zero ("Symbol " ++ show x ++ " unexpected.")
+	RE_SYM sym
+		| x == sym	-> re_unit
+		| otherwise	-> re_zero ("Symbol " ++ show sym ++ " expected, but symbol " ++ show x ++ " found.")
+	RE_REP  e		-> re_seq (delta e x) re		-- (re_rep e)
+	RE_PLUS e		-> re_seq (delta e x) (re_rep e)
+	RE_OPT  e		-> delta e x
+	RE_SEQ  e f
+		| nullable e	-> re_alt (re_seq (delta e x) f) (delta f x)
+		| otherwise	-> re_seq (delta e x) f
+	RE_ALT  e f		-> re_alt (delta e x) (delta f x)
+	RE_DOT			-> re_unit
+
+
+-- |
+-- Derives a regular expression with respect to a sentence.
+--
+--    * 1.parameter re :  regular expression
+--
+--    - 2.parameter s :  sentence to which the regular expression is applied
+--
+--    - returns : the derived regular expression
+
+matches :: (Eq a, Show a) => RE a -> [a] -> RE a
+matches e = foldl delta e
+
+
+-- |
+-- Checks if an input matched a regular expression. The function should be
+-- called after matches.
+--
+-- Was the sentence used in @matches@ in the language of the regular expression?
+-- -> matches e s == s `in` L(e)?
+--
+--    * 1.parameter re :  the derived regular expression
+--
+--    - returns : empty String if input matched the regular expression, otherwise
+--               an error message is returned
+
+checkRE :: (Show a) => RE a -> String
+checkRE (RE_UNIT)	= ""
+checkRE (RE_ZERO m)	= m
+checkRE re
+	| nullable re	= ""
+	| otherwise	= "Input must match " ++ printRE re
+
+
+
+-- ------------------------------------------------------------
+
+
+
+-- |
+-- Constructs a string representation of a regular expression.
+--
+--    * 1.parameter re :  a regular expression
+--
+--    - returns : the string representation of the regular expression
+
+printRE :: (Show a) => RE a -> String
+printRE re'
+    = "( " ++ printRE1 re' ++ " )"
+      where
+      printRE1 :: (Show a) => RE a -> String
+      printRE1 re = case re of
+	  RE_ZERO m				-> "ERROR: " ++ m
+	  RE_UNIT				-> ""
+	  RE_SYM sym				-> show sym
+	  RE_DOT				-> "."
+	  RE_REP e
+	      | isSingle e			-> printRE1 e ++ "*"
+	      | otherwise			-> "(" ++ printRE1 e ++ ")*"
+	  RE_PLUS e
+	      | isSingle e			-> printRE1 e ++ "+"
+	      | otherwise			-> "(" ++ printRE1 e ++ ")+"
+	  RE_OPT e
+	      | isSingle e			-> printRE1 e ++ "?"
+	      | otherwise			-> "(" ++ printRE1 e ++ ")?"
+	  RE_SEQ e f
+	      | isAlt e  && not (isAlt f)	-> "(" ++ printRE1 e ++ ") , " ++ printRE1 f
+	      | not (isAlt e) && isAlt f	-> printRE1 e ++ " , (" ++ printRE1 f ++ ")"
+	      | isAlt e  && isAlt f		-> "(" ++ printRE1 e ++ ") , (" ++ printRE1 f ++ ")"
+	      | otherwise			-> printRE1 e ++ " , " ++ printRE1 f
+	  RE_ALT e f
+	      | isSeq e  && not (isSeq f)	-> "(" ++ printRE1 e ++ ") | " ++ printRE1 f
+	      | not (isSeq e) && isSeq f	-> printRE1 e ++ " | (" ++ printRE1 f ++ ")"
+	      | isSeq e  && isSeq f		-> "(" ++ printRE1 e ++ ") | (" ++ printRE1 f ++ ")"
+	      | otherwise			-> printRE1 e ++ " | " ++ printRE1 f
+
+
+      isSingle :: RE a -> Bool
+      isSingle (RE_ZERO _)    = True
+      isSingle RE_UNIT        = True
+      isSingle (RE_SYM _)     = True
+      isSingle _              = False
+
+
+      isSeq :: RE a -> Bool
+      isSeq (RE_SEQ _ _)      = True
+      isSeq _                 = False
+
+
+      isAlt :: RE a -> Bool
+      isAlt (RE_ALT _ _)      = True
+      isAlt _                 = False
diff --git a/src/Text/XML/HXT/Validator/Validation.hs b/src/Text/XML/HXT/Validator/Validation.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Validator/Validation.hs
@@ -0,0 +1,64 @@
+-- |
+-- This module provides a state filter as a main function for validating XML documents.
+--
+-- The real validation is done with pure filters from module 'Text.XML.HXT.Validator.ValidationFilter'
+--
+-- Author : .\\artin Schmidt
+
+module Text.XML.HXT.Validator.Validation
+    ( getValidatedDoc
+    , module Text.XML.HXT.Validator.ValidationFilter
+    )
+
+where
+
+import Text.XML.HXT.DOM.XmlTree
+import Text.XML.HXT.DOM.XmlState
+
+import Text.XML.HXT.Validator.ValidationFilter
+
+import Text.XML.HXT.Parser.XmlOutput
+    ( traceTree
+    , traceSource
+    , traceMsg
+    )
+
+-- ------------------------------------------------------------
+
+-- |
+-- monadic filter for validating and transforming a wellformed document.
+--
+-- the "main" function for validation.
+--
+-- the input tree must consist of a root node with a complete document and DTD.
+-- Result is the single element list containing same tree but tranformed with respect to the DTD,
+-- or, in case of errors, the root with an empty list of children
+
+getValidatedDoc		:: XmlStateFilter state
+getValidatedDoc
+    = traceMsg 1 "validating document"
+      .>>
+      ( ( runValidation
+	  .>>
+	  traceTree
+	  .>>
+	  traceSource
+	)
+	`whenM` (isRoot .> getChildren)
+      )
+      where
+      runValidation t
+	  = do
+	    issueError $$< res
+	    ( if null errs
+	      then ( traceMsg 1 "transforming validated document"
+		     .>>
+		     liftMf transform
+		   )
+	      else liftMf (setStatus c_err "validating document")
+	      ) t
+	    where
+	    res  = validate t
+	    errs = isXError .> neg isWarning $$ res
+
+-- ------------------------------------------------------------
diff --git a/src/Text/XML/HXT/Validator/ValidationFilter.hs b/src/Text/XML/HXT/Validator/ValidationFilter.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Validator/ValidationFilter.hs
@@ -0,0 +1,125 @@
+-- |
+-- This module provides functions for validating XML documents represented as
+-- XmlTree.
+
+-- Unlike other popular XML validation tools the validation functions return
+-- a list of errors instead of aborting after the first error was found.
+-- 
+-- Note: The validation process has been split into validation and transformation!
+--       If @validate@ did not report any errors, @transform@
+--       should be called, to change the document the way a validating parser
+--       is expected to do.
+
+--
+-- Author : .\\artin Schmidt
+
+module Text.XML.HXT.Validator.ValidationFilter
+    ( getDTDSubset
+    , validate
+    , validateDTD
+    , validateDoc
+    , removeDoublicateDefs
+    , transform
+    )
+
+where
+
+import Text.XML.HXT.DOM.XmlTree
+
+import qualified Text.XML.HXT.Validator.DTDValidation as DTDValidation
+import qualified Text.XML.HXT.Validator.DocValidation as DocValidation
+import qualified Text.XML.HXT.Validator.IdValidation as IdValidation
+import qualified Text.XML.HXT.Validator.DocTransformation as DocTransformation
+
+-- |
+-- Main validation filter. Check if the DTD and the document are valid.
+--
+--
+--    - returns : a function which expects a complete document as XmlTree input
+--                     and returns a list of all errors found.
+
+validate 	:: XmlFilter
+validate	= validateDTD +++ validateDoc
+
+-- |
+-- Check if the DTD is valid.
+--
+--
+--    - returns : a function which expects an XmlTree from the parser as input
+--                     and returns a list of all errors found in the DTD.
+
+validateDTD	:: XmlFilter
+validateDTD
+    = choice [ getDTDSubset
+	       :-> DTDValidation.validateDTD
+	     , this
+               :-> err "Can't validate DTD: There is no DOCTYPE declaration in the document."
+	     ]
+-- |
+-- Check if the document corresponds to the given DTD.
+--
+--
+--    - returns : a function which expects a complete document as XmlTree input
+--                     and returns a list of all errors found in the content part.
+
+validateDoc	:: XmlFilter
+validateDoc t
+    = ( if null dtds
+	then err "Can't validate document: There is no DOCTYPE declaration in the document."
+	else ( DocValidation.validateDoc dtdPart
+               +++
+	       IdValidation.validateIds dtdPart
+	     )
+      ) $ t
+      where
+      dtds = getDTDSubset .> processBottomUp removeDoublicateDefs $ t
+      dtdPart  = head dtds
+
+-- |
+-- filter for transforming a document with respect to the given DTD.
+--
+-- Validating parsers
+-- are expected to  normalize attribute values and add default values.
+-- This function should be called after a successful validation.
+--
+--
+--    - returns : a function which expects a complete XML document tree
+--                and returns the transformed XmlTree
+
+transform	:: XmlFilter
+transform
+    = choice [ isRoot
+               :-> transformDoc
+	     , this
+	       :-> fatal "Can't transform document: No document root given"
+	     ]
+      where
+      transformDoc t
+	  | null dtds
+	      = this t
+	  | otherwise
+	      = DocTransformation.transform (head dtds) t
+	  where
+	  dtds = getDTDSubset .> processBottomUp removeDoublicateDefs $ t
+
+-- |
+-- Removes doublicate declarations from the DTD which first declaration is
+-- binding. This is the case for ATTLIST and ENTITY declarations.
+--
+--
+--    - returns : A function that replaces the children of DOCTYPE nodes by a list
+--               where all multiple declarations are removed.
+
+removeDoublicateDefs :: XmlFilter
+removeDoublicateDefs
+    = DTDValidation.removeDoublicateDefs
+
+--
+-- selects the DTD part of a document
+-- but only, if there is more than the internal part for the 4 predefined XML entities
+
+getDTDSubset	:: XmlFilter
+getDTDSubset
+    = getChildren .> isDoctype .> hasRootName
+      where
+      hasRootName = isOf (hasEntry a_name . attrlOfDTD)
diff --git a/src/Text/XML/HXT/Validator/XmlRE.hs b/src/Text/XML/HXT/Validator/XmlRE.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/XML/HXT/Validator/XmlRE.hs
@@ -0,0 +1,103 @@
+-- |
+-- A module for regular expression matching, adapted for XML DTDs.
+--
+-- This module is based on the module RE.
+--
+-- Author .\\artin Schmidt
+
+module Text.XML.HXT.Validator.XmlRE
+    ( RE
+
+    , checkRE
+    , matches
+    , printRE
+
+    , re_unit
+    , re_zero
+    , re_sym
+    , re_rep
+    , re_plus
+    , re_opt
+    , re_seq
+    , re_alt
+    , re_dot
+    )
+where
+
+-- import Debug.Trace(trace)
+
+import Text.XML.HXT.Validator.RE hiding (matches)
+
+import Text.XML.HXT.DOM.XmlTree
+
+import Text.XML.HXT.DOM.EditFilters
+    ( removeComment
+    , removeWhiteSpace
+    )
+
+-- |
+-- Derives a regular expression with respect to a list of elements.
+--
+--    * 1.parameter re :  regular expression
+--
+--    - 2.parameter list :  list of elements to which the regular expression is applied
+--
+--    - returns : the derived regular expression
+
+matches :: RE String -> XmlTrees -> RE String
+matches re list
+    = foldl delta re (removeUnimportantStuff $$ list)
+      where
+      removeUnimportantStuff :: XmlFilter
+      removeUnimportantStuff = processBottomUp (removeWhiteSpace `o` removeComment)
+      -- trace of growth of REs
+      -- delta' re el = delta (trace (("RE : " ++) . (++ "\n" ) . show $ re) re) el
+
+
+-- |
+-- Derives a regular expression with respect to one element.
+--
+-- L(delta e x) = x \ L(e)
+--
+--    * 1.parameter re :  regular expression to be derived
+--
+--    - 2.parameter el :  the element on which the regular expression is applied
+--
+--    - returns : the derived regular expression
+
+delta :: RE String -> XmlTree -> RE String
+delta re el
+    | not (allowed el) = re
+    | otherwise        = case re of
+        RE_ZERO m		 -> re_zero m
+        RE_UNIT			 -> re_zero (elemName el ++" unexpected.")
+        RE_SYM sym
+    	    | sym == k_pcdata	 -> let node = getNode el in
+	                            if ((isXTextNode node) || (isXCdataNode node))
+				    then re_unit
+				    else re_zero ("Character data expected, but "++ elemName el ++" found.")
+       	    | expectedNode el sym -> re_unit
+	    | otherwise           -> re_zero ("Element "++ show sym ++" expected, but "++ elemName el ++" found.")
+        RE_REP e                  -> re_seq (delta e el) (re_rep e)
+        RE_PLUS e                 -> re_seq (delta e el) (re_rep e)
+        RE_OPT e                  -> delta e el
+        RE_SEQ e f
+       	    | nullable e          -> re_alt (re_seq (delta e el) f) (delta f el)
+       	    | otherwise           -> re_seq (delta e el) f
+        RE_ALT e f                -> re_alt (delta e el) (delta f el)
+        RE_DOT                    -> re_unit
+
+    where
+    expectedNode :: XmlTree -> String -> Bool
+    expectedNode (NTree (XTag n _) _) sym = (qualifiedName n) == sym
+    expectedNode _ _			  = False
+
+    elemName :: XmlTree -> String
+    elemName (NTree (XTag n _) _)	= "element "++ show (qualifiedName n)
+    elemName _				= "character data"
+
+    allowed :: XmlTree -> Bool
+    allowed (NTree (XTag _ _) _)	= True
+    allowed (NTree (XText _) _)		= True
+    allowed (NTree (XCdata _) _)	= True
+    allowed _				= False
diff --git a/src/hxt-filter-package.hs b/src/hxt-filter-package.hs
new file mode 100644
--- /dev/null
+++ b/src/hxt-filter-package.hs
@@ -0,0 +1,102 @@
+module Main
+where
+
+import Data.List
+import System.Environment
+
+part1	:: [String]
+part1
+    = [ "-- arch-tag: Haskell XML Toolbox main description file"
+      , "name: hxt-filter"
+      ]
+
+version	:: String
+version
+    = "version: "
+
+part2	:: [String]
+part2
+    = [ "license: OtherLicense"
+      , "license-file: LICENCE"
+      , "maintainer: Uwe Schmidt <uwe@fh-wedel.de>"
+      , "stability: stable"
+      , "category: XML"
+      , "synopsis: A collection of tools for processing XML with Haskell (Filter variant). "
+      , "description:  The Haskell XML Toolbox bases on the ideas of HaXml and HXML." ++
+	" This package is a compatibitlity package for old software working with the filter approach like in HaXml." ++
+	" For new projects it's recomended to use the arrow based library (hxt)."
+      , "homepage: http://www.fh-wedel.de/~si/HXmlToolbox/index.html"
+      , "copyright: Copyright (c) 2005-8 Uwe Schmidt"
+      ]
+
+part3a	:: [String]
+part3a
+    = [ "tested-with: ghc-6.8"
+      , "exposed: True"
+      , "exposed-modules:"
+      ]
+
+part3b :: [String]
+part3b
+    = [ "build-type: Simple"
+      , "cabal-version: >=1.2"
+      , ""
+      , "flag splitBase"
+      , "  description: Choose the new smaller, split-up base package."
+      , ""
+      , "library"
+      , " exposed-modules:"
+      ]
+
+part4a	:: String -> [String]
+part4a dir
+    = [ "hs-source-dirs: ."
+      , "ghc-options: -Wall -O2 -fglasgow-exts"
+      , "import-dirs: " ++ dir ++ "/imports"
+      , "library-dirs: " ++ dir
+      , "hs-libraries: HShxt-filter"
+      , "depends: base, haskell98, parsec, HTTP, HUnit, network, containers, directory, process, hxt-8.0.0"
+      ]
+
+part4b :: [String]
+part4b
+    = [ " hs-source-dirs: src"
+      , " ghc-options: -Wall"
+      , " extensions: MultiParamTypeClasses DeriveDataTypeable FunctionalDependencies FlexibleInstances"
+      , ""
+      , " build-depends: base, haskell98 >= 1, parsec >= 2.1 && < 3, HTTP, HUnit >= 1.2, network >= 2.1, hxt >= 8.0"
+      , " if flag(splitBase)"
+      , "   build-depends: base >= 3, containers >= 0.1, directory >= 1, process >= 1"
+      , " else"
+      , "   build-depends: base < 3"
+      ]
+
+main	:: IO()
+main
+    = do
+      vers : cabal : installdir : modules <- getArgs
+      putStrLn (cabalFile vers cabal installdir modules)
+
+cabalFile	:: String -> String -> String -> [String] -> String
+cabalFile vers cabal installdir modules
+    = unlines $
+      part1 ++
+      [ version ++ vers ] ++
+      part2 ++
+      ( if isCabal
+	then part3b
+	else part3a
+      ) ++
+      [ml modules] ++
+      ( if isCabal
+	then part4b
+	else part4a installdir
+      )
+    where
+    isCabal = cabal == "cabal"
+    ml = foldr1 (\ x y -> x ++ ",\n" ++ y) . sort . map editPath
+    editPath = ("  " ++) . map slash2dot . reverse . drop 1 . dropWhile (/= '.') . reverse . removeLeadingDot
+    slash2dot '/' = '.'
+    slash2dot c   = c
+    removeLeadingDot ('.':'/':path)	= path
+    removeLeadingDot path		= path
