packages feed

hxt 8.0.0 → 8.1.0

raw patch · 255 files changed

+8951/−22854 lines, 255 filesdep +curldep +filepathdep −HTTPdep −processdep ~base

Dependencies added: curl, filepath

Dependencies removed: HTTP, process

Dependency ranges changed: base

Files

Version.mk view
@@ -2,6 +2,6 @@ # Version numbering for HXT  SOFTWARE	= hxt-VERSION		= 8.0.0-LASTVERSION	= 7.5+VERSION		= 8.1.0+LASTVERSION	= 8.0.1 DIST_NAME	= $(SOFTWARE)-$(VERSION)
doc/hdoc/Control-Arrow-ArrowIO.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Control-Arrow-ArrowIO.html" >Source code</A
doc/hdoc/Control-Arrow-ArrowIf.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Control-Arrow-ArrowIf.html" >Source code</A
doc/hdoc/Control-Arrow-ArrowList.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Control-Arrow-ArrowList.html" >Source code</A
doc/hdoc/Control-Arrow-ArrowState.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Control-Arrow-ArrowState.html" >Source code</A
doc/hdoc/Control-Arrow-ArrowStrict.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Control-Arrow-ArrowStrict.html" >Source code</A
doc/hdoc/Control-Arrow-ArrowTree.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Control-Arrow-ArrowTree.html" >Source code</A@@ -128,6 +128,22 @@ ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl"+><A HREF="#v%3AmkLeaf"+>mkLeaf</A+> :: <A HREF="Control-Arrow-ArrowTree.html#t%3ATree"+>Tree</A+> t =&gt; b -&gt; a c (t b)</TD+></TR+><TR+><TD CLASS="decl"+><A HREF="#v%3AmkTree"+>mkTree</A+> :: <A HREF="Control-Arrow-ArrowTree.html#t%3ATree"+>Tree</A+> t =&gt; b -&gt; [t b] -&gt; a c (t b)</TD+></TR+><TR+><TD CLASS="decl" ><A HREF="#v%3AgetChildren" >getChildren</A > :: <A HREF="Control-Arrow-ArrowTree.html#t%3ATree"@@ -366,6 +382,64 @@ ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"+><TR+><TD CLASS="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname"+><A NAME="v%3AmkLeaf"+></A+><B+>mkLeaf</B+> :: <A HREF="Control-Arrow-ArrowTree.html#t%3ATree"+>Tree</A+> t =&gt; b -&gt; a c (t b)</TD+><TD CLASS="declbut"+><A HREF="src/Control-Arrow-ArrowTree.html#mkLeaf"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+>construct a leaf+</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname"+><A NAME="v%3AmkTree"+></A+><B+>mkTree</B+> :: <A HREF="Control-Arrow-ArrowTree.html#t%3ATree"+>Tree</A+> t =&gt; b -&gt; [t b] -&gt; a c (t b)</TD+><TD CLASS="declbut"+><A HREF="src/Control-Arrow-ArrowTree.html#mkTree"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+>construct an inner node+</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar"
doc/hdoc/Control-Arrow-IOListArrow.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Control-Arrow-IOListArrow.html" >Source code</A
doc/hdoc/Control-Arrow-IOStateListArrow.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Control-Arrow-IOStateListArrow.html" >Source code</A
doc/hdoc/Control-Arrow-ListArrow.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Control-Arrow-ListArrow.html" >Source code</A
doc/hdoc/Control-Arrow-ListArrows.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Control-Arrow-ListArrows.html" >Source code</A
doc/hdoc/Control-Arrow-StateListArrow.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Control-Arrow-StateListArrow.html" >Source code</A
− doc/hdoc/Control-Monad-MonadStateIO.html
@@ -1,468 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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->Version : $Id: MonadStateIO.hs,v 1.1 2004<EM->09</EM->02 19:11:55 hxml Exp $-</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->
doc/hdoc/Control-Strategies-DeepSeq.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Control-Strategies-DeepSeq.html" >Source code</A
doc/hdoc/Data-AssocList.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Data-AssocList.html" >Source code</A
doc/hdoc/Data-Char-UTF8.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Data-Char-UTF8.html" >Source code</A
doc/hdoc/Data-NavTree.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Data-NavTree.html" >Source code</A
doc/hdoc/Data-Tree-Class.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Data-Tree-Class.html" >Source code</A
doc/hdoc/Data-Tree-NTree-Filter.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Data-Tree-NTree-Filter.html" >Source code</A
doc/hdoc/Data-Tree-NTree-TypeDefs.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Data-Tree-NTree-TypeDefs.html" >Source code</A
− doc/hdoc/System-PipeOpen.html
@@ -1,166 +0,0 @@-<!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->System.PipeOpen</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-8.0.0: A collection of tools for processing XML with Haskell.</TD-><TD CLASS="topbut"-><A HREF="src/System-PipeOpen.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"->System.PipeOpen</FONT-></TD-><TD ALIGN="right"-><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0"-><TR-><TD CLASS="infohead"->Portability</TD-><TD CLASS="infoval"->none 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"-><P->Version    : $Id: PipeOpen.hs,v 1.2 2005<EM->09</EM->02 17:09:39 hxml Exp $-</P-><P->pipe open implemented with System.Process functions-</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%3Apopen"->popen</A-> :: String -&gt; [String] -&gt; IO (String, String, Int)</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%3Apopen"-></A-><B->popen</B-> :: String -&gt; [String] -&gt; IO (String, String, Int)</TD-><TD CLASS="declbut"-><A HREF="src/System-PipeOpen.html#popen"->Source</A-></TD-></TR-></TABLE-></TD-></TR-><TR-><TD CLASS="doc"->call an external program with a list of command line arguments- and return content of stdout, content of stderr and return code-</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->
doc/hdoc/Text-XML-HXT-Arrow-DTDProcessing.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-DTDProcessing.html" >Source code</A
doc/hdoc/Text-XML-HXT-Arrow-DocumentInput.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-DocumentInput.html" >Source code</A
doc/hdoc/Text-XML-HXT-Arrow-DocumentOutput.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-DocumentOutput.html" >Source code</A
doc/hdoc/Text-XML-HXT-Arrow-Edit.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-Edit.html" >Source code</A
doc/hdoc/Text-XML-HXT-Arrow-GeneralEntitySubstitution.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-GeneralEntitySubstitution.html" >Source code</A
doc/hdoc/Text-XML-HXT-Arrow-Namespace.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-Namespace.html" >Source code</A
doc/hdoc/Text-XML-HXT-Arrow-ParserInterface.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-ParserInterface.html" >Source code</A
doc/hdoc/Text-XML-HXT-Arrow-Pickle-DTD.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-Pickle-DTD.html" >Source code</A
doc/hdoc/Text-XML-HXT-Arrow-Pickle-Schema.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-Pickle-Schema.html" >Source code</A
doc/hdoc/Text-XML-HXT-Arrow-Pickle-Xml.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-Pickle-Xml.html" >Source code</A@@ -625,6 +625,32 @@ ></TR ><TR ><TD CLASS="decl"+><A HREF="#v%3AxpTrees"+>xpTrees</A+> :: <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> [<A HREF="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%3AxpXmlText"+>xpXmlText</A+> :: <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> String</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl" ><A HREF="#v%3AxpOption" >xpOption</A > :: <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"@@ -639,6 +665,20 @@ ></TR ><TR ><TD CLASS="decl"+><A HREF="#v%3AxpDefault"+>xpDefault</A+> :: Eq a =&gt; a -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> a -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> a</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl" ><A HREF="#v%3AxpList" >xpList</A > :: <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"@@ -667,6 +707,22 @@ ></TR ><TR ><TD CLASS="decl"+><A HREF="#v%3AxpMap"+>xpMap</A+> :: Ord k =&gt; String -&gt; String -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> k -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> v -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> (Map k v)</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl" ><A HREF="#v%3AxpAlt" >xpAlt</A > :: (a -&gt; Int) -&gt; [<A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"@@ -695,6 +751,20 @@ ></TR ><TR ><TD CLASS="decl"+><A HREF="#v%3AxpElemWithAttrValue"+>xpElemWithAttrValue</A+> :: String -&gt; String -&gt; String -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> a -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> a</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl" ><A HREF="#v%3AxpAttr" >xpAttr</A > :: String -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"@@ -1463,7 +1533,7 @@ >Run two picklers in sequence like with xpSeq.  When during unpickling the first one fails,  an alternative pickler (first argument) is applied.- This pickler only is used as combinator for unpickling.+ This pickler is only used as combinator for unpickling. </P ></TD ></TR@@ -2026,6 +2096,90 @@ ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname"+><A NAME="v%3AxpTrees"+></A+><B+>xpTrees</B+> :: <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> [<A HREF="Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"+>XmlTree</A+>]</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-Arrow-Pickle-Xml.html#xpTrees"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+><P+>Pickle a whole list of XmlTrees by just adding the list, unpickle is done by taking all element contens.+</P+><P+>This pickler should always combined with <TT+><A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#v%3AxpElem"+>xpElem</A+></TT+> for taking the whole contents of an element.+</P+></TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR+><TD CLASS="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname"+><A NAME="v%3AxpXmlText"+></A+><B+>xpXmlText</B+> :: <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> String</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-Arrow-Pickle-Xml.html#xpXmlText"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+><P+>Pickle a string representing XML contents by inserting the tree representation into the XML document.+</P+><P+>Unpickling is done by converting the contents with+ <TT+><A HREF="Text-XML-HXT-Arrow-XmlArrow.html#v%3Axshow"+>xshow</A+></TT+> into a string,+ pickling is done with <TT+><A HREF="Text-XML-HXT-Arrow-ReadDocument.html#v%3Axread"+>xread</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%3AxpOption" ></A ><B@@ -2063,6 +2217,43 @@ ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname"+><A NAME="v%3AxpDefault"+></A+><B+>xpDefault</B+> :: Eq a =&gt; a -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> a -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> a</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-Arrow-Pickle-Xml.html#xpDefault"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+><P+>Optional conversion with default value+</P+><P+>The default value is not encoded in the XML document,+ during unpickling the default value is inserted if the pickler fails+</P+></TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR+><TD CLASS="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname" ><A NAME="v%3AxpList" ></A ><B@@ -2142,6 +2333,47 @@ ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname"+><A NAME="v%3AxpMap"+></A+><B+>xpMap</B+> :: Ord k =&gt; String -&gt; String -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> k -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> v -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> (Map k v)</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-Arrow-Pickle-Xml.html#xpMap"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+><P+>Standard pickler for maps+</P+><P+>This pickler converts a map into a list of pairs.+ All key value pairs are mapped to an element with name (1.arg),+ the key is encoded as an attribute named by the 2. argument,+ the 3. arg is the pickler for the keys, the last one for the values+</P+></TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR+><TD CLASS="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname" ><A NAME="v%3AxpAlt" ></A ><B@@ -2205,6 +2437,79 @@ >Extra parameter is the element name. THE pickler for constructing  nested structures </P+><P+>Example:+</P+><PRE+> xpElem &quot;number&quot; $ xpickle+</PRE+><P+>will map an (42::Int) onto+</P+><PRE+> &lt;number&gt;42&lt;/number&gt;+</PRE+></TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR+><TD CLASS="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname"+><A NAME="v%3AxpElemWithAttrValue"+></A+><B+>xpElemWithAttrValue</B+> :: String -&gt; String -&gt; String -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> a -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#t%3APU"+>PU</A+> a</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-Arrow-Pickle-Xml.html#xpElemWithAttrValue"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+><P+>Pickler for wrapping/unwrapping data into an XML element with an attribute with given value+</P+><P+>To make XML structures flexible but limit the number of different elements, it's sometimes+ useful to use a kind of generic element with a key value structure+</P+><P+>Example:+</P+><PRE+> &lt;attr name=&quot;key1&quot;&gt;value1&lt;/attr&gt;+ &lt;attr name=&quot;key2&quot;&gt;value2&lt;/attr&gt;+ &lt;attr name=&quot;key3&quot;&gt;value3&lt;/attr&gt;+</PRE+><P+>the Haskell datatype may look like this+</P+><PRE+> type T = T { key1 :: Int ; key2 :: String ; key3 :: Double }+</PRE+><P+>Then the picker for that type looks like this+</P+><PRE+> xpT :: PU T+ xpT = xpWrap ( uncurry3 T, \ t -&gt; (key1 t, key2 t, key3 t) ) $+       xpTriple (xpElemWithAttrValue &quot;attr&quot; &quot;name&quot; &quot;key1&quot; $ xpickle)+                (xpElemWithAttrValue &quot;attr&quot; &quot;name&quot; &quot;key2&quot; $ xpText0)+                (xpElemWithAttrValue &quot;attr&quot; &quot;name&quot; &quot;key3&quot; $ xpickle)+</PRE ></TD ></TR ><TR
doc/hdoc/Text-XML-HXT-Arrow-Pickle.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-Pickle.html" >Source code</A@@ -409,6 +409,30 @@ ></TR ><TR ><TD CLASS="decl"+><A HREF="#v%3Axp6Tuple"+>xp6Tuple</A+> :: <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> a -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> b -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> c -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> d -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> e -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> f -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> (a, b, c, d, e, f)</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl" ><A HREF="#v%3AxpAddFixedAttr" >xpAddFixedAttr</A > :: String -&gt; String -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"@@ -513,6 +537,20 @@ ></TR ><TR ><TD CLASS="decl"+><A HREF="#v%3AxpDefault"+>xpDefault</A+> :: Eq a =&gt; a -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> a -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> a</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl" ><A HREF="#v%3AxpElem" >xpElem</A > :: String -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"@@ -527,6 +565,20 @@ ></TR ><TR ><TD CLASS="decl"+><A HREF="#v%3AxpElemWithAttrValue"+>xpElemWithAttrValue</A+> :: String -&gt; String -&gt; String -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> a -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> a</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl" ><A HREF="#v%3Axpickle" >xpickle</A > :: <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3AXmlPickler"@@ -593,6 +645,22 @@ ></TR ><TR ><TD CLASS="decl"+><A HREF="#v%3AxpMap"+>xpMap</A+> :: Ord k =&gt; String -&gt; String -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> k -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> v -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> (Map k v)</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl" ><A HREF="#v%3AxpOption" >xpOption</A > :: <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"@@ -717,6 +785,20 @@ ></TR ><TR ><TD CLASS="decl"+><A HREF="#v%3AxpTrees"+>xpTrees</A+> :: <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> [<A HREF="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%3AxpTriple" >xpTriple</A > :: <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"@@ -775,6 +857,18 @@ ></TR ><TR ><TD CLASS="decl"+><A HREF="#v%3AxpXmlText"+>xpXmlText</A+> :: <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> String</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl" ><A HREF="#v%3AxpZero" >xpZero</A > :: <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"@@ -1650,6 +1744,55 @@ ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname"+><A NAME="v%3Axp6Tuple"+></A+><B+>xp6Tuple</B+> :: <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> a -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> b -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> c -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> d -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> e -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> f -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> (a, b, c, d, e, f)</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-Arrow-Pickle.html#xp6Tuple"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+>Like <TT+><A HREF="Text-XML-HXT-Arrow-Pickle.html#v%3AxpPair"+>xpPair</A+></TT+> and <TT+><A HREF="Text-XML-HXT-Arrow-Pickle.html#v%3AxpTriple"+>xpTriple</A+></TT+> but for 6-tuples+</TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR+><TD CLASS="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname" ><A NAME="v%3AxpAddFixedAttr" ></A ><B@@ -1852,7 +1995,7 @@ >Run two picklers in sequence like with xpSeq.  When during unpickling the first one fails,  an alternative pickler (first argument) is applied.- This pickler only is used as combinator for unpickling.+ This pickler is only used as combinator for unpickling. </P ></TD ></TR@@ -1918,6 +2061,43 @@ ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname"+><A NAME="v%3AxpDefault"+></A+><B+>xpDefault</B+> :: Eq a =&gt; a -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> a -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> a</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-Arrow-Pickle.html#xpDefault"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+><P+>Optional conversion with default value+</P+><P+>The default value is not encoded in the XML document,+ during unpickling the default value is inserted if the pickler fails+</P+></TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR+><TD CLASS="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname" ><A NAME="v%3AxpElem" ></A ><B@@ -1944,6 +2124,18 @@ >Extra parameter is the element name. THE pickler for constructing  nested structures </P+><P+>Example:+</P+><PRE+> xpElem &quot;number&quot; $ xpickle+</PRE+><P+>will map an (42::Int) onto+</P+><PRE+> &lt;number&gt;42&lt;/number&gt;+</PRE ></TD ></TR ><TR@@ -1955,6 +2147,67 @@ ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname"+><A NAME="v%3AxpElemWithAttrValue"+></A+><B+>xpElemWithAttrValue</B+> :: String -&gt; String -&gt; String -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> a -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> a</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-Arrow-Pickle.html#xpElemWithAttrValue"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+><P+>Pickler for wrapping/unwrapping data into an XML element with an attribute with given value+</P+><P+>To make XML structures flexible but limit the number of different elements, it's sometimes+ useful to use a kind of generic element with a key value structure+</P+><P+>Example:+</P+><PRE+> &lt;attr name=&quot;key1&quot;&gt;value1&lt;/attr&gt;+ &lt;attr name=&quot;key2&quot;&gt;value2&lt;/attr&gt;+ &lt;attr name=&quot;key3&quot;&gt;value3&lt;/attr&gt;+</PRE+><P+>the Haskell datatype may look like this+</P+><PRE+> type T = T { key1 :: Int ; key2 :: String ; key3 :: Double }+</PRE+><P+>Then the picker for that type looks like this+</P+><PRE+> xpT :: PU T+ xpT = xpWrap ( uncurry3 T, \ t -&gt; (key1 t, key2 t, key3 t) ) $+       xpTriple (xpElemWithAttrValue &quot;attr&quot; &quot;name&quot; &quot;key1&quot; $ xpickle)+                (xpElemWithAttrValue &quot;attr&quot; &quot;name&quot; &quot;key2&quot; $ xpText0)+                (xpElemWithAttrValue &quot;attr&quot; &quot;name&quot; &quot;key3&quot; $ xpickle)+</PRE+></TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR+><TD CLASS="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname" ><A NAME="v%3Axpickle" ></A ><B@@ -2135,6 +2388,47 @@ ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname"+><A NAME="v%3AxpMap"+></A+><B+>xpMap</B+> :: Ord k =&gt; String -&gt; String -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> k -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> v -&gt; <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> (Map k v)</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-Arrow-Pickle.html#xpMap"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+><P+>Standard pickler for maps+</P+><P+>This pickler converts a map into a list of pairs.+ All key value pairs are mapped to an element with name (1.arg),+ the key is encoded as an attribute named by the 2. argument,+ the 3. arg is the pickler for the keys, the last one for the values+</P+></TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR+><TD CLASS="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname" ><A NAME="v%3AxpOption" ></A ><B@@ -2504,6 +2798,46 @@ ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname"+><A NAME="v%3AxpTrees"+></A+><B+>xpTrees</B+> :: <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> [<A HREF="Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"+>XmlTree</A+>]</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-Arrow-Pickle.html#xpTrees"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+><P+>Pickle a whole list of XmlTrees by just adding the list, unpickle is done by taking all element contens.+</P+><P+>This pickler should always combined with <TT+><A HREF="Text-XML-HXT-Arrow-Pickle.html#v%3AxpElem"+>xpElem</A+></TT+> for taking the whole contents of an element.+</P+></TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR+><TD CLASS="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname" ><A NAME="v%3AxpTriple" ></A ><B@@ -2632,6 +2966,50 @@ ><P >Map a value into another domain. If the inverse mapping is  undefined (Nothing), the unpickler fails+</P+></TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR+><TD CLASS="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname"+><A NAME="v%3AxpXmlText"+></A+><B+>xpXmlText</B+> :: <A HREF="Text-XML-HXT-Arrow-Pickle.html#t%3APU"+>PU</A+> String</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-Arrow-Pickle.html#xpXmlText"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+><P+>Pickle a string representing XML contents by inserting the tree representation into the XML document.+</P+><P+>Unpickling is done by converting the contents with+ <TT+><A HREF="Text-XML-HXT-Arrow-XmlArrow.html#v%3Axshow"+>xshow</A+></TT+> into a string,+ pickling is done with <TT+><A HREF="Text-XML-HXT-Arrow-ReadDocument.html#v%3Axread"+>xread</A+></TT+> </P ></TD ></TR
doc/hdoc/Text-XML-HXT-Arrow-ProcessDocument.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-ProcessDocument.html" >Source code</A
doc/hdoc/Text-XML-HXT-Arrow-ReadDocument.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-ReadDocument.html" >Source code</A@@ -340,10 +340,26 @@ ><A HREF="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 (default)+> : issue all error messages on stderr (default), or ignore all error messages </LI ><LI > <TT+><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_ignore_encoding_errors"+>a_ignore_encoding_errors</A+></TT+>: ignore all encoding errors, default is issue all encoding errors+</LI+><LI+> <TT+><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_ignore_none_xml_contents"+>a_ignore_none_xml_contents</A+></TT+>: ignore document contents of none XML/HTML documents.+                                This option can be useful for implementing crawler like applications, e.g. an URL checker.+                                In those cases net traffic can be reduced.+</LI+><LI+> <TT ><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_trace" >a_trace</A ></TT@@ -361,14 +377,19 @@ ><A HREF="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+> : obsolete and ignored, HTTP acccess is always done with curl bindings for libcurl </LI ><LI > <TT ><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_options_curl" >a_options_curl</A ></TT-> : more options for external program curl+> : deprecated but for compatibility reasons still supported.+                     More options passed to the curl binding.+                     Instead of using this option to set a whole bunch of options at once for curl+                     it is recomended to use the <TT+>curl-.*</TT+> options syntax described below. </LI ><LI > <TT@@ -395,8 +416,27 @@ ><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Aiso8859_16" >iso8859_16</A ></TT->, ...)+>, ...).+                 Only XML and HTML documents are decoded, documents with none XML/HTML mime types are not decoded. The whole content is returned in a single text node </LI+><LI+> <TT+><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_mime_types"+>a_mime_types</A+></TT+> : set the mime type table for file input with given file. The format of this config file must be in the syntax of a debian linux &quot;mime.types&quot; config file+</LI+><LI+> curl options : the HTTP interface with libcurl can be configured with a lot of options. To support these options in an easy way, there is a naming convetion:+                 Every option, which has the prefix <TT+>curl</TT+> and the rest of the name forms an option as described in the curl man page, is passed to the curl binding lib.+                 See <TT+><A HREF="Text-XML-HXT-IO-GetHTTPLibCurl.html#v%3AgetCont"+>getCont</A+></TT+> for examples. Currently most of the options concerning HTTP requests are implemented.+</LI ></UL ><P >All attributes not evaluated by readDocument are stored in the created document root node for easy access of the various@@ -417,10 +457,11 @@ ><PRE > readDocument [ (a_validate, &quot;0&quot;)               , (a_encoding, isoLatin1)-              ] &quot;test.xml&quot;+              , (a_parse_by_mimetype, &quot;1&quot;)+              ] &quot;http://localhost/test.php&quot; </PRE ><P->reads document &quot;test.xml&quot; without validation, default encoding <TT+>reads document &quot;test.php&quot;, parses it as HTML or XML depending on the mimetype given from the server, but without validation, default encoding <TT ><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3AisoLatin1" >isoLatin1</A ></TT@@ -429,7 +470,6 @@ ><PRE > readDocument [ (a_parse_html, &quot;1&quot;)               , (a_encoding, isoLatin1)-              , (a_tagsoup,    &quot;1&quot;)               ] &quot;&quot; </PRE ><P@@ -439,6 +479,20 @@ ></TT >, parsing is done with tagsoup parser+</P+><PRE+> readDocument [ (a_encoding, isoLatin1)+              , (a_mime_type,    &quot;/etc/mime.types&quot;)+              , (a_tagsoup,    &quot;1&quot;)+              ] &quot;test.svg&quot;+</PRE+><P+>reads an SVG document from standard input, sets the mime type by looking in the system mimetype config file, default encoding is <TT+><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3AisoLatin1"+>isoLatin1</A+></TT+>,+parsing is done with the lightweight tagsoup parser, which implies no validation. </P ><PRE > readDocument [ (a_parse_html,     &quot;1&quot;)
doc/hdoc/Text-XML-HXT-Arrow-WriteDocument.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-WriteDocument.html" >Source code</A
doc/hdoc/Text-XML-HXT-Arrow-XPath.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-XPath.html" >Source code</A
doc/hdoc/Text-XML-HXT-Arrow-XPathSimple.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-XPathSimple.html" >Source code</A
doc/hdoc/Text-XML-HXT-Arrow-XmlArrow.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-XmlArrow.html" >Source code</A
doc/hdoc/Text-XML-HXT-Arrow-XmlIOStateArrow.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-XmlIOStateArrow.html" >Source code</A@@ -126,6 +126,11 @@ >URI Manipulation </A ></DT+><DT+><A HREF="#9"+>Mime Type Handling+</A+></DT ></DL ></TD ></TR@@ -284,6 +289,14 @@ >XmlTrees</A >)</TD ></TR+><TR+><TD CLASS="recfield"+><A HREF="#v%3Axio_mimeTypes"+>xio_mimeTypes</A+> :: <A HREF="Text-XML-HXT-DOM-MimeTypes.html#t%3AMimeTypeTable"+>MimeTypeTable</A+></TD+></TR ></TABLE >}</TD ></TR@@ -529,6 +542,20 @@ ></TR ><TR ><TD CLASS="decl"+><A HREF="#v%3AgetAllParamsString"+>getAllParamsString</A+> :: <A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#t%3AIOStateArrow"+>IOStateArrow</A+> s b (<A HREF="Data-AssocList.html#t%3AAssocList"+>AssocList</A+> String String)</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl" ><A HREF="#v%3AsetParamString" >setParamString</A > :: String -&gt; String -&gt; <A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#t%3AIOStateArrow"@@ -1127,6 +1154,32 @@ >ArrowList</A > a =&gt; a String String</TD ></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl"+><A HREF="#v%3AsetMimeTypeTable"+>setMimeTypeTable</A+> :: <A HREF="Text-XML-HXT-DOM-MimeTypes.html#t%3AMimeTypeTable"+>MimeTypeTable</A+> -&gt; <A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#t%3AIOStateArrow"+>IOStateArrow</A+> s b b</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl"+><A HREF="#v%3AsetMimeTypeTableFromFile"+>setMimeTypeTableFromFile</A+> :: FilePath -&gt; <A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#t%3AIOStateArrow"+>IOStateArrow</A+> s b b</TD+></TR ></TABLE ></TD ></TR@@ -1401,6 +1454,18 @@ ><TD CLASS="rdoc" ></TD ></TR+><TR+><TD CLASS="arg"+><A NAME="v%3Axio_mimeTypes"+></A+><B+>xio_mimeTypes</B+> :: <A HREF="Text-XML-HXT-DOM-MimeTypes.html#t%3AMimeTypeTable"+>MimeTypeTable</A+></TD+><TD CLASS="rdoc"+></TD+></TR ></TABLE ></TD ></TR@@ -2053,6 +2118,38 @@ ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname"+><A NAME="v%3AgetAllParamsString"+></A+><B+>getAllParamsString</B+> :: <A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#t%3AIOStateArrow"+>IOStateArrow</A+> s b (<A HREF="Data-AssocList.html#t%3AAssocList"+>AssocList</A+> String String)</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-Arrow-XmlIOStateArrow.html#getAllParamsString"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+>read all attributes from global state+ and convert the values to strings+</TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR+><TD CLASS="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname" ><A NAME="v%3AsetParamString" ></A ><B@@ -3547,6 +3644,98 @@ ><TD CLASS="doc" >arrow for selecting the user info of the URI without trailing '@', fails if input is not a legal URI </TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR+><TD CLASS="section1"+><A NAME="9"+>Mime Type Handling+</A+></TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR+><TD CLASS="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname"+><A NAME="v%3AsetMimeTypeTable"+></A+><B+>setMimeTypeTable</B+> :: <A HREF="Text-XML-HXT-DOM-MimeTypes.html#t%3AMimeTypeTable"+>MimeTypeTable</A+> -&gt; <A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#t%3AIOStateArrow"+>IOStateArrow</A+> s b b</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-Arrow-XmlIOStateArrow.html#setMimeTypeTable"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+><P+>set the table mapping of file extensions to mime types in the system state+</P+><P+>Default table is defined in <TT+><A HREF="Text-XML-HXT-DOM.html#t%3AMimeTypeDefaults"+>MimeTypeDefaults</A+></TT+>.+ This table is used when reading loacl files, (file: protocol) to determine the mime type+</P+></TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR+><TD CLASS="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname"+><A NAME="v%3AsetMimeTypeTableFromFile"+></A+><B+>setMimeTypeTableFromFile</B+> :: FilePath -&gt; <A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#t%3AIOStateArrow"+>IOStateArrow</A+> s b b</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-Arrow-XmlIOStateArrow.html#setMimeTypeTableFromFile"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+><P+>set the table mapping of file extensions to mime types by an external config file+</P+><P+>The config file must follow the conventions of <EM+>etc</EM+>mime.types on a debian linux system,+ that means all empty lines and all lines starting with a # are ignored. The other lines+ must consist of a mime type followed by a possible empty list of extensions.+ The list of extenstions and mime types overwrites the default list in the system state+ of the IOStateArrow+</P+></TD ></TR ><TR ><TD CLASS="s15"
doc/hdoc/Text-XML-HXT-Arrow-XmlRegex.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow-XmlRegex.html" >Source code</A
doc/hdoc/Text-XML-HXT-Arrow.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Arrow.html" >Source code</A@@ -255,6 +255,16 @@ ><TD CLASS="decl" >module <A HREF="Text-XML-HXT-XSLT-XsltArrows.html" >Text.XML.HXT.XSLT.XsltArrows</A+></TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR+><TD CLASS="decl"+>module <A HREF="Text-XML-HXT-Version.html"+>Text.XML.HXT.Version</A ></TD ></TR ><TR
doc/hdoc/Text-XML-HXT-DOM-FormatXmlTree.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DOM-FormatXmlTree.html" >Source code</A
doc/hdoc/Text-XML-HXT-DOM-Interface.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DOM-Interface.html" >Source code</A@@ -144,6 +144,16 @@ ><TD CLASS="decl" >module <A HREF="Text-XML-HXT-DOM-XmlOptions.html" >Text.XML.HXT.DOM.XmlOptions</A+></TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR+><TD CLASS="decl"+>module <A HREF="Text-XML-HXT-DOM-MimeTypes.html"+>Text.XML.HXT.DOM.MimeTypes</A ></TD ></TR ><TR
doc/hdoc/Text-XML-HXT-DOM-IsoLatinTables.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DOM-IsoLatinTables.html" >Source code</A
+ doc/hdoc/Text-XML-HXT-DOM-MimeTypeDefaults.html view
@@ -0,0 +1,143 @@+<!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.MimeTypeDefaults</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-8.1.0: A collection of tools for processing XML with Haskell.</TD+><TD CLASS="topbut"+><A HREF="src/Text-XML-HXT-DOM-MimeTypeDefaults.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.MimeTypeDefaults</FONT+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR+><TD CLASS="section1"+>Description</TD+></TR+><TR+><TD CLASS="doc"+><P+>default mime type table+</P+><P+>this file is generated from file <EM+>etc</EM+>mime.types+</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%3AmimeTypeDefaults"+>mimeTypeDefaults</A+> :: [(String, 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%3AmimeTypeDefaults"+></A+><B+>mimeTypeDefaults</B+> :: [(String, String)]</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-MimeTypeDefaults.html#mimeTypeDefaults"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+>the table with the mapping from file name extensions to mime types+</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+>
+ doc/hdoc/Text-XML-HXT-DOM-MimeTypes.html view
@@ -0,0 +1,427 @@+<!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.MimeTypes</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-8.1.0: A collection of tools for processing XML with Haskell.</TD+><TD CLASS="topbut"+><A HREF="src/Text-XML-HXT-DOM-MimeTypes.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.MimeTypes</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"+>mime type related data and functions+</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"+><SPAN CLASS="keyword"+>type</SPAN+> <A NAME="t%3AMimeTypeTable"+></A+><B+>MimeTypeTable</B+> = Map String String</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-MimeTypes.html#MimeTypeTable"+>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%3Aapplication_xhtml"+></A+><B+>application_xhtml</B+> :: String</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-MimeTypes.html#application_xhtml"+>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%3Aapplication_xml"+></A+><B+>application_xml</B+> :: String</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-MimeTypes.html#application_xml"+>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%3Aapplication_xml_external_parsed_entity"+></A+><B+>application_xml_external_parsed_entity</B+> :: String</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-MimeTypes.html#application_xml_external_parsed_entity"+>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%3Aapplication_xml_dtd"+></A+><B+>application_xml_dtd</B+> :: String</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-MimeTypes.html#application_xml_dtd"+>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%3Atext_html"+></A+><B+>text_html</B+> :: String</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-MimeTypes.html#text_html"+>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%3Atext_xml"+></A+><B+>text_xml</B+> :: String</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-MimeTypes.html#text_xml"+>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%3Atext_xml_external_parsed_entity"+></A+><B+>text_xml_external_parsed_entity</B+> :: String</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-MimeTypes.html#text_xml_external_parsed_entity"+>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%3AisHtmlMimeType"+></A+><B+>isHtmlMimeType</B+> :: String -&gt; Bool</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-MimeTypes.html#isHtmlMimeType"+>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%3AisXmlMimeType"+></A+><B+>isXmlMimeType</B+> :: String -&gt; Bool</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-MimeTypes.html#isXmlMimeType"+>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%3AdefaultMimeTypeTable"+></A+><B+>defaultMimeTypeTable</B+> :: <A HREF="Text-XML-HXT-DOM-MimeTypes.html#t%3AMimeTypeTable"+>MimeTypeTable</A+></TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-MimeTypes.html#defaultMimeTypeTable"+>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%3AextensionToMimeType"+></A+><B+>extensionToMimeType</B+> :: String -&gt; <A HREF="Text-XML-HXT-DOM-MimeTypes.html#t%3AMimeTypeTable"+>MimeTypeTable</A+> -&gt; String</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-MimeTypes.html#extensionToMimeType"+>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%3AreadMimeTypeTable"+></A+><B+>readMimeTypeTable</B+> :: FilePath -&gt; IO <A HREF="Text-XML-HXT-DOM-MimeTypes.html#t%3AMimeTypeTable"+>MimeTypeTable</A+></TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-MimeTypes.html#readMimeTypeTable"+>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%3AparseMimeTypeTable"+></A+><B+>parseMimeTypeTable</B+> :: String -&gt; [(String, String)]</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-MimeTypes.html#parseMimeTypeTable"+>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+>
− doc/hdoc/Text-XML-HXT-DOM-Namespace.html
@@ -1,181 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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"-><P->main namespace filter for propagation, checking, tracing and error handling-</P-><P->$Id: Namespace.hs,v 1.3 2005<EM->01</EM->06 10:48:07 hxml Exp $-</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%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->
− doc/hdoc/Text-XML-HXT-DOM-NamespaceFilter.html
@@ -1,431 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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->$Id: NamespaceFilter.hs,v 1.4 2006<EM->11</EM->12 14:53:00 hxml Exp $-</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-> = NsEnv</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3ApropagateNamespaces"->propagateNamespaces</A-> :: XmlFilter</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; XmlFilter</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AvalidateNamespaces"->validateNamespaces</A-> :: XmlFilter</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3Avalidate1Namespaces"->validate1Namespaces</A-> :: XmlFilter</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AisNamespaceDecl"->isNamespaceDecl</A-> :: XmlFilter</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"->module <A HREF="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-> = NsEnv</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 QName 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-> :: XmlFilter</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; XmlFilter</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-> :: XmlFilter</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="Text-XML-HXT-DOM-NamespacePredicates.html#v%3AisWellformedQName"->isWellformedQName</A-></TT->, <TT-><A HREF="Text-XML-HXT-DOM-NamespacePredicates.html#v%3AisWellformedQualifiedName"->isWellformedQualifiedName</A-></TT->, <TT-><A HREF="Text-XML-HXT-DOM-NamespacePredicates.html#v%3AisDeclaredNamespace"->isDeclaredNamespace</A-></TT->- and <TT-><A HREF="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-> :: XmlFilter</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-> :: XmlFilter</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="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->
doc/hdoc/Text-XML-HXT-DOM-NamespacePredicates.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DOM-NamespacePredicates.html" >Source code</A
doc/hdoc/Text-XML-HXT-DOM-QualifiedName.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DOM-QualifiedName.html" >Source code</A
doc/hdoc/Text-XML-HXT-DOM-ShowXml.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DOM-ShowXml.html" >Source code</A
doc/hdoc/Text-XML-HXT-DOM-TypeDefs.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DOM-TypeDefs.html" >Source code</A
doc/hdoc/Text-XML-HXT-DOM-UTF8Decoding.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DOM-UTF8Decoding.html" >Source code</A
doc/hdoc/Text-XML-HXT-DOM-Unicode.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DOM-Unicode.html" >Source code</A
doc/hdoc/Text-XML-HXT-DOM-Util.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DOM-Util.html" >Source code</A
doc/hdoc/Text-XML-HXT-DOM-XmlKeywords.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DOM-XmlKeywords.html" >Source code</A@@ -80,16 +80,9 @@ ></TR ><TR ><TD CLASS="doc"-><P->Version    : $Id: XmlKeywords.hs,v 1.10 2006<EM->11</EM->02 09:34:09 hxml Exp $-</P-><P >Constants for XML keywords, for special attribute names    and special attribute values-</P-></TD+</TD ></TR ><TR ><TD CLASS="s15"@@ -318,6 +311,26 @@ ></TR ><TR ><TD CLASS="decl"+><A HREF="#v%3Aa_ignore_encoding_errors"+>a_ignore_encoding_errors</A+> :: String</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl"+><A HREF="#v%3Aa_ignore_none_xml_contents"+>a_ignore_none_xml_contents</A+> :: String</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl" ><A HREF="#v%3Aa_indent" >a_indent</A > :: String</TD@@ -368,6 +381,16 @@ ></TR ><TR ><TD CLASS="decl"+><A HREF="#v%3Aa_mime_types"+>a_mime_types</A+> :: String</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl" ><A HREF="#v%3Aa_module" >a_module</A > :: String</TD@@ -1532,96 +1555,6 @@ >a_do_not_collect_errors</A > :: String</TD ></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3Aapplication_xhtml"->application_xhtml</A-> :: String</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3Aapplication_xml"->application_xml</A-> :: String</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3Aapplication_xml_external_parsed_entity"->application_xml_external_parsed_entity</A-> :: String</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3Aapplication_xml_dtd"->application_xml_dtd</A-> :: String</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3Atext_html"->text_html</A-> :: String</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3Atext_xml"->text_xml</A-> :: String</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3Atext_xml_external_parsed_entity"->text_xml_external_parsed_entity</A-> :: String</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AisHtmlMimeType"->isHtmlMimeType</A-> :: String -&gt; Bool</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AisXmlMimeType"->isXmlMimeType</A-> :: String -&gt; Bool</TD-></TR ></TABLE ></TD ></TR@@ -2104,6 +2037,50 @@ ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname"+><A NAME="v%3Aa_ignore_encoding_errors"+></A+><B+>a_ignore_encoding_errors</B+> :: String</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-XmlKeywords.html#a_ignore_encoding_errors"+>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%3Aa_ignore_none_xml_contents"+></A+><B+>a_ignore_none_xml_contents</B+> :: String</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-XmlKeywords.html#a_ignore_none_xml_contents"+>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%3Aa_indent" ></A ><B@@ -2214,6 +2191,28 @@ ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname"+><A NAME="v%3Aa_mime_types"+></A+><B+>a_mime_types</B+> :: String</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-XmlKeywords.html#a_mime_types"+>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%3Aa_module" ></A ><B@@ -4788,204 +4787,6 @@ > :: String</TD ><TD CLASS="declbut" ><A HREF="src/Text-XML-HXT-DOM-XmlKeywords.html#a_do_not_collect_errors"->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%3Aapplication_xhtml"-></A-><B->application_xhtml</B-> :: String</TD-><TD CLASS="declbut"-><A HREF="src/Text-XML-HXT-DOM-XmlKeywords.html#application_xhtml"->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%3Aapplication_xml"-></A-><B->application_xml</B-> :: String</TD-><TD CLASS="declbut"-><A HREF="src/Text-XML-HXT-DOM-XmlKeywords.html#application_xml"->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%3Aapplication_xml_external_parsed_entity"-></A-><B->application_xml_external_parsed_entity</B-> :: String</TD-><TD CLASS="declbut"-><A HREF="src/Text-XML-HXT-DOM-XmlKeywords.html#application_xml_external_parsed_entity"->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%3Aapplication_xml_dtd"-></A-><B->application_xml_dtd</B-> :: String</TD-><TD CLASS="declbut"-><A HREF="src/Text-XML-HXT-DOM-XmlKeywords.html#application_xml_dtd"->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%3Atext_html"-></A-><B->text_html</B-> :: String</TD-><TD CLASS="declbut"-><A HREF="src/Text-XML-HXT-DOM-XmlKeywords.html#text_html"->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%3Atext_xml"-></A-><B->text_xml</B-> :: String</TD-><TD CLASS="declbut"-><A HREF="src/Text-XML-HXT-DOM-XmlKeywords.html#text_xml"->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%3Atext_xml_external_parsed_entity"-></A-><B->text_xml_external_parsed_entity</B-> :: String</TD-><TD CLASS="declbut"-><A HREF="src/Text-XML-HXT-DOM-XmlKeywords.html#text_xml_external_parsed_entity"->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%3AisHtmlMimeType"-></A-><B->isHtmlMimeType</B-> :: String -&gt; Bool</TD-><TD CLASS="declbut"-><A HREF="src/Text-XML-HXT-DOM-XmlKeywords.html#isHtmlMimeType"->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%3AisXmlMimeType"-></A-><B->isXmlMimeType</B-> :: String -&gt; Bool</TD-><TD CLASS="declbut"-><A HREF="src/Text-XML-HXT-DOM-XmlKeywords.html#isXmlMimeType" >Source</A ></TD ></TR
doc/hdoc/Text-XML-HXT-DOM-XmlNode.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DOM-XmlNode.html" >Source code</A
doc/hdoc/Text-XML-HXT-DOM-XmlOptions.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DOM-XmlOptions.html" >Source code</A@@ -171,6 +171,16 @@ >Attributes</A > -&gt; Bool</TD ></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl"+><A HREF="#v%3AisTrueValue"+>isTrueValue</A+> :: String -&gt; Bool</TD+></TR ></TABLE ></TD ></TR@@ -578,6 +588,41 @@  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="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname"+><A NAME="v%3AisTrueValue"+></A+><B+>isTrueValue</B+> :: String -&gt; Bool</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-DOM-XmlOptions.html#isTrueValue"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="doc"+><P+>check whether a string represents True+</P+><P+>definition:+</P+><PRE+> isTrueValue	= (`elem` [&quot;1&quot;, &quot;True&quot;, &quot;true&quot;, &quot;Yes&quot;, &quot;yes&quot;])+</PRE ></TD ></TR ><TR
− doc/hdoc/Text-XML-HXT-DOM-XmlState.html
@@ -1,2903 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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-><P->Version : $Id: XmlState.hs,v 1.3 2005<EM->05</EM->27 13:15:23 hxml Exp $-</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-> = AssocList String XmlTrees</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 = XmlTree -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"->XState</A-> state XmlTrees</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; XmlTrees -&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 XmlTrees</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-> :: XmlFilter -&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; XmlFilter</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AstatusOk"->statusOk</A-> :: XmlFilter</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-> = AssocList String XmlTrees</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 = XmlTree -&gt; <A HREF="Text-XML-HXT-DOM-XmlState.html#t%3AXState"->XState</A-> state XmlTrees</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; XmlTrees -&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 XmlTrees</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-> :: XmlFilter -&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 a_status-    - 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 a_error_log- 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- c_warn (1) : warning,- c_err (2): error (e.g. parse error, validation error, ...),- c_fatal (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 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-</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; XmlFilter</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 c_err-</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-> :: XmlFilter</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 c_err-</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 noneM-</P-><P->see also : processAttr, processAttrl-</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->
doc/hdoc/Text-XML-HXT-DOM-XmlTreeTypes.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DOM-XmlTreeTypes.html" >Source code</A
− doc/hdoc/Text-XML-HXT-DOM.html
@@ -1,139 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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->Version : $Id: DOM.hs,v 1.2 2006<EM->11</EM->12 14:52:59 hxml Exp $-</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-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-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="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->
doc/hdoc/Text-XML-HXT-DTDValidation-AttributeValueValidation.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DTDValidation-AttributeValueValidation.html" >Source code</A
doc/hdoc/Text-XML-HXT-DTDValidation-DTDValidation.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DTDValidation-DTDValidation.html" >Source code</A
doc/hdoc/Text-XML-HXT-DTDValidation-DocTransformation.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DTDValidation-DocTransformation.html" >Source code</A
doc/hdoc/Text-XML-HXT-DTDValidation-DocValidation.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DTDValidation-DocValidation.html" >Source code</A
doc/hdoc/Text-XML-HXT-DTDValidation-IdValidation.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DTDValidation-IdValidation.html" >Source code</A
doc/hdoc/Text-XML-HXT-DTDValidation-RE.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DTDValidation-RE.html" >Source code</A
doc/hdoc/Text-XML-HXT-DTDValidation-TypeDefs.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DTDValidation-TypeDefs.html" >Source code</A
doc/hdoc/Text-XML-HXT-DTDValidation-Validation.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DTDValidation-Validation.html" >Source code</A
doc/hdoc/Text-XML-HXT-DTDValidation-XmlRE.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-DTDValidation-XmlRE.html" >Source code</A
doc/hdoc/Text-XML-HXT-IO-GetFILE.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-IO-GetFILE.html" >Source code</A
− doc/hdoc/Text-XML-HXT-IO-GetHTTPCurl.html
@@ -1,102 +0,0 @@-<!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.IO.GetHTTPCurl</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-8.0.0: A collection of tools for processing XML with Haskell.</TD-><TD CLASS="topbut"-><A HREF="src/Text-XML-HXT-IO-GetHTTPCurl.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.IO.GetHTTPCurl</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%3AgetCont"-></A-><B->getCont</B-> :: String -&gt; String -&gt; String -&gt; IO (Either String ([(String, String)], String))</TD-><TD CLASS="declbut"-><A HREF="src/Text-XML-HXT-IO-GetHTTPCurl.html#getCont"->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->
+ doc/hdoc/Text-XML-HXT-IO-GetHTTPLibCurl.html view
@@ -0,0 +1,102 @@+<!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.IO.GetHTTPLibCurl</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-8.1.0: A collection of tools for processing XML with Haskell.</TD+><TD CLASS="topbut"+><A HREF="src/Text-XML-HXT-IO-GetHTTPLibCurl.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.IO.GetHTTPLibCurl</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%3AgetCont"+></A+><B+>getCont</B+> :: [(String, String)] -&gt; String -&gt; IO (Either String ([(String, String)], String))</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-IO-GetHTTPLibCurl.html#getCont"+>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+>
− doc/hdoc/Text-XML-HXT-IO-GetHTTPNative.html
@@ -1,102 +0,0 @@-<!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.IO.GetHTTPNative</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-8.0.0: A collection of tools for processing XML with Haskell.</TD-><TD CLASS="topbut"-><A HREF="src/Text-XML-HXT-IO-GetHTTPNative.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.IO.GetHTTPNative</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%3AgetCont"-></A-><B->getCont</B-> :: String -&gt; String -&gt; IO (Either String ([(String, String)], String))</TD-><TD CLASS="declbut"-><A HREF="src/Text-XML-HXT-IO-GetHTTPNative.html#getCont"->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->
− doc/hdoc/Text-XML-HXT-Parser-DTDProcessing.html
@@ -1,346 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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"-><P->Version    : $Id: DTDProcessing.hs,v 1.15 2006<EM->11</EM->12 14:53:00 hxml Exp $-</P-><P->DTD processing function for-   including external parts of a DTD-   parameter entity substitution and general entity substitution-</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%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 a_status and a_module 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 parseXmlDoc, 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->
− doc/hdoc/Text-XML-HXT-Parser-DefaultURI.html
@@ -1,104 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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->
doc/hdoc/Text-XML-HXT-Parser-HtmlParsec.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Parser-HtmlParsec.html" >Source code</A
− doc/hdoc/Text-XML-HXT-Parser-HtmlParser.html
@@ -1,358 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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-> :: XmlTree -&gt; XmlTrees</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"->module <A HREF="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-> :: XmlTree -&gt; XmlTrees</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="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->
− doc/hdoc/Text-XML-HXT-Parser-MainFunctions.html
@@ -1,561 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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->Version : $Id: MainFunctions.hs,v 1.2 2004<EM->11</EM->20 16:53:15 hxml Exp $-</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-> :: Attributes -&gt; String -&gt; IO (XmlTree, XmlTrees, Int)</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AputXmlDocument"->putXmlDocument</A-> :: Attributes -&gt; String -&gt; XmlTree -&gt; IO (XmlTrees, Int)</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AparseDocument"->parseDocument</A-> :: Attributes -&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-> :: Attributes -&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-> :: Attributes -&gt; String -&gt; IO (XmlTree, XmlTrees, 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 c_ok, c_warn, c_err, c_fatal-</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->, a_collect_errors 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-> :: Attributes -&gt; String -&gt; XmlTree -&gt; IO (XmlTrees, 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-> :: Attributes -&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-> a_parse_html: use HTML parser, else use XML parser (default)-</LI-><LI-> a_validate : validate document (default), else skip validation-</LI-><LI-> a_check_namespaces : check namespaces, else skip namespace processing (default)-</LI-><LI-> a_canonicalize : canonicalize document (default), else skip canonicalization-</LI-><LI-> a_preserve_comment : preserve comments during canonicalization, else remove comments (default)-</LI-><LI-> a_remove_whitespace : remove all whitespace, used for document indentation, else skip this step (default)-</LI-><LI-> a_indent : indent document by inserting whitespace, else skip this step (default)-</LI-><LI-> a_issue_warnings : issue warnings, when parsing HTML (default), else ignore HTML parser warnings-</LI-><LI-> a_issue_errors : issue all error messages on stderr (default), or ignore all error messages-</LI-><LI-> a_collect_errors : all error messages are collected during processing and appended to the result document- 			  for further processing within the calling modules-</LI-><LI-> a_trace : trace level: values: 0 -4-</LI-><LI-> a_proxy : proxy for http access, e.g. www-cache:3128-</LI-><LI-> a_use_curl : for http access via external programm curl, default is native HTTP access-</LI-><LI-> a_options_curl : more options for external program curl-</LI-><LI-> a_source : the document source url-</LI-><LI-> a_encoding : default document encoding (utf8, isoLatin1, usAscii, ...)-</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 isoLatin1-</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-> :: Attributes -&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-> a_indent : indent document for readability, (default: no indentation)-</LI-><LI-> a_remove_whitespace : remove all redundant whitespace for shorten text (default: no removal)-</LI-><LI-> a_output_file : destination file for document, default is &quot;-&quot; for stdout-</LI-><LI-> a_output_encoding : encoding of document, default is a_encoding or utf8-</LI-><LI-> a_output_xml : (default) issue XML: quote special XML chars &gt;,&lt;,&quot;,',&amp;-                    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, ...-</LI-><LI-> a_show_tree : show tree representation of document (for debugging)-</LI-><LI-> a_show_haskell : show Haskell representaion of document (for debugging)-</LI-><LI-> a_issue_errors, a_collect_errors : 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->
− doc/hdoc/Text-XML-HXT-Parser-ProtocolHandler.html
@@ -1,104 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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->
− doc/hdoc/Text-XML-HXT-Parser-ProtocolHandlerFile.html
@@ -1,104 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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->
− doc/hdoc/Text-XML-HXT-Parser-ProtocolHandlerHttpCurl.html
@@ -1,104 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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->
− doc/hdoc/Text-XML-HXT-Parser-ProtocolHandlerHttpNative.html
@@ -1,104 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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->
− doc/hdoc/Text-XML-HXT-Parser-ProtocolHandlerHttpNativeOrCurl.html
@@ -1,104 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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->
doc/hdoc/Text-XML-HXT-Parser-ProtocolHandlerUtil.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Parser-ProtocolHandlerUtil.html" >Source code</A
doc/hdoc/Text-XML-HXT-Parser-TagSoup.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Parser-TagSoup.html" >Source code</A
doc/hdoc/Text-XML-HXT-Parser-XhtmlEntities.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Parser-XhtmlEntities.html" >Source code</A
doc/hdoc/Text-XML-HXT-Parser-XmlCharParser.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Parser-XmlCharParser.html" >Source code</A
doc/hdoc/Text-XML-HXT-Parser-XmlDTDParser.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Parser-XmlDTDParser.html" >Source code</A
doc/hdoc/Text-XML-HXT-Parser-XmlDTDTokenParser.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Parser-XmlDTDTokenParser.html" >Source code</A
doc/hdoc/Text-XML-HXT-Parser-XmlEntities.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Parser-XmlEntities.html" >Source code</A
− doc/hdoc/Text-XML-HXT-Parser-XmlInput.html
@@ -1,628 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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-> :: XmlFilter</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-> :: XmlFilter</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 a_contentLength-</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->
doc/hdoc/Text-XML-HXT-Parser-XmlParsec.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Parser-XmlParsec.html" >Source code</A
doc/hdoc/Text-XML-HXT-Parser-XmlTokenParser.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-Parser-XmlTokenParser.html" >Source code</A
− doc/hdoc/Text-XML-HXT-Parser.html
@@ -1,163 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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->Version : $Id: Parser.hs,v 1.2 2006<EM->11</EM->09 20:27:42 hxml Exp $-</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-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-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->
doc/hdoc/Text-XML-HXT-RelaxNG-BasicArrows.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-BasicArrows.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-CreatePattern.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-CreatePattern.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-DataTypeLibMysql.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-DataTypeLibMysql.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-DataTypeLibUtils.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-DataTypeLibUtils.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-DataTypeLibraries.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-DataTypeLibraries.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-DataTypes.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-DataTypes.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-PatternFunctions.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-PatternFunctions.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-PatternToString.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-PatternToString.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-Schema.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-Schema.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-SchemaGrammar.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-SchemaGrammar.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-Simplification.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-Simplification.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-Unicode-Blocks.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-Unicode-Blocks.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-Unicode-CharProps.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-Unicode-CharProps.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-Utils.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-Utils.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-Validation.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-Validation.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-Validator.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-Validator.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-XmlSchema-DataTypeLibW3C.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-XmlSchema-DataTypeLibW3C.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-XmlSchema-Regex.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-XmlSchema-Regex.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG-XmlSchema-RegexParser.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG-XmlSchema-RegexParser.html" >Source code</A
doc/hdoc/Text-XML-HXT-RelaxNG.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-RelaxNG.html" >Source code</A
− doc/hdoc/Text-XML-HXT-Validator-AttributeValueValidation.html
@@ -1,204 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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-> :: XmlTrees -&gt; XmlTree -&gt; XmlFilter</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AnormalizeAttributeValue"->normalizeAttributeValue</A-> :: Maybe XmlTree -&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-> :: XmlTrees -&gt; XmlTree -&gt; XmlFilter</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 XmlTree -&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->
− doc/hdoc/Text-XML-HXT-Validator-DTDValidation.html
@@ -1,191 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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-> :: XmlFilter</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AvalidateDTD"->validateDTD</A-> :: XmlFilter</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-> :: XmlFilter</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-> :: XmlFilter</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->
− doc/hdoc/Text-XML-HXT-Validator-DocTransformation.html
@@ -1,152 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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-> :: XmlTree -&gt; XmlTree -&gt; XmlTrees</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-> :: XmlTree -&gt; XmlTree -&gt; XmlTrees</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->
− doc/hdoc/Text-XML-HXT-Validator-DocValidation.html
@@ -1,152 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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-> :: XmlTree -&gt; XmlTree -&gt; XmlTrees</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-> :: XmlTree -&gt; XmlTree -&gt; XmlTrees</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->
− doc/hdoc/Text-XML-HXT-Validator-IdValidation.html
@@ -1,155 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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-> :: XmlTree -&gt; XmlTree -&gt; XmlTrees</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-> :: XmlTree -&gt; XmlTree -&gt; XmlTrees</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->
− doc/hdoc/Text-XML-HXT-Validator-RE.html
@@ -1,1109 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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-><P->Version : $Id: RE.hs,v 1.1 2004<EM->09</EM->02 19:12:03 hxml Exp $-</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->
− doc/hdoc/Text-XML-HXT-Validator-Validation.html
@@ -1,187 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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- Version : $Id: Validation.hs,v 1.2 2004<EM->11</EM->23 15:50:23 hxml Exp $-</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->
− doc/hdoc/Text-XML-HXT-Validator-ValidationFilter.html
@@ -1,363 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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-> :: XmlFilter</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3Avalidate"->validate</A-> :: XmlFilter</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AvalidateDTD"->validateDTD</A-> :: XmlFilter</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AvalidateDoc"->validateDoc</A-> :: XmlFilter</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3AremoveDoublicateDefs"->removeDoublicateDefs</A-> :: XmlFilter</TD-></TR-><TR-><TD CLASS="s8"-></TD-></TR-><TR-><TD CLASS="decl"-><A HREF="#v%3Atransform"->transform</A-> :: XmlFilter</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-> :: XmlFilter</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-> :: XmlFilter</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-> :: XmlFilter</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-> :: XmlFilter</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-> :: XmlFilter</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-> :: XmlFilter</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->
− doc/hdoc/Text-XML-HXT-Validator-XmlRE.html
@@ -1,834 +0,0 @@-<!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-8.0.0: A collection of tools for processing XML with Haskell.</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; XmlTrees -&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; XmlTrees -&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->
+ doc/hdoc/Text-XML-HXT-Version.html view
@@ -0,0 +1,102 @@+<!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.Version</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-8.1.0: A collection of tools for processing XML with Haskell.</TD+><TD CLASS="topbut"+><A HREF="src/Text-XML-HXT-Version.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.Version</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%3Ahxt_version"+></A+><B+>hxt_version</B+> :: String</TD+><TD CLASS="declbut"+><A HREF="src/Text-XML-HXT-Version.html#hxt_version"+>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+>
doc/hdoc/Text-XML-HXT-XPath-NavTree.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-XPath-NavTree.html" >Source code</A
doc/hdoc/Text-XML-HXT-XPath-XPathArithmetic.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-XPath-XPathArithmetic.html" >Source code</A
doc/hdoc/Text-XML-HXT-XPath-XPathDataTypes.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-XPath-XPathDataTypes.html" >Source code</A
doc/hdoc/Text-XML-HXT-XPath-XPathEval.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-XPath-XPathEval.html" >Source code</A
doc/hdoc/Text-XML-HXT-XPath-XPathFct.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-XPath-XPathFct.html" >Source code</A
doc/hdoc/Text-XML-HXT-XPath-XPathKeywords.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-XPath-XPathKeywords.html" >Source code</A
doc/hdoc/Text-XML-HXT-XPath-XPathParser.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-XPath-XPathParser.html" >Source code</A
doc/hdoc/Text-XML-HXT-XPath-XPathToNodeSet.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-XPath-XPathToNodeSet.html" >Source code</A
doc/hdoc/Text-XML-HXT-XPath-XPathToString.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-XPath-XPathToString.html" >Source code</A
doc/hdoc/Text-XML-HXT-XPath.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-XPath.html" >Source code</A
doc/hdoc/Text-XML-HXT-XSLT-Application.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-XSLT-Application.html" >Source code</A
doc/hdoc/Text-XML-HXT-XSLT-Common.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-XSLT-Common.html" >Source code</A
doc/hdoc/Text-XML-HXT-XSLT-Compilation.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-XSLT-Compilation.html" >Source code</A
doc/hdoc/Text-XML-HXT-XSLT-CompiledStylesheet.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-XSLT-CompiledStylesheet.html" >Source code</A
doc/hdoc/Text-XML-HXT-XSLT-Names.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-XSLT-Names.html" >Source code</A
doc/hdoc/Text-XML-HXT-XSLT-XsltArrows.html view
@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="src/Text-XML-HXT-XSLT-XsltArrows.html" >Source code</A
doc/hdoc/doc-index-36.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-38.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-43.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-46.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-47.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-58.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-60.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-62.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-A.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A@@ -683,6 +683,22 @@ ></TR ><TR ><TD CLASS="indexentry"+>a_ignore_encoding_errors</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_ignore_encoding_errors"+>Text.XML.HXT.DOM.XmlKeywords</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.XSLT.Common, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexentry"+>a_ignore_none_xml_contents</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_ignore_none_xml_contents"+>Text.XML.HXT.DOM.XmlKeywords</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.XSLT.Common, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexentry" >a_indent</TD ><TD CLASS="indexlinks" ><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_indent"@@ -723,6 +739,14 @@ ></TR ><TR ><TD CLASS="indexentry"+>a_mime_types</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_mime_types"+>Text.XML.HXT.DOM.XmlKeywords</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.XSLT.Common, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexentry" >a_modifier</TD ><TD CLASS="indexlinks" ><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Aa_modifier"@@ -1285,33 +1309,33 @@ ><TD CLASS="indexentry" >application_xhtml</TD ><TD CLASS="indexlinks"-><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Aapplication_xhtml"->Text.XML.HXT.DOM.XmlKeywords</A->, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.XSLT.Common, Text.XML.HXT.Arrow</TD+><A HREF="Text-XML-HXT-DOM-MimeTypes.html#v%3Aapplication_xhtml"+>Text.XML.HXT.DOM.MimeTypes</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.Arrow</TD ></TR ><TR ><TD CLASS="indexentry" >application_xml</TD ><TD CLASS="indexlinks"-><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Aapplication_xml"->Text.XML.HXT.DOM.XmlKeywords</A->, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.XSLT.Common, Text.XML.HXT.Arrow</TD+><A HREF="Text-XML-HXT-DOM-MimeTypes.html#v%3Aapplication_xml"+>Text.XML.HXT.DOM.MimeTypes</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.Arrow</TD ></TR ><TR ><TD CLASS="indexentry" >application_xml_dtd</TD ><TD CLASS="indexlinks"-><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Aapplication_xml_dtd"->Text.XML.HXT.DOM.XmlKeywords</A->, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.XSLT.Common, Text.XML.HXT.Arrow</TD+><A HREF="Text-XML-HXT-DOM-MimeTypes.html#v%3Aapplication_xml_dtd"+>Text.XML.HXT.DOM.MimeTypes</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.Arrow</TD ></TR ><TR ><TD CLASS="indexentry" >application_xml_external_parsed_entity</TD ><TD CLASS="indexlinks"-><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Aapplication_xml_external_parsed_entity"->Text.XML.HXT.DOM.XmlKeywords</A->, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.XSLT.Common, Text.XML.HXT.Arrow</TD+><A HREF="Text-XML-HXT-DOM-MimeTypes.html#v%3Aapplication_xml_external_parsed_entity"+>Text.XML.HXT.DOM.MimeTypes</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.Arrow</TD ></TR ><TR ><TD CLASS="indexentry"
doc/hdoc/doc-index-B.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-C.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-D.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A@@ -506,6 +506,14 @@ ><A HREF="Data-Tree-NTree-Filter.html#v%3Adeepest" >Data.Tree.NTree.Filter</A >, Text.XML.HXT.DOM.XmlTreeTypes</TD+></TR+><TR+><TD CLASS="indexentry"+>defaultMimeTypeTable</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-DOM-MimeTypes.html#v%3AdefaultMimeTypeTable"+>Text.XML.HXT.DOM.MimeTypes</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.Arrow</TD ></TR ><TR ><TD CLASS="indexentry"
doc/hdoc/doc-index-E.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A@@ -732,6 +732,14 @@ ><A HREF="Text-XML-HXT-XPath-XPathToString.html#v%3Aexpr2XPathTree" >Text.XML.HXT.XPath.XPathToString</A >, Text.XML.HXT.XPath</TD+></TR+><TR+><TD CLASS="indexentry"+>extensionToMimeType</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-DOM-MimeTypes.html#v%3AextensionToMimeType"+>Text.XML.HXT.DOM.MimeTypes</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.Arrow</TD ></TR ></TABLE ></TD
doc/hdoc/doc-index-F.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-G.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A@@ -231,6 +231,14 @@ ></TR ><TR ><TD CLASS="indexentry"+>getAllParamsString</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#v%3AgetAllParamsString"+>Text.XML.HXT.Arrow.XmlIOStateArrow</A+>, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexentry" >getAtt</TD ><TD CLASS="indexlinks" ><A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#v%3AgetAtt"@@ -445,16 +453,8 @@ ><TD CLASS="indexannot" >3 (Function)</TD ><TD CLASS="indexlinks"-><A HREF="Text-XML-HXT-IO-GetHTTPCurl.html#v%3AgetCont"->Text.XML.HXT.IO.GetHTTPCurl</A-></TD-></TR-><TR-><TD CLASS="indexannot"->4 (Function)</TD-><TD CLASS="indexlinks"-><A HREF="Text-XML-HXT-IO-GetHTTPNative.html#v%3AgetCont"->Text.XML.HXT.IO.GetHTTPNative</A+><A HREF="Text-XML-HXT-IO-GetHTTPLibCurl.html#v%3AgetCont"+>Text.XML.HXT.IO.GetHTTPLibCurl</A ></TD ></TR ><TR
doc/hdoc/doc-index-H.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A@@ -396,6 +396,14 @@ ><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3AhttpPrefix" >Text.XML.HXT.DOM.XmlKeywords</A >, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.XSLT.Common, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexentry"+>hxt_version</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-Version.html#v%3Ahxt_version"+>Text.XML.HXT.Version</A+>, Text.XML.HXT.Arrow</TD ></TR ></TABLE ></TD
doc/hdoc/doc-index-I.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A@@ -845,9 +845,9 @@ ><TD CLASS="indexentry" >isHtmlMimeType</TD ><TD CLASS="indexlinks"-><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3AisHtmlMimeType"->Text.XML.HXT.DOM.XmlKeywords</A->, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.XSLT.Common, Text.XML.HXT.Arrow</TD+><A HREF="Text-XML-HXT-DOM-MimeTypes.html#v%3AisHtmlMimeType"+>Text.XML.HXT.DOM.MimeTypes</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.Arrow</TD ></TR ><TR ><TD CLASS="indexentry"@@ -1599,6 +1599,14 @@ ></TR ><TR ><TD CLASS="indexentry"+>isTrueValue</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-DOM-XmlOptions.html#v%3AisTrueValue"+>Text.XML.HXT.DOM.XmlOptions</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexentry" >isUnicodeC</TD ><TD CLASS="indexlinks" ><A HREF="Text-XML-HXT-RelaxNG-Unicode-CharProps.html#v%3AisUnicodeC"@@ -2017,9 +2025,9 @@ ><TD CLASS="indexentry" >isXmlMimeType</TD ><TD CLASS="indexlinks"-><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3AisXmlMimeType"->Text.XML.HXT.DOM.XmlKeywords</A->, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.XSLT.Common, Text.XML.HXT.Arrow</TD+><A HREF="Text-XML-HXT-DOM-MimeTypes.html#v%3AisXmlMimeType"+>Text.XML.HXT.DOM.MimeTypes</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.Arrow</TD ></TR ><TR ><TD CLASS="indexentry"
doc/hdoc/doc-index-K.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-L.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-M.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A@@ -211,6 +211,14 @@ ></TR ><TR ><TD CLASS="indexentry"+>MimeTypeTable</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-DOM-MimeTypes.html#t%3AMimeTypeTable"+>Text.XML.HXT.DOM.MimeTypes</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexentry" >Minus</TD ><TD CLASS="indexlinks" ><A HREF="Text-XML-HXT-XPath-XPathDataTypes.html#v%3AMinus"@@ -351,6 +359,14 @@ ></TR ><TR ><TD CLASS="indexentry"+>mimeTypeDefaults</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-DOM-MimeTypeDefaults.html#v%3AmimeTypeDefaults"+>Text.XML.HXT.DOM.MimeTypeDefaults</A+></TD+></TR+><TR+><TD CLASS="indexentry" >misc</TD ><TD CLASS="indexlinks" ><A HREF="Text-XML-HXT-Parser-XmlParsec.html#v%3Amisc"@@ -662,9 +678,21 @@ ></TD ></TR ><TR-><TD CLASS="indexentry"+><TD CLASS="indexentry" COLSPAN="2" >mkLeaf</TD+></TR+><TR+><TD CLASS="indexannot"+>1 (Function)</TD ><TD CLASS="indexlinks"+><A HREF="Control-Arrow-ArrowTree.html#v%3AmkLeaf"+>Control.Arrow.ArrowTree</A+>, Text.XML.HXT.DTDValidation.TypeDefs, Control.Arrow.ListArrows, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexannot"+>2 (Function)</TD+><TD CLASS="indexlinks" ><A HREF="Data-Tree-Class.html#v%3AmkLeaf" >Data.Tree.Class</A >, Data.Tree.NTree.TypeDefs, Data.NavTree, Data.Tree.NTree.Filter, Text.XML.HXT.DOM.XmlTreeTypes, Text.XML.HXT.DOM.XmlNode, Text.XML.HXT.XPath.NavTree, Text.XML.HXT.XPath.XPathDataTypes, Text.XML.HXT.XSLT.Common</TD@@ -1050,8 +1078,20 @@ >, Text.XML.HXT.XSLT.Common</TD ></TR ><TR-><TD CLASS="indexentry"+><TD CLASS="indexentry" COLSPAN="2" >mkTree</TD+></TR+><TR+><TD CLASS="indexannot"+>1 (Function)</TD+><TD CLASS="indexlinks"+><A HREF="Control-Arrow-ArrowTree.html#v%3AmkTree"+>Control.Arrow.ArrowTree</A+>, Text.XML.HXT.DTDValidation.TypeDefs, Control.Arrow.ListArrows, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexannot"+>2 (Function)</TD ><TD CLASS="indexlinks" ><A HREF="Data-Tree-Class.html#v%3AmkTree" >Data.Tree.Class</A
doc/hdoc/doc-index-N.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-O.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-P.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A@@ -427,6 +427,14 @@ ></TR ><TR ><TD CLASS="indexentry"+>parseMimeTypeTable</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-DOM-MimeTypes.html#v%3AparseMimeTypeTable"+>Text.XML.HXT.DOM.MimeTypes</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexentry" >parseNMToken</TD ><TD CLASS="indexlinks" ><A HREF="Text-XML-HXT-Parser-XmlParsec.html#v%3AparseNMToken"@@ -806,14 +814,6 @@ >, <A HREF="Text-XML-HXT-Arrow-Pickle.html#v%3ApickleDoc" >Text.XML.HXT.Arrow.Pickle</A >, Text.XML.HXT.Arrow</TD-></TR-><TR-><TD CLASS="indexentry"->popen</TD-><TD CLASS="indexlinks"-><A HREF="System-PipeOpen.html#v%3Apopen"->System.PipeOpen</A-></TD ></TR ><TR ><TD CLASS="indexentry"
doc/hdoc/doc-index-Q.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-R.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A@@ -408,6 +408,14 @@ ><A HREF="Text-XML-HXT-Arrow-ReadDocument.html#v%3AreadFromString" >Text.XML.HXT.Arrow.ReadDocument</A >, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexentry"+>readMimeTypeTable</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-DOM-MimeTypes.html#v%3AreadMimeTypeTable"+>Text.XML.HXT.DOM.MimeTypes</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.Arrow</TD ></TR ><TR ><TD CLASS="indexentry"
doc/hdoc/doc-index-S.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A@@ -858,6 +858,22 @@ >setErrorMsgHandler</TD ><TD CLASS="indexlinks" ><A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#v%3AsetErrorMsgHandler"+>Text.XML.HXT.Arrow.XmlIOStateArrow</A+>, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexentry"+>setMimeTypeTable</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#v%3AsetMimeTypeTable"+>Text.XML.HXT.Arrow.XmlIOStateArrow</A+>, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexentry"+>setMimeTypeTableFromFile</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#v%3AsetMimeTypeTableFromFile" >Text.XML.HXT.Arrow.XmlIOStateArrow</A >, Text.XML.HXT.Arrow</TD ></TR
doc/hdoc/doc-index-T.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A@@ -431,25 +431,25 @@ ><TD CLASS="indexentry" >text_html</TD ><TD CLASS="indexlinks"-><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Atext_html"->Text.XML.HXT.DOM.XmlKeywords</A->, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.XSLT.Common, Text.XML.HXT.Arrow</TD+><A HREF="Text-XML-HXT-DOM-MimeTypes.html#v%3Atext_html"+>Text.XML.HXT.DOM.MimeTypes</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.Arrow</TD ></TR ><TR ><TD CLASS="indexentry" >text_xml</TD ><TD CLASS="indexlinks"-><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Atext_xml"->Text.XML.HXT.DOM.XmlKeywords</A->, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.XSLT.Common, Text.XML.HXT.Arrow</TD+><A HREF="Text-XML-HXT-DOM-MimeTypes.html#v%3Atext_xml"+>Text.XML.HXT.DOM.MimeTypes</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.Arrow</TD ></TR ><TR ><TD CLASS="indexentry" >text_xml_external_parsed_entity</TD ><TD CLASS="indexlinks"-><A HREF="Text-XML-HXT-DOM-XmlKeywords.html#v%3Atext_xml_external_parsed_entity"->Text.XML.HXT.DOM.XmlKeywords</A->, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.XSLT.Common, Text.XML.HXT.Arrow</TD+><A HREF="Text-XML-HXT-DOM-MimeTypes.html#v%3Atext_xml_external_parsed_entity"+>Text.XML.HXT.DOM.MimeTypes</A+>, Text.XML.HXT.DOM.Interface, Text.XML.HXT.DTDValidation.TypeDefs, Text.XML.HXT.Arrow</TD ></TR ><TR ><TD CLASS="indexentry"
doc/hdoc/doc-index-U.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-V.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-W.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index-X.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A@@ -709,6 +709,14 @@ ></TR ><TR ><TD CLASS="indexentry"+>xio_mimeTypes</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#v%3Axio_mimeTypes"+>Text.XML.HXT.Arrow.XmlIOStateArrow</A+>, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexentry" >xio_sysState</TD ><TD CLASS="indexlinks" ><A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#v%3Axio_sysState"@@ -885,7 +893,9 @@ ><TD CLASS="indexlinks" ><A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#v%3Axp6Tuple" >Text.XML.HXT.Arrow.Pickle.Xml</A-></TD+>, <A HREF="Text-XML-HXT-Arrow-Pickle.html#v%3Axp6Tuple"+>Text.XML.HXT.Arrow.Pickle</A+>, Text.XML.HXT.Arrow</TD ></TR ><TR ><TD CLASS="indexentry"@@ -959,6 +969,16 @@ ></TR ><TR ><TD CLASS="indexentry"+>xpDefault</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#v%3AxpDefault"+>Text.XML.HXT.Arrow.Pickle.Xml</A+>, <A HREF="Text-XML-HXT-Arrow-Pickle.html#v%3AxpDefault"+>Text.XML.HXT.Arrow.Pickle</A+>, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexentry" >xpElem</TD ><TD CLASS="indexlinks" ><A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#v%3AxpElem"@@ -969,6 +989,16 @@ ></TR ><TR ><TD CLASS="indexentry"+>xpElemWithAttrValue</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#v%3AxpElemWithAttrValue"+>Text.XML.HXT.Arrow.Pickle.Xml</A+>, <A HREF="Text-XML-HXT-Arrow-Pickle.html#v%3AxpElemWithAttrValue"+>Text.XML.HXT.Arrow.Pickle</A+>, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexentry" >xpLift</TD ><TD CLASS="indexlinks" ><A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#v%3AxpLift"@@ -1009,6 +1039,16 @@ ></TR ><TR ><TD CLASS="indexentry"+>xpMap</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#v%3AxpMap"+>Text.XML.HXT.Arrow.Pickle.Xml</A+>, <A HREF="Text-XML-HXT-Arrow-Pickle.html#v%3AxpMap"+>Text.XML.HXT.Arrow.Pickle</A+>, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexentry" >xpOption</TD ><TD CLASS="indexlinks" ><A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#v%3AxpOption"@@ -1099,6 +1139,16 @@ ></TR ><TR ><TD CLASS="indexentry"+>xpTrees</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#v%3AxpTrees"+>Text.XML.HXT.Arrow.Pickle.Xml</A+>, <A HREF="Text-XML-HXT-Arrow-Pickle.html#v%3AxpTrees"+>Text.XML.HXT.Arrow.Pickle</A+>, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexentry" >xpTriple</TD ><TD CLASS="indexlinks" ><A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#v%3AxpTriple"@@ -1134,6 +1184,16 @@ ><A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#v%3AxpWrapMaybe" >Text.XML.HXT.Arrow.Pickle.Xml</A >, <A HREF="Text-XML-HXT-Arrow-Pickle.html#v%3AxpWrapMaybe"+>Text.XML.HXT.Arrow.Pickle</A+>, Text.XML.HXT.Arrow</TD+></TR+><TR+><TD CLASS="indexentry"+>xpXmlText</TD+><TD CLASS="indexlinks"+><A HREF="Text-XML-HXT-Arrow-Pickle-Xml.html#v%3AxpXmlText"+>Text.XML.HXT.Arrow.Pickle.Xml</A+>, <A HREF="Text-XML-HXT-Arrow-Pickle.html#v%3AxpXmlText" >Text.XML.HXT.Arrow.Pickle</A >, Text.XML.HXT.Arrow</TD ></TR
doc/hdoc/doc-index-Z.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/doc-index.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell. (Index)</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell. (Index)</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ></HEAD ><BODY@@ -17,7 +17,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A
doc/hdoc/hxt.haddock view

binary file changed (390530 → 395639 bytes)

doc/hdoc/index.html view
@@ -4,7 +4,7 @@ ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TITLE+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ><SCRIPT SRC="haddock-util.js" TYPE="text/javascript" ></SCRIPT@@ -19,7 +19,7 @@ ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A@@ -34,7 +34,7 @@ ></TR ><TR ><TD CLASS="section1"->hxt-8.0.0: A collection of tools for processing XML with Haskell.</TD+>hxt-8.1.0: A collection of tools for processing XML with Haskell.</TD ></TR ><TR ><TD CLASS="doc"@@ -336,31 +336,6 @@ ><TR ><TD STYLE="width: 50em" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:7')" ALT="show/hide"->System</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: 48em"-><A HREF="System-PipeOpen.html"->System.PipeOpen</A-></TD-><TD-></TD-><TD-></TD-></TR-></TABLE-></TD-></TR-><TR-><TD STYLE="width: 50em"-><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:8')" ALT="show/hide" >Text</TD ><TD ></TD@@ -369,10 +344,10 @@ ></TR ><TR ><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"-><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:8" STYLE="display:block;"+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:7" STYLE="display:block;" ><TR ><TD STYLE="width: 48em"-><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:9')" ALT="show/hide"+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:8')" ALT="show/hide" >XML</TD ><TD ></TD@@ -381,10 +356,10 @@ ></TR ><TR ><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"-><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:9" STYLE="display:block;"+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:8" STYLE="display:block;" ><TR ><TD STYLE="width: 46em"-><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:10')" ALT="show/hide"+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:9')" ALT="show/hide" >HXT</TD ><TD ></TD@@ -393,10 +368,10 @@ ></TR ><TR ><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"-><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:10" STYLE="display:block;"+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:9" STYLE="display:block;" ><TR ><TD STYLE="width: 44em"-><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:11')" ALT="show/hide"+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:10')" ALT="show/hide" ><A HREF="Text-XML-HXT-Arrow.html" >Text.XML.HXT.Arrow</A ></TD@@ -407,7 +382,7 @@ ></TR ><TR ><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"-><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:11" STYLE="display:block;"+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:10" STYLE="display:block;" ><TR ><TD STYLE="padding-left: 1.25em;width: 42em" ><A HREF="Text-XML-HXT-Arrow-DTDProcessing.html"@@ -480,7 +455,7 @@ ></TR ><TR ><TD STYLE="width: 42em"-><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:12')" ALT="show/hide"+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:11')" ALT="show/hide" ><A HREF="Text-XML-HXT-Arrow-Pickle.html" >Text.XML.HXT.Arrow.Pickle</A ></TD@@ -491,7 +466,7 @@ ></TR ><TR ><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"-><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:12" STYLE="display:block;"+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:11" STYLE="display:block;" ><TR ><TD STYLE="padding-left: 1.25em;width: 40em" ><A HREF="Text-XML-HXT-Arrow-Pickle-DTD.html"@@ -610,7 +585,7 @@ ></TR ><TR ><TD STYLE="width: 44em"-><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:13')" ALT="show/hide"+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:12')" ALT="show/hide" >DOM</TD ><TD ></TD@@ -619,7 +594,7 @@ ></TR ><TR ><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"-><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:13" STYLE="display:block;"+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:12" STYLE="display:block;" ><TR ><TD STYLE="padding-left: 1.25em;width: 42em" ><A HREF="Text-XML-HXT-DOM-FormatXmlTree.html"@@ -652,6 +627,26 @@ ></TR ><TR ><TD STYLE="padding-left: 1.25em;width: 42em"+><A HREF="Text-XML-HXT-DOM-MimeTypeDefaults.html"+>Text.XML.HXT.DOM.MimeTypeDefaults</A+></TD+><TD+></TD+><TD+></TD+></TR+><TR+><TD STYLE="padding-left: 1.25em;width: 42em"+><A HREF="Text-XML-HXT-DOM-MimeTypes.html"+>Text.XML.HXT.DOM.MimeTypes</A+></TD+><TD+></TD+><TD+></TD+></TR+><TR+><TD STYLE="padding-left: 1.25em;width: 42em" ><A HREF="Text-XML-HXT-DOM-NamespacePredicates.html" >Text.XML.HXT.DOM.NamespacePredicates</A ></TD@@ -765,7 +760,7 @@ ></TR ><TR ><TD STYLE="width: 44em"-><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:14')" ALT="show/hide"+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:13')" ALT="show/hide" >DTDValidation</TD ><TD ></TD@@ -774,7 +769,7 @@ ></TR ><TR ><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"-><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:14" STYLE="display:block;"+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:13" STYLE="display:block;" ><TR ><TD STYLE="padding-left: 1.25em;width: 42em" ><A HREF="Text-XML-HXT-DTDValidation-AttributeValueValidation.html"@@ -870,7 +865,7 @@ ></TR ><TR ><TD STYLE="width: 44em"-><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:15')" ALT="show/hide"+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:14')" ALT="show/hide" >IO</TD ><TD ></TD@@ -879,7 +874,7 @@ ></TR ><TR ><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"-><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:15" STYLE="display:block;"+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:14" STYLE="display:block;" ><TR ><TD STYLE="padding-left: 1.25em;width: 42em" ><A HREF="Text-XML-HXT-IO-GetFILE.html"@@ -892,18 +887,8 @@ ></TR ><TR ><TD STYLE="padding-left: 1.25em;width: 42em"-><A HREF="Text-XML-HXT-IO-GetHTTPCurl.html"->Text.XML.HXT.IO.GetHTTPCurl</A-></TD-><TD-></TD-><TD-></TD-></TR-><TR-><TD STYLE="padding-left: 1.25em;width: 42em"-><A HREF="Text-XML-HXT-IO-GetHTTPNative.html"->Text.XML.HXT.IO.GetHTTPNative</A+><A HREF="Text-XML-HXT-IO-GetHTTPLibCurl.html"+>Text.XML.HXT.IO.GetHTTPLibCurl</A ></TD ><TD ></TD@@ -915,7 +900,7 @@ ></TR ><TR ><TD STYLE="width: 44em"-><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:16')" ALT="show/hide"+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:15')" ALT="show/hide" >Parser</TD ><TD ></TD@@ -924,7 +909,7 @@ ></TR ><TR ><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"-><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:16" STYLE="display:block;"+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:15" STYLE="display:block;" ><TR ><TD STYLE="padding-left: 1.25em;width: 42em" ><A HREF="Text-XML-HXT-Parser-HtmlParsec.html"@@ -1030,7 +1015,7 @@ ></TR ><TR ><TD STYLE="width: 44em"-><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:17')" ALT="show/hide"+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:16')" ALT="show/hide" ><A HREF="Text-XML-HXT-RelaxNG.html" >Text.XML.HXT.RelaxNG</A ></TD@@ -1041,7 +1026,7 @@ ></TR ><TR ><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"-><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:17" STYLE="display:block;"+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:16" STYLE="display:block;" ><TR ><TD STYLE="padding-left: 1.25em;width: 42em" ><A HREF="Text-XML-HXT-RelaxNG-BasicArrows.html"@@ -1154,7 +1139,7 @@ ></TR ><TR ><TD STYLE="width: 42em"-><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:18')" ALT="show/hide"+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:17')" ALT="show/hide" >Unicode</TD ><TD ></TD@@ -1163,7 +1148,7 @@ ></TR ><TR ><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"-><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:18" STYLE="display:block;"+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:17" STYLE="display:block;" ><TR ><TD STYLE="padding-left: 1.25em;width: 40em" ><A HREF="Text-XML-HXT-RelaxNG-Unicode-Blocks.html"@@ -1219,7 +1204,7 @@ ></TR ><TR ><TD STYLE="width: 42em"-><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:19')" ALT="show/hide"+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:18')" ALT="show/hide" >XmlSchema</TD ><TD ></TD@@ -1228,7 +1213,7 @@ ></TR ><TR ><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"-><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:19" STYLE="display:block;"+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:18" STYLE="display:block;" ><TR ><TD STYLE="padding-left: 1.25em;width: 40em" ><A HREF="Text-XML-HXT-RelaxNG-XmlSchema-DataTypeLibW3C.html"@@ -1266,8 +1251,18 @@ ></TD ></TR ><TR+><TD STYLE="padding-left: 1.25em;width: 44em"+><A HREF="Text-XML-HXT-Version.html"+>Text.XML.HXT.Version</A+></TD+><TD+></TD+><TD+></TD+></TR+><TR ><TD STYLE="width: 44em"-><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:20')" ALT="show/hide"+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:19')" ALT="show/hide" ><A HREF="Text-XML-HXT-XPath.html" >Text.XML.HXT.XPath</A ></TD@@ -1278,7 +1273,7 @@ ></TR ><TR ><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"-><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:20" STYLE="display:block;"+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:19" STYLE="display:block;" ><TR ><TD STYLE="padding-left: 1.25em;width: 42em" ><A HREF="Text-XML-HXT-XPath-NavTree.html"@@ -1374,7 +1369,7 @@ ></TR ><TR ><TD STYLE="width: 44em"-><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:21')" ALT="show/hide"+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:20')" ALT="show/hide" >XSLT</TD ><TD ></TD@@ -1383,7 +1378,7 @@ ></TR ><TR ><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"-><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:21" STYLE="display:block;"+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:20" STYLE="display:block;" ><TR ><TD STYLE="padding-left: 1.25em;width: 42em" ><A HREF="Text-XML-HXT-XSLT-Application.html"
doc/hdoc/src/Control-Arrow-ArrowTree.html view
@@ -50,252 +50,262 @@ <a name="line-42"></a> <a name="line-43"></a><a name="ArrowTree"></a><span class='keyword'>class</span> <span class='layout'>(</span><span class='conid'>ArrowPlus</span> <span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>ArrowIf</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>ArrowTree</span> <span class='varid'>a</span> <span class='keyword'>where</span> <a name="line-44"></a>-<a name="line-45"></a>    <span class='comment'>-- | select the children of the root of a tree</span>+<a name="line-45"></a>    <span class='comment'>-- | construct a leaf</span> <a name="line-46"></a>-<a name="line-47"></a>    <span class='varid'>getChildren</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-48"></a>    <span class='varid'>getChildren</span>		<span class='keyglyph'>=</span> <span class='varid'>arrL</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>getChildren</span>+<a name="line-47"></a>    <span class='varid'>mkLeaf</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='varid'>c</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-48"></a>    <span class='varid'>mkLeaf</span>		<span class='keyglyph'>=</span> <span class='varid'>constA</span> <span class='varop'>.</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>mkLeaf</span> <a name="line-49"></a>-<a name="line-50"></a>    <span class='comment'>-- | select the attribute of the root of a tree</span>+<a name="line-50"></a>    <span class='comment'>-- | construct an inner node</span> <a name="line-51"></a>-<a name="line-52"></a>    <span class='varid'>getNode</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='varid'>b</span>-<a name="line-53"></a>    <span class='varid'>getNode</span>		<span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>getNode</span>+<a name="line-52"></a>    <span class='varid'>mkTree</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='varid'>t</span> <span class='varid'>b</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='varid'>c</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-53"></a>    <span class='varid'>mkTree</span> <span class='varid'>n</span>		<span class='keyglyph'>=</span> <span class='varid'>constA</span> <span class='varop'>.</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>mkTree</span> <span class='varid'>n</span> <a name="line-54"></a>-<a name="line-55"></a>    <span class='comment'>-- | substitute the children of the root of a tree</span>+<a name="line-55"></a>    <span class='comment'>-- | select the children of the root of a tree</span> <a name="line-56"></a>-<a name="line-57"></a>    <span class='varid'>setChildren</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span>            <span class='keyglyph'>[</span><span class='varid'>t</span> <span class='varid'>b</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-58"></a>    <span class='varid'>setChildren</span> <span class='varid'>cs</span>	<span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='layout'>(</span><span class='conid'>T</span><span class='varop'>.</span><span class='varid'>setChildren</span> <span class='varid'>cs</span><span class='layout'>)</span>+<a name="line-57"></a>    <span class='varid'>getChildren</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-58"></a>    <span class='varid'>getChildren</span>		<span class='keyglyph'>=</span> <span class='varid'>arrL</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>getChildren</span> <a name="line-59"></a>-<a name="line-60"></a>    <span class='comment'>-- | substitute the attribute of the root of a tree</span>+<a name="line-60"></a>    <span class='comment'>-- | select the attribute of the root of a tree</span> <a name="line-61"></a>-<a name="line-62"></a>    <span class='varid'>setNode</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span>                <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-63"></a>    <span class='varid'>setNode</span> <span class='varid'>n</span>		<span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='layout'>(</span><span class='conid'>T</span><span class='varop'>.</span><span class='varid'>setNode</span> <span class='varid'>n</span><span class='layout'>)</span>+<a name="line-62"></a>    <span class='varid'>getNode</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='varid'>b</span>+<a name="line-63"></a>    <span class='varid'>getNode</span>		<span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>getNode</span> <a name="line-64"></a>-<a name="line-65"></a>    <span class='comment'>-- | edit the children of the root of a tree</span>+<a name="line-65"></a>    <span class='comment'>-- | substitute the children of the root of a tree</span> <a name="line-66"></a>-<a name="line-67"></a>    <span class='varid'>changeChildren</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='layout'>(</span><span class='keyglyph'>[</span><span class='varid'>t</span> <span class='varid'>b</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='varid'>t</span> <span class='varid'>b</span><span class='keyglyph'>]</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-68"></a>    <span class='varid'>changeChildren</span> <span class='varid'>csf</span>	<span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='layout'>(</span><span class='conid'>T</span><span class='varop'>.</span><span class='varid'>changeChildren</span> <span class='varid'>csf</span><span class='layout'>)</span>+<a name="line-67"></a>    <span class='varid'>setChildren</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span>            <span class='keyglyph'>[</span><span class='varid'>t</span> <span class='varid'>b</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-68"></a>    <span class='varid'>setChildren</span> <span class='varid'>cs</span>	<span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='layout'>(</span><span class='conid'>T</span><span class='varop'>.</span><span class='varid'>setChildren</span> <span class='varid'>cs</span><span class='layout'>)</span> <a name="line-69"></a>-<a name="line-70"></a>    <span class='comment'>-- | edit the attribute of the root of a tree</span>+<a name="line-70"></a>    <span class='comment'>-- | substitute the attribute of the root of a tree</span> <a name="line-71"></a>-<a name="line-72"></a>    <span class='varid'>changeNode</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span>        <span class='layout'>(</span><span class='varid'>b</span>  <span class='keyglyph'>-&gt;</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-73"></a>    <span class='varid'>changeNode</span> <span class='varid'>nf</span>	<span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='layout'>(</span><span class='conid'>T</span><span class='varop'>.</span><span class='varid'>changeNode</span> <span class='varid'>nf</span><span class='layout'>)</span>+<a name="line-72"></a>    <span class='varid'>setNode</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span>                <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-73"></a>    <span class='varid'>setNode</span> <span class='varid'>n</span>		<span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='layout'>(</span><span class='conid'>T</span><span class='varop'>.</span><span class='varid'>setNode</span> <span class='varid'>n</span><span class='layout'>)</span> <a name="line-74"></a>-<a name="line-75"></a>								<span class='comment'>-- compound arrows</span>+<a name="line-75"></a>    <span class='comment'>-- | edit the children of the root of a tree</span> <a name="line-76"></a>-<a name="line-77"></a>    <span class='comment'>-- | apply an arrow element wise to all children of the root of a tree</span>-<a name="line-78"></a>    <span class='comment'>-- collect these results and substitute the children with this result</span>-<a name="line-79"></a>    <span class='comment'>--</span>-<a name="line-80"></a>    <span class='comment'>-- example: @ processChildren isText @ deletes all subtrees, for which isText does not hold</span>-<a name="line-81"></a>    <span class='comment'>--</span>-<a name="line-82"></a>    <span class='comment'>-- example: @ processChildren (none \`when\` isCmt) @ removes all children, for which isCmt holds</span>-<a name="line-83"></a>-<a name="line-84"></a>    <span class='varid'>processChildren</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-85"></a>    <span class='varid'>processChildren</span> <span class='varid'>f</span>	<span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>getNode</span>-<a name="line-86"></a>			  <span class='varop'>&amp;&amp;&amp;</span>-<a name="line-87"></a>			  <span class='varid'>listA</span> <span class='layout'>(</span><span class='varid'>arrL</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>getChildren</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>f</span><span class='layout'>)</span>	<span class='comment'>-- new children, deterministic filter: single element result</span>-<a name="line-88"></a>			  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-89"></a>			  <span class='varid'>arr2</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>mkTree</span>-<a name="line-90"></a>-<a name="line-91"></a>    <span class='comment'>-- | similar to processChildren, but the new children are computed by processing</span>-<a name="line-92"></a>    <span class='comment'>-- the whole input tree</span>-<a name="line-93"></a>    <span class='comment'>--</span>-<a name="line-94"></a>    <span class='comment'>-- example: @ replaceChildren (deep isText) @ selects all subtrees for which isText holds</span>-<a name="line-95"></a>    <span class='comment'>-- and substitutes the children component of the root node with this list</span>-<a name="line-96"></a>-<a name="line-97"></a>    <span class='varid'>replaceChildren</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-98"></a>    <span class='varid'>replaceChildren</span> <span class='varid'>f</span>	<span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>getNode</span>-<a name="line-99"></a>			  <span class='varop'>&amp;&amp;&amp;</span>-<a name="line-100"></a>			  <span class='varid'>listA</span> <span class='varid'>f</span>				<span class='comment'>-- compute new children</span>-<a name="line-101"></a>			  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-102"></a>			  <span class='varid'>arr2</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>mkTree</span>-<a name="line-103"></a>-<a name="line-104"></a>    <span class='comment'>-- |</span>-<a name="line-105"></a>    <span class='comment'>-- pronounced \"slash\", meaning g inside f</span>-<a name="line-106"></a>    <span class='comment'>--</span>-<a name="line-107"></a>    <span class='comment'>-- defined as @ f \/&gt; g = f &gt;&gt;&gt; getChildren &gt;&gt;&gt; g @</span>-<a name="line-108"></a>    <span class='comment'>--</span>-<a name="line-109"></a>    <span class='comment'>-- example: @ hasName \"html\" \/&gt; hasName \"body\" \/&gt; hasName \"h1\" @</span>-<a name="line-110"></a>    <span class='comment'>--</span>-<a name="line-111"></a>    <span class='comment'>-- This expression selects</span>-<a name="line-112"></a>    <span class='comment'>-- all \"h1\" elements in the \"body\" element of an \"html\" element, an expression, that</span>-<a name="line-113"></a>    <span class='comment'>-- corresponds 1-1 to the XPath selection path \"html\/body\/h1\" </span>-<a name="line-114"></a>-<a name="line-115"></a>    <span class='layout'>(</span><span class='varop'>/&gt;</span><span class='layout'>)</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-116"></a>    <span class='varid'>f</span> <span class='varop'>/&gt;</span> <span class='varid'>g</span>		<span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>getChildren</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>g</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'>-- pronounced \"outside\" meaning f containing g</span>-<a name="line-121"></a>    <span class='comment'>--</span>-<a name="line-122"></a>    <span class='comment'>-- defined as @ f \&lt;\/ g = f \`containing\` (getChildren &gt;&gt;&gt; g) @</span>-<a name="line-123"></a>-<a name="line-124"></a>    <span class='layout'>(</span><span class='varop'>&lt;/</span><span class='layout'>)</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-125"></a>    <span class='varid'>f</span> <span class='varop'>&lt;/</span> <span class='varid'>g</span>		<span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varop'>`containing`</span> <span class='layout'>(</span><span class='varid'>getChildren</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>g</span><span class='layout'>)</span>-<a name="line-126"></a>+<a name="line-77"></a>    <span class='varid'>changeChildren</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='layout'>(</span><span class='keyglyph'>[</span><span class='varid'>t</span> <span class='varid'>b</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='varid'>t</span> <span class='varid'>b</span><span class='keyglyph'>]</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-78"></a>    <span class='varid'>changeChildren</span> <span class='varid'>csf</span>	<span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='layout'>(</span><span class='conid'>T</span><span class='varop'>.</span><span class='varid'>changeChildren</span> <span class='varid'>csf</span><span class='layout'>)</span>+<a name="line-79"></a>+<a name="line-80"></a>    <span class='comment'>-- | edit the attribute of the root of a tree</span>+<a name="line-81"></a>+<a name="line-82"></a>    <span class='varid'>changeNode</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span>        <span class='layout'>(</span><span class='varid'>b</span>  <span class='keyglyph'>-&gt;</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-83"></a>    <span class='varid'>changeNode</span> <span class='varid'>nf</span>	<span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='layout'>(</span><span class='conid'>T</span><span class='varop'>.</span><span class='varid'>changeNode</span> <span class='varid'>nf</span><span class='layout'>)</span>+<a name="line-84"></a>+<a name="line-85"></a>								<span class='comment'>-- compound arrows</span>+<a name="line-86"></a>+<a name="line-87"></a>    <span class='comment'>-- | apply an arrow element wise to all children of the root of a tree</span>+<a name="line-88"></a>    <span class='comment'>-- collect these results and substitute the children with this result</span>+<a name="line-89"></a>    <span class='comment'>--</span>+<a name="line-90"></a>    <span class='comment'>-- example: @ processChildren isText @ deletes all subtrees, for which isText does not hold</span>+<a name="line-91"></a>    <span class='comment'>--</span>+<a name="line-92"></a>    <span class='comment'>-- example: @ processChildren (none \`when\` isCmt) @ removes all children, for which isCmt holds</span>+<a name="line-93"></a>+<a name="line-94"></a>    <span class='varid'>processChildren</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-95"></a>    <span class='varid'>processChildren</span> <span class='varid'>f</span>	<span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>getNode</span>+<a name="line-96"></a>			  <span class='varop'>&amp;&amp;&amp;</span>+<a name="line-97"></a>			  <span class='varid'>listA</span> <span class='layout'>(</span><span class='varid'>arrL</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>getChildren</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>f</span><span class='layout'>)</span>	<span class='comment'>-- new children, deterministic filter: single element result</span>+<a name="line-98"></a>			  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-99"></a>			  <span class='varid'>arr2</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>mkTree</span>+<a name="line-100"></a>+<a name="line-101"></a>    <span class='comment'>-- | similar to processChildren, but the new children are computed by processing</span>+<a name="line-102"></a>    <span class='comment'>-- the whole input tree</span>+<a name="line-103"></a>    <span class='comment'>--</span>+<a name="line-104"></a>    <span class='comment'>-- example: @ replaceChildren (deep isText) @ selects all subtrees for which isText holds</span>+<a name="line-105"></a>    <span class='comment'>-- and substitutes the children component of the root node with this list</span>+<a name="line-106"></a>+<a name="line-107"></a>    <span class='varid'>replaceChildren</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-108"></a>    <span class='varid'>replaceChildren</span> <span class='varid'>f</span>	<span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>getNode</span>+<a name="line-109"></a>			  <span class='varop'>&amp;&amp;&amp;</span>+<a name="line-110"></a>			  <span class='varid'>listA</span> <span class='varid'>f</span>				<span class='comment'>-- compute new children</span>+<a name="line-111"></a>			  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-112"></a>			  <span class='varid'>arr2</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>mkTree</span>+<a name="line-113"></a>+<a name="line-114"></a>    <span class='comment'>-- |</span>+<a name="line-115"></a>    <span class='comment'>-- pronounced \"slash\", meaning g inside f</span>+<a name="line-116"></a>    <span class='comment'>--</span>+<a name="line-117"></a>    <span class='comment'>-- defined as @ f \/&gt; g = f &gt;&gt;&gt; getChildren &gt;&gt;&gt; g @</span>+<a name="line-118"></a>    <span class='comment'>--</span>+<a name="line-119"></a>    <span class='comment'>-- example: @ hasName \"html\" \/&gt; hasName \"body\" \/&gt; hasName \"h1\" @</span>+<a name="line-120"></a>    <span class='comment'>--</span>+<a name="line-121"></a>    <span class='comment'>-- This expression selects</span>+<a name="line-122"></a>    <span class='comment'>-- all \"h1\" elements in the \"body\" element of an \"html\" element, an expression, that</span>+<a name="line-123"></a>    <span class='comment'>-- corresponds 1-1 to the XPath selection path \"html\/body\/h1\" </span>+<a name="line-124"></a>+<a name="line-125"></a>    <span class='layout'>(</span><span class='varop'>/&gt;</span><span class='layout'>)</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-126"></a>    <span class='varid'>f</span> <span class='varop'>/&gt;</span> <span class='varid'>g</span>		<span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>getChildren</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>g</span> <a name="line-127"></a>-<a name="line-128"></a>    <span class='comment'>-- | recursively searches a whole tree for subtrees, for which a predicate holds.</span>-<a name="line-129"></a>    <span class='comment'>-- The search is performed top down. When a tree is found, this becomes an element of the result</span>-<a name="line-130"></a>    <span class='comment'>-- list. The tree found is not further examined for any subtress, for which the predicate also could hold.</span>-<a name="line-131"></a>    <span class='comment'>-- See 'multi' for this kind of search.</span>-<a name="line-132"></a>    <span class='comment'>--</span>-<a name="line-133"></a>    <span class='comment'>-- example: @ deep isHtmlTable @ selects all top level table elements in a document</span>-<a name="line-134"></a>    <span class='comment'>-- (with an appropriate definition for isHtmlTable) but no tables occuring within a table cell.</span>-<a name="line-135"></a>-<a name="line-136"></a>    <span class='varid'>deep</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-137"></a>    <span class='varid'>deep</span> <span class='varid'>f</span>		<span class='keyglyph'>=</span> <span class='varid'>f</span>					<span class='comment'>-- success when applying f</span>-<a name="line-138"></a>			  <span class='varop'>`orElse`</span>-<a name="line-139"></a>			  <span class='layout'>(</span><span class='varid'>getChildren</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>deep</span> <span class='varid'>f</span><span class='layout'>)</span>		<span class='comment'>-- seach children</span>-<a name="line-140"></a>-<a name="line-141"></a>-<a name="line-142"></a>    <span class='comment'>-- | recursively searches a whole tree for subrees, for which a predicate holds.</span>-<a name="line-143"></a>    <span class='comment'>-- The search is performed bottom up.</span>-<a name="line-144"></a>    <span class='comment'>--</span>-<a name="line-145"></a>    <span class='comment'>-- example: @ deepest isHtmlTable @ selects all innermost table elements in a document</span>-<a name="line-146"></a>    <span class='comment'>-- but no table elements containing tables. See 'deep' and 'multi' for other search strategies.</span>-<a name="line-147"></a>-<a name="line-148"></a>    <span class='varid'>deepest</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-149"></a>    <span class='varid'>deepest</span> <span class='varid'>f</span>		<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>getChildren</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>deepest</span> <span class='varid'>f</span><span class='layout'>)</span>		<span class='comment'>-- seach children</span>-<a name="line-150"></a>			  <span class='varop'>`orElse`</span>-<a name="line-151"></a>			  <span class='varid'>f</span>					<span class='comment'>-- no success: apply f to root</span>-<a name="line-152"></a>-<a name="line-153"></a>-<a name="line-154"></a>    <span class='comment'>-- | recursively searches a whole tree for subtrees, for which a predicate holds.</span>-<a name="line-155"></a>    <span class='comment'>-- The search is performed top down. All nodes of the tree are searched, even within the</span>-<a name="line-156"></a>    <span class='comment'>-- subtrees of trees for which the predicate holds.</span>-<a name="line-157"></a>    <span class='comment'>--</span>-<a name="line-158"></a>    <span class='comment'>-- example: @ multy isHtmlTable @ selects all table elements, even nested ones.</span>-<a name="line-159"></a>-<a name="line-160"></a>    <span class='varid'>multi</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='varid'>c</span>-<a name="line-161"></a>    <span class='varid'>multi</span> <span class='varid'>f</span>		<span class='keyglyph'>=</span> <span class='varid'>f</span>					<span class='comment'>-- combine result for root</span>-<a name="line-162"></a>			  <span class='varop'>&lt;+&gt;</span>-<a name="line-163"></a>			  <span class='layout'>(</span><span class='varid'>getChildren</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>multi</span> <span class='varid'>f</span><span class='layout'>)</span>		<span class='comment'>-- with result for all descendants</span>-<a name="line-164"></a>-<a name="line-165"></a>    <span class='comment'>-- | recursively transforms a whole tree by applying an arrow to all subtrees,</span>-<a name="line-166"></a>    <span class='comment'>-- this is done bottom up depth first, leaves first, root as last tree</span>+<a name="line-128"></a>+<a name="line-129"></a>    <span class='comment'>-- |</span>+<a name="line-130"></a>    <span class='comment'>-- pronounced \"outside\" meaning f containing g</span>+<a name="line-131"></a>    <span class='comment'>--</span>+<a name="line-132"></a>    <span class='comment'>-- defined as @ f \&lt;\/ g = f \`containing\` (getChildren &gt;&gt;&gt; g) @</span>+<a name="line-133"></a>+<a name="line-134"></a>    <span class='layout'>(</span><span class='varop'>&lt;/</span><span class='layout'>)</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-135"></a>    <span class='varid'>f</span> <span class='varop'>&lt;/</span> <span class='varid'>g</span>		<span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varop'>`containing`</span> <span class='layout'>(</span><span class='varid'>getChildren</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>g</span><span class='layout'>)</span>+<a name="line-136"></a>+<a name="line-137"></a>+<a name="line-138"></a>    <span class='comment'>-- | recursively searches a whole tree for subtrees, for which a predicate holds.</span>+<a name="line-139"></a>    <span class='comment'>-- The search is performed top down. When a tree is found, this becomes an element of the result</span>+<a name="line-140"></a>    <span class='comment'>-- list. The tree found is not further examined for any subtress, for which the predicate also could hold.</span>+<a name="line-141"></a>    <span class='comment'>-- See 'multi' for this kind of search.</span>+<a name="line-142"></a>    <span class='comment'>--</span>+<a name="line-143"></a>    <span class='comment'>-- example: @ deep isHtmlTable @ selects all top level table elements in a document</span>+<a name="line-144"></a>    <span class='comment'>-- (with an appropriate definition for isHtmlTable) but no tables occuring within a table cell.</span>+<a name="line-145"></a>+<a name="line-146"></a>    <span class='varid'>deep</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-147"></a>    <span class='varid'>deep</span> <span class='varid'>f</span>		<span class='keyglyph'>=</span> <span class='varid'>f</span>					<span class='comment'>-- success when applying f</span>+<a name="line-148"></a>			  <span class='varop'>`orElse`</span>+<a name="line-149"></a>			  <span class='layout'>(</span><span class='varid'>getChildren</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>deep</span> <span class='varid'>f</span><span class='layout'>)</span>		<span class='comment'>-- seach children</span>+<a name="line-150"></a>+<a name="line-151"></a>+<a name="line-152"></a>    <span class='comment'>-- | recursively searches a whole tree for subrees, for which a predicate holds.</span>+<a name="line-153"></a>    <span class='comment'>-- The search is performed bottom up.</span>+<a name="line-154"></a>    <span class='comment'>--</span>+<a name="line-155"></a>    <span class='comment'>-- example: @ deepest isHtmlTable @ selects all innermost table elements in a document</span>+<a name="line-156"></a>    <span class='comment'>-- but no table elements containing tables. See 'deep' and 'multi' for other search strategies.</span>+<a name="line-157"></a>+<a name="line-158"></a>    <span class='varid'>deepest</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-159"></a>    <span class='varid'>deepest</span> <span class='varid'>f</span>		<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>getChildren</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>deepest</span> <span class='varid'>f</span><span class='layout'>)</span>		<span class='comment'>-- seach children</span>+<a name="line-160"></a>			  <span class='varop'>`orElse`</span>+<a name="line-161"></a>			  <span class='varid'>f</span>					<span class='comment'>-- no success: apply f to root</span>+<a name="line-162"></a>+<a name="line-163"></a>+<a name="line-164"></a>    <span class='comment'>-- | recursively searches a whole tree for subtrees, for which a predicate holds.</span>+<a name="line-165"></a>    <span class='comment'>-- The search is performed top down. All nodes of the tree are searched, even within the</span>+<a name="line-166"></a>    <span class='comment'>-- subtrees of trees for which the predicate holds.</span> <a name="line-167"></a>    <span class='comment'>--</span>-<a name="line-168"></a>    <span class='comment'>-- example: @ processBottomUp (getChildren \`when\` isHtmlFont) @ removes all font tags in a HTML document, even nested ones</span>-<a name="line-169"></a>    <span class='comment'>-- (with an appropriate definition of isHtmlFont)</span>-<a name="line-170"></a>-<a name="line-171"></a>    <span class='varid'>processBottomUp</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-172"></a>    <span class='varid'>processBottomUp</span> <span class='varid'>f</span>	<span class='keyglyph'>=</span> <span class='varid'>processChildren</span> <span class='layout'>(</span><span class='varid'>processBottomUp</span> <span class='varid'>f</span><span class='layout'>)</span>	<span class='comment'>-- process all descendants first</span>-<a name="line-173"></a>			  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-174"></a>			  <span class='varid'>f</span>					<span class='comment'>-- then process root</span>-<a name="line-175"></a>-<a name="line-176"></a>    <span class='comment'>-- | similar to 'processBottomUp', but recursively transforms a whole tree by applying an arrow to all subtrees</span>-<a name="line-177"></a>    <span class='comment'>-- with a top down depth first traversal strategie. In many cases 'processBottomUp' and 'processTopDown'</span>-<a name="line-178"></a>    <span class='comment'>-- give same results.</span>-<a name="line-179"></a>-<a name="line-180"></a>    <span class='varid'>processTopDown</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-181"></a>    <span class='varid'>processTopDown</span> <span class='varid'>f</span>	<span class='keyglyph'>=</span> <span class='varid'>f</span>					<span class='comment'>-- first process root</span>-<a name="line-182"></a>			  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-183"></a>			  <span class='varid'>processChildren</span> <span class='layout'>(</span><span class='varid'>processTopDown</span> <span class='varid'>f</span><span class='layout'>)</span>	<span class='comment'>-- then process all descendants of new root</span>-<a name="line-184"></a>+<a name="line-168"></a>    <span class='comment'>-- example: @ multy isHtmlTable @ selects all table elements, even nested ones.</span>+<a name="line-169"></a>+<a name="line-170"></a>    <span class='varid'>multi</span>		<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='varid'>c</span>+<a name="line-171"></a>    <span class='varid'>multi</span> <span class='varid'>f</span>		<span class='keyglyph'>=</span> <span class='varid'>f</span>					<span class='comment'>-- combine result for root</span>+<a name="line-172"></a>			  <span class='varop'>&lt;+&gt;</span>+<a name="line-173"></a>			  <span class='layout'>(</span><span class='varid'>getChildren</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>multi</span> <span class='varid'>f</span><span class='layout'>)</span>		<span class='comment'>-- with result for all descendants</span>+<a name="line-174"></a>+<a name="line-175"></a>    <span class='comment'>-- | recursively transforms a whole tree by applying an arrow to all subtrees,</span>+<a name="line-176"></a>    <span class='comment'>-- this is done bottom up depth first, leaves first, root as last tree</span>+<a name="line-177"></a>    <span class='comment'>--</span>+<a name="line-178"></a>    <span class='comment'>-- example: @ processBottomUp (getChildren \`when\` isHtmlFont) @ removes all font tags in a HTML document, even nested ones</span>+<a name="line-179"></a>    <span class='comment'>-- (with an appropriate definition of isHtmlFont)</span>+<a name="line-180"></a>+<a name="line-181"></a>    <span class='varid'>processBottomUp</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-182"></a>    <span class='varid'>processBottomUp</span> <span class='varid'>f</span>	<span class='keyglyph'>=</span> <span class='varid'>processChildren</span> <span class='layout'>(</span><span class='varid'>processBottomUp</span> <span class='varid'>f</span><span class='layout'>)</span>	<span class='comment'>-- process all descendants first</span>+<a name="line-183"></a>			  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-184"></a>			  <span class='varid'>f</span>					<span class='comment'>-- then process root</span> <a name="line-185"></a>-<a name="line-186"></a>    <span class='comment'>-- | recursively transforms a whole tree by applying an arrow to all subtrees,</span>-<a name="line-187"></a>    <span class='comment'>-- but transformation stops when a predicte does not hold for a subtree,</span>-<a name="line-188"></a>    <span class='comment'>-- leaves are transformed first</span>+<a name="line-186"></a>    <span class='comment'>-- | similar to 'processBottomUp', but recursively transforms a whole tree by applying an arrow to all subtrees</span>+<a name="line-187"></a>    <span class='comment'>-- with a top down depth first traversal strategie. In many cases 'processBottomUp' and 'processTopDown'</span>+<a name="line-188"></a>    <span class='comment'>-- give same results.</span> <a name="line-189"></a>-<a name="line-190"></a>    <span class='varid'>processBottomUpWhenNot</span>-<a name="line-191"></a>			<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-192"></a>    <span class='varid'>processBottomUpWhenNot</span> <span class='varid'>f</span> <span class='varid'>p</span>-<a name="line-193"></a>			<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>processChildren</span> <span class='layout'>(</span><span class='varid'>processBottomUpWhenNot</span> <span class='varid'>f</span> <span class='varid'>p</span><span class='layout'>)</span>-<a name="line-194"></a>			    <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-195"></a>			    <span class='varid'>f</span>-<a name="line-196"></a>			  <span class='layout'>)</span> <span class='varop'>`whenNot`</span> <span class='varid'>p</span>-<a name="line-197"></a>-<a name="line-198"></a>    <span class='comment'>-- | recursively transforms a whole tree by applying an arrow to all subtrees,</span>-<a name="line-199"></a>    <span class='comment'>-- but transformation stops when a tree is successfully transformed.</span>-<a name="line-200"></a>    <span class='comment'>-- the transformation is done top down</span>-<a name="line-201"></a>    <span class='comment'>--</span>-<a name="line-202"></a>    <span class='comment'>-- example: @ processTopDownUntil (isHtmlTable \`guards\` tranformTable) @</span>-<a name="line-203"></a>    <span class='comment'>-- transforms all top level table elements into something else, but inner tables remain unchanged</span>-<a name="line-204"></a>-<a name="line-205"></a>    <span class='varid'>processTopDownUntil</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-206"></a>    <span class='varid'>processTopDownUntil</span> <span class='varid'>f</span>-<a name="line-207"></a>			<span class='keyglyph'>=</span> <span class='varid'>f</span>-<a name="line-208"></a>			  <span class='varop'>`orElse`</span>-<a name="line-209"></a>			  <span class='varid'>processChildren</span> <span class='layout'>(</span><span class='varid'>processTopDownUntil</span> <span class='varid'>f</span><span class='layout'>)</span>-<a name="line-210"></a>-<a name="line-211"></a>    <span class='comment'>-- | computes a list of trees by applying an arrow to the input</span>-<a name="line-212"></a>    <span class='comment'>-- and inserts this list in front of index i in the list of children</span>-<a name="line-213"></a>    <span class='comment'>--</span>-<a name="line-214"></a>    <span class='comment'>-- example: @ insertChildrenAt 0 (deep isCmt) @ selects all subtrees for which isCmt holds</span>-<a name="line-215"></a>    <span class='comment'>-- and copies theses in front of the existing children</span>-<a name="line-216"></a>-<a name="line-217"></a>    <span class='varid'>insertChildrenAt</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span>           <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-218"></a>    <span class='varid'>insertChildrenAt</span> <span class='varid'>i</span> <span class='varid'>f</span>-<a name="line-219"></a>			<span class='keyglyph'>=</span> <span class='varid'>listA</span> <span class='varid'>f</span> <span class='varop'>&amp;&amp;&amp;</span> <span class='varid'>this</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>arr2</span> <span class='varid'>insertAt</span>-<a name="line-220"></a>			  <span class='keyword'>where</span>-<a name="line-221"></a>			  <span class='varid'>insertAt</span> <span class='varid'>newcs</span>-<a name="line-222"></a>			      <span class='keyglyph'>=</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>changeChildren</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>cs</span> <span class='keyglyph'>-&gt;</span> <span class='keyword'>let</span>-<a name="line-223"></a>						          <span class='layout'>(</span><span class='varid'>cs1</span><span class='layout'>,</span> <span class='varid'>cs2</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>splitAt</span> <span class='varid'>i</span> <span class='varid'>cs</span>-<a name="line-224"></a>						          <span class='keyword'>in</span>-<a name="line-225"></a>						          <span class='varid'>cs1</span> <span class='varop'>++</span> <span class='varid'>newcs</span> <span class='varop'>++</span> <span class='varid'>cs2</span>-<a name="line-226"></a>						 <span class='layout'>)</span>-<a name="line-227"></a>-<a name="line-228"></a>    <span class='comment'>-- | similar to 'insertChildrenAt', but the insertion position is searched with a predicate</span>-<a name="line-229"></a>-<a name="line-230"></a>    <span class='varid'>insertChildrenAfter</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-231"></a>    <span class='varid'>insertChildrenAfter</span> <span class='varid'>p</span> <span class='varid'>f</span>-<a name="line-232"></a>			<span class='keyglyph'>=</span> <span class='varid'>replaceChildren</span>-<a name="line-233"></a>			  <span class='layout'>(</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>listA</span> <span class='varid'>getChildren</span>-<a name="line-234"></a>				<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-235"></a>				<span class='varid'>spanA</span> <span class='varid'>p</span>-<a name="line-236"></a>			      <span class='layout'>)</span>-<a name="line-237"></a>			      <span class='varop'>&amp;&amp;&amp;</span>-<a name="line-238"></a>			      <span class='varid'>listA</span> <span class='varid'>f</span>-<a name="line-239"></a>			    <span class='layout'>)</span>-<a name="line-240"></a>			    <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>arr2L</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>xs1</span><span class='layout'>,</span> <span class='varid'>xs2</span><span class='layout'>)</span> <span class='varid'>xs</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>xs1</span> <span class='varop'>++</span> <span class='varid'>xs</span> <span class='varop'>++</span> <span class='varid'>xs2</span><span class='layout'>)</span>-<a name="line-241"></a>			  <span class='layout'>)</span>-<a name="line-242"></a>			  -<a name="line-243"></a>    <span class='comment'>-- | an arrow for inserting a whole subtree with some holes in it (a template)</span>-<a name="line-244"></a>    <span class='comment'>-- into a document. The holes can be filled with contents from the input.</span>-<a name="line-245"></a>    <span class='comment'>--</span>-<a name="line-246"></a>    <span class='comment'>-- Example</span>-<a name="line-247"></a>    <span class='comment'>--</span>-<a name="line-248"></a>    <span class='comment'>-- &gt; insertTreeTemplateTest	:: ArrowXml a =&gt; a b XmlTree</span>-<a name="line-249"></a>    <span class='comment'>-- &gt; insertTreeTemplateTest</span>-<a name="line-250"></a>    <span class='comment'>-- &gt;     = doc</span>-<a name="line-251"></a>    <span class='comment'>-- &gt;       &gt;&gt;&gt;</span>-<a name="line-252"></a>    <span class='comment'>-- &gt;       insertTemplate template pattern</span>-<a name="line-253"></a>    <span class='comment'>-- &gt;     where</span>-<a name="line-254"></a>    <span class='comment'>-- &gt;     doc								-- the input data</span>-<a name="line-255"></a>    <span class='comment'>-- &gt; 	= constA "&lt;x&gt;&lt;y&gt;The Title&lt;/y&gt;&lt;z&gt;The content&lt;/z&gt;&lt;/x&gt;"</span>-<a name="line-256"></a>    <span class='comment'>-- &gt; 	  &gt;&gt;&gt; xread</span>-<a name="line-257"></a>    <span class='comment'>-- &gt;     template								-- the output template with 2 holes: xxx and yyy</span>-<a name="line-258"></a>    <span class='comment'>-- &gt; 	= constA "&lt;html&gt;&lt;head&gt;&lt;title&gt;xxx&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;yyy&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;"</span>-<a name="line-259"></a>    <span class='comment'>-- &gt; 	  &gt;&gt;&gt; xread</span>-<a name="line-260"></a>    <span class='comment'>-- &gt;     pattern</span>-<a name="line-261"></a>    <span class='comment'>-- &gt; 	= [ hasText (== "xxx")						-- fill the xxx hole with the input contents from element "x/y"</span>-<a name="line-262"></a>    <span class='comment'>-- &gt; 	    :-&gt; ( getChildren &gt;&gt;&gt; hasName "y" &gt;&gt;&gt; deep isText )</span>-<a name="line-263"></a>    <span class='comment'>-- &gt; </span>-<a name="line-264"></a>    <span class='comment'>-- &gt; 	  , hasText (== "yyy")						-- fill the yyy hole with the input contents from element "x/z"</span>-<a name="line-265"></a>    <span class='comment'>-- &gt; 	    :-&gt; ( getChildren &gt;&gt;&gt; hasName "z" &gt;&gt;&gt; getChildren )</span>-<a name="line-266"></a>    <span class='comment'>-- &gt; 	  ]</span>-<a name="line-267"></a>    <span class='comment'>--</span>-<a name="line-268"></a>    <span class='comment'>-- computes the XML tree for the following document</span>-<a name="line-269"></a>    <span class='comment'>--</span>-<a name="line-270"></a>    <span class='comment'>-- &gt; "&lt;html&gt;&lt;head&gt;&lt;title&gt;The Title&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;The content&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;"</span>-<a name="line-271"></a>-<a name="line-272"></a>    <span class='varid'>insertTreeTemplate</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span>-<a name="line-273"></a>			   <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>					<span class='comment'>-- the the template</span>-<a name="line-274"></a>			   <span class='keyglyph'>[</span><span class='conid'>IfThen</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='varid'>c</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span><span class='layout'>)</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span>		<span class='comment'>-- the list of nodes in the template to be substituted</span>-<a name="line-275"></a>			   <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-276"></a>    <span class='varid'>insertTreeTemplate</span> <span class='varid'>template</span> <span class='varid'>choices</span>-<a name="line-277"></a>	<span class='keyglyph'>=</span> <span class='varid'>insertTree</span> <span class='varop'>$&lt;</span> <span class='varid'>this</span>-<a name="line-278"></a>	  <span class='keyword'>where</span>-<a name="line-279"></a>	  <span class='varid'>insertTree</span> <span class='varid'>t</span>-<a name="line-280"></a>	      <span class='keyglyph'>=</span> <span class='varid'>template</span>					<span class='comment'>-- swap input and template</span>-<a name="line-281"></a>		<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-282"></a>		<span class='varid'>processTemplate</span>-<a name="line-283"></a>	      <span class='keyword'>where</span>-<a name="line-284"></a>	      <span class='varid'>processTemplate</span>-<a name="line-285"></a>		  <span class='keyglyph'>=</span> <span class='varid'>choiceA</span> <span class='varid'>choices'</span>				<span class='comment'>-- check whether node is a "hole" within the template</span>-<a name="line-286"></a>		    <span class='varop'>`orElse`</span>-<a name="line-287"></a>		    <span class='varid'>processChildren</span> <span class='varid'>processTemplate</span>		<span class='comment'>-- else descent into template tree</span>-<a name="line-288"></a>	      <span class='varid'>choices'</span>-<a name="line-289"></a>		  <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='varid'>feedTree</span> <span class='varid'>choices</span>			<span class='comment'>-- modify choices, such that the input is feed into the action arrows</span>-<a name="line-290"></a>	      <span class='varid'>feedTree</span> <span class='layout'>(</span><span class='varid'>cond</span> <span class='conop'>:-&gt;</span> <span class='varid'>action</span><span class='layout'>)</span>-<a name="line-291"></a>		  <span class='keyglyph'>=</span> <span class='varid'>cond</span> <span class='conop'>:-&gt;</span> <span class='layout'>(</span><span class='varid'>constA</span> <span class='varid'>t</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>action</span><span class='layout'>)</span>		<span class='comment'>-- the real input becomes the input at the holes</span>+<a name="line-190"></a>    <span class='varid'>processTopDown</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-191"></a>    <span class='varid'>processTopDown</span> <span class='varid'>f</span>	<span class='keyglyph'>=</span> <span class='varid'>f</span>					<span class='comment'>-- first process root</span>+<a name="line-192"></a>			  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-193"></a>			  <span class='varid'>processChildren</span> <span class='layout'>(</span><span class='varid'>processTopDown</span> <span class='varid'>f</span><span class='layout'>)</span>	<span class='comment'>-- then process all descendants of new root</span>+<a name="line-194"></a>+<a name="line-195"></a>+<a name="line-196"></a>    <span class='comment'>-- | recursively transforms a whole tree by applying an arrow to all subtrees,</span>+<a name="line-197"></a>    <span class='comment'>-- but transformation stops when a predicte does not hold for a subtree,</span>+<a name="line-198"></a>    <span class='comment'>-- leaves are transformed first</span>+<a name="line-199"></a>+<a name="line-200"></a>    <span class='varid'>processBottomUpWhenNot</span>+<a name="line-201"></a>			<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-202"></a>    <span class='varid'>processBottomUpWhenNot</span> <span class='varid'>f</span> <span class='varid'>p</span>+<a name="line-203"></a>			<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>processChildren</span> <span class='layout'>(</span><span class='varid'>processBottomUpWhenNot</span> <span class='varid'>f</span> <span class='varid'>p</span><span class='layout'>)</span>+<a name="line-204"></a>			    <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-205"></a>			    <span class='varid'>f</span>+<a name="line-206"></a>			  <span class='layout'>)</span> <span class='varop'>`whenNot`</span> <span class='varid'>p</span>+<a name="line-207"></a>+<a name="line-208"></a>    <span class='comment'>-- | recursively transforms a whole tree by applying an arrow to all subtrees,</span>+<a name="line-209"></a>    <span class='comment'>-- but transformation stops when a tree is successfully transformed.</span>+<a name="line-210"></a>    <span class='comment'>-- the transformation is done top down</span>+<a name="line-211"></a>    <span class='comment'>--</span>+<a name="line-212"></a>    <span class='comment'>-- example: @ processTopDownUntil (isHtmlTable \`guards\` tranformTable) @</span>+<a name="line-213"></a>    <span class='comment'>-- transforms all top level table elements into something else, but inner tables remain unchanged</span>+<a name="line-214"></a>+<a name="line-215"></a>    <span class='varid'>processTopDownUntil</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-216"></a>    <span class='varid'>processTopDownUntil</span> <span class='varid'>f</span>+<a name="line-217"></a>			<span class='keyglyph'>=</span> <span class='varid'>f</span>+<a name="line-218"></a>			  <span class='varop'>`orElse`</span>+<a name="line-219"></a>			  <span class='varid'>processChildren</span> <span class='layout'>(</span><span class='varid'>processTopDownUntil</span> <span class='varid'>f</span><span class='layout'>)</span>+<a name="line-220"></a>+<a name="line-221"></a>    <span class='comment'>-- | computes a list of trees by applying an arrow to the input</span>+<a name="line-222"></a>    <span class='comment'>-- and inserts this list in front of index i in the list of children</span>+<a name="line-223"></a>    <span class='comment'>--</span>+<a name="line-224"></a>    <span class='comment'>-- example: @ insertChildrenAt 0 (deep isCmt) @ selects all subtrees for which isCmt holds</span>+<a name="line-225"></a>    <span class='comment'>-- and copies theses in front of the existing children</span>+<a name="line-226"></a>+<a name="line-227"></a>    <span class='varid'>insertChildrenAt</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span>           <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-228"></a>    <span class='varid'>insertChildrenAt</span> <span class='varid'>i</span> <span class='varid'>f</span>+<a name="line-229"></a>			<span class='keyglyph'>=</span> <span class='varid'>listA</span> <span class='varid'>f</span> <span class='varop'>&amp;&amp;&amp;</span> <span class='varid'>this</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>arr2</span> <span class='varid'>insertAt</span>+<a name="line-230"></a>			  <span class='keyword'>where</span>+<a name="line-231"></a>			  <span class='varid'>insertAt</span> <span class='varid'>newcs</span>+<a name="line-232"></a>			      <span class='keyglyph'>=</span> <span class='conid'>T</span><span class='varop'>.</span><span class='varid'>changeChildren</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>cs</span> <span class='keyglyph'>-&gt;</span> <span class='keyword'>let</span>+<a name="line-233"></a>						          <span class='layout'>(</span><span class='varid'>cs1</span><span class='layout'>,</span> <span class='varid'>cs2</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>splitAt</span> <span class='varid'>i</span> <span class='varid'>cs</span>+<a name="line-234"></a>						          <span class='keyword'>in</span>+<a name="line-235"></a>						          <span class='varid'>cs1</span> <span class='varop'>++</span> <span class='varid'>newcs</span> <span class='varop'>++</span> <span class='varid'>cs2</span>+<a name="line-236"></a>						 <span class='layout'>)</span>+<a name="line-237"></a>+<a name="line-238"></a>    <span class='comment'>-- | similar to 'insertChildrenAt', but the insertion position is searched with a predicate</span>+<a name="line-239"></a>+<a name="line-240"></a>    <span class='varid'>insertChildrenAfter</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-241"></a>    <span class='varid'>insertChildrenAfter</span> <span class='varid'>p</span> <span class='varid'>f</span>+<a name="line-242"></a>			<span class='keyglyph'>=</span> <span class='varid'>replaceChildren</span>+<a name="line-243"></a>			  <span class='layout'>(</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>listA</span> <span class='varid'>getChildren</span>+<a name="line-244"></a>				<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-245"></a>				<span class='varid'>spanA</span> <span class='varid'>p</span>+<a name="line-246"></a>			      <span class='layout'>)</span>+<a name="line-247"></a>			      <span class='varop'>&amp;&amp;&amp;</span>+<a name="line-248"></a>			      <span class='varid'>listA</span> <span class='varid'>f</span>+<a name="line-249"></a>			    <span class='layout'>)</span>+<a name="line-250"></a>			    <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>arr2L</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>xs1</span><span class='layout'>,</span> <span class='varid'>xs2</span><span class='layout'>)</span> <span class='varid'>xs</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>xs1</span> <span class='varop'>++</span> <span class='varid'>xs</span> <span class='varop'>++</span> <span class='varid'>xs2</span><span class='layout'>)</span>+<a name="line-251"></a>			  <span class='layout'>)</span>+<a name="line-252"></a>			  +<a name="line-253"></a>    <span class='comment'>-- | an arrow for inserting a whole subtree with some holes in it (a template)</span>+<a name="line-254"></a>    <span class='comment'>-- into a document. The holes can be filled with contents from the input.</span>+<a name="line-255"></a>    <span class='comment'>--</span>+<a name="line-256"></a>    <span class='comment'>-- Example</span>+<a name="line-257"></a>    <span class='comment'>--</span>+<a name="line-258"></a>    <span class='comment'>-- &gt; insertTreeTemplateTest	:: ArrowXml a =&gt; a b XmlTree</span>+<a name="line-259"></a>    <span class='comment'>-- &gt; insertTreeTemplateTest</span>+<a name="line-260"></a>    <span class='comment'>-- &gt;     = doc</span>+<a name="line-261"></a>    <span class='comment'>-- &gt;       &gt;&gt;&gt;</span>+<a name="line-262"></a>    <span class='comment'>-- &gt;       insertTemplate template pattern</span>+<a name="line-263"></a>    <span class='comment'>-- &gt;     where</span>+<a name="line-264"></a>    <span class='comment'>-- &gt;     doc								-- the input data</span>+<a name="line-265"></a>    <span class='comment'>-- &gt; 	= constA "&lt;x&gt;&lt;y&gt;The Title&lt;/y&gt;&lt;z&gt;The content&lt;/z&gt;&lt;/x&gt;"</span>+<a name="line-266"></a>    <span class='comment'>-- &gt; 	  &gt;&gt;&gt; xread</span>+<a name="line-267"></a>    <span class='comment'>-- &gt;     template								-- the output template with 2 holes: xxx and yyy</span>+<a name="line-268"></a>    <span class='comment'>-- &gt; 	= constA "&lt;html&gt;&lt;head&gt;&lt;title&gt;xxx&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;yyy&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;"</span>+<a name="line-269"></a>    <span class='comment'>-- &gt; 	  &gt;&gt;&gt; xread</span>+<a name="line-270"></a>    <span class='comment'>-- &gt;     pattern</span>+<a name="line-271"></a>    <span class='comment'>-- &gt; 	= [ hasText (== "xxx")						-- fill the xxx hole with the input contents from element "x/y"</span>+<a name="line-272"></a>    <span class='comment'>-- &gt; 	    :-&gt; ( getChildren &gt;&gt;&gt; hasName "y" &gt;&gt;&gt; deep isText )</span>+<a name="line-273"></a>    <span class='comment'>-- &gt; </span>+<a name="line-274"></a>    <span class='comment'>-- &gt; 	  , hasText (== "yyy")						-- fill the yyy hole with the input contents from element "x/z"</span>+<a name="line-275"></a>    <span class='comment'>-- &gt; 	    :-&gt; ( getChildren &gt;&gt;&gt; hasName "z" &gt;&gt;&gt; getChildren )</span>+<a name="line-276"></a>    <span class='comment'>-- &gt; 	  ]</span>+<a name="line-277"></a>    <span class='comment'>--</span>+<a name="line-278"></a>    <span class='comment'>-- computes the XML tree for the following document</span>+<a name="line-279"></a>    <span class='comment'>--</span>+<a name="line-280"></a>    <span class='comment'>-- &gt; "&lt;html&gt;&lt;head&gt;&lt;title&gt;The Title&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;The content&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;"</span>+<a name="line-281"></a>+<a name="line-282"></a>    <span class='varid'>insertTreeTemplate</span>	<span class='keyglyph'>::</span> <span class='conid'>Tree</span> <span class='varid'>t</span> <span class='keyglyph'>=&gt;</span>+<a name="line-283"></a>			   <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>					<span class='comment'>-- the the template</span>+<a name="line-284"></a>			   <span class='keyglyph'>[</span><span class='conid'>IfThen</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='varid'>c</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span><span class='layout'>)</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span>		<span class='comment'>-- the list of nodes in the template to be substituted</span>+<a name="line-285"></a>			   <span class='varid'>a</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>t</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-286"></a>    <span class='varid'>insertTreeTemplate</span> <span class='varid'>template</span> <span class='varid'>choices</span>+<a name="line-287"></a>	<span class='keyglyph'>=</span> <span class='varid'>insertTree</span> <span class='varop'>$&lt;</span> <span class='varid'>this</span>+<a name="line-288"></a>	  <span class='keyword'>where</span>+<a name="line-289"></a>	  <span class='varid'>insertTree</span> <span class='varid'>t</span>+<a name="line-290"></a>	      <span class='keyglyph'>=</span> <span class='varid'>template</span>					<span class='comment'>-- swap input and template</span>+<a name="line-291"></a>		<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-292"></a>		<span class='varid'>processTemplate</span>+<a name="line-293"></a>	      <span class='keyword'>where</span>+<a name="line-294"></a>	      <span class='varid'>processTemplate</span>+<a name="line-295"></a>		  <span class='keyglyph'>=</span> <span class='varid'>choiceA</span> <span class='varid'>choices'</span>				<span class='comment'>-- check whether node is a "hole" within the template</span>+<a name="line-296"></a>		    <span class='varop'>`orElse`</span>+<a name="line-297"></a>		    <span class='varid'>processChildren</span> <span class='varid'>processTemplate</span>		<span class='comment'>-- else descent into template tree</span>+<a name="line-298"></a>	      <span class='varid'>choices'</span>+<a name="line-299"></a>		  <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='varid'>feedTree</span> <span class='varid'>choices</span>			<span class='comment'>-- modify choices, such that the input is feed into the action arrows</span>+<a name="line-300"></a>	      <span class='varid'>feedTree</span> <span class='layout'>(</span><span class='varid'>cond</span> <span class='conop'>:-&gt;</span> <span class='varid'>action</span><span class='layout'>)</span>+<a name="line-301"></a>		  <span class='keyglyph'>=</span> <span class='varid'>cond</span> <span class='conop'>:-&gt;</span> <span class='layout'>(</span><span class='varid'>constA</span> <span class='varid'>t</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>action</span><span class='layout'>)</span>		<span class='comment'>-- the real input becomes the input at the holes</span> </pre></body> </html>
− doc/hdoc/src/Control-Monad-MonadStateIO.html
@@ -1,104 +0,0 @@-<!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'>-- Version : $Id: MonadStateIO.hs,v 1.1 2004/09/02 19:11:55 hxml Exp $</span>-<a name="line-5"></a>-<a name="line-6"></a>-<a name="line-7"></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-8"></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-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'>System</span><span class='varop'>.</span><span class='conid'>IO</span>-<a name="line-13"></a>-<a name="line-14"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-15"></a>-<a name="line-16"></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-17"></a>-<a name="line-18"></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-19"></a>    <span class='varid'>return</span> <span class='varid'>v</span>-<a name="line-20"></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-21"></a>-<a name="line-22"></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-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>-<a name="line-24"></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-25"></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-26"></a>		<span class='layout'>)</span>-<a name="line-27"></a>-<a name="line-28"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-29"></a><span class='comment'>-- |</span>-<a name="line-30"></a><span class='comment'>-- lift IO command to 'StateIO'</span>-<a name="line-31"></a>-<a name="line-32"></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-33"></a><span class='definition'>io</span> <span class='varid'>iocmd</span>-<a name="line-34"></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-35"></a>	     <span class='keyword'>do</span>-<a name="line-36"></a>	     <span class='varid'>a</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>iocmd</span>-<a name="line-37"></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-38"></a>	   <span class='layout'>)</span>-<a name="line-39"></a>-<a name="line-40"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-41"></a>-<a name="line-42"></a><span class='comment'>-- |</span>-<a name="line-43"></a><span class='comment'>-- state inspection command: a \"show\"-like function is applied to the state</span>-<a name="line-44"></a><span class='comment'>-- and the result is written to stderr.</span>-<a name="line-45"></a>-<a name="line-46"></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-47"></a><span class='definition'>trcState</span> <span class='varid'>fct</span>-<a name="line-48"></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-49"></a>	      <span class='keyword'>do</span>-<a name="line-50"></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-51"></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-52"></a>	    <span class='layout'>)</span>-<a name="line-53"></a>-<a name="line-54"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-55"></a><span class='comment'>--</span>-<a name="line-56"></a><span class='comment'>-- state access commands</span>-<a name="line-57"></a>-<a name="line-58"></a><span class='comment'>-- |</span>-<a name="line-59"></a><span class='comment'>-- change the state with a given function and return the new state</span>-<a name="line-60"></a>-<a name="line-61"></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-62"></a><span class='definition'>changeState</span> <span class='varid'>f</span>-<a name="line-63"></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-64"></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-65"></a>	     <span class='keyword'>in</span>-<a name="line-66"></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-67"></a>	    <span class='layout'>)</span>-<a name="line-68"></a>-<a name="line-69"></a><span class='comment'>-- |</span>-<a name="line-70"></a><span class='comment'>-- set the state</span>-<a name="line-71"></a>-<a name="line-72"></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-73"></a><span class='definition'>setState</span> <span class='varid'>s</span>-<a name="line-74"></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-75"></a>-<a name="line-76"></a><span class='comment'>-- |</span>-<a name="line-77"></a><span class='comment'>-- read the state</span>-<a name="line-78"></a>-<a name="line-79"></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-80"></a><span class='definition'>getState</span>-<a name="line-81"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeState</span> <span class='varid'>id</span>-<a name="line-82"></a>-<a name="line-83"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-84"></a><span class='comment'>-- |</span>-<a name="line-85"></a><span class='comment'>-- run a 'StateIO' command with an initial state</span>-<a name="line-86"></a>-<a name="line-87"></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-88"></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-89"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-90"></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-91"></a>      <span class='varid'>return</span> <span class='varid'>res</span>-<a name="line-92"></a>-<a name="line-93"></a>-<a name="line-94"></a><span class='comment'>-- ------------------------------------------------------------</span>-</pre></body>-</html>
− doc/hdoc/src/System-PipeOpen.html
@@ -1,70 +0,0 @@-<!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     : System.PipeOpen-<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: none portable-<a name="line-11"></a>   Version    : $Id: PipeOpen.hs,v 1.2 2005/09/02 17:09:39 hxml Exp $-<a name="line-12"></a>-<a name="line-13"></a>pipe open implemented with System.Process functions-<a name="line-14"></a>-<a name="line-15"></a>-}</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><span class='keyword'>module</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>PipeOpen</span>-<a name="line-20"></a>    <span class='layout'>(</span> <span class='varid'>popen</span> <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'>IO</span>-<a name="line-24"></a>    <span class='layout'>(</span> <span class='varid'>hGetContents</span>-<a name="line-25"></a>    <span class='layout'>,</span> <span class='varid'>hClose</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'>Exit</span>-<a name="line-29"></a>    <span class='layout'>(</span> <span class='conid'>ExitCode</span><span class='layout'>(</span><span class='keyglyph'>..</span><span class='layout'>)</span>-<a name="line-30"></a>    <span class='layout'>)</span>-<a name="line-31"></a>-<a name="line-32"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>Process</span>-<a name="line-33"></a>    <span class='layout'>(</span> <span class='varid'>runInteractiveProcess</span>-<a name="line-34"></a>    <span class='layout'>,</span> <span class='varid'>waitForProcess</span>-<a name="line-35"></a>    <span class='layout'>)</span>-<a name="line-36"></a>-<a name="line-37"></a><span class='comment'>-- | call an external program with a list of command line arguments</span>-<a name="line-38"></a><span class='comment'>-- and return content of stdout, content of stderr and return code</span>-<a name="line-39"></a>-<a name="line-40"></a><a name="popen"></a><span class='definition'>popen</span>	<span class='keyglyph'>::</span> <span class='conid'>String</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'>IO</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>Int</span><span class='layout'>)</span>-<a name="line-41"></a><span class='definition'>popen</span> <span class='varid'>prg</span> <span class='varid'>argl</span>-<a name="line-42"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-43"></a>      <span class='layout'>(</span><span class='varid'>inpH</span><span class='layout'>,</span> <span class='varid'>outH</span><span class='layout'>,</span> <span class='varid'>errH</span><span class='layout'>,</span> <span class='varid'>pH</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>runInteractiveProcess</span> <span class='varid'>prg</span> <span class='varid'>argl</span> <span class='conid'>Nothing</span> <span class='conid'>Nothing</span>-<a name="line-44"></a>      <span class='varid'>hClose</span> <span class='varid'>inpH</span>-<a name="line-45"></a>      <span class='varid'>res</span>  <span class='keyglyph'>&lt;-</span> <span class='varid'>hGetContents</span> <span class='varid'>outH</span>-<a name="line-46"></a>      <span class='varid'>errs</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>hGetContents</span> <span class='varid'>errH</span>-<a name="line-47"></a>-<a name="line-48"></a>      <span class='comment'>-- hack: stdout and stderr must be read completely, otherwise waitForProcess blocks</span>-<a name="line-49"></a>      <span class='keyword'>if</span> <span class='layout'>(</span><span class='varid'>length</span> <span class='varid'>res</span>  <span class='varop'>==</span> <span class='num'>0</span><span class='layout'>)</span> <span class='keyword'>then</span> <span class='varid'>return</span> <span class='conid'>()</span> <span class='keyword'>else</span> <span class='varid'>return</span> <span class='conid'>()</span>-<a name="line-50"></a>      <span class='keyword'>if</span> <span class='layout'>(</span><span class='varid'>length</span> <span class='varid'>errs</span> <span class='varop'>==</span> <span class='num'>0</span><span class='layout'>)</span> <span class='keyword'>then</span> <span class='varid'>return</span> <span class='conid'>()</span> <span class='keyword'>else</span> <span class='varid'>return</span> <span class='conid'>()</span>-<a name="line-51"></a>-<a name="line-52"></a>      <span class='varid'>rc</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>waitForProcess</span> <span class='varid'>pH</span>-<a name="line-53"></a>      <span class='varid'>return</span> <span class='layout'>(</span> <span class='varid'>res</span>-<a name="line-54"></a>	     <span class='layout'>,</span> <span class='varid'>errs</span>-<a name="line-55"></a>	     <span class='layout'>,</span> <span class='keyword'>case</span> <span class='varid'>rc</span> <span class='keyword'>of</span>-<a name="line-56"></a>	       <span class='conid'>ExitSuccess</span> <span class='keyglyph'>-&gt;</span> <span class='num'>0</span>-<a name="line-57"></a>	       <span class='conid'>ExitFailure</span> <span class='varid'>i</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>i</span>-<a name="line-58"></a>	     <span class='layout'>)</span>-<a name="line-59"></a>-<a name="line-60"></a><span class='comment'>-- eof ------------------------------------------------------------</span>-</pre></body>-</html>
doc/hdoc/src/Text-XML-HXT-Arrow-DocumentInput.html view
@@ -38,337 +38,392 @@ <a name="line-30"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>ArrowTree</span> <a name="line-31"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>ArrowIO</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'>Unicode</span>-<a name="line-34"></a>    <span class='layout'>(</span> <span class='varid'>getDecodingFct</span>-<a name="line-35"></a>    <span class='layout'>,</span> <span class='varid'>guessEncoding</span>-<a name="line-36"></a>    <span class='layout'>,</span> <span class='varid'>normalizeNL</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='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'>IO</span><span class='varop'>.</span><span class='conid'>GetFILE</span>	<span class='keyword'>as</span> <span class='conid'>FILE</span>-<a name="line-40"></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'>IO</span><span class='varop'>.</span><span class='conid'>GetHTTPNative</span>	<span class='keyword'>as</span> <span class='conid'>HTTP</span>-<a name="line-41"></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'>IO</span><span class='varop'>.</span><span class='conid'>GetHTTPCurl</span>	<span class='keyword'>as</span> <span class='conid'>CURL</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'>Interface</span>-<a name="line-44"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlArrow</span>-<a name="line-45"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlIOStateArrow</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'>Arrow</span><span class='varop'>.</span><span class='conid'>ParserInterface</span>-<a name="line-48"></a>    <span class='layout'>(</span> <span class='varid'>parseXmlDocEncodingSpec</span>-<a name="line-49"></a>    <span class='layout'>,</span> <span class='varid'>parseXmlEntityEncodingSpec</span>-<a name="line-50"></a>    <span class='layout'>,</span> <span class='varid'>removeEncodingSpec</span>-<a name="line-51"></a>    <span class='layout'>)</span>+<a name="line-33"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Char</span>+<a name="line-34"></a>    <span class='layout'>(</span> <span class='varid'>toLower</span>+<a name="line-35"></a>    <span class='layout'>)</span>+<a name="line-36"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>List</span>+<a name="line-37"></a>    <span class='layout'>(</span> <span class='varid'>isPrefixOf</span>+<a name="line-38"></a>    <span class='layout'>)</span>+<a name="line-39"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</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'>FilePath</span>+<a name="line-42"></a>    <span class='layout'>(</span> <span class='varid'>takeExtension</span> <span class='layout'>)</span>+<a name="line-43"></a>+<a name="line-44"></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-45"></a>    <span class='layout'>(</span> <span class='varid'>getDecodingFct</span>+<a name="line-46"></a>    <span class='layout'>,</span> <span class='varid'>guessEncoding</span>+<a name="line-47"></a>    <span class='layout'>,</span> <span class='varid'>normalizeNL</span>+<a name="line-48"></a>    <span class='layout'>)</span>+<a name="line-49"></a>+<a name="line-50"></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'>IO</span><span class='varop'>.</span><span class='conid'>GetFILE</span>	<span class='keyword'>as</span> <span class='conid'>FILE</span>+<a name="line-51"></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'>IO</span><span class='varop'>.</span><span class='conid'>GetHTTPLibCurl</span>	<span class='keyword'>as</span> <span class='conid'>LibCURL</span> <a name="line-52"></a>-<a name="line-53"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>List</span>-<a name="line-54"></a>    <span class='layout'>(</span> <span class='varid'>isPrefixOf</span>-<a name="line-55"></a>    <span class='layout'>)</span>-<a name="line-56"></a>-<a name="line-57"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Char</span>-<a name="line-58"></a>    <span class='layout'>(</span> <span class='varid'>toLower</span>-<a name="line-59"></a>    <span class='layout'>)</span>-<a name="line-60"></a>-<a name="line-61"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>-<a name="line-62"></a>-<a name="line-63"></a><span class='comment'>-- ----------------------------------------------------------</span>-<a name="line-64"></a>-<a name="line-65"></a><a name="protocolHandlers"></a><span class='definition'>protocolHandlers</span>	<span class='keyglyph'>::</span> <span class='conid'>AssocList</span> <span class='conid'>String</span> <span class='layout'>(</span><span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span><span class='layout'>)</span>-<a name="line-66"></a><span class='definition'>protocolHandlers</span>-<a name="line-67"></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-68"></a>      <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"http"</span><span class='layout'>,</span>	<span class='varid'>getHttpContents</span><span class='layout'>)</span>-<a name="line-69"></a>      <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"stdin"</span><span class='layout'>,</span>	<span class='varid'>getStdinContents</span><span class='layout'>)</span>-<a name="line-70"></a>      <span class='keyglyph'>]</span>-<a name="line-71"></a>-<a name="line-72"></a><a name="getProtocolHandler"></a><span class='definition'>getProtocolHandler</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>String</span> <span class='layout'>(</span><span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span><span class='layout'>)</span>-<a name="line-73"></a><span class='definition'>getProtocolHandler</span>-<a name="line-74"></a>    <span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>lookupDef</span> <span class='varid'>getUnsupported</span> <span class='varid'>s</span> <span class='varid'>protocolHandlers</span><span class='layout'>)</span>-<a name="line-75"></a>-<a name="line-76"></a><a name="getUnsupported"></a><span class='definition'>getUnsupported</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-77"></a><span class='definition'>getUnsupported</span>-<a name="line-78"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>a_source</span>-<a name="line-79"></a>		<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-80"></a>		<span class='varid'>arr</span> <span class='layout'>(</span><span class='layout'>(</span><span class='str'>"unsupported protocol in URI "</span> <span class='varop'>++</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>show</span><span class='layout'>)</span>-<a name="line-81"></a>		<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-82"></a>		<span class='varid'>applyA</span> <span class='layout'>(</span><span class='varid'>arr</span> <span class='varid'>issueFatal</span><span class='layout'>)</span>-<a name="line-83"></a>	      <span class='layout'>)</span>-<a name="line-84"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-85"></a>      <span class='varid'>setDocumentStatusFromSystemState</span> <span class='str'>"accessing documents"</span>-<a name="line-86"></a>	-<a name="line-87"></a><a name="getStringContents"></a><span class='definition'>getStringContents</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-88"></a><span class='definition'>getStringContents</span>-<a name="line-89"></a>    <span class='keyglyph'>=</span> <span class='varid'>setCont</span> <span class='varop'>$&lt;</span> <span class='varid'>getAttrValue</span> <span class='varid'>a_source</span>-<a name="line-90"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-91"></a>      <span class='varid'>addAttr</span> <span class='varid'>transferMessage</span> <span class='str'>"OK"</span>-<a name="line-92"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-93"></a>      <span class='varid'>addAttr</span> <span class='varid'>transferStatus</span> <span class='str'>"200"</span>-<a name="line-94"></a>    <span class='keyword'>where</span>-<a name="line-95"></a>    <span class='varid'>setCont</span> <span class='varid'>contents</span>-<a name="line-96"></a>	<span class='keyglyph'>=</span> <span class='varid'>replaceChildren</span> <span class='layout'>(</span><span class='varid'>txt</span> <span class='varid'>contents'</span><span class='layout'>)</span>-<a name="line-97"></a>	  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-98"></a>	  <span class='varid'>addAttr</span> <span class='varid'>transferURI</span> <span class='layout'>(</span><span class='varid'>take</span> <span class='num'>7</span> <span class='varid'>contents</span><span class='layout'>)</span>			<span class='comment'>-- the "string:" prefix is stored, this is required by setBaseURIFromDoc</span>-<a name="line-99"></a>	  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-100"></a>	  <span class='varid'>addAttr</span> <span class='varid'>a_source</span> <span class='layout'>(</span><span class='varid'>show</span> <span class='varop'>.</span> <span class='varid'>prefix</span> <span class='num'>48</span> <span class='varop'>$</span> <span class='varid'>contents'</span><span class='layout'>)</span>	<span class='comment'>-- a quoted prefix of the content, max 48 chars is taken as source name</span>-<a name="line-101"></a>	<span class='keyword'>where</span>-<a name="line-102"></a>	<span class='varid'>contents'</span>  <span class='keyglyph'>=</span> <span class='varid'>drop</span> <span class='layout'>(</span><span class='varid'>length</span> <span class='varid'>stringProtocol</span><span class='layout'>)</span> <span class='varid'>contents</span>-<a name="line-103"></a>	<span class='varid'>prefix</span> <span class='varid'>l</span> <span class='varid'>s</span>-<a name="line-104"></a>	    <span class='keyglyph'>|</span> <span class='varid'>length</span> <span class='varid'>s'</span> <span class='varop'>&gt;</span> <span class='varid'>l</span> <span class='keyglyph'>=</span> <span class='varid'>take</span> <span class='layout'>(</span><span class='varid'>l</span> <span class='comment'>-</span> <span class='num'>3</span><span class='layout'>)</span> <span class='varid'>s'</span> <span class='varop'>++</span> <span class='str'>"..."</span>-<a name="line-105"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>     <span class='keyglyph'>=</span> <span class='varid'>s'</span>-<a name="line-106"></a>	    <span class='keyword'>where</span>-<a name="line-107"></a>	    <span class='varid'>s'</span> <span class='keyglyph'>=</span> <span class='varid'>take</span> <span class='layout'>(</span><span class='varid'>l</span> <span class='varop'>+</span> <span class='num'>1</span><span class='layout'>)</span> <span class='varid'>s</span>-<a name="line-108"></a>-<a name="line-109"></a><a name="getFileContents"></a><span class='definition'>getFileContents</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-110"></a><span class='definition'>getFileContents</span>-<a name="line-111"></a>    <span class='keyglyph'>=</span> <span class='varid'>applyA</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferURI</span>-<a name="line-112"></a>	       <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-113"></a>	       <span class='varid'>getPathFromURI</span>-<a name="line-114"></a>	       <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-115"></a>	       <span class='varid'>arrIO</span> <span class='conid'>FILE</span><span class='varop'>.</span><span class='varid'>getCont</span>-<a name="line-116"></a>	       <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-117"></a>	       <span class='layout'>(</span> <span class='varid'>arr</span> <span class='varid'>addError</span>		<span class='comment'>-- io error occured</span>-<a name="line-118"></a>		 <span class='varop'>|||</span>-<a name="line-119"></a>		 <span class='varid'>arr</span> <span class='varid'>addTxtContent</span>		<span class='comment'>-- content read</span>-<a name="line-120"></a>	       <span class='layout'>)</span>-<a name="line-121"></a>	     <span class='layout'>)</span>-<a name="line-122"></a>-<a name="line-123"></a><a name="getStdinContents"></a><span class='definition'>getStdinContents</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-124"></a><span class='definition'>getStdinContents</span>-<a name="line-125"></a>    <span class='keyglyph'>=</span> <span class='varid'>applyA</span> <span class='layout'>(</span> <span class='varid'>arrIO</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='keyword'>_</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>FILE</span><span class='varop'>.</span><span class='varid'>getStdinCont</span><span class='layout'>)</span>-<a name="line-126"></a>	       <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-127"></a>	       <span class='layout'>(</span> <span class='varid'>arr</span> <span class='varid'>addError</span>		<span class='comment'>-- io error occured</span>-<a name="line-128"></a>		 <span class='varop'>|||</span>-<a name="line-129"></a>		 <span class='varid'>arr</span> <span class='varid'>addTxtContent</span>		<span class='comment'>-- content read</span>-<a name="line-130"></a>	       <span class='layout'>)</span>-<a name="line-131"></a>	     <span class='layout'>)</span>-<a name="line-132"></a>-<a name="line-133"></a><a name="addError"></a><span class='definition'>addError</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-134"></a><span class='definition'>addError</span> <span class='varid'>e</span>-<a name="line-135"></a>    <span class='keyglyph'>=</span> <span class='varid'>issueFatal</span> <span class='varid'>e</span>-<a name="line-136"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-137"></a>      <span class='varid'>setDocumentStatusFromSystemState</span> <span class='str'>"accessing documents"</span>-<a name="line-138"></a>-<a name="line-139"></a><a name="addTxtContent"></a><span class='definition'>addTxtContent</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-140"></a><span class='definition'>addTxtContent</span> <span class='varid'>c</span>-<a name="line-141"></a>    <span class='keyglyph'>=</span> <span class='varid'>replaceChildren</span> <span class='layout'>(</span><span class='varid'>txt</span> <span class='varid'>c</span><span class='layout'>)</span>-<a name="line-142"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-143"></a>      <span class='varid'>addAttr</span> <span class='varid'>transferMessage</span> <span class='str'>"OK"</span>-<a name="line-144"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-145"></a>      <span class='varid'>addAttr</span> <span class='varid'>transferStatus</span> <span class='str'>"200"</span>-<a name="line-146"></a>-<a name="line-147"></a><a name="getHttpContents"></a><span class='definition'>getHttpContents</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-148"></a><span class='definition'>getHttpContents</span>-<a name="line-149"></a>    <span class='keyglyph'>=</span> <span class='varid'>getCont</span> <span class='varop'>$&lt;&lt;&lt;&lt;</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferURI</span>-<a name="line-150"></a>		      <span class='varop'>&amp;&amp;&amp;</span>-<a name="line-151"></a>		      <span class='varid'>getOpt</span> <span class='varid'>a_proxy</span>-<a name="line-152"></a>		      <span class='varop'>&amp;&amp;&amp;</span>-<a name="line-153"></a>		      <span class='varid'>getOpt</span> <span class='varid'>a_use_curl</span>-<a name="line-154"></a>		      <span class='varop'>&amp;&amp;&amp;</span>-<a name="line-155"></a>		      <span class='varid'>getOpt</span> <span class='varid'>a_options_curl</span>-<a name="line-156"></a>		    <span class='layout'>)</span>-<a name="line-157"></a>      <span class='keyword'>where</span>-<a name="line-158"></a>      <span class='varid'>getOpt</span> <span class='varid'>opt</span>-<a name="line-159"></a>	  <span class='keyglyph'>=</span> <span class='varid'>getAttrValue0</span> <span class='varid'>opt</span>-<a name="line-160"></a>	    <span class='varop'>`orElse`</span>-<a name="line-161"></a>	    <span class='varid'>getParamString</span> <span class='varid'>opt</span>-<a name="line-162"></a>-<a name="line-163"></a>      <span class='varid'>getCont</span> <span class='varid'>uri</span> <span class='varid'>proxy</span> <span class='varid'>curl</span> <span class='varid'>curlOpt</span>-<a name="line-164"></a>	  <span class='keyglyph'>=</span> <span class='varid'>applyA</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>curl</span> <span class='varop'>==</span> <span class='varid'>v_1</span>-<a name="line-165"></a>		       <span class='keyword'>then</span> <span class='layout'>(</span> <span class='varid'>traceMsg</span> <span class='num'>2</span> <span class='layout'>(</span> <span class='str'>"get HTTP via "</span>-<a name="line-166"></a>					   <span class='varop'>++</span> <span class='varid'>show</span> <span class='layout'>(</span> <span class='str'>"curl "</span>-<a name="line-167"></a>						     <span class='varop'>++</span> <span class='layout'>(</span><span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>proxy</span> <span class='keyword'>then</span> <span class='str'>""</span> <span class='keyword'>else</span> <span class='str'>"--proxy "</span> <span class='varop'>++</span> <span class='varid'>proxy</span><span class='layout'>)</span>-<a name="line-168"></a>						     <span class='varop'>++</span> <span class='layout'>(</span><span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>curlOpt</span> <span class='keyword'>then</span> <span class='str'>""</span> <span class='keyword'>else</span> <span class='str'>" "</span> <span class='varop'>++</span> <span class='varid'>curlOpt</span><span class='layout'>)</span>-<a name="line-169"></a>						     <span class='varop'>++</span> <span class='str'>" "</span> <span class='varop'>++</span> <span class='varid'>uri</span>-<a name="line-170"></a>						   <span class='layout'>)</span>-<a name="line-171"></a>					 <span class='layout'>)</span>-<a name="line-172"></a>			      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-173"></a>			      <span class='varid'>arrIO0</span> <span class='layout'>(</span> <span class='conid'>CURL</span><span class='varop'>.</span><span class='varid'>getCont</span> <span class='varid'>curlOpt</span> <span class='varid'>uri</span> <span class='varid'>proxy</span> <span class='layout'>)</span>-<a name="line-174"></a>			    <span class='layout'>)</span>-<a name="line-175"></a>		       <span class='keyword'>else</span> <span class='varid'>arrIO0</span> <span class='layout'>(</span> <span class='conid'>HTTP</span><span class='varop'>.</span><span class='varid'>getCont</span>         <span class='varid'>uri</span> <span class='varid'>proxy</span> <span class='layout'>)</span>-<a name="line-176"></a>		     <span class='layout'>)</span>-<a name="line-177"></a>		     <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-178"></a>		     <span class='layout'>(</span> <span class='varid'>arr</span> <span class='varid'>addError</span>-<a name="line-179"></a>		       <span class='varop'>|||</span>-<a name="line-180"></a>		       <span class='varid'>arr</span> <span class='varid'>addContent</span>-<a name="line-181"></a>		     <span class='layout'>)</span>-<a name="line-182"></a>		   <span class='layout'>)</span>-<a name="line-183"></a>-<a name="line-184"></a>      <span class='varid'>addContent</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>AssocList</span> <span class='conid'>String</span> <span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-185"></a>      <span class='varid'>addContent</span> <span class='layout'>(</span><span class='varid'>al</span><span class='layout'>,</span> <span class='varid'>c</span><span class='layout'>)</span>-<a name="line-186"></a>	  <span class='keyglyph'>=</span> <span class='varid'>replaceChildren</span> <span class='layout'>(</span><span class='varid'>txt</span> <span class='varid'>c</span><span class='layout'>)</span>-<a name="line-187"></a>	    <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-188"></a>	    <span class='varid'>seqA</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>uncurry</span> <span class='varid'>addAttr</span><span class='layout'>)</span> <span class='varid'>al</span><span class='layout'>)</span>-<a name="line-189"></a>-<a name="line-190"></a><a name="getURIContents"></a><span class='definition'>getURIContents</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-191"></a><span class='definition'>getURIContents</span>-<a name="line-192"></a>    <span class='keyglyph'>=</span> <span class='varid'>getContentsFromString</span>-<a name="line-193"></a>      <span class='varop'>`orElse`</span>-<a name="line-194"></a>      <span class='varid'>getContentsFromDoc</span>-<a name="line-195"></a>    <span class='keyword'>where</span>-<a name="line-196"></a>    <span class='varid'>getContentsFromString</span>-<a name="line-197"></a>	<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>a_source</span>-<a name="line-198"></a>	    <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-199"></a>	    <span class='varid'>isA</span> <span class='layout'>(</span><span class='varid'>isPrefixOf</span> <span class='varid'>stringProtocol</span><span class='layout'>)</span>-<a name="line-200"></a>	  <span class='layout'>)</span>-<a name="line-201"></a>	  <span class='varop'>`guards`</span>-<a name="line-202"></a>	  <span class='varid'>getStringContents</span>-<a name="line-203"></a>	  -<a name="line-204"></a>    <span class='varid'>getContentsFromDoc</span>-<a name="line-205"></a>	<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>addTransferURI</span> <span class='varop'>$&lt;</span> <span class='varid'>getBaseURI</span>-<a name="line-206"></a>	      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-207"></a>	      <span class='varid'>getCont</span>-<a name="line-208"></a>	    <span class='layout'>)</span>-<a name="line-209"></a>	    <span class='varop'>`when`</span>-<a name="line-210"></a>	    <span class='layout'>(</span> <span class='varid'>setAbsURI</span> <span class='varop'>$&lt;</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>a_source</span>-<a name="line-211"></a>			     <span class='varop'>&gt;&gt;^</span>-<a name="line-212"></a>			     <span class='layout'>(</span> <span class='keyglyph'>\</span> <span class='varid'>src</span><span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>src</span> <span class='keyword'>then</span> <span class='str'>"stdin:"</span> <span class='keyword'>else</span> <span class='varid'>src</span><span class='layout'>)</span> <span class='layout'>)</span>	<span class='comment'>-- empty document name -&gt; read from stdin</span>-<a name="line-213"></a>			   <span class='layout'>)</span>-<a name="line-214"></a>	    <span class='layout'>)</span>-<a name="line-215"></a>	  <span class='layout'>)</span>-<a name="line-216"></a>          <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-217"></a>          <span class='varid'>setDocumentStatusFromSystemState</span> <span class='str'>"getURIContents"</span>-<a name="line-218"></a>-<a name="line-219"></a>    <span class='varid'>setAbsURI</span> <span class='varid'>src</span>-<a name="line-220"></a>	<span class='keyglyph'>=</span> <span class='varid'>ifA</span> <span class='layout'>(</span> <span class='varid'>constA</span> <span class='varid'>src</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>changeBaseURI</span> <span class='layout'>)</span>-<a name="line-221"></a>	  <span class='varid'>this</span>-<a name="line-222"></a>	  <span class='layout'>(</span> <span class='varid'>issueFatal</span> <span class='layout'>(</span><span class='str'>"illegal URI : "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>src</span><span class='layout'>)</span> <span class='layout'>)</span>+<a name="line-53"></a><span class='comment'>{- not longer needed, libcurl is used+<a name="line-54"></a>import qualified Text.XML.HXT.IO.GetHTTPNative	as HTTP+<a name="line-55"></a>import qualified Text.XML.HXT.IO.GetHTTPCurl	as CURL+<a name="line-56"></a>-}</span>+<a name="line-57"></a>+<a name="line-58"></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'>Interface</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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlArrow</span>+<a name="line-61"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlIOStateArrow</span>+<a name="line-62"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>ParserInterface</span>+<a name="line-63"></a>    <span class='layout'>(</span> <span class='varid'>parseXmlDocEncodingSpec</span>+<a name="line-64"></a>    <span class='layout'>,</span> <span class='varid'>parseXmlEntityEncodingSpec</span>+<a name="line-65"></a>    <span class='layout'>,</span> <span class='varid'>removeEncodingSpec</span>+<a name="line-66"></a>    <span class='layout'>)</span>+<a name="line-67"></a>+<a name="line-68"></a><span class='comment'>-- ----------------------------------------------------------</span>+<a name="line-69"></a>+<a name="line-70"></a><a name="protocolHandlers"></a><span class='definition'>protocolHandlers</span>	<span class='keyglyph'>::</span> <span class='conid'>AssocList</span> <span class='conid'>String</span> <span class='layout'>(</span><span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span><span class='layout'>)</span>+<a name="line-71"></a><span class='definition'>protocolHandlers</span>+<a name="line-72"></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-73"></a>      <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"http"</span><span class='layout'>,</span>	<span class='varid'>getHttpContents</span><span class='layout'>)</span>+<a name="line-74"></a>      <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"stdin"</span><span class='layout'>,</span>	<span class='varid'>getStdinContents</span><span class='layout'>)</span>+<a name="line-75"></a>      <span class='keyglyph'>]</span>+<a name="line-76"></a>+<a name="line-77"></a><a name="getProtocolHandler"></a><span class='definition'>getProtocolHandler</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>String</span> <span class='layout'>(</span><span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span><span class='layout'>)</span>+<a name="line-78"></a><span class='definition'>getProtocolHandler</span>+<a name="line-79"></a>    <span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>lookupDef</span> <span class='varid'>getUnsupported</span> <span class='varid'>s</span> <span class='varid'>protocolHandlers</span><span class='layout'>)</span>+<a name="line-80"></a>+<a name="line-81"></a><a name="getUnsupported"></a><span class='definition'>getUnsupported</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-82"></a><span class='definition'>getUnsupported</span>+<a name="line-83"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>a_source</span>+<a name="line-84"></a>		<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-85"></a>		<span class='varid'>arr</span> <span class='layout'>(</span><span class='layout'>(</span><span class='str'>"unsupported protocol in URI "</span> <span class='varop'>++</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>show</span><span class='layout'>)</span>+<a name="line-86"></a>		<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-87"></a>		<span class='varid'>applyA</span> <span class='layout'>(</span><span class='varid'>arr</span> <span class='varid'>issueFatal</span><span class='layout'>)</span>+<a name="line-88"></a>	      <span class='layout'>)</span>+<a name="line-89"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-90"></a>      <span class='varid'>setDocumentStatusFromSystemState</span> <span class='str'>"accessing documents"</span>+<a name="line-91"></a>	+<a name="line-92"></a><a name="getStringContents"></a><span class='definition'>getStringContents</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-93"></a><span class='definition'>getStringContents</span>+<a name="line-94"></a>    <span class='keyglyph'>=</span> <span class='varid'>setCont</span> <span class='varop'>$&lt;</span> <span class='varid'>getAttrValue</span> <span class='varid'>a_source</span>+<a name="line-95"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-96"></a>      <span class='varid'>addAttr</span> <span class='varid'>transferMessage</span> <span class='str'>"OK"</span>+<a name="line-97"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-98"></a>      <span class='varid'>addAttr</span> <span class='varid'>transferStatus</span> <span class='str'>"200"</span>+<a name="line-99"></a>    <span class='keyword'>where</span>+<a name="line-100"></a>    <span class='varid'>setCont</span> <span class='varid'>contents</span>+<a name="line-101"></a>	<span class='keyglyph'>=</span> <span class='varid'>replaceChildren</span> <span class='layout'>(</span><span class='varid'>txt</span> <span class='varid'>contents'</span><span class='layout'>)</span>+<a name="line-102"></a>	  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-103"></a>	  <span class='varid'>addAttr</span> <span class='varid'>transferURI</span> <span class='layout'>(</span><span class='varid'>take</span> <span class='num'>7</span> <span class='varid'>contents</span><span class='layout'>)</span>			<span class='comment'>-- the "string:" prefix is stored, this is required by setBaseURIFromDoc</span>+<a name="line-104"></a>	  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-105"></a>	  <span class='varid'>addAttr</span> <span class='varid'>a_source</span> <span class='layout'>(</span><span class='varid'>show</span> <span class='varop'>.</span> <span class='varid'>prefix</span> <span class='num'>48</span> <span class='varop'>$</span> <span class='varid'>contents'</span><span class='layout'>)</span>	<span class='comment'>-- a quoted prefix of the content, max 48 chars is taken as source name</span>+<a name="line-106"></a>	<span class='keyword'>where</span>+<a name="line-107"></a>	<span class='varid'>contents'</span>  <span class='keyglyph'>=</span> <span class='varid'>drop</span> <span class='layout'>(</span><span class='varid'>length</span> <span class='varid'>stringProtocol</span><span class='layout'>)</span> <span class='varid'>contents</span>+<a name="line-108"></a>	<span class='varid'>prefix</span> <span class='varid'>l</span> <span class='varid'>s</span>+<a name="line-109"></a>	    <span class='keyglyph'>|</span> <span class='varid'>length</span> <span class='varid'>s'</span> <span class='varop'>&gt;</span> <span class='varid'>l</span> <span class='keyglyph'>=</span> <span class='varid'>take</span> <span class='layout'>(</span><span class='varid'>l</span> <span class='comment'>-</span> <span class='num'>3</span><span class='layout'>)</span> <span class='varid'>s'</span> <span class='varop'>++</span> <span class='str'>"..."</span>+<a name="line-110"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>     <span class='keyglyph'>=</span> <span class='varid'>s'</span>+<a name="line-111"></a>	    <span class='keyword'>where</span>+<a name="line-112"></a>	    <span class='varid'>s'</span> <span class='keyglyph'>=</span> <span class='varid'>take</span> <span class='layout'>(</span><span class='varid'>l</span> <span class='varop'>+</span> <span class='num'>1</span><span class='layout'>)</span> <span class='varid'>s</span>+<a name="line-113"></a>+<a name="line-114"></a><a name="getFileContents"></a><span class='definition'>getFileContents</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-115"></a><span class='definition'>getFileContents</span>+<a name="line-116"></a>    <span class='keyglyph'>=</span> <span class='varid'>applyA</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferURI</span>+<a name="line-117"></a>	       <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-118"></a>	       <span class='varid'>getPathFromURI</span>+<a name="line-119"></a>	       <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-120"></a>	       <span class='varid'>arrIO</span> <span class='conid'>FILE</span><span class='varop'>.</span><span class='varid'>getCont</span>+<a name="line-121"></a>	       <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-122"></a>	       <span class='layout'>(</span> <span class='varid'>arr</span> <span class='varid'>addError</span>		<span class='comment'>-- io error occured</span>+<a name="line-123"></a>		 <span class='varop'>|||</span>+<a name="line-124"></a>		 <span class='varid'>arr</span> <span class='varid'>addTxtContent</span>	<span class='comment'>-- content read</span>+<a name="line-125"></a>	       <span class='layout'>)</span>+<a name="line-126"></a>	     <span class='layout'>)</span>+<a name="line-127"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-128"></a>      <span class='varid'>addMimeType</span>+<a name="line-129"></a>+<a name="line-130"></a><a name="getStdinContents"></a><span class='definition'>getStdinContents</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-131"></a><span class='definition'>getStdinContents</span>+<a name="line-132"></a>    <span class='keyglyph'>=</span> <span class='varid'>applyA</span> <span class='layout'>(</span> <span class='varid'>arrIO</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='keyword'>_</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>FILE</span><span class='varop'>.</span><span class='varid'>getStdinCont</span><span class='layout'>)</span>+<a name="line-133"></a>	       <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-134"></a>	       <span class='layout'>(</span> <span class='varid'>arr</span> <span class='varid'>addError</span>		<span class='comment'>-- io error occured</span>+<a name="line-135"></a>		 <span class='varop'>|||</span>+<a name="line-136"></a>		 <span class='varid'>arr</span> <span class='varid'>addTxtContent</span>	<span class='comment'>-- content read</span>+<a name="line-137"></a>	       <span class='layout'>)</span>+<a name="line-138"></a>	     <span class='layout'>)</span>+<a name="line-139"></a>+<a name="line-140"></a><a name="addError"></a><span class='definition'>addError</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-141"></a><span class='definition'>addError</span> <span class='varid'>e</span>+<a name="line-142"></a>    <span class='keyglyph'>=</span> <span class='varid'>issueFatal</span> <span class='varid'>e</span>+<a name="line-143"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-144"></a>      <span class='varid'>setDocumentStatusFromSystemState</span> <span class='str'>"accessing documents"</span>+<a name="line-145"></a>+<a name="line-146"></a><a name="addMimeType"></a><span class='definition'>addMimeType</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-147"></a><span class='definition'>addMimeType</span>+<a name="line-148"></a>    <span class='keyglyph'>=</span> <span class='varid'>addMime</span> <span class='varop'>$&lt;</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferURI</span>+<a name="line-149"></a>		   <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-150"></a>		   <span class='layout'>(</span> <span class='varid'>uriToMime</span> <span class='varop'>$&lt;</span> <span class='varid'>getSysParam</span> <span class='varid'>xio_mimeTypes</span> <span class='layout'>)</span>+<a name="line-151"></a>		 <span class='layout'>)</span>+<a name="line-152"></a>    <span class='keyword'>where</span>+<a name="line-153"></a>    <span class='varid'>addMime</span> <span class='varid'>mt</span>+<a name="line-154"></a>	<span class='keyglyph'>=</span> <span class='varid'>addAttr</span> <span class='varid'>transferMimeType</span> <span class='varid'>mt</span>+<a name="line-155"></a>    <span class='varid'>uriToMime</span> <span class='varid'>mtt</span>+<a name="line-156"></a>	<span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='varop'>$</span> <span class='layout'>(</span> <span class='keyglyph'>\</span> <span class='varid'>uri</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>extensionToMimeType</span> <span class='layout'>(</span><span class='varid'>drop</span> <span class='num'>1</span> <span class='varop'>.</span> <span class='varid'>takeExtension</span> <span class='varop'>$</span> <span class='varid'>uri</span><span class='layout'>)</span> <span class='varid'>mtt</span> <span class='layout'>)</span>+<a name="line-157"></a>+<a name="line-158"></a><a name="addTxtContent"></a><span class='definition'>addTxtContent</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-159"></a><span class='definition'>addTxtContent</span> <span class='varid'>c</span>+<a name="line-160"></a>    <span class='keyglyph'>=</span> <span class='varid'>replaceChildren</span> <span class='layout'>(</span><span class='varid'>txt</span> <span class='varid'>c</span><span class='layout'>)</span>+<a name="line-161"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-162"></a>      <span class='varid'>addAttr</span> <span class='varid'>transferMessage</span> <span class='str'>"OK"</span>+<a name="line-163"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-164"></a>      <span class='varid'>addAttr</span> <span class='varid'>transferStatus</span> <span class='str'>"200"</span>+<a name="line-165"></a>+<a name="line-166"></a><a name="getHttpContents"></a><span class='definition'>getHttpContents</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-167"></a><span class='definition'>getHttpContents</span>+<a name="line-168"></a>    <span class='keyglyph'>=</span> <span class='varid'>getCont</span> <span class='varop'>$&lt;&lt;</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferURI</span>+<a name="line-169"></a>		    <span class='varop'>&amp;&amp;&amp;</span>+<a name="line-170"></a>		    <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>getAttrlAsAssoc</span>	<span class='comment'>-- get all attributes of root node</span>+<a name="line-171"></a>			<span class='varop'>&amp;&amp;&amp;</span>+<a name="line-172"></a>			<span class='varid'>getAllParamsString</span>	<span class='comment'>-- get all system params</span>+<a name="line-173"></a>		      <span class='layout'>)</span>+<a name="line-174"></a>		      <span class='varop'>&gt;&gt;^</span> <span class='varid'>uncurry</span> <span class='varid'>addEntries</span>	<span class='comment'>-- merge them, attributes overwrite system params</span>+<a name="line-175"></a>		    <span class='layout'>)</span>+<a name="line-176"></a>		  <span class='layout'>)</span>+<a name="line-177"></a>      <span class='keyword'>where</span>+<a name="line-178"></a>      <span class='varid'>getAttrlAsAssoc</span>				<span class='comment'>-- get the attributes as assoc list</span>+<a name="line-179"></a>	  <span class='keyglyph'>=</span> <span class='varid'>listA</span> <span class='layout'>(</span> <span class='varid'>getAttrl</span>+<a name="line-180"></a>		    <span class='varop'>&gt;&gt;&gt;</span> <span class='layout'>(</span> <span class='varid'>getName</span>+<a name="line-181"></a>			  <span class='varop'>&amp;&amp;&amp;</span>+<a name="line-182"></a>			  <span class='varid'>xshow</span> <span class='varid'>getChildren</span>+<a name="line-183"></a>			<span class='layout'>)</span>+<a name="line-184"></a>		  <span class='layout'>)</span>+<a name="line-185"></a>+<a name="line-186"></a>      <span class='varid'>getCont</span> <span class='varid'>uri</span> <span class='varid'>options</span>+<a name="line-187"></a>	  <span class='keyglyph'>=</span> <span class='varid'>applyA</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>traceMsg</span> <span class='num'>2</span> <span class='layout'>(</span> <span class='str'>"get HTTP via libcurl, uri="</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>uri</span> <span class='varop'>++</span> <span class='str'>" options="</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>options</span> <span class='layout'>)</span>+<a name="line-188"></a>		       <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-189"></a>		       <span class='varid'>arrIO0</span> <span class='layout'>(</span> <span class='conid'>LibCURL</span><span class='varop'>.</span><span class='varid'>getCont</span> <span class='varid'>options</span> <span class='varid'>uri</span> <span class='layout'>)</span>+<a name="line-190"></a>		     <span class='layout'>)</span>+<a name="line-191"></a>		     <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-192"></a>		     <span class='layout'>(</span> <span class='varid'>arr</span> <span class='varid'>addError</span>+<a name="line-193"></a>		       <span class='varop'>|||</span>+<a name="line-194"></a>		       <span class='varid'>arr</span> <span class='varid'>addContent</span>+<a name="line-195"></a>		     <span class='layout'>)</span>+<a name="line-196"></a>		   <span class='layout'>)</span>+<a name="line-197"></a>		    +<a name="line-198"></a><span class='comment'>{- old stuff+<a name="line-199"></a>	  = applyA ( ( if curl == v_1+<a name="line-200"></a>		       then ( traceMsg 2 ( "get HTTP via "+<a name="line-201"></a>					   ++ show ( "curl "+<a name="line-202"></a>						     ++ (if null proxy then "" else "--proxy " ++ proxy)+<a name="line-203"></a>						     ++ (if null curlOpt then "" else " " ++ curlOpt)+<a name="line-204"></a>						     ++ " " ++ uri+<a name="line-205"></a>						   )+<a name="line-206"></a>					 )+<a name="line-207"></a>			      &gt;&gt;&gt;+<a name="line-208"></a>			      arrIO0 ( CURL.getCont curlOpt uri proxy )+<a name="line-209"></a>			    )+<a name="line-210"></a>		       else arrIO0 ( HTTP.getCont         uri proxy )+<a name="line-211"></a>		     )+<a name="line-212"></a>		     &gt;&gt;&gt;+<a name="line-213"></a>		     ( arr addError+<a name="line-214"></a>		       |||+<a name="line-215"></a>		       arr addContent+<a name="line-216"></a>		     )+<a name="line-217"></a>		   )+<a name="line-218"></a>	    where+<a name="line-219"></a>	    proxy   = lookup1 a_proxy        options+<a name="line-220"></a>	    curl    = lookup1 a_use_curl     options+<a name="line-221"></a>	    curlOpt = lookup1 a_options_curl options+<a name="line-222"></a>-}</span> <a name="line-223"></a>-<a name="line-224"></a>    <span class='varid'>addTransferURI</span> <span class='varid'>uri</span>-<a name="line-225"></a>	<span class='keyglyph'>=</span> <span class='varid'>addAttr</span> <span class='varid'>transferURI</span> <span class='varid'>uri</span>-<a name="line-226"></a>-<a name="line-227"></a>    <span class='varid'>getCont</span>-<a name="line-228"></a>	<span class='keyglyph'>=</span> <span class='varid'>applyA</span> <span class='layout'>(</span> <span class='varid'>getBaseURI</span>				<span class='comment'>-- compute the handler and call it</span>-<a name="line-229"></a>		   <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-230"></a>		   <span class='varid'>traceString</span> <span class='num'>2</span> <span class='layout'>(</span><span class='layout'>(</span><span class='str'>"getURIContents: reading"</span> <span class='varop'>++</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>show</span><span class='layout'>)</span>-<a name="line-231"></a>		   <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-232"></a>		   <span class='varid'>getSchemeFromURI</span>-<a name="line-233"></a>		   <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-234"></a>		   <span class='varid'>getProtocolHandler</span>-<a name="line-235"></a>		 <span class='layout'>)</span>-<a name="line-236"></a>	  <span class='varop'>`orElse`</span>-<a name="line-237"></a>	  <span class='varid'>this</span>						<span class='comment'>-- don't change tree, when no handler can be found</span>-<a name="line-238"></a>	  -<a name="line-239"></a><a name="setBaseURIFromDoc"></a><span class='definition'>setBaseURIFromDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-240"></a><span class='definition'>setBaseURIFromDoc</span>-<a name="line-241"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferURI</span>-<a name="line-242"></a>		<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-243"></a>		<span class='varid'>isA</span> <span class='layout'>(</span><span class='varid'>isPrefixOf</span> <span class='varid'>stringProtocol</span><span class='layout'>)</span>		<span class='comment'>-- do not change base URI when reading from a string</span>-<a name="line-244"></a>		<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-245"></a>		<span class='varid'>setBaseURI</span>-<a name="line-246"></a>	      <span class='layout'>)</span>-<a name="line-247"></a>-<a name="line-248"></a><span class='comment'>{- |-<a name="line-249"></a>   Read the content of a document.-<a name="line-250"></a>-<a name="line-251"></a>   This routine is usually called from 'Text.XML.HXT.Arrow.ProcessDocument.getDocumentContents'.-<a name="line-252"></a>-<a name="line-253"></a>   The input must be a root node (constructed with 'Text.XML.HXT.Arrow.XmlArrow.root'), usually without children.-<a name="line-254"></a>   The attribute list contains all input parameters, e.g. URI or source file name, encoding preferences, ...-<a name="line-255"></a>   If the source name is empty, the input is read from standard input.-<a name="line-256"></a>-<a name="line-257"></a>   The source is transformed into an absolute URI. If the source is a relative URI, or a file name,-<a name="line-258"></a>   it is expanded into an absolut URI with respect to the current base URI.-<a name="line-259"></a>   The default base URI is of protocol \"file\" and points to the current working directory.-<a name="line-260"></a>-<a name="line-261"></a>   The currently supported protocols are \"http\", \"file\", \"stdin\" and \"string\".-<a name="line-262"></a>-<a name="line-263"></a>   The latter two are internal protocols. An uri of the form \"stdin:\" stands for the content of-<a name="line-264"></a>   the standard input stream.-<a name="line-265"></a>-<a name="line-266"></a>   \"string:some text\" means, that \"some text\" is taken as input.-<a name="line-267"></a>   This internal protocol is used for reading from normal 'String' values.-<a name="line-268"></a>-<a name="line-269"></a>-}</span>-<a name="line-270"></a>-<a name="line-271"></a><a name="getXmlContents"></a><span class='definition'>getXmlContents</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-272"></a><span class='definition'>getXmlContents</span>-<a name="line-273"></a>    <span class='keyglyph'>=</span> <span class='varid'>getXmlContents'</span> <span class='varid'>parseXmlDocEncodingSpec</span>-<a name="line-274"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-275"></a>      <span class='varid'>setBaseURIFromDoc</span>-<a name="line-276"></a>-<a name="line-277"></a><a name="getXmlEntityContents"></a><span class='definition'>getXmlEntityContents</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-278"></a><span class='definition'>getXmlEntityContents</span>-<a name="line-279"></a>    <span class='keyglyph'>=</span> <span class='varid'>getXmlContents'</span> <span class='varid'>parseXmlEntityEncodingSpec</span>-<a name="line-280"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-281"></a>      <span class='varid'>processChildren</span> <span class='varid'>removeEncodingSpec</span>-<a name="line-282"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-283"></a>      <span class='varid'>setBaseURIFromDoc</span>-<a name="line-284"></a>-<a name="line-285"></a><a name="getXmlContents'"></a><span class='definition'>getXmlContents'</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-286"></a><span class='definition'>getXmlContents'</span> <span class='varid'>parseEncodingSpec</span>-<a name="line-287"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>getURIContents</span>-<a name="line-288"></a>	<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-289"></a>	<span class='varid'>parseEncodingSpec</span>-<a name="line-290"></a>	<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-291"></a>	<span class='varid'>filterErrorMsg</span>-<a name="line-292"></a>	<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-293"></a>	<span class='varid'>decodeDocument</span>-<a name="line-294"></a>	<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-295"></a>	<span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferURI</span>-<a name="line-296"></a>		  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-297"></a>		  <span class='varid'>traceString</span> <span class='num'>1</span> <span class='layout'>(</span><span class='layout'>(</span><span class='str'>"getXmlContents: content read and decoded for "</span> <span class='varop'>++</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>show</span><span class='layout'>)</span>-<a name="line-298"></a>		<span class='layout'>)</span>-<a name="line-299"></a>	<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-300"></a>	<span class='varid'>traceTree</span>-<a name="line-301"></a>	<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-302"></a>	<span class='varid'>traceSource</span>-<a name="line-303"></a>      <span class='layout'>)</span>-<a name="line-304"></a>      <span class='varop'>`when`</span>-<a name="line-305"></a>      <span class='varid'>isRoot</span>-<a name="line-306"></a>-<a name="line-307"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-224"></a>      <span class='varid'>addContent</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>AssocList</span> <span class='conid'>String</span> <span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-225"></a>      <span class='varid'>addContent</span> <span class='layout'>(</span><span class='varid'>al</span><span class='layout'>,</span> <span class='varid'>c</span><span class='layout'>)</span>+<a name="line-226"></a>	  <span class='keyglyph'>=</span> <span class='varid'>replaceChildren</span> <span class='layout'>(</span><span class='varid'>txt</span> <span class='varid'>c</span><span class='layout'>)</span>+<a name="line-227"></a>	    <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-228"></a>	    <span class='varid'>seqA</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>uncurry</span> <span class='varid'>addAttr</span><span class='layout'>)</span> <span class='varid'>al</span><span class='layout'>)</span>+<a name="line-229"></a>+<a name="line-230"></a><a name="getURIContents"></a><span class='definition'>getURIContents</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-231"></a><span class='definition'>getURIContents</span>+<a name="line-232"></a>    <span class='keyglyph'>=</span> <span class='varid'>getContentsFromString</span>+<a name="line-233"></a>      <span class='varop'>`orElse`</span>+<a name="line-234"></a>      <span class='varid'>getContentsFromDoc</span>+<a name="line-235"></a>    <span class='keyword'>where</span>+<a name="line-236"></a>    <span class='varid'>getContentsFromString</span>+<a name="line-237"></a>	<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>a_source</span>+<a name="line-238"></a>	    <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-239"></a>	    <span class='varid'>isA</span> <span class='layout'>(</span><span class='varid'>isPrefixOf</span> <span class='varid'>stringProtocol</span><span class='layout'>)</span>+<a name="line-240"></a>	  <span class='layout'>)</span>+<a name="line-241"></a>	  <span class='varop'>`guards`</span>+<a name="line-242"></a>	  <span class='varid'>getStringContents</span>+<a name="line-243"></a>	  +<a name="line-244"></a>    <span class='varid'>getContentsFromDoc</span>+<a name="line-245"></a>	<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>addTransferURI</span> <span class='varop'>$&lt;</span> <span class='varid'>getBaseURI</span>+<a name="line-246"></a>	      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-247"></a>	      <span class='varid'>getCont</span>+<a name="line-248"></a>	    <span class='layout'>)</span>+<a name="line-249"></a>	    <span class='varop'>`when`</span>+<a name="line-250"></a>	    <span class='layout'>(</span> <span class='varid'>setAbsURI</span> <span class='varop'>$&lt;</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>a_source</span>+<a name="line-251"></a>			     <span class='varop'>&gt;&gt;^</span>+<a name="line-252"></a>			     <span class='layout'>(</span> <span class='keyglyph'>\</span> <span class='varid'>src</span><span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>src</span> <span class='keyword'>then</span> <span class='str'>"stdin:"</span> <span class='keyword'>else</span> <span class='varid'>src</span><span class='layout'>)</span> <span class='layout'>)</span>	<span class='comment'>-- empty document name -&gt; read from stdin</span>+<a name="line-253"></a>			   <span class='layout'>)</span>+<a name="line-254"></a>	    <span class='layout'>)</span>+<a name="line-255"></a>	  <span class='layout'>)</span>+<a name="line-256"></a>          <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-257"></a>          <span class='varid'>setDocumentStatusFromSystemState</span> <span class='str'>"getURIContents"</span>+<a name="line-258"></a>+<a name="line-259"></a>    <span class='varid'>setAbsURI</span> <span class='varid'>src</span>+<a name="line-260"></a>	<span class='keyglyph'>=</span> <span class='varid'>ifA</span> <span class='layout'>(</span> <span class='varid'>constA</span> <span class='varid'>src</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>changeBaseURI</span> <span class='layout'>)</span>+<a name="line-261"></a>	  <span class='varid'>this</span>+<a name="line-262"></a>	  <span class='layout'>(</span> <span class='varid'>issueFatal</span> <span class='layout'>(</span><span class='str'>"illegal URI : "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>src</span><span class='layout'>)</span> <span class='layout'>)</span>+<a name="line-263"></a>+<a name="line-264"></a>    <span class='varid'>addTransferURI</span> <span class='varid'>uri</span>+<a name="line-265"></a>	<span class='keyglyph'>=</span> <span class='varid'>addAttr</span> <span class='varid'>transferURI</span> <span class='varid'>uri</span>+<a name="line-266"></a>+<a name="line-267"></a>    <span class='varid'>getCont</span>+<a name="line-268"></a>	<span class='keyglyph'>=</span> <span class='varid'>applyA</span> <span class='layout'>(</span> <span class='varid'>getBaseURI</span>				<span class='comment'>-- compute the handler and call it</span>+<a name="line-269"></a>		   <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-270"></a>		   <span class='varid'>traceString</span> <span class='num'>2</span> <span class='layout'>(</span><span class='layout'>(</span><span class='str'>"getURIContents: reading "</span> <span class='varop'>++</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>show</span><span class='layout'>)</span>+<a name="line-271"></a>		   <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-272"></a>		   <span class='varid'>getSchemeFromURI</span>+<a name="line-273"></a>		   <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-274"></a>		   <span class='varid'>getProtocolHandler</span>+<a name="line-275"></a>		 <span class='layout'>)</span>+<a name="line-276"></a>	  <span class='varop'>`orElse`</span>+<a name="line-277"></a>	  <span class='varid'>this</span>						<span class='comment'>-- don't change tree, when no handler can be found</span>+<a name="line-278"></a>	  +<a name="line-279"></a><a name="setBaseURIFromDoc"></a><span class='definition'>setBaseURIFromDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-280"></a><span class='definition'>setBaseURIFromDoc</span>+<a name="line-281"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferURI</span>+<a name="line-282"></a>		<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-283"></a>		<span class='varid'>isA</span> <span class='layout'>(</span><span class='varid'>isPrefixOf</span> <span class='varid'>stringProtocol</span><span class='layout'>)</span>		<span class='comment'>-- do not change base URI when reading from a string</span>+<a name="line-284"></a>		<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-285"></a>		<span class='varid'>setBaseURI</span>+<a name="line-286"></a>	      <span class='layout'>)</span>+<a name="line-287"></a>+<a name="line-288"></a><span class='comment'>{- |+<a name="line-289"></a>   Read the content of a document.+<a name="line-290"></a>+<a name="line-291"></a>   This routine is usually called from 'Text.XML.HXT.Arrow.ProcessDocument.getDocumentContents'.+<a name="line-292"></a>+<a name="line-293"></a>   The input must be a root node (constructed with 'Text.XML.HXT.Arrow.XmlArrow.root'), usually without children.+<a name="line-294"></a>   The attribute list contains all input parameters, e.g. URI or source file name, encoding preferences, ...+<a name="line-295"></a>   If the source name is empty, the input is read from standard input.+<a name="line-296"></a>+<a name="line-297"></a>   The source is transformed into an absolute URI. If the source is a relative URI, or a file name,+<a name="line-298"></a>   it is expanded into an absolut URI with respect to the current base URI.+<a name="line-299"></a>   The default base URI is of protocol \"file\" and points to the current working directory.+<a name="line-300"></a>+<a name="line-301"></a>   The currently supported protocols are \"http\", \"file\", \"stdin\" and \"string\".+<a name="line-302"></a>+<a name="line-303"></a>   The latter two are internal protocols. An uri of the form \"stdin:\" stands for the content of+<a name="line-304"></a>   the standard input stream.+<a name="line-305"></a>+<a name="line-306"></a>   \"string:some text\" means, that \"some text\" is taken as input.+<a name="line-307"></a>   This internal protocol is used for reading from normal 'String' values. <a name="line-308"></a>-<a name="line-309"></a><a name="getEncoding"></a><span class='definition'>getEncoding</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>String</span>-<a name="line-310"></a><span class='definition'>getEncoding</span>-<a name="line-311"></a>    <span class='keyglyph'>=</span> <span class='varid'>catA</span> <span class='keyglyph'>[</span> <span class='varid'>xshow</span> <span class='varid'>getChildren</span>			<span class='comment'>-- 1. guess: guess encoding by looking at the first few bytes</span>-<a name="line-312"></a>	     <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-313"></a>	     <span class='varid'>arr</span> <span class='varid'>guessEncoding</span>-<a name="line-314"></a>	   <span class='layout'>,</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferEncoding</span>	<span class='comment'>-- 2. guess: take the transfer encoding</span>-<a name="line-315"></a>	   <span class='layout'>,</span> <span class='varid'>getAttrValue</span> <span class='varid'>a_encoding</span>		<span class='comment'>-- 4. guess: take encoding parameter in root node</span>-<a name="line-316"></a>	   <span class='layout'>,</span> <span class='varid'>getParamString</span> <span class='varid'>a_encoding</span>		<span class='comment'>-- 5. guess: take encoding parameter in global state</span>-<a name="line-317"></a>	   <span class='layout'>,</span> <span class='varid'>constA</span> <span class='varid'>utf8</span>			<span class='comment'>-- default : utf8</span>-<a name="line-318"></a>	   <span class='keyglyph'>]</span>-<a name="line-319"></a>      <span class='varop'>&gt;.</span> <span class='layout'>(</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><span class='layout'>)</span>		<span class='comment'>-- make the filter deterministic: take 1. entry from list of guesses</span>-<a name="line-320"></a>-<a name="line-321"></a>-<a name="line-322"></a><a name="decodeDocument"></a><span class='definition'>decodeDocument</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-323"></a><span class='definition'>decodeDocument</span>-<a name="line-324"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>decodeArr</span> <span class='varop'>$&lt;</span> <span class='varid'>getEncoding</span> <span class='layout'>)</span>-<a name="line-325"></a>      <span class='varop'>`when`</span>-<a name="line-326"></a>      <span class='layout'>(</span> <span class='varid'>isRoot</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>isXmlOrHtmlDoc</span> <span class='layout'>)</span>-<a name="line-327"></a>    <span class='keyword'>where</span>-<a name="line-328"></a>    <span class='varid'>isXmlOrHtmlDoc</span>-<a name="line-329"></a>	<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferMimeType</span> <span class='varop'>&gt;&gt;^</span> <span class='varid'>map</span> <span class='varid'>toLower</span> <span class='layout'>)</span>-<a name="line-330"></a>	  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-331"></a>	  <span class='varid'>isA</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>null</span> <span class='varid'>t</span> <span class='varop'>||</span> <span class='varid'>isXmlMimeType</span> <span class='varid'>t</span> <span class='varop'>||</span> <span class='varid'>isHtmlMimeType</span> <span class='varid'>t</span><span class='layout'>)</span>-<a name="line-332"></a>-<a name="line-333"></a>    <span class='varid'>decodeArr</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-334"></a>    <span class='varid'>decodeArr</span> <span class='varid'>enc</span>-<a name="line-335"></a>	<span class='keyglyph'>=</span> <span class='varid'>maybe</span> <span class='varid'>notFound</span> <span class='varid'>found</span> <span class='varop'>.</span> <span class='varid'>getDecodingFct</span> <span class='varop'>$</span> <span class='varid'>enc</span>-<a name="line-336"></a>	<span class='keyword'>where</span>-<a name="line-337"></a>	<span class='varid'>found</span> <span class='varid'>df</span>-<a name="line-338"></a>	    <span class='keyglyph'>=</span> <span class='varid'>traceMsg</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"decodeDocument: encoding is "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>enc</span><span class='layout'>)</span>-<a name="line-339"></a>	      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-340"></a>	      <span class='varid'>processChildren</span> <span class='layout'>(</span><span class='varid'>decodeText</span> <span class='varid'>df</span><span class='layout'>)</span>-<a name="line-341"></a>	      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-342"></a>	      <span class='varid'>addAttr</span> <span class='varid'>transferEncoding</span> <span class='varid'>enc</span>-<a name="line-343"></a>-<a name="line-344"></a>	<span class='varid'>notFound</span>-<a name="line-345"></a>	    <span class='keyglyph'>=</span> <span class='varid'>issueFatal</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'>enc</span><span class='layout'>)</span>-<a name="line-346"></a>	      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-347"></a>	      <span class='varid'>setDocumentStatusFromSystemState</span> <span class='str'>"decoding document"</span>-<a name="line-348"></a>-<a name="line-349"></a>	<span class='varid'>decodeText</span> <span class='varid'>df</span>-<a name="line-350"></a>	    <span class='keyglyph'>=</span> <span class='varid'>getText</span>-<a name="line-351"></a>	      <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>arr</span> <span class='varid'>df</span>					<span class='comment'>-- result is (string, [errMsg])</span>-<a name="line-352"></a>	      <span class='varop'>&gt;&gt;&gt;</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='layout'>(</span><span class='varid'>normalizeNL</span> <span class='varop'>.</span> <span class='varid'>fst</span><span class='layout'>)</span> <span class='varop'>^&gt;&gt;</span> <span class='varid'>mkText</span> <span class='layout'>)</span>		<span class='comment'>-- take string, normalize newline and build text node</span>-<a name="line-353"></a>		    <span class='varop'>&lt;+&gt;</span>-<a name="line-354"></a>		    <span class='layout'>(</span> <span class='varid'>arrL</span> <span class='varid'>snd</span>					<span class='comment'>-- take the error messages</span>-<a name="line-355"></a>		      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-356"></a>		      <span class='varid'>arr</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>enc</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='comment'>-- prefix with enc error</span>-<a name="line-357"></a>		      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-358"></a>		      <span class='varid'>applyA</span> <span class='layout'>(</span><span class='varid'>arr</span> <span class='varid'>issueErr</span><span class='layout'>)</span>			<span class='comment'>-- build issueErr arrow and apply</span>-<a name="line-359"></a>		      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-360"></a>		      <span class='varid'>none</span>					<span class='comment'>-- neccessary for type match with &lt;+&gt;</span>-<a name="line-361"></a>		    <span class='layout'>)</span>-<a name="line-362"></a>		  <span class='layout'>)</span>-<a name="line-363"></a>      -<a name="line-364"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-309"></a>-}</span>+<a name="line-310"></a>+<a name="line-311"></a><a name="getXmlContents"></a><span class='definition'>getXmlContents</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-312"></a><span class='definition'>getXmlContents</span>+<a name="line-313"></a>    <span class='keyglyph'>=</span> <span class='varid'>getXmlContents'</span> <span class='varid'>parseXmlDocEncodingSpec</span>+<a name="line-314"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-315"></a>      <span class='varid'>setBaseURIFromDoc</span>+<a name="line-316"></a>+<a name="line-317"></a><a name="getXmlEntityContents"></a><span class='definition'>getXmlEntityContents</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-318"></a><span class='definition'>getXmlEntityContents</span>+<a name="line-319"></a>    <span class='keyglyph'>=</span> <span class='varid'>getXmlContents'</span> <span class='varid'>parseXmlEntityEncodingSpec</span>+<a name="line-320"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-321"></a>      <span class='varid'>processChildren</span> <span class='varid'>removeEncodingSpec</span>+<a name="line-322"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-323"></a>      <span class='varid'>setBaseURIFromDoc</span>+<a name="line-324"></a>+<a name="line-325"></a><a name="getXmlContents'"></a><span class='definition'>getXmlContents'</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-326"></a><span class='definition'>getXmlContents'</span> <span class='varid'>parseEncodingSpec</span>+<a name="line-327"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>getURIContents</span>+<a name="line-328"></a>	<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-329"></a>	<span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>parseEncodingSpec</span>+<a name="line-330"></a>	    <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-331"></a>	    <span class='varid'>filterErrorMsg</span>+<a name="line-332"></a>	    <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-333"></a>	    <span class='varid'>decodeDocument</span>+<a name="line-334"></a>	  <span class='layout'>)</span>+<a name="line-335"></a>	  <span class='varop'>`when`</span>+<a name="line-336"></a>	  <span class='varid'>isXmlHtml</span>+<a name="line-337"></a>	<span class='layout'>)</span>+<a name="line-338"></a>	<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-339"></a>	<span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferURI</span>+<a name="line-340"></a>		  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-341"></a>		  <span class='varid'>traceString</span> <span class='num'>1</span> <span class='layout'>(</span><span class='layout'>(</span><span class='str'>"getXmlContents: content read and decoded for "</span> <span class='varop'>++</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>show</span><span class='layout'>)</span>+<a name="line-342"></a>		<span class='layout'>)</span>+<a name="line-343"></a>	<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-344"></a>	<span class='varid'>traceTree</span>+<a name="line-345"></a>	<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-346"></a>	<span class='varid'>traceSource</span>+<a name="line-347"></a>      <span class='layout'>)</span>+<a name="line-348"></a>      <span class='varop'>`when`</span>+<a name="line-349"></a>      <span class='varid'>isRoot</span>+<a name="line-350"></a>    <span class='keyword'>where</span>+<a name="line-351"></a>    <span class='varid'>isXmlHtml</span>+<a name="line-352"></a>	<span class='keyglyph'>=</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferMimeType</span>+<a name="line-353"></a>	  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-354"></a>	  <span class='varid'>arr</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>mt</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>isHtmlMimeType</span> <span class='varid'>mt</span> <span class='varop'>||</span> <span class='varid'>isXmlMimeType</span> <span class='varid'>mt</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><a name="getEncoding"></a><span class='definition'>getEncoding</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>String</span>+<a name="line-359"></a><span class='definition'>getEncoding</span>+<a name="line-360"></a>    <span class='keyglyph'>=</span> <span class='varid'>catA</span> <span class='keyglyph'>[</span> <span class='varid'>xshow</span> <span class='varid'>getChildren</span>			<span class='comment'>-- 1. guess: guess encoding by looking at the first few bytes</span>+<a name="line-361"></a>	     <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-362"></a>	     <span class='varid'>arr</span> <span class='varid'>guessEncoding</span>+<a name="line-363"></a>	   <span class='layout'>,</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferEncoding</span>	<span class='comment'>-- 2. guess: take the transfer encoding</span>+<a name="line-364"></a>	   <span class='layout'>,</span> <span class='varid'>getAttrValue</span> <span class='varid'>a_encoding</span>		<span class='comment'>-- 4. guess: take encoding parameter in root node</span>+<a name="line-365"></a>	   <span class='layout'>,</span> <span class='varid'>getParamString</span> <span class='varid'>a_encoding</span>		<span class='comment'>-- 5. guess: take encoding parameter in global state</span>+<a name="line-366"></a>	   <span class='layout'>,</span> <span class='varid'>constA</span> <span class='varid'>utf8</span>			<span class='comment'>-- default : utf8</span>+<a name="line-367"></a>	   <span class='keyglyph'>]</span>+<a name="line-368"></a>      <span class='varop'>&gt;.</span> <span class='layout'>(</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><span class='layout'>)</span>		<span class='comment'>-- make the filter deterministic: take 1. entry from list of guesses</span>+<a name="line-369"></a>+<a name="line-370"></a>+<a name="line-371"></a><a name="decodeDocument"></a><span class='definition'>decodeDocument</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-372"></a><span class='definition'>decodeDocument</span>+<a name="line-373"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>decodeArr</span> <span class='varop'>$&lt;</span> <span class='varid'>getEncoding</span> <span class='layout'>)</span>+<a name="line-374"></a>      <span class='varop'>`when`</span>+<a name="line-375"></a>      <span class='layout'>(</span> <span class='varid'>isRoot</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>isXmlOrHtmlDoc</span> <span class='layout'>)</span>+<a name="line-376"></a>    <span class='keyword'>where</span>+<a name="line-377"></a>    <span class='varid'>isXmlOrHtmlDoc</span>+<a name="line-378"></a>	<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferMimeType</span> <span class='varop'>&gt;&gt;^</span> <span class='varid'>map</span> <span class='varid'>toLower</span> <span class='layout'>)</span>+<a name="line-379"></a>	  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-380"></a>	  <span class='varid'>isA</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>null</span> <span class='varid'>t</span> <span class='varop'>||</span> <span class='varid'>isXmlMimeType</span> <span class='varid'>t</span> <span class='varop'>||</span> <span class='varid'>isHtmlMimeType</span> <span class='varid'>t</span><span class='layout'>)</span>+<a name="line-381"></a>+<a name="line-382"></a>    <span class='varid'>decodeArr</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-383"></a>    <span class='varid'>decodeArr</span> <span class='varid'>enc</span>+<a name="line-384"></a>	<span class='keyglyph'>=</span> <span class='varid'>maybe</span> <span class='varid'>notFound</span> <span class='varid'>found</span> <span class='varop'>.</span> <span class='varid'>getDecodingFct</span> <span class='varop'>$</span> <span class='varid'>enc</span>+<a name="line-385"></a>	<span class='keyword'>where</span>+<a name="line-386"></a>	<span class='varid'>found</span> <span class='varid'>df</span>+<a name="line-387"></a>	    <span class='keyglyph'>=</span> <span class='varid'>traceMsg</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"decodeDocument: encoding is "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>enc</span><span class='layout'>)</span>+<a name="line-388"></a>	      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-389"></a>	      <span class='layout'>(</span> <span class='varid'>decodeText</span> <span class='varid'>df</span> <span class='varop'>$&lt;</span> <span class='varid'>getAttrValue</span> <span class='varid'>a_ignore_encoding_errors</span> <span class='layout'>)</span>+<a name="line-390"></a>	      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-391"></a>	      <span class='varid'>addAttr</span> <span class='varid'>transferEncoding</span> <span class='varid'>enc</span>+<a name="line-392"></a>+<a name="line-393"></a>	<span class='varid'>notFound</span>+<a name="line-394"></a>	    <span class='keyglyph'>=</span> <span class='varid'>issueFatal</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'>enc</span><span class='layout'>)</span>+<a name="line-395"></a>	      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-396"></a>	      <span class='varid'>setDocumentStatusFromSystemState</span> <span class='str'>"decoding document"</span>+<a name="line-397"></a>+<a name="line-398"></a>	<span class='varid'>decodeText</span> <span class='varid'>df</span> <span class='varid'>ignoreErrs</span>+<a name="line-399"></a>	    <span class='keyglyph'>=</span> <span class='varid'>processChildren</span>+<a name="line-400"></a>	      <span class='layout'>(</span> <span class='varid'>getText</span>							<span class='comment'>-- get the document content</span>+<a name="line-401"></a>		<span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>arr</span> <span class='varid'>df</span>						<span class='comment'>-- decode the text, result is (string, [errMsg])</span>+<a name="line-402"></a>		<span class='varop'>&gt;&gt;&gt;</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='layout'>(</span><span class='varid'>normalizeNL</span> <span class='varop'>.</span> <span class='varid'>fst</span><span class='layout'>)</span> <span class='varop'>^&gt;&gt;</span> <span class='varid'>mkText</span> <span class='layout'>)</span>		<span class='comment'>-- take decoded string, normalize newline and build text node</span>+<a name="line-403"></a>		      <span class='varop'>&lt;+&gt;</span>+<a name="line-404"></a>		      <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>isTrueValue</span> <span class='varid'>ignoreErrs</span>+<a name="line-405"></a>			<span class='keyword'>then</span> <span class='varid'>none</span>					<span class='comment'>-- encoding errors are ignored</span>+<a name="line-406"></a>			<span class='keyword'>else</span>+<a name="line-407"></a>			<span class='layout'>(</span> <span class='varid'>arrL</span> <span class='varid'>snd</span>					<span class='comment'>-- take the error messages</span>+<a name="line-408"></a>			  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-409"></a>			  <span class='varid'>arr</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>enc</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='comment'>-- prefix with enc error</span>+<a name="line-410"></a>			  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-411"></a>			  <span class='varid'>applyA</span> <span class='layout'>(</span><span class='varid'>arr</span> <span class='varid'>issueErr</span><span class='layout'>)</span>				<span class='comment'>-- build issueErr arrow and apply</span>+<a name="line-412"></a>			  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-413"></a>			  <span class='varid'>none</span>						<span class='comment'>-- neccessary for type match with &lt;+&gt;</span>+<a name="line-414"></a>			<span class='layout'>)</span>+<a name="line-415"></a>		      <span class='layout'>)</span>+<a name="line-416"></a>		    <span class='layout'>)</span>+<a name="line-417"></a>	      <span class='layout'>)</span>+<a name="line-418"></a>      +<a name="line-419"></a><span class='comment'>-- ------------------------------------------------------------</span> </pre></body> </html>
doc/hdoc/src/Text-XML-HXT-Arrow-Edit.html view
@@ -745,16 +745,17 @@ <a name="line-737"></a><span class='definition'>addDoctypeDecl</span> <span class='varid'>rootElem</span> <span class='varid'>public</span> <span class='varid'>system</span> <a name="line-738"></a>    <span class='keyglyph'>=</span> <span class='varid'>fromLA</span> <span class='varop'>$</span> <a name="line-739"></a>      <span class='varid'>replaceChildren</span>-<a name="line-740"></a>      <span class='layout'>(</span> <span class='varid'>mkDTDDoctype</span> <span class='keyglyph'>[</span> <span class='layout'>(</span><span class='varid'>a_name</span><span class='layout'>,</span> <span class='varid'>rootElem</span><span class='layout'>)</span>-<a name="line-741"></a>		     <span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>k_public</span><span class='layout'>,</span> <span class='varid'>public</span><span class='layout'>)</span>-<a name="line-742"></a>		     <span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>k_system</span><span class='layout'>,</span> <span class='varid'>system</span><span class='layout'>)</span>-<a name="line-743"></a>		     <span class='keyglyph'>]</span> <span class='varid'>none</span>-<a name="line-744"></a>	<span class='varop'>&lt;+&gt;</span>-<a name="line-745"></a>	<span class='varid'>txt</span> <span class='str'>"\n"</span>-<a name="line-746"></a>	<span class='varop'>&lt;+&gt;</span>-<a name="line-747"></a>	<span class='varid'>getChildren</span>-<a name="line-748"></a>      <span class='layout'>)</span>-<a name="line-749"></a>-<a name="line-750"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-740"></a>      <span class='layout'>(</span> <span class='varid'>mkDTDDoctype</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>public</span> <span class='keyword'>then</span> <span class='varid'>id</span> <span class='keyword'>else</span> <span class='layout'>(</span> <span class='layout'>(</span><span class='varid'>k_public</span><span class='layout'>,</span> <span class='varid'>public</span><span class='layout'>)</span> <span class='conop'>:</span> <span class='layout'>)</span> <span class='layout'>)</span>+<a name="line-741"></a>		       <span class='varop'>.</span>+<a name="line-742"></a>		       <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>system</span> <span class='keyword'>then</span> <span class='varid'>id</span> <span class='keyword'>else</span> <span class='layout'>(</span> <span class='layout'>(</span><span class='varid'>k_system</span><span class='layout'>,</span> <span class='varid'>system</span><span class='layout'>)</span> <span class='conop'>:</span> <span class='layout'>)</span> <span class='layout'>)</span>+<a name="line-743"></a>		       <span class='varop'>$</span>  <span class='keyglyph'>[</span> <span class='layout'>(</span><span class='varid'>a_name</span><span class='layout'>,</span> <span class='varid'>rootElem</span><span class='layout'>)</span> <span class='keyglyph'>]</span>+<a name="line-744"></a>		     <span class='layout'>)</span> <span class='varid'>none</span>+<a name="line-745"></a>	<span class='varop'>&lt;+&gt;</span>+<a name="line-746"></a>	<span class='varid'>txt</span> <span class='str'>"\n"</span>+<a name="line-747"></a>	<span class='varop'>&lt;+&gt;</span>+<a name="line-748"></a>	<span class='varid'>getChildren</span>+<a name="line-749"></a>      <span class='layout'>)</span>+<a name="line-750"></a>+<a name="line-751"></a><span class='comment'>-- ------------------------------------------------------------</span> </pre></body> </html>
doc/hdoc/src/Text-XML-HXT-Arrow-Pickle-Xml.html view
@@ -48,513 +48,642 @@ <a name="line-40"></a><span class='keyword'>where</span> <a name="line-41"></a> <a name="line-42"></a><span class='keyword'>import</span>           <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>-<a name="line-43"></a>-<a name="line-44"></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'>Interface</span>-<a name="line-45"></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'>DOM</span><span class='varop'>.</span><span class='conid'>XmlNode</span> <span class='keyword'>as</span> <span class='conid'>XN</span>-<a name="line-46"></a>-<a name="line-47"></a><span class='keyword'>import</span>           <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>ListArrows</span>-<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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlArrow</span>-<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'>Arrow</span><span class='varop'>.</span><span class='conid'>Pickle</span><span class='varop'>.</span><span class='conid'>Schema</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><a name="St"></a><span class='keyword'>data</span> <span class='conid'>St</span>		<span class='keyglyph'>=</span> <span class='conid'>St</span> <span class='layout'>{</span> <span class='varid'>attributes</span> <span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>XmlTree</span><span class='keyglyph'>]</span>-<a name="line-54"></a>		     <span class='layout'>,</span> <span class='varid'>contents</span>   <span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>XmlTree</span><span class='keyglyph'>]</span>-<a name="line-55"></a>		     <span class='layout'>}</span>-<a name="line-56"></a>-<a name="line-57"></a><a name="PU"></a><span class='keyword'>data</span> <span class='conid'>PU</span> <span class='varid'>a</span>	<span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>::</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>St</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>St</span>-<a name="line-58"></a>		     <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>::</span> <span class='conid'>St</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='conid'>Maybe</span> <span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>St</span><span class='layout'>)</span>-<a name="line-59"></a>		     <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>::</span> <span class='conid'>Schema</span>-<a name="line-60"></a>		     <span class='layout'>}</span>-<a name="line-61"></a>-<a name="line-62"></a><a name="emptySt"></a><span class='definition'>emptySt</span>		<span class='keyglyph'>::</span> <span class='conid'>St</span>-<a name="line-63"></a><span class='definition'>emptySt</span>		<span class='keyglyph'>=</span>  <span class='conid'>St</span> <span class='layout'>{</span> <span class='varid'>attributes</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>-<a name="line-64"></a>		      <span class='layout'>,</span> <span class='varid'>contents</span>   <span class='keyglyph'>=</span> <span class='conid'>[]</span>-<a name="line-65"></a>		      <span class='layout'>}</span>-<a name="line-66"></a>-<a name="line-67"></a><a name="addAtt"></a><span class='definition'>addAtt</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>St</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>St</span>-<a name="line-68"></a><span class='definition'>addAtt</span> <span class='varid'>x</span> <span class='varid'>s</span>	<span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span><span class='varid'>attributes</span> <span class='keyglyph'>=</span> <span class='varid'>x</span> <span class='conop'>:</span> <span class='varid'>attributes</span> <span class='varid'>s</span><span class='layout'>}</span>-<a name="line-69"></a>-<a name="line-70"></a><a name="addCont"></a><span class='definition'>addCont</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>St</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>St</span>-<a name="line-71"></a><span class='definition'>addCont</span> <span class='varid'>x</span> <span class='varid'>s</span>	<span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span><span class='varid'>contents</span> <span class='keyglyph'>=</span> <span class='varid'>x</span> <span class='conop'>:</span> <span class='varid'>contents</span> <span class='varid'>s</span><span class='layout'>}</span>-<a name="line-72"></a>-<a name="line-73"></a><a name="dropCont"></a><span class='definition'>dropCont</span>	<span class='keyglyph'>::</span> <span class='conid'>St</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>St</span>-<a name="line-74"></a><span class='definition'>dropCont</span> <span class='varid'>s</span>	<span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>contents</span> <span class='keyglyph'>=</span> <span class='varid'>drop</span> <span class='num'>1</span> <span class='layout'>(</span><span class='varid'>contents</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='layout'>}</span>-<a name="line-75"></a>-<a name="line-76"></a><a name="getAtt"></a><span class='definition'>getAtt</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>St</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Maybe</span> <span class='conid'>XmlTree</span>-<a name="line-77"></a><span class='definition'>getAtt</span> <span class='varid'>name</span> <span class='varid'>s</span>-<a name="line-78"></a>    <span class='keyglyph'>=</span> <span class='varid'>listToMaybe</span> <span class='varop'>$</span>-<a name="line-79"></a>      <span class='varid'>runLA</span> <span class='layout'>(</span> <span class='varid'>arrL</span> <span class='varid'>attributes</span>-<a name="line-80"></a>	      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-81"></a>	      <span class='varid'>isAttr</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>hasName</span> <span class='varid'>name</span>-<a name="line-82"></a>	    <span class='layout'>)</span> <span class='varid'>s</span>-<a name="line-83"></a>-<a name="line-84"></a><a name="getCont"></a><span class='definition'>getCont</span>		<span class='keyglyph'>::</span> <span class='conid'>St</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Maybe</span> <span class='conid'>XmlTree</span>-<a name="line-85"></a><span class='definition'>getCont</span> <span class='varid'>s</span>	<span class='keyglyph'>=</span> <span class='varid'>listToMaybe</span> <span class='varop'>.</span> <span class='varid'>contents</span> <span class='varop'>$</span> <span class='varid'>s</span>-<a name="line-86"></a>-<a name="line-87"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-88"></a>-<a name="line-89"></a><span class='comment'>-- | conversion of an arbitrary value into an XML document tree.</span>-<a name="line-90"></a><span class='comment'>--</span>-<a name="line-91"></a><span class='comment'>-- The pickler, first parameter, controls the conversion process.</span>-<a name="line-92"></a><span class='comment'>-- Result is a complete document tree including a root node</span>-<a name="line-93"></a>-<a name="line-94"></a><a name="pickleDoc"></a><span class='definition'>pickleDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>-<a name="line-95"></a><span class='definition'>pickleDoc</span> <span class='varid'>p</span> <span class='varid'>v</span>-<a name="line-96"></a>    <span class='keyglyph'>=</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>mkRoot</span> <span class='layout'>(</span><span class='varid'>attributes</span> <span class='varid'>st</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>contents</span> <span class='varid'>st</span><span class='layout'>)</span>-<a name="line-97"></a>    <span class='keyword'>where</span>-<a name="line-98"></a>    <span class='varid'>st</span> <span class='keyglyph'>=</span> <span class='varid'>appPickle</span> <span class='varid'>p</span> <span class='layout'>(</span><span class='varid'>v</span><span class='layout'>,</span> <span class='varid'>emptySt</span><span class='layout'>)</span>-<a name="line-99"></a>-<a name="line-100"></a><span class='comment'>-- | Conversion of an XML document tree into an arbitrary data type</span>-<a name="line-101"></a><span class='comment'>--</span>-<a name="line-102"></a><span class='comment'>-- The inverse of 'pickleDoc'.</span>-<a name="line-103"></a><span class='comment'>-- This law should hold for all picklers: @ unpickle px . pickle px $ v == Just v @.</span>-<a name="line-104"></a><span class='comment'>-- Not every possible combination of picklers make sense.</span>-<a name="line-105"></a><span class='comment'>-- For reconverting a value from an XML tree, is becomes neccessary,</span>-<a name="line-106"></a><span class='comment'>-- to introduce \"enough\" markup for unpickling the value</span>-<a name="line-107"></a>-<a name="line-108"></a><a name="unpickleDoc"></a><span class='definition'>unpickleDoc</span> <span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Maybe</span> <span class='varid'>a</span>-<a name="line-109"></a><span class='definition'>unpickleDoc</span> <span class='varid'>p</span> <span class='varid'>t</span>-<a name="line-110"></a>    <span class='keyglyph'>|</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>isRoot</span> <span class='varid'>t</span>-<a name="line-111"></a>	<span class='keyglyph'>=</span> <span class='varid'>fst</span> <span class='varop'>.</span> <span class='varid'>appUnPickle</span> <span class='varid'>p</span> <span class='varop'>$</span> <span class='conid'>St</span> <span class='layout'>{</span> <span class='varid'>attributes</span> <span class='keyglyph'>=</span> <span class='varid'>fromJust</span> <span class='varop'>.</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>getAttrl</span> <span class='varop'>$</span>  <span class='varid'>t</span>-<a name="line-112"></a>				   <span class='layout'>,</span> <span class='varid'>contents</span>   <span class='keyglyph'>=</span>            <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>getChildren</span> <span class='varid'>t</span>-<a name="line-113"></a>				   <span class='layout'>}</span>-<a name="line-114"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>-<a name="line-115"></a>	<span class='keyglyph'>=</span> <span class='conid'>Nothing</span>-<a name="line-116"></a>-<a name="line-117"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-118"></a>-<a name="line-119"></a><span class='comment'>-- | The zero pickler</span>-<a name="line-120"></a><span class='comment'>--</span>-<a name="line-121"></a><span class='comment'>-- Encodes nothing, fails always during unpickling</span>-<a name="line-122"></a>-<a name="line-123"></a><a name="xpZero"></a><span class='definition'>xpZero</span>			<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span>-<a name="line-124"></a><span class='definition'>xpZero</span>			<span class='keyglyph'>=</span>  <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</span> <span class='varid'>snd</span>-<a name="line-125"></a>			      <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='conid'>Nothing</span><span class='layout'>,</span> <span class='varid'>s</span><span class='layout'>)</span>-<a name="line-126"></a>			      <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>scNull</span>-<a name="line-127"></a>			      <span class='layout'>}</span>-<a name="line-128"></a>-<a name="line-129"></a><span class='comment'>-- unit pickler</span>-<a name="line-130"></a>-<a name="line-131"></a><a name="xpUnit"></a><span class='definition'>xpUnit</span>			<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='conid'>()</span>-<a name="line-132"></a><span class='definition'>xpUnit</span>			<span class='keyglyph'>=</span> <span class='varid'>xpLift</span> <span class='conid'>()</span>-<a name="line-133"></a>-<a name="line-134"></a><span class='comment'>-- | Lift a value to a pickler</span>-<a name="line-135"></a><span class='comment'>--</span>-<a name="line-136"></a><span class='comment'>-- When pickling, nothing is encoded, when unpickling, the given value is inserted.</span>-<a name="line-137"></a><span class='comment'>-- This pickler always succeeds.</span>-<a name="line-138"></a>-<a name="line-139"></a><a name="xpLift"></a><span class='definition'>xpLift</span>			<span class='keyglyph'>::</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span>-<a name="line-140"></a><span class='definition'>xpLift</span> <span class='varid'>x</span>		<span class='keyglyph'>=</span>  <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</span> <span class='varid'>snd</span>-<a name="line-141"></a>			      <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>x</span><span class='layout'>,</span> <span class='varid'>s</span><span class='layout'>)</span>-<a name="line-142"></a>			      <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>scEmpty</span>-<a name="line-143"></a>			      <span class='layout'>}</span>-<a name="line-144"></a>-<a name="line-145"></a><span class='comment'>-- | Lift a Maybe value to a pickler.</span>-<a name="line-146"></a><span class='comment'>--</span>-<a name="line-147"></a><span class='comment'>-- @Nothing@ is mapped to the zero pickler, @Just x@ is pickled with @xpLift x@.</span>-<a name="line-148"></a>-<a name="line-149"></a><a name="xpLiftMaybe"></a><span class='definition'>xpLiftMaybe</span>		<span class='keyglyph'>::</span> <span class='conid'>Maybe</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span>-<a name="line-150"></a><span class='definition'>xpLiftMaybe</span> <span class='varid'>v</span>		<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>xpLiftMaybe'</span> <span class='varid'>v</span><span class='layout'>)</span> <span class='layout'>{</span> <span class='varid'>theSchema</span> <span class='keyglyph'>=</span> <span class='varid'>scOption</span> <span class='varid'>scEmpty</span> <span class='layout'>}</span>-<a name="line-151"></a>    <span class='keyword'>where</span>-<a name="line-152"></a>    <span class='varid'>xpLiftMaybe'</span> <span class='conid'>Nothing</span>	<span class='keyglyph'>=</span> <span class='varid'>xpZero</span>-<a name="line-153"></a>    <span class='varid'>xpLiftMaybe'</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>x</span><span class='layout'>)</span> 	<span class='keyglyph'>=</span> <span class='varid'>xpLift</span> <span class='varid'>x</span>-<a name="line-154"></a>-<a name="line-155"></a>-<a name="line-156"></a><span class='comment'>-- | pickle\/unpickle combinator for sequence and choice.</span>-<a name="line-157"></a><span class='comment'>--</span>-<a name="line-158"></a><span class='comment'>-- When the first unpickler fails,</span>-<a name="line-159"></a><span class='comment'>-- the second one is taken, else the third one configured with the result from the first</span>-<a name="line-160"></a><span class='comment'>-- is taken. This pickler is a generalisation for 'xpSeq' and 'xpChoice' .</span>-<a name="line-161"></a><span class='comment'>--</span>-<a name="line-162"></a><span class='comment'>-- The schema must be attached later, e.g. in xpPair or other higher level combinators</span>-<a name="line-163"></a>-<a name="line-164"></a><a name="xpCondSeq"></a><span class='definition'>xpCondSeq</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span>-<a name="line-165"></a><span class='definition'>xpCondSeq</span> <span class='varid'>pd</span> <span class='varid'>f</span> <span class='varid'>pa</span> <span class='varid'>k</span>-<a name="line-166"></a>    <span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>-<a name="line-167"></a>	                   <span class='keyword'>let</span>-<a name="line-168"></a>			   <span class='varid'>a</span>  <span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varid'>b</span>-<a name="line-169"></a>			   <span class='varid'>pb</span> <span class='keyglyph'>=</span> <span class='varid'>k</span> <span class='varid'>a</span>-<a name="line-170"></a>			   <span class='keyword'>in</span>-<a name="line-171"></a>			   <span class='varid'>appPickle</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>appPickle</span> <span class='varid'>pb</span> <span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='varid'>s</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>-<a name="line-172"></a>			 <span class='layout'>)</span>-<a name="line-173"></a>	 <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span>-<a name="line-174"></a>			   <span class='keyword'>let</span>-<a name="line-175"></a>			   <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='varid'>s'</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>appUnPickle</span> <span class='varid'>pa</span> <span class='varid'>s</span>-<a name="line-176"></a>			   <span class='keyword'>in</span>-<a name="line-177"></a>			   <span class='keyword'>case</span> <span class='varid'>a</span> <span class='keyword'>of</span>-<a name="line-178"></a>			   <span class='conid'>Nothing</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>appUnPickle</span> <span class='varid'>pd</span>     <span class='varid'>s</span>-<a name="line-179"></a>			   <span class='conid'>Just</span> <span class='varid'>a'</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>appUnPickle</span> <span class='layout'>(</span><span class='varid'>k</span> <span class='varid'>a'</span><span class='layout'>)</span> <span class='varid'>s'</span>-<a name="line-180"></a>			 <span class='layout'>)</span>-<a name="line-181"></a>	 <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>undefined</span>-<a name="line-182"></a>	 <span class='layout'>}</span>-<a name="line-183"></a>-<a name="line-184"></a>-<a name="line-185"></a><span class='comment'>-- | Combine two picklers sequentially.</span>-<a name="line-186"></a><span class='comment'>--</span>-<a name="line-187"></a><span class='comment'>-- If the first fails during</span>-<a name="line-188"></a><span class='comment'>-- unpickling, the whole unpickler fails</span>-<a name="line-189"></a>-<a name="line-190"></a><a name="xpSeq"></a><span class='definition'>xpSeq</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span>-<a name="line-191"></a><span class='definition'>xpSeq</span>	<span class='keyglyph'>=</span> <span class='varid'>xpCondSeq</span> <span class='varid'>xpZero</span>-<a name="line-192"></a>-<a name="line-193"></a>-<a name="line-194"></a><span class='comment'>-- | combine tow picklers with a choice</span>-<a name="line-195"></a><span class='comment'>--</span>-<a name="line-196"></a><span class='comment'>-- Run two picklers in sequence like with xpSeq.</span>-<a name="line-197"></a><span class='comment'>-- When during unpickling the first one fails,</span>-<a name="line-198"></a><span class='comment'>-- an alternative pickler (first argument) is applied.</span>-<a name="line-199"></a><span class='comment'>-- This pickler only is used as combinator for unpickling.</span>-<a name="line-200"></a> -<a name="line-201"></a><a name="xpChoice"></a><span class='definition'>xpChoice</span>		<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span>-<a name="line-202"></a><span class='definition'>xpChoice</span> <span class='varid'>pb</span>	<span class='keyglyph'>=</span> <span class='varid'>xpCondSeq</span> <span class='varid'>pb</span> <span class='varid'>undefined</span>-<a name="line-203"></a>-<a name="line-204"></a>-<a name="line-205"></a><span class='comment'>-- | map value into another domain and apply pickler there</span>-<a name="line-206"></a><span class='comment'>--</span>-<a name="line-207"></a><span class='comment'>-- One of the most often used picklers.</span>-<a name="line-208"></a>-<a name="line-209"></a><a name="xpWrap"></a><span class='definition'>xpWrap</span>			<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>b</span><span class='layout'>,</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span>-<a name="line-210"></a><span class='definition'>xpWrap</span> <span class='layout'>(</span><span class='varid'>i</span><span class='layout'>,</span> <span class='varid'>j</span><span class='layout'>)</span> <span class='varid'>pa</span>	<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>xpSeq</span> <span class='varid'>j</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>xpLift</span> <span class='varop'>.</span> <span class='varid'>i</span><span class='layout'>)</span><span class='layout'>)</span> <span class='layout'>{</span> <span class='varid'>theSchema</span> <span class='keyglyph'>=</span> <span class='varid'>theSchema</span> <span class='varid'>pa</span> <span class='layout'>}</span>-<a name="line-211"></a>-<a name="line-212"></a><span class='comment'>-- | like 'xpWrap', but if the inverse mapping is undefined, the unpickler fails</span>-<a name="line-213"></a><span class='comment'>--</span>-<a name="line-214"></a><span class='comment'>-- Map a value into another domain. If the inverse mapping is</span>-<a name="line-215"></a><span class='comment'>-- undefined (Nothing), the unpickler fails</span>-<a name="line-216"></a>-<a name="line-217"></a><a name="xpWrapMaybe"></a><span class='definition'>xpWrapMaybe</span>		<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Maybe</span> <span class='varid'>b</span><span class='layout'>,</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span>-<a name="line-218"></a><span class='definition'>xpWrapMaybe</span> <span class='layout'>(</span><span class='varid'>i</span><span class='layout'>,</span> <span class='varid'>j</span><span class='layout'>)</span> <span class='varid'>pa</span>	<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>xpSeq</span> <span class='varid'>j</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>xpLiftMaybe</span> <span class='varop'>.</span> <span class='varid'>i</span><span class='layout'>)</span><span class='layout'>)</span> <span class='layout'>{</span> <span class='varid'>theSchema</span> <span class='keyglyph'>=</span> <span class='varid'>theSchema</span> <span class='varid'>pa</span> <span class='layout'>}</span>-<a name="line-219"></a>-<a name="line-220"></a><span class='comment'>-- | pickle a pair of values sequentially</span>-<a name="line-221"></a><span class='comment'>--</span>-<a name="line-222"></a><span class='comment'>-- Used for pairs or together with wrap for pickling</span>-<a name="line-223"></a><span class='comment'>-- algebraic data types with two components</span>-<a name="line-224"></a>-<a name="line-225"></a><a name="xpPair"></a><span class='definition'>xpPair</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='varid'>b</span><span class='layout'>)</span>-<a name="line-226"></a><span class='definition'>xpPair</span> <span class='varid'>pa</span> <span class='varid'>pb</span>-<a name="line-227"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>xpSeq</span> <span class='varid'>fst</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span>-<a name="line-228"></a>        <span class='varid'>xpSeq</span> <span class='varid'>snd</span> <span class='varid'>pb</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span>-<a name="line-229"></a>        <span class='varid'>xpLift</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='layout'>)</span><span class='layout'>)</span>-<a name="line-230"></a>      <span class='layout'>)</span> <span class='layout'>{</span> <span class='varid'>theSchema</span> <span class='keyglyph'>=</span> <span class='varid'>scSeq</span> <span class='layout'>(</span><span class='varid'>theSchema</span> <span class='varid'>pa</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>theSchema</span> <span class='varid'>pb</span><span class='layout'>)</span> <span class='layout'>}</span>-<a name="line-231"></a>-<a name="line-232"></a><span class='comment'>-- | Like 'xpPair' but for triples</span>-<a name="line-233"></a>-<a name="line-234"></a><a name="xpTriple"></a><span class='definition'>xpTriple</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</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-235"></a><span class='definition'>xpTriple</span> <span class='varid'>pa</span> <span class='varid'>pb</span> <span class='varid'>pc</span>-<a name="line-236"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpWrap</span> <span class='layout'>(</span><span class='varid'>toTriple</span><span class='layout'>,</span> <span class='varid'>fromTriple</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pb</span> <span class='varid'>pc</span><span class='layout'>)</span><span class='layout'>)</span>-<a name="line-237"></a>    <span class='keyword'>where</span>-<a name="line-238"></a>    <span class='varid'>toTriple</span>   <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='varid'>c</span><span class='layout'>)</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'>b</span><span class='layout'>,</span> <span class='varid'>c</span> <span class='layout'>)</span>-<a name="line-239"></a>    <span class='varid'>fromTriple</span> <span class='keyglyph'>~</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> <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='varid'>c</span><span class='layout'>)</span><span class='layout'>)</span>-<a name="line-240"></a>-<a name="line-241"></a><span class='comment'>-- | Like 'xpPair' and 'xpTriple' but for 4-tuples</span>-<a name="line-242"></a>-<a name="line-243"></a><a name="xp4Tuple"></a><span class='definition'>xp4Tuple</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>d</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</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> <span class='varid'>d</span><span class='layout'>)</span>-<a name="line-244"></a><span class='definition'>xp4Tuple</span> <span class='varid'>pa</span> <span class='varid'>pb</span> <span class='varid'>pc</span> <span class='varid'>pd</span>-<a name="line-245"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpWrap</span> <span class='layout'>(</span><span class='varid'>toQuad</span><span class='layout'>,</span> <span class='varid'>fromQuad</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pb</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pc</span> <span class='varid'>pd</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>-<a name="line-246"></a>    <span class='keyword'>where</span>-<a name="line-247"></a>    <span class='varid'>toQuad</span>   <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>c</span><span class='layout'>,</span> <span class='varid'>d</span><span class='layout'>)</span><span class='layout'>)</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'>b</span><span class='layout'>,</span>  <span class='varid'>c</span><span class='layout'>,</span> <span class='varid'>d</span>  <span class='layout'>)</span>-<a name="line-248"></a>    <span class='varid'>fromQuad</span> <span class='keyglyph'>~</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> <span class='varid'>d</span>  <span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>c</span><span class='layout'>,</span> <span class='varid'>d</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>-<a name="line-249"></a>-<a name="line-250"></a><span class='comment'>-- | Like 'xpPair' and 'xpTriple' but for 5-tuples</span>-<a name="line-251"></a>-<a name="line-252"></a><a name="xp5Tuple"></a><span class='definition'>xp5Tuple</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>d</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>e</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</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> <span class='varid'>d</span><span class='layout'>,</span> <span class='varid'>e</span><span class='layout'>)</span>-<a name="line-253"></a><span class='definition'>xp5Tuple</span> <span class='varid'>pa</span> <span class='varid'>pb</span> <span class='varid'>pc</span> <span class='varid'>pd</span> <span class='varid'>pe</span>-<a name="line-254"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpWrap</span> <span class='layout'>(</span><span class='varid'>toQuint</span><span class='layout'>,</span> <span class='varid'>fromQuint</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pb</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pc</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pd</span> <span class='varid'>pe</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>-<a name="line-255"></a>    <span class='keyword'>where</span>-<a name="line-256"></a>    <span class='varid'>toQuint</span>   <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>c</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>d</span><span class='layout'>,</span> <span class='varid'>e</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</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'>b</span><span class='layout'>,</span>  <span class='varid'>c</span><span class='layout'>,</span>  <span class='varid'>d</span><span class='layout'>,</span> <span class='varid'>e</span>   <span class='layout'>)</span>-<a name="line-257"></a>    <span class='varid'>fromQuint</span> <span class='keyglyph'>~</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>   <span class='varid'>d</span><span class='layout'>,</span> <span class='varid'>e</span>   <span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>c</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>d</span><span class='layout'>,</span> <span class='varid'>e</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>-<a name="line-258"></a>-<a name="line-259"></a><span class='comment'>-- | Like 'xpPair' and 'xpTriple' but for 6-tuples</span>-<a name="line-260"></a>-<a name="line-261"></a><a name="xp6Tuple"></a><span class='definition'>xp6Tuple</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>d</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>e</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>f</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</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> <span class='varid'>d</span><span class='layout'>,</span> <span class='varid'>e</span><span class='layout'>,</span> <span class='varid'>f</span><span class='layout'>)</span>-<a name="line-262"></a><span class='definition'>xp6Tuple</span> <span class='varid'>pa</span> <span class='varid'>pb</span> <span class='varid'>pc</span> <span class='varid'>pd</span> <span class='varid'>pe</span> <span class='varid'>pf</span>-<a name="line-263"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpWrap</span> <span class='layout'>(</span><span class='varid'>toSix</span><span class='layout'>,</span> <span class='varid'>fromSix</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pb</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pc</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pd</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pe</span> <span class='varid'>pf</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>-<a name="line-264"></a>    <span class='keyword'>where</span>-<a name="line-265"></a>    <span class='varid'>toSix</span>   <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>c</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>d</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>e</span><span class='layout'>,</span> <span class='varid'>f</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</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'>b</span><span class='layout'>,</span>  <span class='varid'>c</span><span class='layout'>,</span>  <span class='varid'>d</span><span class='layout'>,</span>  <span class='varid'>e</span><span class='layout'>,</span> <span class='varid'>f</span>    <span class='layout'>)</span>-<a name="line-266"></a>    <span class='varid'>fromSix</span> <span class='keyglyph'>~</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>   <span class='varid'>d</span><span class='layout'>,</span>   <span class='varid'>e</span><span class='layout'>,</span> <span class='varid'>f</span><span class='layout'>)</span>     <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>c</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>d</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>e</span><span class='layout'>,</span> <span class='varid'>f</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>-<a name="line-267"></a>-<a name="line-268"></a><span class='comment'>-- | Pickle a string into an XML text node</span>-<a name="line-269"></a><span class='comment'>--</span>-<a name="line-270"></a><span class='comment'>-- One of the most often used primitive picklers. Attention:</span>-<a name="line-271"></a><span class='comment'>-- For pickling empty strings use 'xpText0'. If the text has a more</span>-<a name="line-272"></a><span class='comment'>-- specific datatype than xsd:string, use 'xpTextDT'</span>-<a name="line-273"></a>-<a name="line-274"></a><a name="xpText"></a><span class='definition'>xpText</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='conid'>String</span>-<a name="line-275"></a><span class='definition'>xpText</span>	<span class='keyglyph'>=</span> <span class='varid'>xpTextDT</span> <span class='varid'>scString1</span>-<a name="line-276"></a>-<a name="line-277"></a><span class='comment'>-- | Pickle a string into an XML text node</span>-<a name="line-278"></a><span class='comment'>--</span>-<a name="line-279"></a><span class='comment'>-- Text pickler with a description of the structure of the text</span>-<a name="line-280"></a><span class='comment'>-- by a schema. A schema for a data type can be defined by 'Text.XML.HXT.Arrow.Pickle.Schema.scDT'.</span>-<a name="line-281"></a><span class='comment'>-- In 'Text.XML.HXT.Arrow.Pickle.Schema' there are some more functions for creating</span>-<a name="line-282"></a><span class='comment'>-- simple datatype descriptions.</span>-<a name="line-283"></a>-<a name="line-284"></a><a name="xpTextDT"></a><span class='definition'>xpTextDT</span>	<span class='keyglyph'>::</span> <span class='conid'>Schema</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='conid'>String</span>-<a name="line-285"></a><span class='definition'>xpTextDT</span> <span class='varid'>sc</span>-<a name="line-286"></a>    <span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>s</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>addCont</span> <span class='layout'>(</span><span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>mkText</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='varid'>st</span>-<a name="line-287"></a>	 <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>st</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>fromMaybe</span> <span class='layout'>(</span><span class='conid'>Nothing</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>unpickleString</span> <span class='varid'>st</span><span class='layout'>)</span>-<a name="line-288"></a>	 <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>sc</span>-<a name="line-289"></a>	 <span class='layout'>}</span>-<a name="line-290"></a>    <span class='keyword'>where</span>-<a name="line-291"></a>    <span class='varid'>unpickleString</span> <span class='varid'>st</span>-<a name="line-292"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-293"></a>	  <span class='varid'>t</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getCont</span> <span class='varid'>st</span>-<a name="line-294"></a>	  <span class='varid'>s</span> <span class='keyglyph'>&lt;-</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>getText</span> <span class='varid'>t</span>-<a name="line-295"></a>	  <span class='varid'>return</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>s</span><span class='layout'>,</span> <span class='varid'>dropCont</span> <span class='varid'>st</span><span class='layout'>)</span>-<a name="line-296"></a>-<a name="line-297"></a><span class='comment'>-- | Pickle a possibly empty string into an XML node.</span>-<a name="line-298"></a><span class='comment'>--</span>-<a name="line-299"></a><span class='comment'>-- Must be used in all places, where empty strings are legal values.</span>-<a name="line-300"></a><span class='comment'>-- If the content of an element can be an empty string, this string disapears</span>-<a name="line-301"></a><span class='comment'>-- during storing the DOM into a document and reparse the document.</span>-<a name="line-302"></a><span class='comment'>-- So the empty text node becomes nothing, and the pickler must deliver an empty string,</span>-<a name="line-303"></a><span class='comment'>-- if there is no text node in the document.</span>-<a name="line-304"></a>-<a name="line-305"></a><a name="xpText0"></a><span class='definition'>xpText0</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='conid'>String</span>-<a name="line-306"></a><span class='definition'>xpText0</span>	<span class='keyglyph'>=</span> <span class='varid'>xpText0DT</span> <span class='varid'>scString1</span>-<a name="line-307"></a>-<a name="line-308"></a><span class='comment'>-- | Pickle a possibly empty string with a datatype description into an XML node.</span>-<a name="line-309"></a><span class='comment'>--</span>-<a name="line-310"></a><span class='comment'>-- Like 'xpText0' but with extra Parameter for datatype description as in 'xpTextDT'.</span>-<a name="line-311"></a>-<a name="line-312"></a><a name="xpText0DT"></a><span class='definition'>xpText0DT</span>	<span class='keyglyph'>::</span> <span class='conid'>Schema</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='conid'>String</span>-<a name="line-313"></a><span class='definition'>xpText0DT</span> <span class='varid'>sc</span>-<a name="line-314"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpWrap</span> <span class='layout'>(</span><span class='varid'>fromMaybe</span> <span class='str'>""</span><span class='layout'>,</span> <span class='varid'>emptyToNothing</span><span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>xpOption</span> <span class='varop'>$</span> <span class='varid'>xpTextDT</span> <span class='varid'>sc</span>-<a name="line-315"></a>    <span class='keyword'>where</span>-<a name="line-316"></a>    <span class='varid'>emptyToNothing</span> <span class='str'>""</span> <span class='keyglyph'>=</span> <span class='conid'>Nothing</span>-<a name="line-317"></a>    <span class='varid'>emptyToNothing</span> <span class='varid'>x</span>  <span class='keyglyph'>=</span> <span class='conid'>Just</span> <span class='varid'>x</span>-<a name="line-318"></a>-<a name="line-319"></a><span class='comment'>-- | Pickle an arbitrary value by applyling show during pickling</span>-<a name="line-320"></a><span class='comment'>-- and read during unpickling.</span>-<a name="line-321"></a><span class='comment'>--</span>-<a name="line-322"></a><span class='comment'>-- Real pickling is then done with 'xpText'.</span>-<a name="line-323"></a><span class='comment'>-- One of the most often used pimitive picklers. Applicable for all</span>-<a name="line-324"></a><span class='comment'>-- types which are instances of @Read@ and @Show@</span>-<a name="line-325"></a>-<a name="line-326"></a><a name="xpPrim"></a><span class='definition'>xpPrim</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Read</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'>PU</span> <span class='varid'>a</span>-<a name="line-327"></a><span class='definition'>xpPrim</span>-<a name="line-328"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpWrapMaybe</span> <span class='layout'>(</span><span class='varid'>readMaybe</span><span class='layout'>,</span> <span class='varid'>show</span><span class='layout'>)</span> <span class='varid'>xpText</span>-<a name="line-329"></a>    <span class='keyword'>where</span>-<a name="line-330"></a>    <span class='varid'>readMaybe</span>	<span class='keyglyph'>::</span> <span class='conid'>Read</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Maybe</span> <span class='varid'>a</span>-<a name="line-331"></a>    <span class='varid'>readMaybe</span> <span class='varid'>str</span>-<a name="line-332"></a>	<span class='keyglyph'>=</span> <span class='varid'>val</span> <span class='layout'>(</span><span class='varid'>reads</span> <span class='varid'>str</span><span class='layout'>)</span>-<a name="line-333"></a>	<span class='keyword'>where</span>-<a name="line-334"></a>	<span class='varid'>val</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='varid'>x</span><span class='layout'>,</span><span class='str'>""</span><span class='layout'>)</span><span class='keyglyph'>]</span> <span class='keyglyph'>=</span> <span class='conid'>Just</span> <span class='varid'>x</span>-<a name="line-335"></a>	<span class='varid'>val</span> <span class='keyword'>_</span>        <span class='keyglyph'>=</span> <span class='conid'>Nothing</span>-<a name="line-336"></a>-<a name="line-337"></a><span class='comment'>-- | Pickle an XmlTree by just adding it</span>-<a name="line-338"></a><span class='comment'>--</span>-<a name="line-339"></a><span class='comment'>-- Usefull for components of type XmlTree in other data structures</span>-<a name="line-340"></a>-<a name="line-341"></a><a name="xpTree"></a><span class='definition'>xpTree</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='conid'>XmlTree</span>-<a name="line-342"></a><span class='definition'>xpTree</span>	<span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>s</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>addCont</span> <span class='varid'>s</span> <span class='varid'>st</span>-<a name="line-343"></a>	     <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>st</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>fromMaybe</span> <span class='layout'>(</span><span class='conid'>Nothing</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>unpickleTree</span> <span class='varid'>st</span><span class='layout'>)</span>-<a name="line-344"></a>	     <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='conid'>Any</span>-<a name="line-345"></a>	     <span class='layout'>}</span>-<a name="line-346"></a>    <span class='keyword'>where</span>-<a name="line-347"></a>    <span class='varid'>unpickleTree</span> <span class='varid'>st</span>-<a name="line-348"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-349"></a>	  <span class='varid'>t</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getCont</span> <span class='varid'>st</span>-<a name="line-350"></a>	  <span class='varid'>return</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>t</span><span class='layout'>,</span> <span class='varid'>dropCont</span> <span class='varid'>st</span><span class='layout'>)</span>-<a name="line-351"></a>-<a name="line-352"></a><span class='comment'>-- | Encoding of optional data by ignoring the Nothing case during pickling</span>-<a name="line-353"></a><span class='comment'>-- and relying on failure during unpickling to recompute the Nothing case</span>-<a name="line-354"></a><span class='comment'>--</span>-<a name="line-355"></a><span class='comment'>-- The default pickler for Maybe types</span>-<a name="line-356"></a>-<a name="line-357"></a><a name="xpOption"></a><span class='definition'>xpOption</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='layout'>(</span><span class='conid'>Maybe</span> <span class='varid'>a</span><span class='layout'>)</span>-<a name="line-358"></a><span class='definition'>xpOption</span> <span class='varid'>pa</span>-<a name="line-359"></a>    <span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</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'>st</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>-<a name="line-360"></a>			   <span class='keyword'>case</span> <span class='varid'>a</span> <span class='keyword'>of</span>-<a name="line-361"></a>			   <span class='conid'>Nothing</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>st</span>-<a name="line-362"></a>			   <span class='conid'>Just</span> <span class='varid'>x</span>  <span class='keyglyph'>-&gt;</span> <span class='varid'>appPickle</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>x</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span>-<a name="line-363"></a>			 <span class='layout'>)</span>-<a name="line-364"></a>-<a name="line-365"></a>	 <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='varid'>appUnPickle</span> <span class='varop'>$</span>-<a name="line-366"></a>	                 <span class='varid'>xpChoice</span> <span class='layout'>(</span><span class='varid'>xpLift</span> <span class='conid'>Nothing</span><span class='layout'>)</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>xpLift</span> <span class='varop'>.</span> <span class='conid'>Just</span><span class='layout'>)</span>-<a name="line-367"></a>-<a name="line-368"></a>         <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>scOption</span> <span class='layout'>(</span><span class='varid'>theSchema</span> <span class='varid'>pa</span><span class='layout'>)</span>-<a name="line-369"></a>	 <span class='layout'>}</span>-<a name="line-370"></a>-<a name="line-371"></a><span class='comment'>-- | Encoding of list values by pickling all list elements sequentially.</span>-<a name="line-372"></a><span class='comment'>--</span>-<a name="line-373"></a><span class='comment'>-- Unpickler relies on failure for detecting the end of the list.</span>-<a name="line-374"></a><span class='comment'>-- The standard pickler for lists. Can also be used in combination with 'xpWrap'</span>-<a name="line-375"></a><span class='comment'>-- for constructing set and map picklers</span>-<a name="line-376"></a>-<a name="line-377"></a><a name="xpList"></a><span class='definition'>xpList</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='keyglyph'>[</span><span class='varid'>a</span><span class='keyglyph'>]</span>-<a name="line-378"></a><span class='definition'>xpList</span> <span class='varid'>pa</span>-<a name="line-379"></a>    <span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</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'>st</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>-<a name="line-380"></a>			   <span class='keyword'>case</span> <span class='varid'>a</span> <span class='keyword'>of</span>-<a name="line-381"></a>			   <span class='conid'>[]</span>  <span class='keyglyph'>-&gt;</span> <span class='varid'>st</span>-<a name="line-382"></a>			   <span class='keyword'>_</span><span class='conop'>:</span><span class='keyword'>_</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>appPickle</span> <span class='varid'>pc</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span>-<a name="line-383"></a>			 <span class='layout'>)</span>-<a name="line-384"></a>	 <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='varid'>appUnPickle</span> <span class='varop'>$</span>-<a name="line-385"></a>                         <span class='varid'>xpChoice</span> <span class='layout'>(</span><span class='varid'>xpLift</span> <span class='conid'>[]</span><span class='layout'>)</span> <span class='varid'>pa</span>-<a name="line-386"></a>	                   <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>x</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>xpSeq</span> <span class='varid'>id</span> <span class='layout'>(</span><span class='varid'>xpList</span> <span class='varid'>pa</span><span class='layout'>)</span> <span class='layout'>(</span><span class='keyglyph'>\</span><span class='varid'>xs</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>xpLift</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='layout'>)</span><span class='layout'>)</span>-<a name="line-387"></a>-<a name="line-388"></a>	 <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>scList</span> <span class='layout'>(</span><span class='varid'>theSchema</span> <span class='varid'>pa</span><span class='layout'>)</span>-<a name="line-389"></a>	 <span class='layout'>}</span>-<a name="line-390"></a>      <span class='keyword'>where</span>-<a name="line-391"></a>      <span class='varid'>pc</span> <span class='keyglyph'>=</span> <span class='varid'>xpSeq</span> <span class='varid'>head</span>  <span class='varid'>pa</span>       <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>x</span> <span class='keyglyph'>-&gt;</span>-<a name="line-392"></a>	   <span class='varid'>xpSeq</span> <span class='varid'>tail</span> <span class='layout'>(</span><span class='varid'>xpList</span> <span class='varid'>pa</span><span class='layout'>)</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>xs</span> <span class='keyglyph'>-&gt;</span>-<a name="line-393"></a>	   <span class='varid'>xpLift</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='layout'>)</span><span class='layout'>)</span>-<a name="line-394"></a>-<a name="line-395"></a><span class='comment'>-- | Encoding of a none empty list of values</span>-<a name="line-396"></a><span class='comment'>--</span>-<a name="line-397"></a><span class='comment'>-- Attention: when calling this pickler with an empty list,</span>-<a name="line-398"></a><span class='comment'>-- an internal error \"head of empty list is raised\".</span>-<a name="line-399"></a>-<a name="line-400"></a><a name="xpList1"></a><span class='definition'>xpList1</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='keyglyph'>[</span><span class='varid'>a</span><span class='keyglyph'>]</span>-<a name="line-401"></a><span class='definition'>xpList1</span> <span class='varid'>pa</span>-<a name="line-402"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>xpWrap</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>x</span><span class='layout'>,</span> <span class='varid'>xs</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>x</span> <span class='conop'>:</span> <span class='varid'>xs</span>-<a name="line-403"></a>	       <span class='layout'>,</span><span class='keyglyph'>\</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'>-&gt;</span> <span class='layout'>(</span><span class='varid'>x</span><span class='layout'>,</span> <span class='varid'>xs</span><span class='layout'>)</span>-<a name="line-404"></a>	       <span class='layout'>)</span> <span class='varop'>$</span>-<a name="line-405"></a>	<span class='varid'>xpPair</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>xpList</span> <span class='varid'>pa</span><span class='layout'>)</span>-<a name="line-406"></a>      <span class='layout'>)</span> <span class='layout'>{</span> <span class='varid'>theSchema</span> <span class='keyglyph'>=</span> <span class='varid'>scList1</span> <span class='layout'>(</span><span class='varid'>theSchema</span> <span class='varid'>pa</span><span class='layout'>)</span> <span class='layout'>}</span>-<a name="line-407"></a>-<a name="line-408"></a><span class='comment'>-- | Pickler for sum data types.</span>-<a name="line-409"></a><span class='comment'>--</span>-<a name="line-410"></a><span class='comment'>-- Every constructor is mapped to an index into the list of picklers.</span>-<a name="line-411"></a><span class='comment'>-- The index is used only during pickling, not during unpickling, there the 1. match is taken</span>-<a name="line-412"></a>-<a name="line-413"></a><a name="xpAlt"></a><span class='definition'>xpAlt</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Int</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>PU</span> <span class='varid'>a</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span>-<a name="line-414"></a><span class='definition'>xpAlt</span> <span class='varid'>tag</span> <span class='varid'>ps</span>-<a name="line-415"></a>    <span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</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'>st</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>-<a name="line-416"></a>			   <span class='keyword'>let</span>-<a name="line-417"></a>			   <span class='varid'>pa</span> <span class='keyglyph'>=</span> <span class='varid'>ps</span> <span class='varop'>!!</span> <span class='layout'>(</span><span class='varid'>tag</span> <span class='varid'>a</span><span class='layout'>)</span>-<a name="line-418"></a>			   <span class='keyword'>in</span>-<a name="line-419"></a>			   <span class='varid'>appPickle</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span>-<a name="line-420"></a>			 <span class='layout'>)</span>-<a name="line-421"></a>	 <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='varid'>appUnPickle</span> <span class='varop'>$</span>-<a name="line-422"></a>	                 <span class='layout'>(</span> <span class='keyword'>case</span> <span class='varid'>ps</span> <span class='keyword'>of</span>-<a name="line-423"></a>			   <span class='conid'>[]</span>     <span class='keyglyph'>-&gt;</span> <span class='varid'>xpZero</span>-<a name="line-424"></a>			   <span class='varid'>pa</span><span class='conop'>:</span><span class='varid'>ps1</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>xpChoice</span> <span class='layout'>(</span><span class='varid'>xpAlt</span> <span class='varid'>tag</span> <span class='varid'>ps1</span><span class='layout'>)</span> <span class='varid'>pa</span> <span class='varid'>xpLift</span>-<a name="line-425"></a>			 <span class='layout'>)</span>-<a name="line-426"></a>	 <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>scAlts</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='varid'>theSchema</span> <span class='varid'>ps</span><span class='layout'>)</span>-<a name="line-427"></a>	 <span class='layout'>}</span>-<a name="line-428"></a>-<a name="line-429"></a><span class='comment'>-- | Pickler for wrapping\/unwrapping data into an XML element</span>-<a name="line-430"></a><span class='comment'>--</span>-<a name="line-431"></a><span class='comment'>-- Extra parameter is the element name. THE pickler for constructing</span>-<a name="line-432"></a><span class='comment'>-- nested structures</span>-<a name="line-433"></a>-<a name="line-434"></a><a name="xpElem"></a><span class='definition'>xpElem</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span>-<a name="line-435"></a><span class='definition'>xpElem</span> <span class='varid'>name</span> <span class='varid'>pa</span>-<a name="line-436"></a>    <span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</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'>st</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>-<a name="line-437"></a>			   <span class='keyword'>let</span>-<a name="line-438"></a>	                   <span class='varid'>st'</span> <span class='keyglyph'>=</span> <span class='varid'>appPickle</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='varid'>emptySt</span><span class='layout'>)</span>-<a name="line-439"></a>			   <span class='keyword'>in</span>-<a name="line-440"></a>			   <span class='varid'>addCont</span> <span class='layout'>(</span><span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>mkElement</span> <span class='layout'>(</span><span class='varid'>mkName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>attributes</span> <span class='varid'>st'</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>contents</span> <span class='varid'>st'</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>st</span>-<a name="line-441"></a>			 <span class='layout'>)</span>-<a name="line-442"></a>	 <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>st</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>fromMaybe</span> <span class='layout'>(</span><span class='conid'>Nothing</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>unpickleElement</span> <span class='varid'>st</span><span class='layout'>)</span>-<a name="line-443"></a>	 <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>scElem</span> <span class='varid'>name</span> <span class='layout'>(</span><span class='varid'>theSchema</span> <span class='varid'>pa</span><span class='layout'>)</span>-<a name="line-444"></a>	 <span class='layout'>}</span>-<a name="line-445"></a>      <span class='keyword'>where</span>-<a name="line-446"></a>      <span class='varid'>unpickleElement</span> <span class='varid'>st</span>-<a name="line-447"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-448"></a>	    <span class='varid'>t</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getCont</span> <span class='varid'>st</span>-<a name="line-449"></a>	    <span class='varid'>n</span> <span class='keyglyph'>&lt;-</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>getElemName</span> <span class='varid'>t</span>-<a name="line-450"></a>	    <span class='keyword'>if</span> <span class='varid'>qualifiedName</span> <span class='varid'>n</span> <span class='varop'>/=</span> <span class='varid'>name</span>-<a name="line-451"></a>	       <span class='keyword'>then</span> <span class='varid'>fail</span> <span class='str'>"element name does not match"</span>-<a name="line-452"></a>	       <span class='keyword'>else</span> <span class='keyword'>do</span>-<a name="line-453"></a>		    <span class='keyword'>let</span> <span class='varid'>cs</span> <span class='keyglyph'>=</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>getChildren</span> <span class='varid'>t</span>-<a name="line-454"></a>		    <span class='varid'>al</span> <span class='keyglyph'>&lt;-</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>getAttrl</span> <span class='varid'>t</span>-<a name="line-455"></a>		    <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>fst</span> <span class='varop'>.</span> <span class='varid'>appUnPickle</span> <span class='varid'>pa</span> <span class='varop'>$</span> <span class='conid'>St</span> <span class='layout'>{</span><span class='varid'>attributes</span> <span class='keyglyph'>=</span> <span class='varid'>al</span><span class='layout'>,</span> <span class='varid'>contents</span> <span class='keyglyph'>=</span> <span class='varid'>cs</span><span class='layout'>}</span>-<a name="line-456"></a>		    <span class='varid'>return</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>res</span><span class='layout'>,</span> <span class='varid'>dropCont</span> <span class='varid'>st</span><span class='layout'>)</span>-<a name="line-457"></a>-<a name="line-458"></a><span class='comment'>-- | Pickler for storing\/retreiving data into\/from an attribute value</span>-<a name="line-459"></a><span class='comment'>--</span>-<a name="line-460"></a><span class='comment'>-- The attribute is inserted in the surrounding element constructed by the 'xpElem' pickler</span>-<a name="line-461"></a>-<a name="line-462"></a><a name="xpAttr"></a><span class='definition'>xpAttr</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span>-<a name="line-463"></a><span class='definition'>xpAttr</span> <span class='varid'>name</span> <span class='varid'>pa</span>-<a name="line-464"></a>    <span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</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'>st</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>-<a name="line-465"></a>			   <span class='keyword'>let</span>-<a name="line-466"></a>			   <span class='varid'>st'</span> <span class='keyglyph'>=</span> <span class='varid'>appPickle</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='varid'>emptySt</span><span class='layout'>)</span>-<a name="line-467"></a>			   <span class='keyword'>in</span>-<a name="line-468"></a>			   <span class='varid'>addAtt</span> <span class='layout'>(</span><span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>mkAttr</span> <span class='layout'>(</span><span class='varid'>mkName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>contents</span> <span class='varid'>st'</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>st</span>-<a name="line-469"></a>			 <span class='layout'>)</span>-<a name="line-470"></a>	 <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>st</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>fromMaybe</span> <span class='layout'>(</span><span class='conid'>Nothing</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>unpickleAttr</span> <span class='varid'>st</span><span class='layout'>)</span>-<a name="line-471"></a>	 <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>scAttr</span> <span class='varid'>name</span> <span class='layout'>(</span><span class='varid'>theSchema</span> <span class='varid'>pa</span><span class='layout'>)</span>-<a name="line-472"></a>	 <span class='layout'>}</span>-<a name="line-473"></a>      <span class='keyword'>where</span>-<a name="line-474"></a>      <span class='varid'>unpickleAttr</span> <span class='varid'>st</span>-<a name="line-475"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-476"></a>	    <span class='varid'>a</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getAtt</span> <span class='varid'>name</span> <span class='varid'>st</span>-<a name="line-477"></a>	    <span class='keyword'>let</span> <span class='varid'>av</span> <span class='keyglyph'>=</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>getChildren</span> <span class='varid'>a</span>-<a name="line-478"></a>	    <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>fst</span> <span class='varop'>.</span> <span class='varid'>appUnPickle</span> <span class='varid'>pa</span> <span class='varop'>$</span> <span class='conid'>St</span> <span class='layout'>{</span><span class='varid'>attributes</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span><span class='layout'>,</span> <span class='varid'>contents</span> <span class='keyglyph'>=</span> <span class='varid'>av</span><span class='layout'>}</span>-<a name="line-479"></a>	    <span class='varid'>return</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>res</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span>	<span class='comment'>-- attribute is not removed from attribute list,</span>-<a name="line-480"></a>					<span class='comment'>-- attributes are selected by name</span>-<a name="line-481"></a>-<a name="line-482"></a><span class='comment'>-- | Add an optional attribute for an optional value (Maybe a).</span>-<a name="line-483"></a>-<a name="line-484"></a><a name="xpAttrImplied"></a><span class='definition'>xpAttrImplied</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='layout'>(</span><span class='conid'>Maybe</span> <span class='varid'>a</span><span class='layout'>)</span>-<a name="line-485"></a><span class='definition'>xpAttrImplied</span> <span class='varid'>name</span> <span class='varid'>pa</span>-<a name="line-486"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpOption</span> <span class='varop'>$</span> <span class='varid'>xpAttr</span> <span class='varid'>name</span> <span class='varid'>pa</span>-<a name="line-487"></a>-<a name="line-488"></a><a name="xpAttrFixed"></a><span class='definition'>xpAttrFixed</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'>PU</span> <span class='conid'>()</span>-<a name="line-489"></a><span class='definition'>xpAttrFixed</span> <span class='varid'>name</span> <span class='varid'>val</span>-<a name="line-490"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>xpWrapMaybe</span> <span class='layout'>(</span> <span class='keyglyph'>\</span> <span class='varid'>v</span> <span class='keyglyph'>-&gt;</span> <span class='keyword'>if</span> <span class='varid'>v</span> <span class='varop'>==</span> <span class='varid'>val</span> <span class='keyword'>then</span> <span class='conid'>Just</span> <span class='conid'>()</span> <span class='keyword'>else</span> <span class='conid'>Nothing</span>-<a name="line-491"></a>		    <span class='layout'>,</span> <span class='varid'>const</span> <span class='varid'>val</span>-<a name="line-492"></a>		    <span class='layout'>)</span> <span class='varop'>$</span>-<a name="line-493"></a>	<span class='varid'>xpAttr</span> <span class='varid'>name</span> <span class='varid'>xpText</span>-<a name="line-494"></a>      <span class='layout'>)</span> <span class='layout'>{</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>scAttr</span> <span class='varid'>name</span> <span class='layout'>(</span><span class='varid'>scFixed</span> <span class='varid'>val</span><span class='layout'>)</span> <span class='layout'>}</span>-<a name="line-495"></a>-<a name="line-496"></a><span class='comment'>-- | Add an attribute with a fixed value.</span>-<a name="line-497"></a><span class='comment'>--</span>-<a name="line-498"></a><span class='comment'>-- Useful e.g. to declare namespaces. Is implemented by 'xpAttrFixed'</span>-<a name="line-499"></a>-<a name="line-500"></a><a name="xpAddFixedAttr"></a><span class='definition'>xpAddFixedAttr</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'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span>-<a name="line-501"></a><span class='definition'>xpAddFixedAttr</span> <span class='varid'>name</span> <span class='varid'>val</span> <span class='varid'>pa</span>-<a name="line-502"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpWrap</span> <span class='layout'>(</span> <span class='varid'>snd</span>-<a name="line-503"></a>	     <span class='layout'>,</span> <span class='conid'>(,)</span> <span class='conid'>()</span>-<a name="line-504"></a>	     <span class='layout'>)</span> <span class='varop'>$</span>-<a name="line-505"></a>      <span class='varid'>xpPair</span> <span class='layout'>(</span><span class='varid'>xpAttrFixed</span> <span class='varid'>name</span> <span class='varid'>val</span><span class='layout'>)</span> <span class='varid'>pa</span>-<a name="line-506"></a>-<a name="line-507"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-508"></a>-<a name="line-509"></a><span class='comment'>-- | The class for overloading 'xpickle', the default pickler</span>-<a name="line-510"></a>-<a name="line-511"></a><a name="XmlPickler"></a><span class='keyword'>class</span> <span class='conid'>XmlPickler</span> <span class='varid'>a</span> <span class='keyword'>where</span>-<a name="line-512"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span>-<a name="line-513"></a>-<a name="line-514"></a><span class='keyword'>instance</span> <span class='conid'>XmlPickler</span> <span class='conid'>Int</span> <span class='keyword'>where</span>-<a name="line-515"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xpPrim</span>-<a name="line-516"></a>-<a name="line-517"></a><span class='keyword'>instance</span> <span class='conid'>XmlPickler</span> <span class='conid'>Integer</span> <span class='keyword'>where</span>-<a name="line-518"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xpPrim</span>-<a name="line-519"></a>-<a name="line-520"></a><span class='comment'>{--<a name="line-521"></a>  no instance of XmlPickler Char-<a name="line-522"></a>  because then every text would be encoded-<a name="line-523"></a>  char by char, because of the instance for lists-<a name="line-524"></a>-<a name="line-525"></a>instance XmlPickler Char where-<a name="line-526"></a>    xpickle = xpPrim-<a name="line-527"></a>-}</span>-<a name="line-528"></a>-<a name="line-529"></a><span class='keyword'>instance</span> <span class='conid'>XmlPickler</span> <span class='conid'>()</span> <span class='keyword'>where</span>-<a name="line-530"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xpUnit</span>-<a name="line-531"></a>-<a name="line-532"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>XmlPickler</span> <span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>XmlPickler</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='keyword'>where</span>-<a name="line-533"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xpPair</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span>-<a name="line-534"></a>-<a name="line-535"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>XmlPickler</span> <span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>b</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>c</span><span class='layout'>)</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>XmlPickler</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> <span class='keyword'>where</span>-<a name="line-536"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xpTriple</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span>-<a name="line-537"></a>-<a name="line-538"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>XmlPickler</span> <span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>b</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>c</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>d</span><span class='layout'>)</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>XmlPickler</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><span class='varid'>d</span><span class='layout'>)</span> <span class='keyword'>where</span>-<a name="line-539"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xp4Tuple</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span>-<a name="line-540"></a>-<a name="line-541"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>XmlPickler</span> <span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>b</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>c</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>d</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>e</span><span class='layout'>)</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>XmlPickler</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><span class='varid'>d</span><span class='layout'>,</span><span class='varid'>e</span><span class='layout'>)</span> <span class='keyword'>where</span>-<a name="line-542"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xp5Tuple</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span>-<a name="line-543"></a>-<a name="line-544"></a><span class='keyword'>instance</span> <span class='conid'>XmlPickler</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>XmlPickler</span> <span class='keyglyph'>[</span><span class='varid'>a</span><span class='keyglyph'>]</span> <span class='keyword'>where</span>-<a name="line-545"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xpList</span> <span class='varid'>xpickle</span>-<a name="line-546"></a>-<a name="line-547"></a><span class='keyword'>instance</span> <span class='conid'>XmlPickler</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>XmlPickler</span> <span class='layout'>(</span><span class='conid'>Maybe</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyword'>where</span>-<a name="line-548"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xpOption</span> <span class='varid'>xpickle</span>-<a name="line-549"></a>-<a name="line-550"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-43"></a><span class='keyword'>import</span>		 <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Map</span> <span class='layout'>(</span><span class='conid'>Map</span><span class='layout'>)</span>+<a name="line-44"></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-45"></a>+<a name="line-46"></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'>Interface</span>+<a name="line-47"></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'>DOM</span><span class='varop'>.</span><span class='conid'>XmlNode</span> <span class='keyword'>as</span> <span class='conid'>XN</span>+<a name="line-48"></a>+<a name="line-49"></a><span class='keyword'>import</span>           <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>ListArrows</span>+<a name="line-50"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlArrow</span>+<a name="line-51"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>Pickle</span><span class='varop'>.</span><span class='conid'>Schema</span>+<a name="line-52"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>ReadDocument</span> <span class='layout'>(</span><span class='varid'>xread</span><span class='layout'>)</span>+<a name="line-53"></a>+<a name="line-54"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-55"></a>+<a name="line-56"></a><a name="St"></a><span class='keyword'>data</span> <span class='conid'>St</span>		<span class='keyglyph'>=</span> <span class='conid'>St</span> <span class='layout'>{</span> <span class='varid'>attributes</span> <span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>XmlTree</span><span class='keyglyph'>]</span>+<a name="line-57"></a>		     <span class='layout'>,</span> <span class='varid'>contents</span>   <span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>XmlTree</span><span class='keyglyph'>]</span>+<a name="line-58"></a>		     <span class='layout'>}</span>+<a name="line-59"></a>+<a name="line-60"></a><a name="PU"></a><span class='keyword'>data</span> <span class='conid'>PU</span> <span class='varid'>a</span>	<span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>::</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>St</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>St</span>+<a name="line-61"></a>		     <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>::</span> <span class='conid'>St</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='conid'>Maybe</span> <span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>St</span><span class='layout'>)</span>+<a name="line-62"></a>		     <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>::</span> <span class='conid'>Schema</span>+<a name="line-63"></a>		     <span class='layout'>}</span>+<a name="line-64"></a>+<a name="line-65"></a><a name="emptySt"></a><span class='definition'>emptySt</span>		<span class='keyglyph'>::</span> <span class='conid'>St</span>+<a name="line-66"></a><span class='definition'>emptySt</span>		<span class='keyglyph'>=</span>  <span class='conid'>St</span> <span class='layout'>{</span> <span class='varid'>attributes</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>+<a name="line-67"></a>		      <span class='layout'>,</span> <span class='varid'>contents</span>   <span class='keyglyph'>=</span> <span class='conid'>[]</span>+<a name="line-68"></a>		      <span class='layout'>}</span>+<a name="line-69"></a>+<a name="line-70"></a><a name="addAtt"></a><span class='definition'>addAtt</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>St</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>St</span>+<a name="line-71"></a><span class='definition'>addAtt</span> <span class='varid'>x</span> <span class='varid'>s</span>	<span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span><span class='varid'>attributes</span> <span class='keyglyph'>=</span> <span class='varid'>x</span> <span class='conop'>:</span> <span class='varid'>attributes</span> <span class='varid'>s</span><span class='layout'>}</span>+<a name="line-72"></a>+<a name="line-73"></a><a name="addCont"></a><span class='definition'>addCont</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>St</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>St</span>+<a name="line-74"></a><span class='definition'>addCont</span> <span class='varid'>x</span> <span class='varid'>s</span>	<span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span><span class='varid'>contents</span> <span class='keyglyph'>=</span> <span class='varid'>x</span> <span class='conop'>:</span> <span class='varid'>contents</span> <span class='varid'>s</span><span class='layout'>}</span>+<a name="line-75"></a>+<a name="line-76"></a><a name="dropCont"></a><span class='definition'>dropCont</span>	<span class='keyglyph'>::</span> <span class='conid'>St</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>St</span>+<a name="line-77"></a><span class='definition'>dropCont</span> <span class='varid'>s</span>	<span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>contents</span> <span class='keyglyph'>=</span> <span class='varid'>drop</span> <span class='num'>1</span> <span class='layout'>(</span><span class='varid'>contents</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='layout'>}</span>+<a name="line-78"></a>+<a name="line-79"></a><a name="getAtt"></a><span class='definition'>getAtt</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>St</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Maybe</span> <span class='conid'>XmlTree</span>+<a name="line-80"></a><span class='definition'>getAtt</span> <span class='varid'>name</span> <span class='varid'>s</span>+<a name="line-81"></a>    <span class='keyglyph'>=</span> <span class='varid'>listToMaybe</span> <span class='varop'>$</span>+<a name="line-82"></a>      <span class='varid'>runLA</span> <span class='layout'>(</span> <span class='varid'>arrL</span> <span class='varid'>attributes</span>+<a name="line-83"></a>	      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-84"></a>	      <span class='varid'>isAttr</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>hasName</span> <span class='varid'>name</span>+<a name="line-85"></a>	    <span class='layout'>)</span> <span class='varid'>s</span>+<a name="line-86"></a>+<a name="line-87"></a><a name="getCont"></a><span class='definition'>getCont</span>		<span class='keyglyph'>::</span> <span class='conid'>St</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Maybe</span> <span class='conid'>XmlTree</span>+<a name="line-88"></a><span class='definition'>getCont</span> <span class='varid'>s</span>	<span class='keyglyph'>=</span> <span class='varid'>listToMaybe</span> <span class='varop'>.</span> <span class='varid'>contents</span> <span class='varop'>$</span> <span class='varid'>s</span>+<a name="line-89"></a>+<a name="line-90"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-91"></a>+<a name="line-92"></a><span class='comment'>-- | conversion of an arbitrary value into an XML document tree.</span>+<a name="line-93"></a><span class='comment'>--</span>+<a name="line-94"></a><span class='comment'>-- The pickler, first parameter, controls the conversion process.</span>+<a name="line-95"></a><span class='comment'>-- Result is a complete document tree including a root node</span>+<a name="line-96"></a>+<a name="line-97"></a><a name="pickleDoc"></a><span class='definition'>pickleDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span>+<a name="line-98"></a><span class='definition'>pickleDoc</span> <span class='varid'>p</span> <span class='varid'>v</span>+<a name="line-99"></a>    <span class='keyglyph'>=</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>mkRoot</span> <span class='layout'>(</span><span class='varid'>attributes</span> <span class='varid'>st</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>contents</span> <span class='varid'>st</span><span class='layout'>)</span>+<a name="line-100"></a>    <span class='keyword'>where</span>+<a name="line-101"></a>    <span class='varid'>st</span> <span class='keyglyph'>=</span> <span class='varid'>appPickle</span> <span class='varid'>p</span> <span class='layout'>(</span><span class='varid'>v</span><span class='layout'>,</span> <span class='varid'>emptySt</span><span class='layout'>)</span>+<a name="line-102"></a>+<a name="line-103"></a><span class='comment'>-- | Conversion of an XML document tree into an arbitrary data type</span>+<a name="line-104"></a><span class='comment'>--</span>+<a name="line-105"></a><span class='comment'>-- The inverse of 'pickleDoc'.</span>+<a name="line-106"></a><span class='comment'>-- This law should hold for all picklers: @ unpickle px . pickle px $ v == Just v @.</span>+<a name="line-107"></a><span class='comment'>-- Not every possible combination of picklers make sense.</span>+<a name="line-108"></a><span class='comment'>-- For reconverting a value from an XML tree, is becomes neccessary,</span>+<a name="line-109"></a><span class='comment'>-- to introduce \"enough\" markup for unpickling the value</span>+<a name="line-110"></a>+<a name="line-111"></a><a name="unpickleDoc"></a><span class='definition'>unpickleDoc</span> <span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTree</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Maybe</span> <span class='varid'>a</span>+<a name="line-112"></a><span class='definition'>unpickleDoc</span> <span class='varid'>p</span> <span class='varid'>t</span>+<a name="line-113"></a>    <span class='keyglyph'>|</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>isRoot</span> <span class='varid'>t</span>+<a name="line-114"></a>	<span class='keyglyph'>=</span> <span class='varid'>fst</span> <span class='varop'>.</span> <span class='varid'>appUnPickle</span> <span class='varid'>p</span> <span class='varop'>$</span> <span class='conid'>St</span> <span class='layout'>{</span> <span class='varid'>attributes</span> <span class='keyglyph'>=</span> <span class='varid'>fromJust</span> <span class='varop'>.</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>getAttrl</span> <span class='varop'>$</span>  <span class='varid'>t</span>+<a name="line-115"></a>				   <span class='layout'>,</span> <span class='varid'>contents</span>   <span class='keyglyph'>=</span>            <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>getChildren</span> <span class='varid'>t</span>+<a name="line-116"></a>				   <span class='layout'>}</span>+<a name="line-117"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>+<a name="line-118"></a>	<span class='keyglyph'>=</span> <span class='varid'>unpickleDoc</span> <span class='varid'>p</span> <span class='layout'>(</span><span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>mkRoot</span> <span class='conid'>[]</span> <span class='keyglyph'>[</span><span class='varid'>t</span><span class='keyglyph'>]</span><span class='layout'>)</span>+<a name="line-119"></a>+<a name="line-120"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-121"></a>+<a name="line-122"></a><span class='comment'>-- | The zero pickler</span>+<a name="line-123"></a><span class='comment'>--</span>+<a name="line-124"></a><span class='comment'>-- Encodes nothing, fails always during unpickling</span>+<a name="line-125"></a>+<a name="line-126"></a><a name="xpZero"></a><span class='definition'>xpZero</span>			<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span>+<a name="line-127"></a><span class='definition'>xpZero</span>			<span class='keyglyph'>=</span>  <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</span> <span class='varid'>snd</span>+<a name="line-128"></a>			      <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='conid'>Nothing</span><span class='layout'>,</span> <span class='varid'>s</span><span class='layout'>)</span>+<a name="line-129"></a>			      <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>scNull</span>+<a name="line-130"></a>			      <span class='layout'>}</span>+<a name="line-131"></a>+<a name="line-132"></a><span class='comment'>-- unit pickler</span>+<a name="line-133"></a>+<a name="line-134"></a><a name="xpUnit"></a><span class='definition'>xpUnit</span>			<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='conid'>()</span>+<a name="line-135"></a><span class='definition'>xpUnit</span>			<span class='keyglyph'>=</span> <span class='varid'>xpLift</span> <span class='conid'>()</span>+<a name="line-136"></a>+<a name="line-137"></a><span class='comment'>-- | Lift a value to a pickler</span>+<a name="line-138"></a><span class='comment'>--</span>+<a name="line-139"></a><span class='comment'>-- When pickling, nothing is encoded, when unpickling, the given value is inserted.</span>+<a name="line-140"></a><span class='comment'>-- This pickler always succeeds.</span>+<a name="line-141"></a>+<a name="line-142"></a><a name="xpLift"></a><span class='definition'>xpLift</span>			<span class='keyglyph'>::</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span>+<a name="line-143"></a><span class='definition'>xpLift</span> <span class='varid'>x</span>		<span class='keyglyph'>=</span>  <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</span> <span class='varid'>snd</span>+<a name="line-144"></a>			      <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>x</span><span class='layout'>,</span> <span class='varid'>s</span><span class='layout'>)</span>+<a name="line-145"></a>			      <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>scEmpty</span>+<a name="line-146"></a>			      <span class='layout'>}</span>+<a name="line-147"></a>+<a name="line-148"></a><span class='comment'>-- | Lift a Maybe value to a pickler.</span>+<a name="line-149"></a><span class='comment'>--</span>+<a name="line-150"></a><span class='comment'>-- @Nothing@ is mapped to the zero pickler, @Just x@ is pickled with @xpLift x@.</span>+<a name="line-151"></a>+<a name="line-152"></a><a name="xpLiftMaybe"></a><span class='definition'>xpLiftMaybe</span>		<span class='keyglyph'>::</span> <span class='conid'>Maybe</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span>+<a name="line-153"></a><span class='definition'>xpLiftMaybe</span> <span class='varid'>v</span>		<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>xpLiftMaybe'</span> <span class='varid'>v</span><span class='layout'>)</span> <span class='layout'>{</span> <span class='varid'>theSchema</span> <span class='keyglyph'>=</span> <span class='varid'>scOption</span> <span class='varid'>scEmpty</span> <span class='layout'>}</span>+<a name="line-154"></a>    <span class='keyword'>where</span>+<a name="line-155"></a>    <span class='varid'>xpLiftMaybe'</span> <span class='conid'>Nothing</span>	<span class='keyglyph'>=</span> <span class='varid'>xpZero</span>+<a name="line-156"></a>    <span class='varid'>xpLiftMaybe'</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>x</span><span class='layout'>)</span> 	<span class='keyglyph'>=</span> <span class='varid'>xpLift</span> <span class='varid'>x</span>+<a name="line-157"></a>+<a name="line-158"></a>+<a name="line-159"></a><span class='comment'>-- | pickle\/unpickle combinator for sequence and choice.</span>+<a name="line-160"></a><span class='comment'>--</span>+<a name="line-161"></a><span class='comment'>-- When the first unpickler fails,</span>+<a name="line-162"></a><span class='comment'>-- the second one is taken, else the third one configured with the result from the first</span>+<a name="line-163"></a><span class='comment'>-- is taken. This pickler is a generalisation for 'xpSeq' and 'xpChoice' .</span>+<a name="line-164"></a><span class='comment'>--</span>+<a name="line-165"></a><span class='comment'>-- The schema must be attached later, e.g. in xpPair or other higher level combinators</span>+<a name="line-166"></a>+<a name="line-167"></a><a name="xpCondSeq"></a><span class='definition'>xpCondSeq</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span>+<a name="line-168"></a><span class='definition'>xpCondSeq</span> <span class='varid'>pd</span> <span class='varid'>f</span> <span class='varid'>pa</span> <span class='varid'>k</span>+<a name="line-169"></a>    <span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>+<a name="line-170"></a>	                   <span class='keyword'>let</span>+<a name="line-171"></a>			   <span class='varid'>a</span>  <span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varid'>b</span>+<a name="line-172"></a>			   <span class='varid'>pb</span> <span class='keyglyph'>=</span> <span class='varid'>k</span> <span class='varid'>a</span>+<a name="line-173"></a>			   <span class='keyword'>in</span>+<a name="line-174"></a>			   <span class='varid'>appPickle</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>appPickle</span> <span class='varid'>pb</span> <span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='varid'>s</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>+<a name="line-175"></a>			 <span class='layout'>)</span>+<a name="line-176"></a>	 <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span>+<a name="line-177"></a>			   <span class='keyword'>let</span>+<a name="line-178"></a>			   <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='varid'>s'</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>appUnPickle</span> <span class='varid'>pa</span> <span class='varid'>s</span>+<a name="line-179"></a>			   <span class='keyword'>in</span>+<a name="line-180"></a>			   <span class='keyword'>case</span> <span class='varid'>a</span> <span class='keyword'>of</span>+<a name="line-181"></a>			   <span class='conid'>Nothing</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>appUnPickle</span> <span class='varid'>pd</span>     <span class='varid'>s</span>+<a name="line-182"></a>			   <span class='conid'>Just</span> <span class='varid'>a'</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>appUnPickle</span> <span class='layout'>(</span><span class='varid'>k</span> <span class='varid'>a'</span><span class='layout'>)</span> <span class='varid'>s'</span>+<a name="line-183"></a>			 <span class='layout'>)</span>+<a name="line-184"></a>	 <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>undefined</span>+<a name="line-185"></a>	 <span class='layout'>}</span>+<a name="line-186"></a>+<a name="line-187"></a>+<a name="line-188"></a><span class='comment'>-- | Combine two picklers sequentially.</span>+<a name="line-189"></a><span class='comment'>--</span>+<a name="line-190"></a><span class='comment'>-- If the first fails during</span>+<a name="line-191"></a><span class='comment'>-- unpickling, the whole unpickler fails</span>+<a name="line-192"></a>+<a name="line-193"></a><a name="xpSeq"></a><span class='definition'>xpSeq</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span>+<a name="line-194"></a><span class='definition'>xpSeq</span>	<span class='keyglyph'>=</span> <span class='varid'>xpCondSeq</span> <span class='varid'>xpZero</span>+<a name="line-195"></a>+<a name="line-196"></a>+<a name="line-197"></a><span class='comment'>-- | combine tow picklers with a choice</span>+<a name="line-198"></a><span class='comment'>--</span>+<a name="line-199"></a><span class='comment'>-- Run two picklers in sequence like with xpSeq.</span>+<a name="line-200"></a><span class='comment'>-- When during unpickling the first one fails,</span>+<a name="line-201"></a><span class='comment'>-- an alternative pickler (first argument) is applied.</span>+<a name="line-202"></a><span class='comment'>-- This pickler is only used as combinator for unpickling.</span>+<a name="line-203"></a> +<a name="line-204"></a><a name="xpChoice"></a><span class='definition'>xpChoice</span>		<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span>+<a name="line-205"></a><span class='definition'>xpChoice</span> <span class='varid'>pb</span>	<span class='keyglyph'>=</span> <span class='varid'>xpCondSeq</span> <span class='varid'>pb</span> <span class='varid'>undefined</span>+<a name="line-206"></a>+<a name="line-207"></a>+<a name="line-208"></a><span class='comment'>-- | map value into another domain and apply pickler there</span>+<a name="line-209"></a><span class='comment'>--</span>+<a name="line-210"></a><span class='comment'>-- One of the most often used picklers.</span>+<a name="line-211"></a>+<a name="line-212"></a><a name="xpWrap"></a><span class='definition'>xpWrap</span>			<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>b</span><span class='layout'>,</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span>+<a name="line-213"></a><span class='definition'>xpWrap</span> <span class='layout'>(</span><span class='varid'>i</span><span class='layout'>,</span> <span class='varid'>j</span><span class='layout'>)</span> <span class='varid'>pa</span>	<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>xpSeq</span> <span class='varid'>j</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>xpLift</span> <span class='varop'>.</span> <span class='varid'>i</span><span class='layout'>)</span><span class='layout'>)</span> <span class='layout'>{</span> <span class='varid'>theSchema</span> <span class='keyglyph'>=</span> <span class='varid'>theSchema</span> <span class='varid'>pa</span> <span class='layout'>}</span>+<a name="line-214"></a>+<a name="line-215"></a><span class='comment'>-- | like 'xpWrap', but if the inverse mapping is undefined, the unpickler fails</span>+<a name="line-216"></a><span class='comment'>--</span>+<a name="line-217"></a><span class='comment'>-- Map a value into another domain. If the inverse mapping is</span>+<a name="line-218"></a><span class='comment'>-- undefined (Nothing), the unpickler fails</span>+<a name="line-219"></a>+<a name="line-220"></a><a name="xpWrapMaybe"></a><span class='definition'>xpWrapMaybe</span>		<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Maybe</span> <span class='varid'>b</span><span class='layout'>,</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span>+<a name="line-221"></a><span class='definition'>xpWrapMaybe</span> <span class='layout'>(</span><span class='varid'>i</span><span class='layout'>,</span> <span class='varid'>j</span><span class='layout'>)</span> <span class='varid'>pa</span>	<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>xpSeq</span> <span class='varid'>j</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>xpLiftMaybe</span> <span class='varop'>.</span> <span class='varid'>i</span><span class='layout'>)</span><span class='layout'>)</span> <span class='layout'>{</span> <span class='varid'>theSchema</span> <span class='keyglyph'>=</span> <span class='varid'>theSchema</span> <span class='varid'>pa</span> <span class='layout'>}</span>+<a name="line-222"></a>+<a name="line-223"></a><span class='comment'>-- | pickle a pair of values sequentially</span>+<a name="line-224"></a><span class='comment'>--</span>+<a name="line-225"></a><span class='comment'>-- Used for pairs or together with wrap for pickling</span>+<a name="line-226"></a><span class='comment'>-- algebraic data types with two components</span>+<a name="line-227"></a>+<a name="line-228"></a><a name="xpPair"></a><span class='definition'>xpPair</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='varid'>b</span><span class='layout'>)</span>+<a name="line-229"></a><span class='definition'>xpPair</span> <span class='varid'>pa</span> <span class='varid'>pb</span>+<a name="line-230"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>xpSeq</span> <span class='varid'>fst</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span>+<a name="line-231"></a>        <span class='varid'>xpSeq</span> <span class='varid'>snd</span> <span class='varid'>pb</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span>+<a name="line-232"></a>        <span class='varid'>xpLift</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='layout'>)</span><span class='layout'>)</span>+<a name="line-233"></a>      <span class='layout'>)</span> <span class='layout'>{</span> <span class='varid'>theSchema</span> <span class='keyglyph'>=</span> <span class='varid'>scSeq</span> <span class='layout'>(</span><span class='varid'>theSchema</span> <span class='varid'>pa</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>theSchema</span> <span class='varid'>pb</span><span class='layout'>)</span> <span class='layout'>}</span>+<a name="line-234"></a>+<a name="line-235"></a><span class='comment'>-- | Like 'xpPair' but for triples</span>+<a name="line-236"></a>+<a name="line-237"></a><a name="xpTriple"></a><span class='definition'>xpTriple</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</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-238"></a><span class='definition'>xpTriple</span> <span class='varid'>pa</span> <span class='varid'>pb</span> <span class='varid'>pc</span>+<a name="line-239"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpWrap</span> <span class='layout'>(</span><span class='varid'>toTriple</span><span class='layout'>,</span> <span class='varid'>fromTriple</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pb</span> <span class='varid'>pc</span><span class='layout'>)</span><span class='layout'>)</span>+<a name="line-240"></a>    <span class='keyword'>where</span>+<a name="line-241"></a>    <span class='varid'>toTriple</span>   <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='varid'>c</span><span class='layout'>)</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'>b</span><span class='layout'>,</span> <span class='varid'>c</span> <span class='layout'>)</span>+<a name="line-242"></a>    <span class='varid'>fromTriple</span> <span class='keyglyph'>~</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> <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='varid'>c</span><span class='layout'>)</span><span class='layout'>)</span>+<a name="line-243"></a>+<a name="line-244"></a><span class='comment'>-- | Like 'xpPair' and 'xpTriple' but for 4-tuples</span>+<a name="line-245"></a>+<a name="line-246"></a><a name="xp4Tuple"></a><span class='definition'>xp4Tuple</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>d</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</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> <span class='varid'>d</span><span class='layout'>)</span>+<a name="line-247"></a><span class='definition'>xp4Tuple</span> <span class='varid'>pa</span> <span class='varid'>pb</span> <span class='varid'>pc</span> <span class='varid'>pd</span>+<a name="line-248"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpWrap</span> <span class='layout'>(</span><span class='varid'>toQuad</span><span class='layout'>,</span> <span class='varid'>fromQuad</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pb</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pc</span> <span class='varid'>pd</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>+<a name="line-249"></a>    <span class='keyword'>where</span>+<a name="line-250"></a>    <span class='varid'>toQuad</span>   <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>c</span><span class='layout'>,</span> <span class='varid'>d</span><span class='layout'>)</span><span class='layout'>)</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'>b</span><span class='layout'>,</span>  <span class='varid'>c</span><span class='layout'>,</span> <span class='varid'>d</span>  <span class='layout'>)</span>+<a name="line-251"></a>    <span class='varid'>fromQuad</span> <span class='keyglyph'>~</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> <span class='varid'>d</span>  <span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>c</span><span class='layout'>,</span> <span class='varid'>d</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>+<a name="line-252"></a>+<a name="line-253"></a><span class='comment'>-- | Like 'xpPair' and 'xpTriple' but for 5-tuples</span>+<a name="line-254"></a>+<a name="line-255"></a><a name="xp5Tuple"></a><span class='definition'>xp5Tuple</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>d</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>e</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</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> <span class='varid'>d</span><span class='layout'>,</span> <span class='varid'>e</span><span class='layout'>)</span>+<a name="line-256"></a><span class='definition'>xp5Tuple</span> <span class='varid'>pa</span> <span class='varid'>pb</span> <span class='varid'>pc</span> <span class='varid'>pd</span> <span class='varid'>pe</span>+<a name="line-257"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpWrap</span> <span class='layout'>(</span><span class='varid'>toQuint</span><span class='layout'>,</span> <span class='varid'>fromQuint</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pb</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pc</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pd</span> <span class='varid'>pe</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>+<a name="line-258"></a>    <span class='keyword'>where</span>+<a name="line-259"></a>    <span class='varid'>toQuint</span>   <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>c</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>d</span><span class='layout'>,</span> <span class='varid'>e</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</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'>b</span><span class='layout'>,</span>  <span class='varid'>c</span><span class='layout'>,</span>  <span class='varid'>d</span><span class='layout'>,</span> <span class='varid'>e</span>   <span class='layout'>)</span>+<a name="line-260"></a>    <span class='varid'>fromQuint</span> <span class='keyglyph'>~</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>   <span class='varid'>d</span><span class='layout'>,</span> <span class='varid'>e</span>   <span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>c</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>d</span><span class='layout'>,</span> <span class='varid'>e</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>+<a name="line-261"></a>+<a name="line-262"></a><span class='comment'>-- | Like 'xpPair' and 'xpTriple' but for 6-tuples</span>+<a name="line-263"></a>+<a name="line-264"></a><a name="xp6Tuple"></a><span class='definition'>xp6Tuple</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>d</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>e</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>f</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</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> <span class='varid'>d</span><span class='layout'>,</span> <span class='varid'>e</span><span class='layout'>,</span> <span class='varid'>f</span><span class='layout'>)</span>+<a name="line-265"></a><span class='definition'>xp6Tuple</span> <span class='varid'>pa</span> <span class='varid'>pb</span> <span class='varid'>pc</span> <span class='varid'>pd</span> <span class='varid'>pe</span> <span class='varid'>pf</span>+<a name="line-266"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpWrap</span> <span class='layout'>(</span><span class='varid'>toSix</span><span class='layout'>,</span> <span class='varid'>fromSix</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pb</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pc</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pd</span> <span class='layout'>(</span><span class='varid'>xpPair</span> <span class='varid'>pe</span> <span class='varid'>pf</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>+<a name="line-267"></a>    <span class='keyword'>where</span>+<a name="line-268"></a>    <span class='varid'>toSix</span>   <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>c</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>d</span><span class='layout'>,</span> <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>e</span><span class='layout'>,</span> <span class='varid'>f</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</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'>b</span><span class='layout'>,</span>  <span class='varid'>c</span><span class='layout'>,</span>  <span class='varid'>d</span><span class='layout'>,</span>  <span class='varid'>e</span><span class='layout'>,</span> <span class='varid'>f</span>    <span class='layout'>)</span>+<a name="line-269"></a>    <span class='varid'>fromSix</span> <span class='keyglyph'>~</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>   <span class='varid'>d</span><span class='layout'>,</span>   <span class='varid'>e</span><span class='layout'>,</span> <span class='varid'>f</span><span class='layout'>)</span>     <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>b</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>c</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>d</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>e</span><span class='layout'>,</span> <span class='varid'>f</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>+<a name="line-270"></a>+<a name="line-271"></a><span class='comment'>-- | Pickle a string into an XML text node</span>+<a name="line-272"></a><span class='comment'>--</span>+<a name="line-273"></a><span class='comment'>-- One of the most often used primitive picklers. Attention:</span>+<a name="line-274"></a><span class='comment'>-- For pickling empty strings use 'xpText0'. If the text has a more</span>+<a name="line-275"></a><span class='comment'>-- specific datatype than xsd:string, use 'xpTextDT'</span>+<a name="line-276"></a>+<a name="line-277"></a><a name="xpText"></a><span class='definition'>xpText</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='conid'>String</span>+<a name="line-278"></a><span class='definition'>xpText</span>	<span class='keyglyph'>=</span> <span class='varid'>xpTextDT</span> <span class='varid'>scString1</span>+<a name="line-279"></a>+<a name="line-280"></a><span class='comment'>-- | Pickle a string into an XML text node</span>+<a name="line-281"></a><span class='comment'>--</span>+<a name="line-282"></a><span class='comment'>-- Text pickler with a description of the structure of the text</span>+<a name="line-283"></a><span class='comment'>-- by a schema. A schema for a data type can be defined by 'Text.XML.HXT.Arrow.Pickle.Schema.scDT'.</span>+<a name="line-284"></a><span class='comment'>-- In 'Text.XML.HXT.Arrow.Pickle.Schema' there are some more functions for creating</span>+<a name="line-285"></a><span class='comment'>-- simple datatype descriptions.</span>+<a name="line-286"></a>+<a name="line-287"></a><a name="xpTextDT"></a><span class='definition'>xpTextDT</span>	<span class='keyglyph'>::</span> <span class='conid'>Schema</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='conid'>String</span>+<a name="line-288"></a><span class='definition'>xpTextDT</span> <span class='varid'>sc</span>+<a name="line-289"></a>    <span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>s</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>addCont</span> <span class='layout'>(</span><span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>mkText</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='varid'>st</span>+<a name="line-290"></a>	 <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>st</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>fromMaybe</span> <span class='layout'>(</span><span class='conid'>Nothing</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>unpickleString</span> <span class='varid'>st</span><span class='layout'>)</span>+<a name="line-291"></a>	 <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>sc</span>+<a name="line-292"></a>	 <span class='layout'>}</span>+<a name="line-293"></a>    <span class='keyword'>where</span>+<a name="line-294"></a>    <span class='varid'>unpickleString</span> <span class='varid'>st</span>+<a name="line-295"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-296"></a>	  <span class='varid'>t</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getCont</span> <span class='varid'>st</span>+<a name="line-297"></a>	  <span class='varid'>s</span> <span class='keyglyph'>&lt;-</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>getText</span> <span class='varid'>t</span>+<a name="line-298"></a>	  <span class='varid'>return</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>s</span><span class='layout'>,</span> <span class='varid'>dropCont</span> <span class='varid'>st</span><span class='layout'>)</span>+<a name="line-299"></a>+<a name="line-300"></a><span class='comment'>-- | Pickle a possibly empty string into an XML node.</span>+<a name="line-301"></a><span class='comment'>--</span>+<a name="line-302"></a><span class='comment'>-- Must be used in all places, where empty strings are legal values.</span>+<a name="line-303"></a><span class='comment'>-- If the content of an element can be an empty string, this string disapears</span>+<a name="line-304"></a><span class='comment'>-- during storing the DOM into a document and reparse the document.</span>+<a name="line-305"></a><span class='comment'>-- So the empty text node becomes nothing, and the pickler must deliver an empty string,</span>+<a name="line-306"></a><span class='comment'>-- if there is no text node in the document.</span>+<a name="line-307"></a>+<a name="line-308"></a><a name="xpText0"></a><span class='definition'>xpText0</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='conid'>String</span>+<a name="line-309"></a><span class='definition'>xpText0</span>	<span class='keyglyph'>=</span> <span class='varid'>xpText0DT</span> <span class='varid'>scString1</span>+<a name="line-310"></a>+<a name="line-311"></a><span class='comment'>-- | Pickle a possibly empty string with a datatype description into an XML node.</span>+<a name="line-312"></a><span class='comment'>--</span>+<a name="line-313"></a><span class='comment'>-- Like 'xpText0' but with extra Parameter for datatype description as in 'xpTextDT'.</span>+<a name="line-314"></a>+<a name="line-315"></a><a name="xpText0DT"></a><span class='definition'>xpText0DT</span>	<span class='keyglyph'>::</span> <span class='conid'>Schema</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='conid'>String</span>+<a name="line-316"></a><span class='definition'>xpText0DT</span> <span class='varid'>sc</span>+<a name="line-317"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpWrap</span> <span class='layout'>(</span><span class='varid'>fromMaybe</span> <span class='str'>""</span><span class='layout'>,</span> <span class='varid'>emptyToNothing</span><span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>xpOption</span> <span class='varop'>$</span> <span class='varid'>xpTextDT</span> <span class='varid'>sc</span>+<a name="line-318"></a>    <span class='keyword'>where</span>+<a name="line-319"></a>    <span class='varid'>emptyToNothing</span> <span class='str'>""</span> <span class='keyglyph'>=</span> <span class='conid'>Nothing</span>+<a name="line-320"></a>    <span class='varid'>emptyToNothing</span> <span class='varid'>x</span>  <span class='keyglyph'>=</span> <span class='conid'>Just</span> <span class='varid'>x</span>+<a name="line-321"></a>+<a name="line-322"></a><span class='comment'>-- | Pickle an arbitrary value by applyling show during pickling</span>+<a name="line-323"></a><span class='comment'>-- and read during unpickling.</span>+<a name="line-324"></a><span class='comment'>--</span>+<a name="line-325"></a><span class='comment'>-- Real pickling is then done with 'xpText'.</span>+<a name="line-326"></a><span class='comment'>-- One of the most often used pimitive picklers. Applicable for all</span>+<a name="line-327"></a><span class='comment'>-- types which are instances of @Read@ and @Show@</span>+<a name="line-328"></a>+<a name="line-329"></a><a name="xpPrim"></a><span class='definition'>xpPrim</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Read</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'>PU</span> <span class='varid'>a</span>+<a name="line-330"></a><span class='definition'>xpPrim</span>+<a name="line-331"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpWrapMaybe</span> <span class='layout'>(</span><span class='varid'>readMaybe</span><span class='layout'>,</span> <span class='varid'>show</span><span class='layout'>)</span> <span class='varid'>xpText</span>+<a name="line-332"></a>    <span class='keyword'>where</span>+<a name="line-333"></a>    <span class='varid'>readMaybe</span>	<span class='keyglyph'>::</span> <span class='conid'>Read</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Maybe</span> <span class='varid'>a</span>+<a name="line-334"></a>    <span class='varid'>readMaybe</span> <span class='varid'>str</span>+<a name="line-335"></a>	<span class='keyglyph'>=</span> <span class='varid'>val</span> <span class='layout'>(</span><span class='varid'>reads</span> <span class='varid'>str</span><span class='layout'>)</span>+<a name="line-336"></a>	<span class='keyword'>where</span>+<a name="line-337"></a>	<span class='varid'>val</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='varid'>x</span><span class='layout'>,</span><span class='str'>""</span><span class='layout'>)</span><span class='keyglyph'>]</span> <span class='keyglyph'>=</span> <span class='conid'>Just</span> <span class='varid'>x</span>+<a name="line-338"></a>	<span class='varid'>val</span> <span class='keyword'>_</span>        <span class='keyglyph'>=</span> <span class='conid'>Nothing</span>+<a name="line-339"></a>+<a name="line-340"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-341"></a>+<a name="line-342"></a><span class='comment'>-- | Pickle an XmlTree by just adding it</span>+<a name="line-343"></a><span class='comment'>--</span>+<a name="line-344"></a><span class='comment'>-- Usefull for components of type XmlTree in other data structures</span>+<a name="line-345"></a>+<a name="line-346"></a><a name="xpTree"></a><span class='definition'>xpTree</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='conid'>XmlTree</span>+<a name="line-347"></a><span class='definition'>xpTree</span>	<span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>s</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>addCont</span> <span class='varid'>s</span> <span class='varid'>st</span>+<a name="line-348"></a>	     <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>st</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>fromMaybe</span> <span class='layout'>(</span><span class='conid'>Nothing</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>unpickleTree</span> <span class='varid'>st</span><span class='layout'>)</span>+<a name="line-349"></a>	     <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='conid'>Any</span>+<a name="line-350"></a>	     <span class='layout'>}</span>+<a name="line-351"></a>    <span class='keyword'>where</span>+<a name="line-352"></a>    <span class='varid'>unpickleTree</span> <span class='varid'>st</span>+<a name="line-353"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-354"></a>	  <span class='varid'>t</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getCont</span> <span class='varid'>st</span>+<a name="line-355"></a>	  <span class='varid'>return</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>t</span><span class='layout'>,</span> <span class='varid'>dropCont</span> <span class='varid'>st</span><span class='layout'>)</span>+<a name="line-356"></a>+<a name="line-357"></a><span class='comment'>-- | Pickle a whole list of XmlTrees by just adding the list, unpickle is done by taking all element contens.</span>+<a name="line-358"></a><span class='comment'>--</span>+<a name="line-359"></a><span class='comment'>-- This pickler should always combined with 'xpElem' for taking the whole contents of an element.</span>+<a name="line-360"></a>+<a name="line-361"></a><a name="xpTrees"></a><span class='definition'>xpTrees</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='keyglyph'>[</span><span class='conid'>XmlTree</span><span class='keyglyph'>]</span>+<a name="line-362"></a><span class='definition'>xpTrees</span>	<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>xpList</span> <span class='varid'>xpTree</span><span class='layout'>)</span> <span class='layout'>{</span> <span class='varid'>theSchema</span> <span class='keyglyph'>=</span> <span class='conid'>Any</span> <span class='layout'>}</span>+<a name="line-363"></a>+<a name="line-364"></a><span class='comment'>-- | Pickle a string representing XML contents by inserting the tree representation into the XML document.</span>+<a name="line-365"></a><span class='comment'>--</span>+<a name="line-366"></a><span class='comment'>-- Unpickling is done by converting the contents with</span>+<a name="line-367"></a><span class='comment'>-- 'Text.XML.HXT.Arrow.XmlArrow.xshow' into a string,</span>+<a name="line-368"></a><span class='comment'>-- pickling is done with 'Text.XML.HXT.Arrow.ReadDocument.xread'</span>+<a name="line-369"></a>+<a name="line-370"></a><a name="xpXmlText"></a><span class='definition'>xpXmlText</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='conid'>String</span>+<a name="line-371"></a><span class='definition'>xpXmlText</span>+<a name="line-372"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpWrap</span> <span class='layout'>(</span> <span class='varid'>showXML</span><span class='layout'>,</span> <span class='varid'>readXML</span> <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>xpTrees</span>+<a name="line-373"></a>    <span class='keyword'>where</span>+<a name="line-374"></a>    <span class='varid'>showXML</span> <span class='keyglyph'>=</span> <span class='varid'>concat</span> <span class='varop'>.</span> <span class='varid'>runLA</span> <span class='layout'>(</span> <span class='varid'>xshow</span> <span class='varid'>unlistA</span> <span class='layout'>)</span>+<a name="line-375"></a>    <span class='varid'>readXML</span> <span class='keyglyph'>=</span> <span class='varid'>runLA</span> <span class='varid'>xread</span>+<a name="line-376"></a>+<a name="line-377"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-378"></a>+<a name="line-379"></a><span class='comment'>-- | Encoding of optional data by ignoring the Nothing case during pickling</span>+<a name="line-380"></a><span class='comment'>-- and relying on failure during unpickling to recompute the Nothing case</span>+<a name="line-381"></a><span class='comment'>--</span>+<a name="line-382"></a><span class='comment'>-- The default pickler for Maybe types</span>+<a name="line-383"></a>+<a name="line-384"></a><a name="xpOption"></a><span class='definition'>xpOption</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='layout'>(</span><span class='conid'>Maybe</span> <span class='varid'>a</span><span class='layout'>)</span>+<a name="line-385"></a><span class='definition'>xpOption</span> <span class='varid'>pa</span>+<a name="line-386"></a>    <span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</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'>st</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>+<a name="line-387"></a>			   <span class='keyword'>case</span> <span class='varid'>a</span> <span class='keyword'>of</span>+<a name="line-388"></a>			   <span class='conid'>Nothing</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>st</span>+<a name="line-389"></a>			   <span class='conid'>Just</span> <span class='varid'>x</span>  <span class='keyglyph'>-&gt;</span> <span class='varid'>appPickle</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>x</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span>+<a name="line-390"></a>			 <span class='layout'>)</span>+<a name="line-391"></a>+<a name="line-392"></a>	 <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='varid'>appUnPickle</span> <span class='varop'>$</span>+<a name="line-393"></a>	                 <span class='varid'>xpChoice</span> <span class='layout'>(</span><span class='varid'>xpLift</span> <span class='conid'>Nothing</span><span class='layout'>)</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>xpLift</span> <span class='varop'>.</span> <span class='conid'>Just</span><span class='layout'>)</span>+<a name="line-394"></a>+<a name="line-395"></a>         <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>scOption</span> <span class='layout'>(</span><span class='varid'>theSchema</span> <span class='varid'>pa</span><span class='layout'>)</span>+<a name="line-396"></a>	 <span class='layout'>}</span>+<a name="line-397"></a>+<a name="line-398"></a><span class='comment'>-- | Optional conversion with default value</span>+<a name="line-399"></a><span class='comment'>--</span>+<a name="line-400"></a><span class='comment'>-- The default value is not encoded in the XML document,</span>+<a name="line-401"></a><span class='comment'>-- during unpickling the default value is inserted if the pickler fails</span>+<a name="line-402"></a>+<a name="line-403"></a><a name="xpDefault"></a><span class='definition'>xpDefault</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='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span>+<a name="line-404"></a><span class='definition'>xpDefault</span> <span class='varid'>df</span>+<a name="line-405"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpWrap</span> <span class='layout'>(</span> <span class='varid'>fromMaybe</span> <span class='varid'>df</span>+<a name="line-406"></a>	     <span class='layout'>,</span> <span class='keyglyph'>\</span> <span class='varid'>x</span> <span class='keyglyph'>-&gt;</span> <span class='keyword'>if</span> <span class='varid'>x</span> <span class='varop'>==</span> <span class='varid'>df</span> <span class='keyword'>then</span> <span class='conid'>Nothing</span> <span class='keyword'>else</span> <span class='conid'>Just</span> <span class='varid'>x</span>+<a name="line-407"></a>	     <span class='layout'>)</span> <span class='varop'>.</span>+<a name="line-408"></a>      <span class='varid'>xpOption</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><span class='comment'>-- | Encoding of list values by pickling all list elements sequentially.</span>+<a name="line-413"></a><span class='comment'>--</span>+<a name="line-414"></a><span class='comment'>-- Unpickler relies on failure for detecting the end of the list.</span>+<a name="line-415"></a><span class='comment'>-- The standard pickler for lists. Can also be used in combination with 'xpWrap'</span>+<a name="line-416"></a><span class='comment'>-- for constructing set and map picklers</span>+<a name="line-417"></a>+<a name="line-418"></a><a name="xpList"></a><span class='definition'>xpList</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='keyglyph'>[</span><span class='varid'>a</span><span class='keyglyph'>]</span>+<a name="line-419"></a><span class='definition'>xpList</span> <span class='varid'>pa</span>+<a name="line-420"></a>    <span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</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'>st</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>+<a name="line-421"></a>			   <span class='keyword'>case</span> <span class='varid'>a</span> <span class='keyword'>of</span>+<a name="line-422"></a>			   <span class='conid'>[]</span>  <span class='keyglyph'>-&gt;</span> <span class='varid'>st</span>+<a name="line-423"></a>			   <span class='keyword'>_</span><span class='conop'>:</span><span class='keyword'>_</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>appPickle</span> <span class='varid'>pc</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span>+<a name="line-424"></a>			 <span class='layout'>)</span>+<a name="line-425"></a>	 <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='varid'>appUnPickle</span> <span class='varop'>$</span>+<a name="line-426"></a>                         <span class='varid'>xpChoice</span> <span class='layout'>(</span><span class='varid'>xpLift</span> <span class='conid'>[]</span><span class='layout'>)</span> <span class='varid'>pa</span>+<a name="line-427"></a>	                   <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>x</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>xpSeq</span> <span class='varid'>id</span> <span class='layout'>(</span><span class='varid'>xpList</span> <span class='varid'>pa</span><span class='layout'>)</span> <span class='layout'>(</span><span class='keyglyph'>\</span><span class='varid'>xs</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>xpLift</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='layout'>)</span><span class='layout'>)</span>+<a name="line-428"></a>+<a name="line-429"></a>	 <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>scList</span> <span class='layout'>(</span><span class='varid'>theSchema</span> <span class='varid'>pa</span><span class='layout'>)</span>+<a name="line-430"></a>	 <span class='layout'>}</span>+<a name="line-431"></a>      <span class='keyword'>where</span>+<a name="line-432"></a>      <span class='varid'>pc</span> <span class='keyglyph'>=</span> <span class='varid'>xpSeq</span> <span class='varid'>head</span>  <span class='varid'>pa</span>       <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>x</span> <span class='keyglyph'>-&gt;</span>+<a name="line-433"></a>	   <span class='varid'>xpSeq</span> <span class='varid'>tail</span> <span class='layout'>(</span><span class='varid'>xpList</span> <span class='varid'>pa</span><span class='layout'>)</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>xs</span> <span class='keyglyph'>-&gt;</span>+<a name="line-434"></a>	   <span class='varid'>xpLift</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='layout'>)</span><span class='layout'>)</span>+<a name="line-435"></a>+<a name="line-436"></a><span class='comment'>-- | Encoding of a none empty list of values</span>+<a name="line-437"></a><span class='comment'>--</span>+<a name="line-438"></a><span class='comment'>-- Attention: when calling this pickler with an empty list,</span>+<a name="line-439"></a><span class='comment'>-- an internal error \"head of empty list is raised\".</span>+<a name="line-440"></a>+<a name="line-441"></a><a name="xpList1"></a><span class='definition'>xpList1</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='keyglyph'>[</span><span class='varid'>a</span><span class='keyglyph'>]</span>+<a name="line-442"></a><span class='definition'>xpList1</span> <span class='varid'>pa</span>+<a name="line-443"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>xpWrap</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='layout'>(</span><span class='varid'>x</span><span class='layout'>,</span> <span class='varid'>xs</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>x</span> <span class='conop'>:</span> <span class='varid'>xs</span>+<a name="line-444"></a>	       <span class='layout'>,</span><span class='keyglyph'>\</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'>-&gt;</span> <span class='layout'>(</span><span class='varid'>x</span><span class='layout'>,</span> <span class='varid'>xs</span><span class='layout'>)</span>+<a name="line-445"></a>	       <span class='layout'>)</span> <span class='varop'>$</span>+<a name="line-446"></a>	<span class='varid'>xpPair</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>xpList</span> <span class='varid'>pa</span><span class='layout'>)</span>+<a name="line-447"></a>      <span class='layout'>)</span> <span class='layout'>{</span> <span class='varid'>theSchema</span> <span class='keyglyph'>=</span> <span class='varid'>scList1</span> <span class='layout'>(</span><span class='varid'>theSchema</span> <span class='varid'>pa</span><span class='layout'>)</span> <span class='layout'>}</span>+<a name="line-448"></a>+<a name="line-449"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-450"></a>+<a name="line-451"></a><span class='comment'>-- | Standard pickler for maps</span>+<a name="line-452"></a><span class='comment'>--</span>+<a name="line-453"></a><span class='comment'>-- This pickler converts a map into a list of pairs.</span>+<a name="line-454"></a><span class='comment'>-- All key value pairs are mapped to an element with name (1.arg),</span>+<a name="line-455"></a><span class='comment'>-- the key is encoded as an attribute named by the 2. argument,</span>+<a name="line-456"></a><span class='comment'>-- the 3. arg is the pickler for the keys, the last one for the values</span>+<a name="line-457"></a>+<a name="line-458"></a><a name="xpMap"></a><span class='definition'>xpMap</span>	<span class='keyglyph'>::</span> <span class='conid'>Ord</span> <span class='varid'>k</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>k</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>v</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='layout'>(</span><span class='conid'>Map</span> <span class='varid'>k</span> <span class='varid'>v</span><span class='layout'>)</span>+<a name="line-459"></a><span class='definition'>xpMap</span> <span class='varid'>en</span> <span class='varid'>an</span> <span class='varid'>xpk</span> <span class='varid'>xpv</span>+<a name="line-460"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpWrap</span> <span class='layout'>(</span> <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>fromList</span>+<a name="line-461"></a>	     <span class='layout'>,</span> <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>toList</span>+<a name="line-462"></a>	     <span class='layout'>)</span> <span class='varop'>$</span>+<a name="line-463"></a>      <span class='varid'>xpList</span> <span class='varop'>$</span>+<a name="line-464"></a>      <span class='varid'>xpElem</span> <span class='varid'>en</span> <span class='varop'>$</span>+<a name="line-465"></a>      <span class='varid'>xpPair</span> <span class='layout'>(</span> <span class='varid'>xpAttr</span> <span class='varid'>an</span> <span class='varop'>$</span> <span class='varid'>xpk</span> <span class='layout'>)</span> <span class='varid'>xpv</span>+<a name="line-466"></a>+<a name="line-467"></a>+<a name="line-468"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-469"></a>+<a name="line-470"></a><span class='comment'>-- | Pickler for sum data types.</span>+<a name="line-471"></a><span class='comment'>--</span>+<a name="line-472"></a><span class='comment'>-- Every constructor is mapped to an index into the list of picklers.</span>+<a name="line-473"></a><span class='comment'>-- The index is used only during pickling, not during unpickling, there the 1. match is taken</span>+<a name="line-474"></a>+<a name="line-475"></a><a name="xpAlt"></a><span class='definition'>xpAlt</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Int</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>PU</span> <span class='varid'>a</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span>+<a name="line-476"></a><span class='definition'>xpAlt</span> <span class='varid'>tag</span> <span class='varid'>ps</span>+<a name="line-477"></a>    <span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</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'>st</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>+<a name="line-478"></a>			   <span class='keyword'>let</span>+<a name="line-479"></a>			   <span class='varid'>pa</span> <span class='keyglyph'>=</span> <span class='varid'>ps</span> <span class='varop'>!!</span> <span class='layout'>(</span><span class='varid'>tag</span> <span class='varid'>a</span><span class='layout'>)</span>+<a name="line-480"></a>			   <span class='keyword'>in</span>+<a name="line-481"></a>			   <span class='varid'>appPickle</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span>+<a name="line-482"></a>			 <span class='layout'>)</span>+<a name="line-483"></a>	 <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='varid'>appUnPickle</span> <span class='varop'>$</span>+<a name="line-484"></a>	                 <span class='layout'>(</span> <span class='keyword'>case</span> <span class='varid'>ps</span> <span class='keyword'>of</span>+<a name="line-485"></a>			   <span class='conid'>[]</span>     <span class='keyglyph'>-&gt;</span> <span class='varid'>xpZero</span>+<a name="line-486"></a>			   <span class='varid'>pa</span><span class='conop'>:</span><span class='varid'>ps1</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>xpChoice</span> <span class='layout'>(</span><span class='varid'>xpAlt</span> <span class='varid'>tag</span> <span class='varid'>ps1</span><span class='layout'>)</span> <span class='varid'>pa</span> <span class='varid'>xpLift</span>+<a name="line-487"></a>			 <span class='layout'>)</span>+<a name="line-488"></a>	 <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>scAlts</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='varid'>theSchema</span> <span class='varid'>ps</span><span class='layout'>)</span>+<a name="line-489"></a>	 <span class='layout'>}</span>+<a name="line-490"></a>+<a name="line-491"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-492"></a>+<a name="line-493"></a><span class='comment'>-- | Pickler for wrapping\/unwrapping data into an XML element</span>+<a name="line-494"></a><span class='comment'>--</span>+<a name="line-495"></a><span class='comment'>-- Extra parameter is the element name. THE pickler for constructing</span>+<a name="line-496"></a><span class='comment'>-- nested structures</span>+<a name="line-497"></a><span class='comment'>--</span>+<a name="line-498"></a><span class='comment'>-- Example:</span>+<a name="line-499"></a><span class='comment'>--</span>+<a name="line-500"></a><span class='comment'>-- &gt; xpElem "number" $ xpickle</span>+<a name="line-501"></a><span class='comment'>--</span>+<a name="line-502"></a><span class='comment'>-- will map an (42::Int) onto</span>+<a name="line-503"></a><span class='comment'>--</span>+<a name="line-504"></a><span class='comment'>-- &gt; &lt;number&gt;42&lt;/number&gt;</span>+<a name="line-505"></a>+<a name="line-506"></a><a name="xpElem"></a><span class='definition'>xpElem</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span>+<a name="line-507"></a><span class='definition'>xpElem</span> <span class='varid'>name</span> <span class='varid'>pa</span>+<a name="line-508"></a>    <span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</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'>st</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>+<a name="line-509"></a>			   <span class='keyword'>let</span>+<a name="line-510"></a>	                   <span class='varid'>st'</span> <span class='keyglyph'>=</span> <span class='varid'>appPickle</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='varid'>emptySt</span><span class='layout'>)</span>+<a name="line-511"></a>			   <span class='keyword'>in</span>+<a name="line-512"></a>			   <span class='varid'>addCont</span> <span class='layout'>(</span><span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>mkElement</span> <span class='layout'>(</span><span class='varid'>mkName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>attributes</span> <span class='varid'>st'</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>contents</span> <span class='varid'>st'</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>st</span>+<a name="line-513"></a>			 <span class='layout'>)</span>+<a name="line-514"></a>	 <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>st</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>fromMaybe</span> <span class='layout'>(</span><span class='conid'>Nothing</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>unpickleElement</span> <span class='varid'>st</span><span class='layout'>)</span>+<a name="line-515"></a>	 <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>scElem</span> <span class='varid'>name</span> <span class='layout'>(</span><span class='varid'>theSchema</span> <span class='varid'>pa</span><span class='layout'>)</span>+<a name="line-516"></a>	 <span class='layout'>}</span>+<a name="line-517"></a>      <span class='keyword'>where</span>+<a name="line-518"></a>      <span class='varid'>unpickleElement</span> <span class='varid'>st</span>+<a name="line-519"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-520"></a>	    <span class='varid'>t</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getCont</span> <span class='varid'>st</span>+<a name="line-521"></a>	    <span class='varid'>n</span> <span class='keyglyph'>&lt;-</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>getElemName</span> <span class='varid'>t</span>+<a name="line-522"></a>	    <span class='keyword'>if</span> <span class='varid'>qualifiedName</span> <span class='varid'>n</span> <span class='varop'>/=</span> <span class='varid'>name</span>+<a name="line-523"></a>	       <span class='keyword'>then</span> <span class='varid'>fail</span> <span class='str'>"element name does not match"</span>+<a name="line-524"></a>	       <span class='keyword'>else</span> <span class='keyword'>do</span>+<a name="line-525"></a>		    <span class='keyword'>let</span> <span class='varid'>cs</span> <span class='keyglyph'>=</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>getChildren</span> <span class='varid'>t</span>+<a name="line-526"></a>		    <span class='varid'>al</span> <span class='keyglyph'>&lt;-</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>getAttrl</span> <span class='varid'>t</span>+<a name="line-527"></a>		    <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>fst</span> <span class='varop'>.</span> <span class='varid'>appUnPickle</span> <span class='varid'>pa</span> <span class='varop'>$</span> <span class='conid'>St</span> <span class='layout'>{</span><span class='varid'>attributes</span> <span class='keyglyph'>=</span> <span class='varid'>al</span><span class='layout'>,</span> <span class='varid'>contents</span> <span class='keyglyph'>=</span> <span class='varid'>cs</span><span class='layout'>}</span>+<a name="line-528"></a>		    <span class='varid'>return</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>res</span><span class='layout'>,</span> <span class='varid'>dropCont</span> <span class='varid'>st</span><span class='layout'>)</span>+<a name="line-529"></a>+<a name="line-530"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-531"></a>+<a name="line-532"></a><span class='comment'>-- | Pickler for wrapping\/unwrapping data into an XML element with an attribute with given value</span>+<a name="line-533"></a><span class='comment'>--</span>+<a name="line-534"></a><span class='comment'>-- To make XML structures flexible but limit the number of different elements, it's sometimes</span>+<a name="line-535"></a><span class='comment'>-- useful to use a kind of generic element with a key value structure</span>+<a name="line-536"></a><span class='comment'>--</span>+<a name="line-537"></a><span class='comment'>-- Example:</span>+<a name="line-538"></a><span class='comment'>--</span>+<a name="line-539"></a><span class='comment'>-- &gt; &lt;attr name="key1"&gt;value1&lt;/attr&gt;</span>+<a name="line-540"></a><span class='comment'>-- &gt; &lt;attr name="key2"&gt;value2&lt;/attr&gt;</span>+<a name="line-541"></a><span class='comment'>-- &gt; &lt;attr name="key3"&gt;value3&lt;/attr&gt;</span>+<a name="line-542"></a><span class='comment'>--</span>+<a name="line-543"></a><span class='comment'>-- the Haskell datatype may look like this</span>+<a name="line-544"></a><span class='comment'>--</span>+<a name="line-545"></a><span class='comment'>-- &gt; type T = T { key1 :: Int ; key2 :: String ; key3 :: Double }</span>+<a name="line-546"></a><span class='comment'>--</span>+<a name="line-547"></a><span class='comment'>-- Then the picker for that type looks like this</span>+<a name="line-548"></a><span class='comment'>--</span>+<a name="line-549"></a><span class='comment'>-- &gt; xpT :: PU T</span>+<a name="line-550"></a><span class='comment'>-- &gt; xpT = xpWrap ( uncurry3 T, \ t -&gt; (key1 t, key2 t, key3 t) ) $</span>+<a name="line-551"></a><span class='comment'>-- &gt;       xpTriple (xpElemWithAttrValue "attr" "name" "key1" $ xpickle)</span>+<a name="line-552"></a><span class='comment'>-- &gt;                (xpElemWithAttrValue "attr" "name" "key2" $ xpText0)</span>+<a name="line-553"></a><span class='comment'>-- &gt;                (xpElemWithAttrValue "attr" "name" "key3" $ xpickle)</span>+<a name="line-554"></a>+<a name="line-555"></a><a name="xpElemWithAttrValue"></a><span class='definition'>xpElemWithAttrValue</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> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span>+<a name="line-556"></a><span class='definition'>xpElemWithAttrValue</span> <span class='varid'>name</span> <span class='varid'>an</span> <span class='varid'>av</span> <span class='varid'>pa</span>+<a name="line-557"></a>    <span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</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'>st</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>+<a name="line-558"></a>			   <span class='keyword'>let</span>+<a name="line-559"></a>	                   <span class='varid'>st'</span> <span class='keyglyph'>=</span> <span class='varid'>appPickle</span> <span class='varid'>pa'</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='varid'>emptySt</span><span class='layout'>)</span>+<a name="line-560"></a>			   <span class='keyword'>in</span>+<a name="line-561"></a>			   <span class='varid'>addCont</span> <span class='layout'>(</span><span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>mkElement</span> <span class='layout'>(</span><span class='varid'>mkName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>attributes</span> <span class='varid'>st'</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>contents</span> <span class='varid'>st'</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>st</span>+<a name="line-562"></a>			 <span class='layout'>)</span>+<a name="line-563"></a>	 <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>st</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>fromMaybe</span> <span class='layout'>(</span><span class='conid'>Nothing</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>unpickleElement</span> <span class='varid'>st</span><span class='layout'>)</span>+<a name="line-564"></a>	 <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>scElem</span> <span class='varid'>name</span> <span class='layout'>(</span><span class='varid'>theSchema</span> <span class='varid'>pa'</span><span class='layout'>)</span>+<a name="line-565"></a>	 <span class='layout'>}</span>+<a name="line-566"></a>      <span class='keyword'>where</span>+<a name="line-567"></a>      <span class='varid'>pa'</span> <span class='keyglyph'>=</span> <span class='varid'>xpAddFixedAttr</span> <span class='varid'>an</span> <span class='varid'>av</span> <span class='varop'>$</span> <span class='varid'>pa</span>+<a name="line-568"></a>      <span class='varid'>noMatch</span> <span class='keyglyph'>=</span> <span class='varid'>null</span> <span class='varop'>.</span> <span class='varid'>runLA</span> <span class='layout'>(</span> <span class='varid'>isElem</span>+<a name="line-569"></a>			       <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-570"></a>			       <span class='varid'>hasName</span> <span class='varid'>name</span>+<a name="line-571"></a>			       <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-572"></a>			       <span class='varid'>hasAttrValue</span> <span class='varid'>an</span> <span class='layout'>(</span><span class='varop'>==</span><span class='varid'>av</span><span class='layout'>)</span>+<a name="line-573"></a>			     <span class='layout'>)</span>+<a name="line-574"></a>      <span class='varid'>unpickleElement</span> <span class='varid'>st</span>+<a name="line-575"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-576"></a>	    <span class='varid'>t</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getCont</span> <span class='varid'>st</span>+<a name="line-577"></a>	    <span class='keyword'>if</span> <span class='varid'>noMatch</span> <span class='varid'>t</span>+<a name="line-578"></a>	       <span class='keyword'>then</span> <span class='varid'>fail</span> <span class='str'>"element name or attr value does not match"</span>+<a name="line-579"></a>	       <span class='keyword'>else</span> <span class='keyword'>do</span>+<a name="line-580"></a>		    <span class='keyword'>let</span> <span class='varid'>cs</span> <span class='keyglyph'>=</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>getChildren</span> <span class='varid'>t</span>+<a name="line-581"></a>		    <span class='varid'>al</span> <span class='keyglyph'>&lt;-</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>getAttrl</span> <span class='varid'>t</span>+<a name="line-582"></a>		    <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>fst</span> <span class='varop'>.</span> <span class='varid'>appUnPickle</span> <span class='varid'>pa</span> <span class='varop'>$</span> <span class='conid'>St</span> <span class='layout'>{</span><span class='varid'>attributes</span> <span class='keyglyph'>=</span> <span class='varid'>al</span><span class='layout'>,</span> <span class='varid'>contents</span> <span class='keyglyph'>=</span> <span class='varid'>cs</span><span class='layout'>}</span>+<a name="line-583"></a>		    <span class='varid'>return</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>res</span><span class='layout'>,</span> <span class='varid'>dropCont</span> <span class='varid'>st</span><span class='layout'>)</span>+<a name="line-584"></a>+<a name="line-585"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-586"></a>+<a name="line-587"></a><span class='comment'>-- | Pickler for storing\/retreiving data into\/from an attribute value</span>+<a name="line-588"></a><span class='comment'>--</span>+<a name="line-589"></a><span class='comment'>-- The attribute is inserted in the surrounding element constructed by the 'xpElem' pickler</span>+<a name="line-590"></a>+<a name="line-591"></a><a name="xpAttr"></a><span class='definition'>xpAttr</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span>+<a name="line-592"></a><span class='definition'>xpAttr</span> <span class='varid'>name</span> <span class='varid'>pa</span>+<a name="line-593"></a>    <span class='keyglyph'>=</span> <span class='conid'>PU</span> <span class='layout'>{</span> <span class='varid'>appPickle</span>   <span class='keyglyph'>=</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'>st</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span>+<a name="line-594"></a>			   <span class='keyword'>let</span>+<a name="line-595"></a>			   <span class='varid'>st'</span> <span class='keyglyph'>=</span> <span class='varid'>appPickle</span> <span class='varid'>pa</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='varid'>emptySt</span><span class='layout'>)</span>+<a name="line-596"></a>			   <span class='keyword'>in</span>+<a name="line-597"></a>			   <span class='varid'>addAtt</span> <span class='layout'>(</span><span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>mkAttr</span> <span class='layout'>(</span><span class='varid'>mkName</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>contents</span> <span class='varid'>st'</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>st</span>+<a name="line-598"></a>			 <span class='layout'>)</span>+<a name="line-599"></a>	 <span class='layout'>,</span> <span class='varid'>appUnPickle</span> <span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>st</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>fromMaybe</span> <span class='layout'>(</span><span class='conid'>Nothing</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>unpickleAttr</span> <span class='varid'>st</span><span class='layout'>)</span>+<a name="line-600"></a>	 <span class='layout'>,</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>scAttr</span> <span class='varid'>name</span> <span class='layout'>(</span><span class='varid'>theSchema</span> <span class='varid'>pa</span><span class='layout'>)</span>+<a name="line-601"></a>	 <span class='layout'>}</span>+<a name="line-602"></a>      <span class='keyword'>where</span>+<a name="line-603"></a>      <span class='varid'>unpickleAttr</span> <span class='varid'>st</span>+<a name="line-604"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-605"></a>	    <span class='varid'>a</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getAtt</span> <span class='varid'>name</span> <span class='varid'>st</span>+<a name="line-606"></a>	    <span class='keyword'>let</span> <span class='varid'>av</span> <span class='keyglyph'>=</span> <span class='conid'>XN</span><span class='varop'>.</span><span class='varid'>getChildren</span> <span class='varid'>a</span>+<a name="line-607"></a>	    <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>fst</span> <span class='varop'>.</span> <span class='varid'>appUnPickle</span> <span class='varid'>pa</span> <span class='varop'>$</span> <span class='conid'>St</span> <span class='layout'>{</span><span class='varid'>attributes</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span><span class='layout'>,</span> <span class='varid'>contents</span> <span class='keyglyph'>=</span> <span class='varid'>av</span><span class='layout'>}</span>+<a name="line-608"></a>	    <span class='varid'>return</span> <span class='layout'>(</span><span class='conid'>Just</span> <span class='varid'>res</span><span class='layout'>,</span> <span class='varid'>st</span><span class='layout'>)</span>	<span class='comment'>-- attribute is not removed from attribute list,</span>+<a name="line-609"></a>					<span class='comment'>-- attributes are selected by name</span>+<a name="line-610"></a>+<a name="line-611"></a><span class='comment'>-- | Add an optional attribute for an optional value (Maybe a).</span>+<a name="line-612"></a>+<a name="line-613"></a><a name="xpAttrImplied"></a><span class='definition'>xpAttrImplied</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='layout'>(</span><span class='conid'>Maybe</span> <span class='varid'>a</span><span class='layout'>)</span>+<a name="line-614"></a><span class='definition'>xpAttrImplied</span> <span class='varid'>name</span> <span class='varid'>pa</span>+<a name="line-615"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpOption</span> <span class='varop'>$</span> <span class='varid'>xpAttr</span> <span class='varid'>name</span> <span class='varid'>pa</span>+<a name="line-616"></a>+<a name="line-617"></a><a name="xpAttrFixed"></a><span class='definition'>xpAttrFixed</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'>PU</span> <span class='conid'>()</span>+<a name="line-618"></a><span class='definition'>xpAttrFixed</span> <span class='varid'>name</span> <span class='varid'>val</span>+<a name="line-619"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>xpWrapMaybe</span> <span class='layout'>(</span> <span class='keyglyph'>\</span> <span class='varid'>v</span> <span class='keyglyph'>-&gt;</span> <span class='keyword'>if</span> <span class='varid'>v</span> <span class='varop'>==</span> <span class='varid'>val</span> <span class='keyword'>then</span> <span class='conid'>Just</span> <span class='conid'>()</span> <span class='keyword'>else</span> <span class='conid'>Nothing</span>+<a name="line-620"></a>		    <span class='layout'>,</span> <span class='varid'>const</span> <span class='varid'>val</span>+<a name="line-621"></a>		    <span class='layout'>)</span> <span class='varop'>$</span>+<a name="line-622"></a>	<span class='varid'>xpAttr</span> <span class='varid'>name</span> <span class='varid'>xpText</span>+<a name="line-623"></a>      <span class='layout'>)</span> <span class='layout'>{</span> <span class='varid'>theSchema</span>   <span class='keyglyph'>=</span> <span class='varid'>scAttr</span> <span class='varid'>name</span> <span class='layout'>(</span><span class='varid'>scFixed</span> <span class='varid'>val</span><span class='layout'>)</span> <span class='layout'>}</span>+<a name="line-624"></a>+<a name="line-625"></a><span class='comment'>-- | Add an attribute with a fixed value.</span>+<a name="line-626"></a><span class='comment'>--</span>+<a name="line-627"></a><span class='comment'>-- Useful e.g. to declare namespaces. Is implemented by 'xpAttrFixed'</span>+<a name="line-628"></a>+<a name="line-629"></a><a name="xpAddFixedAttr"></a><span class='definition'>xpAddFixedAttr</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'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span>+<a name="line-630"></a><span class='definition'>xpAddFixedAttr</span> <span class='varid'>name</span> <span class='varid'>val</span> <span class='varid'>pa</span>+<a name="line-631"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpWrap</span> <span class='layout'>(</span> <span class='varid'>snd</span>+<a name="line-632"></a>	     <span class='layout'>,</span> <span class='conid'>(,)</span> <span class='conid'>()</span>+<a name="line-633"></a>	     <span class='layout'>)</span> <span class='varop'>$</span>+<a name="line-634"></a>      <span class='varid'>xpPair</span> <span class='layout'>(</span><span class='varid'>xpAttrFixed</span> <span class='varid'>name</span> <span class='varid'>val</span><span class='layout'>)</span> <span class='varid'>pa</span>+<a name="line-635"></a>+<a name="line-636"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-637"></a>+<a name="line-638"></a><span class='comment'>-- | The class for overloading 'xpickle', the default pickler</span>+<a name="line-639"></a>+<a name="line-640"></a><a name="XmlPickler"></a><span class='keyword'>class</span> <span class='conid'>XmlPickler</span> <span class='varid'>a</span> <span class='keyword'>where</span>+<a name="line-641"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span>+<a name="line-642"></a>+<a name="line-643"></a><span class='keyword'>instance</span> <span class='conid'>XmlPickler</span> <span class='conid'>Int</span> <span class='keyword'>where</span>+<a name="line-644"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xpPrim</span>+<a name="line-645"></a>+<a name="line-646"></a><span class='keyword'>instance</span> <span class='conid'>XmlPickler</span> <span class='conid'>Integer</span> <span class='keyword'>where</span>+<a name="line-647"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xpPrim</span>+<a name="line-648"></a>+<a name="line-649"></a><span class='comment'>{-+<a name="line-650"></a>  no instance of XmlPickler Char+<a name="line-651"></a>  because then every text would be encoded+<a name="line-652"></a>  char by char, because of the instance for lists+<a name="line-653"></a>+<a name="line-654"></a>instance XmlPickler Char where+<a name="line-655"></a>    xpickle = xpPrim+<a name="line-656"></a>-}</span>+<a name="line-657"></a>+<a name="line-658"></a><span class='keyword'>instance</span> <span class='conid'>XmlPickler</span> <span class='conid'>()</span> <span class='keyword'>where</span>+<a name="line-659"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xpUnit</span>+<a name="line-660"></a>+<a name="line-661"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>XmlPickler</span> <span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>XmlPickler</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='keyword'>where</span>+<a name="line-662"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xpPair</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span>+<a name="line-663"></a>+<a name="line-664"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>XmlPickler</span> <span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>b</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>c</span><span class='layout'>)</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>XmlPickler</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> <span class='keyword'>where</span>+<a name="line-665"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xpTriple</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span>+<a name="line-666"></a>+<a name="line-667"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>XmlPickler</span> <span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>b</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>c</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>d</span><span class='layout'>)</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>XmlPickler</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><span class='varid'>d</span><span class='layout'>)</span> <span class='keyword'>where</span>+<a name="line-668"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xp4Tuple</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span>+<a name="line-669"></a>+<a name="line-670"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>XmlPickler</span> <span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>b</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>c</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>d</span><span class='layout'>,</span> <span class='conid'>XmlPickler</span> <span class='varid'>e</span><span class='layout'>)</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>XmlPickler</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><span class='varid'>d</span><span class='layout'>,</span><span class='varid'>e</span><span class='layout'>)</span> <span class='keyword'>where</span>+<a name="line-671"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xp5Tuple</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span> <span class='varid'>xpickle</span>+<a name="line-672"></a>+<a name="line-673"></a><span class='keyword'>instance</span> <span class='conid'>XmlPickler</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>XmlPickler</span> <span class='keyglyph'>[</span><span class='varid'>a</span><span class='keyglyph'>]</span> <span class='keyword'>where</span>+<a name="line-674"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xpList</span> <span class='varid'>xpickle</span>+<a name="line-675"></a>+<a name="line-676"></a><span class='keyword'>instance</span> <span class='conid'>XmlPickler</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>XmlPickler</span> <span class='layout'>(</span><span class='conid'>Maybe</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyword'>where</span>+<a name="line-677"></a>    <span class='varid'>xpickle</span> <span class='keyglyph'>=</span> <span class='varid'>xpOption</span> <span class='varid'>xpickle</span>+<a name="line-678"></a>+<a name="line-679"></a><span class='comment'>-- ------------------------------------------------------------</span> </pre></body> </html>
doc/hdoc/src/Text-XML-HXT-Arrow-Pickle.html view
@@ -64,185 +64,191 @@ <a name="line-56"></a> <a name="line-57"></a>    <span class='layout'>,</span> <span class='varid'>xp4Tuple</span> <a name="line-58"></a>    <span class='layout'>,</span> <span class='varid'>xp5Tuple</span>-<a name="line-59"></a>    <span class='layout'>,</span> <span class='varid'>xpAddFixedAttr</span>-<a name="line-60"></a>    <span class='layout'>,</span> <span class='varid'>xpAlt</span>-<a name="line-61"></a>    <span class='layout'>,</span> <span class='varid'>xpAttr</span>-<a name="line-62"></a>    <span class='layout'>,</span> <span class='varid'>xpAttrFixed</span>-<a name="line-63"></a>    <span class='layout'>,</span> <span class='varid'>xpAttrImplied</span>-<a name="line-64"></a>    <span class='layout'>,</span> <span class='varid'>xpChoice</span>-<a name="line-65"></a>    <span class='layout'>,</span> <span class='varid'>xpCondSeq</span>-<a name="line-66"></a>    <span class='layout'>,</span> <span class='varid'>xpElem</span>-<a name="line-67"></a>    <span class='layout'>,</span> <span class='varid'>xpickle</span>-<a name="line-68"></a>    <span class='layout'>,</span> <span class='varid'>xpLift</span>-<a name="line-69"></a>    <span class='layout'>,</span> <span class='varid'>xpLiftMaybe</span>-<a name="line-70"></a>    <span class='layout'>,</span> <span class='varid'>xpList</span>-<a name="line-71"></a>    <span class='layout'>,</span> <span class='varid'>xpList1</span>-<a name="line-72"></a>    <span class='layout'>,</span> <span class='varid'>xpOption</span>-<a name="line-73"></a>    <span class='layout'>,</span> <span class='varid'>xpPair</span>-<a name="line-74"></a>    <span class='layout'>,</span> <span class='varid'>xpPrim</span>-<a name="line-75"></a>    <span class='layout'>,</span> <span class='varid'>xpSeq</span>-<a name="line-76"></a>    <span class='layout'>,</span> <span class='varid'>xpText</span>-<a name="line-77"></a>    <span class='layout'>,</span> <span class='varid'>xpText0</span>-<a name="line-78"></a>    <span class='layout'>,</span> <span class='varid'>xpTextDT</span>-<a name="line-79"></a>    <span class='layout'>,</span> <span class='varid'>xpText0DT</span>-<a name="line-80"></a>    <span class='layout'>,</span> <span class='varid'>xpTree</span>-<a name="line-81"></a>    <span class='layout'>,</span> <span class='varid'>xpTriple</span>-<a name="line-82"></a>    <span class='layout'>,</span> <span class='varid'>xpUnit</span>-<a name="line-83"></a>    <span class='layout'>,</span> <span class='varid'>xpWrap</span>-<a name="line-84"></a>    <span class='layout'>,</span> <span class='varid'>xpWrapMaybe</span>-<a name="line-85"></a>    <span class='layout'>,</span> <span class='varid'>xpZero</span>-<a name="line-86"></a>-<a name="line-87"></a>      <span class='comment'>-- from Text.XML.HXT.Arrow.Pickle.Schema</span>-<a name="line-88"></a>    <span class='layout'>,</span> <span class='conid'>Schema</span>-<a name="line-89"></a>    <span class='layout'>,</span> <span class='conid'>Schemas</span>-<a name="line-90"></a>    <span class='layout'>,</span> <span class='conid'>DataTypeDescr</span>-<a name="line-91"></a>    <span class='layout'>)</span>-<a name="line-92"></a><span class='keyword'>where</span>-<a name="line-93"></a>-<a name="line-94"></a><span class='keyword'>import</span>           <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>-<a name="line-95"></a>-<a name="line-96"></a><span class='keyword'>import</span>           <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>ListArrows</span>-<a name="line-97"></a>-<a name="line-98"></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'>Interface</span>-<a name="line-99"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlArrow</span>-<a name="line-100"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlIOStateArrow</span>-<a name="line-101"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>ReadDocument</span>-<a name="line-102"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>WriteDocument</span>+<a name="line-59"></a>    <span class='layout'>,</span> <span class='varid'>xp6Tuple</span>+<a name="line-60"></a>    <span class='layout'>,</span> <span class='varid'>xpAddFixedAttr</span>+<a name="line-61"></a>    <span class='layout'>,</span> <span class='varid'>xpAlt</span>+<a name="line-62"></a>    <span class='layout'>,</span> <span class='varid'>xpAttr</span>+<a name="line-63"></a>    <span class='layout'>,</span> <span class='varid'>xpAttrFixed</span>+<a name="line-64"></a>    <span class='layout'>,</span> <span class='varid'>xpAttrImplied</span>+<a name="line-65"></a>    <span class='layout'>,</span> <span class='varid'>xpChoice</span>+<a name="line-66"></a>    <span class='layout'>,</span> <span class='varid'>xpCondSeq</span>+<a name="line-67"></a>    <span class='layout'>,</span> <span class='varid'>xpDefault</span>+<a name="line-68"></a>    <span class='layout'>,</span> <span class='varid'>xpElem</span>+<a name="line-69"></a>    <span class='layout'>,</span> <span class='varid'>xpElemWithAttrValue</span>+<a name="line-70"></a>    <span class='layout'>,</span> <span class='varid'>xpickle</span>+<a name="line-71"></a>    <span class='layout'>,</span> <span class='varid'>xpLift</span>+<a name="line-72"></a>    <span class='layout'>,</span> <span class='varid'>xpLiftMaybe</span>+<a name="line-73"></a>    <span class='layout'>,</span> <span class='varid'>xpList</span>+<a name="line-74"></a>    <span class='layout'>,</span> <span class='varid'>xpList1</span>+<a name="line-75"></a>    <span class='layout'>,</span> <span class='varid'>xpMap</span>+<a name="line-76"></a>    <span class='layout'>,</span> <span class='varid'>xpOption</span>+<a name="line-77"></a>    <span class='layout'>,</span> <span class='varid'>xpPair</span>+<a name="line-78"></a>    <span class='layout'>,</span> <span class='varid'>xpPrim</span>+<a name="line-79"></a>    <span class='layout'>,</span> <span class='varid'>xpSeq</span>+<a name="line-80"></a>    <span class='layout'>,</span> <span class='varid'>xpText</span>+<a name="line-81"></a>    <span class='layout'>,</span> <span class='varid'>xpText0</span>+<a name="line-82"></a>    <span class='layout'>,</span> <span class='varid'>xpTextDT</span>+<a name="line-83"></a>    <span class='layout'>,</span> <span class='varid'>xpText0DT</span>+<a name="line-84"></a>    <span class='layout'>,</span> <span class='varid'>xpTree</span>+<a name="line-85"></a>    <span class='layout'>,</span> <span class='varid'>xpTrees</span>+<a name="line-86"></a>    <span class='layout'>,</span> <span class='varid'>xpTriple</span>+<a name="line-87"></a>    <span class='layout'>,</span> <span class='varid'>xpUnit</span>+<a name="line-88"></a>    <span class='layout'>,</span> <span class='varid'>xpWrap</span>+<a name="line-89"></a>    <span class='layout'>,</span> <span class='varid'>xpWrapMaybe</span>+<a name="line-90"></a>    <span class='layout'>,</span> <span class='varid'>xpXmlText</span>+<a name="line-91"></a>    <span class='layout'>,</span> <span class='varid'>xpZero</span>+<a name="line-92"></a>+<a name="line-93"></a>      <span class='comment'>-- from Text.XML.HXT.Arrow.Pickle.Schema</span>+<a name="line-94"></a>    <span class='layout'>,</span> <span class='conid'>Schema</span>+<a name="line-95"></a>    <span class='layout'>,</span> <span class='conid'>Schemas</span>+<a name="line-96"></a>    <span class='layout'>,</span> <span class='conid'>DataTypeDescr</span>+<a name="line-97"></a>    <span class='layout'>)</span>+<a name="line-98"></a><span class='keyword'>where</span>+<a name="line-99"></a>+<a name="line-100"></a><span class='keyword'>import</span>           <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>+<a name="line-101"></a>+<a name="line-102"></a><span class='keyword'>import</span>           <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>ListArrows</span> <a name="line-103"></a>-<a name="line-104"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>Pickle</span><span class='varop'>.</span><span class='conid'>Xml</span>-<a name="line-105"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>Pickle</span><span class='varop'>.</span><span class='conid'>Schema</span>-<a name="line-106"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>Pickle</span><span class='varop'>.</span><span class='conid'>DTD</span>-<a name="line-107"></a>-<a name="line-108"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-104"></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'>Interface</span>+<a name="line-105"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlArrow</span>+<a name="line-106"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlIOStateArrow</span>+<a name="line-107"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>ReadDocument</span>+<a name="line-108"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>WriteDocument</span> <a name="line-109"></a>-<a name="line-110"></a><span class='comment'>-- the arrow interface for pickling and unpickling</span>-<a name="line-111"></a>-<a name="line-112"></a><span class='comment'>-- | store an arbitray value in a persistent XML document</span>-<a name="line-113"></a><span class='comment'>--</span>-<a name="line-114"></a><span class='comment'>-- The pickler converts a value into an XML tree, this is written out with</span>-<a name="line-115"></a><span class='comment'>-- 'Text.XML.HXT.Arrow.writeDocument'. The option list is passed to 'Text.XML.HXT.Arrow.writeDocument'</span>-<a name="line-116"></a><span class='comment'>--</span>-<a name="line-117"></a><span class='comment'>-- An option evaluated by this arrow is 'a_addDTD'.</span>-<a name="line-118"></a><span class='comment'>-- If 'a_addDTD' is set ('v_1'), the pickler DTD is added as an inline DTD into the document.</span>-<a name="line-119"></a>-<a name="line-120"></a><a name="xpickleDocument"></a><span class='definition'>xpickleDocument</span>		<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>a</span> <span class='conid'>XmlTree</span>-<a name="line-121"></a><span class='definition'>xpickleDocument</span> <span class='varid'>xp</span> <span class='varid'>al</span> <span class='varid'>dest</span>-<a name="line-122"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpickleVal</span> <span class='varid'>xp</span>-<a name="line-123"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-124"></a>      <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='str'>"xpickleVal applied"</span>-<a name="line-125"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-126"></a>      <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>lookup1</span> <span class='varid'>a_addDTD</span> <span class='varid'>al</span> <span class='varop'>==</span> <span class='varid'>v_1</span>-<a name="line-127"></a>	<span class='keyword'>then</span> <span class='varid'>replaceChildren</span> <span class='layout'>(</span> <span class='layout'>(</span><span class='varid'>constA</span> <span class='varid'>undefined</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>xpickleDTD</span> <span class='varid'>xp</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>getChildren</span><span class='layout'>)</span>-<a name="line-128"></a>			       <span class='varop'>&lt;+&gt;</span>-<a name="line-129"></a>			       <span class='varid'>getChildren</span>-<a name="line-130"></a>			     <span class='layout'>)</span>-<a name="line-131"></a>	<span class='keyword'>else</span> <span class='varid'>this</span>-<a name="line-132"></a>      <span class='layout'>)</span>-<a name="line-133"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-134"></a>      <span class='varid'>writeDocument</span> <span class='varid'>al</span> <span class='varid'>dest</span>-<a name="line-135"></a>-<a name="line-136"></a><span class='comment'>-- | Option for generating and adding DTD when document is pickled</span>-<a name="line-137"></a>-<a name="line-138"></a><a name="a_addDTD"></a><span class='definition'>a_addDTD</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>-<a name="line-139"></a><span class='definition'>a_addDTD</span>	<span class='keyglyph'>=</span> <span class='str'>"addDTD"</span>-<a name="line-140"></a>-<a name="line-141"></a><span class='comment'>-- | read an arbitray value from an XML document</span>-<a name="line-142"></a><span class='comment'>--</span>-<a name="line-143"></a><span class='comment'>-- The document is read with 'Text.XML.HXT.Arrow.readDocument'. Options are passed</span>-<a name="line-144"></a><span class='comment'>-- to 'Text.XML.HXT.Arrow.readDocument'. The conversion from XmlTree is done with the</span>-<a name="line-145"></a><span class='comment'>-- pickler.</span>-<a name="line-146"></a><span class='comment'>--</span>-<a name="line-147"></a><span class='comment'>-- @ xpickleDocument xp al dest &gt;&gt;&gt; xunpickleDocument xp al' dest @ is the identity arrow</span>-<a name="line-148"></a><span class='comment'>-- when applied with the appropriate options. When during pickling indentation is switched on,</span>-<a name="line-149"></a><span class='comment'>-- the whitespace must be removed during unpickling.</span>-<a name="line-150"></a>-<a name="line-151"></a><a name="xunpickleDocument"></a><span class='definition'>xunpickleDocument</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>a</span>-<a name="line-152"></a><span class='definition'>xunpickleDocument</span> <span class='varid'>xp</span> <span class='varid'>al</span> <span class='varid'>src</span>-<a name="line-153"></a>			<span class='keyglyph'>=</span> <span class='varid'>readDocument</span> <span class='varid'>al</span> <span class='varid'>src</span>-<a name="line-154"></a>			  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-155"></a>			  <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='layout'>(</span><span class='str'>"xunpickleVal for "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>src</span> <span class='varop'>++</span> <span class='str'>" started"</span><span class='layout'>)</span>-<a name="line-156"></a>			  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-157"></a>			  <span class='varid'>xunpickleVal</span> <span class='varid'>xp</span>-<a name="line-158"></a>			  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-159"></a>			  <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='layout'>(</span><span class='str'>"xunpickleVal for "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>src</span> <span class='varop'>++</span> <span class='str'>" finished"</span><span class='layout'>)</span>-<a name="line-160"></a>-<a name="line-161"></a><span class='comment'>-- | Write out the DTD generated out of a pickler. Calls 'xpicklerDTD'</span>-<a name="line-162"></a>-<a name="line-163"></a><a name="xpickleWriteDTD"></a><span class='definition'>xpickleWriteDTD</span>		<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>XmlTree</span>-<a name="line-164"></a><span class='definition'>xpickleWriteDTD</span>	<span class='varid'>xp</span> <span class='varid'>al</span> <span class='varid'>dest</span>-<a name="line-165"></a>			<span class='keyglyph'>=</span> <span class='varid'>xpickleDTD</span> <span class='varid'>xp</span>-<a name="line-166"></a>			  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-167"></a>			  <span class='varid'>writeDocument</span> <span class='varid'>al</span> <span class='varid'>dest</span>+<a name="line-110"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>Pickle</span><span class='varop'>.</span><span class='conid'>Xml</span>+<a name="line-111"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>Pickle</span><span class='varop'>.</span><span class='conid'>Schema</span>+<a name="line-112"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>Pickle</span><span class='varop'>.</span><span class='conid'>DTD</span>+<a name="line-113"></a>+<a name="line-114"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-115"></a>+<a name="line-116"></a><span class='comment'>-- the arrow interface for pickling and unpickling</span>+<a name="line-117"></a>+<a name="line-118"></a><span class='comment'>-- | store an arbitray value in a persistent XML document</span>+<a name="line-119"></a><span class='comment'>--</span>+<a name="line-120"></a><span class='comment'>-- The pickler converts a value into an XML tree, this is written out with</span>+<a name="line-121"></a><span class='comment'>-- 'Text.XML.HXT.Arrow.writeDocument'. The option list is passed to 'Text.XML.HXT.Arrow.writeDocument'</span>+<a name="line-122"></a><span class='comment'>--</span>+<a name="line-123"></a><span class='comment'>-- An option evaluated by this arrow is 'a_addDTD'.</span>+<a name="line-124"></a><span class='comment'>-- If 'a_addDTD' is set ('v_1'), the pickler DTD is added as an inline DTD into the document.</span>+<a name="line-125"></a>+<a name="line-126"></a><a name="xpickleDocument"></a><span class='definition'>xpickleDocument</span>		<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>a</span> <span class='conid'>XmlTree</span>+<a name="line-127"></a><span class='definition'>xpickleDocument</span> <span class='varid'>xp</span> <span class='varid'>al</span> <span class='varid'>dest</span>+<a name="line-128"></a>    <span class='keyglyph'>=</span> <span class='varid'>xpickleVal</span> <span class='varid'>xp</span>+<a name="line-129"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-130"></a>      <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='str'>"xpickleVal applied"</span>+<a name="line-131"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-132"></a>      <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>lookup1</span> <span class='varid'>a_addDTD</span> <span class='varid'>al</span> <span class='varop'>==</span> <span class='varid'>v_1</span>+<a name="line-133"></a>	<span class='keyword'>then</span> <span class='varid'>replaceChildren</span> <span class='layout'>(</span> <span class='layout'>(</span><span class='varid'>constA</span> <span class='varid'>undefined</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>xpickleDTD</span> <span class='varid'>xp</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>getChildren</span><span class='layout'>)</span>+<a name="line-134"></a>			       <span class='varop'>&lt;+&gt;</span>+<a name="line-135"></a>			       <span class='varid'>getChildren</span>+<a name="line-136"></a>			     <span class='layout'>)</span>+<a name="line-137"></a>	<span class='keyword'>else</span> <span class='varid'>this</span>+<a name="line-138"></a>      <span class='layout'>)</span>+<a name="line-139"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-140"></a>      <span class='varid'>writeDocument</span> <span class='varid'>al</span> <span class='varid'>dest</span>+<a name="line-141"></a>+<a name="line-142"></a><span class='comment'>-- | Option for generating and adding DTD when document is pickled</span>+<a name="line-143"></a>+<a name="line-144"></a><a name="a_addDTD"></a><span class='definition'>a_addDTD</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>+<a name="line-145"></a><span class='definition'>a_addDTD</span>	<span class='keyglyph'>=</span> <span class='str'>"addDTD"</span>+<a name="line-146"></a>+<a name="line-147"></a><span class='comment'>-- | read an arbitray value from an XML document</span>+<a name="line-148"></a><span class='comment'>--</span>+<a name="line-149"></a><span class='comment'>-- The document is read with 'Text.XML.HXT.Arrow.readDocument'. Options are passed</span>+<a name="line-150"></a><span class='comment'>-- to 'Text.XML.HXT.Arrow.readDocument'. The conversion from XmlTree is done with the</span>+<a name="line-151"></a><span class='comment'>-- pickler.</span>+<a name="line-152"></a><span class='comment'>--</span>+<a name="line-153"></a><span class='comment'>-- @ xpickleDocument xp al dest &gt;&gt;&gt; xunpickleDocument xp al' dest @ is the identity arrow</span>+<a name="line-154"></a><span class='comment'>-- when applied with the appropriate options. When during pickling indentation is switched on,</span>+<a name="line-155"></a><span class='comment'>-- the whitespace must be removed during unpickling.</span>+<a name="line-156"></a>+<a name="line-157"></a><a name="xunpickleDocument"></a><span class='definition'>xunpickleDocument</span>	<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>a</span>+<a name="line-158"></a><span class='definition'>xunpickleDocument</span> <span class='varid'>xp</span> <span class='varid'>al</span> <span class='varid'>src</span>+<a name="line-159"></a>			<span class='keyglyph'>=</span> <span class='varid'>readDocument</span> <span class='varid'>al</span> <span class='varid'>src</span>+<a name="line-160"></a>			  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-161"></a>			  <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='layout'>(</span><span class='str'>"xunpickleVal for "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>src</span> <span class='varop'>++</span> <span class='str'>" started"</span><span class='layout'>)</span>+<a name="line-162"></a>			  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-163"></a>			  <span class='varid'>xunpickleVal</span> <span class='varid'>xp</span>+<a name="line-164"></a>			  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-165"></a>			  <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='layout'>(</span><span class='str'>"xunpickleVal for "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>src</span> <span class='varop'>++</span> <span class='str'>" finished"</span><span class='layout'>)</span>+<a name="line-166"></a>+<a name="line-167"></a><span class='comment'>-- | Write out the DTD generated out of a pickler. Calls 'xpicklerDTD'</span> <a name="line-168"></a>-<a name="line-169"></a><span class='comment'>-- | The arrow for generating the DTD out of a pickler</span>-<a name="line-170"></a><span class='comment'>--</span>-<a name="line-171"></a><span class='comment'>-- A DTD is generated from a pickler and check for consistency.</span>-<a name="line-172"></a><span class='comment'>-- Errors concerning the DTD are issued.</span>-<a name="line-173"></a>-<a name="line-174"></a><a name="xpickleDTD"></a><span class='definition'>xpickleDTD</span>		<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>XmlTree</span>-<a name="line-175"></a><span class='definition'>xpickleDTD</span> <span class='varid'>xp</span>		<span class='keyglyph'>=</span> <span class='varid'>root</span> <span class='conid'>[]</span> <span class='keyglyph'>[</span> <span class='varid'>constL</span> <span class='layout'>(</span><span class='varid'>thePicklerDTD</span> <span class='varid'>xp</span><span class='layout'>)</span>-<a name="line-176"></a>				    <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-177"></a>				    <span class='varid'>filterErrorMsg</span>-<a name="line-178"></a>				  <span class='keyglyph'>]</span>+<a name="line-169"></a><a name="xpickleWriteDTD"></a><span class='definition'>xpickleWriteDTD</span>		<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>XmlTree</span>+<a name="line-170"></a><span class='definition'>xpickleWriteDTD</span>	<span class='varid'>xp</span> <span class='varid'>al</span> <span class='varid'>dest</span>+<a name="line-171"></a>			<span class='keyglyph'>=</span> <span class='varid'>xpickleDTD</span> <span class='varid'>xp</span>+<a name="line-172"></a>			  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-173"></a>			  <span class='varid'>writeDocument</span> <span class='varid'>al</span> <span class='varid'>dest</span>+<a name="line-174"></a>+<a name="line-175"></a><span class='comment'>-- | The arrow for generating the DTD out of a pickler</span>+<a name="line-176"></a><span class='comment'>--</span>+<a name="line-177"></a><span class='comment'>-- A DTD is generated from a pickler and check for consistency.</span>+<a name="line-178"></a><span class='comment'>-- Errors concerning the DTD are issued.</span> <a name="line-179"></a>-<a name="line-180"></a><span class='comment'>-- | An arrow for checking picklers</span>-<a name="line-181"></a><span class='comment'>--</span>-<a name="line-182"></a><span class='comment'>-- A value is transformed into an XML document by a given pickler,</span>-<a name="line-183"></a><span class='comment'>-- the associated DTD is extracted from the pickler and checked,</span>-<a name="line-184"></a><span class='comment'>-- the document including the DTD is tranlated into a string,</span>-<a name="line-185"></a><span class='comment'>-- this string is read and validated against the included DTD,</span>-<a name="line-186"></a><span class='comment'>-- and unpickled.</span>-<a name="line-187"></a><span class='comment'>-- The last step is the equality with the input.</span>-<a name="line-188"></a><span class='comment'>--</span>-<a name="line-189"></a><span class='comment'>-- If the check succeeds, the arrow works like this, else it fails.</span>-<a name="line-190"></a>-<a name="line-191"></a><a name="checkPickler"></a><span class='definition'>checkPickler</span>		<span class='keyglyph'>::</span> <span class='conid'>Eq</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>a</span> <span class='varid'>a</span>-<a name="line-192"></a><span class='definition'>checkPickler</span> <span class='varid'>xp</span>		<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>xpickleVal</span> <span class='varid'>xp</span>-<a name="line-193"></a>				  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-194"></a>				  <span class='varid'>replaceChildren</span> <span class='layout'>(</span> <span class='layout'>(</span><span class='varid'>constA</span> <span class='varid'>undefined</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>xpickleDTD</span> <span class='varid'>xp</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>getChildren</span><span class='layout'>)</span>-<a name="line-195"></a>						    <span class='varop'>&lt;+&gt;</span>-<a name="line-196"></a>						    <span class='varid'>getChildren</span>-<a name="line-197"></a>						  <span class='layout'>)</span>-<a name="line-198"></a>				  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-199"></a>				  <span class='varid'>writeDocumentToString</span> <span class='conid'>[]</span>-<a name="line-200"></a>				  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-201"></a>				  <span class='varid'>readFromString</span> <span class='keyglyph'>[</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><span class='keyglyph'>]</span>-<a name="line-202"></a>				  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-203"></a>				  <span class='layout'>(</span> <span class='varid'>xunpickleVal</span> <span class='varid'>xp</span>-<a name="line-204"></a>				    <span class='varop'>`orElse`</span>-<a name="line-205"></a>				    <span class='layout'>(</span> <span class='varid'>issueErr</span> <span class='str'>"unpickling the document failed"</span>-<a name="line-206"></a>				      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-207"></a>				      <span class='varid'>none</span>-<a name="line-208"></a>				    <span class='layout'>)</span>-<a name="line-209"></a>				  <span class='layout'>)</span>-<a name="line-210"></a>				<span class='layout'>)</span>-<a name="line-211"></a>				<span class='varop'>&amp;&amp;&amp;</span> -<a name="line-212"></a>				<span class='varid'>this</span>-<a name="line-213"></a>			      <span class='layout'>)</span>-<a name="line-214"></a>			      <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>isA</span> <span class='layout'>(</span><span class='varid'>uncurry</span> <span class='layout'>(</span><span class='varop'>==</span><span class='layout'>)</span><span class='layout'>)</span>-<a name="line-215"></a>			    <span class='layout'>)</span>-<a name="line-216"></a>			    <span class='varop'>`guards`</span> <span class='varid'>this</span>-<a name="line-217"></a>			  <span class='layout'>)</span>-<a name="line-218"></a>			  <span class='varop'>`orElse`</span> <span class='varid'>issueErr</span> <span class='str'>"pickle/unpickle combinators failed"</span>-<a name="line-219"></a>-<a name="line-220"></a><span class='comment'>-- | The arrow version of the pickler function</span>-<a name="line-221"></a>-<a name="line-222"></a><a name="xpickleVal"></a><span class='definition'>xpickleVal</span>		<span class='keyglyph'>::</span> <span class='conid'>ArrowXml</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='varid'>b</span> <span class='conid'>XmlTree</span>-<a name="line-223"></a><span class='definition'>xpickleVal</span> <span class='varid'>xp</span>		<span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='layout'>(</span><span class='varid'>pickleDoc</span> <span class='varid'>xp</span><span class='layout'>)</span>-<a name="line-224"></a>-<a name="line-225"></a><span class='comment'>-- | The arrow version of the unpickler function</span>-<a name="line-226"></a>-<a name="line-227"></a><a name="xunpickleVal"></a><span class='definition'>xunpickleVal</span>		<span class='keyglyph'>::</span> <span class='conid'>ArrowXml</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='conid'>XmlTree</span> <span class='varid'>b</span>-<a name="line-228"></a><span class='definition'>xunpickleVal</span> <span class='varid'>xp</span>		<span class='keyglyph'>=</span> <span class='varid'>arrL</span> <span class='layout'>(</span><span class='varid'>maybeToList</span> <span class='varop'>.</span> <span class='varid'>unpickleDoc</span> <span class='varid'>xp</span><span class='layout'>)</span>-<a name="line-229"></a>+<a name="line-180"></a><a name="xpickleDTD"></a><span class='definition'>xpickleDTD</span>		<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>XmlTree</span>+<a name="line-181"></a><span class='definition'>xpickleDTD</span> <span class='varid'>xp</span>		<span class='keyglyph'>=</span> <span class='varid'>root</span> <span class='conid'>[]</span> <span class='keyglyph'>[</span> <span class='varid'>constL</span> <span class='layout'>(</span><span class='varid'>thePicklerDTD</span> <span class='varid'>xp</span><span class='layout'>)</span>+<a name="line-182"></a>				    <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-183"></a>				    <span class='varid'>filterErrorMsg</span>+<a name="line-184"></a>				  <span class='keyglyph'>]</span>+<a name="line-185"></a>+<a name="line-186"></a><span class='comment'>-- | An arrow for checking picklers</span>+<a name="line-187"></a><span class='comment'>--</span>+<a name="line-188"></a><span class='comment'>-- A value is transformed into an XML document by a given pickler,</span>+<a name="line-189"></a><span class='comment'>-- the associated DTD is extracted from the pickler and checked,</span>+<a name="line-190"></a><span class='comment'>-- the document including the DTD is tranlated into a string,</span>+<a name="line-191"></a><span class='comment'>-- this string is read and validated against the included DTD,</span>+<a name="line-192"></a><span class='comment'>-- and unpickled.</span>+<a name="line-193"></a><span class='comment'>-- The last step is the equality with the input.</span>+<a name="line-194"></a><span class='comment'>--</span>+<a name="line-195"></a><span class='comment'>-- If the check succeeds, the arrow works like this, else it fails.</span>+<a name="line-196"></a>+<a name="line-197"></a><a name="checkPickler"></a><span class='definition'>checkPickler</span>		<span class='keyglyph'>::</span> <span class='conid'>Eq</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>PU</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>a</span> <span class='varid'>a</span>+<a name="line-198"></a><span class='definition'>checkPickler</span> <span class='varid'>xp</span>		<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>xpickleVal</span> <span class='varid'>xp</span>+<a name="line-199"></a>				  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-200"></a>				  <span class='varid'>replaceChildren</span> <span class='layout'>(</span> <span class='layout'>(</span><span class='varid'>constA</span> <span class='varid'>undefined</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>xpickleDTD</span> <span class='varid'>xp</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>getChildren</span><span class='layout'>)</span>+<a name="line-201"></a>						    <span class='varop'>&lt;+&gt;</span>+<a name="line-202"></a>						    <span class='varid'>getChildren</span>+<a name="line-203"></a>						  <span class='layout'>)</span>+<a name="line-204"></a>				  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-205"></a>				  <span class='varid'>writeDocumentToString</span> <span class='conid'>[]</span>+<a name="line-206"></a>				  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-207"></a>				  <span class='varid'>readFromString</span> <span class='keyglyph'>[</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><span class='keyglyph'>]</span>+<a name="line-208"></a>				  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-209"></a>				  <span class='layout'>(</span> <span class='varid'>xunpickleVal</span> <span class='varid'>xp</span>+<a name="line-210"></a>				    <span class='varop'>`orElse`</span>+<a name="line-211"></a>				    <span class='layout'>(</span> <span class='varid'>issueErr</span> <span class='str'>"unpickling the document failed"</span>+<a name="line-212"></a>				      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-213"></a>				      <span class='varid'>none</span>+<a name="line-214"></a>				    <span class='layout'>)</span>+<a name="line-215"></a>				  <span class='layout'>)</span>+<a name="line-216"></a>				<span class='layout'>)</span>+<a name="line-217"></a>				<span class='varop'>&amp;&amp;&amp;</span> +<a name="line-218"></a>				<span class='varid'>this</span>+<a name="line-219"></a>			      <span class='layout'>)</span>+<a name="line-220"></a>			      <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>isA</span> <span class='layout'>(</span><span class='varid'>uncurry</span> <span class='layout'>(</span><span class='varop'>==</span><span class='layout'>)</span><span class='layout'>)</span>+<a name="line-221"></a>			    <span class='layout'>)</span>+<a name="line-222"></a>			    <span class='varop'>`guards`</span> <span class='varid'>this</span>+<a name="line-223"></a>			  <span class='layout'>)</span>+<a name="line-224"></a>			  <span class='varop'>`orElse`</span> <span class='varid'>issueErr</span> <span class='str'>"pickle/unpickle combinators failed"</span>+<a name="line-225"></a>+<a name="line-226"></a><span class='comment'>-- | The arrow version of the pickler function</span>+<a name="line-227"></a>+<a name="line-228"></a><a name="xpickleVal"></a><span class='definition'>xpickleVal</span>		<span class='keyglyph'>::</span> <span class='conid'>ArrowXml</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='varid'>b</span> <span class='conid'>XmlTree</span>+<a name="line-229"></a><span class='definition'>xpickleVal</span> <span class='varid'>xp</span>		<span class='keyglyph'>=</span> <span class='varid'>arr</span> <span class='layout'>(</span><span class='varid'>pickleDoc</span> <span class='varid'>xp</span><span class='layout'>)</span> <a name="line-230"></a>-<a name="line-231"></a><span class='comment'>-- | Compute the associated DTD of a pickler</span>+<a name="line-231"></a><span class='comment'>-- | The arrow version of the unpickler function</span> <a name="line-232"></a>-<a name="line-233"></a><a name="thePicklerDTD"></a><span class='definition'>thePicklerDTD</span>		<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>-<a name="line-234"></a><span class='definition'>thePicklerDTD</span>		<span class='keyglyph'>=</span> <span class='varid'>dtdDescrToXml</span> <span class='varop'>.</span> <span class='varid'>dtdDescr</span> <span class='varop'>.</span> <span class='varid'>theSchema</span>+<a name="line-233"></a><a name="xunpickleVal"></a><span class='definition'>xunpickleVal</span>		<span class='keyglyph'>::</span> <span class='conid'>ArrowXml</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='conid'>XmlTree</span> <span class='varid'>b</span>+<a name="line-234"></a><span class='definition'>xunpickleVal</span> <span class='varid'>xp</span>		<span class='keyglyph'>=</span> <span class='varid'>arrL</span> <span class='layout'>(</span><span class='varid'>maybeToList</span> <span class='varop'>.</span> <span class='varid'>unpickleDoc</span> <span class='varid'>xp</span><span class='layout'>)</span> <a name="line-235"></a>-<a name="line-236"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-237"></a>+<a name="line-236"></a>+<a name="line-237"></a><span class='comment'>-- | Compute the associated DTD of a pickler</span> <a name="line-238"></a>+<a name="line-239"></a><a name="thePicklerDTD"></a><span class='definition'>thePicklerDTD</span>		<span class='keyglyph'>::</span> <span class='conid'>PU</span> <span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XmlTrees</span>+<a name="line-240"></a><span class='definition'>thePicklerDTD</span>		<span class='keyglyph'>=</span> <span class='varid'>dtdDescrToXml</span> <span class='varop'>.</span> <span class='varid'>dtdDescr</span> <span class='varop'>.</span> <span class='varid'>theSchema</span>+<a name="line-241"></a>+<a name="line-242"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-243"></a>+<a name="line-244"></a> </pre></body> </html>
doc/hdoc/src/Text-XML-HXT-Arrow-ProcessDocument.html view
@@ -251,46 +251,44 @@ <a name="line-243"></a>	<span class='varop'>&gt;&gt;&gt;</span> <a name="line-244"></a>	<span class='varid'>propagateNamespaces</span> <a name="line-245"></a>	<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-246"></a>	<span class='varid'>traceTree</span>+<a name="line-246"></a>	<span class='varid'>traceDoc</span> <span class='str'>"propagating namespaces done"</span> <a name="line-247"></a>	<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-248"></a>	<span class='varid'>traceSource</span>+<a name="line-248"></a>	<span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='str'>"validating namespaces"</span> <a name="line-249"></a>	<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-250"></a>	<span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='str'>"validating namespaces"</span>-<a name="line-251"></a>	<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-252"></a>	<span class='layout'>(</span> <span class='varid'>setDocumentStatusFromSystemState</span> <span class='str'>"namespace propagation"</span>-<a name="line-253"></a>	  <span class='varop'>`when`</span>-<a name="line-254"></a>	  <span class='layout'>(</span> <span class='varid'>validateNamespaces</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>perform</span> <span class='varid'>filterErrorMsg</span> <span class='layout'>)</span>-<a name="line-255"></a>	<span class='layout'>)</span>-<a name="line-256"></a>	<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-257"></a>	<span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='str'>"namespace validation finished"</span>-<a name="line-258"></a>      <span class='layout'>)</span>-<a name="line-259"></a>      <span class='varop'>`when`</span>-<a name="line-260"></a>      <span class='varid'>documentStatusOk</span>+<a name="line-250"></a>	<span class='layout'>(</span> <span class='varid'>setDocumentStatusFromSystemState</span> <span class='str'>"namespace propagation"</span>+<a name="line-251"></a>	  <span class='varop'>`when`</span>+<a name="line-252"></a>	  <span class='layout'>(</span> <span class='varid'>validateNamespaces</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>perform</span> <span class='varid'>filterErrorMsg</span> <span class='layout'>)</span>+<a name="line-253"></a>	<span class='layout'>)</span>+<a name="line-254"></a>	<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-255"></a>	<span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='str'>"namespace validation finished"</span>+<a name="line-256"></a>      <span class='layout'>)</span>+<a name="line-257"></a>      <span class='varop'>`when`</span>+<a name="line-258"></a>      <span class='varid'>documentStatusOk</span>+<a name="line-259"></a>+<a name="line-260"></a><span class='comment'>-- ------------------------------------------------------------</span> <a name="line-261"></a>-<a name="line-262"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-263"></a>-<a name="line-264"></a><span class='comment'>{- |-<a name="line-265"></a>   creates a new document root, adds all options-<a name="line-266"></a>   as attributes to the document root and calls 'getXmlContents'.-<a name="line-267"></a>-<a name="line-268"></a>   If the document name is the empty string, the document will be read-<a name="line-269"></a>   from standard input.-<a name="line-270"></a>-<a name="line-271"></a>   For supported protocols see 'Text.XML.HXT.Arrow.DocumentInput.getXmlContents'-<a name="line-272"></a>-}</span>-<a name="line-273"></a>-<a name="line-274"></a><a name="getDocumentContents"></a><span class='definition'>getDocumentContents</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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>XmlTree</span>-<a name="line-275"></a><span class='definition'>getDocumentContents</span> <span class='varid'>options</span> <span class='varid'>src</span>-<a name="line-276"></a>    <span class='keyglyph'>=</span> <span class='varid'>root</span> <span class='conid'>[]</span> <span class='conid'>[]</span>+<a name="line-262"></a><span class='comment'>{- |+<a name="line-263"></a>   creates a new document root, adds all options+<a name="line-264"></a>   as attributes to the document root and calls 'getXmlContents'.+<a name="line-265"></a>+<a name="line-266"></a>   If the document name is the empty string, the document will be read+<a name="line-267"></a>   from standard input.+<a name="line-268"></a>+<a name="line-269"></a>   For supported protocols see 'Text.XML.HXT.Arrow.DocumentInput.getXmlContents'+<a name="line-270"></a>-}</span>+<a name="line-271"></a>+<a name="line-272"></a><a name="getDocumentContents"></a><span class='definition'>getDocumentContents</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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>XmlTree</span>+<a name="line-273"></a><span class='definition'>getDocumentContents</span> <span class='varid'>options</span> <span class='varid'>src</span>+<a name="line-274"></a>    <span class='keyglyph'>=</span> <span class='varid'>root</span> <span class='conid'>[]</span> <span class='conid'>[]</span>+<a name="line-275"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-276"></a>      <span class='varid'>addAttr</span> <span class='varid'>a_source</span> <span class='varid'>src</span> <a name="line-277"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-278"></a>      <span class='varid'>addAttr</span> <span class='varid'>a_source</span> <span class='varid'>src</span>-<a name="line-279"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-280"></a>      <span class='varid'>seqA</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>uncurry</span> <span class='varid'>addAttr</span><span class='layout'>)</span> <span class='varid'>options</span><span class='layout'>)</span>					<span class='comment'>-- add all options to doc root</span>-<a name="line-281"></a>      <span class='varop'>&gt;&gt;&gt;</span>									<span class='comment'>-- e.g. getXmlContents needs some of these</span>-<a name="line-282"></a>      <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='layout'>(</span><span class='str'>"readDocument: start processing document "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>src</span><span class='layout'>)</span>-<a name="line-283"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-284"></a>      <span class='varid'>getXmlContents</span>-<a name="line-285"></a>-<a name="line-286"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-278"></a>      <span class='varid'>seqA</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>uncurry</span> <span class='varid'>addAttr</span><span class='layout'>)</span> <span class='varid'>options</span><span class='layout'>)</span>					<span class='comment'>-- add all options to doc root</span>+<a name="line-279"></a>      <span class='varop'>&gt;&gt;&gt;</span>									<span class='comment'>-- e.g. getXmlContents needs some of these</span>+<a name="line-280"></a>      <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='layout'>(</span><span class='str'>"readDocument: start processing document "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>src</span><span class='layout'>)</span>+<a name="line-281"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-282"></a>      <span class='varid'>getXmlContents</span>+<a name="line-283"></a>+<a name="line-284"></a><span class='comment'>-- ------------------------------------------------------------</span> </pre></body> </html>
doc/hdoc/src/Text-XML-HXT-Arrow-ReadDocument.html view
@@ -103,252 +103,284 @@ <a name="line-95"></a> <a name="line-96"></a>- 'a_issue_warnings' : issue warnings, when parsing HTML (default), else ignore HTML parser warnings <a name="line-97"></a>-<a name="line-98"></a>- 'a_issue_errors' : issue all error messages on stderr (default), or ignore all error messages (default)+<a name="line-98"></a>- 'a_issue_errors' : issue all error messages on stderr (default), or ignore all error messages <a name="line-99"></a>-<a name="line-100"></a>- 'a_trace' : trace level: values: 0 - 4+<a name="line-100"></a>- 'a_ignore_encoding_errors': ignore all encoding errors, default is issue all encoding errors <a name="line-101"></a>-<a name="line-102"></a>- 'a_proxy' : proxy for http access, e.g. www-cache:3128-<a name="line-103"></a>-<a name="line-104"></a>- 'a_use_curl' : for http access via external programm curl, default is native HTTP access+<a name="line-102"></a>- 'a_ignore_none_xml_contents': ignore document contents of none XML\/HTML documents.+<a name="line-103"></a>                                This option can be useful for implementing crawler like applications, e.g. an URL checker.+<a name="line-104"></a>                                In those cases net traffic can be reduced. <a name="line-105"></a>-<a name="line-106"></a>- 'a_options_curl' : more options for external program curl+<a name="line-106"></a>- 'a_trace' : trace level: values: 0 - 4 <a name="line-107"></a>-<a name="line-108"></a>- 'a_encoding' : default document encoding ('utf8', 'isoLatin1', 'usAscii', 'iso8859_2', ... , 'iso8859_16', ...)+<a name="line-108"></a>- 'a_proxy' : proxy for http access, e.g. www-cache:3128 <a name="line-109"></a>-<a name="line-110"></a>All attributes not evaluated by readDocument are stored in the created document root node for easy access of the various-<a name="line-111"></a>options in e.g. the input\/output modules-<a name="line-112"></a>-<a name="line-113"></a>If the document name is the empty string or an uri of the form \"stdin:\", the document is read from standard input.-<a name="line-114"></a>-<a name="line-115"></a>examples:+<a name="line-110"></a>- 'a_use_curl' : obsolete and ignored, HTTP acccess is always done with curl bindings for libcurl+<a name="line-111"></a>+<a name="line-112"></a>- 'a_options_curl' : deprecated but for compatibility reasons still supported.+<a name="line-113"></a>                     More options passed to the curl binding.+<a name="line-114"></a>                     Instead of using this option to set a whole bunch of options at once for curl+<a name="line-115"></a>                     it is recomended to use the @curl-.*@ options syntax described below. <a name="line-116"></a>-<a name="line-117"></a>&gt; readDocument [ ] "test.xml"-<a name="line-118"></a>-<a name="line-119"></a>reads and validates a document \"test.xml\", no namespace propagation, only canonicalization is performed -<a name="line-120"></a>-<a name="line-121"></a>&gt; readDocument [ (a_validate, "0")-<a name="line-122"></a>&gt;              , (a_encoding, isoLatin1)-<a name="line-123"></a>&gt;              ] "test.xml"-<a name="line-124"></a>-<a name="line-125"></a>reads document \"test.xml\" without validation, default encoding 'isoLatin1'.-<a name="line-126"></a>-<a name="line-127"></a>-<a name="line-128"></a>&gt; readDocument [ (a_parse_html, "1")-<a name="line-129"></a>&gt;              , (a_encoding, isoLatin1)-<a name="line-130"></a>&gt;              , (a_tagsoup,    "1")-<a name="line-131"></a>&gt;              ] ""+<a name="line-117"></a>- 'a_encoding' : default document encoding ('utf8', 'isoLatin1', 'usAscii', 'iso8859_2', ... , 'iso8859_16', ...).+<a name="line-118"></a>                 Only XML and HTML documents are decoded, documents with none XML\/HTML mime types are not decoded. The whole content is returned in a single text node+<a name="line-119"></a>+<a name="line-120"></a>- 'a_mime_types' : set the mime type table for file input with given file. The format of this config file must be in the syntax of a debian linux \"mime.types\" config file+<a name="line-121"></a>+<a name="line-122"></a>- curl options : the HTTP interface with libcurl can be configured with a lot of options. To support these options in an easy way, there is a naming convetion:+<a name="line-123"></a>                 Every option, which has the prefix @curl@ and the rest of the name forms an option as described in the curl man page, is passed to the curl binding lib.+<a name="line-124"></a>                 See 'Text.XML.HXT.IO.GetHTTPLibCurl.getCont' for examples. Currently most of the options concerning HTTP requests are implemented.+<a name="line-125"></a>+<a name="line-126"></a>All attributes not evaluated by readDocument are stored in the created document root node for easy access of the various+<a name="line-127"></a>options in e.g. the input\/output modules+<a name="line-128"></a>+<a name="line-129"></a>If the document name is the empty string or an uri of the form \"stdin:\", the document is read from standard input.+<a name="line-130"></a>+<a name="line-131"></a>examples: <a name="line-132"></a>-<a name="line-133"></a>reads a HTML document from standard input, no validation is done when parsing HTML, default encoding is 'isoLatin1',-<a name="line-134"></a>parsing is done with tagsoup parser-<a name="line-135"></a>-<a name="line-136"></a>&gt; readDocument [ (a_parse_html,     "1")-<a name="line-137"></a>&gt;              , (a_proxy,          "www-cache:3128")-<a name="line-138"></a>&gt;              , (a_curl,           "1")-<a name="line-139"></a>&gt;              , (a_issue_warnings, "0")-<a name="line-140"></a>&gt;              ] "<a href="http://www.haskell.org/">http://www.haskell.org/</a>"+<a name="line-133"></a>&gt; readDocument [ ] "test.xml"+<a name="line-134"></a>+<a name="line-135"></a>reads and validates a document \"test.xml\", no namespace propagation, only canonicalization is performed +<a name="line-136"></a>+<a name="line-137"></a>&gt; readDocument [ (a_validate, "0")+<a name="line-138"></a>&gt;              , (a_encoding, isoLatin1)+<a name="line-139"></a>&gt;              , (a_parse_by_mimetype, "1")+<a name="line-140"></a>&gt;              ] "<a href="http://localhost/test.php">http://localhost/test.php</a>" <a name="line-141"></a>-<a name="line-142"></a>reads Haskell homepage with HTML parser ignoring any warnings, with http access via external program curl and proxy \"www-cache\" at port 3128+<a name="line-142"></a>reads document \"test.php\", parses it as HTML or XML depending on the mimetype given from the server, but without validation, default encoding 'isoLatin1'. <a name="line-143"></a>-<a name="line-144"></a>&gt; readDocument [ (a_validate,          "1")-<a name="line-145"></a>&gt;              , (a_check_namespace,   "1")-<a name="line-146"></a>&gt;              , (a_remove_whitespace, "1")-<a name="line-147"></a>&gt;              , (a_trace,             "2")-<a name="line-148"></a>&gt;              ] "<a href="http://www.w3c.org/">http://www.w3c.org/</a>"-<a name="line-149"></a>-<a name="line-150"></a>read w3c home page (xhtml), validate and check namespaces, remove whitespace between tags, trace activities with level 2+<a name="line-144"></a>+<a name="line-145"></a>&gt; readDocument [ (a_parse_html, "1")+<a name="line-146"></a>&gt;              , (a_encoding, isoLatin1)+<a name="line-147"></a>&gt;              ] ""+<a name="line-148"></a>+<a name="line-149"></a>reads a HTML document from standard input, no validation is done when parsing HTML, default encoding is 'isoLatin1',+<a name="line-150"></a>parsing is done with tagsoup parser <a name="line-151"></a>-<a name="line-152"></a>for minimal complete examples see 'Text.XML.HXT.Arrow.WriteDocument.writeDocument' and 'runX', the main starting point for running an XML arrow.-<a name="line-153"></a>-}</span>-<a name="line-154"></a>-<a name="line-155"></a><a name="readDocument"></a><span class='definition'>readDocument</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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>XmlTree</span>-<a name="line-156"></a><span class='definition'>readDocument</span> <span class='varid'>userOptions</span> <span class='varid'>src</span>-<a name="line-157"></a>    <span class='keyglyph'>=</span> <span class='varid'>traceLevel</span>-<a name="line-158"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-159"></a>      <span class='varid'>addInputOptionsToSystemState</span>-<a name="line-160"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-161"></a>      <span class='varid'>getDocumentContents</span> <span class='varid'>remainingOptions</span> <span class='varid'>src</span>-<a name="line-162"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-163"></a>      <span class='layout'>(</span> <span class='varid'>processDoc</span> <span class='varop'>$&lt;</span> <span class='varid'>getMimeType</span> <span class='layout'>)</span>-<a name="line-164"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-165"></a>      <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='layout'>(</span><span class='str'>"readDocument: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>src</span> <span class='varop'>++</span> <span class='str'>" processed"</span><span class='layout'>)</span>-<a name="line-166"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-167"></a>      <span class='varid'>traceSource</span>-<a name="line-168"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-169"></a>      <span class='varid'>traceTree</span>-<a name="line-170"></a>    <span class='keyword'>where</span>-<a name="line-171"></a>    <span class='varid'>options</span>-<a name="line-172"></a> 	<span class='keyglyph'>=</span> <span class='varid'>addEntries</span> <span class='varid'>userOptions</span> <span class='varid'>defaultOptions</span>+<a name="line-152"></a>&gt; readDocument [ (a_encoding, isoLatin1)+<a name="line-153"></a>&gt;              , (a_mime_type,    "/etc/mime.types")+<a name="line-154"></a>&gt;              , (a_tagsoup,    "1")+<a name="line-155"></a>&gt;              ] "test.svg"+<a name="line-156"></a>+<a name="line-157"></a>reads an SVG document from standard input, sets the mime type by looking in the system mimetype config file, default encoding is 'isoLatin1',+<a name="line-158"></a>parsing is done with the lightweight tagsoup parser, which implies no validation.+<a name="line-159"></a>+<a name="line-160"></a>&gt; readDocument [ (a_parse_html,     "1")+<a name="line-161"></a>&gt;              , (a_proxy,          "www-cache:3128")+<a name="line-162"></a>&gt;              , (a_curl,           "1")+<a name="line-163"></a>&gt;              , (a_issue_warnings, "0")+<a name="line-164"></a>&gt;              ] "<a href="http://www.haskell.org/">http://www.haskell.org/</a>"+<a name="line-165"></a>+<a name="line-166"></a>reads Haskell homepage with HTML parser ignoring any warnings, with http access via external program curl and proxy \"www-cache\" at port 3128+<a name="line-167"></a>+<a name="line-168"></a>&gt; readDocument [ (a_validate,          "1")+<a name="line-169"></a>&gt;              , (a_check_namespace,   "1")+<a name="line-170"></a>&gt;              , (a_remove_whitespace, "1")+<a name="line-171"></a>&gt;              , (a_trace,             "2")+<a name="line-172"></a>&gt;              ] "<a href="http://www.w3c.org/">http://www.w3c.org/</a>" <a name="line-173"></a>-<a name="line-174"></a>    <span class='varid'>defaultOptions</span>-<a name="line-175"></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-176"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_tagsoup</span><span class='layout'>,</span>		<span class='varid'>v_0</span> <span class='layout'>)</span>-<a name="line-177"></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-178"></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-179"></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-180"></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-181"></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-182"></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-183"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_parse_by_mimetype</span><span class='layout'>,</span>	<span class='varid'>v_0</span> <span class='layout'>)</span>-<a name="line-184"></a>	  <span class='keyglyph'>]</span>-<a name="line-185"></a>-<a name="line-186"></a>    <span class='varid'>httpOptions</span>-<a name="line-187"></a>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>a_proxy</span><span class='layout'>,</span> <span class='varid'>a_use_curl</span><span class='layout'>,</span> <span class='varid'>a_options_curl</span><span class='keyglyph'>]</span>-<a name="line-188"></a>-<a name="line-189"></a>    <span class='varid'>remainingOptions</span>-<a name="line-190"></a>	 <span class='keyglyph'>=</span> <span class='varid'>filter</span> <span class='layout'>(</span><span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>flip</span> <span class='varid'>hasEntry</span> <span class='varid'>defaultOptions</span> <span class='varop'>.</span> <span class='varid'>fst</span><span class='layout'>)</span> <span class='varid'>options</span>-<a name="line-191"></a>-<a name="line-192"></a>    <span class='varid'>traceLevel</span>-<a name="line-193"></a>	<span class='keyglyph'>=</span> <span class='varid'>maybe</span> <span class='varid'>this</span> <span class='layout'>(</span><span class='varid'>setTraceLevel</span> <span class='varop'>.</span> <span class='varid'>read</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>lookup</span> <span class='varid'>a_trace</span> <span class='varop'>$</span> <span class='varid'>options</span>-<a name="line-194"></a>-<a name="line-195"></a>    <span class='varid'>addInputOptionsToSystemState</span>-<a name="line-196"></a>	<span class='keyglyph'>=</span> <span class='varid'>addSysOptions</span> <span class='layout'>(</span><span class='varid'>filter</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varop'>`elem`</span> <span class='varid'>httpOptions</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>fst</span><span class='layout'>)</span> <span class='varid'>remainingOptions</span><span class='layout'>)</span>-<a name="line-197"></a>	  <span class='keyword'>where</span>-<a name="line-198"></a>	  <span class='varid'>addSysOptions</span>-<a name="line-199"></a>	      <span class='keyglyph'>=</span> <span class='varid'>seqA</span> <span class='varop'>.</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>uncurry</span> <span class='varid'>setParamString</span><span class='layout'>)</span>-<a name="line-200"></a>-<a name="line-201"></a>    <span class='varid'>getMimeType</span>-<a name="line-202"></a>	<span class='keyglyph'>=</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferMimeType</span> <span class='varop'>&gt;&gt;^</span> <span class='varid'>map</span> <span class='varid'>toLower</span>-<a name="line-203"></a>-<a name="line-204"></a>    <span class='varid'>processDoc</span> <span class='varid'>mimeType</span>-<a name="line-205"></a>	<span class='keyglyph'>=</span> <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='layout'>(</span><span class='str'>"readDocument: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>src</span> <span class='varop'>++</span> <span class='str'>" (mime type: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>mimeType</span> <span class='varop'>++</span> <span class='str'>") will be processed"</span><span class='layout'>)</span>-<a name="line-206"></a>	  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-207"></a>	  <span class='varid'>parse</span>-<a name="line-208"></a>	  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-209"></a>	  <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>isXmlOrHtml</span>-<a name="line-210"></a>	    <span class='keyword'>then</span> <span class='layout'>(</span> <span class='varid'>checknamespaces</span>-<a name="line-211"></a>		   <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-212"></a>		   <span class='varid'>canonicalize</span>-<a name="line-213"></a>		   <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-214"></a>		   <span class='varid'>whitespace</span>-<a name="line-215"></a>		   <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-216"></a>		   <span class='varid'>relax</span>-<a name="line-217"></a>		 <span class='layout'>)</span>-<a name="line-218"></a>	    <span class='keyword'>else</span> <span class='varid'>this</span>-<a name="line-219"></a>	  <span class='layout'>)</span>-<a name="line-220"></a>	<span class='keyword'>where</span>-<a name="line-221"></a>	<span class='varid'>parse</span>-<a name="line-222"></a>	    <span class='keyglyph'>|</span> <span class='varid'>isHtml</span>-<a name="line-223"></a>	      <span class='varop'>||</span> -<a name="line-224"></a>	      <span class='varid'>withTagSoup</span>		<span class='keyglyph'>=</span> <span class='varid'>parseHtmlDocument</span>			<span class='comment'>-- parse as HTML or with tagsoup XML</span>-<a name="line-225"></a>					  <span class='varid'>withTagSoup</span>-<a name="line-226"></a>					  <span class='varid'>withNamespaces</span>-<a name="line-227"></a>					  <span class='varid'>issueW</span>-<a name="line-228"></a>					  <span class='layout'>(</span><span class='varid'>not</span> <span class='layout'>(</span><span class='varid'>hasOption</span> <span class='varid'>a_canonicalize</span><span class='layout'>)</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>preserveCmt</span><span class='layout'>)</span>-<a name="line-229"></a>					  <span class='varid'>removeWS</span>-<a name="line-230"></a>					  <span class='varid'>isHtml</span>-<a name="line-231"></a>	    <span class='keyglyph'>|</span> <span class='varid'>validateWithRelax</span>		<span class='keyglyph'>=</span> <span class='varid'>parseXmlDocument</span> <span class='conid'>False</span>		<span class='comment'>-- for Relax NG use XML parser without validation</span>-<a name="line-232"></a>	    <span class='keyglyph'>|</span> <span class='varid'>isXml</span>			<span class='keyglyph'>=</span> <span class='varid'>parseXmlDocument</span> <span class='varid'>validate</span>		<span class='comment'>-- parse as XML</span>-<a name="line-233"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>=</span> <span class='varid'>this</span>					<span class='comment'>-- don't parse, mime type is not XML nor HTML</span>-<a name="line-234"></a>	<span class='varid'>checknamespaces</span>-<a name="line-235"></a>	    <span class='keyglyph'>|</span> <span class='layout'>(</span><span class='varid'>withNamespaces</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>not</span> <span class='varid'>withTagSoup</span><span class='layout'>)</span>-<a name="line-236"></a>	      <span class='varop'>||</span>-<a name="line-237"></a>	      <span class='varid'>validateWithRelax</span>		<span class='keyglyph'>=</span> <span class='varid'>propagateAndValidateNamespaces</span>-<a name="line-238"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>=</span> <span class='varid'>this</span>-<a name="line-239"></a>	<span class='varid'>canonicalize</span>-<a name="line-240"></a>	    <span class='keyglyph'>|</span> <span class='varid'>withTagSoup</span>		<span class='keyglyph'>=</span> <span class='varid'>this</span>					<span class='comment'>-- tagsoup already removes redundant struff</span>-<a name="line-241"></a>	    <span class='keyglyph'>|</span> <span class='varid'>validateWithRelax</span>		<span class='keyglyph'>=</span> <span class='varid'>canonicalizeAllNodes</span>-<a name="line-242"></a>	    <span class='keyglyph'>|</span> <span class='varid'>hasOption</span> <span class='varid'>a_canonicalize</span>-<a name="line-243"></a>	      <span class='varop'>&amp;&amp;</span>-<a name="line-244"></a>	      <span class='varid'>preserveCmt</span>			<span class='keyglyph'>=</span> <span class='varid'>canonicalizeForXPath</span>-<a name="line-245"></a>	    <span class='keyglyph'>|</span> <span class='varid'>hasOption</span> <span class='varid'>a_canonicalize</span>	<span class='keyglyph'>=</span> <span class='varid'>canonicalizeAllNodes</span>-<a name="line-246"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>=</span> <span class='varid'>this</span>-<a name="line-247"></a>	<span class='varid'>relax</span>-<a name="line-248"></a>	    <span class='keyglyph'>|</span> <span class='varid'>validateWithRelax</span>		<span class='keyglyph'>=</span> <span class='varid'>validateDocumentWithRelaxSchema</span> <span class='varid'>remainingOptions</span> <span class='varid'>relaxSchema</span>-<a name="line-249"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>=</span> <span class='varid'>this</span>-<a name="line-250"></a>	<span class='varid'>whitespace</span>-<a name="line-251"></a>	    <span class='keyglyph'>|</span> <span class='varid'>removeWS</span>-<a name="line-252"></a>	      <span class='varop'>&amp;&amp;</span>-<a name="line-253"></a>	      <span class='varid'>not</span> <span class='varid'>withTagSoup</span>		<span class='keyglyph'>=</span> <span class='varid'>removeDocWhiteSpace</span>			<span class='comment'>-- tagsoup already removes whitespace</span>-<a name="line-254"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>=</span> <span class='varid'>this</span>-<a name="line-255"></a>	<span class='varid'>validateWithRelax</span>	<span class='keyglyph'>=</span> <span class='varid'>hasEntry</span> <span class='varid'>a_relax_schema</span> <span class='varid'>options</span>-<a name="line-256"></a>	<span class='varid'>relaxSchema</span>		<span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_relax_schema</span> <span class='varid'>options</span>-<a name="line-257"></a>	<span class='varid'>parseHtml</span>		<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_parse_html</span>-<a name="line-258"></a>	<span class='varid'>parseXml</span>		<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_parse_xml</span>-<a name="line-259"></a>	<span class='varid'>isHtml</span>			<span class='keyglyph'>=</span> <span class='varid'>parseHtml</span>				<span class='comment'>-- force HTML</span>-<a name="line-260"></a>				  <span class='varop'>||</span>-<a name="line-261"></a>				  <span class='varid'>mimeTypeIsHtml</span>-<a name="line-262"></a>	<span class='varid'>isXml</span>			<span class='keyglyph'>=</span> <span class='varid'>parseXml</span>				<span class='comment'>-- force XML parsing</span>-<a name="line-263"></a>				  <span class='varop'>||</span>-<a name="line-264"></a>				  <span class='layout'>(</span> <span class='varid'>not</span> <span class='varid'>parseHtml</span>-<a name="line-265"></a>				    <span class='varop'>&amp;&amp;</span>-<a name="line-266"></a>				    <span class='layout'>(</span> <span class='varid'>mimeTypeIsXml</span> <span class='varop'>||</span> <span class='varid'>null</span> <span class='varid'>mimeType</span> <span class='layout'>)</span>	<span class='comment'>-- mime type is XML or not there</span>-<a name="line-267"></a>				  <span class='layout'>)</span>-<a name="line-268"></a>	<span class='varid'>isXmlOrHtml</span>	<span class='keyglyph'>=</span> <span class='varid'>isHtml</span> <span class='varop'>||</span> <span class='varid'>isXml</span>-<a name="line-269"></a>	<span class='varid'>parseByMimeType</span>	<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_parse_by_mimetype</span>-<a name="line-270"></a>	<span class='varid'>validate</span>	<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_validate</span>-<a name="line-271"></a>	<span class='varid'>withNamespaces</span>	<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_check_namespaces</span>-<a name="line-272"></a>	<span class='varid'>withTagSoup</span>	<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_tagsoup</span>-<a name="line-273"></a>	<span class='varid'>issueW</span>		<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_issue_warnings</span>-<a name="line-274"></a>	<span class='varid'>removeWS</span>	<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_remove_whitespace</span>-<a name="line-275"></a>	<span class='varid'>preserveCmt</span>	<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_preserve_comment</span>-<a name="line-276"></a>	<span class='varid'>mimeTypeIsHtml</span>	<span class='keyglyph'>=</span> <span class='varid'>parseByMimeType</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>isHtmlMimeType</span> <span class='varid'>mimeType</span>-<a name="line-277"></a>	<span class='varid'>mimeTypeIsXml</span>	<span class='keyglyph'>=</span> <span class='varid'>parseByMimeType</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>isXmlMimeType</span>  <span class='varid'>mimeType</span>-<a name="line-278"></a>	<span class='varid'>hasOption</span> <span class='varid'>n</span>	<span class='keyglyph'>=</span> <span class='varid'>optionIsSet</span> <span class='varid'>n</span> <span class='varid'>options</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><span class='comment'>-- |</span>-<a name="line-283"></a><span class='comment'>-- the arrow version of 'readDocument', the arrow input is the source URI</span>-<a name="line-284"></a>-<a name="line-285"></a><a name="readFromDocument"></a><span class='definition'>readFromDocument</span>	<span class='keyglyph'>::</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>String</span> <span class='conid'>XmlTree</span>-<a name="line-286"></a><span class='definition'>readFromDocument</span> <span class='varid'>userOptions</span>-<a name="line-287"></a>    <span class='keyglyph'>=</span> <span class='varid'>applyA</span> <span class='layout'>(</span> <span class='varid'>arr</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>readDocument</span> <span class='varid'>userOptions</span> <span class='varid'>s</span> <span class='layout'>)</span>-<a name="line-288"></a>-<a name="line-289"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-290"></a>-<a name="line-291"></a><span class='comment'>-- |</span>-<a name="line-292"></a><span class='comment'>-- read a document that is stored in a normal Haskell String</span>-<a name="line-293"></a><span class='comment'>--</span>-<a name="line-294"></a><span class='comment'>-- the same function as readDocument, but the parameter forms the input.</span>-<a name="line-295"></a><span class='comment'>-- All options available for 'readDocument' are applicable for readString.</span>-<a name="line-296"></a><span class='comment'>--</span>-<a name="line-297"></a><span class='comment'>-- Default encoding: No encoding is done, the String argument is taken as Unicode string</span>-<a name="line-298"></a>-<a name="line-299"></a><a name="readString"></a><span class='definition'>readString</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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>XmlTree</span>-<a name="line-300"></a><span class='definition'>readString</span> <span class='varid'>userOptions</span> <span class='varid'>content</span>-<a name="line-301"></a>    <span class='keyglyph'>=</span> <span class='varid'>readDocument</span> <span class='layout'>(</span> <span class='layout'>(</span><span class='varid'>a_encoding</span><span class='layout'>,</span> <span class='varid'>unicodeString</span><span class='layout'>)</span> <span class='conop'>:</span> <span class='varid'>userOptions</span> <span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>stringProtocol</span> <span class='varop'>++</span> <span class='varid'>content</span><span class='layout'>)</span>-<a name="line-302"></a>-<a name="line-303"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-304"></a>-<a name="line-305"></a><span class='comment'>-- |</span>-<a name="line-306"></a><span class='comment'>-- the arrow version of 'readString', the arrow input is the source URI</span>-<a name="line-307"></a>-<a name="line-308"></a><a name="readFromString"></a><span class='definition'>readFromString</span>	<span class='keyglyph'>::</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>String</span> <span class='conid'>XmlTree</span>-<a name="line-309"></a><span class='definition'>readFromString</span> <span class='varid'>userOptions</span>-<a name="line-310"></a>    <span class='keyglyph'>=</span> <span class='varid'>applyA</span> <span class='layout'>(</span> <span class='varid'>arr</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>readString</span> <span class='varid'>userOptions</span> <span class='varid'>s</span> <span class='layout'>)</span>+<a name="line-174"></a>read w3c home page (xhtml), validate and check namespaces, remove whitespace between tags, trace activities with level 2+<a name="line-175"></a>+<a name="line-176"></a>for minimal complete examples see 'Text.XML.HXT.Arrow.WriteDocument.writeDocument' and 'runX', the main starting point for running an XML arrow.+<a name="line-177"></a>-}</span>+<a name="line-178"></a>+<a name="line-179"></a><a name="readDocument"></a><span class='definition'>readDocument</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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>XmlTree</span>+<a name="line-180"></a><span class='definition'>readDocument</span> <span class='varid'>userOptions</span> <span class='varid'>src</span>+<a name="line-181"></a>    <span class='keyglyph'>=</span> <span class='varid'>traceLevel</span>+<a name="line-182"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-183"></a>      <span class='varid'>addInputOptionsToSystemState</span>+<a name="line-184"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-185"></a>      <span class='varid'>getDocumentContents</span> <span class='varid'>remainingOptions</span> <span class='varid'>src</span>+<a name="line-186"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-187"></a>      <span class='layout'>(</span> <span class='varid'>processDoc</span> <span class='varop'>$&lt;</span> <span class='varid'>getMimeType</span> <span class='layout'>)</span>+<a name="line-188"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-189"></a>      <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='layout'>(</span><span class='str'>"readDocument: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>src</span> <span class='varop'>++</span> <span class='str'>" processed"</span><span class='layout'>)</span>+<a name="line-190"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-191"></a>      <span class='varid'>traceSource</span>+<a name="line-192"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-193"></a>      <span class='varid'>traceTree</span>+<a name="line-194"></a>    <span class='keyword'>where</span>+<a name="line-195"></a>    <span class='varid'>options</span>+<a name="line-196"></a> 	<span class='keyglyph'>=</span> <span class='varid'>addEntries</span> <span class='varid'>userOptions</span> <span class='varid'>defaultOptions</span>+<a name="line-197"></a>+<a name="line-198"></a>    <span class='varid'>defaultOptions</span>+<a name="line-199"></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-200"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_tagsoup</span><span class='layout'>,</span>		  <span class='varid'>v_0</span> <span class='layout'>)</span>+<a name="line-201"></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-202"></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-203"></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-204"></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-205"></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-206"></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-207"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_parse_by_mimetype</span><span class='layout'>,</span>	  <span class='varid'>v_0</span> <span class='layout'>)</span>+<a name="line-208"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_ignore_encoding_errors</span><span class='layout'>,</span>   <span class='varid'>v_0</span> <span class='layout'>)</span>+<a name="line-209"></a>	  <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>a_ignore_none_xml_contents</span><span class='layout'>,</span> <span class='varid'>v_0</span> <span class='layout'>)</span>+<a name="line-210"></a>	  <span class='keyglyph'>]</span>+<a name="line-211"></a>+<a name="line-212"></a>    <span class='varid'>httpOptions</span>+<a name="line-213"></a>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>a_proxy</span><span class='layout'>,</span> <span class='varid'>a_use_curl</span><span class='layout'>,</span> <span class='varid'>a_options_curl</span><span class='layout'>,</span> <span class='varid'>a_mime_types</span><span class='keyglyph'>]</span>+<a name="line-214"></a>+<a name="line-215"></a>    <span class='varid'>remainingOptions</span>+<a name="line-216"></a>	 <span class='keyglyph'>=</span> <span class='varid'>options</span> <span class='comment'>-- filter (not . flip hasEntry defaultOptions . fst) options</span>+<a name="line-217"></a>+<a name="line-218"></a>    <span class='varid'>traceLevel</span>+<a name="line-219"></a>	<span class='keyglyph'>=</span> <span class='varid'>maybe</span> <span class='varid'>this</span> <span class='layout'>(</span><span class='varid'>setTraceLevel</span> <span class='varop'>.</span> <span class='varid'>read</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>lookup</span> <span class='varid'>a_trace</span> <span class='varop'>$</span> <span class='varid'>options</span>+<a name="line-220"></a>+<a name="line-221"></a>    <span class='varid'>addInputOptionsToSystemState</span>+<a name="line-222"></a>	<span class='keyglyph'>=</span> <span class='varid'>addSysOptions</span> <span class='layout'>(</span><span class='varid'>filter</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varop'>`elem`</span> <span class='varid'>httpOptions</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>fst</span><span class='layout'>)</span> <span class='varid'>remainingOptions</span><span class='layout'>)</span>+<a name="line-223"></a>	  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-224"></a>	  <span class='varid'>loadMineTypes</span> <span class='layout'>(</span><span class='varid'>lookup1</span> <span class='varid'>a_mime_types</span> <span class='varid'>userOptions</span><span class='layout'>)</span>+<a name="line-225"></a>	  <span class='keyword'>where</span>+<a name="line-226"></a>	  <span class='varid'>addSysOptions</span>+<a name="line-227"></a>	      <span class='keyglyph'>=</span> <span class='varid'>seqA</span> <span class='varop'>.</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>uncurry</span> <span class='varid'>setParamString</span><span class='layout'>)</span>+<a name="line-228"></a>	  <span class='varid'>loadMineTypes</span> <span class='str'>""</span>	<span class='keyglyph'>=</span> <span class='varid'>this</span>+<a name="line-229"></a>	  <span class='varid'>loadMineTypes</span> <span class='varid'>f</span>	<span class='keyglyph'>=</span> <span class='varid'>setMimeTypeTableFromFile</span> <span class='varid'>f</span>+<a name="line-230"></a>+<a name="line-231"></a>    <span class='varid'>getMimeType</span>+<a name="line-232"></a>	<span class='keyglyph'>=</span> <span class='varid'>getAttrValue</span> <span class='varid'>transferMimeType</span> <span class='varop'>&gt;&gt;^</span> <span class='varid'>map</span> <span class='varid'>toLower</span>+<a name="line-233"></a>+<a name="line-234"></a>    <span class='varid'>processDoc</span> <span class='varid'>mimeType</span>+<a name="line-235"></a>	<span class='keyglyph'>=</span> <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='layout'>(</span><span class='str'>"readDocument: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>src</span> <span class='varop'>++</span> <span class='str'>" (mime type: "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>mimeType</span> <span class='varop'>++</span> <span class='str'>") will be processed"</span><span class='layout'>)</span>+<a name="line-236"></a>	  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-237"></a>	  <span class='varid'>parse</span>+<a name="line-238"></a>	  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-239"></a>	  <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>isXmlOrHtml</span>+<a name="line-240"></a>	    <span class='keyword'>then</span> <span class='layout'>(</span> <span class='varid'>checknamespaces</span>+<a name="line-241"></a>		   <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-242"></a>		   <span class='varid'>canonicalize</span>+<a name="line-243"></a>		   <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-244"></a>		   <span class='varid'>whitespace</span>+<a name="line-245"></a>		   <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-246"></a>		   <span class='varid'>relax</span>+<a name="line-247"></a>		 <span class='layout'>)</span>+<a name="line-248"></a>	    <span class='keyword'>else</span> <span class='varid'>this</span>+<a name="line-249"></a>	  <span class='layout'>)</span>+<a name="line-250"></a>	<span class='keyword'>where</span>+<a name="line-251"></a>	<span class='varid'>parse</span>+<a name="line-252"></a>	    <span class='keyglyph'>|</span> <span class='varid'>isHtml</span>+<a name="line-253"></a>	      <span class='varop'>||</span> +<a name="line-254"></a>	      <span class='varid'>withTagSoup</span>		<span class='keyglyph'>=</span> <span class='varid'>parseHtmlDocument</span>			<span class='comment'>-- parse as HTML or with tagsoup XML</span>+<a name="line-255"></a>					  <span class='varid'>withTagSoup</span>+<a name="line-256"></a>					  <span class='varid'>withNamespaces</span>+<a name="line-257"></a>					  <span class='varid'>issueW</span>+<a name="line-258"></a>					  <span class='layout'>(</span><span class='varid'>not</span> <span class='layout'>(</span><span class='varid'>hasOption</span> <span class='varid'>a_canonicalize</span><span class='layout'>)</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>preserveCmt</span><span class='layout'>)</span>+<a name="line-259"></a>					  <span class='varid'>removeWS</span>+<a name="line-260"></a>					  <span class='varid'>isHtml</span>+<a name="line-261"></a>	    <span class='keyglyph'>|</span> <span class='varid'>validateWithRelax</span>		<span class='keyglyph'>=</span> <span class='varid'>parseXmlDocument</span> <span class='conid'>False</span>		<span class='comment'>-- for Relax NG use XML parser without validation</span>+<a name="line-262"></a>	    <span class='keyglyph'>|</span> <span class='varid'>isXml</span>			<span class='keyglyph'>=</span> <span class='varid'>parseXmlDocument</span> <span class='varid'>validate</span>		<span class='comment'>-- parse as XML</span>+<a name="line-263"></a>	    <span class='keyglyph'>|</span> <span class='varid'>removeNoneXml</span>		<span class='keyglyph'>=</span> <span class='varid'>replaceChildren</span> <span class='varid'>none</span>			<span class='comment'>-- don't parse, if mime type is not XML nore HTML</span>+<a name="line-264"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>=</span> <span class='varid'>this</span>					<span class='comment'>-- but remove contents when option is set</span>+<a name="line-265"></a>	<span class='varid'>checknamespaces</span>+<a name="line-266"></a>	    <span class='keyglyph'>|</span> <span class='layout'>(</span><span class='varid'>withNamespaces</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>not</span> <span class='varid'>withTagSoup</span><span class='layout'>)</span>+<a name="line-267"></a>	      <span class='varop'>||</span>+<a name="line-268"></a>	      <span class='varid'>validateWithRelax</span>		<span class='keyglyph'>=</span> <span class='varid'>propagateAndValidateNamespaces</span>+<a name="line-269"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>=</span> <span class='varid'>this</span>+<a name="line-270"></a>	<span class='varid'>canonicalize</span>+<a name="line-271"></a>	    <span class='keyglyph'>|</span> <span class='varid'>withTagSoup</span>		<span class='keyglyph'>=</span> <span class='varid'>this</span>					<span class='comment'>-- tagsoup already removes redundant struff</span>+<a name="line-272"></a>	    <span class='keyglyph'>|</span> <span class='varid'>validateWithRelax</span>		<span class='keyglyph'>=</span> <span class='varid'>canonicalizeAllNodes</span>+<a name="line-273"></a>	    <span class='keyglyph'>|</span> <span class='varid'>hasOption</span> <span class='varid'>a_canonicalize</span>+<a name="line-274"></a>	      <span class='varop'>&amp;&amp;</span>+<a name="line-275"></a>	      <span class='varid'>preserveCmt</span>			<span class='keyglyph'>=</span> <span class='varid'>canonicalizeForXPath</span>+<a name="line-276"></a>	    <span class='keyglyph'>|</span> <span class='varid'>hasOption</span> <span class='varid'>a_canonicalize</span>	<span class='keyglyph'>=</span> <span class='varid'>canonicalizeAllNodes</span>+<a name="line-277"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>=</span> <span class='varid'>this</span>+<a name="line-278"></a>	<span class='varid'>relax</span>+<a name="line-279"></a>	    <span class='keyglyph'>|</span> <span class='varid'>validateWithRelax</span>		<span class='keyglyph'>=</span> <span class='varid'>validateDocumentWithRelaxSchema</span> <span class='varid'>remainingOptions</span> <span class='varid'>relaxSchema</span>+<a name="line-280"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>=</span> <span class='varid'>this</span>+<a name="line-281"></a>	<span class='varid'>whitespace</span>+<a name="line-282"></a>	    <span class='keyglyph'>|</span> <span class='varid'>removeWS</span>+<a name="line-283"></a>	      <span class='varop'>&amp;&amp;</span>+<a name="line-284"></a>	      <span class='varid'>not</span> <span class='varid'>withTagSoup</span>		<span class='keyglyph'>=</span> <span class='varid'>removeDocWhiteSpace</span>			<span class='comment'>-- tagsoup already removes whitespace</span>+<a name="line-285"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>=</span> <span class='varid'>this</span>+<a name="line-286"></a>	<span class='varid'>validateWithRelax</span>	<span class='keyglyph'>=</span> <span class='varid'>hasEntry</span> <span class='varid'>a_relax_schema</span> <span class='varid'>options</span>+<a name="line-287"></a>	<span class='varid'>relaxSchema</span>		<span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_relax_schema</span> <span class='varid'>options</span>+<a name="line-288"></a>	<span class='varid'>parseHtml</span>		<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_parse_html</span>+<a name="line-289"></a>	<span class='varid'>isHtml</span>			<span class='keyglyph'>=</span> <span class='varid'>parseHtml</span>				<span class='comment'>-- force HTML</span>+<a name="line-290"></a>				  <span class='varop'>||</span>+<a name="line-291"></a>				  <span class='layout'>(</span> <span class='varid'>parseByMimeType</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>isHtmlMimeType</span> <span class='varid'>mimeType</span> <span class='layout'>)</span>+<a name="line-292"></a>	<span class='varid'>isXml</span>			<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>not</span> <span class='varid'>parseByMimeType</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>not</span> <span class='varid'>parseHtml</span> <span class='layout'>)</span>+<a name="line-293"></a>				  <span class='varop'>||</span>+<a name="line-294"></a>				  <span class='layout'>(</span> <span class='varid'>parseByMimeType</span>+<a name="line-295"></a>				    <span class='varop'>&amp;&amp;</span>+<a name="line-296"></a>				    <span class='layout'>(</span> <span class='varid'>isXmlMimeType</span> <span class='varid'>mimeType</span>+<a name="line-297"></a>				      <span class='varop'>||</span>+<a name="line-298"></a>				      <span class='varid'>null</span> <span class='varid'>mimeType</span>+<a name="line-299"></a>				    <span class='layout'>)</span>					<span class='comment'>-- mime type is XML or not known</span>+<a name="line-300"></a>				  <span class='layout'>)</span>+<a name="line-301"></a>	<span class='varid'>isXmlOrHtml</span>	<span class='keyglyph'>=</span> <span class='varid'>isHtml</span> <span class='varop'>||</span> <span class='varid'>isXml</span>+<a name="line-302"></a>	<span class='varid'>parseByMimeType</span>	<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_parse_by_mimetype</span>+<a name="line-303"></a>	<span class='varid'>validate</span>	<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_validate</span>+<a name="line-304"></a>	<span class='varid'>withNamespaces</span>	<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_check_namespaces</span>+<a name="line-305"></a>	<span class='varid'>withTagSoup</span>	<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_tagsoup</span>+<a name="line-306"></a>	<span class='varid'>issueW</span>		<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_issue_warnings</span>+<a name="line-307"></a>	<span class='varid'>removeWS</span>	<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_remove_whitespace</span>+<a name="line-308"></a>	<span class='varid'>preserveCmt</span>	<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_preserve_comment</span>+<a name="line-309"></a>	<span class='varid'>removeNoneXml</span>	<span class='keyglyph'>=</span> <span class='varid'>hasOption</span> <span class='varid'>a_ignore_none_xml_contents</span>+<a name="line-310"></a>	<span class='varid'>hasOption</span> <span class='varid'>n</span>	<span class='keyglyph'>=</span> <span class='varid'>optionIsSet</span> <span class='varid'>n</span> <span class='varid'>options</span> <a name="line-311"></a> <a name="line-312"></a><span class='comment'>-- ------------------------------------------------------------</span> <a name="line-313"></a> <a name="line-314"></a><span class='comment'>-- |</span>-<a name="line-315"></a><span class='comment'>-- parse a string as HTML content, substitute all HTML entity refs and canonicalize tree</span>-<a name="line-316"></a><span class='comment'>-- (substitute char refs, ...). Errors are ignored.</span>-<a name="line-317"></a><span class='comment'>-- </span>-<a name="line-318"></a><span class='comment'>-- A simpler version of 'readFromString' but with less functionality.</span>-<a name="line-319"></a><span class='comment'>-- Does not run in the IO monad</span>+<a name="line-315"></a><span class='comment'>-- the arrow version of 'readDocument', the arrow input is the source URI</span>+<a name="line-316"></a>+<a name="line-317"></a><a name="readFromDocument"></a><span class='definition'>readFromDocument</span>	<span class='keyglyph'>::</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>String</span> <span class='conid'>XmlTree</span>+<a name="line-318"></a><span class='definition'>readFromDocument</span> <span class='varid'>userOptions</span>+<a name="line-319"></a>    <span class='keyglyph'>=</span> <span class='varid'>applyA</span> <span class='layout'>(</span> <span class='varid'>arr</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>readDocument</span> <span class='varid'>userOptions</span> <span class='varid'>s</span> <span class='layout'>)</span> <a name="line-320"></a>-<a name="line-321"></a><a name="hread"></a><span class='definition'>hread</span>			<span class='keyglyph'>::</span> <span class='conid'>ArrowXml</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>XmlTree</span>-<a name="line-322"></a><span class='definition'>hread</span>-<a name="line-323"></a>    <span class='keyglyph'>=</span> <span class='varid'>parseHtmlContent</span>-<a name="line-324"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-325"></a>      <span class='varid'>substHtmlEntityRefs</span>-<a name="line-326"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-327"></a>      <span class='varid'>processTopDown</span> <span class='layout'>(</span> <span class='varid'>none</span> <span class='varop'>`when`</span> <span class='varid'>isError</span> <span class='layout'>)</span>-<a name="line-328"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-329"></a>      <span class='varid'>canonicalizeContents</span>+<a name="line-321"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-322"></a>+<a name="line-323"></a><span class='comment'>-- |</span>+<a name="line-324"></a><span class='comment'>-- read a document that is stored in a normal Haskell String</span>+<a name="line-325"></a><span class='comment'>--</span>+<a name="line-326"></a><span class='comment'>-- the same function as readDocument, but the parameter forms the input.</span>+<a name="line-327"></a><span class='comment'>-- All options available for 'readDocument' are applicable for readString.</span>+<a name="line-328"></a><span class='comment'>--</span>+<a name="line-329"></a><span class='comment'>-- Default encoding: No encoding is done, the String argument is taken as Unicode string</span> <a name="line-330"></a>-<a name="line-331"></a><span class='comment'>-- |</span>-<a name="line-332"></a><span class='comment'>-- parse a string as XML content, substitute all predefined XML entity refs and canonicalize tree</span>-<a name="line-333"></a><span class='comment'>-- (substitute char refs, ...)</span>+<a name="line-331"></a><a name="readString"></a><span class='definition'>readString</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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>XmlTree</span>+<a name="line-332"></a><span class='definition'>readString</span> <span class='varid'>userOptions</span> <span class='varid'>content</span>+<a name="line-333"></a>    <span class='keyglyph'>=</span> <span class='varid'>readDocument</span> <span class='layout'>(</span> <span class='layout'>(</span><span class='varid'>a_encoding</span><span class='layout'>,</span> <span class='varid'>unicodeString</span><span class='layout'>)</span> <span class='conop'>:</span> <span class='varid'>userOptions</span> <span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>stringProtocol</span> <span class='varop'>++</span> <span class='varid'>content</span><span class='layout'>)</span> <a name="line-334"></a>-<a name="line-335"></a><a name="xread"></a><span class='definition'>xread</span>			<span class='keyglyph'>::</span> <span class='conid'>ArrowXml</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>XmlTree</span>-<a name="line-336"></a><span class='definition'>xread</span>-<a name="line-337"></a>    <span class='keyglyph'>=</span> <span class='varid'>parseXmlContent</span>-<a name="line-338"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-339"></a>      <span class='varid'>substXmlEntityRefs</span>-<a name="line-340"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-341"></a>      <span class='varid'>canonicalizeContents</span>-<a name="line-342"></a>-<a name="line-343"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-344"></a>+<a name="line-335"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-336"></a>+<a name="line-337"></a><span class='comment'>-- |</span>+<a name="line-338"></a><span class='comment'>-- the arrow version of 'readString', the arrow input is the source URI</span>+<a name="line-339"></a>+<a name="line-340"></a><a name="readFromString"></a><span class='definition'>readFromString</span>	<span class='keyglyph'>::</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>String</span> <span class='conid'>XmlTree</span>+<a name="line-341"></a><span class='definition'>readFromString</span> <span class='varid'>userOptions</span>+<a name="line-342"></a>    <span class='keyglyph'>=</span> <span class='varid'>applyA</span> <span class='layout'>(</span> <span class='varid'>arr</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>readString</span> <span class='varid'>userOptions</span> <span class='varid'>s</span> <span class='layout'>)</span>+<a name="line-343"></a>+<a name="line-344"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-345"></a>+<a name="line-346"></a><span class='comment'>-- |</span>+<a name="line-347"></a><span class='comment'>-- parse a string as HTML content, substitute all HTML entity refs and canonicalize tree</span>+<a name="line-348"></a><span class='comment'>-- (substitute char refs, ...). Errors are ignored.</span>+<a name="line-349"></a><span class='comment'>-- </span>+<a name="line-350"></a><span class='comment'>-- A simpler version of 'readFromString' but with less functionality.</span>+<a name="line-351"></a><span class='comment'>-- Does not run in the IO monad</span>+<a name="line-352"></a>+<a name="line-353"></a><a name="hread"></a><span class='definition'>hread</span>			<span class='keyglyph'>::</span> <span class='conid'>ArrowXml</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>XmlTree</span>+<a name="line-354"></a><span class='definition'>hread</span>+<a name="line-355"></a>    <span class='keyglyph'>=</span> <span class='varid'>parseHtmlContent</span>+<a name="line-356"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-357"></a>      <span class='varid'>substHtmlEntityRefs</span>+<a name="line-358"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-359"></a>      <span class='varid'>processTopDown</span> <span class='layout'>(</span> <span class='varid'>none</span> <span class='varop'>`when`</span> <span class='varid'>isError</span> <span class='layout'>)</span>+<a name="line-360"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-361"></a>      <span class='varid'>canonicalizeContents</span>+<a name="line-362"></a>+<a name="line-363"></a><span class='comment'>-- |</span>+<a name="line-364"></a><span class='comment'>-- parse a string as XML content, substitute all predefined XML entity refs and canonicalize tree</span>+<a name="line-365"></a><span class='comment'>-- (substitute char refs, ...)</span>+<a name="line-366"></a>+<a name="line-367"></a><a name="xread"></a><span class='definition'>xread</span>			<span class='keyglyph'>::</span> <span class='conid'>ArrowXml</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>XmlTree</span>+<a name="line-368"></a><span class='definition'>xread</span>+<a name="line-369"></a>    <span class='keyglyph'>=</span> <span class='varid'>parseXmlContent</span>+<a name="line-370"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-371"></a>      <span class='varid'>substXmlEntityRefs</span>+<a name="line-372"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-373"></a>      <span class='varid'>canonicalizeContents</span>+<a name="line-374"></a>+<a name="line-375"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-376"></a> </pre></body> </html>
doc/hdoc/src/Text-XML-HXT-Arrow-XmlIOStateArrow.html view
@@ -67,846 +67,888 @@ <a name="line-59"></a>      <span class='varid'>unsetParam</span><span class='layout'>,</span> <a name="line-60"></a>      <span class='varid'>getParam</span><span class='layout'>,</span> <a name="line-61"></a>      <span class='varid'>getAllParams</span><span class='layout'>,</span>-<a name="line-62"></a>      <span class='varid'>setParamString</span><span class='layout'>,</span>-<a name="line-63"></a>      <span class='varid'>getParamString</span><span class='layout'>,</span>-<a name="line-64"></a>      <span class='varid'>setParamInt</span><span class='layout'>,</span>-<a name="line-65"></a>      <span class='varid'>getParamInt</span><span class='layout'>,</span>-<a name="line-66"></a>      -<a name="line-67"></a>      <span class='comment'>-- * Error Message Handling</span>-<a name="line-68"></a>      <span class='varid'>clearErrStatus</span><span class='layout'>,</span>-<a name="line-69"></a>      <span class='varid'>setErrStatus</span><span class='layout'>,</span>-<a name="line-70"></a>      <span class='varid'>getErrStatus</span><span class='layout'>,</span>-<a name="line-71"></a>      <span class='varid'>setErrMsgStatus</span><span class='layout'>,</span>-<a name="line-72"></a>      <span class='varid'>setErrorMsgHandler</span><span class='layout'>,</span>-<a name="line-73"></a>-<a name="line-74"></a>      <span class='varid'>errorMsgStderr</span><span class='layout'>,</span>-<a name="line-75"></a>      <span class='varid'>errorMsgCollect</span><span class='layout'>,</span>-<a name="line-76"></a>      <span class='varid'>errorMsgStderrAndCollect</span><span class='layout'>,</span>-<a name="line-77"></a>      <span class='varid'>errorMsgIgnore</span><span class='layout'>,</span>-<a name="line-78"></a>-<a name="line-79"></a>      <span class='varid'>getErrorMessages</span><span class='layout'>,</span>-<a name="line-80"></a>-<a name="line-81"></a>      <span class='varid'>filterErrorMsg</span><span class='layout'>,</span>-<a name="line-82"></a>      <span class='varid'>issueWarn</span><span class='layout'>,</span>-<a name="line-83"></a>      <span class='varid'>issueErr</span><span class='layout'>,</span>-<a name="line-84"></a>      <span class='varid'>issueFatal</span><span class='layout'>,</span>-<a name="line-85"></a>      <span class='varid'>setDocumentStatus</span><span class='layout'>,</span>-<a name="line-86"></a>      <span class='varid'>setDocumentStatusFromSystemState</span><span class='layout'>,</span>-<a name="line-87"></a>      <span class='varid'>documentStatusOk</span><span class='layout'>,</span>-<a name="line-88"></a>-<a name="line-89"></a>      <span class='comment'>-- * Document Base</span>-<a name="line-90"></a>      <span class='varid'>setBaseURI</span><span class='layout'>,</span>-<a name="line-91"></a>      <span class='varid'>getBaseURI</span><span class='layout'>,</span>-<a name="line-92"></a>      <span class='varid'>changeBaseURI</span><span class='layout'>,</span>-<a name="line-93"></a>      <span class='varid'>setDefaultBaseURI</span><span class='layout'>,</span>-<a name="line-94"></a>      <span class='varid'>getDefaultBaseURI</span><span class='layout'>,</span>-<a name="line-95"></a>      <span class='varid'>runInLocalURIContext</span><span class='layout'>,</span>-<a name="line-96"></a>-<a name="line-97"></a>      <span class='comment'>-- * Tracing</span>-<a name="line-98"></a>      <span class='varid'>setTraceLevel</span><span class='layout'>,</span>-<a name="line-99"></a>      <span class='varid'>getTraceLevel</span><span class='layout'>,</span>-<a name="line-100"></a>      <span class='varid'>withTraceLevel</span><span class='layout'>,</span>-<a name="line-101"></a>      <span class='varid'>trace</span><span class='layout'>,</span>-<a name="line-102"></a>      <span class='varid'>traceMsg</span><span class='layout'>,</span>-<a name="line-103"></a>      <span class='varid'>traceString</span><span class='layout'>,</span>-<a name="line-104"></a>      <span class='varid'>traceSource</span><span class='layout'>,</span>-<a name="line-105"></a>      <span class='varid'>traceTree</span><span class='layout'>,</span>-<a name="line-106"></a>      <span class='varid'>traceDoc</span><span class='layout'>,</span>-<a name="line-107"></a>      <span class='varid'>traceState</span><span class='layout'>,</span>-<a name="line-108"></a>-<a name="line-109"></a>      <span class='comment'>-- * URI Manipulation</span>-<a name="line-110"></a>      <span class='varid'>expandURIString</span><span class='layout'>,</span>-<a name="line-111"></a>      <span class='varid'>expandURI</span><span class='layout'>,</span>-<a name="line-112"></a>      <span class='varid'>mkAbsURI</span><span class='layout'>,</span>-<a name="line-113"></a>-<a name="line-114"></a>      <span class='varid'>getFragmentFromURI</span><span class='layout'>,</span>-<a name="line-115"></a>      <span class='varid'>getPathFromURI</span><span class='layout'>,</span>-<a name="line-116"></a>      <span class='varid'>getPortFromURI</span><span class='layout'>,</span>-<a name="line-117"></a>      <span class='varid'>getQueryFromURI</span><span class='layout'>,</span>-<a name="line-118"></a>      <span class='varid'>getRegNameFromURI</span><span class='layout'>,</span>-<a name="line-119"></a>      <span class='varid'>getSchemeFromURI</span><span class='layout'>,</span>-<a name="line-120"></a>      <span class='varid'>getUserInfoFromURI</span>-<a name="line-121"></a>      <span class='layout'>)</span>-<a name="line-122"></a><span class='keyword'>where</span>-<a name="line-123"></a>-<a name="line-124"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span>				<span class='comment'>-- arrow classes</span>-<a name="line-125"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>ArrowList</span>-<a name="line-126"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>ArrowIf</span>-<a name="line-127"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>ArrowTree</span>-<a name="line-128"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>ArrowIO</span>-<a name="line-129"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>IOStateListArrow</span>-<a name="line-130"></a>-<a name="line-131"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Strategies</span><span class='varop'>.</span><span class='conid'>DeepSeq</span>-<a name="line-132"></a>-<a name="line-133"></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'>Interface</span>-<a name="line-134"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlArrow</span>-<a name="line-135"></a>-<a name="line-136"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>Edit</span>-<a name="line-137"></a>    <span class='layout'>(</span> <span class='varid'>addHeadlineToXmlDoc</span>-<a name="line-138"></a>    <span class='layout'>,</span> <span class='varid'>treeRepOfXmlDoc</span>-<a name="line-139"></a>    <span class='layout'>,</span> <span class='varid'>indentDoc</span>-<a name="line-140"></a>    <span class='layout'>)</span>-<a name="line-141"></a>-<a name="line-142"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>-<a name="line-143"></a>-<a name="line-144"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>URI</span>-<a name="line-145"></a>    <span class='layout'>(</span> <span class='conid'>URI</span>-<a name="line-146"></a>    <span class='layout'>,</span> <span class='varid'>escapeURIChar</span>-<a name="line-147"></a>    <span class='layout'>,</span> <span class='varid'>isUnescapedInURI</span>-<a name="line-148"></a>    <span class='layout'>,</span> <span class='varid'>nonStrictRelativeTo</span>-<a name="line-149"></a>    <span class='layout'>,</span> <span class='varid'>parseURIReference</span>-<a name="line-150"></a>    <span class='layout'>,</span> <span class='varid'>uriAuthority</span>-<a name="line-151"></a>    <span class='layout'>,</span> <span class='varid'>uriFragment</span>-<a name="line-152"></a>    <span class='layout'>,</span> <span class='varid'>uriPath</span>-<a name="line-153"></a>    <span class='layout'>,</span> <span class='varid'>uriPort</span>-<a name="line-154"></a>    <span class='layout'>,</span> <span class='varid'>uriQuery</span>-<a name="line-155"></a>    <span class='layout'>,</span> <span class='varid'>uriRegName</span>-<a name="line-156"></a>    <span class='layout'>,</span> <span class='varid'>uriScheme</span>-<a name="line-157"></a>    <span class='layout'>,</span> <span class='varid'>uriUserInfo</span>-<a name="line-158"></a>    <span class='layout'>)</span>-<a name="line-159"></a>-<a name="line-160"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>IO</span>-<a name="line-161"></a>    <span class='layout'>(</span> <span class='varid'>hPutStrLn</span>-<a name="line-162"></a>    <span class='layout'>,</span> <span class='varid'>hFlush</span>-<a name="line-163"></a>    <span class='layout'>,</span> <span class='varid'>stderr</span>-<a name="line-164"></a>    <span class='layout'>)</span>-<a name="line-165"></a>-<a name="line-166"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>Directory</span>-<a name="line-167"></a>    <span class='layout'>(</span> <span class='varid'>getCurrentDirectory</span>-<a name="line-168"></a>    <span class='layout'>)</span>-<a name="line-169"></a>-<a name="line-170"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-171"></a><span class='comment'>{- $datatypes -}</span>-<a name="line-172"></a>-<a name="line-173"></a>-<a name="line-174"></a><span class='comment'>-- |</span>-<a name="line-175"></a><span class='comment'>-- predefined system state data type with all components for the</span>-<a name="line-176"></a><span class='comment'>-- system functions, like trace, error handling, ...</span>-<a name="line-177"></a>-<a name="line-178"></a><a name="XIOSysState"></a><span class='keyword'>data</span> <span class='conid'>XIOSysState</span>	<span class='keyglyph'>=</span> <span class='conid'>XIOSys</span>  <span class='layout'>{</span> <span class='varid'>xio_trace</span>			<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>Int</span>-<a name="line-179"></a>				  <span class='layout'>,</span> <span class='varid'>xio_errorStatus</span>		<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>Int</span>-<a name="line-180"></a>				  <span class='layout'>,</span> <span class='varid'>xio_errorModule</span>		<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>String</span>-<a name="line-181"></a>				  <span class='layout'>,</span> <span class='varid'>xio_errorMsgHandler</span>		<span class='keyglyph'>::</span>   <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='conid'>()</span>-<a name="line-182"></a>				  <span class='layout'>,</span> <span class='varid'>xio_errorMsgCollect</span>		<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>Bool</span>-<a name="line-183"></a>				  <span class='layout'>,</span> <span class='varid'>xio_errorMsgList</span>		<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>XmlTrees</span>-<a name="line-184"></a>				  <span class='layout'>,</span> <span class='varid'>xio_baseURI</span>			<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>String</span>-<a name="line-185"></a>				  <span class='layout'>,</span> <span class='varid'>xio_defaultBaseURI</span>		<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>String</span>-<a name="line-186"></a>				  <span class='layout'>,</span> <span class='varid'>xio_attrList</span>		<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='layout'>(</span><span class='conid'>AssocList</span> <span class='conid'>String</span> <span class='conid'>XmlTrees</span><span class='layout'>)</span>-<a name="line-187"></a>				  <span class='layout'>}</span>-<a name="line-188"></a>-<a name="line-189"></a><span class='keyword'>instance</span> <span class='conid'>DeepSeq</span> <span class='conid'>XIOSysState</span> <span class='keyword'>where</span>-<a name="line-190"></a>    <span class='varid'>deepSeq</span> <span class='layout'>(</span><span class='conid'>XIOSys</span> <span class='varid'>tr</span> <span class='varid'>es</span> <span class='varid'>em</span> <span class='varid'>emh</span> <span class='varid'>emc</span> <span class='varid'>eml</span> <span class='varid'>bu</span> <span class='varid'>du</span> <span class='varid'>al</span><span class='layout'>)</span> <span class='varid'>y</span>-<a name="line-191"></a>	<span class='keyglyph'>=</span> <span class='varid'>deepSeq</span> <span class='varid'>tr</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>es</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>em</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>emh</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>emc</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>eml</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>bu</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>du</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>al</span> <span class='varid'>y</span>-<a name="line-192"></a>-<a name="line-193"></a><span class='comment'>-- |</span>-<a name="line-194"></a><span class='comment'>-- state datatype consists of a system state and a user state</span>-<a name="line-195"></a><span class='comment'>-- the user state is not fixed</span>-<a name="line-196"></a>-<a name="line-197"></a><a name="XIOState"></a><span class='keyword'>data</span> <span class='conid'>XIOState</span> <span class='varid'>us</span>	<span class='keyglyph'>=</span> <span class='conid'>XIOState</span> <span class='layout'>{</span> <span class='varid'>xio_sysState</span>		<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>XIOSysState</span>-<a name="line-198"></a>				   <span class='layout'>,</span> <span class='varid'>xio_userState</span>		<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='varid'>us</span>-<a name="line-199"></a>				   <span class='layout'>}</span>-<a name="line-200"></a>-<a name="line-201"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>DeepSeq</span> <span class='varid'>us</span><span class='layout'>)</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>DeepSeq</span> <span class='layout'>(</span><span class='conid'>XIOState</span> <span class='varid'>us</span><span class='layout'>)</span> <span class='keyword'>where</span>-<a name="line-202"></a>    <span class='varid'>deepSeq</span> <span class='layout'>(</span><span class='conid'>XIOState</span> <span class='varid'>sys</span> <span class='varid'>usr</span><span class='layout'>)</span> <span class='varid'>y</span>	<span class='keyglyph'>=</span> <span class='varid'>deepSeq</span> <span class='varid'>sys</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>usr</span> <span class='varid'>y</span>-<a name="line-203"></a>-<a name="line-204"></a><span class='comment'>-- |</span>-<a name="line-205"></a><span class='comment'>-- The arrow type for stateful arrows</span>-<a name="line-206"></a>-<a name="line-207"></a><a name="IOStateArrow"></a><span class='keyword'>type</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>c</span>	<span class='keyglyph'>=</span> <span class='conid'>IOSLA</span> <span class='layout'>(</span><span class='conid'>XIOState</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='varid'>b</span> <span class='varid'>c</span>-<a name="line-208"></a>-<a name="line-209"></a><span class='comment'>-- |</span>-<a name="line-210"></a><span class='comment'>-- The arrow for stateful arrows with no user defined state</span>-<a name="line-211"></a>-<a name="line-212"></a><a name="IOSArrow"></a><span class='keyword'>type</span> <span class='conid'>IOSArrow</span> <span class='varid'>b</span> <span class='varid'>c</span>	<span class='keyglyph'>=</span> <span class='conid'>IOStateArrow</span> <span class='conid'>()</span> <span class='varid'>b</span> <span class='varid'>c</span>-<a name="line-213"></a>-<a name="line-214"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-215"></a>-<a name="line-216"></a>-<a name="line-217"></a><span class='comment'>-- | the default global state, used as initial state when running an 'IOSArrow' with 'runIOSLA' or</span>-<a name="line-218"></a><span class='comment'>-- 'runX'</span>-<a name="line-219"></a>-<a name="line-220"></a><a name="initialState"></a><span class='definition'>initialState</span>	<span class='keyglyph'>::</span> <span class='varid'>us</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XIOState</span> <span class='varid'>us</span>-<a name="line-221"></a><span class='definition'>initialState</span> <span class='varid'>s</span>	<span class='keyglyph'>=</span> <span class='conid'>XIOState</span> <span class='layout'>{</span> <span class='varid'>xio_sysState</span> 	<span class='keyglyph'>=</span> <span class='varid'>initialSysState</span>-<a name="line-222"></a>			   <span class='layout'>,</span> <span class='varid'>xio_userState</span>	<span class='keyglyph'>=</span> <span class='varid'>s</span>-<a name="line-223"></a>			   <span class='layout'>}</span>-<a name="line-224"></a>-<a name="line-225"></a><a name="initialSysState"></a><span class='definition'>initialSysState</span>	<span class='keyglyph'>::</span> <span class='conid'>XIOSysState</span>-<a name="line-226"></a><span class='definition'>initialSysState</span>	<span class='keyglyph'>=</span> <span class='conid'>XIOSys</span> <span class='layout'>{</span> <span class='varid'>xio_trace</span>		<span class='keyglyph'>=</span> <span class='num'>0</span>-<a name="line-227"></a>			 <span class='layout'>,</span> <span class='varid'>xio_errorStatus</span>	<span class='keyglyph'>=</span> <span class='varid'>c_ok</span>-<a name="line-228"></a>			 <span class='layout'>,</span> <span class='varid'>xio_errorModule</span>	<span class='keyglyph'>=</span> <span class='str'>""</span>-<a name="line-229"></a>			 <span class='layout'>,</span> <span class='varid'>xio_errorMsgHandler</span>	<span class='keyglyph'>=</span> <span class='varid'>hPutStrLn</span> <span class='varid'>stderr</span>-<a name="line-230"></a>			 <span class='layout'>,</span> <span class='varid'>xio_errorMsgCollect</span>	<span class='keyglyph'>=</span> <span class='conid'>False</span>-<a name="line-231"></a>			 <span class='layout'>,</span> <span class='varid'>xio_errorMsgList</span>	<span class='keyglyph'>=</span> <span class='conid'>[]</span>-<a name="line-232"></a>			 <span class='layout'>,</span> <span class='varid'>xio_baseURI</span>		<span class='keyglyph'>=</span> <span class='str'>""</span>-<a name="line-233"></a>			 <span class='layout'>,</span> <span class='varid'>xio_defaultBaseURI</span>	<span class='keyglyph'>=</span> <span class='str'>""</span>-<a name="line-234"></a>			 <span class='layout'>,</span> <span class='varid'>xio_attrList</span>		<span class='keyglyph'>=</span> <span class='conid'>[]</span>-<a name="line-235"></a>			 <span class='layout'>}</span>-<a name="line-236"></a>-<a name="line-237"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-238"></a>-<a name="line-239"></a><span class='comment'>-- |</span>-<a name="line-240"></a><span class='comment'>-- apply an 'IOSArrow' to an empty root node with 'initialState' () as initial state</span>-<a name="line-241"></a><span class='comment'>--</span>-<a name="line-242"></a><span class='comment'>-- the main entry point for running a state arrow with IO</span>-<a name="line-243"></a><span class='comment'>--</span>-<a name="line-244"></a><span class='comment'>-- when running @ runX f@ an empty XML root node is applied to @f@.</span>-<a name="line-245"></a><span class='comment'>-- usually @f@ will start with a constant arrow (ignoring the input), e.g. a 'Text.XML.HXT.Arrow.ReadDocument.readDocument' arrow.</span>-<a name="line-246"></a><span class='comment'>--</span>-<a name="line-247"></a><span class='comment'>-- for usage see examples with 'Text.XML.HXT.Arrow.WriteDocument.writeDocument'</span>-<a name="line-248"></a><span class='comment'>--</span>-<a name="line-249"></a><span class='comment'>-- if input has to be feed into the arrow use 'Control.Arrow.IOStateListArrow.runIOSLA' like in @ runIOSLA f emptyX inputDoc @</span>-<a name="line-250"></a>-<a name="line-251"></a><a name="runX"></a><span class='definition'>runX</span>		<span class='keyglyph'>::</span> <span class='conid'>IOSArrow</span> <span class='conid'>XmlTree</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='keyglyph'>[</span><span class='varid'>c</span><span class='keyglyph'>]</span>-<a name="line-252"></a><span class='definition'>runX</span>		<span class='keyglyph'>=</span> <span class='varid'>runXIOState</span> <span class='layout'>(</span><span class='varid'>initialState</span> <span class='conid'>()</span><span class='layout'>)</span>-<a name="line-253"></a>-<a name="line-254"></a><a name="runXIOState"></a><span class='definition'>runXIOState</span>	<span class='keyglyph'>::</span> <span class='conid'>XIOState</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='keyglyph'>[</span><span class='varid'>c</span><span class='keyglyph'>]</span>-<a name="line-255"></a><span class='definition'>runXIOState</span> <span class='varid'>s0</span> <span class='varid'>f</span>-<a name="line-256"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-257"></a>      <span class='layout'>(</span><span class='sel'>_finalState</span><span class='layout'>,</span> <span class='varid'>res</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>runIOSLA</span> <span class='layout'>(</span><span class='varid'>emptyRoot</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>f</span><span class='layout'>)</span> <span class='varid'>s0</span> <span class='varid'>undefined</span>-<a name="line-258"></a>      <span class='varid'>return</span> <span class='varid'>res</span>-<a name="line-259"></a>    <span class='keyword'>where</span>-<a name="line-260"></a>    <span class='varid'>emptyRoot</span>    <span class='keyglyph'>=</span> <span class='varid'>root</span> <span class='conid'>[]</span> <span class='conid'>[]</span>-<a name="line-261"></a>-<a name="line-262"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-263"></a>-<a name="line-264"></a><span class='comment'>{- user state -}</span>-<a name="line-265"></a>-<a name="line-266"></a><span class='comment'>-- | read the user defined part of the state</span>-<a name="line-267"></a>-<a name="line-268"></a><a name="getUserState"></a><span class='definition'>getUserState</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>s</span>-<a name="line-269"></a><span class='definition'>getUserState</span>-<a name="line-270"></a>    <span class='keyglyph'>=</span> <span class='conid'>IOSLA</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='keyword'>_</span> <span class='keyglyph'>-&gt;</span>-<a name="line-271"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>s</span><span class='layout'>,</span> <span class='keyglyph'>[</span><span class='varid'>xio_userState</span> <span class='varid'>s</span><span class='keyglyph'>]</span><span class='layout'>)</span>-<a name="line-272"></a>-<a name="line-273"></a><span class='comment'>-- | change the user defined part of the state</span>-<a name="line-274"></a>-<a name="line-275"></a><a name="changeUserState"></a><span class='definition'>changeUserState</span>		<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-276"></a><span class='definition'>changeUserState</span> <span class='varid'>cf</span>-<a name="line-277"></a>    <span class='keyglyph'>=</span> <span class='conid'>IOSLA</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='varid'>v</span> <span class='keyglyph'>-&gt;</span>-<a name="line-278"></a>      <span class='keyword'>let</span> <span class='varid'>s'</span> <span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_userState</span> <span class='keyglyph'>=</span> <span class='varid'>cf</span> <span class='varid'>v</span> <span class='layout'>(</span><span class='varid'>xio_userState</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='layout'>}</span>-<a name="line-279"></a>      <span class='keyword'>in</span> <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>s'</span><span class='layout'>,</span> <span class='keyglyph'>[</span><span class='varid'>v</span><span class='keyglyph'>]</span><span class='layout'>)</span>-<a name="line-280"></a>-<a name="line-281"></a><span class='comment'>-- | set the user defined part of the state</span>-<a name="line-282"></a>-<a name="line-283"></a><a name="setUserState"></a><span class='definition'>setUserState</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>s</span> <span class='varid'>s</span>-<a name="line-284"></a><span class='definition'>setUserState</span>-<a name="line-285"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeUserState</span> <span class='varid'>const</span>-<a name="line-286"></a>-<a name="line-287"></a><span class='comment'>-- | extend user state</span>-<a name="line-288"></a><span class='comment'>--</span>-<a name="line-289"></a><span class='comment'>-- Run an arrow with an extended user state component, The old component</span>-<a name="line-290"></a><span class='comment'>-- is stored together with a new one in a pair, the arrow is executed with this</span>-<a name="line-291"></a><span class='comment'>-- extended state, and the augmented state component is removed form the state</span>-<a name="line-292"></a><span class='comment'>-- when the arrow has finished its execution</span>-<a name="line-293"></a>-<a name="line-294"></a><a name="withExtendedUserState"></a><span class='definition'>withExtendedUserState</span>	<span class='keyglyph'>::</span> <span class='varid'>s1</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='layout'>(</span><span class='varid'>s1</span><span class='layout'>,</span> <span class='varid'>s0</span><span class='layout'>)</span> <span class='varid'>b</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s0</span> <span class='varid'>b</span> <span class='varid'>c</span>-<a name="line-295"></a><span class='definition'>withExtendedUserState</span> <span class='varid'>initS1</span> <span class='varid'>f</span>-<a name="line-296"></a>    <span class='keyglyph'>=</span> <span class='conid'>IOSLA</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s0</span> <span class='varid'>x</span> <span class='keyglyph'>-&gt;</span>-<a name="line-297"></a>      <span class='keyword'>do</span>-<a name="line-298"></a>      <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>finalS</span><span class='layout'>,</span> <span class='varid'>res</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>runIOSLA</span> <span class='varid'>f</span> <span class='layout'>(</span> <span class='conid'>XIOState</span> <span class='layout'>{</span> <span class='varid'>xio_sysState</span>  <span class='keyglyph'>=</span>          <span class='varid'>xio_sysState</span>  <span class='varid'>s0</span>-<a name="line-299"></a>					      <span class='layout'>,</span> <span class='varid'>xio_userState</span> <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>initS1</span><span class='layout'>,</span> <span class='varid'>xio_userState</span> <span class='varid'>s0</span><span class='layout'>)</span>-<a name="line-300"></a>					      <span class='layout'>}</span>-<a name="line-301"></a>				   <span class='layout'>)</span> <span class='varid'>x</span>-<a name="line-302"></a>      <span class='varid'>return</span> <span class='layout'>(</span> <span class='conid'>XIOState</span> <span class='layout'>{</span> <span class='varid'>xio_sysState</span>  <span class='keyglyph'>=</span>      <span class='varid'>xio_sysState</span>  <span class='varid'>finalS</span>-<a name="line-303"></a>			<span class='layout'>,</span> <span class='varid'>xio_userState</span> <span class='keyglyph'>=</span> <span class='varid'>snd</span> <span class='layout'>(</span><span class='varid'>xio_userState</span> <span class='varid'>finalS</span><span class='layout'>)</span>-<a name="line-304"></a>			<span class='layout'>}</span>-<a name="line-305"></a>	     <span class='layout'>,</span> <span class='varid'>res</span>-<a name="line-306"></a>	     <span class='layout'>)</span>-<a name="line-307"></a>-<a name="line-308"></a><span class='comment'>-- | change the type of user state</span>-<a name="line-309"></a><span class='comment'>--</span>-<a name="line-310"></a><span class='comment'>-- This conversion is useful, when running a state arrow with another</span>-<a name="line-311"></a><span class='comment'>-- structure of the user state, e.g. with () when executing some IO arrows</span>-<a name="line-312"></a>-<a name="line-313"></a><a name="withOtherUserState"></a><span class='definition'>withOtherUserState</span>	<span class='keyglyph'>::</span> <span class='varid'>s1</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s1</span> <span class='varid'>b</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s0</span> <span class='varid'>b</span> <span class='varid'>c</span>-<a name="line-314"></a><span class='definition'>withOtherUserState</span> <span class='varid'>s1</span> <span class='varid'>f</span>-<a name="line-315"></a>    <span class='keyglyph'>=</span> <span class='conid'>IOSLA</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='varid'>x</span> <span class='keyglyph'>-&gt;</span>-<a name="line-316"></a>      <span class='keyword'>do</span>-<a name="line-317"></a>      <span class='layout'>(</span><span class='varid'>s'</span><span class='layout'>,</span> <span class='varid'>res</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>runIOSLA</span> <span class='varid'>f</span> <span class='layout'>(</span> <span class='conid'>XIOState</span> <span class='layout'>{</span> <span class='varid'>xio_sysState</span>  <span class='keyglyph'>=</span> <span class='varid'>xio_sysState</span> <span class='varid'>s</span>-<a name="line-318"></a>					 <span class='layout'>,</span> <span class='varid'>xio_userState</span> <span class='keyglyph'>=</span> <span class='varid'>s1</span>-<a name="line-319"></a>					 <span class='layout'>}</span>-<a name="line-320"></a>			      <span class='layout'>)</span> <span class='varid'>x</span>-<a name="line-321"></a>      <span class='varid'>return</span> <span class='layout'>(</span> <span class='conid'>XIOState</span> <span class='layout'>{</span> <span class='varid'>xio_sysState</span>  <span class='keyglyph'>=</span> <span class='varid'>xio_sysState</span>  <span class='varid'>s'</span>-<a name="line-322"></a>			<span class='layout'>,</span> <span class='varid'>xio_userState</span> <span class='keyglyph'>=</span> <span class='varid'>xio_userState</span> <span class='varid'>s</span>-<a name="line-323"></a>			<span class='layout'>}</span>-<a name="line-324"></a>	     <span class='layout'>,</span> <span class='varid'>res</span>-<a name="line-325"></a>	     <span class='layout'>)</span>-<a name="line-326"></a>-<a name="line-327"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-328"></a>-<a name="line-329"></a><span class='comment'>{- $system state params -}</span>-<a name="line-330"></a>-<a name="line-331"></a><a name="getSysParam"></a><span class='definition'>getSysParam</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>XIOSysState</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>c</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>c</span>-<a name="line-332"></a><span class='definition'>getSysParam</span> <span class='varid'>f</span>-<a name="line-333"></a>    <span class='keyglyph'>=</span> <span class='conid'>IOSLA</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='sel'>_x</span> <span class='keyglyph'>-&gt;</span>-<a name="line-334"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>s</span><span class='layout'>,</span> <span class='layout'>(</span><span class='conop'>:</span><span class='conid'>[]</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>f</span> <span class='varop'>.</span> <span class='varid'>xio_sysState</span> <span class='varop'>$</span> <span class='varid'>s</span><span class='layout'>)</span>-<a name="line-335"></a>-<a name="line-336"></a><a name="changeSysParam"></a><span class='definition'>changeSysParam</span>		<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XIOSysState</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XIOSysState</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-337"></a><span class='definition'>changeSysParam</span> <span class='varid'>cf</span>-<a name="line-338"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='conid'>IOSLA</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='varid'>v</span> <span class='keyglyph'>-&gt;</span>-<a name="line-339"></a>	<span class='keyword'>let</span> <span class='varid'>s'</span> <span class='keyglyph'>=</span> <span class='varid'>changeSysState</span> <span class='layout'>(</span><span class='varid'>cf</span> <span class='varid'>v</span><span class='layout'>)</span> <span class='varid'>s</span>-<a name="line-340"></a>	<span class='keyword'>in</span> <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>s'</span><span class='layout'>,</span> <span class='keyglyph'>[</span><span class='varid'>v</span><span class='keyglyph'>]</span><span class='layout'>)</span>-<a name="line-341"></a>      <span class='layout'>)</span>-<a name="line-342"></a>    <span class='keyword'>where</span>-<a name="line-343"></a>    <span class='varid'>changeSysState</span> <span class='varid'>css</span> <span class='varid'>s</span> <span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_sysState</span> <span class='keyglyph'>=</span> <span class='varid'>css</span> <span class='layout'>(</span><span class='varid'>xio_sysState</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='layout'>}</span>-<a name="line-344"></a>-<a name="line-345"></a><span class='comment'>-- | store a single XML tree in global state under a given attribute name</span>-<a name="line-346"></a>-<a name="line-347"></a><a name="setParam"></a><span class='definition'>setParam</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-348"></a><span class='definition'>setParam</span> <span class='varid'>n</span>-<a name="line-349"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='conop'>:</span><span class='conid'>[]</span><span class='layout'>)</span> <span class='varop'>^&gt;&gt;</span> <span class='varid'>setParamList</span> <span class='varid'>n</span>-<a name="line-350"></a>-<a name="line-351"></a><span class='comment'>-- | store a list of XML trees in global system state under a given attribute name</span>-<a name="line-352"></a>-<a name="line-353"></a><a name="setParamList"></a><span class='definition'>setParamList</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTrees</span> <span class='conid'>XmlTree</span>-<a name="line-354"></a><span class='definition'>setParamList</span> <span class='varid'>n</span>-<a name="line-355"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysParam</span> <span class='varid'>addE</span>-<a name="line-356"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-357"></a>      <span class='varid'>arrL</span> <span class='varid'>id</span>-<a name="line-358"></a>    <span class='keyword'>where</span>-<a name="line-359"></a>    <span class='varid'>addE</span> <span class='varid'>x</span> <span class='varid'>s</span> <span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_attrList</span> <span class='keyglyph'>=</span> <span class='varid'>addEntry</span> <span class='varid'>n</span> <span class='varid'>x</span> <span class='layout'>(</span><span class='varid'>xio_attrList</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='layout'>}</span>-<a name="line-360"></a>-<a name="line-361"></a><span class='comment'>-- | remove an entry in global state, arrow input remains unchanged</span>-<a name="line-362"></a>-<a name="line-363"></a><a name="unsetParam"></a><span class='definition'>unsetParam</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-364"></a><span class='definition'>unsetParam</span> <span class='varid'>n</span>-<a name="line-365"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysParam</span> <span class='varid'>delE</span>-<a name="line-366"></a>    <span class='keyword'>where</span>-<a name="line-367"></a>    <span class='varid'>delE</span> <span class='keyword'>_</span> <span class='varid'>s</span> <span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_attrList</span> <span class='keyglyph'>=</span> <span class='varid'>delEntry</span> <span class='varid'>n</span> <span class='layout'>(</span><span class='varid'>xio_attrList</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='layout'>}</span>-<a name="line-368"></a>-<a name="line-369"></a><span class='comment'>-- | read an attribute value from global state</span>-<a name="line-370"></a>-<a name="line-371"></a><a name="getParam"></a><span class='definition'>getParam</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>XmlTree</span>-<a name="line-372"></a><span class='definition'>getParam</span> <span class='varid'>n</span>-<a name="line-373"></a>    <span class='keyglyph'>=</span> <span class='varid'>getAllParams</span>-<a name="line-374"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-375"></a>      <span class='varid'>arrL</span> <span class='layout'>(</span><span class='varid'>lookup1</span> <span class='varid'>n</span><span class='layout'>)</span>-<a name="line-376"></a>-<a name="line-377"></a><span class='comment'>-- | read all attributes from global state</span>-<a name="line-378"></a>-<a name="line-379"></a><a name="getAllParams"></a><span class='definition'>getAllParams</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='layout'>(</span><span class='conid'>AssocList</span> <span class='conid'>String</span> <span class='conid'>XmlTrees</span><span class='layout'>)</span>-<a name="line-380"></a><span class='definition'>getAllParams</span>-<a name="line-381"></a>    <span class='keyglyph'>=</span> <span class='varid'>getSysParam</span> <span class='varid'>xio_attrList</span>-<a name="line-382"></a>-<a name="line-383"></a><a name="setParamString"></a><span class='definition'>setParamString</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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-384"></a><span class='definition'>setParamString</span> <span class='varid'>n</span> <span class='varid'>v</span>-<a name="line-385"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>txt</span> <span class='varid'>v</span>-<a name="line-386"></a>		<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-387"></a>		<span class='varid'>setParam</span> <span class='varid'>n</span>-<a name="line-388"></a>	      <span class='layout'>)</span>-<a name="line-389"></a>-<a name="line-390"></a><span class='comment'>-- | read a string value from global state,</span>-<a name="line-391"></a><span class='comment'>-- if parameter not set \"\" is returned</span>-<a name="line-392"></a>-<a name="line-393"></a><a name="getParamString"></a><span class='definition'>getParamString</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>String</span>-<a name="line-394"></a><span class='definition'>getParamString</span> <span class='varid'>n</span>-<a name="line-395"></a>    <span class='keyglyph'>=</span> <span class='varid'>xshow</span> <span class='layout'>(</span><span class='varid'>getParam</span> <span class='varid'>n</span><span class='layout'>)</span>-<a name="line-396"></a>-<a name="line-397"></a><span class='comment'>-- | store an int value in global state</span>-<a name="line-398"></a>-<a name="line-399"></a><a name="setParamInt"></a><span class='definition'>setParamInt</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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-400"></a><span class='definition'>setParamInt</span> <span class='varid'>n</span> <span class='varid'>v</span>-<a name="line-401"></a>    <span class='keyglyph'>=</span> <span class='varid'>setParamString</span> <span class='varid'>n</span> <span class='layout'>(</span><span class='varid'>show</span> <span class='varid'>v</span><span class='layout'>)</span>-<a name="line-402"></a>-<a name="line-403"></a><span class='comment'>-- | read an int value from global state</span>-<a name="line-404"></a><span class='comment'>-- </span>-<a name="line-405"></a><span class='comment'>-- &gt; getParamInt 0 myIntAttr</span>-<a name="line-406"></a>-<a name="line-407"></a><a name="getParamInt"></a><span class='definition'>getParamInt</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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>Int</span>-<a name="line-408"></a><span class='definition'>getParamInt</span> <span class='varid'>def</span> <span class='varid'>n</span>-<a name="line-409"></a>    <span class='keyglyph'>=</span> <span class='varid'>getParamString</span> <span class='varid'>n</span>-<a name="line-410"></a>      <span class='varop'>&gt;&gt;^</span>-<a name="line-411"></a>      <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>x</span> <span class='keyglyph'>-&gt;</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>x</span> <span class='keyword'>then</span> <span class='varid'>def</span> <span class='keyword'>else</span> <span class='varid'>read</span> <span class='varid'>x</span><span class='layout'>)</span>-<a name="line-412"></a>-<a name="line-413"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-414"></a>-<a name="line-415"></a><span class='comment'>-- | reset global error variable</span>-<a name="line-416"></a>-<a name="line-417"></a><a name="changeErrorStatus"></a><span class='definition'>changeErrorStatus</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Int</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>Int</span> <span class='conid'>Int</span>-<a name="line-418"></a><span class='definition'>changeErrorStatus</span> <span class='varid'>f</span>-<a name="line-419"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysParam</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>l</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_errorStatus</span> <span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varid'>l</span> <span class='layout'>(</span><span class='varid'>xio_errorStatus</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='layout'>}</span><span class='layout'>)</span>-<a name="line-420"></a>-<a name="line-421"></a><a name="clearErrStatus"></a><span class='definition'>clearErrStatus</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-422"></a><span class='definition'>clearErrStatus</span>-<a name="line-423"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span><span class='varid'>constA</span> <span class='num'>0</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>changeErrorStatus</span> <span class='varid'>min</span><span class='layout'>)</span>-<a name="line-424"></a>-<a name="line-425"></a><span class='comment'>-- | set global error variable</span>-<a name="line-426"></a>-<a name="line-427"></a><a name="setErrStatus"></a><span class='definition'>setErrStatus</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>Int</span> <span class='conid'>Int</span>-<a name="line-428"></a><span class='definition'>setErrStatus</span>-<a name="line-429"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeErrorStatus</span> <span class='varid'>max</span>-<a name="line-430"></a>-<a name="line-431"></a><span class='comment'>-- | read current global error status</span>-<a name="line-432"></a>-<a name="line-433"></a><a name="getErrStatus"></a><span class='definition'>getErrStatus</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>Int</span>-<a name="line-434"></a><span class='definition'>getErrStatus</span>-<a name="line-435"></a>    <span class='keyglyph'>=</span> <span class='varid'>getSysParam</span> <span class='varid'>xio_errorStatus</span>-<a name="line-436"></a>-<a name="line-437"></a><span class='comment'>-- | raise the global error status level to that of the input tree</span>-<a name="line-438"></a>-<a name="line-439"></a><a name="setErrMsgStatus"></a><span class='definition'>setErrMsgStatus</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-440"></a><span class='definition'>setErrMsgStatus</span>-<a name="line-441"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>getErrorLevel</span>-<a name="line-442"></a>		<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-443"></a>		<span class='varid'>setErrStatus</span>-<a name="line-444"></a>	      <span class='layout'>)</span>-<a name="line-445"></a>-<a name="line-446"></a><span class='comment'>-- | set the error message handler and the flag for collecting the errors</span>-<a name="line-447"></a>-<a name="line-448"></a><a name="setErrorMsgHandler"></a><span class='definition'>setErrorMsgHandler</span>	<span class='keyglyph'>::</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='conid'>()</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-449"></a><span class='definition'>setErrorMsgHandler</span> <span class='varid'>c</span> <span class='varid'>f</span>-<a name="line-450"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysParam</span> <span class='varid'>cf</span>-<a name="line-451"></a>    <span class='keyword'>where</span>-<a name="line-452"></a>    <span class='varid'>cf</span> <span class='keyword'>_</span> <span class='varid'>s</span> <span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_errorMsgHandler</span> <span class='keyglyph'>=</span> <span class='varid'>f</span>-<a name="line-453"></a>	       <span class='layout'>,</span> <span class='varid'>xio_errorMsgCollect</span> <span class='keyglyph'>=</span> <span class='varid'>c</span> <span class='layout'>}</span>-<a name="line-454"></a>-<a name="line-455"></a><span class='comment'>-- | error message handler for output to stderr</span>-<a name="line-456"></a>		  -<a name="line-457"></a><a name="sysErrorMsg"></a><span class='definition'>sysErrorMsg</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-458"></a><span class='definition'>sysErrorMsg</span>-<a name="line-459"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>getErrorLevel</span> <span class='varop'>&amp;&amp;&amp;</span> <span class='varid'>getErrorMsg</span>-<a name="line-460"></a>		<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-461"></a>		<span class='varid'>arr</span> <span class='varid'>formatErrorMsg</span>-<a name="line-462"></a>		<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-463"></a>		<span class='layout'>(</span> <span class='conid'>IOSLA</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='varid'>e</span> <span class='keyglyph'>-&gt;</span>-<a name="line-464"></a>		  <span class='keyword'>do</span>-<a name="line-465"></a>		  <span class='layout'>(</span><span class='varid'>xio_errorMsgHandler</span> <span class='varop'>.</span> <span class='varid'>xio_sysState</span> <span class='varop'>$</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='varid'>e</span>-<a name="line-466"></a>		  <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>s</span><span class='layout'>,</span> <span class='varid'>undefined</span><span class='layout'>)</span>-<a name="line-467"></a>		<span class='layout'>)</span>-<a name="line-468"></a>	      <span class='layout'>)</span>-<a name="line-469"></a>    <span class='keyword'>where</span>-<a name="line-470"></a>    <span class='varid'>formatErrorMsg</span> <span class='layout'>(</span><span class='varid'>level</span><span class='layout'>,</span> <span class='varid'>msg</span><span class='layout'>)</span>	<span class='keyglyph'>=</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'>msg</span>-<a name="line-471"></a>    <span class='varid'>errClass</span> <span class='varid'>l</span>-<a name="line-472"></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-473"></a>	  <span class='keyword'>where</span>-<a name="line-474"></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-475"></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-476"></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-477"></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-478"></a>			  <span class='keyglyph'>]</span>-<a name="line-479"></a>-<a name="line-480"></a>-<a name="line-481"></a><span class='comment'>-- | the default error message handler: error output to stderr</span>-<a name="line-482"></a>-<a name="line-483"></a><a name="errorMsgStderr"></a><span class='definition'>errorMsgStderr</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-484"></a><span class='definition'>errorMsgStderr</span>		<span class='keyglyph'>=</span> <span class='varid'>setErrorMsgHandler</span> <span class='conid'>False</span> <span class='layout'>(</span><span class='varid'>hPutStrLn</span> <span class='varid'>stderr</span><span class='layout'>)</span>-<a name="line-485"></a>-<a name="line-486"></a><span class='comment'>-- | error message handler for collecting errors</span>-<a name="line-487"></a>-<a name="line-488"></a><a name="errorMsgCollect"></a><span class='definition'>errorMsgCollect</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-489"></a><span class='definition'>errorMsgCollect</span>		<span class='keyglyph'>=</span> <span class='varid'>setErrorMsgHandler</span> <span class='conid'>True</span> <span class='layout'>(</span><span class='varid'>const</span> <span class='varop'>$</span> <span class='varid'>return</span> <span class='conid'>()</span><span class='layout'>)</span>-<a name="line-490"></a>-<a name="line-491"></a><span class='comment'>-- | error message handler for output to stderr and collecting</span>-<a name="line-492"></a>-<a name="line-493"></a><a name="errorMsgStderrAndCollect"></a><span class='definition'>errorMsgStderrAndCollect</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-494"></a><span class='definition'>errorMsgStderrAndCollect</span>	<span class='keyglyph'>=</span> <span class='varid'>setErrorMsgHandler</span> <span class='conid'>True</span> <span class='layout'>(</span><span class='varid'>hPutStrLn</span> <span class='varid'>stderr</span><span class='layout'>)</span>-<a name="line-495"></a>-<a name="line-496"></a><span class='comment'>-- | error message handler for ignoring errors</span>-<a name="line-497"></a>-<a name="line-498"></a><a name="errorMsgIgnore"></a><span class='definition'>errorMsgIgnore</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-499"></a><span class='definition'>errorMsgIgnore</span>		<span class='keyglyph'>=</span> <span class='varid'>setErrorMsgHandler</span> <span class='conid'>False</span> <span class='layout'>(</span><span class='varid'>const</span> <span class='varop'>$</span> <span class='varid'>return</span> <span class='conid'>()</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'>-- if error messages are collected by the error handler for</span>-<a name="line-503"></a><span class='comment'>-- processing these messages by the calling application,</span>-<a name="line-504"></a><span class='comment'>-- this arrow reads the stored messages and clears the error message store</span>-<a name="line-505"></a>-<a name="line-506"></a><a name="getErrorMessages"></a><span class='definition'>getErrorMessages</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>XmlTree</span>-<a name="line-507"></a><span class='definition'>getErrorMessages</span>-<a name="line-508"></a>    <span class='keyglyph'>=</span> <span class='varid'>getSysParam</span> <span class='layout'>(</span><span class='varid'>reverse</span> <span class='varop'>.</span> <span class='varid'>xio_errorMsgList</span><span class='layout'>)</span>		<span class='comment'>-- reverse the list of errors</span>-<a name="line-509"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-510"></a>      <span class='varid'>clearErrorMsgList</span>					<span class='comment'>-- clear the error list in the system state</span>-<a name="line-511"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-512"></a>      <span class='varid'>arrL</span> <span class='varid'>id</span>-<a name="line-513"></a>-<a name="line-514"></a><a name="clearErrorMsgList"></a><span class='definition'>clearErrorMsgList</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-515"></a><span class='definition'>clearErrorMsgList</span>-<a name="line-516"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysParam</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='keyword'>_</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_errorMsgList</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span> <span class='layout'>}</span> <span class='layout'>)</span>-<a name="line-517"></a>-<a name="line-518"></a><a name="addToErrorMsgList"></a><span class='definition'>addToErrorMsgList</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-519"></a><span class='definition'>addToErrorMsgList</span>-<a name="line-520"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysParam</span> <span class='varid'>cf</span>-<a name="line-521"></a>    <span class='keyword'>where</span>-<a name="line-522"></a>    <span class='varid'>cf</span> <span class='varid'>t</span> <span class='varid'>s</span> <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>xio_errorMsgCollect</span> <span class='varid'>s</span>-<a name="line-523"></a>	     <span class='keyword'>then</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_errorMsgList</span> <span class='keyglyph'>=</span> <span class='varid'>t</span> <span class='conop'>:</span> <span class='varid'>xio_errorMsgList</span> <span class='varid'>s</span> <span class='layout'>}</span>-<a name="line-524"></a>	     <span class='keyword'>else</span> <span class='varid'>s</span>-<a name="line-525"></a>-<a name="line-526"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-527"></a>-<a name="line-528"></a><span class='comment'>-- |</span>-<a name="line-529"></a><span class='comment'>-- filter error messages from input trees and issue errors</span>-<a name="line-530"></a>-<a name="line-531"></a><a name="filterErrorMsg"></a><span class='definition'>filterErrorMsg</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-532"></a><span class='definition'>filterErrorMsg</span>-<a name="line-533"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>setErrMsgStatus</span>-<a name="line-534"></a>	<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-535"></a>	<span class='varid'>sysErrorMsg</span>-<a name="line-536"></a>	<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-537"></a>	<span class='varid'>addToErrorMsgList</span>-<a name="line-538"></a>	<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-539"></a>	<span class='varid'>none</span>-<a name="line-540"></a>      <span class='layout'>)</span>-<a name="line-541"></a>      <span class='varop'>`when`</span>-<a name="line-542"></a>      <span class='varid'>isError</span>-<a name="line-543"></a>-<a name="line-544"></a><span class='comment'>-- | generate a warnig message</span>-<a name="line-545"></a>-<a name="line-546"></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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-547"></a><span class='definition'>issueWarn</span> <span class='varid'>msg</span>		<span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span><span class='varid'>warn</span> <span class='varid'>msg</span>  <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>filterErrorMsg</span><span class='layout'>)</span>-<a name="line-548"></a>-<a name="line-549"></a><a name="issueErr"></a><span class='comment'>-- | generate an error message</span>-<a name="line-550"></a><span class='definition'>issueErr</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-551"></a><span class='definition'>issueErr</span> <span class='varid'>msg</span>		<span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span><span class='varid'>err</span> <span class='varid'>msg</span>   <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>filterErrorMsg</span><span class='layout'>)</span>-<a name="line-552"></a>-<a name="line-553"></a><span class='comment'>-- | generate a fatal error message, e.g. document not found</span>-<a name="line-554"></a>-<a name="line-555"></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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-556"></a><span class='definition'>issueFatal</span> <span class='varid'>msg</span>		<span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span><span class='varid'>fatal</span> <span class='varid'>msg</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>filterErrorMsg</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'>-- add the error level and the module where the error occured</span>-<a name="line-560"></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-561"></a><span class='comment'>-- called by 'setDocumentStatusFromSystemState' when the system state indicates an error</span>-<a name="line-562"></a>-<a name="line-563"></a><a name="setDocumentStatus"></a><span class='definition'>setDocumentStatus</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'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-564"></a><span class='definition'>setDocumentStatus</span> <span class='varid'>level</span> <span class='varid'>msg</span>-<a name="line-565"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>addAttrl</span> <span class='layout'>(</span> <span class='varid'>sattr</span> <span class='varid'>a_status</span> <span class='layout'>(</span><span class='varid'>show</span> <span class='varid'>level</span><span class='layout'>)</span>-<a name="line-566"></a>		   <span class='varop'>&lt;+&gt;</span>-<a name="line-567"></a>		   <span class='varid'>sattr</span> <span class='varid'>a_module</span> <span class='varid'>msg</span>-<a name="line-568"></a>		 <span class='layout'>)</span>-<a name="line-569"></a>	<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-570"></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-571"></a>	  <span class='keyword'>then</span> <span class='varid'>setChildren</span> <span class='conid'>[]</span>-<a name="line-572"></a>	  <span class='keyword'>else</span> <span class='varid'>this</span>-<a name="line-573"></a>	<span class='layout'>)</span>-<a name="line-574"></a>      <span class='layout'>)</span>-<a name="line-575"></a>      <span class='varop'>`when`</span>-<a name="line-576"></a>      <span class='varid'>isRoot</span>-<a name="line-577"></a>-<a name="line-578"></a><span class='comment'>-- |</span>-<a name="line-579"></a><span class='comment'>-- check whether the error level attribute in the system state</span>-<a name="line-580"></a><span class='comment'>-- is set to error, in this case the children of the document root are</span>-<a name="line-581"></a><span class='comment'>-- removed and the module name where the error occured and the error level are added as attributes with 'setDocumentStatus'</span>-<a name="line-582"></a><span class='comment'>-- else nothing is changed</span>-<a name="line-583"></a>-<a name="line-584"></a><a name="setDocumentStatusFromSystemState"></a><span class='definition'>setDocumentStatusFromSystemState</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-585"></a><span class='definition'>setDocumentStatusFromSystemState</span> <span class='varid'>msg</span>-<a name="line-586"></a>    <span class='keyglyph'>=</span> <span class='varid'>setStatus</span> <span class='varop'>$&lt;</span> <span class='varid'>getErrStatus</span>-<a name="line-587"></a>    <span class='keyword'>where</span>-<a name="line-588"></a>    <span class='varid'>setStatus</span> <span class='varid'>level</span>-<a name="line-589"></a>	<span class='keyglyph'>|</span> <span class='varid'>level</span> <span class='varop'>&lt;=</span> <span class='varid'>c_warn</span>	<span class='keyglyph'>=</span> <span class='varid'>this</span>-<a name="line-590"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>		<span class='keyglyph'>=</span> <span class='varid'>setDocumentStatus</span> <span class='varid'>level</span> <span class='varid'>msg</span>-<a name="line-591"></a>-<a name="line-592"></a>-<a name="line-593"></a><span class='comment'>-- |</span>-<a name="line-594"></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-595"></a>-<a name="line-596"></a><a name="documentStatusOk"></a><span class='definition'>documentStatusOk</span>	<span class='keyglyph'>::</span> <span class='conid'>ArrowXml</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-597"></a><span class='definition'>documentStatusOk</span>-<a name="line-598"></a>    <span class='keyglyph'>=</span> <span class='varid'>isRoot</span>-<a name="line-599"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-600"></a>      <span class='layout'>(</span> <span class='layout'>(</span><span class='varid'>getAttrValue</span> <span class='varid'>a_status</span>-<a name="line-601"></a>	 <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-602"></a>	 <span class='varid'>isA</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>v</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>null</span> <span class='varid'>v</span> <span class='varop'>||</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>read</span> <span class='varid'>v</span><span class='layout'>)</span><span class='keyglyph'>::</span><span class='conid'>Int</span><span class='layout'>)</span> <span class='varop'>&lt;=</span> <span class='varid'>c_warn</span><span class='layout'>)</span>-<a name="line-603"></a>	<span class='layout'>)</span>-<a name="line-604"></a>	<span class='varop'>`guards`</span>-<a name="line-605"></a>	<span class='varid'>this</span>-<a name="line-606"></a>      <span class='layout'>)</span>-<a name="line-607"></a>-<a name="line-608"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-609"></a>-<a name="line-610"></a><span class='comment'>-- | set the base URI of a document, used e.g. for reading includes, e.g. external entities,</span>-<a name="line-611"></a><span class='comment'>-- the input must be an absolute URI</span>-<a name="line-612"></a>-<a name="line-613"></a><a name="setBaseURI"></a><span class='definition'>setBaseURI</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>String</span> <span class='conid'>String</span>-<a name="line-614"></a><span class='definition'>setBaseURI</span>-<a name="line-615"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysParam</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>b</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_baseURI</span> <span class='keyglyph'>=</span> <span class='varid'>b</span> <span class='layout'>}</span> <span class='layout'>)</span>-<a name="line-616"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-617"></a>      <span class='varid'>traceString</span> <span class='num'>2</span> <span class='layout'>(</span><span class='layout'>(</span><span class='str'>"setBaseURI: new base URI is "</span> <span class='varop'>++</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>show</span><span class='layout'>)</span>-<a name="line-618"></a>-<a name="line-619"></a><span class='comment'>-- | read the base URI from the globale state</span>-<a name="line-620"></a>-<a name="line-621"></a><a name="getBaseURI"></a><span class='definition'>getBaseURI</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>String</span>-<a name="line-622"></a><span class='definition'>getBaseURI</span>-<a name="line-623"></a>    <span class='keyglyph'>=</span> <span class='varid'>getSysParam</span> <span class='varid'>xio_baseURI</span>-<a name="line-624"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-625"></a>      <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>getDefaultBaseURI</span>-<a name="line-626"></a>	  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-627"></a>	  <span class='varid'>setBaseURI</span>		-<a name="line-628"></a>	  <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-629"></a>	  <span class='varid'>getBaseURI</span>-<a name="line-630"></a>	<span class='layout'>)</span>-<a name="line-631"></a>	<span class='varop'>`when`</span>-<a name="line-632"></a>	<span class='varid'>isA</span> <span class='varid'>null</span>				<span class='comment'>-- set and get it, if not yet done</span>-<a name="line-633"></a>      <span class='layout'>)</span>-<a name="line-634"></a>-<a name="line-635"></a><span class='comment'>-- | change the base URI with a possibly relative URI, can be used for</span>-<a name="line-636"></a><span class='comment'>-- evaluating the xml:base attribute. Returns the new absolute base URI.</span>-<a name="line-637"></a><span class='comment'>-- Fails, if input is not parsable with parseURIReference</span>-<a name="line-638"></a><span class='comment'>--</span>-<a name="line-639"></a><span class='comment'>-- see also: 'setBaseURI', 'mkAbsURI'</span>-<a name="line-640"></a>-<a name="line-641"></a><a name="changeBaseURI"></a><span class='definition'>changeBaseURI</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>String</span> <span class='conid'>String</span>-<a name="line-642"></a><span class='definition'>changeBaseURI</span>-<a name="line-643"></a>    <span class='keyglyph'>=</span> <span class='varid'>mkAbsURI</span>-<a name="line-644"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-645"></a>      <span class='varid'>setBaseURI</span>-<a name="line-646"></a>-<a name="line-647"></a><span class='comment'>-- | set the default base URI, if parameter is null, the system base (@ file:\/\/\/\&lt;cwd\&gt;\/ @) is used,</span>-<a name="line-648"></a><span class='comment'>-- else the parameter, must be called before any document is read</span>-<a name="line-649"></a>-<a name="line-650"></a><a name="setDefaultBaseURI"></a><span class='definition'>setDefaultBaseURI</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>String</span>-<a name="line-651"></a><span class='definition'>setDefaultBaseURI</span> <span class='varid'>base</span>-<a name="line-652"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>base</span>-<a name="line-653"></a>	<span class='keyword'>then</span> <span class='varid'>arrIO</span> <span class='varid'>getDir</span>-<a name="line-654"></a>	<span class='keyword'>else</span> <span class='varid'>constA</span> <span class='varid'>base</span>-<a name="line-655"></a>      <span class='layout'>)</span>-<a name="line-656"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-657"></a>      <span class='varid'>changeSysParam</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>b</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_defaultBaseURI</span> <span class='keyglyph'>=</span> <span class='varid'>b</span> <span class='layout'>}</span> <span class='layout'>)</span>-<a name="line-658"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-659"></a>      <span class='varid'>traceString</span> <span class='num'>2</span> <span class='layout'>(</span><span class='layout'>(</span><span class='str'>"setDefaultBaseURI: new default base URI is "</span> <span class='varop'>++</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>show</span><span class='layout'>)</span>-<a name="line-660"></a>    <span class='keyword'>where</span>-<a name="line-661"></a>    <span class='varid'>getDir</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-662"></a>	       <span class='varid'>cwd</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getCurrentDirectory</span>-<a name="line-663"></a>	       <span class='varid'>return</span> <span class='layout'>(</span><span class='str'>"file://"</span> <span class='varop'>++</span> <span class='varid'>normalize</span> <span class='varid'>cwd</span> <span class='varop'>++</span> <span class='str'>"/"</span><span class='layout'>)</span>-<a name="line-664"></a>-<a name="line-665"></a>    <span class='comment'>-- under Windows getCurrentDirectory returns something like: "c:\path\to\file"</span>-<a name="line-666"></a>    <span class='comment'>-- backslaches are not allowed in URIs and paths must start with a /</span>-<a name="line-667"></a>    <span class='comment'>-- so this is transformed into "/c:/path/to/file"</span>-<a name="line-668"></a>-<a name="line-669"></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-670"></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-671"></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-672"></a>    <span class='varid'>normalize</span> <span class='varid'>wd'</span>-<a name="line-673"></a>	<span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='varid'>escapeNonUriChar</span> <span class='varid'>wd'</span>-<a name="line-674"></a>				 -<a name="line-675"></a>    <span class='varid'>win32ToUriChar</span> <span class='chr'>'\\'</span> <span class='keyglyph'>=</span> <span class='str'>"/"</span>-<a name="line-676"></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-677"></a>-<a name="line-678"></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>-<a name="line-679"></a>-<a name="line-680"></a>-<a name="line-681"></a><span class='comment'>-- | get the default base URI</span>-<a name="line-682"></a>-<a name="line-683"></a><a name="getDefaultBaseURI"></a><span class='definition'>getDefaultBaseURI</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>String</span>-<a name="line-684"></a><span class='definition'>getDefaultBaseURI</span>-<a name="line-685"></a>    <span class='keyglyph'>=</span> <span class='varid'>getSysParam</span> <span class='varid'>xio_defaultBaseURI</span>		<span class='comment'>-- read default uri in system  state</span>-<a name="line-686"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-687"></a>      <span class='layout'>(</span> <span class='varid'>setDefaultBaseURI</span> <span class='str'>""</span>			<span class='comment'>-- set the default uri in system state</span>-<a name="line-688"></a>	<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-689"></a>	<span class='varid'>getDefaultBaseURI</span> <span class='layout'>)</span> <span class='varop'>`when`</span> <span class='varid'>isA</span> <span class='varid'>null</span>	<span class='comment'>-- when uri not yet set</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'>-- | remember base uri, run an arrow and restore the base URI, used with external entity substitution</span>-<a name="line-694"></a>-<a name="line-695"></a><a name="runInLocalURIContext"></a><span class='definition'>runInLocalURIContext</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>c</span>-<a name="line-696"></a><span class='definition'>runInLocalURIContext</span> <span class='varid'>f</span>-<a name="line-697"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>getBaseURI</span> <span class='varop'>&amp;&amp;&amp;</span> <span class='varid'>this</span> <span class='layout'>)</span>-<a name="line-698"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-699"></a>      <span class='layout'>(</span> <span class='varid'>this</span> <span class='varop'>***</span> <span class='varid'>listA</span> <span class='varid'>f</span> <span class='layout'>)</span>-<a name="line-700"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-701"></a>      <span class='layout'>(</span> <span class='varid'>setBaseURI</span> <span class='varop'>***</span> <span class='varid'>this</span> <span class='layout'>)</span>-<a name="line-702"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-703"></a>      <span class='varid'>arrL</span> <span class='varid'>snd</span>-<a name="line-704"></a>-<a name="line-705"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-706"></a>-<a name="line-707"></a><span class='comment'>-- | set the global trace level</span>-<a name="line-708"></a>-<a name="line-709"></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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-710"></a><span class='definition'>setTraceLevel</span> <span class='varid'>l</span>-<a name="line-711"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysParam</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='keyword'>_</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_trace</span> <span class='keyglyph'>=</span> <span class='varid'>l</span> <span class='layout'>}</span> <span class='layout'>)</span>-<a name="line-712"></a>-<a name="line-713"></a><span class='comment'>-- | read the global trace level</span>-<a name="line-714"></a>-<a name="line-715"></a><a name="getTraceLevel"></a><span class='definition'>getTraceLevel</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>Int</span>-<a name="line-716"></a><span class='definition'>getTraceLevel</span>-<a name="line-717"></a>    <span class='keyglyph'>=</span> <span class='varid'>getSysParam</span> <span class='varid'>xio_trace</span>-<a name="line-718"></a>-<a name="line-719"></a><span class='comment'>-- | run an arrow with a given trace level, the old trace level is restored after the arrow execution</span>-<a name="line-720"></a>-<a name="line-721"></a><a name="withTraceLevel"></a><span class='definition'>withTraceLevel</span>	<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>c</span>-<a name="line-722"></a><span class='definition'>withTraceLevel</span> <span class='varid'>level</span> <span class='varid'>f</span>-<a name="line-723"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>getTraceLevel</span>       <span class='varop'>&amp;&amp;&amp;</span> <span class='varid'>this</span> <span class='layout'>)</span>-<a name="line-724"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-725"></a>      <span class='layout'>(</span> <span class='varid'>setTraceLevel</span> <span class='varid'>level</span> <span class='varop'>***</span> <span class='varid'>listA</span> <span class='varid'>f</span> <span class='layout'>)</span>-<a name="line-726"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-727"></a>      <span class='layout'>(</span> <span class='varid'>restoreTraceLevel</span>   <span class='varop'>***</span> <span class='varid'>this</span> <span class='layout'>)</span>-<a name="line-728"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-729"></a>      <span class='varid'>arrL</span> <span class='varid'>snd</span>-<a name="line-730"></a>    <span class='keyword'>where</span>-<a name="line-731"></a>    <span class='varid'>restoreTraceLevel</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>Int</span> <span class='conid'>Int</span>-<a name="line-732"></a>    <span class='varid'>restoreTraceLevel</span>-<a name="line-733"></a>	<span class='keyglyph'>=</span> <span class='varid'>setTraceLevel</span> <span class='varop'>$&lt;</span> <span class='varid'>this</span>-<a name="line-734"></a>-<a name="line-735"></a><span class='comment'>-- | apply a trace arrow and issue message to stderr</span>-<a name="line-736"></a>-<a name="line-737"></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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-738"></a><span class='definition'>trace</span> <span class='varid'>level</span> <span class='varid'>trc</span>-<a name="line-739"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>trc</span>-<a name="line-740"></a>		<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-741"></a>		<span class='varid'>arrIO</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-742"></a>				<span class='varid'>hPutStrLn</span> <span class='varid'>stderr</span> <span class='varid'>s</span>-<a name="line-743"></a>				<span class='varid'>hFlush</span> <span class='varid'>stderr</span>-<a name="line-744"></a>			      <span class='layout'>)</span>-<a name="line-745"></a>		      <span class='layout'>)</span>-<a name="line-746"></a>	      <span class='layout'>)</span>-<a name="line-747"></a>      <span class='varop'>`when`</span> <span class='layout'>(</span> <span class='varid'>getTraceLevel</span>-<a name="line-748"></a>	       <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-749"></a>	       <span class='varid'>isA</span> <span class='layout'>(</span><span class='varop'>&gt;=</span> <span class='varid'>level</span><span class='layout'>)</span>-<a name="line-750"></a>	     <span class='layout'>)</span>-<a name="line-751"></a>-<a name="line-752"></a><a name="traceMsg"></a><span class='comment'>-- | issue a string message as trace </span>-<a name="line-753"></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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-754"></a><span class='definition'>traceMsg</span> <span class='varid'>level</span> <span class='varid'>msg</span>-<a name="line-755"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>trace</span> <span class='varid'>level</span> <span class='varop'>$</span>-<a name="line-756"></a>		<span class='varid'>constA</span> <span class='layout'>(</span><span class='chr'>'-'</span> <span class='conop'>:</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'>msg</span><span class='layout'>)</span>-<a name="line-757"></a>	      <span class='layout'>)</span>-<a name="line-758"></a>-<a name="line-759"></a><a name="traceString"></a><span class='comment'>-- | issue the string input of an arrow</span>-<a name="line-760"></a><span class='definition'>traceString</span>	<span class='keyglyph'>::</span> <span class='conid'>Int</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'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>String</span> <span class='conid'>String</span>-<a name="line-761"></a><span class='definition'>traceString</span> <span class='varid'>level</span> <span class='varid'>f</span>-<a name="line-762"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span><span class='varid'>applyA</span> <span class='layout'>(</span><span class='varid'>arr</span> <span class='varid'>f</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>arr</span> <span class='layout'>(</span><span class='varid'>traceMsg</span> <span class='varid'>level</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>-<a name="line-763"></a>-<a name="line-764"></a><span class='comment'>-- | issue the source representation of a document if trace level &gt;= 3</span>-<a name="line-765"></a><span class='comment'>--</span>-<a name="line-766"></a><span class='comment'>-- for better readability the source is formated with indentDoc</span>-<a name="line-767"></a>-<a name="line-768"></a><a name="traceSource"></a><span class='definition'>traceSource</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-769"></a><span class='definition'>traceSource</span> -<a name="line-770"></a>    <span class='keyglyph'>=</span> <span class='varid'>trace</span> <span class='num'>3</span> <span class='varop'>$</span>-<a name="line-771"></a>      <span class='varid'>xshow</span>-<a name="line-772"></a>      <span class='layout'>(</span> <span class='varid'>choiceA</span> <span class='keyglyph'>[</span> <span class='varid'>isRoot</span> <span class='conop'>:-&gt;</span> <span class='layout'>(</span> <span class='varid'>indentDoc</span>-<a name="line-773"></a>			       <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-774"></a>			       <span class='varid'>getChildren</span>-<a name="line-775"></a>			     <span class='layout'>)</span>-<a name="line-776"></a>		<span class='layout'>,</span> <span class='varid'>isElem</span> <span class='conop'>:-&gt;</span> <span class='layout'>(</span> <span class='varid'>root</span> <span class='conid'>[]</span> <span class='keyglyph'>[</span><span class='varid'>this</span><span class='keyglyph'>]</span>-<a name="line-777"></a>			       <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>indentDoc</span>-<a name="line-778"></a>			       <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>getChildren</span>-<a name="line-779"></a>			       <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>isElem</span>-<a name="line-780"></a>			     <span class='layout'>)</span>-<a name="line-781"></a>		<span class='layout'>,</span> <span class='varid'>this</span>   <span class='conop'>:-&gt;</span> <span class='varid'>this</span>-<a name="line-782"></a>		<span class='keyglyph'>]</span>-<a name="line-783"></a>      <span class='layout'>)</span>-<a name="line-784"></a>-<a name="line-785"></a><a name="traceTree"></a><span class='comment'>-- | issue the tree representation of a document if trace level &gt;= 4</span>-<a name="line-786"></a><span class='definition'>traceTree</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-787"></a><span class='definition'>traceTree</span>-<a name="line-788"></a>    <span class='keyglyph'>=</span> <span class='varid'>trace</span> <span class='num'>4</span> <span class='varop'>$</span>-<a name="line-789"></a>      <span class='varid'>xshow</span> <span class='layout'>(</span> <span class='varid'>treeRepOfXmlDoc</span>-<a name="line-790"></a>	      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-791"></a>	      <span class='varid'>addHeadlineToXmlDoc</span>-<a name="line-792"></a>	      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-793"></a>	      <span class='varid'>getChildren</span>-<a name="line-794"></a>	    <span class='layout'>)</span>-<a name="line-795"></a>-<a name="line-796"></a><span class='comment'>-- | trace a main computation step</span>-<a name="line-797"></a><span class='comment'>-- issue a message when trace level &gt;= 1, issue document source if level &gt;= 3, issue tree when level is &gt;= 4</span>-<a name="line-798"></a>-<a name="line-799"></a><a name="traceDoc"></a><span class='definition'>traceDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>-<a name="line-800"></a><span class='definition'>traceDoc</span> <span class='varid'>msg</span>-<a name="line-801"></a>    <span class='keyglyph'>=</span> <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='varid'>msg</span>-<a name="line-802"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-803"></a>      <span class='varid'>traceSource</span>-<a name="line-804"></a>      <span class='varop'>&gt;&gt;&gt;</span>-<a name="line-805"></a>      <span class='varid'>traceTree</span>-<a name="line-806"></a>-<a name="line-807"></a><span class='comment'>-- | trace the global state</span>-<a name="line-808"></a>-<a name="line-809"></a><a name="traceState"></a><span class='definition'>traceState</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>-<a name="line-810"></a><span class='definition'>traceState</span>-<a name="line-811"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>xshow</span> <span class='layout'>(</span> <span class='layout'>(</span><span class='varid'>getAllParams</span> <span class='varop'>&gt;&gt;.</span> <span class='varid'>concat</span><span class='layout'>)</span>-<a name="line-812"></a>			<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-813"></a>			<span class='varid'>applyA</span> <span class='layout'>(</span><span class='varid'>arr</span> <span class='varid'>formatParam</span><span class='layout'>)</span>-<a name="line-814"></a>		      <span class='layout'>)</span>-<a name="line-815"></a>		<span class='varop'>&gt;&gt;&gt;</span>-<a name="line-816"></a>		<span class='varid'>traceString</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"global state:\n"</span> <span class='varop'>++</span><span class='layout'>)</span>-<a name="line-817"></a>	      <span class='layout'>)</span>-<a name="line-818"></a>      <span class='keyword'>where</span>-<a name="line-819"></a>      <span class='comment'>-- formatParam	:: (String, XmlTrees) -&gt; IOStateArrow s b1 XmlTree</span>-<a name="line-820"></a>      <span class='varid'>formatParam</span> <span class='layout'>(</span><span class='varid'>n</span><span class='layout'>,</span> <span class='varid'>v</span><span class='layout'>)</span>-<a name="line-821"></a>	  <span class='keyglyph'>=</span> <span class='varid'>mkelem</span> <span class='str'>"param"</span> <span class='keyglyph'>[</span><span class='varid'>sattr</span> <span class='str'>"name"</span> <span class='varid'>n</span><span class='keyglyph'>]</span> <span class='keyglyph'>[</span><span class='varid'>arrL</span> <span class='layout'>(</span><span class='varid'>const</span> <span class='varid'>v</span><span class='layout'>)</span><span class='keyglyph'>]</span> <span class='varop'>&lt;+&gt;</span> <span class='varid'>txt</span> <span class='str'>"\n"</span>-<a name="line-822"></a>-<a name="line-823"></a><span class='comment'>-- ----------------------------------------------------------</span>-<a name="line-824"></a>-<a name="line-825"></a><span class='comment'>-- | compute the absolut URI for a given URI and a base URI</span>-<a name="line-826"></a>-<a name="line-827"></a><a name="expandURIString"></a><span class='definition'>expandURIString</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'>Maybe</span> <span class='conid'>String</span>-<a name="line-828"></a><span class='definition'>expandURIString</span> <span class='varid'>uri</span> <span class='varid'>base</span>-<a name="line-829"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-830"></a>      <span class='varid'>base'</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>parseURIReference</span> <span class='varid'>base</span>-<a name="line-831"></a>      <span class='varid'>uri'</span>  <span class='keyglyph'>&lt;-</span> <span class='varid'>parseURIReference</span> <span class='varid'>uri</span>-<a name="line-832"></a>      <span class='varid'>abs'</span>  <span class='keyglyph'>&lt;-</span> <span class='varid'>nonStrictRelativeTo</span> <span class='varid'>uri'</span> <span class='varid'>base'</span>-<a name="line-833"></a>      <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>show</span> <span class='varid'>abs'</span>-<a name="line-834"></a>-<a name="line-835"></a><span class='comment'>-- | arrow variant of 'expandURIString', fails if 'expandURIString' returns Nothing</span>-<a name="line-836"></a>-<a name="line-837"></a><a name="expandURI"></a><span class='definition'>expandURI</span>		<span class='keyglyph'>::</span> <span class='conid'>ArrowXml</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span> <span class='conid'>String</span>-<a name="line-838"></a><span class='definition'>expandURI</span>-<a name="line-839"></a>    <span class='keyglyph'>=</span> <span class='varid'>arrL</span> <span class='layout'>(</span><span class='varid'>maybeToList</span> <span class='varop'>.</span> <span class='varid'>uncurry</span> <span class='varid'>expandURIString</span><span class='layout'>)</span>-<a name="line-840"></a>-<a name="line-841"></a><span class='comment'>-- | arrow for expanding an input URI into an absolute URI using global base URI, fails if input is not a legal URI</span>-<a name="line-842"></a>-<a name="line-843"></a><a name="mkAbsURI"></a><span class='definition'>mkAbsURI</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>String</span> <span class='conid'>String</span>-<a name="line-844"></a><span class='definition'>mkAbsURI</span>-<a name="line-845"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>this</span> <span class='varop'>&amp;&amp;&amp;</span> <span class='varid'>getBaseURI</span> <span class='layout'>)</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>expandURI</span>-<a name="line-846"></a>-<a name="line-847"></a><span class='comment'>-- | arrow for selecting the scheme (protocol) of the URI, fails if input is not a legal URI.</span>-<a name="line-848"></a><span class='comment'>--</span>-<a name="line-849"></a><span class='comment'>-- See Network.URI for URI components</span>-<a name="line-850"></a>-<a name="line-851"></a><a name="getSchemeFromURI"></a><span class='definition'>getSchemeFromURI</span>	<span class='keyglyph'>::</span> <span class='conid'>ArrowList</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>String</span>-<a name="line-852"></a><span class='definition'>getSchemeFromURI</span>	<span class='keyglyph'>=</span> <span class='varid'>getPartFromURI</span> <span class='varid'>scheme</span>-<a name="line-853"></a>    <span class='keyword'>where</span>-<a name="line-854"></a>    <span class='varid'>scheme</span> <span class='keyglyph'>=</span> <span class='varid'>init</span> <span class='varop'>.</span> <span class='varid'>uriScheme</span>-<a name="line-855"></a>-<a name="line-856"></a><span class='comment'>-- | arrow for selecting the registered name (host) of the URI, fails if input is not a legal URI</span>-<a name="line-857"></a>-<a name="line-858"></a><a name="getRegNameFromURI"></a><span class='definition'>getRegNameFromURI</span>	<span class='keyglyph'>::</span> <span class='conid'>ArrowList</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>String</span>-<a name="line-859"></a><span class='definition'>getRegNameFromURI</span>	<span class='keyglyph'>=</span> <span class='varid'>getPartFromURI</span> <span class='varid'>host</span>-<a name="line-860"></a>    <span class='keyword'>where</span>-<a name="line-861"></a>    <span class='varid'>host</span> <span class='keyglyph'>=</span> <span class='varid'>maybe</span> <span class='str'>""</span> <span class='varid'>uriRegName</span> <span class='varop'>.</span> <span class='varid'>uriAuthority</span>-<a name="line-862"></a>-<a name="line-863"></a><span class='comment'>-- | arrow for selecting the port number of the URI without leading \':\', fails if input is not a legal URI</span>-<a name="line-864"></a>-<a name="line-865"></a><a name="getPortFromURI"></a><span class='definition'>getPortFromURI</span>		<span class='keyglyph'>::</span> <span class='conid'>ArrowList</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>String</span>-<a name="line-866"></a><span class='definition'>getPortFromURI</span>		<span class='keyglyph'>=</span> <span class='varid'>getPartFromURI</span> <span class='varid'>port</span>-<a name="line-867"></a>    <span class='keyword'>where</span>-<a name="line-868"></a>    <span class='varid'>port</span> <span class='keyglyph'>=</span> <span class='varid'>dropWhile</span> <span class='layout'>(</span><span class='varop'>==</span><span class='chr'>':'</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>maybe</span> <span class='str'>""</span> <span class='varid'>uriPort</span> <span class='varop'>.</span> <span class='varid'>uriAuthority</span>-<a name="line-869"></a>-<a name="line-870"></a><span class='comment'>-- | arrow for selecting the user info of the URI without trailing \'\@\', fails if input is not a legal URI</span>-<a name="line-871"></a>-<a name="line-872"></a><a name="getUserInfoFromURI"></a><span class='definition'>getUserInfoFromURI</span>		<span class='keyglyph'>::</span> <span class='conid'>ArrowList</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>String</span>-<a name="line-873"></a><span class='definition'>getUserInfoFromURI</span>		<span class='keyglyph'>=</span> <span class='varid'>getPartFromURI</span> <span class='varid'>ui</span>-<a name="line-874"></a>    <span class='keyword'>where</span>-<a name="line-875"></a>    <span class='varid'>ui</span> <span class='keyglyph'>=</span> <span class='varid'>reverse</span> <span class='varop'>.</span> <span class='varid'>dropWhile</span> <span class='layout'>(</span><span class='varop'>==</span><span class='chr'>'@'</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>reverse</span> <span class='varop'>.</span> <span class='varid'>maybe</span> <span class='str'>""</span> <span class='varid'>uriUserInfo</span> <span class='varop'>.</span> <span class='varid'>uriAuthority</span>-<a name="line-876"></a>-<a name="line-877"></a><span class='comment'>-- | arrow for computing the path component of an URI, fails if input is not a legal URI</span>-<a name="line-878"></a>-<a name="line-879"></a><a name="getPathFromURI"></a><span class='definition'>getPathFromURI</span>		<span class='keyglyph'>::</span> <span class='conid'>ArrowList</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>String</span>-<a name="line-880"></a><span class='definition'>getPathFromURI</span>		<span class='keyglyph'>=</span> <span class='varid'>getPartFromURI</span> <span class='varid'>uriPath</span>-<a name="line-881"></a>-<a name="line-882"></a><span class='comment'>-- | arrow for computing the query component of an URI, fails if input is not a legal URI</span>-<a name="line-883"></a>-<a name="line-884"></a><a name="getQueryFromURI"></a><span class='definition'>getQueryFromURI</span>		<span class='keyglyph'>::</span> <span class='conid'>ArrowList</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>String</span>-<a name="line-885"></a><span class='definition'>getQueryFromURI</span>		<span class='keyglyph'>=</span> <span class='varid'>getPartFromURI</span> <span class='varid'>uriQuery</span>-<a name="line-886"></a>-<a name="line-887"></a><span class='comment'>-- | arrow for computing the fragment component of an URI, fails if input is not a legal URI</span>-<a name="line-888"></a>-<a name="line-889"></a><a name="getFragmentFromURI"></a><span class='definition'>getFragmentFromURI</span>	<span class='keyglyph'>::</span> <span class='conid'>ArrowList</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>String</span>-<a name="line-890"></a><span class='definition'>getFragmentFromURI</span>	<span class='keyglyph'>=</span> <span class='varid'>getPartFromURI</span> <span class='varid'>uriFragment</span>-<a name="line-891"></a>-<a name="line-892"></a><span class='comment'>-- | arrow for computing the path component of an URI, fails if input is not a legal URI</span>-<a name="line-893"></a>-<a name="line-894"></a><a name="getPartFromURI"></a><span class='definition'>getPartFromURI</span>		<span class='keyglyph'>::</span> <span class='conid'>ArrowList</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='layout'>(</span><span class='conid'>URI</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>String</span>-<a name="line-895"></a><span class='definition'>getPartFromURI</span> <span class='varid'>sel</span>-<a name="line-896"></a>    <span class='keyglyph'>=</span> <span class='varid'>arrL</span> <span class='layout'>(</span><span class='varid'>maybeToList</span> <span class='varop'>.</span> <span class='varid'>getPart</span><span class='layout'>)</span>-<a name="line-897"></a>      <span class='keyword'>where</span>-<a name="line-898"></a>      <span class='varid'>getPart</span> <span class='varid'>s</span> <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-899"></a>		  <span class='varid'>uri</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>parseURIReference</span> <span class='varid'>s</span>-<a name="line-900"></a>		  <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>sel</span> <span class='varid'>uri</span><span class='layout'>)</span>-<a name="line-901"></a>-<a name="line-902"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-62"></a>      <span class='varid'>getAllParamsString</span><span class='layout'>,</span>+<a name="line-63"></a>      <span class='varid'>setParamString</span><span class='layout'>,</span>+<a name="line-64"></a>      <span class='varid'>getParamString</span><span class='layout'>,</span>+<a name="line-65"></a>      <span class='varid'>setParamInt</span><span class='layout'>,</span>+<a name="line-66"></a>      <span class='varid'>getParamInt</span><span class='layout'>,</span>+<a name="line-67"></a>      +<a name="line-68"></a>      <span class='comment'>-- * Error Message Handling</span>+<a name="line-69"></a>      <span class='varid'>clearErrStatus</span><span class='layout'>,</span>+<a name="line-70"></a>      <span class='varid'>setErrStatus</span><span class='layout'>,</span>+<a name="line-71"></a>      <span class='varid'>getErrStatus</span><span class='layout'>,</span>+<a name="line-72"></a>      <span class='varid'>setErrMsgStatus</span><span class='layout'>,</span>+<a name="line-73"></a>      <span class='varid'>setErrorMsgHandler</span><span class='layout'>,</span>+<a name="line-74"></a>+<a name="line-75"></a>      <span class='varid'>errorMsgStderr</span><span class='layout'>,</span>+<a name="line-76"></a>      <span class='varid'>errorMsgCollect</span><span class='layout'>,</span>+<a name="line-77"></a>      <span class='varid'>errorMsgStderrAndCollect</span><span class='layout'>,</span>+<a name="line-78"></a>      <span class='varid'>errorMsgIgnore</span><span class='layout'>,</span>+<a name="line-79"></a>+<a name="line-80"></a>      <span class='varid'>getErrorMessages</span><span class='layout'>,</span>+<a name="line-81"></a>+<a name="line-82"></a>      <span class='varid'>filterErrorMsg</span><span class='layout'>,</span>+<a name="line-83"></a>      <span class='varid'>issueWarn</span><span class='layout'>,</span>+<a name="line-84"></a>      <span class='varid'>issueErr</span><span class='layout'>,</span>+<a name="line-85"></a>      <span class='varid'>issueFatal</span><span class='layout'>,</span>+<a name="line-86"></a>      <span class='varid'>setDocumentStatus</span><span class='layout'>,</span>+<a name="line-87"></a>      <span class='varid'>setDocumentStatusFromSystemState</span><span class='layout'>,</span>+<a name="line-88"></a>      <span class='varid'>documentStatusOk</span><span class='layout'>,</span>+<a name="line-89"></a>+<a name="line-90"></a>      <span class='comment'>-- * Document Base</span>+<a name="line-91"></a>      <span class='varid'>setBaseURI</span><span class='layout'>,</span>+<a name="line-92"></a>      <span class='varid'>getBaseURI</span><span class='layout'>,</span>+<a name="line-93"></a>      <span class='varid'>changeBaseURI</span><span class='layout'>,</span>+<a name="line-94"></a>      <span class='varid'>setDefaultBaseURI</span><span class='layout'>,</span>+<a name="line-95"></a>      <span class='varid'>getDefaultBaseURI</span><span class='layout'>,</span>+<a name="line-96"></a>      <span class='varid'>runInLocalURIContext</span><span class='layout'>,</span>+<a name="line-97"></a>+<a name="line-98"></a>      <span class='comment'>-- * Tracing</span>+<a name="line-99"></a>      <span class='varid'>setTraceLevel</span><span class='layout'>,</span>+<a name="line-100"></a>      <span class='varid'>getTraceLevel</span><span class='layout'>,</span>+<a name="line-101"></a>      <span class='varid'>withTraceLevel</span><span class='layout'>,</span>+<a name="line-102"></a>      <span class='varid'>trace</span><span class='layout'>,</span>+<a name="line-103"></a>      <span class='varid'>traceMsg</span><span class='layout'>,</span>+<a name="line-104"></a>      <span class='varid'>traceString</span><span class='layout'>,</span>+<a name="line-105"></a>      <span class='varid'>traceSource</span><span class='layout'>,</span>+<a name="line-106"></a>      <span class='varid'>traceTree</span><span class='layout'>,</span>+<a name="line-107"></a>      <span class='varid'>traceDoc</span><span class='layout'>,</span>+<a name="line-108"></a>      <span class='varid'>traceState</span><span class='layout'>,</span>+<a name="line-109"></a>+<a name="line-110"></a>      <span class='comment'>-- * URI Manipulation</span>+<a name="line-111"></a>      <span class='varid'>expandURIString</span><span class='layout'>,</span>+<a name="line-112"></a>      <span class='varid'>expandURI</span><span class='layout'>,</span>+<a name="line-113"></a>      <span class='varid'>mkAbsURI</span><span class='layout'>,</span>+<a name="line-114"></a>+<a name="line-115"></a>      <span class='varid'>getFragmentFromURI</span><span class='layout'>,</span>+<a name="line-116"></a>      <span class='varid'>getPathFromURI</span><span class='layout'>,</span>+<a name="line-117"></a>      <span class='varid'>getPortFromURI</span><span class='layout'>,</span>+<a name="line-118"></a>      <span class='varid'>getQueryFromURI</span><span class='layout'>,</span>+<a name="line-119"></a>      <span class='varid'>getRegNameFromURI</span><span class='layout'>,</span>+<a name="line-120"></a>      <span class='varid'>getSchemeFromURI</span><span class='layout'>,</span>+<a name="line-121"></a>      <span class='varid'>getUserInfoFromURI</span><span class='layout'>,</span>+<a name="line-122"></a>+<a name="line-123"></a>      <span class='comment'>-- * Mime Type Handling</span>+<a name="line-124"></a>      <span class='varid'>setMimeTypeTable</span><span class='layout'>,</span>+<a name="line-125"></a>      <span class='varid'>setMimeTypeTableFromFile</span>+<a name="line-126"></a>      <span class='layout'>)</span>+<a name="line-127"></a><span class='keyword'>where</span>+<a name="line-128"></a>+<a name="line-129"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span>				<span class='comment'>-- arrow classes</span>+<a name="line-130"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>ArrowList</span>+<a name="line-131"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>ArrowIf</span>+<a name="line-132"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>ArrowTree</span>+<a name="line-133"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>ArrowIO</span>+<a name="line-134"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>IOStateListArrow</span>+<a name="line-135"></a>+<a name="line-136"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Strategies</span><span class='varop'>.</span><span class='conid'>DeepSeq</span>+<a name="line-137"></a>+<a name="line-138"></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'>Interface</span>+<a name="line-139"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlArrow</span>+<a name="line-140"></a>+<a name="line-141"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>Edit</span>+<a name="line-142"></a>    <span class='layout'>(</span> <span class='varid'>addHeadlineToXmlDoc</span>+<a name="line-143"></a>    <span class='layout'>,</span> <span class='varid'>treeRepOfXmlDoc</span>+<a name="line-144"></a>    <span class='layout'>,</span> <span class='varid'>indentDoc</span>+<a name="line-145"></a>    <span class='layout'>)</span>+<a name="line-146"></a>+<a name="line-147"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>+<a name="line-148"></a>+<a name="line-149"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>URI</span>+<a name="line-150"></a>    <span class='layout'>(</span> <span class='conid'>URI</span>+<a name="line-151"></a>    <span class='layout'>,</span> <span class='varid'>escapeURIChar</span>+<a name="line-152"></a>    <span class='layout'>,</span> <span class='varid'>isUnescapedInURI</span>+<a name="line-153"></a>    <span class='layout'>,</span> <span class='varid'>nonStrictRelativeTo</span>+<a name="line-154"></a>    <span class='layout'>,</span> <span class='varid'>parseURIReference</span>+<a name="line-155"></a>    <span class='layout'>,</span> <span class='varid'>uriAuthority</span>+<a name="line-156"></a>    <span class='layout'>,</span> <span class='varid'>uriFragment</span>+<a name="line-157"></a>    <span class='layout'>,</span> <span class='varid'>uriPath</span>+<a name="line-158"></a>    <span class='layout'>,</span> <span class='varid'>uriPort</span>+<a name="line-159"></a>    <span class='layout'>,</span> <span class='varid'>uriQuery</span>+<a name="line-160"></a>    <span class='layout'>,</span> <span class='varid'>uriRegName</span>+<a name="line-161"></a>    <span class='layout'>,</span> <span class='varid'>uriScheme</span>+<a name="line-162"></a>    <span class='layout'>,</span> <span class='varid'>uriUserInfo</span>+<a name="line-163"></a>    <span class='layout'>)</span>+<a name="line-164"></a>+<a name="line-165"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>IO</span>+<a name="line-166"></a>    <span class='layout'>(</span> <span class='varid'>hPutStrLn</span>+<a name="line-167"></a>    <span class='layout'>,</span> <span class='varid'>hFlush</span>+<a name="line-168"></a>    <span class='layout'>,</span> <span class='varid'>stderr</span>+<a name="line-169"></a>    <span class='layout'>)</span>+<a name="line-170"></a>+<a name="line-171"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>Directory</span>+<a name="line-172"></a>    <span class='layout'>(</span> <span class='varid'>getCurrentDirectory</span>+<a name="line-173"></a>    <span class='layout'>)</span>+<a name="line-174"></a>+<a name="line-175"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-176"></a><span class='comment'>{- $datatypes -}</span>+<a name="line-177"></a>+<a name="line-178"></a>+<a name="line-179"></a><span class='comment'>-- |</span>+<a name="line-180"></a><span class='comment'>-- predefined system state data type with all components for the</span>+<a name="line-181"></a><span class='comment'>-- system functions, like trace, error handling, ...</span>+<a name="line-182"></a>+<a name="line-183"></a><a name="XIOSysState"></a><span class='keyword'>data</span> <span class='conid'>XIOSysState</span>	<span class='keyglyph'>=</span> <span class='conid'>XIOSys</span>  <span class='layout'>{</span> <span class='varid'>xio_trace</span>			<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>Int</span>+<a name="line-184"></a>				  <span class='layout'>,</span> <span class='varid'>xio_errorStatus</span>		<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>Int</span>+<a name="line-185"></a>				  <span class='layout'>,</span> <span class='varid'>xio_errorModule</span>		<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>String</span>+<a name="line-186"></a>				  <span class='layout'>,</span> <span class='varid'>xio_errorMsgHandler</span>		<span class='keyglyph'>::</span>   <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='conid'>()</span>+<a name="line-187"></a>				  <span class='layout'>,</span> <span class='varid'>xio_errorMsgCollect</span>		<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>Bool</span>+<a name="line-188"></a>				  <span class='layout'>,</span> <span class='varid'>xio_errorMsgList</span>		<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>XmlTrees</span>+<a name="line-189"></a>				  <span class='layout'>,</span> <span class='varid'>xio_baseURI</span>			<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>String</span>+<a name="line-190"></a>				  <span class='layout'>,</span> <span class='varid'>xio_defaultBaseURI</span>		<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>String</span>+<a name="line-191"></a>				  <span class='layout'>,</span> <span class='varid'>xio_attrList</span>		<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='layout'>(</span><span class='conid'>AssocList</span> <span class='conid'>String</span> <span class='conid'>XmlTrees</span><span class='layout'>)</span>+<a name="line-192"></a>				  <span class='layout'>,</span> <span class='varid'>xio_mimeTypes</span>		<span class='keyglyph'>::</span>   <span class='conid'>MimeTypeTable</span>+<a name="line-193"></a>				  <span class='layout'>}</span>+<a name="line-194"></a>+<a name="line-195"></a><span class='keyword'>instance</span> <span class='conid'>DeepSeq</span> <span class='conid'>XIOSysState</span> <span class='keyword'>where</span>+<a name="line-196"></a>    <span class='varid'>deepSeq</span> <span class='layout'>(</span><span class='conid'>XIOSys</span> <span class='varid'>tr</span> <span class='varid'>es</span> <span class='varid'>em</span> <span class='sel'>_emh</span> <span class='varid'>emc</span> <span class='varid'>eml</span> <span class='varid'>bu</span> <span class='varid'>du</span> <span class='varid'>al</span> <span class='sel'>_mt</span><span class='layout'>)</span> <span class='varid'>y</span>+<a name="line-197"></a>	<span class='keyglyph'>=</span> <span class='varid'>deepSeq</span> <span class='varid'>tr</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>es</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>em</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>emc</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>eml</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>bu</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>du</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>al</span> <span class='varid'>y</span>+<a name="line-198"></a>+<a name="line-199"></a><span class='comment'>-- |</span>+<a name="line-200"></a><span class='comment'>-- state datatype consists of a system state and a user state</span>+<a name="line-201"></a><span class='comment'>-- the user state is not fixed</span>+<a name="line-202"></a>+<a name="line-203"></a><a name="XIOState"></a><span class='keyword'>data</span> <span class='conid'>XIOState</span> <span class='varid'>us</span>	<span class='keyglyph'>=</span> <span class='conid'>XIOState</span> <span class='layout'>{</span> <span class='varid'>xio_sysState</span>		<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='conid'>XIOSysState</span>+<a name="line-204"></a>				   <span class='layout'>,</span> <span class='varid'>xio_userState</span>		<span class='keyglyph'>::</span> <span class='varop'>!</span> <span class='varid'>us</span>+<a name="line-205"></a>				   <span class='layout'>}</span>+<a name="line-206"></a>+<a name="line-207"></a><span class='keyword'>instance</span> <span class='layout'>(</span><span class='conid'>DeepSeq</span> <span class='varid'>us</span><span class='layout'>)</span> <span class='keyglyph'>=&gt;</span> <span class='conid'>DeepSeq</span> <span class='layout'>(</span><span class='conid'>XIOState</span> <span class='varid'>us</span><span class='layout'>)</span> <span class='keyword'>where</span>+<a name="line-208"></a>    <span class='varid'>deepSeq</span> <span class='layout'>(</span><span class='conid'>XIOState</span> <span class='varid'>sys</span> <span class='varid'>usr</span><span class='layout'>)</span> <span class='varid'>y</span>	<span class='keyglyph'>=</span> <span class='varid'>deepSeq</span> <span class='varid'>sys</span> <span class='varop'>$</span> <span class='varid'>deepSeq</span> <span class='varid'>usr</span> <span class='varid'>y</span>+<a name="line-209"></a>+<a name="line-210"></a><span class='comment'>-- |</span>+<a name="line-211"></a><span class='comment'>-- The arrow type for stateful arrows</span>+<a name="line-212"></a>+<a name="line-213"></a><a name="IOStateArrow"></a><span class='keyword'>type</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>c</span>	<span class='keyglyph'>=</span> <span class='conid'>IOSLA</span> <span class='layout'>(</span><span class='conid'>XIOState</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='varid'>b</span> <span class='varid'>c</span>+<a name="line-214"></a>+<a name="line-215"></a><span class='comment'>-- |</span>+<a name="line-216"></a><span class='comment'>-- The arrow for stateful arrows with no user defined state</span>+<a name="line-217"></a>+<a name="line-218"></a><a name="IOSArrow"></a><span class='keyword'>type</span> <span class='conid'>IOSArrow</span> <span class='varid'>b</span> <span class='varid'>c</span>	<span class='keyglyph'>=</span> <span class='conid'>IOStateArrow</span> <span class='conid'>()</span> <span class='varid'>b</span> <span class='varid'>c</span>+<a name="line-219"></a>+<a name="line-220"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-221"></a>+<a name="line-222"></a>+<a name="line-223"></a><span class='comment'>-- | the default global state, used as initial state when running an 'IOSArrow' with 'runIOSLA' or</span>+<a name="line-224"></a><span class='comment'>-- 'runX'</span>+<a name="line-225"></a>+<a name="line-226"></a><a name="initialState"></a><span class='definition'>initialState</span>	<span class='keyglyph'>::</span> <span class='varid'>us</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XIOState</span> <span class='varid'>us</span>+<a name="line-227"></a><span class='definition'>initialState</span> <span class='varid'>s</span>	<span class='keyglyph'>=</span> <span class='conid'>XIOState</span> <span class='layout'>{</span> <span class='varid'>xio_sysState</span> 	<span class='keyglyph'>=</span> <span class='varid'>initialSysState</span>+<a name="line-228"></a>			   <span class='layout'>,</span> <span class='varid'>xio_userState</span>	<span class='keyglyph'>=</span> <span class='varid'>s</span>+<a name="line-229"></a>			   <span class='layout'>}</span>+<a name="line-230"></a>+<a name="line-231"></a><a name="initialSysState"></a><span class='definition'>initialSysState</span>	<span class='keyglyph'>::</span> <span class='conid'>XIOSysState</span>+<a name="line-232"></a><span class='definition'>initialSysState</span>	<span class='keyglyph'>=</span> <span class='conid'>XIOSys</span> <span class='layout'>{</span> <span class='varid'>xio_trace</span>		<span class='keyglyph'>=</span> <span class='num'>0</span>+<a name="line-233"></a>			 <span class='layout'>,</span> <span class='varid'>xio_errorStatus</span>	<span class='keyglyph'>=</span> <span class='varid'>c_ok</span>+<a name="line-234"></a>			 <span class='layout'>,</span> <span class='varid'>xio_errorModule</span>	<span class='keyglyph'>=</span> <span class='str'>""</span>+<a name="line-235"></a>			 <span class='layout'>,</span> <span class='varid'>xio_errorMsgHandler</span>	<span class='keyglyph'>=</span> <span class='varid'>hPutStrLn</span> <span class='varid'>stderr</span>+<a name="line-236"></a>			 <span class='layout'>,</span> <span class='varid'>xio_errorMsgCollect</span>	<span class='keyglyph'>=</span> <span class='conid'>False</span>+<a name="line-237"></a>			 <span class='layout'>,</span> <span class='varid'>xio_errorMsgList</span>	<span class='keyglyph'>=</span> <span class='conid'>[]</span>+<a name="line-238"></a>			 <span class='layout'>,</span> <span class='varid'>xio_baseURI</span>		<span class='keyglyph'>=</span> <span class='str'>""</span>+<a name="line-239"></a>			 <span class='layout'>,</span> <span class='varid'>xio_defaultBaseURI</span>	<span class='keyglyph'>=</span> <span class='str'>""</span>+<a name="line-240"></a>			 <span class='layout'>,</span> <span class='varid'>xio_attrList</span>		<span class='keyglyph'>=</span> <span class='conid'>[]</span>+<a name="line-241"></a>			 <span class='layout'>,</span> <span class='varid'>xio_mimeTypes</span>	<span class='keyglyph'>=</span> <span class='varid'>defaultMimeTypeTable</span>+<a name="line-242"></a>			 <span class='layout'>}</span>+<a name="line-243"></a>+<a name="line-244"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-245"></a>+<a name="line-246"></a><span class='comment'>-- |</span>+<a name="line-247"></a><span class='comment'>-- apply an 'IOSArrow' to an empty root node with 'initialState' () as initial state</span>+<a name="line-248"></a><span class='comment'>--</span>+<a name="line-249"></a><span class='comment'>-- the main entry point for running a state arrow with IO</span>+<a name="line-250"></a><span class='comment'>--</span>+<a name="line-251"></a><span class='comment'>-- when running @ runX f@ an empty XML root node is applied to @f@.</span>+<a name="line-252"></a><span class='comment'>-- usually @f@ will start with a constant arrow (ignoring the input), e.g. a 'Text.XML.HXT.Arrow.ReadDocument.readDocument' arrow.</span>+<a name="line-253"></a><span class='comment'>--</span>+<a name="line-254"></a><span class='comment'>-- for usage see examples with 'Text.XML.HXT.Arrow.WriteDocument.writeDocument'</span>+<a name="line-255"></a><span class='comment'>--</span>+<a name="line-256"></a><span class='comment'>-- if input has to be feed into the arrow use 'Control.Arrow.IOStateListArrow.runIOSLA' like in @ runIOSLA f emptyX inputDoc @</span>+<a name="line-257"></a>+<a name="line-258"></a><a name="runX"></a><span class='definition'>runX</span>		<span class='keyglyph'>::</span> <span class='conid'>IOSArrow</span> <span class='conid'>XmlTree</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='keyglyph'>[</span><span class='varid'>c</span><span class='keyglyph'>]</span>+<a name="line-259"></a><span class='definition'>runX</span>		<span class='keyglyph'>=</span> <span class='varid'>runXIOState</span> <span class='layout'>(</span><span class='varid'>initialState</span> <span class='conid'>()</span><span class='layout'>)</span>+<a name="line-260"></a>+<a name="line-261"></a><a name="runXIOState"></a><span class='definition'>runXIOState</span>	<span class='keyglyph'>::</span> <span class='conid'>XIOState</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='keyglyph'>[</span><span class='varid'>c</span><span class='keyglyph'>]</span>+<a name="line-262"></a><span class='definition'>runXIOState</span> <span class='varid'>s0</span> <span class='varid'>f</span>+<a name="line-263"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-264"></a>      <span class='layout'>(</span><span class='sel'>_finalState</span><span class='layout'>,</span> <span class='varid'>res</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>runIOSLA</span> <span class='layout'>(</span><span class='varid'>emptyRoot</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>f</span><span class='layout'>)</span> <span class='varid'>s0</span> <span class='varid'>undefined</span>+<a name="line-265"></a>      <span class='varid'>return</span> <span class='varid'>res</span>+<a name="line-266"></a>    <span class='keyword'>where</span>+<a name="line-267"></a>    <span class='varid'>emptyRoot</span>    <span class='keyglyph'>=</span> <span class='varid'>root</span> <span class='conid'>[]</span> <span class='conid'>[]</span>+<a name="line-268"></a>+<a name="line-269"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-270"></a>+<a name="line-271"></a><span class='comment'>{- user state -}</span>+<a name="line-272"></a>+<a name="line-273"></a><span class='comment'>-- | read the user defined part of the state</span>+<a name="line-274"></a>+<a name="line-275"></a><a name="getUserState"></a><span class='definition'>getUserState</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>s</span>+<a name="line-276"></a><span class='definition'>getUserState</span>+<a name="line-277"></a>    <span class='keyglyph'>=</span> <span class='conid'>IOSLA</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='keyword'>_</span> <span class='keyglyph'>-&gt;</span>+<a name="line-278"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>s</span><span class='layout'>,</span> <span class='keyglyph'>[</span><span class='varid'>xio_userState</span> <span class='varid'>s</span><span class='keyglyph'>]</span><span class='layout'>)</span>+<a name="line-279"></a>+<a name="line-280"></a><span class='comment'>-- | change the user defined part of the state</span>+<a name="line-281"></a>+<a name="line-282"></a><a name="changeUserState"></a><span class='definition'>changeUserState</span>		<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-283"></a><span class='definition'>changeUserState</span> <span class='varid'>cf</span>+<a name="line-284"></a>    <span class='keyglyph'>=</span> <span class='conid'>IOSLA</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='varid'>v</span> <span class='keyglyph'>-&gt;</span>+<a name="line-285"></a>      <span class='keyword'>let</span> <span class='varid'>s'</span> <span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_userState</span> <span class='keyglyph'>=</span> <span class='varid'>cf</span> <span class='varid'>v</span> <span class='layout'>(</span><span class='varid'>xio_userState</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='layout'>}</span>+<a name="line-286"></a>      <span class='keyword'>in</span> <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>s'</span><span class='layout'>,</span> <span class='keyglyph'>[</span><span class='varid'>v</span><span class='keyglyph'>]</span><span class='layout'>)</span>+<a name="line-287"></a>+<a name="line-288"></a><span class='comment'>-- | set the user defined part of the state</span>+<a name="line-289"></a>+<a name="line-290"></a><a name="setUserState"></a><span class='definition'>setUserState</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>s</span> <span class='varid'>s</span>+<a name="line-291"></a><span class='definition'>setUserState</span>+<a name="line-292"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeUserState</span> <span class='varid'>const</span>+<a name="line-293"></a>+<a name="line-294"></a><span class='comment'>-- | extend user state</span>+<a name="line-295"></a><span class='comment'>--</span>+<a name="line-296"></a><span class='comment'>-- Run an arrow with an extended user state component, The old component</span>+<a name="line-297"></a><span class='comment'>-- is stored together with a new one in a pair, the arrow is executed with this</span>+<a name="line-298"></a><span class='comment'>-- extended state, and the augmented state component is removed form the state</span>+<a name="line-299"></a><span class='comment'>-- when the arrow has finished its execution</span>+<a name="line-300"></a>+<a name="line-301"></a><a name="withExtendedUserState"></a><span class='definition'>withExtendedUserState</span>	<span class='keyglyph'>::</span> <span class='varid'>s1</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='layout'>(</span><span class='varid'>s1</span><span class='layout'>,</span> <span class='varid'>s0</span><span class='layout'>)</span> <span class='varid'>b</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s0</span> <span class='varid'>b</span> <span class='varid'>c</span>+<a name="line-302"></a><span class='definition'>withExtendedUserState</span> <span class='varid'>initS1</span> <span class='varid'>f</span>+<a name="line-303"></a>    <span class='keyglyph'>=</span> <span class='conid'>IOSLA</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s0</span> <span class='varid'>x</span> <span class='keyglyph'>-&gt;</span>+<a name="line-304"></a>      <span class='keyword'>do</span>+<a name="line-305"></a>      <span class='keyglyph'>~</span><span class='layout'>(</span><span class='varid'>finalS</span><span class='layout'>,</span> <span class='varid'>res</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>runIOSLA</span> <span class='varid'>f</span> <span class='layout'>(</span> <span class='conid'>XIOState</span> <span class='layout'>{</span> <span class='varid'>xio_sysState</span>  <span class='keyglyph'>=</span>          <span class='varid'>xio_sysState</span>  <span class='varid'>s0</span>+<a name="line-306"></a>					      <span class='layout'>,</span> <span class='varid'>xio_userState</span> <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>initS1</span><span class='layout'>,</span> <span class='varid'>xio_userState</span> <span class='varid'>s0</span><span class='layout'>)</span>+<a name="line-307"></a>					      <span class='layout'>}</span>+<a name="line-308"></a>				   <span class='layout'>)</span> <span class='varid'>x</span>+<a name="line-309"></a>      <span class='varid'>return</span> <span class='layout'>(</span> <span class='conid'>XIOState</span> <span class='layout'>{</span> <span class='varid'>xio_sysState</span>  <span class='keyglyph'>=</span>      <span class='varid'>xio_sysState</span>  <span class='varid'>finalS</span>+<a name="line-310"></a>			<span class='layout'>,</span> <span class='varid'>xio_userState</span> <span class='keyglyph'>=</span> <span class='varid'>snd</span> <span class='layout'>(</span><span class='varid'>xio_userState</span> <span class='varid'>finalS</span><span class='layout'>)</span>+<a name="line-311"></a>			<span class='layout'>}</span>+<a name="line-312"></a>	     <span class='layout'>,</span> <span class='varid'>res</span>+<a name="line-313"></a>	     <span class='layout'>)</span>+<a name="line-314"></a>+<a name="line-315"></a><span class='comment'>-- | change the type of user state</span>+<a name="line-316"></a><span class='comment'>--</span>+<a name="line-317"></a><span class='comment'>-- This conversion is useful, when running a state arrow with another</span>+<a name="line-318"></a><span class='comment'>-- structure of the user state, e.g. with () when executing some IO arrows</span>+<a name="line-319"></a>+<a name="line-320"></a><a name="withOtherUserState"></a><span class='definition'>withOtherUserState</span>	<span class='keyglyph'>::</span> <span class='varid'>s1</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s1</span> <span class='varid'>b</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s0</span> <span class='varid'>b</span> <span class='varid'>c</span>+<a name="line-321"></a><span class='definition'>withOtherUserState</span> <span class='varid'>s1</span> <span class='varid'>f</span>+<a name="line-322"></a>    <span class='keyglyph'>=</span> <span class='conid'>IOSLA</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='varid'>x</span> <span class='keyglyph'>-&gt;</span>+<a name="line-323"></a>      <span class='keyword'>do</span>+<a name="line-324"></a>      <span class='layout'>(</span><span class='varid'>s'</span><span class='layout'>,</span> <span class='varid'>res</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>runIOSLA</span> <span class='varid'>f</span> <span class='layout'>(</span> <span class='conid'>XIOState</span> <span class='layout'>{</span> <span class='varid'>xio_sysState</span>  <span class='keyglyph'>=</span> <span class='varid'>xio_sysState</span> <span class='varid'>s</span>+<a name="line-325"></a>					 <span class='layout'>,</span> <span class='varid'>xio_userState</span> <span class='keyglyph'>=</span> <span class='varid'>s1</span>+<a name="line-326"></a>					 <span class='layout'>}</span>+<a name="line-327"></a>			      <span class='layout'>)</span> <span class='varid'>x</span>+<a name="line-328"></a>      <span class='varid'>return</span> <span class='layout'>(</span> <span class='conid'>XIOState</span> <span class='layout'>{</span> <span class='varid'>xio_sysState</span>  <span class='keyglyph'>=</span> <span class='varid'>xio_sysState</span>  <span class='varid'>s'</span>+<a name="line-329"></a>			<span class='layout'>,</span> <span class='varid'>xio_userState</span> <span class='keyglyph'>=</span> <span class='varid'>xio_userState</span> <span class='varid'>s</span>+<a name="line-330"></a>			<span class='layout'>}</span>+<a name="line-331"></a>	     <span class='layout'>,</span> <span class='varid'>res</span>+<a name="line-332"></a>	     <span class='layout'>)</span>+<a name="line-333"></a>+<a name="line-334"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-335"></a>+<a name="line-336"></a><span class='comment'>{- $system state params -}</span>+<a name="line-337"></a>+<a name="line-338"></a><a name="getSysParam"></a><span class='definition'>getSysParam</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>XIOSysState</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>c</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>c</span>+<a name="line-339"></a><span class='definition'>getSysParam</span> <span class='varid'>f</span>+<a name="line-340"></a>    <span class='keyglyph'>=</span> <span class='conid'>IOSLA</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='sel'>_x</span> <span class='keyglyph'>-&gt;</span>+<a name="line-341"></a>      <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>s</span><span class='layout'>,</span> <span class='layout'>(</span><span class='conop'>:</span><span class='conid'>[]</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>f</span> <span class='varop'>.</span> <span class='varid'>xio_sysState</span> <span class='varop'>$</span> <span class='varid'>s</span><span class='layout'>)</span>+<a name="line-342"></a>+<a name="line-343"></a><a name="changeSysParam"></a><span class='definition'>changeSysParam</span>		<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='varid'>b</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XIOSysState</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>XIOSysState</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-344"></a><span class='definition'>changeSysParam</span> <span class='varid'>cf</span>+<a name="line-345"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='conid'>IOSLA</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='varid'>v</span> <span class='keyglyph'>-&gt;</span>+<a name="line-346"></a>	<span class='keyword'>let</span> <span class='varid'>s'</span> <span class='keyglyph'>=</span> <span class='varid'>changeSysState</span> <span class='layout'>(</span><span class='varid'>cf</span> <span class='varid'>v</span><span class='layout'>)</span> <span class='varid'>s</span>+<a name="line-347"></a>	<span class='keyword'>in</span> <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>s'</span><span class='layout'>,</span> <span class='keyglyph'>[</span><span class='varid'>v</span><span class='keyglyph'>]</span><span class='layout'>)</span>+<a name="line-348"></a>      <span class='layout'>)</span>+<a name="line-349"></a>    <span class='keyword'>where</span>+<a name="line-350"></a>    <span class='varid'>changeSysState</span> <span class='varid'>css</span> <span class='varid'>s</span> <span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_sysState</span> <span class='keyglyph'>=</span> <span class='varid'>css</span> <span class='layout'>(</span><span class='varid'>xio_sysState</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='layout'>}</span>+<a name="line-351"></a>+<a name="line-352"></a><span class='comment'>-- | store a single XML tree in global state under a given attribute name</span>+<a name="line-353"></a>+<a name="line-354"></a><a name="setParam"></a><span class='definition'>setParam</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-355"></a><span class='definition'>setParam</span> <span class='varid'>n</span>+<a name="line-356"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='conop'>:</span><span class='conid'>[]</span><span class='layout'>)</span> <span class='varop'>^&gt;&gt;</span> <span class='varid'>setParamList</span> <span class='varid'>n</span>+<a name="line-357"></a>+<a name="line-358"></a><span class='comment'>-- | store a list of XML trees in global system state under a given attribute name</span>+<a name="line-359"></a>+<a name="line-360"></a><a name="setParamList"></a><span class='definition'>setParamList</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTrees</span> <span class='conid'>XmlTree</span>+<a name="line-361"></a><span class='definition'>setParamList</span> <span class='varid'>n</span>+<a name="line-362"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysParam</span> <span class='varid'>addE</span>+<a name="line-363"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-364"></a>      <span class='varid'>arrL</span> <span class='varid'>id</span>+<a name="line-365"></a>    <span class='keyword'>where</span>+<a name="line-366"></a>    <span class='varid'>addE</span> <span class='varid'>x</span> <span class='varid'>s</span> <span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_attrList</span> <span class='keyglyph'>=</span> <span class='varid'>addEntry</span> <span class='varid'>n</span> <span class='varid'>x</span> <span class='layout'>(</span><span class='varid'>xio_attrList</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='layout'>}</span>+<a name="line-367"></a>+<a name="line-368"></a><span class='comment'>-- | remove an entry in global state, arrow input remains unchanged</span>+<a name="line-369"></a>+<a name="line-370"></a><a name="unsetParam"></a><span class='definition'>unsetParam</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-371"></a><span class='definition'>unsetParam</span> <span class='varid'>n</span>+<a name="line-372"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysParam</span> <span class='varid'>delE</span>+<a name="line-373"></a>    <span class='keyword'>where</span>+<a name="line-374"></a>    <span class='varid'>delE</span> <span class='keyword'>_</span> <span class='varid'>s</span> <span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_attrList</span> <span class='keyglyph'>=</span> <span class='varid'>delEntry</span> <span class='varid'>n</span> <span class='layout'>(</span><span class='varid'>xio_attrList</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='layout'>}</span>+<a name="line-375"></a>+<a name="line-376"></a><span class='comment'>-- | read an attribute value from global state</span>+<a name="line-377"></a>+<a name="line-378"></a><a name="getParam"></a><span class='definition'>getParam</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>XmlTree</span>+<a name="line-379"></a><span class='definition'>getParam</span> <span class='varid'>n</span>+<a name="line-380"></a>    <span class='keyglyph'>=</span> <span class='varid'>getAllParams</span>+<a name="line-381"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-382"></a>      <span class='varid'>arrL</span> <span class='layout'>(</span><span class='varid'>lookup1</span> <span class='varid'>n</span><span class='layout'>)</span>+<a name="line-383"></a>+<a name="line-384"></a><span class='comment'>-- | read all attributes from global state</span>+<a name="line-385"></a>+<a name="line-386"></a><a name="getAllParams"></a><span class='definition'>getAllParams</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='layout'>(</span><span class='conid'>AssocList</span> <span class='conid'>String</span> <span class='conid'>XmlTrees</span><span class='layout'>)</span>+<a name="line-387"></a><span class='definition'>getAllParams</span>+<a name="line-388"></a>    <span class='keyglyph'>=</span> <span class='varid'>getSysParam</span> <span class='varid'>xio_attrList</span>+<a name="line-389"></a>+<a name="line-390"></a><span class='comment'>-- | read all attributes from global state</span>+<a name="line-391"></a><span class='comment'>-- and convert the values to strings</span>+<a name="line-392"></a>+<a name="line-393"></a><a name="getAllParamsString"></a><span class='definition'>getAllParamsString</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='layout'>(</span><span class='conid'>AssocList</span> <span class='conid'>String</span> <span class='conid'>String</span><span class='layout'>)</span>+<a name="line-394"></a><span class='definition'>getAllParamsString</span>+<a name="line-395"></a>    <span class='keyglyph'>=</span> <span class='varid'>getAllParams</span>+<a name="line-396"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-397"></a>      <span class='varid'>listA</span> <span class='layout'>(</span> <span class='varid'>unlistA</span>+<a name="line-398"></a>	      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-399"></a>	      <span class='varid'>second</span> <span class='layout'>(</span><span class='varid'>xshow</span> <span class='varid'>unlistA</span><span class='layout'>)</span>+<a name="line-400"></a>	    <span class='layout'>)</span>+<a name="line-401"></a>+<a name="line-402"></a><a name="setParamString"></a><span class='definition'>setParamString</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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-403"></a><span class='definition'>setParamString</span> <span class='varid'>n</span> <span class='varid'>v</span>+<a name="line-404"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>txt</span> <span class='varid'>v</span>+<a name="line-405"></a>		<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-406"></a>		<span class='varid'>setParam</span> <span class='varid'>n</span>+<a name="line-407"></a>	      <span class='layout'>)</span>+<a name="line-408"></a>+<a name="line-409"></a><span class='comment'>-- | read a string value from global state,</span>+<a name="line-410"></a><span class='comment'>-- if parameter not set \"\" is returned</span>+<a name="line-411"></a>+<a name="line-412"></a><a name="getParamString"></a><span class='definition'>getParamString</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>String</span>+<a name="line-413"></a><span class='definition'>getParamString</span> <span class='varid'>n</span>+<a name="line-414"></a>    <span class='keyglyph'>=</span> <span class='varid'>xshow</span> <span class='layout'>(</span><span class='varid'>getParam</span> <span class='varid'>n</span><span class='layout'>)</span>+<a name="line-415"></a>+<a name="line-416"></a><span class='comment'>-- | store an int value in global state</span>+<a name="line-417"></a>+<a name="line-418"></a><a name="setParamInt"></a><span class='definition'>setParamInt</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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-419"></a><span class='definition'>setParamInt</span> <span class='varid'>n</span> <span class='varid'>v</span>+<a name="line-420"></a>    <span class='keyglyph'>=</span> <span class='varid'>setParamString</span> <span class='varid'>n</span> <span class='layout'>(</span><span class='varid'>show</span> <span class='varid'>v</span><span class='layout'>)</span>+<a name="line-421"></a>+<a name="line-422"></a><span class='comment'>-- | read an int value from global state</span>+<a name="line-423"></a><span class='comment'>-- </span>+<a name="line-424"></a><span class='comment'>-- &gt; getParamInt 0 myIntAttr</span>+<a name="line-425"></a>+<a name="line-426"></a><a name="getParamInt"></a><span class='definition'>getParamInt</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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>Int</span>+<a name="line-427"></a><span class='definition'>getParamInt</span> <span class='varid'>def</span> <span class='varid'>n</span>+<a name="line-428"></a>    <span class='keyglyph'>=</span> <span class='varid'>getParamString</span> <span class='varid'>n</span>+<a name="line-429"></a>      <span class='varop'>&gt;&gt;^</span>+<a name="line-430"></a>      <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>x</span> <span class='keyglyph'>-&gt;</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>x</span> <span class='keyword'>then</span> <span class='varid'>def</span> <span class='keyword'>else</span> <span class='varid'>read</span> <span class='varid'>x</span><span class='layout'>)</span>+<a name="line-431"></a>+<a name="line-432"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-433"></a>+<a name="line-434"></a><span class='comment'>-- | reset global error variable</span>+<a name="line-435"></a>+<a name="line-436"></a><a name="changeErrorStatus"></a><span class='definition'>changeErrorStatus</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Int</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>Int</span> <span class='conid'>Int</span>+<a name="line-437"></a><span class='definition'>changeErrorStatus</span> <span class='varid'>f</span>+<a name="line-438"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysParam</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>l</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_errorStatus</span> <span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varid'>l</span> <span class='layout'>(</span><span class='varid'>xio_errorStatus</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='layout'>}</span><span class='layout'>)</span>+<a name="line-439"></a>+<a name="line-440"></a><a name="clearErrStatus"></a><span class='definition'>clearErrStatus</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-441"></a><span class='definition'>clearErrStatus</span>+<a name="line-442"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span><span class='varid'>constA</span> <span class='num'>0</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>changeErrorStatus</span> <span class='varid'>min</span><span class='layout'>)</span>+<a name="line-443"></a>+<a name="line-444"></a><span class='comment'>-- | set global error variable</span>+<a name="line-445"></a>+<a name="line-446"></a><a name="setErrStatus"></a><span class='definition'>setErrStatus</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>Int</span> <span class='conid'>Int</span>+<a name="line-447"></a><span class='definition'>setErrStatus</span>+<a name="line-448"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeErrorStatus</span> <span class='varid'>max</span>+<a name="line-449"></a>+<a name="line-450"></a><span class='comment'>-- | read current global error status</span>+<a name="line-451"></a>+<a name="line-452"></a><a name="getErrStatus"></a><span class='definition'>getErrStatus</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>Int</span>+<a name="line-453"></a><span class='definition'>getErrStatus</span>+<a name="line-454"></a>    <span class='keyglyph'>=</span> <span class='varid'>getSysParam</span> <span class='varid'>xio_errorStatus</span>+<a name="line-455"></a>+<a name="line-456"></a><span class='comment'>-- | raise the global error status level to that of the input tree</span>+<a name="line-457"></a>+<a name="line-458"></a><a name="setErrMsgStatus"></a><span class='definition'>setErrMsgStatus</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-459"></a><span class='definition'>setErrMsgStatus</span>+<a name="line-460"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>getErrorLevel</span>+<a name="line-461"></a>		<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-462"></a>		<span class='varid'>setErrStatus</span>+<a name="line-463"></a>	      <span class='layout'>)</span>+<a name="line-464"></a>+<a name="line-465"></a><span class='comment'>-- | set the error message handler and the flag for collecting the errors</span>+<a name="line-466"></a>+<a name="line-467"></a><a name="setErrorMsgHandler"></a><span class='definition'>setErrorMsgHandler</span>	<span class='keyglyph'>::</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='conid'>()</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-468"></a><span class='definition'>setErrorMsgHandler</span> <span class='varid'>c</span> <span class='varid'>f</span>+<a name="line-469"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysParam</span> <span class='varid'>cf</span>+<a name="line-470"></a>    <span class='keyword'>where</span>+<a name="line-471"></a>    <span class='varid'>cf</span> <span class='keyword'>_</span> <span class='varid'>s</span> <span class='keyglyph'>=</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_errorMsgHandler</span> <span class='keyglyph'>=</span> <span class='varid'>f</span>+<a name="line-472"></a>	       <span class='layout'>,</span> <span class='varid'>xio_errorMsgCollect</span> <span class='keyglyph'>=</span> <span class='varid'>c</span> <span class='layout'>}</span>+<a name="line-473"></a>+<a name="line-474"></a><span class='comment'>-- | error message handler for output to stderr</span>+<a name="line-475"></a>		  +<a name="line-476"></a><a name="sysErrorMsg"></a><span class='definition'>sysErrorMsg</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-477"></a><span class='definition'>sysErrorMsg</span>+<a name="line-478"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>getErrorLevel</span> <span class='varop'>&amp;&amp;&amp;</span> <span class='varid'>getErrorMsg</span>+<a name="line-479"></a>		<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-480"></a>		<span class='varid'>arr</span> <span class='varid'>formatErrorMsg</span>+<a name="line-481"></a>		<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-482"></a>		<span class='layout'>(</span> <span class='conid'>IOSLA</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='varid'>e</span> <span class='keyglyph'>-&gt;</span>+<a name="line-483"></a>		  <span class='keyword'>do</span>+<a name="line-484"></a>		  <span class='layout'>(</span><span class='varid'>xio_errorMsgHandler</span> <span class='varop'>.</span> <span class='varid'>xio_sysState</span> <span class='varop'>$</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='varid'>e</span>+<a name="line-485"></a>		  <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>s</span><span class='layout'>,</span> <span class='varid'>undefined</span><span class='layout'>)</span>+<a name="line-486"></a>		<span class='layout'>)</span>+<a name="line-487"></a>	      <span class='layout'>)</span>+<a name="line-488"></a>    <span class='keyword'>where</span>+<a name="line-489"></a>    <span class='varid'>formatErrorMsg</span> <span class='layout'>(</span><span class='varid'>level</span><span class='layout'>,</span> <span class='varid'>msg</span><span class='layout'>)</span>	<span class='keyglyph'>=</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'>msg</span>+<a name="line-490"></a>    <span class='varid'>errClass</span> <span class='varid'>l</span>+<a name="line-491"></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-492"></a>	  <span class='keyword'>where</span>+<a name="line-493"></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-494"></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-495"></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-496"></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-497"></a>			  <span class='keyglyph'>]</span>+<a name="line-498"></a>+<a name="line-499"></a>+<a name="line-500"></a><span class='comment'>-- | the default error message handler: error output to stderr</span>+<a name="line-501"></a>+<a name="line-502"></a><a name="errorMsgStderr"></a><span class='definition'>errorMsgStderr</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-503"></a><span class='definition'>errorMsgStderr</span>		<span class='keyglyph'>=</span> <span class='varid'>setErrorMsgHandler</span> <span class='conid'>False</span> <span class='layout'>(</span><span class='varid'>hPutStrLn</span> <span class='varid'>stderr</span><span class='layout'>)</span>+<a name="line-504"></a>+<a name="line-505"></a><span class='comment'>-- | error message handler for collecting errors</span>+<a name="line-506"></a>+<a name="line-507"></a><a name="errorMsgCollect"></a><span class='definition'>errorMsgCollect</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-508"></a><span class='definition'>errorMsgCollect</span>		<span class='keyglyph'>=</span> <span class='varid'>setErrorMsgHandler</span> <span class='conid'>True</span> <span class='layout'>(</span><span class='varid'>const</span> <span class='varop'>$</span> <span class='varid'>return</span> <span class='conid'>()</span><span class='layout'>)</span>+<a name="line-509"></a>+<a name="line-510"></a><span class='comment'>-- | error message handler for output to stderr and collecting</span>+<a name="line-511"></a>+<a name="line-512"></a><a name="errorMsgStderrAndCollect"></a><span class='definition'>errorMsgStderrAndCollect</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-513"></a><span class='definition'>errorMsgStderrAndCollect</span>	<span class='keyglyph'>=</span> <span class='varid'>setErrorMsgHandler</span> <span class='conid'>True</span> <span class='layout'>(</span><span class='varid'>hPutStrLn</span> <span class='varid'>stderr</span><span class='layout'>)</span>+<a name="line-514"></a>+<a name="line-515"></a><span class='comment'>-- | error message handler for ignoring errors</span>+<a name="line-516"></a>+<a name="line-517"></a><a name="errorMsgIgnore"></a><span class='definition'>errorMsgIgnore</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-518"></a><span class='definition'>errorMsgIgnore</span>		<span class='keyglyph'>=</span> <span class='varid'>setErrorMsgHandler</span> <span class='conid'>False</span> <span class='layout'>(</span><span class='varid'>const</span> <span class='varop'>$</span> <span class='varid'>return</span> <span class='conid'>()</span><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'>-- if error messages are collected by the error handler for</span>+<a name="line-522"></a><span class='comment'>-- processing these messages by the calling application,</span>+<a name="line-523"></a><span class='comment'>-- this arrow reads the stored messages and clears the error message store</span>+<a name="line-524"></a>+<a name="line-525"></a><a name="getErrorMessages"></a><span class='definition'>getErrorMessages</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>XmlTree</span>+<a name="line-526"></a><span class='definition'>getErrorMessages</span>+<a name="line-527"></a>    <span class='keyglyph'>=</span> <span class='varid'>getSysParam</span> <span class='layout'>(</span><span class='varid'>reverse</span> <span class='varop'>.</span> <span class='varid'>xio_errorMsgList</span><span class='layout'>)</span>		<span class='comment'>-- reverse the list of errors</span>+<a name="line-528"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-529"></a>      <span class='varid'>clearErrorMsgList</span>					<span class='comment'>-- clear the error list in the system state</span>+<a name="line-530"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-531"></a>      <span class='varid'>arrL</span> <span class='varid'>id</span>+<a name="line-532"></a>+<a name="line-533"></a><a name="clearErrorMsgList"></a><span class='definition'>clearErrorMsgList</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-534"></a><span class='definition'>clearErrorMsgList</span>+<a name="line-535"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysParam</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='keyword'>_</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_errorMsgList</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span> <span class='layout'>}</span> <span class='layout'>)</span>+<a name="line-536"></a>+<a name="line-537"></a><a name="addToErrorMsgList"></a><span class='definition'>addToErrorMsgList</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-538"></a><span class='definition'>addToErrorMsgList</span>+<a name="line-539"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysParam</span> <span class='varid'>cf</span>+<a name="line-540"></a>    <span class='keyword'>where</span>+<a name="line-541"></a>    <span class='varid'>cf</span> <span class='varid'>t</span> <span class='varid'>s</span> <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>xio_errorMsgCollect</span> <span class='varid'>s</span>+<a name="line-542"></a>	     <span class='keyword'>then</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_errorMsgList</span> <span class='keyglyph'>=</span> <span class='varid'>t</span> <span class='conop'>:</span> <span class='varid'>xio_errorMsgList</span> <span class='varid'>s</span> <span class='layout'>}</span>+<a name="line-543"></a>	     <span class='keyword'>else</span> <span class='varid'>s</span>+<a name="line-544"></a>+<a name="line-545"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-546"></a>+<a name="line-547"></a><span class='comment'>-- |</span>+<a name="line-548"></a><span class='comment'>-- filter error messages from input trees and issue errors</span>+<a name="line-549"></a>+<a name="line-550"></a><a name="filterErrorMsg"></a><span class='definition'>filterErrorMsg</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-551"></a><span class='definition'>filterErrorMsg</span>+<a name="line-552"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>setErrMsgStatus</span>+<a name="line-553"></a>	<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-554"></a>	<span class='varid'>sysErrorMsg</span>+<a name="line-555"></a>	<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-556"></a>	<span class='varid'>addToErrorMsgList</span>+<a name="line-557"></a>	<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-558"></a>	<span class='varid'>none</span>+<a name="line-559"></a>      <span class='layout'>)</span>+<a name="line-560"></a>      <span class='varop'>`when`</span>+<a name="line-561"></a>      <span class='varid'>isError</span>+<a name="line-562"></a>+<a name="line-563"></a><span class='comment'>-- | generate a warnig message</span>+<a name="line-564"></a>+<a name="line-565"></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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-566"></a><span class='definition'>issueWarn</span> <span class='varid'>msg</span>		<span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span><span class='varid'>warn</span> <span class='varid'>msg</span>  <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>filterErrorMsg</span><span class='layout'>)</span>+<a name="line-567"></a>+<a name="line-568"></a><a name="issueErr"></a><span class='comment'>-- | generate an error message</span>+<a name="line-569"></a><span class='definition'>issueErr</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-570"></a><span class='definition'>issueErr</span> <span class='varid'>msg</span>		<span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span><span class='varid'>err</span> <span class='varid'>msg</span>   <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>filterErrorMsg</span><span class='layout'>)</span>+<a name="line-571"></a>+<a name="line-572"></a><span class='comment'>-- | generate a fatal error message, e.g. document not found</span>+<a name="line-573"></a>+<a name="line-574"></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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-575"></a><span class='definition'>issueFatal</span> <span class='varid'>msg</span>		<span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span><span class='varid'>fatal</span> <span class='varid'>msg</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>filterErrorMsg</span><span class='layout'>)</span>+<a name="line-576"></a>+<a name="line-577"></a><span class='comment'>-- |</span>+<a name="line-578"></a><span class='comment'>-- add the error level and the module where the error occured</span>+<a name="line-579"></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-580"></a><span class='comment'>-- called by 'setDocumentStatusFromSystemState' when the system state indicates an error</span>+<a name="line-581"></a>+<a name="line-582"></a><a name="setDocumentStatus"></a><span class='definition'>setDocumentStatus</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'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-583"></a><span class='definition'>setDocumentStatus</span> <span class='varid'>level</span> <span class='varid'>msg</span>+<a name="line-584"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>addAttrl</span> <span class='layout'>(</span> <span class='varid'>sattr</span> <span class='varid'>a_status</span> <span class='layout'>(</span><span class='varid'>show</span> <span class='varid'>level</span><span class='layout'>)</span>+<a name="line-585"></a>		   <span class='varop'>&lt;+&gt;</span>+<a name="line-586"></a>		   <span class='varid'>sattr</span> <span class='varid'>a_module</span> <span class='varid'>msg</span>+<a name="line-587"></a>		 <span class='layout'>)</span>+<a name="line-588"></a>	<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-589"></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-590"></a>	  <span class='keyword'>then</span> <span class='varid'>setChildren</span> <span class='conid'>[]</span>+<a name="line-591"></a>	  <span class='keyword'>else</span> <span class='varid'>this</span>+<a name="line-592"></a>	<span class='layout'>)</span>+<a name="line-593"></a>      <span class='layout'>)</span>+<a name="line-594"></a>      <span class='varop'>`when`</span>+<a name="line-595"></a>      <span class='varid'>isRoot</span>+<a name="line-596"></a>+<a name="line-597"></a><span class='comment'>-- |</span>+<a name="line-598"></a><span class='comment'>-- check whether the error level attribute in the system state</span>+<a name="line-599"></a><span class='comment'>-- is set to error, in this case the children of the document root are</span>+<a name="line-600"></a><span class='comment'>-- removed and the module name where the error occured and the error level are added as attributes with 'setDocumentStatus'</span>+<a name="line-601"></a><span class='comment'>-- else nothing is changed</span>+<a name="line-602"></a>+<a name="line-603"></a><a name="setDocumentStatusFromSystemState"></a><span class='definition'>setDocumentStatusFromSystemState</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-604"></a><span class='definition'>setDocumentStatusFromSystemState</span> <span class='varid'>msg</span>+<a name="line-605"></a>    <span class='keyglyph'>=</span> <span class='varid'>setStatus</span> <span class='varop'>$&lt;</span> <span class='varid'>getErrStatus</span>+<a name="line-606"></a>    <span class='keyword'>where</span>+<a name="line-607"></a>    <span class='varid'>setStatus</span> <span class='varid'>level</span>+<a name="line-608"></a>	<span class='keyglyph'>|</span> <span class='varid'>level</span> <span class='varop'>&lt;=</span> <span class='varid'>c_warn</span>	<span class='keyglyph'>=</span> <span class='varid'>this</span>+<a name="line-609"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>		<span class='keyglyph'>=</span> <span class='varid'>setDocumentStatus</span> <span class='varid'>level</span> <span class='varid'>msg</span>+<a name="line-610"></a>+<a name="line-611"></a>+<a name="line-612"></a><span class='comment'>-- |</span>+<a name="line-613"></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-614"></a>+<a name="line-615"></a><a name="documentStatusOk"></a><span class='definition'>documentStatusOk</span>	<span class='keyglyph'>::</span> <span class='conid'>ArrowXml</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-616"></a><span class='definition'>documentStatusOk</span>+<a name="line-617"></a>    <span class='keyglyph'>=</span> <span class='varid'>isRoot</span>+<a name="line-618"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-619"></a>      <span class='layout'>(</span> <span class='layout'>(</span><span class='varid'>getAttrValue</span> <span class='varid'>a_status</span>+<a name="line-620"></a>	 <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-621"></a>	 <span class='varid'>isA</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>v</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>null</span> <span class='varid'>v</span> <span class='varop'>||</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>read</span> <span class='varid'>v</span><span class='layout'>)</span><span class='keyglyph'>::</span><span class='conid'>Int</span><span class='layout'>)</span> <span class='varop'>&lt;=</span> <span class='varid'>c_warn</span><span class='layout'>)</span>+<a name="line-622"></a>	<span class='layout'>)</span>+<a name="line-623"></a>	<span class='varop'>`guards`</span>+<a name="line-624"></a>	<span class='varid'>this</span>+<a name="line-625"></a>      <span class='layout'>)</span>+<a name="line-626"></a>+<a name="line-627"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-628"></a>+<a name="line-629"></a><span class='comment'>-- | set the base URI of a document, used e.g. for reading includes, e.g. external entities,</span>+<a name="line-630"></a><span class='comment'>-- the input must be an absolute URI</span>+<a name="line-631"></a>+<a name="line-632"></a><a name="setBaseURI"></a><span class='definition'>setBaseURI</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>String</span> <span class='conid'>String</span>+<a name="line-633"></a><span class='definition'>setBaseURI</span>+<a name="line-634"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysParam</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>b</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_baseURI</span> <span class='keyglyph'>=</span> <span class='varid'>b</span> <span class='layout'>}</span> <span class='layout'>)</span>+<a name="line-635"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-636"></a>      <span class='varid'>traceString</span> <span class='num'>2</span> <span class='layout'>(</span><span class='layout'>(</span><span class='str'>"setBaseURI: new base URI is "</span> <span class='varop'>++</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>show</span><span class='layout'>)</span>+<a name="line-637"></a>+<a name="line-638"></a><span class='comment'>-- | read the base URI from the globale state</span>+<a name="line-639"></a>+<a name="line-640"></a><a name="getBaseURI"></a><span class='definition'>getBaseURI</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>String</span>+<a name="line-641"></a><span class='definition'>getBaseURI</span>+<a name="line-642"></a>    <span class='keyglyph'>=</span> <span class='varid'>getSysParam</span> <span class='varid'>xio_baseURI</span>+<a name="line-643"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-644"></a>      <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>getDefaultBaseURI</span>+<a name="line-645"></a>	  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-646"></a>	  <span class='varid'>setBaseURI</span>		+<a name="line-647"></a>	  <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-648"></a>	  <span class='varid'>getBaseURI</span>+<a name="line-649"></a>	<span class='layout'>)</span>+<a name="line-650"></a>	<span class='varop'>`when`</span>+<a name="line-651"></a>	<span class='varid'>isA</span> <span class='varid'>null</span>				<span class='comment'>-- set and get it, if not yet done</span>+<a name="line-652"></a>      <span class='layout'>)</span>+<a name="line-653"></a>+<a name="line-654"></a><span class='comment'>-- | change the base URI with a possibly relative URI, can be used for</span>+<a name="line-655"></a><span class='comment'>-- evaluating the xml:base attribute. Returns the new absolute base URI.</span>+<a name="line-656"></a><span class='comment'>-- Fails, if input is not parsable with parseURIReference</span>+<a name="line-657"></a><span class='comment'>--</span>+<a name="line-658"></a><span class='comment'>-- see also: 'setBaseURI', 'mkAbsURI'</span>+<a name="line-659"></a>+<a name="line-660"></a><a name="changeBaseURI"></a><span class='definition'>changeBaseURI</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>String</span> <span class='conid'>String</span>+<a name="line-661"></a><span class='definition'>changeBaseURI</span>+<a name="line-662"></a>    <span class='keyglyph'>=</span> <span class='varid'>mkAbsURI</span>+<a name="line-663"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-664"></a>      <span class='varid'>setBaseURI</span>+<a name="line-665"></a>+<a name="line-666"></a><span class='comment'>-- | set the default base URI, if parameter is null, the system base (@ file:\/\/\/\&lt;cwd\&gt;\/ @) is used,</span>+<a name="line-667"></a><span class='comment'>-- else the parameter, must be called before any document is read</span>+<a name="line-668"></a>+<a name="line-669"></a><a name="setDefaultBaseURI"></a><span class='definition'>setDefaultBaseURI</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>String</span>+<a name="line-670"></a><span class='definition'>setDefaultBaseURI</span> <span class='varid'>base</span>+<a name="line-671"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>base</span>+<a name="line-672"></a>	<span class='keyword'>then</span> <span class='varid'>arrIO</span> <span class='varid'>getDir</span>+<a name="line-673"></a>	<span class='keyword'>else</span> <span class='varid'>constA</span> <span class='varid'>base</span>+<a name="line-674"></a>      <span class='layout'>)</span>+<a name="line-675"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-676"></a>      <span class='varid'>changeSysParam</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>b</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_defaultBaseURI</span> <span class='keyglyph'>=</span> <span class='varid'>b</span> <span class='layout'>}</span> <span class='layout'>)</span>+<a name="line-677"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-678"></a>      <span class='varid'>traceString</span> <span class='num'>2</span> <span class='layout'>(</span><span class='layout'>(</span><span class='str'>"setDefaultBaseURI: new default base URI is "</span> <span class='varop'>++</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>show</span><span class='layout'>)</span>+<a name="line-679"></a>    <span class='keyword'>where</span>+<a name="line-680"></a>    <span class='varid'>getDir</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-681"></a>	       <span class='varid'>cwd</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getCurrentDirectory</span>+<a name="line-682"></a>	       <span class='varid'>return</span> <span class='layout'>(</span><span class='str'>"file://"</span> <span class='varop'>++</span> <span class='varid'>normalize</span> <span class='varid'>cwd</span> <span class='varop'>++</span> <span class='str'>"/"</span><span class='layout'>)</span>+<a name="line-683"></a>+<a name="line-684"></a>    <span class='comment'>-- under Windows getCurrentDirectory returns something like: "c:\path\to\file"</span>+<a name="line-685"></a>    <span class='comment'>-- backslaches are not allowed in URIs and paths must start with a /</span>+<a name="line-686"></a>    <span class='comment'>-- so this is transformed into "/c:/path/to/file"</span>+<a name="line-687"></a>+<a name="line-688"></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-689"></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-690"></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-691"></a>    <span class='varid'>normalize</span> <span class='varid'>wd'</span>+<a name="line-692"></a>	<span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='varid'>escapeNonUriChar</span> <span class='varid'>wd'</span>+<a name="line-693"></a>				 +<a name="line-694"></a>    <span class='varid'>win32ToUriChar</span> <span class='chr'>'\\'</span> <span class='keyglyph'>=</span> <span class='str'>"/"</span>+<a name="line-695"></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-696"></a>+<a name="line-697"></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>+<a name="line-698"></a>+<a name="line-699"></a>+<a name="line-700"></a><span class='comment'>-- | get the default base URI</span>+<a name="line-701"></a>+<a name="line-702"></a><a name="getDefaultBaseURI"></a><span class='definition'>getDefaultBaseURI</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>String</span>+<a name="line-703"></a><span class='definition'>getDefaultBaseURI</span>+<a name="line-704"></a>    <span class='keyglyph'>=</span> <span class='varid'>getSysParam</span> <span class='varid'>xio_defaultBaseURI</span>		<span class='comment'>-- read default uri in system  state</span>+<a name="line-705"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-706"></a>      <span class='layout'>(</span> <span class='varid'>setDefaultBaseURI</span> <span class='str'>""</span>			<span class='comment'>-- set the default uri in system state</span>+<a name="line-707"></a>	<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-708"></a>	<span class='varid'>getDefaultBaseURI</span> <span class='layout'>)</span> <span class='varop'>`when`</span> <span class='varid'>isA</span> <span class='varid'>null</span>	<span class='comment'>-- when uri not yet set</span>+<a name="line-709"></a>+<a name="line-710"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-711"></a>+<a name="line-712"></a><span class='comment'>-- | remember base uri, run an arrow and restore the base URI, used with external entity substitution</span>+<a name="line-713"></a>+<a name="line-714"></a><a name="runInLocalURIContext"></a><span class='definition'>runInLocalURIContext</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>c</span>+<a name="line-715"></a><span class='definition'>runInLocalURIContext</span> <span class='varid'>f</span>+<a name="line-716"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>getBaseURI</span> <span class='varop'>&amp;&amp;&amp;</span> <span class='varid'>this</span> <span class='layout'>)</span>+<a name="line-717"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-718"></a>      <span class='layout'>(</span> <span class='varid'>this</span> <span class='varop'>***</span> <span class='varid'>listA</span> <span class='varid'>f</span> <span class='layout'>)</span>+<a name="line-719"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-720"></a>      <span class='layout'>(</span> <span class='varid'>setBaseURI</span> <span class='varop'>***</span> <span class='varid'>this</span> <span class='layout'>)</span>+<a name="line-721"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-722"></a>      <span class='varid'>arrL</span> <span class='varid'>snd</span>+<a name="line-723"></a>+<a name="line-724"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-725"></a>+<a name="line-726"></a><span class='comment'>-- | set the global trace level</span>+<a name="line-727"></a>+<a name="line-728"></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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-729"></a><span class='definition'>setTraceLevel</span> <span class='varid'>l</span>+<a name="line-730"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysParam</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='keyword'>_</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span> <span class='layout'>{</span> <span class='varid'>xio_trace</span> <span class='keyglyph'>=</span> <span class='varid'>l</span> <span class='layout'>}</span> <span class='layout'>)</span>+<a name="line-731"></a>+<a name="line-732"></a><span class='comment'>-- | read the global trace level</span>+<a name="line-733"></a>+<a name="line-734"></a><a name="getTraceLevel"></a><span class='definition'>getTraceLevel</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>Int</span>+<a name="line-735"></a><span class='definition'>getTraceLevel</span>+<a name="line-736"></a>    <span class='keyglyph'>=</span> <span class='varid'>getSysParam</span> <span class='varid'>xio_trace</span>+<a name="line-737"></a>+<a name="line-738"></a><span class='comment'>-- | run an arrow with a given trace level, the old trace level is restored after the arrow execution</span>+<a name="line-739"></a>+<a name="line-740"></a><a name="withTraceLevel"></a><span class='definition'>withTraceLevel</span>	<span class='keyglyph'>::</span> <span class='conid'>Int</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>c</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>c</span>+<a name="line-741"></a><span class='definition'>withTraceLevel</span> <span class='varid'>level</span> <span class='varid'>f</span>+<a name="line-742"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>getTraceLevel</span>       <span class='varop'>&amp;&amp;&amp;</span> <span class='varid'>this</span> <span class='layout'>)</span>+<a name="line-743"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-744"></a>      <span class='layout'>(</span> <span class='varid'>setTraceLevel</span> <span class='varid'>level</span> <span class='varop'>***</span> <span class='varid'>listA</span> <span class='varid'>f</span> <span class='layout'>)</span>+<a name="line-745"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-746"></a>      <span class='layout'>(</span> <span class='varid'>restoreTraceLevel</span>   <span class='varop'>***</span> <span class='varid'>this</span> <span class='layout'>)</span>+<a name="line-747"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-748"></a>      <span class='varid'>arrL</span> <span class='varid'>snd</span>+<a name="line-749"></a>    <span class='keyword'>where</span>+<a name="line-750"></a>    <span class='varid'>restoreTraceLevel</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>Int</span> <span class='conid'>Int</span>+<a name="line-751"></a>    <span class='varid'>restoreTraceLevel</span>+<a name="line-752"></a>	<span class='keyglyph'>=</span> <span class='varid'>setTraceLevel</span> <span class='varop'>$&lt;</span> <span class='varid'>this</span>+<a name="line-753"></a>+<a name="line-754"></a><span class='comment'>-- | apply a trace arrow and issue message to stderr</span>+<a name="line-755"></a>+<a name="line-756"></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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-757"></a><span class='definition'>trace</span> <span class='varid'>level</span> <span class='varid'>trc</span>+<a name="line-758"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>trc</span>+<a name="line-759"></a>		<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-760"></a>		<span class='varid'>arrIO</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span> <span class='keyword'>do</span>+<a name="line-761"></a>				<span class='varid'>hPutStrLn</span> <span class='varid'>stderr</span> <span class='varid'>s</span>+<a name="line-762"></a>				<span class='varid'>hFlush</span> <span class='varid'>stderr</span>+<a name="line-763"></a>			      <span class='layout'>)</span>+<a name="line-764"></a>		      <span class='layout'>)</span>+<a name="line-765"></a>	      <span class='layout'>)</span>+<a name="line-766"></a>      <span class='varop'>`when`</span> <span class='layout'>(</span> <span class='varid'>getTraceLevel</span>+<a name="line-767"></a>	       <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-768"></a>	       <span class='varid'>isA</span> <span class='layout'>(</span><span class='varop'>&gt;=</span> <span class='varid'>level</span><span class='layout'>)</span>+<a name="line-769"></a>	     <span class='layout'>)</span>+<a name="line-770"></a>+<a name="line-771"></a><a name="traceMsg"></a><span class='comment'>-- | issue a string message as trace </span>+<a name="line-772"></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'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-773"></a><span class='definition'>traceMsg</span> <span class='varid'>level</span> <span class='varid'>msg</span>+<a name="line-774"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>trace</span> <span class='varid'>level</span> <span class='varop'>$</span>+<a name="line-775"></a>		<span class='varid'>constA</span> <span class='layout'>(</span><span class='chr'>'-'</span> <span class='conop'>:</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'>msg</span><span class='layout'>)</span>+<a name="line-776"></a>	      <span class='layout'>)</span>+<a name="line-777"></a>+<a name="line-778"></a><a name="traceString"></a><span class='comment'>-- | issue the string input of an arrow</span>+<a name="line-779"></a><span class='definition'>traceString</span>	<span class='keyglyph'>::</span> <span class='conid'>Int</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'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>String</span> <span class='conid'>String</span>+<a name="line-780"></a><span class='definition'>traceString</span> <span class='varid'>level</span> <span class='varid'>f</span>+<a name="line-781"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span><span class='varid'>applyA</span> <span class='layout'>(</span><span class='varid'>arr</span> <span class='varid'>f</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>arr</span> <span class='layout'>(</span><span class='varid'>traceMsg</span> <span class='varid'>level</span><span class='layout'>)</span><span class='layout'>)</span><span class='layout'>)</span>+<a name="line-782"></a>+<a name="line-783"></a><span class='comment'>-- | issue the source representation of a document if trace level &gt;= 3</span>+<a name="line-784"></a><span class='comment'>--</span>+<a name="line-785"></a><span class='comment'>-- for better readability the source is formated with indentDoc</span>+<a name="line-786"></a>+<a name="line-787"></a><a name="traceSource"></a><span class='definition'>traceSource</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-788"></a><span class='definition'>traceSource</span> +<a name="line-789"></a>    <span class='keyglyph'>=</span> <span class='varid'>trace</span> <span class='num'>3</span> <span class='varop'>$</span>+<a name="line-790"></a>      <span class='varid'>xshow</span>+<a name="line-791"></a>      <span class='layout'>(</span> <span class='varid'>choiceA</span> <span class='keyglyph'>[</span> <span class='varid'>isRoot</span> <span class='conop'>:-&gt;</span> <span class='layout'>(</span> <span class='varid'>indentDoc</span>+<a name="line-792"></a>			       <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-793"></a>			       <span class='varid'>getChildren</span>+<a name="line-794"></a>			     <span class='layout'>)</span>+<a name="line-795"></a>		<span class='layout'>,</span> <span class='varid'>isElem</span> <span class='conop'>:-&gt;</span> <span class='layout'>(</span> <span class='varid'>root</span> <span class='conid'>[]</span> <span class='keyglyph'>[</span><span class='varid'>this</span><span class='keyglyph'>]</span>+<a name="line-796"></a>			       <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>indentDoc</span>+<a name="line-797"></a>			       <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>getChildren</span>+<a name="line-798"></a>			       <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>isElem</span>+<a name="line-799"></a>			     <span class='layout'>)</span>+<a name="line-800"></a>		<span class='layout'>,</span> <span class='varid'>this</span>   <span class='conop'>:-&gt;</span> <span class='varid'>this</span>+<a name="line-801"></a>		<span class='keyglyph'>]</span>+<a name="line-802"></a>      <span class='layout'>)</span>+<a name="line-803"></a>+<a name="line-804"></a><a name="traceTree"></a><span class='comment'>-- | issue the tree representation of a document if trace level &gt;= 4</span>+<a name="line-805"></a><span class='definition'>traceTree</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-806"></a><span class='definition'>traceTree</span>+<a name="line-807"></a>    <span class='keyglyph'>=</span> <span class='varid'>trace</span> <span class='num'>4</span> <span class='varop'>$</span>+<a name="line-808"></a>      <span class='varid'>xshow</span> <span class='layout'>(</span> <span class='varid'>treeRepOfXmlDoc</span>+<a name="line-809"></a>	      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-810"></a>	      <span class='varid'>addHeadlineToXmlDoc</span>+<a name="line-811"></a>	      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-812"></a>	      <span class='varid'>getChildren</span>+<a name="line-813"></a>	    <span class='layout'>)</span>+<a name="line-814"></a>+<a name="line-815"></a><span class='comment'>-- | trace a main computation step</span>+<a name="line-816"></a><span class='comment'>-- issue a message when trace level &gt;= 1, issue document source if level &gt;= 3, issue tree when level is &gt;= 4</span>+<a name="line-817"></a>+<a name="line-818"></a><a name="traceDoc"></a><span class='definition'>traceDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>XmlTree</span> <span class='conid'>XmlTree</span>+<a name="line-819"></a><span class='definition'>traceDoc</span> <span class='varid'>msg</span>+<a name="line-820"></a>    <span class='keyglyph'>=</span> <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='varid'>msg</span>+<a name="line-821"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-822"></a>      <span class='varid'>traceSource</span>+<a name="line-823"></a>      <span class='varop'>&gt;&gt;&gt;</span>+<a name="line-824"></a>      <span class='varid'>traceTree</span>+<a name="line-825"></a>+<a name="line-826"></a><span class='comment'>-- | trace the global state</span>+<a name="line-827"></a>+<a name="line-828"></a><a name="traceState"></a><span class='definition'>traceState</span>	<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-829"></a><span class='definition'>traceState</span>+<a name="line-830"></a>    <span class='keyglyph'>=</span> <span class='varid'>perform</span> <span class='layout'>(</span> <span class='varid'>xshow</span> <span class='layout'>(</span> <span class='layout'>(</span><span class='varid'>getAllParams</span> <span class='varop'>&gt;&gt;.</span> <span class='varid'>concat</span><span class='layout'>)</span>+<a name="line-831"></a>			<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-832"></a>			<span class='varid'>applyA</span> <span class='layout'>(</span><span class='varid'>arr</span> <span class='varid'>formatParam</span><span class='layout'>)</span>+<a name="line-833"></a>		      <span class='layout'>)</span>+<a name="line-834"></a>		<span class='varop'>&gt;&gt;&gt;</span>+<a name="line-835"></a>		<span class='varid'>traceString</span> <span class='num'>2</span> <span class='layout'>(</span><span class='str'>"global state:\n"</span> <span class='varop'>++</span><span class='layout'>)</span>+<a name="line-836"></a>	      <span class='layout'>)</span>+<a name="line-837"></a>      <span class='keyword'>where</span>+<a name="line-838"></a>      <span class='comment'>-- formatParam	:: (String, XmlTrees) -&gt; IOStateArrow s b1 XmlTree</span>+<a name="line-839"></a>      <span class='varid'>formatParam</span> <span class='layout'>(</span><span class='varid'>n</span><span class='layout'>,</span> <span class='varid'>v</span><span class='layout'>)</span>+<a name="line-840"></a>	  <span class='keyglyph'>=</span> <span class='varid'>mkelem</span> <span class='str'>"param"</span> <span class='keyglyph'>[</span><span class='varid'>sattr</span> <span class='str'>"name"</span> <span class='varid'>n</span><span class='keyglyph'>]</span> <span class='keyglyph'>[</span><span class='varid'>arrL</span> <span class='layout'>(</span><span class='varid'>const</span> <span class='varid'>v</span><span class='layout'>)</span><span class='keyglyph'>]</span> <span class='varop'>&lt;+&gt;</span> <span class='varid'>txt</span> <span class='str'>"\n"</span>+<a name="line-841"></a>+<a name="line-842"></a><span class='comment'>-- ----------------------------------------------------------</span>+<a name="line-843"></a>+<a name="line-844"></a><span class='comment'>-- | compute the absolut URI for a given URI and a base URI</span>+<a name="line-845"></a>+<a name="line-846"></a><a name="expandURIString"></a><span class='definition'>expandURIString</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'>Maybe</span> <span class='conid'>String</span>+<a name="line-847"></a><span class='definition'>expandURIString</span> <span class='varid'>uri</span> <span class='varid'>base</span>+<a name="line-848"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-849"></a>      <span class='varid'>base'</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>parseURIReference</span> <span class='varid'>base</span>+<a name="line-850"></a>      <span class='varid'>uri'</span>  <span class='keyglyph'>&lt;-</span> <span class='varid'>parseURIReference</span> <span class='varid'>uri</span>+<a name="line-851"></a>      <span class='varid'>abs'</span>  <span class='keyglyph'>&lt;-</span> <span class='varid'>nonStrictRelativeTo</span> <span class='varid'>uri'</span> <span class='varid'>base'</span>+<a name="line-852"></a>      <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>show</span> <span class='varid'>abs'</span>+<a name="line-853"></a>+<a name="line-854"></a><span class='comment'>-- | arrow variant of 'expandURIString', fails if 'expandURIString' returns Nothing</span>+<a name="line-855"></a>+<a name="line-856"></a><a name="expandURI"></a><span class='definition'>expandURI</span>		<span class='keyglyph'>::</span> <span class='conid'>ArrowXml</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span> <span class='conid'>String</span>+<a name="line-857"></a><span class='definition'>expandURI</span>+<a name="line-858"></a>    <span class='keyglyph'>=</span> <span class='varid'>arrL</span> <span class='layout'>(</span><span class='varid'>maybeToList</span> <span class='varop'>.</span> <span class='varid'>uncurry</span> <span class='varid'>expandURIString</span><span class='layout'>)</span>+<a name="line-859"></a>+<a name="line-860"></a><span class='comment'>-- | arrow for expanding an input URI into an absolute URI using global base URI, fails if input is not a legal URI</span>+<a name="line-861"></a>+<a name="line-862"></a><a name="mkAbsURI"></a><span class='definition'>mkAbsURI</span>		<span class='keyglyph'>::</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='conid'>String</span> <span class='conid'>String</span>+<a name="line-863"></a><span class='definition'>mkAbsURI</span>+<a name="line-864"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>this</span> <span class='varop'>&amp;&amp;&amp;</span> <span class='varid'>getBaseURI</span> <span class='layout'>)</span> <span class='varop'>&gt;&gt;&gt;</span> <span class='varid'>expandURI</span>+<a name="line-865"></a>+<a name="line-866"></a><span class='comment'>-- | arrow for selecting the scheme (protocol) of the URI, fails if input is not a legal URI.</span>+<a name="line-867"></a><span class='comment'>--</span>+<a name="line-868"></a><span class='comment'>-- See Network.URI for URI components</span>+<a name="line-869"></a>+<a name="line-870"></a><a name="getSchemeFromURI"></a><span class='definition'>getSchemeFromURI</span>	<span class='keyglyph'>::</span> <span class='conid'>ArrowList</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>String</span>+<a name="line-871"></a><span class='definition'>getSchemeFromURI</span>	<span class='keyglyph'>=</span> <span class='varid'>getPartFromURI</span> <span class='varid'>scheme</span>+<a name="line-872"></a>    <span class='keyword'>where</span>+<a name="line-873"></a>    <span class='varid'>scheme</span> <span class='keyglyph'>=</span> <span class='varid'>init</span> <span class='varop'>.</span> <span class='varid'>uriScheme</span>+<a name="line-874"></a>+<a name="line-875"></a><span class='comment'>-- | arrow for selecting the registered name (host) of the URI, fails if input is not a legal URI</span>+<a name="line-876"></a>+<a name="line-877"></a><a name="getRegNameFromURI"></a><span class='definition'>getRegNameFromURI</span>	<span class='keyglyph'>::</span> <span class='conid'>ArrowList</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>String</span>+<a name="line-878"></a><span class='definition'>getRegNameFromURI</span>	<span class='keyglyph'>=</span> <span class='varid'>getPartFromURI</span> <span class='varid'>host</span>+<a name="line-879"></a>    <span class='keyword'>where</span>+<a name="line-880"></a>    <span class='varid'>host</span> <span class='keyglyph'>=</span> <span class='varid'>maybe</span> <span class='str'>""</span> <span class='varid'>uriRegName</span> <span class='varop'>.</span> <span class='varid'>uriAuthority</span>+<a name="line-881"></a>+<a name="line-882"></a><span class='comment'>-- | arrow for selecting the port number of the URI without leading \':\', fails if input is not a legal URI</span>+<a name="line-883"></a>+<a name="line-884"></a><a name="getPortFromURI"></a><span class='definition'>getPortFromURI</span>		<span class='keyglyph'>::</span> <span class='conid'>ArrowList</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>String</span>+<a name="line-885"></a><span class='definition'>getPortFromURI</span>		<span class='keyglyph'>=</span> <span class='varid'>getPartFromURI</span> <span class='varid'>port</span>+<a name="line-886"></a>    <span class='keyword'>where</span>+<a name="line-887"></a>    <span class='varid'>port</span> <span class='keyglyph'>=</span> <span class='varid'>dropWhile</span> <span class='layout'>(</span><span class='varop'>==</span><span class='chr'>':'</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>maybe</span> <span class='str'>""</span> <span class='varid'>uriPort</span> <span class='varop'>.</span> <span class='varid'>uriAuthority</span>+<a name="line-888"></a>+<a name="line-889"></a><span class='comment'>-- | arrow for selecting the user info of the URI without trailing \'\@\', fails if input is not a legal URI</span>+<a name="line-890"></a>+<a name="line-891"></a><a name="getUserInfoFromURI"></a><span class='definition'>getUserInfoFromURI</span>		<span class='keyglyph'>::</span> <span class='conid'>ArrowList</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>String</span>+<a name="line-892"></a><span class='definition'>getUserInfoFromURI</span>		<span class='keyglyph'>=</span> <span class='varid'>getPartFromURI</span> <span class='varid'>ui</span>+<a name="line-893"></a>    <span class='keyword'>where</span>+<a name="line-894"></a>    <span class='varid'>ui</span> <span class='keyglyph'>=</span> <span class='varid'>reverse</span> <span class='varop'>.</span> <span class='varid'>dropWhile</span> <span class='layout'>(</span><span class='varop'>==</span><span class='chr'>'@'</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>reverse</span> <span class='varop'>.</span> <span class='varid'>maybe</span> <span class='str'>""</span> <span class='varid'>uriUserInfo</span> <span class='varop'>.</span> <span class='varid'>uriAuthority</span>+<a name="line-895"></a>+<a name="line-896"></a><span class='comment'>-- | arrow for computing the path component of an URI, fails if input is not a legal URI</span>+<a name="line-897"></a>+<a name="line-898"></a><a name="getPathFromURI"></a><span class='definition'>getPathFromURI</span>		<span class='keyglyph'>::</span> <span class='conid'>ArrowList</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>String</span>+<a name="line-899"></a><span class='definition'>getPathFromURI</span>		<span class='keyglyph'>=</span> <span class='varid'>getPartFromURI</span> <span class='varid'>uriPath</span>+<a name="line-900"></a>+<a name="line-901"></a><span class='comment'>-- | arrow for computing the query component of an URI, fails if input is not a legal URI</span>+<a name="line-902"></a>+<a name="line-903"></a><a name="getQueryFromURI"></a><span class='definition'>getQueryFromURI</span>		<span class='keyglyph'>::</span> <span class='conid'>ArrowList</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>String</span>+<a name="line-904"></a><span class='definition'>getQueryFromURI</span>		<span class='keyglyph'>=</span> <span class='varid'>getPartFromURI</span> <span class='varid'>uriQuery</span>+<a name="line-905"></a>+<a name="line-906"></a><span class='comment'>-- | arrow for computing the fragment component of an URI, fails if input is not a legal URI</span>+<a name="line-907"></a>+<a name="line-908"></a><a name="getFragmentFromURI"></a><span class='definition'>getFragmentFromURI</span>	<span class='keyglyph'>::</span> <span class='conid'>ArrowList</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>String</span>+<a name="line-909"></a><span class='definition'>getFragmentFromURI</span>	<span class='keyglyph'>=</span> <span class='varid'>getPartFromURI</span> <span class='varid'>uriFragment</span>+<a name="line-910"></a>+<a name="line-911"></a><span class='comment'>-- | arrow for computing the path component of an URI, fails if input is not a legal URI</span>+<a name="line-912"></a>+<a name="line-913"></a><a name="getPartFromURI"></a><span class='definition'>getPartFromURI</span>		<span class='keyglyph'>::</span> <span class='conid'>ArrowList</span> <span class='varid'>a</span> <span class='keyglyph'>=&gt;</span> <span class='layout'>(</span><span class='conid'>URI</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span> <span class='conid'>String</span> <span class='conid'>String</span>+<a name="line-914"></a><span class='definition'>getPartFromURI</span> <span class='varid'>sel</span>+<a name="line-915"></a>    <span class='keyglyph'>=</span> <span class='varid'>arrL</span> <span class='layout'>(</span><span class='varid'>maybeToList</span> <span class='varop'>.</span> <span class='varid'>getPart</span><span class='layout'>)</span>+<a name="line-916"></a>      <span class='keyword'>where</span>+<a name="line-917"></a>      <span class='varid'>getPart</span> <span class='varid'>s</span> <span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-918"></a>		  <span class='varid'>uri</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>parseURIReference</span> <span class='varid'>s</span>+<a name="line-919"></a>		  <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>sel</span> <span class='varid'>uri</span><span class='layout'>)</span>+<a name="line-920"></a>+<a name="line-921"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-922"></a>+<a name="line-923"></a><span class='comment'>-- | set the table mapping of file extensions to mime types in the system state</span>+<a name="line-924"></a><span class='comment'>--</span>+<a name="line-925"></a><span class='comment'>-- Default table is defined in 'Text.XML.HXT.DOM.MimeTypeDefaults'.</span>+<a name="line-926"></a><span class='comment'>-- This table is used when reading loacl files, (file: protocol) to determine the mime type</span>+<a name="line-927"></a>+<a name="line-928"></a><a name="setMimeTypeTable"></a><span class='definition'>setMimeTypeTable</span>	<span class='keyglyph'>::</span> <span class='conid'>MimeTypeTable</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-929"></a><span class='definition'>setMimeTypeTable</span> <span class='varid'>mtt</span>+<a name="line-930"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysParam</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='keyword'>_</span> <span class='varid'>s</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>s</span> <span class='layout'>{</span><span class='varid'>xio_mimeTypes</span> <span class='keyglyph'>=</span> <span class='varid'>mtt</span><span class='layout'>}</span><span class='layout'>)</span>+<a name="line-931"></a>+<a name="line-932"></a><span class='comment'>-- | set the table mapping of file extensions to mime types by an external config file</span>+<a name="line-933"></a><span class='comment'>--</span>+<a name="line-934"></a><span class='comment'>-- The config file must follow the conventions of /etc/mime.types on a debian linux system,</span>+<a name="line-935"></a><span class='comment'>-- that means all empty lines and all lines starting with a # are ignored. The other lines</span>+<a name="line-936"></a><span class='comment'>-- must consist of a mime type followed by a possible empty list of extensions.</span>+<a name="line-937"></a><span class='comment'>-- The list of extenstions and mime types overwrites the default list in the system state</span>+<a name="line-938"></a><span class='comment'>-- of the IOStateArrow</span>+<a name="line-939"></a>+<a name="line-940"></a><a name="setMimeTypeTableFromFile"></a><span class='definition'>setMimeTypeTableFromFile</span>	<span class='keyglyph'>::</span> <span class='conid'>FilePath</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IOStateArrow</span> <span class='varid'>s</span> <span class='varid'>b</span> <span class='varid'>b</span>+<a name="line-941"></a><span class='definition'>setMimeTypeTableFromFile</span> <span class='varid'>file</span>+<a name="line-942"></a>    <span class='keyglyph'>=</span> <span class='varid'>setMimeTypeTable</span> <span class='varop'>$&lt;</span> <span class='varid'>arrIO0</span> <span class='layout'>(</span> <span class='varid'>readMimeTypeTable</span> <span class='varid'>file</span><span class='layout'>)</span>+<a name="line-943"></a>+<a name="line-944"></a><span class='comment'>-- ------------------------------------------------------------</span> </pre></body> </html>
doc/hdoc/src/Text-XML-HXT-Arrow.html view
@@ -48,30 +48,34 @@ <a name="line-40"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>Pickle</span> <a name="line-41"></a> <a name="line-42"></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'>XSLT</span><span class='varop'>.</span><span class='conid'>XsltArrows</span>-<a name="line-43"></a>    <span class='layout'>)</span>-<a name="line-44"></a><span class='keyword'>where</span>-<a name="line-45"></a>-<a name="line-46"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>ListArrows</span>			<span class='comment'>-- arrow classes</span>+<a name="line-43"></a>+<a name="line-44"></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'>Version</span>+<a name="line-45"></a>    <span class='layout'>)</span>+<a name="line-46"></a><span class='keyword'>where</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'>DOM</span><span class='varop'>.</span><span class='conid'>Interface</span>-<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'>Arrow</span><span class='varop'>.</span><span class='conid'>DocumentInput</span>-<a name="line-50"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>DocumentOutput</span>-<a name="line-51"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>Edit</span>-<a name="line-52"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>GeneralEntitySubstitution</span>-<a name="line-53"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>Namespace</span>-<a name="line-54"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>Pickle</span>-<a name="line-55"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>ProcessDocument</span>-<a name="line-56"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>ReadDocument</span>-<a name="line-57"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>WriteDocument</span>-<a name="line-58"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlArrow</span>-<a name="line-59"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlIOStateArrow</span>-<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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlRegex</span> <span class='conid'>()</span>		<span class='comment'>-- import this "by hand"</span>-<a name="line-61"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>XPath</span>-<a name="line-62"></a><span class='keyword'>import</span> <span class='keyword'>qualified</span>				<span class='comment'>-- just for adding the module to the lib</span>-<a name="line-63"></a>       <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'>Arrow</span><span class='varop'>.</span><span class='conid'>XPathSimple</span> <span class='keyword'>as</span> <span class='conid'>XPS</span> <span class='conid'>()</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'>XSLT</span><span class='varop'>.</span><span class='conid'>XsltArrows</span>+<a name="line-48"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span><span class='varop'>.</span><span class='conid'>ListArrows</span>			<span class='comment'>-- arrow classes</span>+<a name="line-49"></a>+<a name="line-50"></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'>Interface</span>+<a name="line-51"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>DocumentInput</span>+<a name="line-52"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>DocumentOutput</span>+<a name="line-53"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>Edit</span>+<a name="line-54"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>GeneralEntitySubstitution</span>+<a name="line-55"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>Namespace</span>+<a name="line-56"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>Pickle</span>+<a name="line-57"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>ProcessDocument</span>+<a name="line-58"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>ReadDocument</span>+<a name="line-59"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>WriteDocument</span>+<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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlArrow</span>+<a name="line-61"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlIOStateArrow</span>+<a name="line-62"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>XmlRegex</span> <span class='conid'>()</span>		<span class='comment'>-- import this "by hand"</span>+<a name="line-63"></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'>Arrow</span><span class='varop'>.</span><span class='conid'>XPath</span>+<a name="line-64"></a><span class='keyword'>import</span> <span class='keyword'>qualified</span>				<span class='comment'>-- just for adding the module to the lib</span>+<a name="line-65"></a>       <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'>Arrow</span><span class='varop'>.</span><span class='conid'>XPathSimple</span> <span class='keyword'>as</span> <span class='conid'>XPS</span> <span class='conid'>()</span> <a name="line-66"></a>-<a name="line-67"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-67"></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'>XSLT</span><span class='varop'>.</span><span class='conid'>XsltArrows</span>+<a name="line-68"></a>+<a name="line-69"></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'>Version</span>+<a name="line-70"></a>+<a name="line-71"></a><span class='comment'>-- ------------------------------------------------------------</span> </pre></body> </html>
doc/hdoc/src/Text-XML-HXT-DOM-Interface.html view
@@ -31,16 +31,18 @@ <a name="line-23"></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-24"></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'>Util</span> <a name="line-25"></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-26"></a>    <span class='layout'>)</span>-<a name="line-27"></a><span class='keyword'>where</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'>XmlKeywords</span>		<span class='comment'>-- constants</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'>TypeDefs</span>		<span class='comment'>-- XML Tree types</span>-<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'>NamespacePredicates</span>-<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'>DOM</span><span class='varop'>.</span><span class='conid'>Util</span>-<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'>XmlOptions</span>		<span class='comment'>-- predefined options</span>-<a name="line-34"></a>-<a name="line-35"></a>-<a name="line-36"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-26"></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'>MimeTypes</span>+<a name="line-27"></a>    <span class='layout'>)</span>+<a name="line-28"></a><span class='keyword'>where</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'>DOM</span><span class='varop'>.</span><span class='conid'>XmlKeywords</span>		<span class='comment'>-- constants</span>+<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'>TypeDefs</span>		<span class='comment'>-- XML Tree types</span>+<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'>DOM</span><span class='varop'>.</span><span class='conid'>NamespacePredicates</span>+<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'>Util</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'>XmlOptions</span>		<span class='comment'>-- predefined options</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'>DOM</span><span class='varop'>.</span><span class='conid'>MimeTypes</span>		<span class='comment'>-- mime types related stuff</span>+<a name="line-36"></a>+<a name="line-37"></a>+<a name="line-38"></a><span class='comment'>-- ------------------------------------------------------------</span> </pre></body> </html>
+ doc/hdoc/src/Text-XML-HXT-DOM-MimeTypeDefaults.html view
@@ -0,0 +1,594 @@+<!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'>-- | default mime type table</span>+<a name="line-2"></a><span class='comment'>-- </span>+<a name="line-3"></a><span class='comment'>-- this file is generated from file /etc/mime.types</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'>MimeTypeDefaults</span>+<a name="line-6"></a><span class='keyword'>where</span>+<a name="line-7"></a>+<a name="line-8"></a><span class='comment'>-- | the table with the mapping from file name extensions to mime types</span>+<a name="line-9"></a>+<a name="line-10"></a><a name="mimeTypeDefaults"></a><span class='definition'>mimeTypeDefaults</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'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>+<a name="line-11"></a><span class='definition'>mimeTypeDefaults</span>+<a name="line-12"></a>  <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='layout'>(</span><span class='str'>"123"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.lotus-1-2-3"</span><span class='layout'>)</span>+<a name="line-13"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"3ds"</span><span class='layout'>,</span>	<span class='str'>"image/x-3ds"</span><span class='layout'>)</span>+<a name="line-14"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"3g2"</span><span class='layout'>,</span>	<span class='str'>"video/x-3gpp2"</span><span class='layout'>)</span>+<a name="line-15"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"3gp"</span><span class='layout'>,</span>	<span class='str'>"video/3gpp"</span><span class='layout'>)</span>+<a name="line-16"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"669"</span><span class='layout'>,</span>	<span class='str'>"audio/x-mod"</span><span class='layout'>)</span>+<a name="line-17"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"BAY"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-18"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"BLEND"</span><span class='layout'>,</span>	<span class='str'>"application/x-blender"</span><span class='layout'>)</span>+<a name="line-19"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"BMQ"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-20"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"C"</span><span class='layout'>,</span>	<span class='str'>"text/x-c++src"</span><span class='layout'>)</span>+<a name="line-21"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"CR2"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-22"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"CRW"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-23"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"CS1"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-24"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"CSSL"</span><span class='layout'>,</span>	<span class='str'>"text/css"</span><span class='layout'>)</span>+<a name="line-25"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"DC2"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-26"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"DCR"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-27"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"FFF"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-28"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"K25"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-29"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"KDC"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-30"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"MOS"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-31"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"MRW"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-32"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"NEF"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-33"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"NSV"</span><span class='layout'>,</span>	<span class='str'>"video/x-nsv"</span><span class='layout'>)</span>+<a name="line-34"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ORF"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-35"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"PAR2"</span><span class='layout'>,</span>	<span class='str'>"application/x-par2"</span><span class='layout'>)</span>+<a name="line-36"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"PEF"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-37"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"RAF"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-38"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"RDC"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-39"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"SRF"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-40"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"TTC"</span><span class='layout'>,</span>	<span class='str'>"application/x-font-ttf"</span><span class='layout'>)</span>+<a name="line-41"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"X3F"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-42"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"XM"</span><span class='layout'>,</span>	<span class='str'>"audio/x-mod"</span><span class='layout'>)</span>+<a name="line-43"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"Z"</span><span class='layout'>,</span>	<span class='str'>"application/x-compress"</span><span class='layout'>)</span>+<a name="line-44"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"a"</span><span class='layout'>,</span>	<span class='str'>"application/x-archive"</span><span class='layout'>)</span>+<a name="line-45"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"aac"</span><span class='layout'>,</span>	<span class='str'>"audio/x-aac"</span><span class='layout'>)</span>+<a name="line-46"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"abw"</span><span class='layout'>,</span>	<span class='str'>"application/x-abiword"</span><span class='layout'>)</span>+<a name="line-47"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"abw.CRASHED"</span><span class='layout'>,</span>	<span class='str'>"application/x-abiword"</span><span class='layout'>)</span>+<a name="line-48"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"abw.gz"</span><span class='layout'>,</span>	<span class='str'>"application/x-abiword"</span><span class='layout'>)</span>+<a name="line-49"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ac3"</span><span class='layout'>,</span>	<span class='str'>"audio/ac3"</span><span class='layout'>)</span>+<a name="line-50"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"adb"</span><span class='layout'>,</span>	<span class='str'>"text/x-adasrc"</span><span class='layout'>)</span>+<a name="line-51"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ads"</span><span class='layout'>,</span>	<span class='str'>"text/x-adasrc"</span><span class='layout'>)</span>+<a name="line-52"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"afm"</span><span class='layout'>,</span>	<span class='str'>"application/x-font-afm"</span><span class='layout'>)</span>+<a name="line-53"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ag"</span><span class='layout'>,</span>	<span class='str'>"image/x-applix-graphics"</span><span class='layout'>)</span>+<a name="line-54"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ai"</span><span class='layout'>,</span>	<span class='str'>"application/illustrator"</span><span class='layout'>)</span>+<a name="line-55"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"aif"</span><span class='layout'>,</span>	<span class='str'>"audio/x-aiff"</span><span class='layout'>)</span>+<a name="line-56"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"aif"</span><span class='layout'>,</span>	<span class='str'>"audio/x-aiff"</span><span class='layout'>)</span>+<a name="line-57"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"aifc"</span><span class='layout'>,</span>	<span class='str'>"audio/x-aiff"</span><span class='layout'>)</span>+<a name="line-58"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"aiff"</span><span class='layout'>,</span>	<span class='str'>"audio/x-aiff"</span><span class='layout'>)</span>+<a name="line-59"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"aiff"</span><span class='layout'>,</span>	<span class='str'>"audio/x-aiff"</span><span class='layout'>)</span>+<a name="line-60"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"al"</span><span class='layout'>,</span>	<span class='str'>"application/x-perl"</span><span class='layout'>)</span>+<a name="line-61"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"anim[1-9j]"</span><span class='layout'>,</span>	<span class='str'>"video/x-anim"</span><span class='layout'>)</span>+<a name="line-62"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"aop"</span><span class='layout'>,</span>	<span class='str'>"application/x-frontline"</span><span class='layout'>)</span>+<a name="line-63"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"arj"</span><span class='layout'>,</span>	<span class='str'>"application/x-arj"</span><span class='layout'>)</span>+<a name="line-64"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"as"</span><span class='layout'>,</span>	<span class='str'>"application/x-applix-spreadsheet"</span><span class='layout'>)</span>+<a name="line-65"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"asax"</span><span class='layout'>,</span>	<span class='str'>"application/x-asax"</span><span class='layout'>)</span>+<a name="line-66"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"asc"</span><span class='layout'>,</span>	<span class='str'>"text/plain"</span><span class='layout'>)</span>+<a name="line-67"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ascx"</span><span class='layout'>,</span>	<span class='str'>"application/x-ascx"</span><span class='layout'>)</span>+<a name="line-68"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"asf"</span><span class='layout'>,</span>	<span class='str'>"video/x-ms-asf"</span><span class='layout'>)</span>+<a name="line-69"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ashx"</span><span class='layout'>,</span>	<span class='str'>"application/x-ashx"</span><span class='layout'>)</span>+<a name="line-70"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"asix"</span><span class='layout'>,</span>	<span class='str'>"application/x-asix"</span><span class='layout'>)</span>+<a name="line-71"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"asmx"</span><span class='layout'>,</span>	<span class='str'>"application/x-asmx"</span><span class='layout'>)</span>+<a name="line-72"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"asp"</span><span class='layout'>,</span>	<span class='str'>"application/x-asp"</span><span class='layout'>)</span>+<a name="line-73"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"aspx"</span><span class='layout'>,</span>	<span class='str'>"application/x-aspx"</span><span class='layout'>)</span>+<a name="line-74"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"asx"</span><span class='layout'>,</span>	<span class='str'>"video/x-ms-asf"</span><span class='layout'>)</span>+<a name="line-75"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"au"</span><span class='layout'>,</span>	<span class='str'>"audio/basic"</span><span class='layout'>)</span>+<a name="line-76"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"avi"</span><span class='layout'>,</span>	<span class='str'>"video/x-msvideo"</span><span class='layout'>)</span>+<a name="line-77"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"aw"</span><span class='layout'>,</span>	<span class='str'>"application/x-applix-word"</span><span class='layout'>)</span>+<a name="line-78"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"axd"</span><span class='layout'>,</span>	<span class='str'>"application/x-axd"</span><span class='layout'>)</span>+<a name="line-79"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"bak"</span><span class='layout'>,</span>	<span class='str'>"application/x-trash"</span><span class='layout'>)</span>+<a name="line-80"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"bay"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-81"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"bcpio"</span><span class='layout'>,</span>	<span class='str'>"application/x-bcpio"</span><span class='layout'>)</span>+<a name="line-82"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"bdf"</span><span class='layout'>,</span>	<span class='str'>"application/x-font-bdf"</span><span class='layout'>)</span>+<a name="line-83"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"bib"</span><span class='layout'>,</span>	<span class='str'>"text/x-bibtex"</span><span class='layout'>)</span>+<a name="line-84"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"bin"</span><span class='layout'>,</span>	<span class='str'>"application/octet-stream"</span><span class='layout'>)</span>+<a name="line-85"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"bin"</span><span class='layout'>,</span>	<span class='str'>"application/x-stuffit"</span><span class='layout'>)</span>+<a name="line-86"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"blend"</span><span class='layout'>,</span>	<span class='str'>"application/x-blender"</span><span class='layout'>)</span>+<a name="line-87"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"blender"</span><span class='layout'>,</span>	<span class='str'>"application/x-blender"</span><span class='layout'>)</span>+<a name="line-88"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"bmp"</span><span class='layout'>,</span>	<span class='str'>"image/bmp"</span><span class='layout'>)</span>+<a name="line-89"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"bmq"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-90"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"boo"</span><span class='layout'>,</span>	<span class='str'>"text/x-boo"</span><span class='layout'>)</span>+<a name="line-91"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"bz"</span><span class='layout'>,</span>	<span class='str'>"application/x-bzip"</span><span class='layout'>)</span>+<a name="line-92"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"bz"</span><span class='layout'>,</span>	<span class='str'>"application/x-bzip"</span><span class='layout'>)</span>+<a name="line-93"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"bz2"</span><span class='layout'>,</span>	<span class='str'>"application/x-bzip"</span><span class='layout'>)</span>+<a name="line-94"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"bz2"</span><span class='layout'>,</span>	<span class='str'>"application/x-bzip"</span><span class='layout'>)</span>+<a name="line-95"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"c"</span><span class='layout'>,</span>	<span class='str'>"text/x-csrc"</span><span class='layout'>)</span>+<a name="line-96"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"c++"</span><span class='layout'>,</span>	<span class='str'>"text/x-c++src"</span><span class='layout'>)</span>+<a name="line-97"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"caves"</span><span class='layout'>,</span>	<span class='str'>"application/x-gnome-stones"</span><span class='layout'>)</span>+<a name="line-98"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cc"</span><span class='layout'>,</span>	<span class='str'>"text/x-c++src"</span><span class='layout'>)</span>+<a name="line-99"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cdf"</span><span class='layout'>,</span>	<span class='str'>"application/x-netcdf"</span><span class='layout'>)</span>+<a name="line-100"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cdr"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.corel-draw"</span><span class='layout'>)</span>+<a name="line-101"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cer"</span><span class='layout'>,</span>	<span class='str'>"application/x-x509-ca-cert"</span><span class='layout'>)</span>+<a name="line-102"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cert"</span><span class='layout'>,</span>	<span class='str'>"application/x-x509-ca-cert"</span><span class='layout'>)</span>+<a name="line-103"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cgi"</span><span class='layout'>,</span>	<span class='str'>"application/x-cgi"</span><span class='layout'>)</span>+<a name="line-104"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cgm"</span><span class='layout'>,</span>	<span class='str'>"image/cgm"</span><span class='layout'>)</span>+<a name="line-105"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"chm"</span><span class='layout'>,</span>	<span class='str'>"application/x-chm"</span><span class='layout'>)</span>+<a name="line-106"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"chrt"</span><span class='layout'>,</span>	<span class='str'>"application/x-kchart"</span><span class='layout'>)</span>+<a name="line-107"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cht"</span><span class='layout'>,</span>	<span class='str'>"application/chemtool"</span><span class='layout'>)</span>+<a name="line-108"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"class"</span><span class='layout'>,</span>	<span class='str'>"application/x-java"</span><span class='layout'>)</span>+<a name="line-109"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cls"</span><span class='layout'>,</span>	<span class='str'>"text/x-tex"</span><span class='layout'>)</span>+<a name="line-110"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cmbx"</span><span class='layout'>,</span>	<span class='str'>"application/x-cmbx"</span><span class='layout'>)</span>+<a name="line-111"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"config"</span><span class='layout'>,</span>	<span class='str'>"application/x-config"</span><span class='layout'>)</span>+<a name="line-112"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"connection"</span><span class='layout'>,</span>	<span class='str'>"application/x-gnome-db-connection"</span><span class='layout'>)</span>+<a name="line-113"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cpio"</span><span class='layout'>,</span>	<span class='str'>"application/x-cpio"</span><span class='layout'>)</span>+<a name="line-114"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cpio.gz"</span><span class='layout'>,</span>	<span class='str'>"application/x-cpio-compressed"</span><span class='layout'>)</span>+<a name="line-115"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cpp"</span><span class='layout'>,</span>	<span class='str'>"text/x-c++src"</span><span class='layout'>)</span>+<a name="line-116"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cr2"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-117"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"crt"</span><span class='layout'>,</span>	<span class='str'>"application/x-x509-ca-cert"</span><span class='layout'>)</span>+<a name="line-118"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"crw"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-119"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cs"</span><span class='layout'>,</span>	<span class='str'>"text/x-csharp"</span><span class='layout'>)</span>+<a name="line-120"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cs1"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-121"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"csh"</span><span class='layout'>,</span>	<span class='str'>"application/x-csh"</span><span class='layout'>)</span>+<a name="line-122"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"css"</span><span class='layout'>,</span>	<span class='str'>"text/css"</span><span class='layout'>)</span>+<a name="line-123"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"csv"</span><span class='layout'>,</span>	<span class='str'>"text/x-comma-separated-values"</span><span class='layout'>)</span>+<a name="line-124"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cue"</span><span class='layout'>,</span>	<span class='str'>"application/x-cue"</span><span class='layout'>)</span>+<a name="line-125"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cur"</span><span class='layout'>,</span>	<span class='str'>"image/x-win-bitmap"</span><span class='layout'>)</span>+<a name="line-126"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"cxx"</span><span class='layout'>,</span>	<span class='str'>"text/x-c++src"</span><span class='layout'>)</span>+<a name="line-127"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"d"</span><span class='layout'>,</span>	<span class='str'>"text/x-dsrc"</span><span class='layout'>)</span>+<a name="line-128"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"dat"</span><span class='layout'>,</span>	<span class='str'>"video/mpeg"</span><span class='layout'>)</span>+<a name="line-129"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"database"</span><span class='layout'>,</span>	<span class='str'>"application/x-gnome-db-database"</span><span class='layout'>)</span>+<a name="line-130"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"dbf"</span><span class='layout'>,</span>	<span class='str'>"application/x-dbase"</span><span class='layout'>)</span>+<a name="line-131"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"dc"</span><span class='layout'>,</span>	<span class='str'>"application/x-dc-rom"</span><span class='layout'>)</span>+<a name="line-132"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"dc2"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-133"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"dcl"</span><span class='layout'>,</span>	<span class='str'>"text/x-dcl"</span><span class='layout'>)</span>+<a name="line-134"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"dcm"</span><span class='layout'>,</span>	<span class='str'>"application/dicom"</span><span class='layout'>)</span>+<a name="line-135"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"dcr"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-136"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"deb"</span><span class='layout'>,</span>	<span class='str'>"application/x-deb"</span><span class='layout'>)</span>+<a name="line-137"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"der"</span><span class='layout'>,</span>	<span class='str'>"application/x-x509-ca-cert"</span><span class='layout'>)</span>+<a name="line-138"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"desktop"</span><span class='layout'>,</span>	<span class='str'>"application/x-desktop"</span><span class='layout'>)</span>+<a name="line-139"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"devhelp"</span><span class='layout'>,</span>	<span class='str'>"application/x-devhelp"</span><span class='layout'>)</span>+<a name="line-140"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"dia"</span><span class='layout'>,</span>	<span class='str'>"application/x-dia-diagram"</span><span class='layout'>)</span>+<a name="line-141"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"dif"</span><span class='layout'>,</span>	<span class='str'>"video/dv"</span><span class='layout'>)</span>+<a name="line-142"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"diff"</span><span class='layout'>,</span>	<span class='str'>"text/x-patch"</span><span class='layout'>)</span>+<a name="line-143"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"disco"</span><span class='layout'>,</span>	<span class='str'>"application/x-disco"</span><span class='layout'>)</span>+<a name="line-144"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"display"</span><span class='layout'>,</span>	<span class='str'>"application/x-gdesklets-display"</span><span class='layout'>)</span>+<a name="line-145"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"djv"</span><span class='layout'>,</span>	<span class='str'>"image/vnd.djvu"</span><span class='layout'>)</span>+<a name="line-146"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"djvu"</span><span class='layout'>,</span>	<span class='str'>"image/vnd.djvu"</span><span class='layout'>)</span>+<a name="line-147"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"doc"</span><span class='layout'>,</span>	<span class='str'>"application/msword"</span><span class='layout'>)</span>+<a name="line-148"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"docbook"</span><span class='layout'>,</span>	<span class='str'>"application/docbook+xml"</span><span class='layout'>)</span>+<a name="line-149"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"dsl"</span><span class='layout'>,</span>	<span class='str'>"text/x-dsl"</span><span class='layout'>)</span>+<a name="line-150"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"dtd"</span><span class='layout'>,</span>	<span class='str'>"text/x-dtd"</span><span class='layout'>)</span>+<a name="line-151"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"dv"</span><span class='layout'>,</span>	<span class='str'>"video/dv"</span><span class='layout'>)</span>+<a name="line-152"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"dvi"</span><span class='layout'>,</span>	<span class='str'>"application/x-dvi"</span><span class='layout'>)</span>+<a name="line-153"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"dwg"</span><span class='layout'>,</span>	<span class='str'>"image/vnd.dwg"</span><span class='layout'>)</span>+<a name="line-154"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"dxf"</span><span class='layout'>,</span>	<span class='str'>"image/vnd.dxf"</span><span class='layout'>)</span>+<a name="line-155"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ear"</span><span class='layout'>,</span>	<span class='str'>"application/x-java-archive"</span><span class='layout'>)</span>+<a name="line-156"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"egon"</span><span class='layout'>,</span>	<span class='str'>"application/x-egon"</span><span class='layout'>)</span>+<a name="line-157"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"el"</span><span class='layout'>,</span>	<span class='str'>"text/x-emacs-lisp"</span><span class='layout'>)</span>+<a name="line-158"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"eps"</span><span class='layout'>,</span>	<span class='str'>"image/x-eps"</span><span class='layout'>)</span>+<a name="line-159"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"epsf"</span><span class='layout'>,</span>	<span class='str'>"image/x-eps"</span><span class='layout'>)</span>+<a name="line-160"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"epsi"</span><span class='layout'>,</span>	<span class='str'>"image/x-eps"</span><span class='layout'>)</span>+<a name="line-161"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"etheme"</span><span class='layout'>,</span>	<span class='str'>"application/x-e-theme"</span><span class='layout'>)</span>+<a name="line-162"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"etx"</span><span class='layout'>,</span>	<span class='str'>"text/x-setext"</span><span class='layout'>)</span>+<a name="line-163"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"exe"</span><span class='layout'>,</span>	<span class='str'>"application/x-executable"</span><span class='layout'>)</span>+<a name="line-164"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"exe"</span><span class='layout'>,</span>	<span class='str'>"application/x-ms-dos-executable"</span><span class='layout'>)</span>+<a name="line-165"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ez"</span><span class='layout'>,</span>	<span class='str'>"application/andrew-inset"</span><span class='layout'>)</span>+<a name="line-166"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"f"</span><span class='layout'>,</span>	<span class='str'>"text/x-fortran"</span><span class='layout'>)</span>+<a name="line-167"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"fff"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-168"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"fig"</span><span class='layout'>,</span>	<span class='str'>"image/x-xfig"</span><span class='layout'>)</span>+<a name="line-169"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"fits"</span><span class='layout'>,</span>	<span class='str'>"image/x-fits"</span><span class='layout'>)</span>+<a name="line-170"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"flac"</span><span class='layout'>,</span>	<span class='str'>"audio/x-flac"</span><span class='layout'>)</span>+<a name="line-171"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"flc"</span><span class='layout'>,</span>	<span class='str'>"video/x-flic"</span><span class='layout'>)</span>+<a name="line-172"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"fli"</span><span class='layout'>,</span>	<span class='str'>"video/x-flic"</span><span class='layout'>)</span>+<a name="line-173"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"flw"</span><span class='layout'>,</span>	<span class='str'>"application/x-kivio"</span><span class='layout'>)</span>+<a name="line-174"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"fo"</span><span class='layout'>,</span>	<span class='str'>"text/x-xslfo"</span><span class='layout'>)</span>+<a name="line-175"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"g3"</span><span class='layout'>,</span>	<span class='str'>"image/fax-g3"</span><span class='layout'>)</span>+<a name="line-176"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"gb"</span><span class='layout'>,</span>	<span class='str'>"application/x-gameboy-rom"</span><span class='layout'>)</span>+<a name="line-177"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"gcrd"</span><span class='layout'>,</span>	<span class='str'>"text/directory"</span><span class='layout'>)</span>+<a name="line-178"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"gen"</span><span class='layout'>,</span>	<span class='str'>"application/x-genesis-rom"</span><span class='layout'>)</span>+<a name="line-179"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"gf"</span><span class='layout'>,</span>	<span class='str'>"application/x-tex-gf"</span><span class='layout'>)</span>+<a name="line-180"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"gg"</span><span class='layout'>,</span>	<span class='str'>"application/x-sms-rom"</span><span class='layout'>)</span>+<a name="line-181"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"gif"</span><span class='layout'>,</span>	<span class='str'>"image/gif"</span><span class='layout'>)</span>+<a name="line-182"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"glabels"</span><span class='layout'>,</span>	<span class='str'>"application/x-glabels"</span><span class='layout'>)</span>+<a name="line-183"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"glade"</span><span class='layout'>,</span>	<span class='str'>"application/x-glade"</span><span class='layout'>)</span>+<a name="line-184"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"gmo"</span><span class='layout'>,</span>	<span class='str'>"application/x-gettext-translation"</span><span class='layout'>)</span>+<a name="line-185"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"gnc"</span><span class='layout'>,</span>	<span class='str'>"application/x-gnucash"</span><span class='layout'>)</span>+<a name="line-186"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"gnucash"</span><span class='layout'>,</span>	<span class='str'>"application/x-gnucash"</span><span class='layout'>)</span>+<a name="line-187"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"gnumeric"</span><span class='layout'>,</span>	<span class='str'>"application/x-gnumeric"</span><span class='layout'>)</span>+<a name="line-188"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"gpg"</span><span class='layout'>,</span>	<span class='str'>"application/pgp-encrypted"</span><span class='layout'>)</span>+<a name="line-189"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"gra"</span><span class='layout'>,</span>	<span class='str'>"application/x-graphite"</span><span class='layout'>)</span>+<a name="line-190"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"gsf"</span><span class='layout'>,</span>	<span class='str'>"application/x-font-type1"</span><span class='layout'>)</span>+<a name="line-191"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"gtar"</span><span class='layout'>,</span>	<span class='str'>"application/x-gtar"</span><span class='layout'>)</span>+<a name="line-192"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"gz"</span><span class='layout'>,</span>	<span class='str'>"application/x-gzip"</span><span class='layout'>)</span>+<a name="line-193"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"h"</span><span class='layout'>,</span>	<span class='str'>"text/x-chdr"</span><span class='layout'>)</span>+<a name="line-194"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"h++"</span><span class='layout'>,</span>	<span class='str'>"text/x-chdr"</span><span class='layout'>)</span>+<a name="line-195"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"hdf"</span><span class='layout'>,</span>	<span class='str'>"application/x-hdf"</span><span class='layout'>)</span>+<a name="line-196"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"hh"</span><span class='layout'>,</span>	<span class='str'>"text/x-c++hdr"</span><span class='layout'>)</span>+<a name="line-197"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"hp"</span><span class='layout'>,</span>	<span class='str'>"text/x-chdr"</span><span class='layout'>)</span>+<a name="line-198"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"hpgl"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.hp-hpgl"</span><span class='layout'>)</span>+<a name="line-199"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"hs"</span><span class='layout'>,</span>	<span class='str'>"text/x-haskell"</span><span class='layout'>)</span>+<a name="line-200"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"htm"</span><span class='layout'>,</span>	<span class='str'>"text/html"</span><span class='layout'>)</span>+<a name="line-201"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"html"</span><span class='layout'>,</span>	<span class='str'>"text/html"</span><span class='layout'>)</span>+<a name="line-202"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ica"</span><span class='layout'>,</span>	<span class='str'>"application/x-ica"</span><span class='layout'>)</span>+<a name="line-203"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"icb"</span><span class='layout'>,</span>	<span class='str'>"image/x-icb"</span><span class='layout'>)</span>+<a name="line-204"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ico"</span><span class='layout'>,</span>	<span class='str'>"image/x-ico"</span><span class='layout'>)</span>+<a name="line-205"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ics"</span><span class='layout'>,</span>	<span class='str'>"text/calendar"</span><span class='layout'>)</span>+<a name="line-206"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"idl"</span><span class='layout'>,</span>	<span class='str'>"text/x-idl"</span><span class='layout'>)</span>+<a name="line-207"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ief"</span><span class='layout'>,</span>	<span class='str'>"image/ief"</span><span class='layout'>)</span>+<a name="line-208"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"iff"</span><span class='layout'>,</span>	<span class='str'>"image/x-iff"</span><span class='layout'>)</span>+<a name="line-209"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"il"</span><span class='layout'>,</span>	<span class='str'>"text/x-msil"</span><span class='layout'>)</span>+<a name="line-210"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ilbm"</span><span class='layout'>,</span>	<span class='str'>"image/x-ilbm"</span><span class='layout'>)</span>+<a name="line-211"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"iso"</span><span class='layout'>,</span>	<span class='str'>"application/x-cd-image"</span><span class='layout'>)</span>+<a name="line-212"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"it"</span><span class='layout'>,</span>	<span class='str'>"audio/x-it"</span><span class='layout'>)</span>+<a name="line-213"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"jam"</span><span class='layout'>,</span>	<span class='str'>"application/x-jamin"</span><span class='layout'>)</span>+<a name="line-214"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"jar"</span><span class='layout'>,</span>	<span class='str'>"application/x-jar"</span><span class='layout'>)</span>+<a name="line-215"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"jar"</span><span class='layout'>,</span>	<span class='str'>"application/x-java-archive"</span><span class='layout'>)</span>+<a name="line-216"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"java"</span><span class='layout'>,</span>	<span class='str'>"text/x-java"</span><span class='layout'>)</span>+<a name="line-217"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"jng"</span><span class='layout'>,</span>	<span class='str'>"image/x-jng"</span><span class='layout'>)</span>+<a name="line-218"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"jnlp"</span><span class='layout'>,</span>	<span class='str'>"application/x-java-jnlp-file"</span><span class='layout'>)</span>+<a name="line-219"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"jp2"</span><span class='layout'>,</span>	<span class='str'>"image/jpeg2000"</span><span class='layout'>)</span>+<a name="line-220"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"jpe"</span><span class='layout'>,</span>	<span class='str'>"image/jpeg"</span><span class='layout'>)</span>+<a name="line-221"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"jpeg"</span><span class='layout'>,</span>	<span class='str'>"image/jpeg"</span><span class='layout'>)</span>+<a name="line-222"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"jpg"</span><span class='layout'>,</span>	<span class='str'>"image/jpeg"</span><span class='layout'>)</span>+<a name="line-223"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"jpr"</span><span class='layout'>,</span>	<span class='str'>"application/x-jbuilder-project"</span><span class='layout'>)</span>+<a name="line-224"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"jpx"</span><span class='layout'>,</span>	<span class='str'>"application/x-jbuilder-project"</span><span class='layout'>)</span>+<a name="line-225"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"js"</span><span class='layout'>,</span>	<span class='str'>"application/x-javascript"</span><span class='layout'>)</span>+<a name="line-226"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"js"</span><span class='layout'>,</span>	<span class='str'>"text/x-js"</span><span class='layout'>)</span>+<a name="line-227"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"k"</span><span class='layout'>,</span>	<span class='str'>"application/x-tex-pk"</span><span class='layout'>)</span>+<a name="line-228"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"k25"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-229"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"karbon"</span><span class='layout'>,</span>	<span class='str'>"application/x-karbon"</span><span class='layout'>)</span>+<a name="line-230"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"kdc"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-231"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"kdelnk"</span><span class='layout'>,</span>	<span class='str'>"application/x-desktop"</span><span class='layout'>)</span>+<a name="line-232"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"kfo"</span><span class='layout'>,</span>	<span class='str'>"application/x-kformula"</span><span class='layout'>)</span>+<a name="line-233"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"kil"</span><span class='layout'>,</span>	<span class='str'>"application/x-killustrator"</span><span class='layout'>)</span>+<a name="line-234"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"kino"</span><span class='layout'>,</span>	<span class='str'>"application/x-smil"</span><span class='layout'>)</span>+<a name="line-235"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"kon"</span><span class='layout'>,</span>	<span class='str'>"application/x-kontour"</span><span class='layout'>)</span>+<a name="line-236"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"kpm"</span><span class='layout'>,</span>	<span class='str'>"application/x-kpovmodeler"</span><span class='layout'>)</span>+<a name="line-237"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"kpr"</span><span class='layout'>,</span>	<span class='str'>"application/x-kpresenter"</span><span class='layout'>)</span>+<a name="line-238"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"kpt"</span><span class='layout'>,</span>	<span class='str'>"application/x-kpresenter"</span><span class='layout'>)</span>+<a name="line-239"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"kra"</span><span class='layout'>,</span>	<span class='str'>"application/x-krita"</span><span class='layout'>)</span>+<a name="line-240"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ksp"</span><span class='layout'>,</span>	<span class='str'>"application/x-kspread"</span><span class='layout'>)</span>+<a name="line-241"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"kud"</span><span class='layout'>,</span>	<span class='str'>"application/x-kugar"</span><span class='layout'>)</span>+<a name="line-242"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"kwd"</span><span class='layout'>,</span>	<span class='str'>"application/x-kword"</span><span class='layout'>)</span>+<a name="line-243"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"kwt"</span><span class='layout'>,</span>	<span class='str'>"application/x-kword"</span><span class='layout'>)</span>+<a name="line-244"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"la"</span><span class='layout'>,</span>	<span class='str'>"application/x-shared-library-la"</span><span class='layout'>)</span>+<a name="line-245"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"lha"</span><span class='layout'>,</span>	<span class='str'>"application/x-lha"</span><span class='layout'>)</span>+<a name="line-246"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"lhs"</span><span class='layout'>,</span>	<span class='str'>"text/x-literate-haskell"</span><span class='layout'>)</span>+<a name="line-247"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"lhz"</span><span class='layout'>,</span>	<span class='str'>"application/x-lhz"</span><span class='layout'>)</span>+<a name="line-248"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"log"</span><span class='layout'>,</span>	<span class='str'>"text/x-log"</span><span class='layout'>)</span>+<a name="line-249"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ltx"</span><span class='layout'>,</span>	<span class='str'>"text/x-tex"</span><span class='layout'>)</span>+<a name="line-250"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"lwo"</span><span class='layout'>,</span>	<span class='str'>"image/x-lwo"</span><span class='layout'>)</span>+<a name="line-251"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"lwob"</span><span class='layout'>,</span>	<span class='str'>"image/x-lwo"</span><span class='layout'>)</span>+<a name="line-252"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"lws"</span><span class='layout'>,</span>	<span class='str'>"image/x-lws"</span><span class='layout'>)</span>+<a name="line-253"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"lyx"</span><span class='layout'>,</span>	<span class='str'>"application/x-lyx"</span><span class='layout'>)</span>+<a name="line-254"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"lzh"</span><span class='layout'>,</span>	<span class='str'>"application/x-lha"</span><span class='layout'>)</span>+<a name="line-255"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"lzh"</span><span class='layout'>,</span>	<span class='str'>"application/x-lha"</span><span class='layout'>)</span>+<a name="line-256"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"lzo"</span><span class='layout'>,</span>	<span class='str'>"application/x-lzop"</span><span class='layout'>)</span>+<a name="line-257"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"m"</span><span class='layout'>,</span>	<span class='str'>"text/x-objcsrc"</span><span class='layout'>)</span>+<a name="line-258"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"m15"</span><span class='layout'>,</span>	<span class='str'>"audio/x-mod"</span><span class='layout'>)</span>+<a name="line-259"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"m3u"</span><span class='layout'>,</span>	<span class='str'>"audio/x-mpegurl"</span><span class='layout'>)</span>+<a name="line-260"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"m4a"</span><span class='layout'>,</span>	<span class='str'>"audio/x-m4a"</span><span class='layout'>)</span>+<a name="line-261"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"man"</span><span class='layout'>,</span>	<span class='str'>"application/x-troff-man"</span><span class='layout'>)</span>+<a name="line-262"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"master"</span><span class='layout'>,</span>	<span class='str'>"application/x-master-page"</span><span class='layout'>)</span>+<a name="line-263"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"md"</span><span class='layout'>,</span>	<span class='str'>"application/x-genesis-rom"</span><span class='layout'>)</span>+<a name="line-264"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mdp"</span><span class='layout'>,</span>	<span class='str'>"application/x-mdp"</span><span class='layout'>)</span>+<a name="line-265"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mds"</span><span class='layout'>,</span>	<span class='str'>"application/x-mds"</span><span class='layout'>)</span>+<a name="line-266"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mdsx"</span><span class='layout'>,</span>	<span class='str'>"application/x-mdsx"</span><span class='layout'>)</span>+<a name="line-267"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"me"</span><span class='layout'>,</span>	<span class='str'>"text/x-troff-me"</span><span class='layout'>)</span>+<a name="line-268"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mergeant"</span><span class='layout'>,</span>	<span class='str'>"application/x-mergeant"</span><span class='layout'>)</span>+<a name="line-269"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mgp"</span><span class='layout'>,</span>	<span class='str'>"application/x-magicpoint"</span><span class='layout'>)</span>+<a name="line-270"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mid"</span><span class='layout'>,</span>	<span class='str'>"audio/midi"</span><span class='layout'>)</span>+<a name="line-271"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"midi"</span><span class='layout'>,</span>	<span class='str'>"audio/midi"</span><span class='layout'>)</span>+<a name="line-272"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mif"</span><span class='layout'>,</span>	<span class='str'>"application/x-mif"</span><span class='layout'>)</span>+<a name="line-273"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mkv"</span><span class='layout'>,</span>	<span class='str'>"application/x-matroska"</span><span class='layout'>)</span>+<a name="line-274"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mm"</span><span class='layout'>,</span>	<span class='str'>"text/x-troff-mm"</span><span class='layout'>)</span>+<a name="line-275"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mml"</span><span class='layout'>,</span>	<span class='str'>"text/mathml"</span><span class='layout'>)</span>+<a name="line-276"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mng"</span><span class='layout'>,</span>	<span class='str'>"video/x-mng"</span><span class='layout'>)</span>+<a name="line-277"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"moc"</span><span class='layout'>,</span>	<span class='str'>"text/x-moc"</span><span class='layout'>)</span>+<a name="line-278"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mod"</span><span class='layout'>,</span>	<span class='str'>"audio/x-mod"</span><span class='layout'>)</span>+<a name="line-279"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"moov"</span><span class='layout'>,</span>	<span class='str'>"video/quicktime"</span><span class='layout'>)</span>+<a name="line-280"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mos"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-281"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mov"</span><span class='layout'>,</span>	<span class='str'>"video/quicktime"</span><span class='layout'>)</span>+<a name="line-282"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"movie"</span><span class='layout'>,</span>	<span class='str'>"video/x-sgi-movie"</span><span class='layout'>)</span>+<a name="line-283"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mp2"</span><span class='layout'>,</span>	<span class='str'>"video/mpeg"</span><span class='layout'>)</span>+<a name="line-284"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mp3"</span><span class='layout'>,</span>	<span class='str'>"audio/mpeg"</span><span class='layout'>)</span>+<a name="line-285"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mpe"</span><span class='layout'>,</span>	<span class='str'>"video/mpeg"</span><span class='layout'>)</span>+<a name="line-286"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mpeg"</span><span class='layout'>,</span>	<span class='str'>"video/mpeg"</span><span class='layout'>)</span>+<a name="line-287"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mpg"</span><span class='layout'>,</span>	<span class='str'>"video/mpeg"</span><span class='layout'>)</span>+<a name="line-288"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mps"</span><span class='layout'>,</span>	<span class='str'>"application/x-mps"</span><span class='layout'>)</span>+<a name="line-289"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mrproject"</span><span class='layout'>,</span>	<span class='str'>"application/x-planner"</span><span class='layout'>)</span>+<a name="line-290"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mrw"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-291"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ms"</span><span class='layout'>,</span>	<span class='str'>"text/x-troff-ms"</span><span class='layout'>)</span>+<a name="line-292"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"msod"</span><span class='layout'>,</span>	<span class='str'>"image/x-msod"</span><span class='layout'>)</span>+<a name="line-293"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"msx"</span><span class='layout'>,</span>	<span class='str'>"application/x-msx-rom"</span><span class='layout'>)</span>+<a name="line-294"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"mtm"</span><span class='layout'>,</span>	<span class='str'>"audio/x-mod"</span><span class='layout'>)</span>+<a name="line-295"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"n"</span><span class='layout'>,</span>	<span class='str'>"text/x-nemerle"</span><span class='layout'>)</span>+<a name="line-296"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"n64"</span><span class='layout'>,</span>	<span class='str'>"application/x-n64-rom"</span><span class='layout'>)</span>+<a name="line-297"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"nb"</span><span class='layout'>,</span>	<span class='str'>"application/mathematica"</span><span class='layout'>)</span>+<a name="line-298"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"nc"</span><span class='layout'>,</span>	<span class='str'>"application/x-netcdf"</span><span class='layout'>)</span>+<a name="line-299"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"nef"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-300"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"nes"</span><span class='layout'>,</span>	<span class='str'>"application/x-nes-rom"</span><span class='layout'>)</span>+<a name="line-301"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"nsv"</span><span class='layout'>,</span>	<span class='str'>"video/x-nsv"</span><span class='layout'>)</span>+<a name="line-302"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"o"</span><span class='layout'>,</span>	<span class='str'>"application/x-object"</span><span class='layout'>)</span>+<a name="line-303"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"obj"</span><span class='layout'>,</span>	<span class='str'>"application/x-tgif"</span><span class='layout'>)</span>+<a name="line-304"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"oda"</span><span class='layout'>,</span>	<span class='str'>"application/oda"</span><span class='layout'>)</span>+<a name="line-305"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"odb"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.oasis.opendocument.database"</span><span class='layout'>)</span>+<a name="line-306"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"odc"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.oasis.opendocument.chart"</span><span class='layout'>)</span>+<a name="line-307"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"odf"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.oasis.opendocument.formula"</span><span class='layout'>)</span>+<a name="line-308"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"odg"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.oasis.opendocument.graphics"</span><span class='layout'>)</span>+<a name="line-309"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"odi"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.oasis.opendocument.image"</span><span class='layout'>)</span>+<a name="line-310"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"odm"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.oasis.opendocument.text-master"</span><span class='layout'>)</span>+<a name="line-311"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"odp"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.oasis.opendocument.presentation"</span><span class='layout'>)</span>+<a name="line-312"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ods"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.oasis.opendocument.spreadsheet"</span><span class='layout'>)</span>+<a name="line-313"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"odt"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.oasis.opendocument.text"</span><span class='layout'>)</span>+<a name="line-314"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ogg"</span><span class='layout'>,</span>	<span class='str'>"application/ogg"</span><span class='layout'>)</span>+<a name="line-315"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"old"</span><span class='layout'>,</span>	<span class='str'>"application/x-trash"</span><span class='layout'>)</span>+<a name="line-316"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"oleo"</span><span class='layout'>,</span>	<span class='str'>"application/x-oleo"</span><span class='layout'>)</span>+<a name="line-317"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"orf"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-318"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"otg"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.oasis.opendocument.graphics-template"</span><span class='layout'>)</span>+<a name="line-319"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"oth"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.oasis.opendocument.text-web"</span><span class='layout'>)</span>+<a name="line-320"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"otp"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.oasis.opendocument.presentation-template"</span><span class='layout'>)</span>+<a name="line-321"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ots"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.oasis.opendocument.spreadsheet-template"</span><span class='layout'>)</span>+<a name="line-322"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ott"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.oasis.opendocument.text-template"</span><span class='layout'>)</span>+<a name="line-323"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"p"</span><span class='layout'>,</span>	<span class='str'>"text/x-pascal"</span><span class='layout'>)</span>+<a name="line-324"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"p12"</span><span class='layout'>,</span>	<span class='str'>"application/x-pkcs12"</span><span class='layout'>)</span>+<a name="line-325"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"p7s"</span><span class='layout'>,</span>	<span class='str'>"application/pkcs7-signature"</span><span class='layout'>)</span>+<a name="line-326"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"par2"</span><span class='layout'>,</span>	<span class='str'>"application/x-par2"</span><span class='layout'>)</span>+<a name="line-327"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pas"</span><span class='layout'>,</span>	<span class='str'>"text/x-pascal"</span><span class='layout'>)</span>+<a name="line-328"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"patch"</span><span class='layout'>,</span>	<span class='str'>"text/x-patch"</span><span class='layout'>)</span>+<a name="line-329"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pbm"</span><span class='layout'>,</span>	<span class='str'>"image/x-portable-bitmap"</span><span class='layout'>)</span>+<a name="line-330"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pcd"</span><span class='layout'>,</span>	<span class='str'>"image/x-photo-cd"</span><span class='layout'>)</span>+<a name="line-331"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pcf"</span><span class='layout'>,</span>	<span class='str'>"application/x-font-pcf"</span><span class='layout'>)</span>+<a name="line-332"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pcf.Z"</span><span class='layout'>,</span>	<span class='str'>"application/x-font-type1"</span><span class='layout'>)</span>+<a name="line-333"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pcf.gz"</span><span class='layout'>,</span>	<span class='str'>"application/x-font-pcf"</span><span class='layout'>)</span>+<a name="line-334"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pcl"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.hp-pcl"</span><span class='layout'>)</span>+<a name="line-335"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pdb"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.palm"</span><span class='layout'>)</span>+<a name="line-336"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pdb"</span><span class='layout'>,</span>	<span class='str'>"application/x-palm-database"</span><span class='layout'>)</span>+<a name="line-337"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pdf"</span><span class='layout'>,</span>	<span class='str'>"application/pdf"</span><span class='layout'>)</span>+<a name="line-338"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pef"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-339"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pem"</span><span class='layout'>,</span>	<span class='str'>"application/x-x509-ca-cert"</span><span class='layout'>)</span>+<a name="line-340"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"perl"</span><span class='layout'>,</span>	<span class='str'>"application/x-perl"</span><span class='layout'>)</span>+<a name="line-341"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pfa"</span><span class='layout'>,</span>	<span class='str'>"application/x-font-type1"</span><span class='layout'>)</span>+<a name="line-342"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pfb"</span><span class='layout'>,</span>	<span class='str'>"application/x-font-type1"</span><span class='layout'>)</span>+<a name="line-343"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pfx"</span><span class='layout'>,</span>	<span class='str'>"application/x-pkcs12"</span><span class='layout'>)</span>+<a name="line-344"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pgm"</span><span class='layout'>,</span>	<span class='str'>"image/x-portable-graymap"</span><span class='layout'>)</span>+<a name="line-345"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pgn"</span><span class='layout'>,</span>	<span class='str'>"application/x-chess-pgn"</span><span class='layout'>)</span>+<a name="line-346"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pgp"</span><span class='layout'>,</span>	<span class='str'>"application/pgp"</span><span class='layout'>)</span>+<a name="line-347"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pgp"</span><span class='layout'>,</span>	<span class='str'>"application/pgp-encrypted"</span><span class='layout'>)</span>+<a name="line-348"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"php"</span><span class='layout'>,</span>	<span class='str'>"application/x-php"</span><span class='layout'>)</span>+<a name="line-349"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"php3"</span><span class='layout'>,</span>	<span class='str'>"application/x-php"</span><span class='layout'>)</span>+<a name="line-350"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"php4"</span><span class='layout'>,</span>	<span class='str'>"application/x-php"</span><span class='layout'>)</span>+<a name="line-351"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pict"</span><span class='layout'>,</span>	<span class='str'>"image/x-pict"</span><span class='layout'>)</span>+<a name="line-352"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pict1"</span><span class='layout'>,</span>	<span class='str'>"image/x-pict"</span><span class='layout'>)</span>+<a name="line-353"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pict2"</span><span class='layout'>,</span>	<span class='str'>"image/x-pict"</span><span class='layout'>)</span>+<a name="line-354"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pkr"</span><span class='layout'>,</span>	<span class='str'>"application/pgp-keys"</span><span class='layout'>)</span>+<a name="line-355"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pl"</span><span class='layout'>,</span>	<span class='str'>"application/x-perl"</span><span class='layout'>)</span>+<a name="line-356"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"planner"</span><span class='layout'>,</span>	<span class='str'>"application/x-planner"</span><span class='layout'>)</span>+<a name="line-357"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pln"</span><span class='layout'>,</span>	<span class='str'>"application/x-planperfect"</span><span class='layout'>)</span>+<a name="line-358"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pls"</span><span class='layout'>,</span>	<span class='str'>"audio/x-scpls"</span><span class='layout'>)</span>+<a name="line-359"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pls"</span><span class='layout'>,</span>	<span class='str'>"audio/x-scpls"</span><span class='layout'>)</span>+<a name="line-360"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pm"</span><span class='layout'>,</span>	<span class='str'>"application/x-perl"</span><span class='layout'>)</span>+<a name="line-361"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"png"</span><span class='layout'>,</span>	<span class='str'>"image/png"</span><span class='layout'>)</span>+<a name="line-362"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pnm"</span><span class='layout'>,</span>	<span class='str'>"image/x-portable-anymap"</span><span class='layout'>)</span>+<a name="line-363"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"po"</span><span class='layout'>,</span>	<span class='str'>"text/x-gettext-translation"</span><span class='layout'>)</span>+<a name="line-364"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pot"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.ms-powerpoint"</span><span class='layout'>)</span>+<a name="line-365"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pot"</span><span class='layout'>,</span>	<span class='str'>"text/x-gettext-translation-template"</span><span class='layout'>)</span>+<a name="line-366"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ppm"</span><span class='layout'>,</span>	<span class='str'>"image/x-portable-pixmap"</span><span class='layout'>)</span>+<a name="line-367"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pps"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.ms-powerpoint"</span><span class='layout'>)</span>+<a name="line-368"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ppt"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.ms-powerpoint"</span><span class='layout'>)</span>+<a name="line-369"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ppz"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.ms-powerpoint"</span><span class='layout'>)</span>+<a name="line-370"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"prc"</span><span class='layout'>,</span>	<span class='str'>"application/x-palm-database"</span><span class='layout'>)</span>+<a name="line-371"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"prj"</span><span class='layout'>,</span>	<span class='str'>"application/x-anjuta-project"</span><span class='layout'>)</span>+<a name="line-372"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"prjx"</span><span class='layout'>,</span>	<span class='str'>"application/x-prjx"</span><span class='layout'>)</span>+<a name="line-373"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ps"</span><span class='layout'>,</span>	<span class='str'>"application/postscript"</span><span class='layout'>)</span>+<a name="line-374"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ps.gz"</span><span class='layout'>,</span>	<span class='str'>"application/x-gzpostscript"</span><span class='layout'>)</span>+<a name="line-375"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"psd"</span><span class='layout'>,</span>	<span class='str'>"image/x-psd"</span><span class='layout'>)</span>+<a name="line-376"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"psf"</span><span class='layout'>,</span>	<span class='str'>"application/x-font-linux-psf"</span><span class='layout'>)</span>+<a name="line-377"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"psid"</span><span class='layout'>,</span>	<span class='str'>"audio/prs.sid"</span><span class='layout'>)</span>+<a name="line-378"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pto"</span><span class='layout'>,</span>	<span class='str'>"application/x-ptoptimizer-script"</span><span class='layout'>)</span>+<a name="line-379"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pw"</span><span class='layout'>,</span>	<span class='str'>"application/x-pw"</span><span class='layout'>)</span>+<a name="line-380"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"py"</span><span class='layout'>,</span>	<span class='str'>"text/x-python"</span><span class='layout'>)</span>+<a name="line-381"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pyc"</span><span class='layout'>,</span>	<span class='str'>"application/x-python-bytecode"</span><span class='layout'>)</span>+<a name="line-382"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"pyo"</span><span class='layout'>,</span>	<span class='str'>"application/x-python-bytecode"</span><span class='layout'>)</span>+<a name="line-383"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"qif"</span><span class='layout'>,</span>	<span class='str'>"application/x-qw"</span><span class='layout'>)</span>+<a name="line-384"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"qt"</span><span class='layout'>,</span>	<span class='str'>"video/quicktime"</span><span class='layout'>)</span>+<a name="line-385"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"qtvr"</span><span class='layout'>,</span>	<span class='str'>"video/quicktime"</span><span class='layout'>)</span>+<a name="line-386"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ra"</span><span class='layout'>,</span>	<span class='str'>"audio/vnd.rn-realaudio"</span><span class='layout'>)</span>+<a name="line-387"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ra"</span><span class='layout'>,</span>	<span class='str'>"audio/x-pn-realaudio"</span><span class='layout'>)</span>+<a name="line-388"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"raf"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-389"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ram"</span><span class='layout'>,</span>	<span class='str'>"audio/x-pn-realaudio"</span><span class='layout'>)</span>+<a name="line-390"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ram"</span><span class='layout'>,</span>	<span class='str'>"audio/x-pn-realaudio"</span><span class='layout'>)</span>+<a name="line-391"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rar"</span><span class='layout'>,</span>	<span class='str'>"application/x-rar"</span><span class='layout'>)</span>+<a name="line-392"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rar"</span><span class='layout'>,</span>	<span class='str'>"application/x-rar-compressed"</span><span class='layout'>)</span>+<a name="line-393"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ras"</span><span class='layout'>,</span>	<span class='str'>"image/x-cmu-raster"</span><span class='layout'>)</span>+<a name="line-394"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rdc"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-395"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rdf"</span><span class='layout'>,</span>	<span class='str'>"text/rdf"</span><span class='layout'>)</span>+<a name="line-396"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rdp"</span><span class='layout'>,</span>	<span class='str'>"application/x-rdp"</span><span class='layout'>)</span>+<a name="line-397"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rej"</span><span class='layout'>,</span>	<span class='str'>"application/x-reject"</span><span class='layout'>)</span>+<a name="line-398"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rem"</span><span class='layout'>,</span>	<span class='str'>"application/x-remoting"</span><span class='layout'>)</span>+<a name="line-399"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"resources"</span><span class='layout'>,</span>	<span class='str'>"application/x-resources"</span><span class='layout'>)</span>+<a name="line-400"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"resx"</span><span class='layout'>,</span>	<span class='str'>"application/x-resourcesx"</span><span class='layout'>)</span>+<a name="line-401"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rgb"</span><span class='layout'>,</span>	<span class='str'>"image/x-rgb"</span><span class='layout'>)</span>+<a name="line-402"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rle"</span><span class='layout'>,</span>	<span class='str'>"image/rle"</span><span class='layout'>)</span>+<a name="line-403"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rm"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.rn-realmedia"</span><span class='layout'>)</span>+<a name="line-404"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rm"</span><span class='layout'>,</span>	<span class='str'>"audio/x-pn-realaudio"</span><span class='layout'>)</span>+<a name="line-405"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rmm"</span><span class='layout'>,</span>	<span class='str'>"audio/x-pn-realaudio"</span><span class='layout'>)</span>+<a name="line-406"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rms"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.rn-realmedia-secure"</span><span class='layout'>)</span>+<a name="line-407"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rmvb"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.rn-realmedia-vbr"</span><span class='layout'>)</span>+<a name="line-408"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rng"</span><span class='layout'>,</span>	<span class='str'>"text/x-rng"</span><span class='layout'>)</span>+<a name="line-409"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"roff"</span><span class='layout'>,</span>	<span class='str'>"application/x-troff"</span><span class='layout'>)</span>+<a name="line-410"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rpm"</span><span class='layout'>,</span>	<span class='str'>"application/x-rpm"</span><span class='layout'>)</span>+<a name="line-411"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rss"</span><span class='layout'>,</span>	<span class='str'>"text/rss"</span><span class='layout'>)</span>+<a name="line-412"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rt"</span><span class='layout'>,</span>	<span class='str'>"text/vnd.rn-realtext"</span><span class='layout'>)</span>+<a name="line-413"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rtf"</span><span class='layout'>,</span>	<span class='str'>"application/rtf"</span><span class='layout'>)</span>+<a name="line-414"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rtx"</span><span class='layout'>,</span>	<span class='str'>"text/richtext"</span><span class='layout'>)</span>+<a name="line-415"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"rv"</span><span class='layout'>,</span>	<span class='str'>"video/vnd.rn-realvideo"</span><span class='layout'>)</span>+<a name="line-416"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"s3m"</span><span class='layout'>,</span>	<span class='str'>"audio/x-s3m"</span><span class='layout'>)</span>+<a name="line-417"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sam"</span><span class='layout'>,</span>	<span class='str'>"application/x-amipro"</span><span class='layout'>)</span>+<a name="line-418"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sc"</span><span class='layout'>,</span>	<span class='str'>"application/x-sc"</span><span class='layout'>)</span>+<a name="line-419"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"scd"</span><span class='layout'>,</span>	<span class='str'>"application/x-scribus"</span><span class='layout'>)</span>+<a name="line-420"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"scd.gz"</span><span class='layout'>,</span>	<span class='str'>"application/x-scribus"</span><span class='layout'>)</span>+<a name="line-421"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"scm"</span><span class='layout'>,</span>	<span class='str'>"text/x-scheme"</span><span class='layout'>)</span>+<a name="line-422"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sda"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.stardivision.draw"</span><span class='layout'>)</span>+<a name="line-423"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sdc"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.stardivision.calc"</span><span class='layout'>)</span>+<a name="line-424"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sdd"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.stardivision.impress"</span><span class='layout'>)</span>+<a name="line-425"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sdp"</span><span class='layout'>,</span>	<span class='str'>"application/sdp"</span><span class='layout'>)</span>+<a name="line-426"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sdp"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.stardivision.impress"</span><span class='layout'>)</span>+<a name="line-427"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sds"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.stardivision.chart"</span><span class='layout'>)</span>+<a name="line-428"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sdw"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.stardivision.writer"</span><span class='layout'>)</span>+<a name="line-429"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sgi"</span><span class='layout'>,</span>	<span class='str'>"image/x-sgi"</span><span class='layout'>)</span>+<a name="line-430"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sgl"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.stardivision.writer"</span><span class='layout'>)</span>+<a name="line-431"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sgm"</span><span class='layout'>,</span>	<span class='str'>"text/sgml"</span><span class='layout'>)</span>+<a name="line-432"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sgml"</span><span class='layout'>,</span>	<span class='str'>"text/sgml"</span><span class='layout'>)</span>+<a name="line-433"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sh"</span><span class='layout'>,</span>	<span class='str'>"application/x-shellscript"</span><span class='layout'>)</span>+<a name="line-434"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"shar"</span><span class='layout'>,</span>	<span class='str'>"application/x-shar"</span><span class='layout'>)</span>+<a name="line-435"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"siag"</span><span class='layout'>,</span>	<span class='str'>"application/x-siag"</span><span class='layout'>)</span>+<a name="line-436"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sid"</span><span class='layout'>,</span>	<span class='str'>"audio/prs.sid"</span><span class='layout'>)</span>+<a name="line-437"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sig"</span><span class='layout'>,</span>	<span class='str'>"application/pgp-signature"</span><span class='layout'>)</span>+<a name="line-438"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sik"</span><span class='layout'>,</span>	<span class='str'>"application/x-trash"</span><span class='layout'>)</span>+<a name="line-439"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sit"</span><span class='layout'>,</span>	<span class='str'>"application/stuffit"</span><span class='layout'>)</span>+<a name="line-440"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sit"</span><span class='layout'>,</span>	<span class='str'>"application/x-stuffit"</span><span class='layout'>)</span>+<a name="line-441"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"skr"</span><span class='layout'>,</span>	<span class='str'>"application/pgp-keys"</span><span class='layout'>)</span>+<a name="line-442"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sla"</span><span class='layout'>,</span>	<span class='str'>"application/x-scribus"</span><span class='layout'>)</span>+<a name="line-443"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sla.gz"</span><span class='layout'>,</span>	<span class='str'>"application/x-scribus"</span><span class='layout'>)</span>+<a name="line-444"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"slk"</span><span class='layout'>,</span>	<span class='str'>"text/spreadsheet"</span><span class='layout'>)</span>+<a name="line-445"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"smd"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.stardivision.mail"</span><span class='layout'>)</span>+<a name="line-446"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"smf"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.stardivision.math"</span><span class='layout'>)</span>+<a name="line-447"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"smi"</span><span class='layout'>,</span>	<span class='str'>"application/smil"</span><span class='layout'>)</span>+<a name="line-448"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"smi"</span><span class='layout'>,</span>	<span class='str'>"application/x-smil"</span><span class='layout'>)</span>+<a name="line-449"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"smil"</span><span class='layout'>,</span>	<span class='str'>"application/smil"</span><span class='layout'>)</span>+<a name="line-450"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"smil"</span><span class='layout'>,</span>	<span class='str'>"application/x-smil"</span><span class='layout'>)</span>+<a name="line-451"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sml"</span><span class='layout'>,</span>	<span class='str'>"application/smil"</span><span class='layout'>)</span>+<a name="line-452"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sms"</span><span class='layout'>,</span>	<span class='str'>"application/x-sms-rom"</span><span class='layout'>)</span>+<a name="line-453"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"snd"</span><span class='layout'>,</span>	<span class='str'>"audio/basic"</span><span class='layout'>)</span>+<a name="line-454"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"so"</span><span class='layout'>,</span>	<span class='str'>"application/x-sharedlib"</span><span class='layout'>)</span>+<a name="line-455"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"soap"</span><span class='layout'>,</span>	<span class='str'>"application/x-soap-remoting"</span><span class='layout'>)</span>+<a name="line-456"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"spd"</span><span class='layout'>,</span>	<span class='str'>"application/x-font-speedo"</span><span class='layout'>)</span>+<a name="line-457"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sql"</span><span class='layout'>,</span>	<span class='str'>"text/x-sql"</span><span class='layout'>)</span>+<a name="line-458"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"src"</span><span class='layout'>,</span>	<span class='str'>"application/x-wais-source"</span><span class='layout'>)</span>+<a name="line-459"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"srf"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-460"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ssm"</span><span class='layout'>,</span>	<span class='str'>"application/x-streamingmedia"</span><span class='layout'>)</span>+<a name="line-461"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"stc"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.sun.xml.calc.template"</span><span class='layout'>)</span>+<a name="line-462"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"std"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.sun.xml.draw.template"</span><span class='layout'>)</span>+<a name="line-463"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sti"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.sun.xml.impress.template"</span><span class='layout'>)</span>+<a name="line-464"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"stm"</span><span class='layout'>,</span>	<span class='str'>"audio/x-stm"</span><span class='layout'>)</span>+<a name="line-465"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"stw"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.sun.xml.writer.template"</span><span class='layout'>)</span>+<a name="line-466"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sty"</span><span class='layout'>,</span>	<span class='str'>"text/x-tex"</span><span class='layout'>)</span>+<a name="line-467"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sun"</span><span class='layout'>,</span>	<span class='str'>"image/x-sun-raster"</span><span class='layout'>)</span>+<a name="line-468"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sv4cpio"</span><span class='layout'>,</span>	<span class='str'>"application/x-sv4cpio"</span><span class='layout'>)</span>+<a name="line-469"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sv4crc"</span><span class='layout'>,</span>	<span class='str'>"application/x-sv4crc"</span><span class='layout'>)</span>+<a name="line-470"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"svg"</span><span class='layout'>,</span>	<span class='str'>"image/svg+xml"</span><span class='layout'>)</span>+<a name="line-471"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"swf"</span><span class='layout'>,</span>	<span class='str'>"application/x-shockwave-flash"</span><span class='layout'>)</span>+<a name="line-472"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sxc"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.sun.xml.calc"</span><span class='layout'>)</span>+<a name="line-473"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sxd"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.sun.xml.draw"</span><span class='layout'>)</span>+<a name="line-474"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sxg"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.sun.xml.writer.global"</span><span class='layout'>)</span>+<a name="line-475"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sxi"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.sun.xml.impress"</span><span class='layout'>)</span>+<a name="line-476"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sxm"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.sun.xml.math"</span><span class='layout'>)</span>+<a name="line-477"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sxw"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.sun.xml.writer"</span><span class='layout'>)</span>+<a name="line-478"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"sylk"</span><span class='layout'>,</span>	<span class='str'>"text/spreadsheet"</span><span class='layout'>)</span>+<a name="line-479"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"t"</span><span class='layout'>,</span>	<span class='str'>"application/x-troff"</span><span class='layout'>)</span>+<a name="line-480"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tar"</span><span class='layout'>,</span>	<span class='str'>"application/x-tar"</span><span class='layout'>)</span>+<a name="line-481"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tar.Z"</span><span class='layout'>,</span>	<span class='str'>"application/x-compressed-tar"</span><span class='layout'>)</span>+<a name="line-482"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tar.Z"</span><span class='layout'>,</span>	<span class='str'>"application/x-tarz"</span><span class='layout'>)</span>+<a name="line-483"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tar.bz"</span><span class='layout'>,</span>	<span class='str'>"application/x-bzip-compressed-tar"</span><span class='layout'>)</span>+<a name="line-484"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tar.bz"</span><span class='layout'>,</span>	<span class='str'>"application/x-bzip-compressed-tar"</span><span class='layout'>)</span>+<a name="line-485"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tar.bz2"</span><span class='layout'>,</span>	<span class='str'>"application/x-bzip-compressed-tar"</span><span class='layout'>)</span>+<a name="line-486"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tar.bz2"</span><span class='layout'>,</span>	<span class='str'>"application/x-bzip-compressed-tar"</span><span class='layout'>)</span>+<a name="line-487"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tar.gz"</span><span class='layout'>,</span>	<span class='str'>"application/x-compressed-tar"</span><span class='layout'>)</span>+<a name="line-488"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tar.gz"</span><span class='layout'>,</span>	<span class='str'>"application/x-compressed-tar"</span><span class='layout'>)</span>+<a name="line-489"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tar.lzo"</span><span class='layout'>,</span>	<span class='str'>"application/x-lzop-compressed-tar"</span><span class='layout'>)</span>+<a name="line-490"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tar.lzo"</span><span class='layout'>,</span>	<span class='str'>"application/x-tzo"</span><span class='layout'>)</span>+<a name="line-491"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"taz"</span><span class='layout'>,</span>	<span class='str'>"application/x-compressed-tar"</span><span class='layout'>)</span>+<a name="line-492"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tbz"</span><span class='layout'>,</span>	<span class='str'>"application/x-bzip-compressed-tar"</span><span class='layout'>)</span>+<a name="line-493"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tbz2"</span><span class='layout'>,</span>	<span class='str'>"application/x-bzip-compressed-tar"</span><span class='layout'>)</span>+<a name="line-494"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tcl"</span><span class='layout'>,</span>	<span class='str'>"text/x-tcl"</span><span class='layout'>)</span>+<a name="line-495"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tex"</span><span class='layout'>,</span>	<span class='str'>"text/x-tex"</span><span class='layout'>)</span>+<a name="line-496"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"texi"</span><span class='layout'>,</span>	<span class='str'>"text/x-texinfo"</span><span class='layout'>)</span>+<a name="line-497"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"texinfo"</span><span class='layout'>,</span>	<span class='str'>"text/x-texinfo"</span><span class='layout'>)</span>+<a name="line-498"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tga"</span><span class='layout'>,</span>	<span class='str'>"image/x-tga"</span><span class='layout'>)</span>+<a name="line-499"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tgz"</span><span class='layout'>,</span>	<span class='str'>"application/x-compressed-tar"</span><span class='layout'>)</span>+<a name="line-500"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tgz"</span><span class='layout'>,</span>	<span class='str'>"application/x-compressed-tar"</span><span class='layout'>)</span>+<a name="line-501"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"theme"</span><span class='layout'>,</span>	<span class='str'>"application/x-theme"</span><span class='layout'>)</span>+<a name="line-502"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tif"</span><span class='layout'>,</span>	<span class='str'>"image/tiff"</span><span class='layout'>)</span>+<a name="line-503"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tiff"</span><span class='layout'>,</span>	<span class='str'>"image/tiff"</span><span class='layout'>)</span>+<a name="line-504"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tk"</span><span class='layout'>,</span>	<span class='str'>"text/x-tcl"</span><span class='layout'>)</span>+<a name="line-505"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tm"</span><span class='layout'>,</span>	<span class='str'>"text/x-texmacs"</span><span class='layout'>)</span>+<a name="line-506"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"toc"</span><span class='layout'>,</span>	<span class='str'>"application/x-toc"</span><span class='layout'>)</span>+<a name="line-507"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"torrent"</span><span class='layout'>,</span>	<span class='str'>"application/x-bittorrent"</span><span class='layout'>)</span>+<a name="line-508"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tr"</span><span class='layout'>,</span>	<span class='str'>"application/x-troff"</span><span class='layout'>)</span>+<a name="line-509"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ts"</span><span class='layout'>,</span>	<span class='str'>"application/x-linguist"</span><span class='layout'>)</span>+<a name="line-510"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ts"</span><span class='layout'>,</span>	<span class='str'>"text/x-texmacs"</span><span class='layout'>)</span>+<a name="line-511"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tsv"</span><span class='layout'>,</span>	<span class='str'>"text/tab-separated-values"</span><span class='layout'>)</span>+<a name="line-512"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ttc"</span><span class='layout'>,</span>	<span class='str'>"application/x-font-ttf"</span><span class='layout'>)</span>+<a name="line-513"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ttf"</span><span class='layout'>,</span>	<span class='str'>"application/x-font-ttf"</span><span class='layout'>)</span>+<a name="line-514"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"txt"</span><span class='layout'>,</span>	<span class='str'>"text/plain"</span><span class='layout'>)</span>+<a name="line-515"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tzo"</span><span class='layout'>,</span>	<span class='str'>"application/x-lzop-compressed-tar"</span><span class='layout'>)</span>+<a name="line-516"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"tzo"</span><span class='layout'>,</span>	<span class='str'>"application/x-tzo"</span><span class='layout'>)</span>+<a name="line-517"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ui"</span><span class='layout'>,</span>	<span class='str'>"application/x-designer"</span><span class='layout'>)</span>+<a name="line-518"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"uil"</span><span class='layout'>,</span>	<span class='str'>"text/x-uil"</span><span class='layout'>)</span>+<a name="line-519"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ult"</span><span class='layout'>,</span>	<span class='str'>"audio/x-mod"</span><span class='layout'>)</span>+<a name="line-520"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"uni"</span><span class='layout'>,</span>	<span class='str'>"audio/x-mod"</span><span class='layout'>)</span>+<a name="line-521"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"uri"</span><span class='layout'>,</span>	<span class='str'>"text/x-uri"</span><span class='layout'>)</span>+<a name="line-522"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"url"</span><span class='layout'>,</span>	<span class='str'>"text/x-uri"</span><span class='layout'>)</span>+<a name="line-523"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"ustar"</span><span class='layout'>,</span>	<span class='str'>"application/x-ustar"</span><span class='layout'>)</span>+<a name="line-524"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"vb"</span><span class='layout'>,</span>	<span class='str'>"text/x-vb"</span><span class='layout'>)</span>+<a name="line-525"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"vcf"</span><span class='layout'>,</span>	<span class='str'>"text/directory"</span><span class='layout'>)</span>+<a name="line-526"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"vcs"</span><span class='layout'>,</span>	<span class='str'>"text/calendar"</span><span class='layout'>)</span>+<a name="line-527"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"vct"</span><span class='layout'>,</span>	<span class='str'>"text/directory"</span><span class='layout'>)</span>+<a name="line-528"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"vob"</span><span class='layout'>,</span>	<span class='str'>"video/mpeg"</span><span class='layout'>)</span>+<a name="line-529"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"voc"</span><span class='layout'>,</span>	<span class='str'>"audio/x-voc"</span><span class='layout'>)</span>+<a name="line-530"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"vor"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.stardivision.writer"</span><span class='layout'>)</span>+<a name="line-531"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"war"</span><span class='layout'>,</span>	<span class='str'>"application/x-java-archive"</span><span class='layout'>)</span>+<a name="line-532"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wav"</span><span class='layout'>,</span>	<span class='str'>"audio/x-wav"</span><span class='layout'>)</span>+<a name="line-533"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wb1"</span><span class='layout'>,</span>	<span class='str'>"application/x-quattro-pro"</span><span class='layout'>)</span>+<a name="line-534"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wb1"</span><span class='layout'>,</span>	<span class='str'>"application/x-quattropro"</span><span class='layout'>)</span>+<a name="line-535"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wb2"</span><span class='layout'>,</span>	<span class='str'>"application/x-quattro-pro"</span><span class='layout'>)</span>+<a name="line-536"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wb2"</span><span class='layout'>,</span>	<span class='str'>"application/x-quattropro"</span><span class='layout'>)</span>+<a name="line-537"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wb3"</span><span class='layout'>,</span>	<span class='str'>"application/x-quattro-pro"</span><span class='layout'>)</span>+<a name="line-538"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wb3"</span><span class='layout'>,</span>	<span class='str'>"application/x-quattropro"</span><span class='layout'>)</span>+<a name="line-539"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wk1"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.lotus-1-2-3"</span><span class='layout'>)</span>+<a name="line-540"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wk3"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.lotus-1-2-3"</span><span class='layout'>)</span>+<a name="line-541"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wk4"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.lotus-1-2-3"</span><span class='layout'>)</span>+<a name="line-542"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wks"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.lotus-1-2-3"</span><span class='layout'>)</span>+<a name="line-543"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wmf"</span><span class='layout'>,</span>	<span class='str'>"image/x-wmf"</span><span class='layout'>)</span>+<a name="line-544"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wml"</span><span class='layout'>,</span>	<span class='str'>"text/vnd.wap.wml"</span><span class='layout'>)</span>+<a name="line-545"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wmv"</span><span class='layout'>,</span>	<span class='str'>"video/x-ms-wmv"</span><span class='layout'>)</span>+<a name="line-546"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wpd"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.wordperfect"</span><span class='layout'>)</span>+<a name="line-547"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wpg"</span><span class='layout'>,</span>	<span class='str'>"application/x-wpg"</span><span class='layout'>)</span>+<a name="line-548"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wri"</span><span class='layout'>,</span>	<span class='str'>"application/x-mswrite"</span><span class='layout'>)</span>+<a name="line-549"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wrl"</span><span class='layout'>,</span>	<span class='str'>"model/vrml"</span><span class='layout'>)</span>+<a name="line-550"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"wsdl"</span><span class='layout'>,</span>	<span class='str'>"application/x-wsdl"</span><span class='layout'>)</span>+<a name="line-551"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"x3f"</span><span class='layout'>,</span>	<span class='str'>"image/x-dcraw"</span><span class='layout'>)</span>+<a name="line-552"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xac"</span><span class='layout'>,</span>	<span class='str'>"application/x-gnucash"</span><span class='layout'>)</span>+<a name="line-553"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xbel"</span><span class='layout'>,</span>	<span class='str'>"application/x-xbel"</span><span class='layout'>)</span>+<a name="line-554"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xbm"</span><span class='layout'>,</span>	<span class='str'>"image/x-xbitmap"</span><span class='layout'>)</span>+<a name="line-555"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xcf"</span><span class='layout'>,</span>	<span class='str'>"image/x-xcf"</span><span class='layout'>)</span>+<a name="line-556"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xcf.bz2"</span><span class='layout'>,</span>	<span class='str'>"image/x-compressed-xcf"</span><span class='layout'>)</span>+<a name="line-557"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xcf.gz"</span><span class='layout'>,</span>	<span class='str'>"image/x-compressed-xcf"</span><span class='layout'>)</span>+<a name="line-558"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xds"</span><span class='layout'>,</span>	<span class='str'>"text/x-xds"</span><span class='layout'>)</span>+<a name="line-559"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xhtml"</span><span class='layout'>,</span>	<span class='str'>"application/xhtml+xml"</span><span class='layout'>)</span>+<a name="line-560"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xi"</span><span class='layout'>,</span>	<span class='str'>"audio/x-xi"</span><span class='layout'>)</span>+<a name="line-561"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xla"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.ms-excel"</span><span class='layout'>)</span>+<a name="line-562"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xlc"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.ms-excel"</span><span class='layout'>)</span>+<a name="line-563"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xld"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.ms-excel"</span><span class='layout'>)</span>+<a name="line-564"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xll"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.ms-excel"</span><span class='layout'>)</span>+<a name="line-565"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xlm"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.ms-excel"</span><span class='layout'>)</span>+<a name="line-566"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xls"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.ms-excel"</span><span class='layout'>)</span>+<a name="line-567"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xlt"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.ms-excel"</span><span class='layout'>)</span>+<a name="line-568"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xlw"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.ms-excel"</span><span class='layout'>)</span>+<a name="line-569"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xm"</span><span class='layout'>,</span>	<span class='str'>"audio/x-xm"</span><span class='layout'>)</span>+<a name="line-570"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xmi"</span><span class='layout'>,</span>	<span class='str'>"text/x-xmi"</span><span class='layout'>)</span>+<a name="line-571"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xml"</span><span class='layout'>,</span>	<span class='str'>"text/xml"</span><span class='layout'>)</span>+<a name="line-572"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xpl"</span><span class='layout'>,</span>	<span class='str'>"audio/x-scpls"</span><span class='layout'>)</span>+<a name="line-573"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xpm"</span><span class='layout'>,</span>	<span class='str'>"image/x-xpixmap"</span><span class='layout'>)</span>+<a name="line-574"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xsl"</span><span class='layout'>,</span>	<span class='str'>"text/x-xsl"</span><span class='layout'>)</span>+<a name="line-575"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xsl"</span><span class='layout'>,</span>	<span class='str'>"text/x-xslt"</span><span class='layout'>)</span>+<a name="line-576"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xslfo"</span><span class='layout'>,</span>	<span class='str'>"text/x-xslfo"</span><span class='layout'>)</span>+<a name="line-577"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xslt"</span><span class='layout'>,</span>	<span class='str'>"text/x-xslt"</span><span class='layout'>)</span>+<a name="line-578"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xul"</span><span class='layout'>,</span>	<span class='str'>"application/vnd.mozilla.xul+xml"</span><span class='layout'>)</span>+<a name="line-579"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"xwd"</span><span class='layout'>,</span>	<span class='str'>"image/x-xwindowdump"</span><span class='layout'>)</span>+<a name="line-580"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"zabw"</span><span class='layout'>,</span>	<span class='str'>"application/x-abiword"</span><span class='layout'>)</span>+<a name="line-581"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"zip"</span><span class='layout'>,</span>	<span class='str'>"application/zip"</span><span class='layout'>)</span>+<a name="line-582"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"zoo"</span><span class='layout'>,</span>	<span class='str'>"application/x-zoo"</span><span class='layout'>)</span>+<a name="line-583"></a>   <span class='keyglyph'>]</span>+<a name="line-584"></a>+</pre></body>+</html>
+ doc/hdoc/src/Text-XML-HXT-DOM-MimeTypes.html view
@@ -0,0 +1,123 @@+<!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.MimeTypes+<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  : experimental+<a name="line-10"></a>   Portability: portable+<a name="line-11"></a>+<a name="line-12"></a>   mime type related data and 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'>MimeTypes</span>+<a name="line-19"></a><span class='keyword'>where</span>+<a name="line-20"></a>+<a name="line-21"></a><span class='keyword'>import</span>           <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Monad</span> <span class='layout'>(</span><span class='varid'>mplus</span><span class='layout'>)</span>+<a name="line-22"></a>+<a name="line-23"></a><span class='keyword'>import</span>           <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Char</span>+<a name="line-24"></a><span class='keyword'>import</span>           <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>List</span>+<a name="line-25"></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-26"></a><span class='keyword'>import</span>           <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</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='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'>MimeTypeDefaults</span>+<a name="line-31"></a>+<a name="line-32"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-33"></a>+<a name="line-34"></a><a name="MimeTypeTable"></a><span class='keyword'>type</span> <span class='conid'>MimeTypeTable</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'>String</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'>-- mime types</span>+<a name="line-39"></a><span class='comment'>--</span>+<a name="line-40"></a><span class='comment'>-- see RFC \"http:\/\/www.rfc-editor.org\/rfc\/rfc3023.txt\"</span>+<a name="line-41"></a>+<a name="line-42"></a><a name="application_xhtml"></a><span class='definition'>application_xhtml</span><span class='layout'>,</span>+<a name="line-43"></a> <span class='varid'>application_xml</span><span class='layout'>,</span>+<a name="line-44"></a> <span class='varid'>application_xml_external_parsed_entity</span><span class='layout'>,</span>+<a name="line-45"></a> <span class='varid'>application_xml_dtd</span><span class='layout'>,</span>+<a name="line-46"></a> <span class='varid'>text_html</span><span class='layout'>,</span>+<a name="line-47"></a> <span class='varid'>text_xml</span><span class='layout'>,</span>+<a name="line-48"></a> <span class='varid'>text_xml_external_parsed_entity</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>+<a name="line-49"></a>+<a name="line-50"></a><span class='definition'>application_xhtml</span>			<span class='keyglyph'>=</span> <span class='str'>"application/xhtml+xml"</span>+<a name="line-51"></a><a name="application_xml"></a><span class='definition'>application_xml</span>				<span class='keyglyph'>=</span> <span class='str'>"application/xml"</span>+<a name="line-52"></a><a name="application_xml_external_parsed_entity"></a><span class='definition'>application_xml_external_parsed_entity</span>	<span class='keyglyph'>=</span> <span class='str'>"application/xml-external-parsed-entity"</span>+<a name="line-53"></a><a name="application_xml_dtd"></a><span class='definition'>application_xml_dtd</span>			<span class='keyglyph'>=</span> <span class='str'>"application/xml-dtd"</span>+<a name="line-54"></a>+<a name="line-55"></a><a name="text_html"></a><span class='definition'>text_html</span>				<span class='keyglyph'>=</span> <span class='str'>"text/html"</span>+<a name="line-56"></a><a name="text_xml"></a><span class='definition'>text_xml</span>				<span class='keyglyph'>=</span> <span class='str'>"text/xml"</span>+<a name="line-57"></a><a name="text_xml_external_parsed_entity"></a><span class='definition'>text_xml_external_parsed_entity</span>		<span class='keyglyph'>=</span> <span class='str'>"text/xml-external-parsed-entity"</span>+<a name="line-58"></a>+<a name="line-59"></a><a name="isHtmlMimeType"></a><span class='definition'>isHtmlMimeType</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>+<a name="line-60"></a><span class='definition'>isHtmlMimeType</span> <span class='varid'>t</span>+<a name="line-61"></a>    <span class='keyglyph'>=</span> <span class='varid'>t</span> <span class='varop'>==</span> <span class='varid'>text_html</span>+<a name="line-62"></a>+<a name="line-63"></a><a name="isXmlMimeType"></a><span class='definition'>isXmlMimeType</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>+<a name="line-64"></a><span class='definition'>isXmlMimeType</span> <span class='varid'>t</span>+<a name="line-65"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>t</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span> <span class='varid'>application_xhtml</span>+<a name="line-66"></a>		 <span class='layout'>,</span> <span class='varid'>application_xml</span>+<a name="line-67"></a>		 <span class='layout'>,</span> <span class='varid'>application_xml_external_parsed_entity</span>+<a name="line-68"></a>		 <span class='layout'>,</span> <span class='varid'>application_xml_dtd</span>+<a name="line-69"></a>		 <span class='layout'>,</span> <span class='varid'>text_xml</span>+<a name="line-70"></a>		 <span class='layout'>,</span> <span class='varid'>text_xml_external_parsed_entity</span>+<a name="line-71"></a>		 <span class='keyglyph'>]</span>+<a name="line-72"></a>	<span class='varop'>||</span>+<a name="line-73"></a>	<span class='str'>"+xml"</span> <span class='varop'>`isSuffixOf`</span> <span class='varid'>t</span>		<span class='comment'>-- application/mathml+xml</span>+<a name="line-74"></a>      <span class='layout'>)</span>					<span class='comment'>-- or image/svg+xml</span>+<a name="line-75"></a>+<a name="line-76"></a><a name="defaultMimeTypeTable"></a><span class='definition'>defaultMimeTypeTable</span>	<span class='keyglyph'>::</span> <span class='conid'>MimeTypeTable</span>+<a name="line-77"></a><span class='definition'>defaultMimeTypeTable</span>+<a name="line-78"></a>    <span class='keyglyph'>=</span> <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>fromList</span> <span class='varid'>mimeTypeDefaults</span>+<a name="line-79"></a>+<a name="line-80"></a><a name="extensionToMimeType"></a><span class='definition'>extensionToMimeType</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>MimeTypeTable</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span>+<a name="line-81"></a><span class='definition'>extensionToMimeType</span> <span class='varid'>e</span>+<a name="line-82"></a>    <span class='keyglyph'>=</span> <span class='varid'>fromMaybe</span> <span class='str'>""</span> <span class='varop'>.</span> <span class='varid'>lookupMime</span> +<a name="line-83"></a>    <span class='keyword'>where</span>+<a name="line-84"></a>    <span class='varid'>lookupMime</span> <span class='varid'>t</span>+<a name="line-85"></a>	<span class='keyglyph'>=</span> <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>lookup</span> <span class='varid'>e</span> <span class='varid'>t</span>			<span class='comment'>-- try exact match</span>+<a name="line-86"></a>	  <span class='varop'>`mplus`</span>+<a name="line-87"></a>	  <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>lookup</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='varid'>toLower</span> <span class='varid'>e</span><span class='layout'>)</span> <span class='varid'>t</span>	<span class='comment'>-- else try lowercase match</span>+<a name="line-88"></a>          <span class='varop'>`mplus`</span>+<a name="line-89"></a>	  <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>lookup</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='varid'>toUpper</span> <span class='varid'>e</span><span class='layout'>)</span> <span class='varid'>t</span>	<span class='comment'>-- else try uppercase match</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><a name="readMimeTypeTable"></a><span class='definition'>readMimeTypeTable</span>	<span class='keyglyph'>::</span> <span class='conid'>FilePath</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='conid'>MimeTypeTable</span>+<a name="line-94"></a><span class='definition'>readMimeTypeTable</span> <span class='varid'>inp</span>+<a name="line-95"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-96"></a>      <span class='varid'>h</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>openFile</span> <span class='varid'>inp</span> <span class='conid'>ReadMode</span>+<a name="line-97"></a>      <span class='varid'>c</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>hGetContents</span> <span class='varid'>h</span>+<a name="line-98"></a>      <span class='varid'>return</span> <span class='varop'>.</span> <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>fromList</span> <span class='varop'>.</span> <span class='varid'>parseMimeTypeTable</span> <span class='varop'>$</span> <span class='varid'>c</span>+<a name="line-99"></a>+<a name="line-100"></a><a name="parseMimeTypeTable"></a><span class='definition'>parseMimeTypeTable</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>+<a name="line-101"></a><span class='definition'>parseMimeTypeTable</span>+<a name="line-102"></a>    <span class='keyglyph'>=</span> <span class='varid'>concat</span>+<a name="line-103"></a>      <span class='varop'>.</span> <span class='varid'>map</span> <span class='varid'>buildPairs</span>+<a name="line-104"></a>      <span class='varop'>.</span> <span class='varid'>map</span> <span class='varid'>words</span>+<a name="line-105"></a>      <span class='varop'>.</span> <span class='varid'>filter</span> <span class='layout'>(</span><span class='varid'>not</span> <span class='varop'>.</span> <span class='layout'>(</span><span class='str'>"#"</span> <span class='varop'>`isPrefixOf`</span><span class='layout'>)</span><span class='layout'>)</span>+<a name="line-106"></a>      <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'>all</span> <span class='layout'>(</span><span class='varid'>isSpace</span><span class='layout'>)</span><span class='layout'>)</span>+<a name="line-107"></a>      <span class='varop'>.</span> <span class='varid'>lines</span>+<a name="line-108"></a>    <span class='keyword'>where</span>+<a name="line-109"></a>    <span class='varid'>buildPairs</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='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>+<a name="line-110"></a>    <span class='varid'>buildPairs</span>	<span class='conid'>[]</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>+<a name="line-111"></a>    <span class='varid'>buildPairs</span>	<span class='layout'>(</span><span class='varid'>mt</span><span class='conop'>:</span><span class='varid'>exts</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>map</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'>x</span><span class='layout'>,</span> <span class='varid'>mt</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>exts</span>+<a name="line-112"></a>+<a name="line-113"></a><span class='comment'>-- ------------------------------------------------------------</span>+</pre></body>+</html>
− doc/hdoc/src/Text-XML-HXT-DOM-Namespace.html
@@ -1,64 +0,0 @@-<!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><span class='comment'>--</span>-<a name="line-4"></a><span class='comment'>-- $Id: Namespace.hs,v 1.3 2005/01/06 10:48:07 hxml Exp $</span>-<a name="line-5"></a><span class='comment'>--</span>-<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><span class='varop'>.</span><span class='conid'>Namespace</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'>Namespace</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'>NamespaceFilter</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><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-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'>XmlOutput</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> <span class='varid'>traceMsg</span>-<a name="line-20"></a>    <span class='layout'>)</span>-<a name="line-21"></a>-<a name="line-22"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>-<a name="line-23"></a>-<a name="line-24"></a><span class='comment'>-- |</span>-<a name="line-25"></a><span class='comment'>-- propagate all namespace declarations, check namespace constraints and issue errors.</span>-<a name="line-26"></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-27"></a><span class='comment'>--</span>-<a name="line-28"></a><span class='comment'>-- see also : 'propagateNamespaces', 'validateNamespaces'</span>-<a name="line-29"></a>-<a name="line-30"></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-31"></a><span class='definition'>propagateAndValidateNamespaces</span>-<a name="line-32"></a>    <span class='keyglyph'>=</span> <span class='varid'>traceMsg</span> <span class='num'>2</span> <span class='str'>"propagating namespaces"</span>-<a name="line-33"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-34"></a>      <span class='varid'>liftMf</span> <span class='varid'>propagateNamespaces</span>-<a name="line-35"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-36"></a>      <span class='varid'>traceTree</span>-<a name="line-37"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-38"></a>      <span class='varid'>traceSource</span>-<a name="line-39"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-40"></a>      <span class='varid'>traceMsg</span> <span class='num'>2</span> <span class='str'>"validating namespaces"</span>-<a name="line-41"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-42"></a>      <span class='varid'>validate</span>-<a name="line-43"></a>    <span class='keyword'>where</span>-<a name="line-44"></a>    <span class='varid'>validate</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>-<a name="line-45"></a>    <span class='varid'>validate</span> <span class='varid'>t</span>-<a name="line-46"></a>	<span class='keyglyph'>=</span> <span class='keyword'>let</span>-<a name="line-47"></a>	  <span class='varid'>errs</span> <span class='keyglyph'>=</span> <span class='varid'>validateNamespaces</span> <span class='varid'>t</span>-<a name="line-48"></a>	  <span class='keyword'>in</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>errs</span>-<a name="line-49"></a>	     <span class='keyword'>then</span> <span class='varid'>thisM</span> <span class='varid'>t</span>-<a name="line-50"></a>	     <span class='keyword'>else</span> <span class='keyword'>do</span>-<a name="line-51"></a>		  <span class='varid'>liftF</span> <span class='varid'>this</span> <span class='varop'>$$&lt;</span> <span class='varid'>errs</span>-<a name="line-52"></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-53"></a>	  -<a name="line-54"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-DOM-NamespaceFilter.html
@@ -1,236 +0,0 @@-<!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'>-- $Id: NamespaceFilter.hs,v 1.4 2006/11/12 14:53:00 hxml Exp $</span>-<a name="line-5"></a><span class='comment'>--</span>-<a name="line-6"></a><span class='comment'>-- Namespaces are processed with two main filter, 'propagateNamespaces'</span>-<a name="line-7"></a><span class='comment'>-- and 'validateNamespaces'.</span>-<a name="line-8"></a><span class='comment'>--</span>-<a name="line-9"></a><span class='comment'>-- 'propagateNamespaces' takes a XML tree and</span>-<a name="line-10"></a><span class='comment'>-- attaches extra namespace info at every tag name and attribute name.</span>-<a name="line-11"></a><span class='comment'>-- So after processing a tree with 'propagateNamespaces', the access functions</span>-<a name="line-12"></a><span class='comment'>-- "namespaceOf" and "universalNameOf" deliver the associated namespace (or \"\")</span>-<a name="line-13"></a><span class='comment'>-- for tag names and attribute names.</span>-<a name="line-14"></a><span class='comment'>--</span>-<a name="line-15"></a><span class='comment'>-- 'validateNamespaces' checks whether names are wellformed related to the XML namespace definition.</span>-<a name="line-16"></a><span class='comment'>-- whether a legal namespace is declared for all prefixes, and whether attribute names are unique</span>-<a name="line-17"></a><span class='comment'>-- related to universal names.</span>-<a name="line-18"></a>-<a name="line-19"></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-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'>NamespaceFilter</span>-<a name="line-21"></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-22"></a>    <span class='layout'>)</span>-<a name="line-23"></a><span class='keyword'>where</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'>XmlTree</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'>NamespacePredicates</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'>Util</span>-<a name="line-30"></a>    <span class='layout'>(</span> <span class='varid'>doubles</span> <span class='layout'>)</span>-<a name="line-31"></a>-<a name="line-32"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>-<a name="line-33"></a><span class='comment'>--</span>-<a name="line-34"></a>-<a name="line-35"></a><span class='comment'>-- |</span>-<a name="line-36"></a><span class='comment'>-- Type for the namespace association list, used when propagating namespaces by</span>-<a name="line-37"></a><span class='comment'>-- modifying the 'QName' values in a tree</span>-<a name="line-38"></a>-<a name="line-39"></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-40"></a>-<a name="line-41"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>-<a name="line-42"></a>-<a name="line-43"></a><span class='comment'>-- |</span>-<a name="line-44"></a><span class='comment'>-- propagate all namespace declarations \"xmlns:ns=...\" to all</span>-<a name="line-45"></a><span class='comment'>-- tag and attribute nodes of a document.</span>-<a name="line-46"></a><span class='comment'>--</span>-<a name="line-47"></a><span class='comment'>-- This filter does not check for illegal use of namespaces.</span>-<a name="line-48"></a><span class='comment'>-- The real work is done by 'propagateNamespaceEnv'.</span>-<a name="line-49"></a><span class='comment'>--</span>-<a name="line-50"></a><span class='comment'>-- The filter may be applied repeatedly if neccessary.</span>-<a name="line-51"></a>-<a name="line-52"></a><a name="propagateNamespaces"></a><span class='definition'>propagateNamespaces</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-53"></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-54"></a>-<a name="line-55"></a><span class='comment'>-- |</span>-<a name="line-56"></a><span class='comment'>-- attaches the namespace info given by the namespace table</span>-<a name="line-57"></a><span class='comment'>-- to a tag node and its attributes and children.</span>-<a name="line-58"></a>-<a name="line-59"></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-60"></a><span class='definition'>propagateNamespaceEnv</span> <span class='varid'>env</span> <span class='varid'>n</span>-<a name="line-61"></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-62"></a>	  <span class='varop'>.&gt;</span>-<a name="line-63"></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-64"></a>	  <span class='varop'>.&gt;</span>-<a name="line-65"></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-66"></a>	<span class='layout'>)</span>-<a name="line-67"></a>	<span class='varop'>`when`</span>-<a name="line-68"></a>	<span class='varid'>isXTag</span>-<a name="line-69"></a>      <span class='layout'>)</span>-<a name="line-70"></a>      <span class='varop'>$</span> <span class='varid'>n</span>-<a name="line-71"></a>    <span class='keyword'>where</span>-<a name="line-72"></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-73"></a>		  <span class='varop'>.&gt;</span>-<a name="line-74"></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-75"></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-76"></a>				 <span class='varop'>&amp;&amp;</span>-<a name="line-77"></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-78"></a>				<span class='layout'>)</span>-<a name="line-79"></a>			     <span class='layout'>)</span>-<a name="line-80"></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-81"></a>			     <span class='varop'>.</span> <span class='varid'>qualifiedName</span>		<span class='comment'>-- select attribute name</span>-<a name="line-82"></a>			   <span class='layout'>)</span>-<a name="line-83"></a>		  <span class='varop'>$</span> <span class='varid'>n</span>-<a name="line-84"></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-85"></a>			    <span class='varop'>.</span> <span class='varid'>snd</span>			<span class='comment'>-- take the local part with leading ":"</span>-<a name="line-86"></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-87"></a>			    <span class='varop'>.</span> <span class='varid'>nameOf</span>			<span class='comment'>-- select attribute name</span>-<a name="line-88"></a>			   <span class='layout'>)</span> <span class='varid'>nsAttrs</span><span class='layout'>)</span>-<a name="line-89"></a>		      <span class='layout'>(</span><span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>xshow</span>-<a name="line-90"></a>			    <span class='varop'>.</span>-<a name="line-91"></a>			    <span class='varid'>getChildren</span>-<a name="line-92"></a>			   <span class='layout'>)</span> <span class='varid'>nsAttrs</span><span class='layout'>)</span>-<a name="line-93"></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-94"></a>-<a name="line-95"></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-96"></a>    <span class='varid'>attachNamespaceUrisToAttr</span> <span class='varid'>attrEnv</span>-<a name="line-97"></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-98"></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-99"></a>			     <span class='varop'>&amp;&amp;</span>-<a name="line-100"></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-101"></a>			   <span class='layout'>)</span>-<a name="line-102"></a>		       <span class='layout'>)</span>-<a name="line-103"></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-104"></a>		       <span class='varop'>.</span> <span class='varid'>qualifiedName</span>			<span class='comment'>-- select attribute name</span>-<a name="line-105"></a>		     <span class='layout'>)</span>-<a name="line-106"></a>	    <span class='varop'>`guards`</span>-<a name="line-107"></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-108"></a>	  <span class='layout'>)</span>-<a name="line-109"></a>          <span class='varop'>`orElse`</span>-<a name="line-110"></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-111"></a>	    <span class='varop'>`when`</span>-<a name="line-112"></a>	    <span class='varid'>isAttr</span> <span class='varid'>a_xmlns</span>-<a name="line-113"></a>	  <span class='layout'>)</span>-<a name="line-114"></a>-<a name="line-115"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>-<a name="line-116"></a>-<a name="line-117"></a><span class='comment'>-- |</span>-<a name="line-118"></a><span class='comment'>-- validate the namespace constraints in a whole tree.</span>-<a name="line-119"></a><span class='comment'>-- result is the list of errors concerning namespaces.</span>-<a name="line-120"></a><span class='comment'>-- Work is done by applying 'validate1Namespaces' to all nodes.</span>-<a name="line-121"></a><span class='comment'>-- Predicates 'isWellformedQName', 'isWellformedQualifiedName', 'isDeclaredNamespace'</span>-<a name="line-122"></a><span class='comment'>-- and 'isWellformedNSDecl' are applied to the appropriate tags and attributes.</span>-<a name="line-123"></a>-<a name="line-124"></a><a name="validateNamespaces"></a><span class='definition'>validateNamespaces</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-125"></a><span class='definition'>validateNamespaces</span>-<a name="line-126"></a>    <span class='keyglyph'>=</span> <span class='varid'>choice</span> <span class='keyglyph'>[</span> <span class='varid'>isRoot</span>-<a name="line-127"></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-128"></a>	     <span class='layout'>,</span> <span class='varid'>this</span>-<a name="line-129"></a>	       <span class='conop'>:-&gt;</span> <span class='varid'>multi</span> <span class='varid'>validate1Namespaces</span>-<a name="line-130"></a>	     <span class='keyglyph'>]</span>-<a name="line-131"></a>-<a name="line-132"></a><span class='comment'>-- |</span>-<a name="line-133"></a><span class='comment'>-- a single node for namespace constrains.</span>-<a name="line-134"></a>-<a name="line-135"></a><a name="validate1Namespaces"></a><span class='definition'>validate1Namespaces</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-136"></a><span class='definition'>validate1Namespaces</span>-<a name="line-137"></a>    <span class='keyglyph'>=</span> <span class='varid'>choice</span> <span class='keyglyph'>[</span> <span class='varid'>isXTag</span>-<a name="line-138"></a>	       <span class='conop'>:-&gt;</span>-<a name="line-139"></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-140"></a>		     <span class='varop'>`guards`</span>-<a name="line-141"></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-142"></a>-<a name="line-143"></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-144"></a>		     <span class='varop'>`guards`</span>-<a name="line-145"></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-146"></a>-<a name="line-147"></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-148"></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-149"></a>		               <span class='keyword'>in</span>-<a name="line-150"></a>		               <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>dbls</span>-<a name="line-151"></a>		               <span class='keyword'>then</span> <span class='varid'>none</span>-<a name="line-152"></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-153"></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-154"></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-155"></a>					<span class='layout'>)</span>-<a name="line-156"></a>			     <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>n</span>-<a name="line-157"></a>		     <span class='layout'>)</span>-<a name="line-158"></a>-<a name="line-159"></a>		   <span class='layout'>,</span> <span class='varid'>getAttrl</span> <span class='varop'>.&gt;</span> <span class='varid'>validate1Namespaces</span>-<a name="line-160"></a>		   <span class='keyglyph'>]</span>-<a name="line-161"></a>-<a name="line-162"></a>	     <span class='layout'>,</span> <span class='varid'>isXAttr</span>-<a name="line-163"></a>	       <span class='conop'>:-&gt;</span>-<a name="line-164"></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-165"></a>		     <span class='varop'>`guards`</span>-<a name="line-166"></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-167"></a>-<a name="line-168"></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-169"></a>	             <span class='varop'>`guards`</span>-<a name="line-170"></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-171"></a>-<a name="line-172"></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-173"></a>		     <span class='varop'>`guards`</span>-<a name="line-174"></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-175"></a>-<a name="line-176"></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-177"></a>		     <span class='varop'>`guards`</span>-<a name="line-178"></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-179"></a>	           <span class='keyglyph'>]</span>-<a name="line-180"></a>-<a name="line-181"></a>             <span class='layout'>,</span> <span class='varid'>isXDTD</span>-<a name="line-182"></a>	       <span class='conop'>:-&gt;</span>-<a name="line-183"></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-184"></a>		       <span class='varop'>.&gt;</span>-<a name="line-185"></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-186"></a>		     <span class='layout'>)</span>-<a name="line-187"></a>		     <span class='varop'>`guards`</span>-<a name="line-188"></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-189"></a>-<a name="line-190"></a>		   <span class='layout'>,</span> <span class='layout'>(</span> <span class='varid'>isAttlist</span>-<a name="line-191"></a>		       <span class='varop'>.&gt;</span>-<a name="line-192"></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-193"></a>		     <span class='layout'>)</span>-<a name="line-194"></a>		     <span class='varop'>`guards`</span>-<a name="line-195"></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-196"></a>-<a name="line-197"></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-198"></a>		       <span class='varop'>.&gt;</span>-<a name="line-199"></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-200"></a>		     <span class='layout'>)</span>-<a name="line-201"></a>                     <span class='varop'>`guards`</span>-<a name="line-202"></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-203"></a>		   <span class='keyglyph'>]</span>-<a name="line-204"></a>             <span class='layout'>,</span> <span class='varid'>isXPi</span>-<a name="line-205"></a>	       <span class='conop'>:-&gt;</span>-<a name="line-206"></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-207"></a>	         <span class='varop'>`guards`</span>-<a name="line-208"></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-209"></a>	       <span class='layout'>)</span>-<a name="line-210"></a>	     <span class='keyglyph'>]</span>-<a name="line-211"></a>-<a name="line-212"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>-<a name="line-213"></a>-<a name="line-214"></a><a name="isNamespaceDecl"></a><span class='definition'>isNamespaceDecl</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-215"></a><span class='definition'>isNamespaceDecl</span>-<a name="line-216"></a>    <span class='keyglyph'>=</span> <span class='varid'>isOfAttr</span> <span class='varid'>xmlnsName</span>-<a name="line-217"></a>      <span class='keyword'>where</span>-<a name="line-218"></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-219"></a>      <span class='varid'>xmlnsName</span> <span class='varid'>a</span>-<a name="line-220"></a>	  <span class='keyglyph'>=</span> <span class='varid'>px</span> <span class='varop'>==</span> <span class='varid'>a_xmlns</span>-<a name="line-221"></a>	    <span class='varop'>&amp;&amp;</span>-<a name="line-222"></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-223"></a>	  <span class='keyword'>where</span>-<a name="line-224"></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-225"></a>-<a name="line-226"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>-</pre></body>-</html>
doc/hdoc/src/Text-XML-HXT-DOM-XmlKeywords.html view
@@ -16,388 +16,349 @@ <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>   Version    : $Id: XmlKeywords.hs,v 1.10 2006/11/02 09:34:09 hxml Exp $-<a name="line-12"></a>-<a name="line-13"></a>   Constants for XML keywords, for special attribute names-<a name="line-14"></a>   and special attribute values-<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'>DOM</span><span class='varop'>.</span><span class='conid'>XmlKeywords</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'>Data</span><span class='varop'>.</span><span class='conid'>List</span>-<a name="line-24"></a>    <span class='layout'>(</span> <span class='varid'>isSuffixOf</span>-<a name="line-25"></a>    <span class='layout'>)</span>-<a name="line-26"></a>-<a name="line-27"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-28"></a><span class='comment'>--</span>-<a name="line-29"></a><span class='comment'>-- string constants for representing DTD keywords and attributes</span>-<a name="line-30"></a>-<a name="line-31"></a><a name="t_xml"></a><span class='definition'>t_xml</span><span class='layout'>,</span>				<span class='comment'>-- tag names</span>-<a name="line-32"></a> <span class='varid'>t_root</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span>-<a name="line-33"></a>-<a name="line-34"></a><a name="a_canonicalize"></a><span class='definition'>a_canonicalize</span><span class='layout'>,</span>-<a name="line-35"></a> <span class='varid'>a_default</span><span class='layout'>,</span>			<span class='comment'>-- attribute names</span>-<a name="line-36"></a> <span class='varid'>a_check_namespaces</span><span class='layout'>,</span>-<a name="line-37"></a> <span class='varid'>a_contentLength</span><span class='layout'>,</span>-<a name="line-38"></a> <span class='varid'>a_collect_errors</span><span class='layout'>,</span>-<a name="line-39"></a> <span class='varid'>a_column</span><span class='layout'>,</span>-<a name="line-40"></a> <span class='varid'>a_default_baseuri</span><span class='layout'>,</span>-<a name="line-41"></a> <span class='varid'>a_do_not_canonicalize</span><span class='layout'>,</span>-<a name="line-42"></a> <span class='varid'>a_do_not_check_namespaces</span><span class='layout'>,</span>-<a name="line-43"></a> <span class='varid'>a_do_not_issue_errors</span><span class='layout'>,</span>-<a name="line-44"></a> <span class='varid'>a_do_not_issue_warnings</span><span class='layout'>,</span>-<a name="line-45"></a> <span class='varid'>a_do_not_preserve_comment</span><span class='layout'>,</span>-<a name="line-46"></a> <span class='varid'>a_do_not_remove_whitespace</span><span class='layout'>,</span>-<a name="line-47"></a> <span class='varid'>a_do_not_use_curl</span><span class='layout'>,</span>-<a name="line-48"></a> <span class='varid'>a_do_not_validate</span><span class='layout'>,</span>-<a name="line-49"></a> <span class='varid'>a_encoding</span><span class='layout'>,</span>-<a name="line-50"></a> <span class='varid'>a_error</span><span class='layout'>,</span>-<a name="line-51"></a> <span class='varid'>a_error_log</span><span class='layout'>,</span>-<a name="line-52"></a> <span class='varid'>a_help</span><span class='layout'>,</span>-<a name="line-53"></a> <span class='varid'>a_indent</span><span class='layout'>,</span>-<a name="line-54"></a> <span class='varid'>a_issue_errors</span><span class='layout'>,</span>-<a name="line-55"></a> <span class='varid'>a_issue_warnings</span><span class='layout'>,</span>-<a name="line-56"></a> <span class='varid'>a_kind</span><span class='layout'>,</span>-<a name="line-57"></a> <span class='varid'>a_line</span><span class='layout'>,</span>-<a name="line-58"></a> <span class='varid'>a_module</span><span class='layout'>,</span>-<a name="line-59"></a> <span class='varid'>a_modifier</span><span class='layout'>,</span>-<a name="line-60"></a> <span class='varid'>a_name</span><span class='layout'>,</span>-<a name="line-61"></a> <span class='varid'>a_no_xml_pi</span><span class='layout'>,</span>-<a name="line-62"></a> <span class='varid'>a_options_curl</span><span class='layout'>,</span>-<a name="line-63"></a> <span class='varid'>a_output_encoding</span><span class='layout'>,</span>-<a name="line-64"></a> <span class='varid'>a_output_file</span><span class='layout'>,</span>-<a name="line-65"></a> <span class='varid'>a_output_xml</span><span class='layout'>,</span>-<a name="line-66"></a> <span class='varid'>a_output_html</span><span class='layout'>,</span>-<a name="line-67"></a> <span class='varid'>a_parse_by_mimetype</span><span class='layout'>,</span>-<a name="line-68"></a> <span class='varid'>a_parse_html</span><span class='layout'>,</span>-<a name="line-69"></a> <span class='varid'>a_parse_xml</span><span class='layout'>,</span>-<a name="line-70"></a> <span class='varid'>a_peref</span><span class='layout'>,</span>-<a name="line-71"></a> <span class='varid'>a_preserve_comment</span><span class='layout'>,</span>-<a name="line-72"></a> <span class='varid'>a_propagate_errors</span><span class='layout'>,</span>-<a name="line-73"></a> <span class='varid'>a_proxy</span><span class='layout'>,</span>-<a name="line-74"></a> <span class='varid'>a_remove_whitespace</span><span class='layout'>,</span>-<a name="line-75"></a> <span class='varid'>a_show_haskell</span><span class='layout'>,</span>-<a name="line-76"></a> <span class='varid'>a_show_tree</span><span class='layout'>,</span>-<a name="line-77"></a> <span class='varid'>a_source</span><span class='layout'>,</span>-<a name="line-78"></a> <span class='varid'>a_status</span><span class='layout'>,</span>-<a name="line-79"></a> <span class='varid'>a_standalone</span><span class='layout'>,</span>-<a name="line-80"></a> <span class='varid'>a_tagsoup</span><span class='layout'>,</span>-<a name="line-81"></a> <span class='varid'>a_trace</span><span class='layout'>,</span>-<a name="line-82"></a> <span class='varid'>a_type</span><span class='layout'>,</span>-<a name="line-83"></a> <span class='varid'>a_use_curl</span><span class='layout'>,</span>-<a name="line-84"></a> <span class='varid'>a_url</span><span class='layout'>,</span>-<a name="line-85"></a> <span class='varid'>a_validate</span><span class='layout'>,</span>-<a name="line-86"></a> <span class='varid'>a_value</span><span class='layout'>,</span>-<a name="line-87"></a> <span class='varid'>a_verbose</span><span class='layout'>,</span>-<a name="line-88"></a> <span class='varid'>a_version</span><span class='layout'>,</span>-<a name="line-89"></a> <span class='varid'>a_xml</span><span class='layout'>,</span>-<a name="line-90"></a> <span class='varid'>a_xmlns</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>-<a name="line-91"></a>-<a name="line-92"></a><a name="v_0"></a><span class='definition'>v_0</span><span class='layout'>,</span>				<span class='comment'>-- attribute values</span>-<a name="line-93"></a> <span class='varid'>v_1</span><span class='layout'>,</span>-<a name="line-94"></a> <span class='varid'>v_yes</span><span class='layout'>,</span>-<a name="line-95"></a> <span class='varid'>v_no</span><span class='layout'>,</span>-<a name="line-96"></a> <span class='varid'>v_any</span><span class='layout'>,</span>-<a name="line-97"></a> <span class='varid'>v_children</span><span class='layout'>,</span>-<a name="line-98"></a> <span class='varid'>v_choice</span><span class='layout'>,</span>-<a name="line-99"></a> <span class='varid'>v_empty</span><span class='layout'>,</span>-<a name="line-100"></a> <span class='varid'>v_mixed</span><span class='layout'>,</span>-<a name="line-101"></a> <span class='varid'>v_seq</span><span class='layout'>,</span>-<a name="line-102"></a> <span class='varid'>v_null</span><span class='layout'>,</span>-<a name="line-103"></a> <span class='varid'>v_option</span><span class='layout'>,</span>-<a name="line-104"></a> <span class='varid'>v_pcdata</span><span class='layout'>,</span>-<a name="line-105"></a> <span class='varid'>v_star</span><span class='layout'>,</span>-<a name="line-106"></a> <span class='varid'>v_plus</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span>-<a name="line-107"></a>-<a name="line-108"></a><a name="k_any"></a><span class='definition'>k_any</span><span class='layout'>,</span>				<span class='comment'>-- DTD keywords</span>-<a name="line-109"></a> <span class='varid'>k_cdata</span><span class='layout'>,</span>-<a name="line-110"></a> <span class='varid'>k_empty</span><span class='layout'>,</span>-<a name="line-111"></a> <span class='varid'>k_entity</span><span class='layout'>,</span>-<a name="line-112"></a> <span class='varid'>k_entities</span><span class='layout'>,</span>-<a name="line-113"></a> <span class='varid'>k_id</span><span class='layout'>,</span>-<a name="line-114"></a> <span class='varid'>k_idref</span><span class='layout'>,</span>-<a name="line-115"></a> <span class='varid'>k_idrefs</span><span class='layout'>,</span>-<a name="line-116"></a> <span class='varid'>k_include</span><span class='layout'>,</span>-<a name="line-117"></a> <span class='varid'>k_ignore</span><span class='layout'>,</span>-<a name="line-118"></a> <span class='varid'>k_nmtoken</span><span class='layout'>,</span>-<a name="line-119"></a> <span class='varid'>k_nmtokens</span><span class='layout'>,</span>-<a name="line-120"></a> <span class='varid'>k_peref</span><span class='layout'>,</span>-<a name="line-121"></a> <span class='varid'>k_public</span><span class='layout'>,</span>-<a name="line-122"></a> <span class='varid'>k_system</span><span class='layout'>,</span>-<a name="line-123"></a> <span class='varid'>k_enumeration</span><span class='layout'>,</span>-<a name="line-124"></a> <span class='varid'>k_fixed</span><span class='layout'>,</span>-<a name="line-125"></a> <span class='varid'>k_implied</span><span class='layout'>,</span>-<a name="line-126"></a> <span class='varid'>k_ndata</span><span class='layout'>,</span>-<a name="line-127"></a> <span class='varid'>k_notation</span><span class='layout'>,</span>-<a name="line-128"></a> <span class='varid'>k_pcdata</span><span class='layout'>,</span>-<a name="line-129"></a> <span class='varid'>k_required</span><span class='layout'>,</span>-<a name="line-130"></a> <span class='varid'>k_default</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>+<a name="line-11"></a>+<a name="line-12"></a>   Constants for XML keywords, for special attribute names+<a name="line-13"></a>   and special attribute values+<a name="line-14"></a>+<a name="line-15"></a>-}</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><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-20"></a><span class='keyword'>where</span>+<a name="line-21"></a>+<a name="line-22"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-23"></a><span class='comment'>--</span>+<a name="line-24"></a><span class='comment'>-- string constants for representing DTD keywords and attributes</span>+<a name="line-25"></a>+<a name="line-26"></a><a name="t_xml"></a><span class='definition'>t_xml</span><span class='layout'>,</span>				<span class='comment'>-- tag names</span>+<a name="line-27"></a> <span class='varid'>t_root</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span>+<a name="line-28"></a>+<a name="line-29"></a><a name="a_canonicalize"></a><span class='definition'>a_canonicalize</span><span class='layout'>,</span>+<a name="line-30"></a> <span class='varid'>a_default</span><span class='layout'>,</span>			<span class='comment'>-- attribute names</span>+<a name="line-31"></a> <span class='varid'>a_check_namespaces</span><span class='layout'>,</span>+<a name="line-32"></a> <span class='varid'>a_contentLength</span><span class='layout'>,</span>+<a name="line-33"></a> <span class='varid'>a_collect_errors</span><span class='layout'>,</span>+<a name="line-34"></a> <span class='varid'>a_column</span><span class='layout'>,</span>+<a name="line-35"></a> <span class='varid'>a_default_baseuri</span><span class='layout'>,</span>+<a name="line-36"></a> <span class='varid'>a_do_not_canonicalize</span><span class='layout'>,</span>+<a name="line-37"></a> <span class='varid'>a_do_not_check_namespaces</span><span class='layout'>,</span>+<a name="line-38"></a> <span class='varid'>a_do_not_issue_errors</span><span class='layout'>,</span>+<a name="line-39"></a> <span class='varid'>a_do_not_issue_warnings</span><span class='layout'>,</span>+<a name="line-40"></a> <span class='varid'>a_do_not_preserve_comment</span><span class='layout'>,</span>+<a name="line-41"></a> <span class='varid'>a_do_not_remove_whitespace</span><span class='layout'>,</span>+<a name="line-42"></a> <span class='varid'>a_do_not_use_curl</span><span class='layout'>,</span>+<a name="line-43"></a> <span class='varid'>a_do_not_validate</span><span class='layout'>,</span>+<a name="line-44"></a> <span class='varid'>a_encoding</span><span class='layout'>,</span>+<a name="line-45"></a> <span class='varid'>a_error</span><span class='layout'>,</span>+<a name="line-46"></a> <span class='varid'>a_error_log</span><span class='layout'>,</span>+<a name="line-47"></a> <span class='varid'>a_help</span><span class='layout'>,</span>+<a name="line-48"></a> <span class='varid'>a_ignore_encoding_errors</span><span class='layout'>,</span>+<a name="line-49"></a> <span class='varid'>a_ignore_none_xml_contents</span><span class='layout'>,</span>+<a name="line-50"></a> <span class='varid'>a_indent</span><span class='layout'>,</span>+<a name="line-51"></a> <span class='varid'>a_issue_errors</span><span class='layout'>,</span>+<a name="line-52"></a> <span class='varid'>a_issue_warnings</span><span class='layout'>,</span>+<a name="line-53"></a> <span class='varid'>a_kind</span><span class='layout'>,</span>+<a name="line-54"></a> <span class='varid'>a_line</span><span class='layout'>,</span>+<a name="line-55"></a> <span class='varid'>a_mime_types</span><span class='layout'>,</span>+<a name="line-56"></a> <span class='varid'>a_module</span><span class='layout'>,</span>+<a name="line-57"></a> <span class='varid'>a_modifier</span><span class='layout'>,</span>+<a name="line-58"></a> <span class='varid'>a_name</span><span class='layout'>,</span>+<a name="line-59"></a> <span class='varid'>a_no_xml_pi</span><span class='layout'>,</span>+<a name="line-60"></a> <span class='varid'>a_options_curl</span><span class='layout'>,</span>+<a name="line-61"></a> <span class='varid'>a_output_encoding</span><span class='layout'>,</span>+<a name="line-62"></a> <span class='varid'>a_output_file</span><span class='layout'>,</span>+<a name="line-63"></a> <span class='varid'>a_output_xml</span><span class='layout'>,</span>+<a name="line-64"></a> <span class='varid'>a_output_html</span><span class='layout'>,</span>+<a name="line-65"></a> <span class='varid'>a_parse_by_mimetype</span><span class='layout'>,</span>+<a name="line-66"></a> <span class='varid'>a_parse_html</span><span class='layout'>,</span>+<a name="line-67"></a> <span class='varid'>a_parse_xml</span><span class='layout'>,</span>+<a name="line-68"></a> <span class='varid'>a_peref</span><span class='layout'>,</span>+<a name="line-69"></a> <span class='varid'>a_preserve_comment</span><span class='layout'>,</span>+<a name="line-70"></a> <span class='varid'>a_propagate_errors</span><span class='layout'>,</span>+<a name="line-71"></a> <span class='varid'>a_proxy</span><span class='layout'>,</span>+<a name="line-72"></a> <span class='varid'>a_remove_whitespace</span><span class='layout'>,</span>+<a name="line-73"></a> <span class='varid'>a_show_haskell</span><span class='layout'>,</span>+<a name="line-74"></a> <span class='varid'>a_show_tree</span><span class='layout'>,</span>+<a name="line-75"></a> <span class='varid'>a_source</span><span class='layout'>,</span>+<a name="line-76"></a> <span class='varid'>a_status</span><span class='layout'>,</span>+<a name="line-77"></a> <span class='varid'>a_standalone</span><span class='layout'>,</span>+<a name="line-78"></a> <span class='varid'>a_tagsoup</span><span class='layout'>,</span>+<a name="line-79"></a> <span class='varid'>a_trace</span><span class='layout'>,</span>+<a name="line-80"></a> <span class='varid'>a_type</span><span class='layout'>,</span>+<a name="line-81"></a> <span class='varid'>a_use_curl</span><span class='layout'>,</span>+<a name="line-82"></a> <span class='varid'>a_url</span><span class='layout'>,</span>+<a name="line-83"></a> <span class='varid'>a_validate</span><span class='layout'>,</span>+<a name="line-84"></a> <span class='varid'>a_value</span><span class='layout'>,</span>+<a name="line-85"></a> <span class='varid'>a_verbose</span><span class='layout'>,</span>+<a name="line-86"></a> <span class='varid'>a_version</span><span class='layout'>,</span>+<a name="line-87"></a> <span class='varid'>a_xml</span><span class='layout'>,</span>+<a name="line-88"></a> <span class='varid'>a_xmlns</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>+<a name="line-89"></a>+<a name="line-90"></a><a name="v_0"></a><span class='definition'>v_0</span><span class='layout'>,</span>				<span class='comment'>-- attribute values</span>+<a name="line-91"></a> <span class='varid'>v_1</span><span class='layout'>,</span>+<a name="line-92"></a> <span class='varid'>v_yes</span><span class='layout'>,</span>+<a name="line-93"></a> <span class='varid'>v_no</span><span class='layout'>,</span>+<a name="line-94"></a> <span class='varid'>v_any</span><span class='layout'>,</span>+<a name="line-95"></a> <span class='varid'>v_children</span><span class='layout'>,</span>+<a name="line-96"></a> <span class='varid'>v_choice</span><span class='layout'>,</span>+<a name="line-97"></a> <span class='varid'>v_empty</span><span class='layout'>,</span>+<a name="line-98"></a> <span class='varid'>v_mixed</span><span class='layout'>,</span>+<a name="line-99"></a> <span class='varid'>v_seq</span><span class='layout'>,</span>+<a name="line-100"></a> <span class='varid'>v_null</span><span class='layout'>,</span>+<a name="line-101"></a> <span class='varid'>v_option</span><span class='layout'>,</span>+<a name="line-102"></a> <span class='varid'>v_pcdata</span><span class='layout'>,</span>+<a name="line-103"></a> <span class='varid'>v_star</span><span class='layout'>,</span>+<a name="line-104"></a> <span class='varid'>v_plus</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span>+<a name="line-105"></a>+<a name="line-106"></a><a name="k_any"></a><span class='definition'>k_any</span><span class='layout'>,</span>				<span class='comment'>-- DTD keywords</span>+<a name="line-107"></a> <span class='varid'>k_cdata</span><span class='layout'>,</span>+<a name="line-108"></a> <span class='varid'>k_empty</span><span class='layout'>,</span>+<a name="line-109"></a> <span class='varid'>k_entity</span><span class='layout'>,</span>+<a name="line-110"></a> <span class='varid'>k_entities</span><span class='layout'>,</span>+<a name="line-111"></a> <span class='varid'>k_id</span><span class='layout'>,</span>+<a name="line-112"></a> <span class='varid'>k_idref</span><span class='layout'>,</span>+<a name="line-113"></a> <span class='varid'>k_idrefs</span><span class='layout'>,</span>+<a name="line-114"></a> <span class='varid'>k_include</span><span class='layout'>,</span>+<a name="line-115"></a> <span class='varid'>k_ignore</span><span class='layout'>,</span>+<a name="line-116"></a> <span class='varid'>k_nmtoken</span><span class='layout'>,</span>+<a name="line-117"></a> <span class='varid'>k_nmtokens</span><span class='layout'>,</span>+<a name="line-118"></a> <span class='varid'>k_peref</span><span class='layout'>,</span>+<a name="line-119"></a> <span class='varid'>k_public</span><span class='layout'>,</span>+<a name="line-120"></a> <span class='varid'>k_system</span><span class='layout'>,</span>+<a name="line-121"></a> <span class='varid'>k_enumeration</span><span class='layout'>,</span>+<a name="line-122"></a> <span class='varid'>k_fixed</span><span class='layout'>,</span>+<a name="line-123"></a> <span class='varid'>k_implied</span><span class='layout'>,</span>+<a name="line-124"></a> <span class='varid'>k_ndata</span><span class='layout'>,</span>+<a name="line-125"></a> <span class='varid'>k_notation</span><span class='layout'>,</span>+<a name="line-126"></a> <span class='varid'>k_pcdata</span><span class='layout'>,</span>+<a name="line-127"></a> <span class='varid'>k_required</span><span class='layout'>,</span>+<a name="line-128"></a> <span class='varid'>k_default</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>+<a name="line-129"></a>+<a name="line-130"></a><span class='comment'>-- ------------------------------------------------------------</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><span class='definition'>t_xml</span>		<span class='keyglyph'>=</span> <span class='str'>"xml"</span>-<a name="line-135"></a><a name="t_root"></a><span class='definition'>t_root</span>		<span class='keyglyph'>=</span> <span class='str'>"/"</span>		<span class='comment'>-- name of root node tag</span>-<a name="line-136"></a>-<a name="line-137"></a><span class='definition'>a_canonicalize</span>			<span class='keyglyph'>=</span> <span class='str'>"canonicalize"</span>-<a name="line-138"></a><a name="a_check_namespaces"></a><span class='definition'>a_check_namespaces</span>		<span class='keyglyph'>=</span> <span class='str'>"check-namespaces"</span>-<a name="line-139"></a><a name="a_collect_errors"></a><span class='definition'>a_collect_errors</span>		<span class='keyglyph'>=</span> <span class='str'>"collect-errors"</span>-<a name="line-140"></a><a name="a_column"></a><span class='definition'>a_column</span>			<span class='keyglyph'>=</span> <span class='str'>"column"</span>-<a name="line-141"></a><a name="a_contentLength"></a><span class='definition'>a_contentLength</span>			<span class='keyglyph'>=</span> <span class='str'>"Content-Length"</span>-<a name="line-142"></a><a name="a_default"></a><span class='definition'>a_default</span>			<span class='keyglyph'>=</span> <span class='str'>"default"</span>-<a name="line-143"></a><a name="a_default_baseuri"></a><span class='definition'>a_default_baseuri</span>		<span class='keyglyph'>=</span> <span class='str'>"default-base-URI"</span>-<a name="line-144"></a><a name="a_do_not_canonicalize"></a><span class='definition'>a_do_not_canonicalize</span>		<span class='keyglyph'>=</span> <span class='str'>"do-not-canonicalize"</span>-<a name="line-145"></a><a name="a_do_not_check_namespaces"></a><span class='definition'>a_do_not_check_namespaces</span>	<span class='keyglyph'>=</span> <span class='str'>"do-not-check-namespaces"</span>-<a name="line-146"></a><a name="a_do_not_issue_errors"></a><span class='definition'>a_do_not_issue_errors</span>		<span class='keyglyph'>=</span> <span class='str'>"do-not-issue-errors"</span>-<a name="line-147"></a><a name="a_do_not_issue_warnings"></a><span class='definition'>a_do_not_issue_warnings</span>		<span class='keyglyph'>=</span> <span class='str'>"do-not-issue-warnings"</span>-<a name="line-148"></a><a name="a_do_not_preserve_comment"></a><span class='definition'>a_do_not_preserve_comment</span>	<span class='keyglyph'>=</span> <span class='str'>"do-not-preserve-comment"</span>-<a name="line-149"></a><a name="a_do_not_remove_whitespace"></a><span class='definition'>a_do_not_remove_whitespace</span>	<span class='keyglyph'>=</span> <span class='str'>"do-not-remove-whitespace"</span>-<a name="line-150"></a><a name="a_do_not_use_curl"></a><span class='definition'>a_do_not_use_curl</span>		<span class='keyglyph'>=</span> <span class='str'>"do-not-use-curl"</span>-<a name="line-151"></a><a name="a_do_not_validate"></a><span class='definition'>a_do_not_validate</span>		<span class='keyglyph'>=</span> <span class='str'>"do-not-validate"</span>-<a name="line-152"></a><a name="a_encoding"></a><span class='definition'>a_encoding</span>			<span class='keyglyph'>=</span> <span class='str'>"encoding"</span>-<a name="line-153"></a><a name="a_error"></a><span class='definition'>a_error</span>				<span class='keyglyph'>=</span> <span class='str'>"error"</span>-<a name="line-154"></a><a name="a_error_log"></a><span class='definition'>a_error_log</span>			<span class='keyglyph'>=</span> <span class='str'>"errorLog"</span>-<a name="line-155"></a><a name="a_help"></a><span class='definition'>a_help</span>				<span class='keyglyph'>=</span> <span class='str'>"help"</span>+<a name="line-132"></a><span class='definition'>t_xml</span>		<span class='keyglyph'>=</span> <span class='str'>"xml"</span>+<a name="line-133"></a><a name="t_root"></a><span class='definition'>t_root</span>		<span class='keyglyph'>=</span> <span class='str'>"/"</span>		<span class='comment'>-- name of root node tag</span>+<a name="line-134"></a>+<a name="line-135"></a><span class='definition'>a_canonicalize</span>			<span class='keyglyph'>=</span> <span class='str'>"canonicalize"</span>+<a name="line-136"></a><a name="a_check_namespaces"></a><span class='definition'>a_check_namespaces</span>		<span class='keyglyph'>=</span> <span class='str'>"check-namespaces"</span>+<a name="line-137"></a><a name="a_collect_errors"></a><span class='definition'>a_collect_errors</span>		<span class='keyglyph'>=</span> <span class='str'>"collect-errors"</span>+<a name="line-138"></a><a name="a_column"></a><span class='definition'>a_column</span>			<span class='keyglyph'>=</span> <span class='str'>"column"</span>+<a name="line-139"></a><a name="a_contentLength"></a><span class='definition'>a_contentLength</span>			<span class='keyglyph'>=</span> <span class='str'>"Content-Length"</span>+<a name="line-140"></a><a name="a_default"></a><span class='definition'>a_default</span>			<span class='keyglyph'>=</span> <span class='str'>"default"</span>+<a name="line-141"></a><a name="a_default_baseuri"></a><span class='definition'>a_default_baseuri</span>		<span class='keyglyph'>=</span> <span class='str'>"default-base-URI"</span>+<a name="line-142"></a><a name="a_do_not_canonicalize"></a><span class='definition'>a_do_not_canonicalize</span>		<span class='keyglyph'>=</span> <span class='str'>"do-not-canonicalize"</span>+<a name="line-143"></a><a name="a_do_not_check_namespaces"></a><span class='definition'>a_do_not_check_namespaces</span>	<span class='keyglyph'>=</span> <span class='str'>"do-not-check-namespaces"</span>+<a name="line-144"></a><a name="a_do_not_issue_errors"></a><span class='definition'>a_do_not_issue_errors</span>		<span class='keyglyph'>=</span> <span class='str'>"do-not-issue-errors"</span>+<a name="line-145"></a><a name="a_do_not_issue_warnings"></a><span class='definition'>a_do_not_issue_warnings</span>		<span class='keyglyph'>=</span> <span class='str'>"do-not-issue-warnings"</span>+<a name="line-146"></a><a name="a_do_not_preserve_comment"></a><span class='definition'>a_do_not_preserve_comment</span>	<span class='keyglyph'>=</span> <span class='str'>"do-not-preserve-comment"</span>+<a name="line-147"></a><a name="a_do_not_remove_whitespace"></a><span class='definition'>a_do_not_remove_whitespace</span>	<span class='keyglyph'>=</span> <span class='str'>"do-not-remove-whitespace"</span>+<a name="line-148"></a><a name="a_do_not_use_curl"></a><span class='definition'>a_do_not_use_curl</span>		<span class='keyglyph'>=</span> <span class='str'>"do-not-use-curl"</span>+<a name="line-149"></a><a name="a_do_not_validate"></a><span class='definition'>a_do_not_validate</span>		<span class='keyglyph'>=</span> <span class='str'>"do-not-validate"</span>+<a name="line-150"></a><a name="a_encoding"></a><span class='definition'>a_encoding</span>			<span class='keyglyph'>=</span> <span class='str'>"encoding"</span>+<a name="line-151"></a><a name="a_error"></a><span class='definition'>a_error</span>				<span class='keyglyph'>=</span> <span class='str'>"error"</span>+<a name="line-152"></a><a name="a_error_log"></a><span class='definition'>a_error_log</span>			<span class='keyglyph'>=</span> <span class='str'>"errorLog"</span>+<a name="line-153"></a><a name="a_help"></a><span class='definition'>a_help</span>				<span class='keyglyph'>=</span> <span class='str'>"help"</span>+<a name="line-154"></a><a name="a_ignore_encoding_errors"></a><span class='definition'>a_ignore_encoding_errors</span>	<span class='keyglyph'>=</span> <span class='str'>"ignore-encoding-errors"</span>+<a name="line-155"></a><a name="a_ignore_none_xml_contents"></a><span class='definition'>a_ignore_none_xml_contents</span>	<span class='keyglyph'>=</span> <span class='str'>"ignore-none-xml-contents"</span> <a name="line-156"></a><a name="a_indent"></a><span class='definition'>a_indent</span>			<span class='keyglyph'>=</span> <span class='str'>"indent"</span> <a name="line-157"></a><a name="a_issue_warnings"></a><span class='definition'>a_issue_warnings</span>		<span class='keyglyph'>=</span> <span class='str'>"issue-warnings"</span> <a name="line-158"></a><a name="a_issue_errors"></a><span class='definition'>a_issue_errors</span>			<span class='keyglyph'>=</span> <span class='str'>"issue-errors"</span> <a name="line-159"></a><a name="a_kind"></a><span class='definition'>a_kind</span>				<span class='keyglyph'>=</span> <span class='str'>"kind"</span> <a name="line-160"></a><a name="a_line"></a><span class='definition'>a_line</span>				<span class='keyglyph'>=</span> <span class='str'>"line"</span>-<a name="line-161"></a><a name="a_module"></a><span class='definition'>a_module</span>			<span class='keyglyph'>=</span> <span class='str'>"module"</span>-<a name="line-162"></a><a name="a_modifier"></a><span class='definition'>a_modifier</span>			<span class='keyglyph'>=</span> <span class='str'>"modifier"</span>-<a name="line-163"></a><a name="a_name"></a><span class='definition'>a_name</span>				<span class='keyglyph'>=</span> <span class='str'>"name"</span>-<a name="line-164"></a><a name="a_no_xml_pi"></a><span class='definition'>a_no_xml_pi</span>                     <span class='keyglyph'>=</span> <span class='str'>"no-xml-pi"</span>-<a name="line-165"></a><a name="a_options_curl"></a><span class='definition'>a_options_curl</span>			<span class='keyglyph'>=</span> <span class='str'>"options-curl"</span>-<a name="line-166"></a><a name="a_output_file"></a><span class='definition'>a_output_file</span>			<span class='keyglyph'>=</span> <span class='str'>"output-file"</span>-<a name="line-167"></a><a name="a_output_encoding"></a><span class='definition'>a_output_encoding</span>		<span class='keyglyph'>=</span> <span class='str'>"output-encoding"</span>-<a name="line-168"></a><a name="a_output_html"></a><span class='definition'>a_output_html</span>			<span class='keyglyph'>=</span> <span class='str'>"output-html"</span>-<a name="line-169"></a><a name="a_output_xml"></a><span class='definition'>a_output_xml</span>			<span class='keyglyph'>=</span> <span class='str'>"output-xml"</span>-<a name="line-170"></a><a name="a_parse_by_mimetype"></a><span class='definition'>a_parse_by_mimetype</span>		<span class='keyglyph'>=</span> <span class='str'>"parse-by-mimetype"</span>-<a name="line-171"></a><a name="a_parse_html"></a><span class='definition'>a_parse_html</span>			<span class='keyglyph'>=</span> <span class='str'>"parse-html"</span>-<a name="line-172"></a><a name="a_parse_xml"></a><span class='definition'>a_parse_xml</span>			<span class='keyglyph'>=</span> <span class='str'>"parse-xml"</span>-<a name="line-173"></a><a name="a_peref"></a><span class='definition'>a_peref</span>				<span class='keyglyph'>=</span> <span class='varid'>k_peref</span>-<a name="line-174"></a><a name="a_preserve_comment"></a><span class='definition'>a_preserve_comment</span> 		<span class='keyglyph'>=</span> <span class='str'>"preserve-comment"</span>-<a name="line-175"></a><a name="a_propagate_errors"></a><span class='definition'>a_propagate_errors</span>		<span class='keyglyph'>=</span> <span class='str'>"propagate-errors"</span>-<a name="line-176"></a><a name="a_proxy"></a><span class='definition'>a_proxy</span>				<span class='keyglyph'>=</span> <span class='str'>"proxy"</span>-<a name="line-177"></a><a name="a_remove_whitespace"></a><span class='definition'>a_remove_whitespace</span> 		<span class='keyglyph'>=</span> <span class='str'>"remove-whitespace"</span>-<a name="line-178"></a><a name="a_show_haskell"></a><span class='definition'>a_show_haskell</span>			<span class='keyglyph'>=</span> <span class='str'>"show-haskell"</span>-<a name="line-179"></a><a name="a_show_tree"></a><span class='definition'>a_show_tree</span>			<span class='keyglyph'>=</span> <span class='str'>"show-tree"</span>-<a name="line-180"></a><a name="a_source"></a><span class='definition'>a_source</span>			<span class='keyglyph'>=</span> <span class='str'>"source"</span>-<a name="line-181"></a><a name="a_standalone"></a><span class='definition'>a_standalone</span>			<span class='keyglyph'>=</span> <span class='str'>"standalone"</span>-<a name="line-182"></a><a name="a_status"></a><span class='definition'>a_status</span>			<span class='keyglyph'>=</span> <span class='str'>"status"</span>-<a name="line-183"></a><a name="a_tagsoup"></a><span class='definition'>a_tagsoup</span>			<span class='keyglyph'>=</span> <span class='str'>"tagsoup"</span>-<a name="line-184"></a><a name="a_trace"></a><span class='definition'>a_trace</span>				<span class='keyglyph'>=</span> <span class='str'>"trace"</span>-<a name="line-185"></a><a name="a_type"></a><span class='definition'>a_type</span>				<span class='keyglyph'>=</span> <span class='str'>"type"</span>-<a name="line-186"></a><a name="a_url"></a><span class='definition'>a_url</span>				<span class='keyglyph'>=</span> <span class='str'>"url"</span>-<a name="line-187"></a><a name="a_use_curl"></a><span class='definition'>a_use_curl</span>			<span class='keyglyph'>=</span> <span class='str'>"use-curl"</span>-<a name="line-188"></a><a name="a_validate"></a><span class='definition'>a_validate</span>			<span class='keyglyph'>=</span> <span class='str'>"validate"</span>-<a name="line-189"></a><a name="a_value"></a><span class='definition'>a_value</span>				<span class='keyglyph'>=</span> <span class='str'>"value"</span>-<a name="line-190"></a><a name="a_verbose"></a><span class='definition'>a_verbose</span>			<span class='keyglyph'>=</span> <span class='str'>"verbose"</span>-<a name="line-191"></a><a name="a_version"></a><span class='definition'>a_version</span>			<span class='keyglyph'>=</span> <span class='str'>"version"</span>-<a name="line-192"></a><a name="a_xml"></a><span class='definition'>a_xml</span>				<span class='keyglyph'>=</span> <span class='str'>"xml"</span>-<a name="line-193"></a><a name="a_xmlns"></a><span class='definition'>a_xmlns</span>				<span class='keyglyph'>=</span> <span class='str'>"xmlns"</span>-<a name="line-194"></a>-<a name="line-195"></a><a name="v_yes"></a><span class='definition'>v_yes</span>		<span class='keyglyph'>=</span> <span class='str'>"yes"</span>-<a name="line-196"></a><a name="v_no"></a><span class='definition'>v_no</span>		<span class='keyglyph'>=</span> <span class='str'>"no"</span>-<a name="line-197"></a><a name="v_1"></a><span class='definition'>v_1</span>		<span class='keyglyph'>=</span> <span class='str'>"1"</span>-<a name="line-198"></a><span class='definition'>v_0</span>		<span class='keyglyph'>=</span> <span class='str'>"0"</span>-<a name="line-199"></a>-<a name="line-200"></a><a name="v_any"></a><span class='definition'>v_any</span>		<span class='keyglyph'>=</span> <span class='varid'>k_any</span>-<a name="line-201"></a><a name="v_children"></a><span class='definition'>v_children</span>	<span class='keyglyph'>=</span> <span class='str'>"children"</span>-<a name="line-202"></a><a name="v_choice"></a><span class='definition'>v_choice</span>	<span class='keyglyph'>=</span> <span class='str'>"choice"</span>-<a name="line-203"></a><a name="v_empty"></a><span class='definition'>v_empty</span>		<span class='keyglyph'>=</span> <span class='varid'>k_empty</span>-<a name="line-204"></a><a name="v_pcdata"></a><span class='definition'>v_pcdata</span>	<span class='keyglyph'>=</span> <span class='varid'>k_pcdata</span>-<a name="line-205"></a><a name="v_mixed"></a><span class='definition'>v_mixed</span>		<span class='keyglyph'>=</span> <span class='str'>"mixed"</span>-<a name="line-206"></a><a name="v_seq"></a><span class='definition'>v_seq</span>		<span class='keyglyph'>=</span> <span class='str'>"seq"</span>-<a name="line-207"></a>-<a name="line-208"></a><a name="v_null"></a><span class='definition'>v_null</span>		<span class='keyglyph'>=</span> <span class='str'>""</span>-<a name="line-209"></a><a name="v_option"></a><span class='definition'>v_option</span>	<span class='keyglyph'>=</span> <span class='str'>"?"</span>-<a name="line-210"></a><a name="v_star"></a><span class='definition'>v_star</span>		<span class='keyglyph'>=</span> <span class='str'>"*"</span>-<a name="line-211"></a><a name="v_plus"></a><span class='definition'>v_plus</span>		<span class='keyglyph'>=</span> <span class='str'>"+"</span>-<a name="line-212"></a>-<a name="line-213"></a><span class='definition'>k_any</span>		<span class='keyglyph'>=</span> <span class='str'>"ANY"</span>-<a name="line-214"></a><a name="k_cdata"></a><span class='definition'>k_cdata</span>		<span class='keyglyph'>=</span> <span class='str'>"CDATA"</span>-<a name="line-215"></a><a name="k_empty"></a><span class='definition'>k_empty</span>		<span class='keyglyph'>=</span> <span class='str'>"EMPTY"</span>-<a name="line-216"></a><a name="k_entity"></a><span class='definition'>k_entity</span>	<span class='keyglyph'>=</span> <span class='str'>"ENTITY"</span>-<a name="line-217"></a><a name="k_entities"></a><span class='definition'>k_entities</span>	<span class='keyglyph'>=</span> <span class='str'>"ENTITIES"</span>-<a name="line-218"></a><a name="k_id"></a><span class='definition'>k_id</span>		<span class='keyglyph'>=</span> <span class='str'>"ID"</span>-<a name="line-219"></a><a name="k_idref"></a><span class='definition'>k_idref</span>		<span class='keyglyph'>=</span> <span class='str'>"IDREF"</span>-<a name="line-220"></a><a name="k_idrefs"></a><span class='definition'>k_idrefs</span>	<span class='keyglyph'>=</span> <span class='str'>"IDREFS"</span>-<a name="line-221"></a><a name="k_include"></a><span class='definition'>k_include</span>	<span class='keyglyph'>=</span> <span class='str'>"INCLUDE"</span>-<a name="line-222"></a><a name="k_ignore"></a><span class='definition'>k_ignore</span>	<span class='keyglyph'>=</span> <span class='str'>"IGNORE"</span>-<a name="line-223"></a><a name="k_nmtoken"></a><span class='definition'>k_nmtoken</span>	<span class='keyglyph'>=</span> <span class='str'>"NMTOKEN"</span>-<a name="line-224"></a><a name="k_nmtokens"></a><span class='definition'>k_nmtokens</span>	<span class='keyglyph'>=</span> <span class='str'>"NMTOKENS"</span>-<a name="line-225"></a><a name="k_peref"></a><span class='definition'>k_peref</span>		<span class='keyglyph'>=</span> <span class='str'>"PERef"</span>-<a name="line-226"></a><a name="k_public"></a><span class='definition'>k_public</span>	<span class='keyglyph'>=</span> <span class='str'>"PUBLIC"</span>-<a name="line-227"></a><a name="k_system"></a><span class='definition'>k_system</span>	<span class='keyglyph'>=</span> <span class='str'>"SYSTEM"</span>-<a name="line-228"></a>-<a name="line-229"></a><a name="k_enumeration"></a><span class='definition'>k_enumeration</span>	<span class='keyglyph'>=</span> <span class='str'>"#ENUMERATION"</span>-<a name="line-230"></a><a name="k_fixed"></a><span class='definition'>k_fixed</span>		<span class='keyglyph'>=</span> <span class='str'>"#FIXED"</span>-<a name="line-231"></a><a name="k_implied"></a><span class='definition'>k_implied</span>	<span class='keyglyph'>=</span> <span class='str'>"#IMPLIED"</span>-<a name="line-232"></a><a name="k_ndata"></a><span class='definition'>k_ndata</span>		<span class='keyglyph'>=</span> <span class='str'>"NDATA"</span>-<a name="line-233"></a><a name="k_notation"></a><span class='definition'>k_notation</span>	<span class='keyglyph'>=</span> <span class='str'>"NOTATION"</span>-<a name="line-234"></a><a name="k_pcdata"></a><span class='definition'>k_pcdata</span>	<span class='keyglyph'>=</span> <span class='str'>"#PCDATA"</span>-<a name="line-235"></a><a name="k_required"></a><span class='definition'>k_required</span>	<span class='keyglyph'>=</span> <span class='str'>"#REQUIRED"</span>-<a name="line-236"></a><a name="k_default"></a><span class='definition'>k_default</span>	<span class='keyglyph'>=</span> <span class='str'>"#DEFAULT"</span>-<a name="line-237"></a>+<a name="line-161"></a><a name="a_mime_types"></a><span class='definition'>a_mime_types</span>			<span class='keyglyph'>=</span> <span class='str'>"mimetypes"</span>+<a name="line-162"></a><a name="a_module"></a><span class='definition'>a_module</span>			<span class='keyglyph'>=</span> <span class='str'>"module"</span>+<a name="line-163"></a><a name="a_modifier"></a><span class='definition'>a_modifier</span>			<span class='keyglyph'>=</span> <span class='str'>"modifier"</span>+<a name="line-164"></a><a name="a_name"></a><span class='definition'>a_name</span>				<span class='keyglyph'>=</span> <span class='str'>"name"</span>+<a name="line-165"></a><a name="a_no_xml_pi"></a><span class='definition'>a_no_xml_pi</span>                     <span class='keyglyph'>=</span> <span class='str'>"no-xml-pi"</span>+<a name="line-166"></a><a name="a_options_curl"></a><span class='definition'>a_options_curl</span>			<span class='keyglyph'>=</span> <span class='str'>"options-curl"</span>+<a name="line-167"></a><a name="a_output_file"></a><span class='definition'>a_output_file</span>			<span class='keyglyph'>=</span> <span class='str'>"output-file"</span>+<a name="line-168"></a><a name="a_output_encoding"></a><span class='definition'>a_output_encoding</span>		<span class='keyglyph'>=</span> <span class='str'>"output-encoding"</span>+<a name="line-169"></a><a name="a_output_html"></a><span class='definition'>a_output_html</span>			<span class='keyglyph'>=</span> <span class='str'>"output-html"</span>+<a name="line-170"></a><a name="a_output_xml"></a><span class='definition'>a_output_xml</span>			<span class='keyglyph'>=</span> <span class='str'>"output-xml"</span>+<a name="line-171"></a><a name="a_parse_by_mimetype"></a><span class='definition'>a_parse_by_mimetype</span>		<span class='keyglyph'>=</span> <span class='str'>"parse-by-mimetype"</span>+<a name="line-172"></a><a name="a_parse_html"></a><span class='definition'>a_parse_html</span>			<span class='keyglyph'>=</span> <span class='str'>"parse-html"</span>+<a name="line-173"></a><a name="a_parse_xml"></a><span class='definition'>a_parse_xml</span>			<span class='keyglyph'>=</span> <span class='str'>"parse-xml"</span>+<a name="line-174"></a><a name="a_peref"></a><span class='definition'>a_peref</span>				<span class='keyglyph'>=</span> <span class='varid'>k_peref</span>+<a name="line-175"></a><a name="a_preserve_comment"></a><span class='definition'>a_preserve_comment</span> 		<span class='keyglyph'>=</span> <span class='str'>"preserve-comment"</span>+<a name="line-176"></a><a name="a_propagate_errors"></a><span class='definition'>a_propagate_errors</span>		<span class='keyglyph'>=</span> <span class='str'>"propagate-errors"</span>+<a name="line-177"></a><a name="a_proxy"></a><span class='definition'>a_proxy</span>				<span class='keyglyph'>=</span> <span class='str'>"proxy"</span>+<a name="line-178"></a><a name="a_remove_whitespace"></a><span class='definition'>a_remove_whitespace</span> 		<span class='keyglyph'>=</span> <span class='str'>"remove-whitespace"</span>+<a name="line-179"></a><a name="a_show_haskell"></a><span class='definition'>a_show_haskell</span>			<span class='keyglyph'>=</span> <span class='str'>"show-haskell"</span>+<a name="line-180"></a><a name="a_show_tree"></a><span class='definition'>a_show_tree</span>			<span class='keyglyph'>=</span> <span class='str'>"show-tree"</span>+<a name="line-181"></a><a name="a_source"></a><span class='definition'>a_source</span>			<span class='keyglyph'>=</span> <span class='str'>"source"</span>+<a name="line-182"></a><a name="a_standalone"></a><span class='definition'>a_standalone</span>			<span class='keyglyph'>=</span> <span class='str'>"standalone"</span>+<a name="line-183"></a><a name="a_status"></a><span class='definition'>a_status</span>			<span class='keyglyph'>=</span> <span class='str'>"status"</span>+<a name="line-184"></a><a name="a_tagsoup"></a><span class='definition'>a_tagsoup</span>			<span class='keyglyph'>=</span> <span class='str'>"tagsoup"</span>+<a name="line-185"></a><a name="a_trace"></a><span class='definition'>a_trace</span>				<span class='keyglyph'>=</span> <span class='str'>"trace"</span>+<a name="line-186"></a><a name="a_type"></a><span class='definition'>a_type</span>				<span class='keyglyph'>=</span> <span class='str'>"type"</span>+<a name="line-187"></a><a name="a_url"></a><span class='definition'>a_url</span>				<span class='keyglyph'>=</span> <span class='str'>"url"</span>+<a name="line-188"></a><a name="a_use_curl"></a><span class='definition'>a_use_curl</span>			<span class='keyglyph'>=</span> <span class='str'>"use-curl"</span>+<a name="line-189"></a><a name="a_validate"></a><span class='definition'>a_validate</span>			<span class='keyglyph'>=</span> <span class='str'>"validate"</span>+<a name="line-190"></a><a name="a_value"></a><span class='definition'>a_value</span>				<span class='keyglyph'>=</span> <span class='str'>"value"</span>+<a name="line-191"></a><a name="a_verbose"></a><span class='definition'>a_verbose</span>			<span class='keyglyph'>=</span> <span class='str'>"verbose"</span>+<a name="line-192"></a><a name="a_version"></a><span class='definition'>a_version</span>			<span class='keyglyph'>=</span> <span class='str'>"version"</span>+<a name="line-193"></a><a name="a_xml"></a><span class='definition'>a_xml</span>				<span class='keyglyph'>=</span> <span class='str'>"xml"</span>+<a name="line-194"></a><a name="a_xmlns"></a><span class='definition'>a_xmlns</span>				<span class='keyglyph'>=</span> <span class='str'>"xmlns"</span>+<a name="line-195"></a>+<a name="line-196"></a><a name="v_yes"></a><span class='definition'>v_yes</span>		<span class='keyglyph'>=</span> <span class='str'>"yes"</span>+<a name="line-197"></a><a name="v_no"></a><span class='definition'>v_no</span>		<span class='keyglyph'>=</span> <span class='str'>"no"</span>+<a name="line-198"></a><a name="v_1"></a><span class='definition'>v_1</span>		<span class='keyglyph'>=</span> <span class='str'>"1"</span>+<a name="line-199"></a><span class='definition'>v_0</span>		<span class='keyglyph'>=</span> <span class='str'>"0"</span>+<a name="line-200"></a>+<a name="line-201"></a><a name="v_any"></a><span class='definition'>v_any</span>		<span class='keyglyph'>=</span> <span class='varid'>k_any</span>+<a name="line-202"></a><a name="v_children"></a><span class='definition'>v_children</span>	<span class='keyglyph'>=</span> <span class='str'>"children"</span>+<a name="line-203"></a><a name="v_choice"></a><span class='definition'>v_choice</span>	<span class='keyglyph'>=</span> <span class='str'>"choice"</span>+<a name="line-204"></a><a name="v_empty"></a><span class='definition'>v_empty</span>		<span class='keyglyph'>=</span> <span class='varid'>k_empty</span>+<a name="line-205"></a><a name="v_pcdata"></a><span class='definition'>v_pcdata</span>	<span class='keyglyph'>=</span> <span class='varid'>k_pcdata</span>+<a name="line-206"></a><a name="v_mixed"></a><span class='definition'>v_mixed</span>		<span class='keyglyph'>=</span> <span class='str'>"mixed"</span>+<a name="line-207"></a><a name="v_seq"></a><span class='definition'>v_seq</span>		<span class='keyglyph'>=</span> <span class='str'>"seq"</span>+<a name="line-208"></a>+<a name="line-209"></a><a name="v_null"></a><span class='definition'>v_null</span>		<span class='keyglyph'>=</span> <span class='str'>""</span>+<a name="line-210"></a><a name="v_option"></a><span class='definition'>v_option</span>	<span class='keyglyph'>=</span> <span class='str'>"?"</span>+<a name="line-211"></a><a name="v_star"></a><span class='definition'>v_star</span>		<span class='keyglyph'>=</span> <span class='str'>"*"</span>+<a name="line-212"></a><a name="v_plus"></a><span class='definition'>v_plus</span>		<span class='keyglyph'>=</span> <span class='str'>"+"</span>+<a name="line-213"></a>+<a name="line-214"></a><span class='definition'>k_any</span>		<span class='keyglyph'>=</span> <span class='str'>"ANY"</span>+<a name="line-215"></a><a name="k_cdata"></a><span class='definition'>k_cdata</span>		<span class='keyglyph'>=</span> <span class='str'>"CDATA"</span>+<a name="line-216"></a><a name="k_empty"></a><span class='definition'>k_empty</span>		<span class='keyglyph'>=</span> <span class='str'>"EMPTY"</span>+<a name="line-217"></a><a name="k_entity"></a><span class='definition'>k_entity</span>	<span class='keyglyph'>=</span> <span class='str'>"ENTITY"</span>+<a name="line-218"></a><a name="k_entities"></a><span class='definition'>k_entities</span>	<span class='keyglyph'>=</span> <span class='str'>"ENTITIES"</span>+<a name="line-219"></a><a name="k_id"></a><span class='definition'>k_id</span>		<span class='keyglyph'>=</span> <span class='str'>"ID"</span>+<a name="line-220"></a><a name="k_idref"></a><span class='definition'>k_idref</span>		<span class='keyglyph'>=</span> <span class='str'>"IDREF"</span>+<a name="line-221"></a><a name="k_idrefs"></a><span class='definition'>k_idrefs</span>	<span class='keyglyph'>=</span> <span class='str'>"IDREFS"</span>+<a name="line-222"></a><a name="k_include"></a><span class='definition'>k_include</span>	<span class='keyglyph'>=</span> <span class='str'>"INCLUDE"</span>+<a name="line-223"></a><a name="k_ignore"></a><span class='definition'>k_ignore</span>	<span class='keyglyph'>=</span> <span class='str'>"IGNORE"</span>+<a name="line-224"></a><a name="k_nmtoken"></a><span class='definition'>k_nmtoken</span>	<span class='keyglyph'>=</span> <span class='str'>"NMTOKEN"</span>+<a name="line-225"></a><a name="k_nmtokens"></a><span class='definition'>k_nmtokens</span>	<span class='keyglyph'>=</span> <span class='str'>"NMTOKENS"</span>+<a name="line-226"></a><a name="k_peref"></a><span class='definition'>k_peref</span>		<span class='keyglyph'>=</span> <span class='str'>"PERef"</span>+<a name="line-227"></a><a name="k_public"></a><span class='definition'>k_public</span>	<span class='keyglyph'>=</span> <span class='str'>"PUBLIC"</span>+<a name="line-228"></a><a name="k_system"></a><span class='definition'>k_system</span>	<span class='keyglyph'>=</span> <span class='str'>"SYSTEM"</span>+<a name="line-229"></a>+<a name="line-230"></a><a name="k_enumeration"></a><span class='definition'>k_enumeration</span>	<span class='keyglyph'>=</span> <span class='str'>"#ENUMERATION"</span>+<a name="line-231"></a><a name="k_fixed"></a><span class='definition'>k_fixed</span>		<span class='keyglyph'>=</span> <span class='str'>"#FIXED"</span>+<a name="line-232"></a><a name="k_implied"></a><span class='definition'>k_implied</span>	<span class='keyglyph'>=</span> <span class='str'>"#IMPLIED"</span>+<a name="line-233"></a><a name="k_ndata"></a><span class='definition'>k_ndata</span>		<span class='keyglyph'>=</span> <span class='str'>"NDATA"</span>+<a name="line-234"></a><a name="k_notation"></a><span class='definition'>k_notation</span>	<span class='keyglyph'>=</span> <span class='str'>"NOTATION"</span>+<a name="line-235"></a><a name="k_pcdata"></a><span class='definition'>k_pcdata</span>	<span class='keyglyph'>=</span> <span class='str'>"#PCDATA"</span>+<a name="line-236"></a><a name="k_required"></a><span class='definition'>k_required</span>	<span class='keyglyph'>=</span> <span class='str'>"#REQUIRED"</span>+<a name="line-237"></a><a name="k_default"></a><span class='definition'>k_default</span>	<span class='keyglyph'>=</span> <span class='str'>"#DEFAULT"</span> <a name="line-238"></a>-<a name="line-239"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-240"></a><span class='comment'>--</span>-<a name="line-241"></a>-<a name="line-242"></a><span class='comment'>-- attribute names for transfer protocol attributes</span>-<a name="line-243"></a><span class='comment'>-- used in XmlInput for describing header information</span>-<a name="line-244"></a><span class='comment'>-- of http and other requests</span>-<a name="line-245"></a>-<a name="line-246"></a><a name="transferPrefix"></a><span class='definition'>transferPrefix</span>-<a name="line-247"></a> <span class='layout'>,</span> <span class='varid'>transferProtocol</span>-<a name="line-248"></a> <span class='layout'>,</span> <span class='varid'>transferMimeType</span>-<a name="line-249"></a> <span class='layout'>,</span> <span class='varid'>transferEncoding</span>-<a name="line-250"></a> <span class='layout'>,</span> <span class='varid'>transferURI</span>-<a name="line-251"></a> <span class='layout'>,</span> <span class='varid'>transferDefaultURI</span>-<a name="line-252"></a> <span class='layout'>,</span> <span class='varid'>transferStatus</span>-<a name="line-253"></a> <span class='layout'>,</span> <span class='varid'>transferMessage</span>-<a name="line-254"></a> <span class='layout'>,</span> <span class='varid'>transferVersion</span> <span class='keyglyph'>::</span> <span class='conid'>String</span>-<a name="line-255"></a>-<a name="line-256"></a><span class='definition'>transferPrefix</span>		<span class='keyglyph'>=</span> <span class='str'>"transfer-"</span>-<a name="line-257"></a>-<a name="line-258"></a><a name="transferProtocol"></a><span class='definition'>transferProtocol</span>	<span class='keyglyph'>=</span> <span class='varid'>transferPrefix</span> <span class='varop'>++</span> <span class='str'>"Protocol"</span>-<a name="line-259"></a><a name="transferVersion"></a><span class='definition'>transferVersion</span>		<span class='keyglyph'>=</span> <span class='varid'>transferPrefix</span> <span class='varop'>++</span> <span class='str'>"Version"</span>-<a name="line-260"></a><a name="transferMimeType"></a><span class='definition'>transferMimeType</span>	<span class='keyglyph'>=</span> <span class='varid'>transferPrefix</span> <span class='varop'>++</span> <span class='str'>"MimeType"</span>-<a name="line-261"></a><a name="transferEncoding"></a><span class='definition'>transferEncoding</span>	<span class='keyglyph'>=</span> <span class='varid'>transferPrefix</span> <span class='varop'>++</span> <span class='str'>"Encoding"</span>-<a name="line-262"></a><a name="transferDefaultURI"></a><span class='definition'>transferDefaultURI</span>	<span class='keyglyph'>=</span> <span class='varid'>transferPrefix</span> <span class='varop'>++</span> <span class='str'>"DefaultURI"</span>-<a name="line-263"></a><a name="transferStatus"></a><span class='definition'>transferStatus</span>		<span class='keyglyph'>=</span> <span class='varid'>transferPrefix</span> <span class='varop'>++</span> <span class='str'>"Status"</span>-<a name="line-264"></a><a name="transferMessage"></a><span class='definition'>transferMessage</span>		<span class='keyglyph'>=</span> <span class='varid'>transferPrefix</span> <span class='varop'>++</span> <span class='str'>"Message"</span>-<a name="line-265"></a><a name="transferURI"></a><span class='definition'>transferURI</span>		<span class='keyglyph'>=</span> <span class='varid'>transferPrefix</span> <span class='varop'>++</span> <span class='str'>"URI"</span>-<a name="line-266"></a>-<a name="line-267"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-268"></a><span class='comment'>--</span>-<a name="line-269"></a>-<a name="line-270"></a><a name="httpPrefix"></a><span class='definition'>httpPrefix</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>-<a name="line-271"></a><span class='definition'>httpPrefix</span>	<span class='keyglyph'>=</span> <span class='str'>"http-"</span>-<a name="line-272"></a>-<a name="line-273"></a><a name="stringProtocol"></a><span class='definition'>stringProtocol</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>-<a name="line-274"></a><span class='definition'>stringProtocol</span>	<span class='keyglyph'>=</span> <span class='str'>"string:"</span>-<a name="line-275"></a>-<a name="line-276"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-277"></a><span class='comment'>--</span>-<a name="line-278"></a><span class='comment'>-- encoding names</span>-<a name="line-279"></a>-<a name="line-280"></a><a name="isoLatin1"></a><span class='definition'>isoLatin1</span>-<a name="line-281"></a>  <span class='layout'>,</span> <span class='varid'>iso8859_1</span><span class='layout'>,</span> <span class='varid'>iso8859_2</span><span class='layout'>,</span> <span class='varid'>iso8859_3</span><span class='layout'>,</span> <span class='varid'>iso8859_4</span><span class='layout'>,</span> <span class='varid'>iso8859_5</span>-<a name="line-282"></a>  <span class='layout'>,</span> <span class='varid'>iso8859_6</span><span class='layout'>,</span> <span class='varid'>iso8859_7</span><span class='layout'>,</span> <span class='varid'>iso8859_8</span><span class='layout'>,</span> <span class='varid'>iso8859_9</span><span class='layout'>,</span> <span class='varid'>iso8859_10</span>-<a name="line-283"></a>  <span class='layout'>,</span> <span class='varid'>iso8859_11</span><span class='layout'>,</span> <span class='varid'>iso8859_13</span><span class='layout'>,</span> <span class='varid'>iso8859_14</span><span class='layout'>,</span> <span class='varid'>iso8859_15</span><span class='layout'>,</span> <span class='varid'>iso8859_16</span>-<a name="line-284"></a>  <span class='layout'>,</span> <span class='varid'>usAscii</span><span class='layout'>,</span> <span class='varid'>ucs2</span><span class='layout'>,</span> <span class='varid'>utf8</span><span class='layout'>,</span> <span class='varid'>utf16</span><span class='layout'>,</span> <span class='varid'>utf16be</span><span class='layout'>,</span> <span class='varid'>utf16le</span><span class='layout'>,</span> <span class='varid'>unicodeString</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>-<a name="line-285"></a>-<a name="line-286"></a><span class='definition'>isoLatin1</span>	<span class='keyglyph'>=</span> <span class='varid'>iso8859_1</span>-<a name="line-287"></a><a name="iso8859_1"></a><span class='definition'>iso8859_1</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-1"</span>-<a name="line-288"></a><a name="iso8859_2"></a><span class='definition'>iso8859_2</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-2"</span>-<a name="line-289"></a><a name="iso8859_3"></a><span class='definition'>iso8859_3</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-3"</span>-<a name="line-290"></a><a name="iso8859_4"></a><span class='definition'>iso8859_4</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-4"</span>-<a name="line-291"></a><a name="iso8859_5"></a><span class='definition'>iso8859_5</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-5"</span>-<a name="line-292"></a><a name="iso8859_6"></a><span class='definition'>iso8859_6</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-6"</span>-<a name="line-293"></a><a name="iso8859_7"></a><span class='definition'>iso8859_7</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-7"</span>-<a name="line-294"></a><a name="iso8859_8"></a><span class='definition'>iso8859_8</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-8"</span>-<a name="line-295"></a><a name="iso8859_9"></a><span class='definition'>iso8859_9</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-9"</span>-<a name="line-296"></a><a name="iso8859_10"></a><span class='definition'>iso8859_10</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-10"</span>-<a name="line-297"></a><a name="iso8859_11"></a><span class='definition'>iso8859_11</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-11"</span>-<a name="line-298"></a><a name="iso8859_13"></a><span class='definition'>iso8859_13</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-13"</span>-<a name="line-299"></a><a name="iso8859_14"></a><span class='definition'>iso8859_14</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-14"</span>-<a name="line-300"></a><a name="iso8859_15"></a><span class='definition'>iso8859_15</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-15"</span>-<a name="line-301"></a><a name="iso8859_16"></a><span class='definition'>iso8859_16</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-16"</span>-<a name="line-302"></a><a name="usAscii"></a><span class='definition'>usAscii</span>		<span class='keyglyph'>=</span> <span class='str'>"US-ASCII"</span>-<a name="line-303"></a><a name="ucs2"></a><span class='definition'>ucs2</span>		<span class='keyglyph'>=</span> <span class='str'>"ISO-10646-UCS-2"</span>-<a name="line-304"></a><a name="utf8"></a><span class='definition'>utf8</span>		<span class='keyglyph'>=</span> <span class='str'>"UTF-8"</span>-<a name="line-305"></a><a name="utf16"></a><span class='definition'>utf16</span>		<span class='keyglyph'>=</span> <span class='str'>"UTF-16"</span>-<a name="line-306"></a><a name="utf16be"></a><span class='definition'>utf16be</span>		<span class='keyglyph'>=</span> <span class='str'>"UTF-16BE"</span>-<a name="line-307"></a><a name="utf16le"></a><span class='definition'>utf16le</span>		<span class='keyglyph'>=</span> <span class='str'>"UTF-16LE"</span>-<a name="line-308"></a><a name="unicodeString"></a><span class='definition'>unicodeString</span>	<span class='keyglyph'>=</span> <span class='str'>"UNICODE"</span>-<a name="line-309"></a>-<a name="line-310"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-311"></a><span class='comment'>--</span>-<a name="line-312"></a><span class='comment'>-- known namespaces</span>-<a name="line-313"></a>-<a name="line-314"></a><span class='comment'>-- |</span>-<a name="line-315"></a><span class='comment'>-- the predefined namespace uri for xml: \"http:\/\/www.w3.org\/XML\/1998\/namespace\"</span>-<a name="line-316"></a>-<a name="line-317"></a><a name="xmlNamespace"></a><span class='definition'>xmlNamespace</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>-<a name="line-318"></a><span class='definition'>xmlNamespace</span>	<span class='keyglyph'>=</span> <span class='str'>"http://www.w3.org/XML/1998/namespace"</span>-<a name="line-319"></a>-<a name="line-320"></a><span class='comment'>-- |</span>-<a name="line-321"></a><span class='comment'>-- the predefined namespace uri for xmlns: \"http:\/\/www.w3.org\/2000\/xmlns\/\"</span>-<a name="line-322"></a>-<a name="line-323"></a><a name="xmlnsNamespace"></a><span class='definition'>xmlnsNamespace</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>-<a name="line-324"></a><span class='definition'>xmlnsNamespace</span>	<span class='keyglyph'>=</span> <span class='str'>"http://www.w3.org/2000/xmlns/"</span>-<a name="line-325"></a>-<a name="line-326"></a><a name="relaxNamespace"></a><span class='comment'>-- | Relax NG namespace</span>-<a name="line-327"></a><span class='definition'>relaxNamespace</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>-<a name="line-328"></a><span class='definition'>relaxNamespace</span>	<span class='keyglyph'>=</span> <span class='str'>"http://relaxng.org/ns/structure/1.0"</span>-<a name="line-329"></a>-<a name="line-330"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-331"></a><span class='comment'>-- option for Relax NG</span>-<a name="line-332"></a>-<a name="line-333"></a><a name="a_relax_schema"></a><span class='definition'>a_relax_schema</span><span class='layout'>,</span>-<a name="line-334"></a> <span class='varid'>a_do_not_check_restrictions</span><span class='layout'>,</span>  -<a name="line-335"></a> <span class='varid'>a_check_restrictions</span><span class='layout'>,</span>-<a name="line-336"></a> <span class='varid'>a_do_not_validate_externalRef</span><span class='layout'>,</span>-<a name="line-337"></a> <span class='varid'>a_validate_externalRef</span><span class='layout'>,</span>-<a name="line-338"></a> <span class='varid'>a_do_not_validate_include</span><span class='layout'>,</span>-<a name="line-339"></a> <span class='varid'>a_validate_include</span><span class='layout'>,</span>-<a name="line-340"></a> <span class='varid'>a_output_changes</span><span class='layout'>,</span> -<a name="line-341"></a> <span class='varid'>a_do_not_collect_errors</span> <span class='keyglyph'>::</span> <span class='conid'>String</span> -<a name="line-342"></a>-<a name="line-343"></a><span class='definition'>a_relax_schema</span>		      <span class='keyglyph'>=</span> <span class='str'>"relax-schema"</span>-<a name="line-344"></a><a name="a_do_not_check_restrictions"></a><span class='definition'>a_do_not_check_restrictions</span>   <span class='keyglyph'>=</span> <span class='str'>"do-not-check-restrictions"</span>-<a name="line-345"></a><a name="a_check_restrictions"></a><span class='definition'>a_check_restrictions</span>          <span class='keyglyph'>=</span> <span class='str'>"check-restrictions"</span>-<a name="line-346"></a><a name="a_do_not_validate_externalRef"></a><span class='definition'>a_do_not_validate_externalRef</span> <span class='keyglyph'>=</span> <span class='str'>"do-not-validate-externalRef"</span>-<a name="line-347"></a><a name="a_validate_externalRef"></a><span class='definition'>a_validate_externalRef</span>        <span class='keyglyph'>=</span> <span class='str'>"validate-externalRef"</span> -<a name="line-348"></a><a name="a_do_not_validate_include"></a><span class='definition'>a_do_not_validate_include</span>     <span class='keyglyph'>=</span> <span class='str'>"do-not-validate-include"</span>-<a name="line-349"></a><a name="a_validate_include"></a><span class='definition'>a_validate_include</span>            <span class='keyglyph'>=</span> <span class='str'>"validate-include"</span>-<a name="line-350"></a><a name="a_output_changes"></a><span class='definition'>a_output_changes</span>              <span class='keyglyph'>=</span> <span class='str'>"output-pattern-transformations"</span>-<a name="line-351"></a><a name="a_do_not_collect_errors"></a><span class='definition'>a_do_not_collect_errors</span>       <span class='keyglyph'>=</span> <span class='str'>"do-not-collect-errors"</span>-<a name="line-352"></a>-<a name="line-353"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-354"></a>-<a name="line-355"></a><span class='comment'>-- mime types</span>-<a name="line-356"></a><span class='comment'>--</span>-<a name="line-357"></a><span class='comment'>-- see RFC \"http:\/\/www.rfc-editor.org\/rfc\/rfc3023.txt\"</span>-<a name="line-358"></a>-<a name="line-359"></a><a name="application_xhtml"></a><span class='definition'>application_xhtml</span><span class='layout'>,</span>-<a name="line-360"></a> <span class='varid'>application_xml</span><span class='layout'>,</span>-<a name="line-361"></a> <span class='varid'>application_xml_external_parsed_entity</span><span class='layout'>,</span>-<a name="line-362"></a> <span class='varid'>application_xml_dtd</span><span class='layout'>,</span>-<a name="line-363"></a> <span class='varid'>text_html</span><span class='layout'>,</span>-<a name="line-364"></a> <span class='varid'>text_xml</span><span class='layout'>,</span>-<a name="line-365"></a> <span class='varid'>text_xml_external_parsed_entity</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>-<a name="line-366"></a>-<a name="line-367"></a><span class='definition'>application_xhtml</span>			<span class='keyglyph'>=</span> <span class='str'>"application/xhtml+xml"</span>-<a name="line-368"></a><a name="application_xml"></a><span class='definition'>application_xml</span>				<span class='keyglyph'>=</span> <span class='str'>"application/xml"</span>-<a name="line-369"></a><a name="application_xml_external_parsed_entity"></a><span class='definition'>application_xml_external_parsed_entity</span>	<span class='keyglyph'>=</span> <span class='str'>"application/xml-external-parsed-entity"</span>-<a name="line-370"></a><a name="application_xml_dtd"></a><span class='definition'>application_xml_dtd</span>			<span class='keyglyph'>=</span> <span class='str'>"application/xml-dtd"</span>-<a name="line-371"></a>-<a name="line-372"></a><a name="text_html"></a><span class='definition'>text_html</span>				<span class='keyglyph'>=</span> <span class='str'>"text/html"</span>-<a name="line-373"></a><a name="text_xml"></a><span class='definition'>text_xml</span>				<span class='keyglyph'>=</span> <span class='str'>"text/xml"</span>-<a name="line-374"></a><a name="text_xml_external_parsed_entity"></a><span class='definition'>text_xml_external_parsed_entity</span>		<span class='keyglyph'>=</span> <span class='str'>"text/xml-external-parsed-entity"</span>-<a name="line-375"></a>-<a name="line-376"></a><a name="isHtmlMimeType"></a><span class='definition'>isHtmlMimeType</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>-<a name="line-377"></a><span class='definition'>isHtmlMimeType</span> <span class='varid'>t</span>-<a name="line-378"></a>    <span class='keyglyph'>=</span> <span class='varid'>t</span> <span class='varop'>==</span> <span class='varid'>text_html</span>-<a name="line-379"></a>-<a name="line-380"></a><a name="isXmlMimeType"></a><span class='definition'>isXmlMimeType</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>-<a name="line-381"></a><span class='definition'>isXmlMimeType</span> <span class='varid'>t</span>-<a name="line-382"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>t</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span> <span class='varid'>application_xhtml</span>-<a name="line-383"></a>		<span class='layout'>,</span> <span class='varid'>application_xml</span>-<a name="line-384"></a>		<span class='layout'>,</span> <span class='varid'>application_xml_external_parsed_entity</span>-<a name="line-385"></a>		<span class='layout'>,</span> <span class='varid'>application_xml_dtd</span>-<a name="line-386"></a>		<span class='layout'>,</span> <span class='varid'>text_xml</span>-<a name="line-387"></a>		<span class='layout'>,</span> <span class='varid'>text_xml_external_parsed_entity</span>-<a name="line-388"></a>		<span class='keyglyph'>]</span>-<a name="line-389"></a>	<span class='varop'>||</span>-<a name="line-390"></a>	<span class='str'>"+xml"</span> <span class='varop'>`isSuffixOf`</span> <span class='varid'>t</span>		<span class='comment'>-- application/mathml+xml</span>-<a name="line-391"></a>      <span class='layout'>)</span>					<span class='comment'>-- or image/svg+xml</span>-<a name="line-392"></a>-<a name="line-393"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-239"></a>+<a name="line-240"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-241"></a><span class='comment'>--</span>+<a name="line-242"></a>+<a name="line-243"></a><span class='comment'>-- attribute names for transfer protocol attributes</span>+<a name="line-244"></a><span class='comment'>-- used in XmlInput for describing header information</span>+<a name="line-245"></a><span class='comment'>-- of http and other requests</span>+<a name="line-246"></a>+<a name="line-247"></a><a name="transferPrefix"></a><span class='definition'>transferPrefix</span>+<a name="line-248"></a> <span class='layout'>,</span> <span class='varid'>transferProtocol</span>+<a name="line-249"></a> <span class='layout'>,</span> <span class='varid'>transferMimeType</span>+<a name="line-250"></a> <span class='layout'>,</span> <span class='varid'>transferEncoding</span>+<a name="line-251"></a> <span class='layout'>,</span> <span class='varid'>transferURI</span>+<a name="line-252"></a> <span class='layout'>,</span> <span class='varid'>transferDefaultURI</span>+<a name="line-253"></a> <span class='layout'>,</span> <span class='varid'>transferStatus</span>+<a name="line-254"></a> <span class='layout'>,</span> <span class='varid'>transferMessage</span>+<a name="line-255"></a> <span class='layout'>,</span> <span class='varid'>transferVersion</span> <span class='keyglyph'>::</span> <span class='conid'>String</span>+<a name="line-256"></a>+<a name="line-257"></a><span class='definition'>transferPrefix</span>		<span class='keyglyph'>=</span> <span class='str'>"transfer-"</span>+<a name="line-258"></a>+<a name="line-259"></a><a name="transferProtocol"></a><span class='definition'>transferProtocol</span>	<span class='keyglyph'>=</span> <span class='varid'>transferPrefix</span> <span class='varop'>++</span> <span class='str'>"Protocol"</span>+<a name="line-260"></a><a name="transferVersion"></a><span class='definition'>transferVersion</span>		<span class='keyglyph'>=</span> <span class='varid'>transferPrefix</span> <span class='varop'>++</span> <span class='str'>"Version"</span>+<a name="line-261"></a><a name="transferMimeType"></a><span class='definition'>transferMimeType</span>	<span class='keyglyph'>=</span> <span class='varid'>transferPrefix</span> <span class='varop'>++</span> <span class='str'>"MimeType"</span>+<a name="line-262"></a><a name="transferEncoding"></a><span class='definition'>transferEncoding</span>	<span class='keyglyph'>=</span> <span class='varid'>transferPrefix</span> <span class='varop'>++</span> <span class='str'>"Encoding"</span>+<a name="line-263"></a><a name="transferDefaultURI"></a><span class='definition'>transferDefaultURI</span>	<span class='keyglyph'>=</span> <span class='varid'>transferPrefix</span> <span class='varop'>++</span> <span class='str'>"DefaultURI"</span>+<a name="line-264"></a><a name="transferStatus"></a><span class='definition'>transferStatus</span>		<span class='keyglyph'>=</span> <span class='varid'>transferPrefix</span> <span class='varop'>++</span> <span class='str'>"Status"</span>+<a name="line-265"></a><a name="transferMessage"></a><span class='definition'>transferMessage</span>		<span class='keyglyph'>=</span> <span class='varid'>transferPrefix</span> <span class='varop'>++</span> <span class='str'>"Message"</span>+<a name="line-266"></a><a name="transferURI"></a><span class='definition'>transferURI</span>		<span class='keyglyph'>=</span> <span class='varid'>transferPrefix</span> <span class='varop'>++</span> <span class='str'>"URI"</span>+<a name="line-267"></a>+<a name="line-268"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-269"></a><span class='comment'>--</span>+<a name="line-270"></a>+<a name="line-271"></a><a name="httpPrefix"></a><span class='definition'>httpPrefix</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>+<a name="line-272"></a><span class='definition'>httpPrefix</span>	<span class='keyglyph'>=</span> <span class='str'>"http-"</span>+<a name="line-273"></a>+<a name="line-274"></a><a name="stringProtocol"></a><span class='definition'>stringProtocol</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>+<a name="line-275"></a><span class='definition'>stringProtocol</span>	<span class='keyglyph'>=</span> <span class='str'>"string:"</span>+<a name="line-276"></a>+<a name="line-277"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-278"></a><span class='comment'>--</span>+<a name="line-279"></a><span class='comment'>-- encoding names</span>+<a name="line-280"></a>+<a name="line-281"></a><a name="isoLatin1"></a><span class='definition'>isoLatin1</span>+<a name="line-282"></a>  <span class='layout'>,</span> <span class='varid'>iso8859_1</span><span class='layout'>,</span> <span class='varid'>iso8859_2</span><span class='layout'>,</span> <span class='varid'>iso8859_3</span><span class='layout'>,</span> <span class='varid'>iso8859_4</span><span class='layout'>,</span> <span class='varid'>iso8859_5</span>+<a name="line-283"></a>  <span class='layout'>,</span> <span class='varid'>iso8859_6</span><span class='layout'>,</span> <span class='varid'>iso8859_7</span><span class='layout'>,</span> <span class='varid'>iso8859_8</span><span class='layout'>,</span> <span class='varid'>iso8859_9</span><span class='layout'>,</span> <span class='varid'>iso8859_10</span>+<a name="line-284"></a>  <span class='layout'>,</span> <span class='varid'>iso8859_11</span><span class='layout'>,</span> <span class='varid'>iso8859_13</span><span class='layout'>,</span> <span class='varid'>iso8859_14</span><span class='layout'>,</span> <span class='varid'>iso8859_15</span><span class='layout'>,</span> <span class='varid'>iso8859_16</span>+<a name="line-285"></a>  <span class='layout'>,</span> <span class='varid'>usAscii</span><span class='layout'>,</span> <span class='varid'>ucs2</span><span class='layout'>,</span> <span class='varid'>utf8</span><span class='layout'>,</span> <span class='varid'>utf16</span><span class='layout'>,</span> <span class='varid'>utf16be</span><span class='layout'>,</span> <span class='varid'>utf16le</span><span class='layout'>,</span> <span class='varid'>unicodeString</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>+<a name="line-286"></a>+<a name="line-287"></a><span class='definition'>isoLatin1</span>	<span class='keyglyph'>=</span> <span class='varid'>iso8859_1</span>+<a name="line-288"></a><a name="iso8859_1"></a><span class='definition'>iso8859_1</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-1"</span>+<a name="line-289"></a><a name="iso8859_2"></a><span class='definition'>iso8859_2</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-2"</span>+<a name="line-290"></a><a name="iso8859_3"></a><span class='definition'>iso8859_3</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-3"</span>+<a name="line-291"></a><a name="iso8859_4"></a><span class='definition'>iso8859_4</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-4"</span>+<a name="line-292"></a><a name="iso8859_5"></a><span class='definition'>iso8859_5</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-5"</span>+<a name="line-293"></a><a name="iso8859_6"></a><span class='definition'>iso8859_6</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-6"</span>+<a name="line-294"></a><a name="iso8859_7"></a><span class='definition'>iso8859_7</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-7"</span>+<a name="line-295"></a><a name="iso8859_8"></a><span class='definition'>iso8859_8</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-8"</span>+<a name="line-296"></a><a name="iso8859_9"></a><span class='definition'>iso8859_9</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-9"</span>+<a name="line-297"></a><a name="iso8859_10"></a><span class='definition'>iso8859_10</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-10"</span>+<a name="line-298"></a><a name="iso8859_11"></a><span class='definition'>iso8859_11</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-11"</span>+<a name="line-299"></a><a name="iso8859_13"></a><span class='definition'>iso8859_13</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-13"</span>+<a name="line-300"></a><a name="iso8859_14"></a><span class='definition'>iso8859_14</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-14"</span>+<a name="line-301"></a><a name="iso8859_15"></a><span class='definition'>iso8859_15</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-15"</span>+<a name="line-302"></a><a name="iso8859_16"></a><span class='definition'>iso8859_16</span>	<span class='keyglyph'>=</span> <span class='str'>"ISO-8859-16"</span>+<a name="line-303"></a><a name="usAscii"></a><span class='definition'>usAscii</span>		<span class='keyglyph'>=</span> <span class='str'>"US-ASCII"</span>+<a name="line-304"></a><a name="ucs2"></a><span class='definition'>ucs2</span>		<span class='keyglyph'>=</span> <span class='str'>"ISO-10646-UCS-2"</span>+<a name="line-305"></a><a name="utf8"></a><span class='definition'>utf8</span>		<span class='keyglyph'>=</span> <span class='str'>"UTF-8"</span>+<a name="line-306"></a><a name="utf16"></a><span class='definition'>utf16</span>		<span class='keyglyph'>=</span> <span class='str'>"UTF-16"</span>+<a name="line-307"></a><a name="utf16be"></a><span class='definition'>utf16be</span>		<span class='keyglyph'>=</span> <span class='str'>"UTF-16BE"</span>+<a name="line-308"></a><a name="utf16le"></a><span class='definition'>utf16le</span>		<span class='keyglyph'>=</span> <span class='str'>"UTF-16LE"</span>+<a name="line-309"></a><a name="unicodeString"></a><span class='definition'>unicodeString</span>	<span class='keyglyph'>=</span> <span class='str'>"UNICODE"</span>+<a name="line-310"></a>+<a name="line-311"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-312"></a><span class='comment'>--</span>+<a name="line-313"></a><span class='comment'>-- known namespaces</span>+<a name="line-314"></a>+<a name="line-315"></a><span class='comment'>-- |</span>+<a name="line-316"></a><span class='comment'>-- the predefined namespace uri for xml: \"http:\/\/www.w3.org\/XML\/1998\/namespace\"</span>+<a name="line-317"></a>+<a name="line-318"></a><a name="xmlNamespace"></a><span class='definition'>xmlNamespace</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>+<a name="line-319"></a><span class='definition'>xmlNamespace</span>	<span class='keyglyph'>=</span> <span class='str'>"http://www.w3.org/XML/1998/namespace"</span>+<a name="line-320"></a>+<a name="line-321"></a><span class='comment'>-- |</span>+<a name="line-322"></a><span class='comment'>-- the predefined namespace uri for xmlns: \"http:\/\/www.w3.org\/2000\/xmlns\/\"</span>+<a name="line-323"></a>+<a name="line-324"></a><a name="xmlnsNamespace"></a><span class='definition'>xmlnsNamespace</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>+<a name="line-325"></a><span class='definition'>xmlnsNamespace</span>	<span class='keyglyph'>=</span> <span class='str'>"http://www.w3.org/2000/xmlns/"</span>+<a name="line-326"></a>+<a name="line-327"></a><a name="relaxNamespace"></a><span class='comment'>-- | Relax NG namespace</span>+<a name="line-328"></a><span class='definition'>relaxNamespace</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>+<a name="line-329"></a><span class='definition'>relaxNamespace</span>	<span class='keyglyph'>=</span> <span class='str'>"http://relaxng.org/ns/structure/1.0"</span>+<a name="line-330"></a>+<a name="line-331"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-332"></a><span class='comment'>-- option for Relax NG</span>+<a name="line-333"></a>+<a name="line-334"></a><a name="a_relax_schema"></a><span class='definition'>a_relax_schema</span><span class='layout'>,</span>+<a name="line-335"></a> <span class='varid'>a_do_not_check_restrictions</span><span class='layout'>,</span>  +<a name="line-336"></a> <span class='varid'>a_check_restrictions</span><span class='layout'>,</span>+<a name="line-337"></a> <span class='varid'>a_do_not_validate_externalRef</span><span class='layout'>,</span>+<a name="line-338"></a> <span class='varid'>a_validate_externalRef</span><span class='layout'>,</span>+<a name="line-339"></a> <span class='varid'>a_do_not_validate_include</span><span class='layout'>,</span>+<a name="line-340"></a> <span class='varid'>a_validate_include</span><span class='layout'>,</span>+<a name="line-341"></a> <span class='varid'>a_output_changes</span><span class='layout'>,</span> +<a name="line-342"></a> <span class='varid'>a_do_not_collect_errors</span> <span class='keyglyph'>::</span> <span class='conid'>String</span> +<a name="line-343"></a>+<a name="line-344"></a><span class='definition'>a_relax_schema</span>		      <span class='keyglyph'>=</span> <span class='str'>"relax-schema"</span>+<a name="line-345"></a><a name="a_do_not_check_restrictions"></a><span class='definition'>a_do_not_check_restrictions</span>   <span class='keyglyph'>=</span> <span class='str'>"do-not-check-restrictions"</span>+<a name="line-346"></a><a name="a_check_restrictions"></a><span class='definition'>a_check_restrictions</span>          <span class='keyglyph'>=</span> <span class='str'>"check-restrictions"</span>+<a name="line-347"></a><a name="a_do_not_validate_externalRef"></a><span class='definition'>a_do_not_validate_externalRef</span> <span class='keyglyph'>=</span> <span class='str'>"do-not-validate-externalRef"</span>+<a name="line-348"></a><a name="a_validate_externalRef"></a><span class='definition'>a_validate_externalRef</span>        <span class='keyglyph'>=</span> <span class='str'>"validate-externalRef"</span> +<a name="line-349"></a><a name="a_do_not_validate_include"></a><span class='definition'>a_do_not_validate_include</span>     <span class='keyglyph'>=</span> <span class='str'>"do-not-validate-include"</span>+<a name="line-350"></a><a name="a_validate_include"></a><span class='definition'>a_validate_include</span>            <span class='keyglyph'>=</span> <span class='str'>"validate-include"</span>+<a name="line-351"></a><a name="a_output_changes"></a><span class='definition'>a_output_changes</span>              <span class='keyglyph'>=</span> <span class='str'>"output-pattern-transformations"</span>+<a name="line-352"></a><a name="a_do_not_collect_errors"></a><span class='definition'>a_do_not_collect_errors</span>       <span class='keyglyph'>=</span> <span class='str'>"do-not-collect-errors"</span>+<a name="line-353"></a>+<a name="line-354"></a><span class='comment'>-- ------------------------------------------------------------</span> </pre></body> </html>
doc/hdoc/src/Text-XML-HXT-DOM-XmlOptions.html view
@@ -24,154 +24,166 @@ <a name="line-16"></a>    <span class='layout'>,</span> <span class='varid'>selectOptions</span> <a name="line-17"></a>    <span class='layout'>,</span> <span class='varid'>removeOptions</span> <a name="line-18"></a>    <span class='layout'>,</span> <span class='varid'>optionIsSet</span>-<a name="line-19"></a>    <span class='layout'>)</span>-<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'>XmlKeywords</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'>DOM</span><span class='varop'>.</span><span class='conid'>TypeDefs</span>-<a name="line-24"></a>-<a name="line-25"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>-<a name="line-26"></a>-<a name="line-27"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>Console</span><span class='varop'>.</span><span class='conid'>GetOpt</span>-<a name="line-28"></a>-<a name="line-29"></a><span class='comment'>-- ------------------------------------------------------------</span>-<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'>-- commonly useful options for XML input</span>-<a name="line-34"></a><span class='comment'>--</span>-<a name="line-35"></a><span class='comment'>-- can be used for option definition with haskell getopt</span>-<a name="line-36"></a><span class='comment'>--</span>-<a name="line-37"></a><span class='comment'>-- defines options: 'a_trace', 'a_proxy', 'a_use_curl', 'a_do_not_use_curl', 'a_options_curl', 'a_encoding',</span>-<a name="line-38"></a><span class='comment'>-- 'a_issue_errors', 'a_do_not_issue_errors', 'a_parse_html', 'a_parse_by_mimetype', 'a_tagsoup' 'a_issue_warnings', 'a_do_not_issue_warnings',</span>-<a name="line-39"></a><span class='comment'>-- 'a_parse_xml', 'a_validate', 'a_do_not_validate', 'a_canonicalize', 'a_do_not_canonicalize',</span>-<a name="line-40"></a><span class='comment'>--- 'a_preserve_comment', 'a_do_not_preserve_comment', 'a_check_namespaces', 'a_do_not_check_namespaces',</span>-<a name="line-41"></a><span class='comment'>-- 'a_remove_whitespace', 'a_do_not_remove_whitespace'</span>-<a name="line-42"></a>-<a name="line-43"></a><a name="inputOptions"></a><span class='definition'>inputOptions</span> 	<span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-44"></a><span class='definition'>inputOptions</span>-<a name="line-45"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='conid'>Option</span> <span class='str'>"t"</span>	<span class='keyglyph'>[</span><span class='varid'>a_trace</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>OptArg</span> <span class='varid'>trc</span> <span class='str'>"LEVEL"</span><span class='layout'>)</span>			<span class='str'>"trace level (0-4), default 1"</span>-<a name="line-46"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"p"</span>	<span class='keyglyph'>[</span><span class='varid'>a_proxy</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>ReqArg</span> <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_proxy</span><span class='layout'>)</span>         <span class='str'>"PROXY"</span><span class='layout'>)</span>	<span class='str'>"proxy for http access (e.g. \"www-cache:3128\")"</span>-<a name="line-47"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_use_curl</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_use_curl</span>          <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"HTTP access via external program \"curl\", more functionality, supports HTTP/1.0, less efficient"</span>-<a name="line-48"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_do_not_use_curl</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_use_curl</span>          <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"HTTP access via built in HTTP/1.1 module (default)"</span>-<a name="line-49"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_options_curl</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>ReqArg</span> <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_options_curl</span><span class='layout'>)</span>    <span class='str'>"STR"</span><span class='layout'>)</span>	<span class='str'>"additional curl options, e.g. for timeout, ..."</span>-<a name="line-50"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_default_baseuri</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>ReqArg</span> <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>transferURI</span><span class='layout'>)</span> 	<span class='str'>"URI"</span><span class='layout'>)</span>	<span class='str'>"default base URI, default: \"file:///&lt;cwd&gt;/\""</span>-<a name="line-51"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"e"</span>	<span class='keyglyph'>[</span><span class='varid'>a_encoding</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>ReqArg</span> <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_encoding</span><span class='layout'>)</span>    <span class='str'>"CHARSET"</span><span class='layout'>)</span>	<span class='layout'>(</span> <span class='str'>"default document encoding ("</span> <span class='varop'>++</span> <span class='varid'>utf8</span> <span class='varop'>++</span> <span class='str'>", "</span> <span class='varop'>++</span> <span class='varid'>isoLatin1</span> <span class='varop'>++</span> <span class='str'>", "</span> <span class='varop'>++</span> <span class='varid'>usAscii</span> <span class='varop'>++</span> <span class='str'>", ...)"</span> <span class='layout'>)</span>-<a name="line-52"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_issue_errors</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_issue_errors</span>      <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"issue all errorr messages on stderr (default)"</span>-<a name="line-53"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_do_not_issue_errors</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_issue_errors</span>      <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"ignore all error messages"</span>-<a name="line-54"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"H"</span>	<span class='keyglyph'>[</span><span class='varid'>a_parse_html</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_parse_html</span>        <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"parse input as HTML, try to interprete everything as HTML, no validation"</span>-<a name="line-55"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"M"</span>	<span class='keyglyph'>[</span><span class='varid'>a_parse_by_mimetype</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_parse_by_mimetype</span> <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"parse dependent on mime type: text/html as HTML, text/xml and text/xhtml as XML, else no parse"</span>-<a name="line-56"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"T"</span>	<span class='keyglyph'>[</span><span class='varid'>a_tagsoup</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_tagsoup</span>           <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"lasy tagsoup parser, for HTML and XML, no DTD, no validation, no PIs, only XHTML entityrefs"</span>-<a name="line-57"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_issue_warnings</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_issue_warnings</span>    <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"issue warnings, when parsing HTML (default)"</span>-<a name="line-58"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"Q"</span>	<span class='keyglyph'>[</span><span class='varid'>a_do_not_issue_warnings</span><span class='keyglyph'>]</span>	<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_issue_warnings</span>    <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"ignore warnings, when parsing HTML"</span>-<a name="line-59"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_parse_xml</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_parse_html</span>        <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"parse input as XML (default)"</span>-<a name="line-60"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_validate</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_validate</span>          <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"document validation when parsing XML (default)"</span>-<a name="line-61"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"w"</span>	<span class='keyglyph'>[</span><span class='varid'>a_do_not_validate</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_validate</span>          <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"only wellformed check, no validation"</span>-<a name="line-62"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_canonicalize</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_canonicalize</span>      <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"canonicalize document, remove DTD, comment, transform CDATA, CharRef's, ... (default)"</span>-<a name="line-63"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"c"</span>	<span class='keyglyph'>[</span><span class='varid'>a_do_not_canonicalize</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_canonicalize</span>      <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"do not canonicalize document, don't remove DTD, comment, don't transform CDATA, CharRef's, ..."</span>-<a name="line-64"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"C"</span>	<span class='keyglyph'>[</span><span class='varid'>a_preserve_comment</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_preserve_comment</span>  <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"don't remove comments during canonicalisation"</span>-<a name="line-65"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_do_not_preserve_comment</span><span class='keyglyph'>]</span>	<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_preserve_comment</span>  <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"remove comments during canonicalisation (default)"</span>-<a name="line-66"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"n"</span>	<span class='keyglyph'>[</span><span class='varid'>a_check_namespaces</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_check_namespaces</span>  <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"tag tree with namespace information and check namespaces"</span>-<a name="line-67"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_do_not_check_namespaces</span><span class='keyglyph'>]</span>	<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_check_namespaces</span>  <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"ignore namespaces (default)"</span>-<a name="line-68"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"r"</span>	<span class='keyglyph'>[</span><span class='varid'>a_remove_whitespace</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_remove_whitespace</span> <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"remove redundant whitespace, simplifies tree and processing"</span>-<a name="line-69"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_do_not_remove_whitespace</span><span class='keyglyph'>]</span>	<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_remove_whitespace</span> <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"don't remove redundant whitespace (default)"</span>-<a name="line-70"></a>      <span class='keyglyph'>]</span>-<a name="line-71"></a>    <span class='keyword'>where</span>-<a name="line-72"></a>    <span class='varid'>att</span> <span class='varid'>n</span> <span class='varid'>v</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>-<a name="line-73"></a>    <span class='varid'>trc</span> <span class='keyglyph'>=</span> <span class='varid'>att</span> <span class='varid'>a_trace</span> <span class='varop'>.</span> <span class='varid'>show</span> <span class='varop'>.</span> <span class='varid'>max</span> <span class='num'>0</span> <span class='varop'>.</span> <span class='varid'>min</span> <span class='num'>9</span> <span class='varop'>.</span> <span class='layout'>(</span><span class='varid'>read</span> <span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Int</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='layout'>(</span><span class='chr'>'0'</span><span class='conop'>:</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>filter</span> <span class='layout'>(</span><span class='varop'>`elem`</span> <span class='str'>"0123456789"</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>fromMaybe</span> <span class='varid'>v_1</span>-<a name="line-74"></a>-<a name="line-75"></a>-<a name="line-76"></a><span class='comment'>-- | available Relax NG validation options</span>-<a name="line-77"></a><span class='comment'>--</span>-<a name="line-78"></a><span class='comment'>-- defines options</span>-<a name="line-79"></a><span class='comment'>-- 'a_check_restrictions', 'a_validate_externalRef', 'a_validate_include', 'a_do_not_check_restrictions',  </span>-<a name="line-80"></a><span class='comment'>-- 'a_do_not_validate_externalRef', 'a_do_not_validate_include'</span>-<a name="line-81"></a>-<a name="line-82"></a><a name="relaxOptions"></a><span class='definition'>relaxOptions</span> <span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-83"></a><span class='definition'>relaxOptions</span>    -<a name="line-84"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='conid'>Option</span> <span class='str'>"X"</span> <span class='keyglyph'>[</span><span class='varid'>a_relax_schema</span><span class='keyglyph'>]</span>	        	<span class='layout'>(</span><span class='conid'>ReqArg</span> <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_relax_schema</span><span class='layout'>)</span> <span class='str'>"SCHEMA"</span><span class='layout'>)</span>	<span class='str'>"validation with Relax NG, SCHEMA is the URI for the Relax NG schema"</span>-<a name="line-85"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>  <span class='keyglyph'>[</span><span class='varid'>a_check_restrictions</span><span class='keyglyph'>]</span>	        <span class='layout'>(</span><span class='conid'>NoArg</span> <span class='layout'>(</span><span class='varid'>a_check_restrictions</span><span class='layout'>,</span>    <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"check Relax NG schema restrictions during schema simplification (default)"</span>-<a name="line-86"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>  <span class='keyglyph'>[</span><span class='varid'>a_do_not_check_restrictions</span><span class='keyglyph'>]</span>	<span class='layout'>(</span><span class='conid'>NoArg</span> <span class='layout'>(</span><span class='varid'>a_check_restrictions</span><span class='layout'>,</span>    <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"do not check Relax NG schema restrictions"</span>-<a name="line-87"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>  <span class='keyglyph'>[</span><span class='varid'>a_validate_externalRef</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span> <span class='layout'>(</span><span class='varid'>a_validate_externalRef</span><span class='layout'>,</span>  <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"validate a Relax NG schema referenced by a externalRef-Pattern (default)"</span>-<a name="line-88"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>  <span class='keyglyph'>[</span><span class='varid'>a_do_not_validate_externalRef</span><span class='keyglyph'>]</span>	<span class='layout'>(</span><span class='conid'>NoArg</span> <span class='layout'>(</span><span class='varid'>a_validate_externalRef</span><span class='layout'>,</span>  <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"do not validate a Relax NG schema referenced by an externalRef-Pattern"</span>-<a name="line-89"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>  <span class='keyglyph'>[</span><span class='varid'>a_validate_include</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>NoArg</span> <span class='layout'>(</span><span class='varid'>a_validate_include</span><span class='layout'>,</span>      <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"validate a Relax NG schema referenced by an include-Pattern (default)"</span>-<a name="line-90"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>  <span class='keyglyph'>[</span><span class='varid'>a_do_not_validate_include</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span> <span class='layout'>(</span><span class='varid'>a_validate_include</span><span class='layout'>,</span>      <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>   <span class='str'>"do not validate a Relax NG schema referenced by an include-Pattern"</span>-<a name="line-91"></a>	<span class='comment'>{--<a name="line-92"></a>      , Option ""  [a_output_changes]			(NoArg (a_output_changes,        v_1))	"output Pattern transformations in case of an error"    -<a name="line-93"></a>      , Option ""  [a_do_not_collect_errors]     	(NoArg (a_do_not_collect_errors, v_1))	"stop Relax NG simplification after the first error has occurred"-<a name="line-94"></a>	-}</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'>att</span> <span class='varid'>n</span> <span class='varid'>v</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>-<a name="line-98"></a>-<a name="line-99"></a><span class='comment'>-- |</span>-<a name="line-100"></a><span class='comment'>-- commonly useful options for XML output</span>-<a name="line-101"></a><span class='comment'>--</span>-<a name="line-102"></a><span class='comment'>-- defines options: 'a_indent', 'a_output_encoding', 'a_output_file', 'a_output_html'</span>-<a name="line-103"></a>-<a name="line-104"></a><a name="outputOptions"></a><span class='definition'>outputOptions</span> 	<span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-105"></a><span class='definition'>outputOptions</span>-<a name="line-106"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='conid'>Option</span> <span class='str'>"i"</span>	<span class='keyglyph'>[</span><span class='varid'>a_indent</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_indent</span>                <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"indent XML output for readability"</span>-<a name="line-107"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"o"</span>	<span class='keyglyph'>[</span><span class='varid'>a_output_encoding</span><span class='keyglyph'>]</span>	<span class='layout'>(</span><span class='conid'>ReqArg</span> <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_output_encoding</span><span class='layout'>)</span> <span class='str'>"CHARSET"</span><span class='layout'>)</span>	<span class='layout'>(</span> <span class='str'>"encoding of output ("</span> <span class='varop'>++</span> <span class='varid'>utf8</span> <span class='varop'>++</span> <span class='str'>", "</span> <span class='varop'>++</span> <span class='varid'>isoLatin1</span> <span class='varop'>++</span> <span class='str'>", "</span> <span class='varop'>++</span> <span class='varid'>usAscii</span> <span class='varop'>++</span> <span class='str'>")"</span> <span class='layout'>)</span>-<a name="line-108"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"f"</span>	<span class='keyglyph'>[</span><span class='varid'>a_output_file</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>ReqArg</span> <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_output_file</span><span class='layout'>)</span>        <span class='str'>"FILE"</span><span class='layout'>)</span>	<span class='str'>"output file for resulting document (default: stdout)"</span>-<a name="line-109"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_output_html</span><span class='keyglyph'>]</span>	        <span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_output_html</span>           <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"output of none ASCII chars as HTMl entity references"</span>-<a name="line-110"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>       <span class='keyglyph'>[</span><span class='varid'>a_no_xml_pi</span><span class='keyglyph'>]</span>	        <span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_no_xml_pi</span>             <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>      <span class='layout'>(</span><span class='str'>"output without &lt;?xml ...?&gt; processing instruction, useful in combination with --"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>a_output_html</span><span class='layout'>)</span>-<a name="line-111"></a>      <span class='keyglyph'>]</span>-<a name="line-112"></a>    <span class='keyword'>where</span>-<a name="line-113"></a>    <span class='varid'>att</span> <span class='varid'>n</span> <span class='varid'>v</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>-<a name="line-114"></a>-<a name="line-115"></a><span class='comment'>-- |</span>-<a name="line-116"></a><span class='comment'>-- commonly useful options</span>-<a name="line-117"></a><span class='comment'>--</span>-<a name="line-118"></a><span class='comment'>-- defines options: 'a_verbose', 'a_help'</span>-<a name="line-119"></a>-<a name="line-120"></a><a name="generalOptions"></a><span class='definition'>generalOptions</span> 	<span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-121"></a><span class='definition'>generalOptions</span>-<a name="line-122"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='conid'>Option</span> <span class='str'>"v"</span>	<span class='keyglyph'>[</span><span class='varid'>a_verbose</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>a_verbose</span><span class='layout'>,</span> <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>		<span class='str'>"verbose output"</span>-<a name="line-123"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"h?"</span>	<span class='keyglyph'>[</span><span class='varid'>a_help</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>a_help</span><span class='layout'>,</span>    <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>		<span class='str'>"this message"</span>-<a name="line-124"></a>      <span class='keyglyph'>]</span>-<a name="line-125"></a>-<a name="line-126"></a><span class='comment'>-- |</span>-<a name="line-127"></a><span class='comment'>-- defines 'a_version' option</span>-<a name="line-128"></a>-<a name="line-129"></a><a name="versionOptions"></a><span class='definition'>versionOptions</span> 	<span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-130"></a><span class='definition'>versionOptions</span>-<a name="line-131"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='conid'>Option</span> <span class='str'>"V"</span>	<span class='keyglyph'>[</span><span class='varid'>a_version</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>a_version</span><span class='layout'>,</span> <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>		<span class='str'>"show program version"</span>-<a name="line-132"></a>      <span class='keyglyph'>]</span>-<a name="line-133"></a>-<a name="line-134"></a><span class='comment'>-- |</span>-<a name="line-135"></a><span class='comment'>-- debug output options</span>-<a name="line-136"></a>-<a name="line-137"></a><a name="showOptions"></a><span class='definition'>showOptions</span>	<span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-138"></a><span class='definition'>showOptions</span>-<a name="line-139"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_show_tree</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>a_show_tree</span><span class='layout'>,</span>    <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>		<span class='str'>"output tree representation instead of document source"</span>-<a name="line-140"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_show_haskell</span><span class='keyglyph'>]</span>	<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>a_show_haskell</span><span class='layout'>,</span> <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>		<span class='str'>"output internal Haskell representation instead of document source"</span>-<a name="line-141"></a>      <span class='keyglyph'>]</span>-<a name="line-142"></a>-<a name="line-143"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-144"></a>-<a name="line-145"></a><span class='comment'>-- |</span>-<a name="line-146"></a><span class='comment'>-- select options from a predefined list of option desciptions</span>-<a name="line-147"></a>-<a name="line-148"></a><a name="selectOptions"></a><span class='definition'>selectOptions</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='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-149"></a><span class='definition'>selectOptions</span> <span class='varid'>ol</span> <span class='varid'>os</span>-<a name="line-150"></a>    <span class='keyglyph'>=</span> <span class='varid'>concat</span> <span class='varop'>.</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>on</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>filter</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='layout'>(</span><span class='conid'>Option</span> <span class='keyword'>_</span> <span class='varid'>ons</span> <span class='keyword'>_</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>on</span> <span class='varop'>`elem`</span> <span class='varid'>ons</span><span class='layout'>)</span> <span class='varid'>os</span><span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>ol</span>+<a name="line-19"></a>    <span class='layout'>,</span> <span class='varid'>isTrueValue</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'>XmlKeywords</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'>DOM</span><span class='varop'>.</span><span class='conid'>TypeDefs</span>+<a name="line-25"></a>+<a name="line-26"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</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'>Console</span><span class='varop'>.</span><span class='conid'>GetOpt</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'>-- commonly useful options for XML input</span>+<a name="line-35"></a><span class='comment'>--</span>+<a name="line-36"></a><span class='comment'>-- can be used for option definition with haskell getopt</span>+<a name="line-37"></a><span class='comment'>--</span>+<a name="line-38"></a><span class='comment'>-- defines options: 'a_trace', 'a_proxy', 'a_use_curl', 'a_do_not_use_curl', 'a_options_curl', 'a_encoding',</span>+<a name="line-39"></a><span class='comment'>-- 'a_issue_errors', 'a_do_not_issue_errors', 'a_parse_html', 'a_parse_by_mimetype', 'a_tagsoup' 'a_issue_warnings', 'a_do_not_issue_warnings',</span>+<a name="line-40"></a><span class='comment'>-- 'a_parse_xml', 'a_validate', 'a_do_not_validate', 'a_canonicalize', 'a_do_not_canonicalize',</span>+<a name="line-41"></a><span class='comment'>--- 'a_preserve_comment', 'a_do_not_preserve_comment', 'a_check_namespaces', 'a_do_not_check_namespaces',</span>+<a name="line-42"></a><span class='comment'>-- 'a_remove_whitespace', 'a_do_not_remove_whitespace'</span>+<a name="line-43"></a>+<a name="line-44"></a><a name="inputOptions"></a><span class='definition'>inputOptions</span> 	<span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>+<a name="line-45"></a><span class='definition'>inputOptions</span>+<a name="line-46"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='conid'>Option</span> <span class='str'>"t"</span>	<span class='keyglyph'>[</span><span class='varid'>a_trace</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>OptArg</span> <span class='varid'>trc</span> <span class='str'>"LEVEL"</span><span class='layout'>)</span>			<span class='str'>"trace level (0-4), default 1"</span>+<a name="line-47"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"p"</span>	<span class='keyglyph'>[</span><span class='varid'>a_proxy</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>ReqArg</span> <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_proxy</span><span class='layout'>)</span>         <span class='str'>"PROXY"</span><span class='layout'>)</span>	<span class='str'>"proxy for http access (e.g. \"www-cache:3128\")"</span>+<a name="line-48"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_use_curl</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_use_curl</span>          <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"obsolete, since hxt-8.1 HTTP access is always done with curl bindings"</span>+<a name="line-49"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_do_not_use_curl</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_use_curl</span>          <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"obsolete, since hxt-8.1 HTTP access is always done with curl bindings"</span>+<a name="line-50"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_options_curl</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>ReqArg</span> <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_options_curl</span><span class='layout'>)</span>    <span class='str'>"STR"</span><span class='layout'>)</span>	<span class='str'>"additional curl options, e.g. for timeout, ..."</span>+<a name="line-51"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_default_baseuri</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>ReqArg</span> <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>transferURI</span><span class='layout'>)</span> 	<span class='str'>"URI"</span><span class='layout'>)</span>	<span class='str'>"default base URI, default: \"file:///&lt;cwd&gt;/\""</span>+<a name="line-52"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"e"</span>	<span class='keyglyph'>[</span><span class='varid'>a_encoding</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>ReqArg</span> <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_encoding</span><span class='layout'>)</span>    <span class='str'>"CHARSET"</span><span class='layout'>)</span>	<span class='layout'>(</span> <span class='str'>"default document encoding ("</span> <span class='varop'>++</span> <span class='varid'>utf8</span> <span class='varop'>++</span> <span class='str'>", "</span> <span class='varop'>++</span> <span class='varid'>isoLatin1</span> <span class='varop'>++</span> <span class='str'>", "</span> <span class='varop'>++</span> <span class='varid'>usAscii</span> <span class='varop'>++</span> <span class='str'>", ...)"</span> <span class='layout'>)</span>+<a name="line-53"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>       <span class='keyglyph'>[</span><span class='varid'>a_mime_types</span><span class='keyglyph'>]</span>                  <span class='layout'>(</span><span class='conid'>ReqArg</span> <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_mime_types</span><span class='layout'>)</span>     <span class='str'>"FILE"</span><span class='layout'>)</span>  <span class='str'>"set mime type configuration file, e.g. \"/etc/mime.types\""</span>+<a name="line-54"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_issue_errors</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_issue_errors</span>      <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"issue all errorr messages on stderr (default)"</span>+<a name="line-55"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_do_not_issue_errors</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_issue_errors</span>      <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"ignore all error messages"</span>+<a name="line-56"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_ignore_encoding_errors</span><span class='keyglyph'>]</span>	<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_ignore_encoding_errors</span> <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>   <span class='str'>"ignore encoding errors"</span>+<a name="line-57"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_ignore_none_xml_contents</span><span class='keyglyph'>]</span>    <span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_ignore_none_xml_contents</span> <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span> <span class='str'>"discards all contents of none XML/HTML documents, only the meta info remains stays in the doc tree"</span>+<a name="line-58"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"H"</span>	<span class='keyglyph'>[</span><span class='varid'>a_parse_html</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_parse_html</span>        <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"parse input as HTML, try to interprete everything as HTML, no validation"</span>+<a name="line-59"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"M"</span>	<span class='keyglyph'>[</span><span class='varid'>a_parse_by_mimetype</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_parse_by_mimetype</span> <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"parse dependent on mime type: text/html as HTML, text/xml and text/xhtml and others as XML, else no parse"</span>+<a name="line-60"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_parse_xml</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_parse_html</span>        <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"parse input as XML, (default)"</span>+<a name="line-61"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"T"</span>	<span class='keyglyph'>[</span><span class='varid'>a_tagsoup</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_tagsoup</span>           <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"lasy tagsoup parser, for HTML and XML, no DTD, no validation, no PIs, only XHTML entityrefs"</span>+<a name="line-62"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_issue_warnings</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_issue_warnings</span>    <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"issue warnings, when parsing HTML (default)"</span>+<a name="line-63"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"Q"</span>	<span class='keyglyph'>[</span><span class='varid'>a_do_not_issue_warnings</span><span class='keyglyph'>]</span>	<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_issue_warnings</span>    <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"ignore warnings, when parsing HTML"</span>+<a name="line-64"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_validate</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_validate</span>          <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"document validation when parsing XML (default)"</span>+<a name="line-65"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"w"</span>	<span class='keyglyph'>[</span><span class='varid'>a_do_not_validate</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_validate</span>          <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"only wellformed check, no validation"</span>+<a name="line-66"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_canonicalize</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_canonicalize</span>      <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"canonicalize document, remove DTD, comment, transform CDATA, CharRef's, ... (default)"</span>+<a name="line-67"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"c"</span>	<span class='keyglyph'>[</span><span class='varid'>a_do_not_canonicalize</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_canonicalize</span>      <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"do not canonicalize document, don't remove DTD, comment, don't transform CDATA, CharRef's, ..."</span>+<a name="line-68"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"C"</span>	<span class='keyglyph'>[</span><span class='varid'>a_preserve_comment</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_preserve_comment</span>  <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"don't remove comments during canonicalisation"</span>+<a name="line-69"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_do_not_preserve_comment</span><span class='keyglyph'>]</span>	<span class='layout'>(</span><span class='conid'>NoArg</span>	<span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_preserve_comment</span>  <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"remove comments during canonicalisation (default)"</span>+<a name="line-70"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"n"</span>	<span class='keyglyph'>[</span><span class='varid'>a_check_namespaces</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_check_namespaces</span>  <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"tag tree with namespace information and check namespaces"</span>+<a name="line-71"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_do_not_check_namespaces</span><span class='keyglyph'>]</span>	<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_check_namespaces</span>  <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"ignore namespaces (default)"</span>+<a name="line-72"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"r"</span>	<span class='keyglyph'>[</span><span class='varid'>a_remove_whitespace</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_remove_whitespace</span> <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"remove redundant whitespace, simplifies tree and processing"</span>+<a name="line-73"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_do_not_remove_whitespace</span><span class='keyglyph'>]</span>	<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_remove_whitespace</span> <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"don't remove redundant whitespace (default)"</span>+<a name="line-74"></a>      <span class='keyglyph'>]</span>+<a name="line-75"></a>    <span class='keyword'>where</span>+<a name="line-76"></a>    <span class='varid'>att</span> <span class='varid'>n</span> <span class='varid'>v</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>+<a name="line-77"></a>    <span class='varid'>trc</span> <span class='keyglyph'>=</span> <span class='varid'>att</span> <span class='varid'>a_trace</span> <span class='varop'>.</span> <span class='varid'>show</span> <span class='varop'>.</span> <span class='varid'>max</span> <span class='num'>0</span> <span class='varop'>.</span> <span class='varid'>min</span> <span class='num'>9</span> <span class='varop'>.</span> <span class='layout'>(</span><span class='varid'>read</span> <span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Int</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='layout'>(</span><span class='chr'>'0'</span><span class='conop'>:</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>filter</span> <span class='layout'>(</span><span class='varop'>`elem`</span> <span class='str'>"0123456789"</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>fromMaybe</span> <span class='varid'>v_1</span>+<a name="line-78"></a>+<a name="line-79"></a>+<a name="line-80"></a><span class='comment'>-- | available Relax NG validation options</span>+<a name="line-81"></a><span class='comment'>--</span>+<a name="line-82"></a><span class='comment'>-- defines options</span>+<a name="line-83"></a><span class='comment'>-- 'a_check_restrictions', 'a_validate_externalRef', 'a_validate_include', 'a_do_not_check_restrictions',  </span>+<a name="line-84"></a><span class='comment'>-- 'a_do_not_validate_externalRef', 'a_do_not_validate_include'</span>+<a name="line-85"></a>+<a name="line-86"></a><a name="relaxOptions"></a><span class='definition'>relaxOptions</span> <span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>+<a name="line-87"></a><span class='definition'>relaxOptions</span>    +<a name="line-88"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='conid'>Option</span> <span class='str'>"X"</span> <span class='keyglyph'>[</span><span class='varid'>a_relax_schema</span><span class='keyglyph'>]</span>	        	<span class='layout'>(</span><span class='conid'>ReqArg</span> <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_relax_schema</span><span class='layout'>)</span> <span class='str'>"SCHEMA"</span><span class='layout'>)</span>	<span class='str'>"validation with Relax NG, SCHEMA is the URI for the Relax NG schema"</span>+<a name="line-89"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>  <span class='keyglyph'>[</span><span class='varid'>a_check_restrictions</span><span class='keyglyph'>]</span>	        <span class='layout'>(</span><span class='conid'>NoArg</span> <span class='layout'>(</span><span class='varid'>a_check_restrictions</span><span class='layout'>,</span>    <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"check Relax NG schema restrictions during schema simplification (default)"</span>+<a name="line-90"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>  <span class='keyglyph'>[</span><span class='varid'>a_do_not_check_restrictions</span><span class='keyglyph'>]</span>	<span class='layout'>(</span><span class='conid'>NoArg</span> <span class='layout'>(</span><span class='varid'>a_check_restrictions</span><span class='layout'>,</span>    <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"do not check Relax NG schema restrictions"</span>+<a name="line-91"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>  <span class='keyglyph'>[</span><span class='varid'>a_validate_externalRef</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span> <span class='layout'>(</span><span class='varid'>a_validate_externalRef</span><span class='layout'>,</span>  <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"validate a Relax NG schema referenced by a externalRef-Pattern (default)"</span>+<a name="line-92"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>  <span class='keyglyph'>[</span><span class='varid'>a_do_not_validate_externalRef</span><span class='keyglyph'>]</span>	<span class='layout'>(</span><span class='conid'>NoArg</span> <span class='layout'>(</span><span class='varid'>a_validate_externalRef</span><span class='layout'>,</span>  <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"do not validate a Relax NG schema referenced by an externalRef-Pattern"</span>+<a name="line-93"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>  <span class='keyglyph'>[</span><span class='varid'>a_validate_include</span><span class='keyglyph'>]</span>			<span class='layout'>(</span><span class='conid'>NoArg</span> <span class='layout'>(</span><span class='varid'>a_validate_include</span><span class='layout'>,</span>      <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"validate a Relax NG schema referenced by an include-Pattern (default)"</span>+<a name="line-94"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>  <span class='keyglyph'>[</span><span class='varid'>a_do_not_validate_include</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span> <span class='layout'>(</span><span class='varid'>a_validate_include</span><span class='layout'>,</span>      <span class='varid'>v_0</span><span class='layout'>)</span><span class='layout'>)</span>   <span class='str'>"do not validate a Relax NG schema referenced by an include-Pattern"</span>+<a name="line-95"></a>	<span class='comment'>{-+<a name="line-96"></a>      , Option ""  [a_output_changes]			(NoArg (a_output_changes,        v_1))	"output Pattern transformations in case of an error"    +<a name="line-97"></a>      , Option ""  [a_do_not_collect_errors]     	(NoArg (a_do_not_collect_errors, v_1))	"stop Relax NG simplification after the first error has occurred"+<a name="line-98"></a>	-}</span>+<a name="line-99"></a>      <span class='keyglyph'>]</span>+<a name="line-100"></a>    <span class='keyword'>where</span>+<a name="line-101"></a>    <span class='varid'>att</span> <span class='varid'>n</span> <span class='varid'>v</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>+<a name="line-102"></a>+<a name="line-103"></a><span class='comment'>-- |</span>+<a name="line-104"></a><span class='comment'>-- commonly useful options for XML output</span>+<a name="line-105"></a><span class='comment'>--</span>+<a name="line-106"></a><span class='comment'>-- defines options: 'a_indent', 'a_output_encoding', 'a_output_file', 'a_output_html'</span>+<a name="line-107"></a>+<a name="line-108"></a><a name="outputOptions"></a><span class='definition'>outputOptions</span> 	<span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>+<a name="line-109"></a><span class='definition'>outputOptions</span>+<a name="line-110"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='conid'>Option</span> <span class='str'>"i"</span>	<span class='keyglyph'>[</span><span class='varid'>a_indent</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_indent</span>                <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"indent XML output for readability"</span>+<a name="line-111"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"o"</span>	<span class='keyglyph'>[</span><span class='varid'>a_output_encoding</span><span class='keyglyph'>]</span>	<span class='layout'>(</span><span class='conid'>ReqArg</span> <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_output_encoding</span><span class='layout'>)</span> <span class='str'>"CHARSET"</span><span class='layout'>)</span>	<span class='layout'>(</span> <span class='str'>"encoding of output ("</span> <span class='varop'>++</span> <span class='varid'>utf8</span> <span class='varop'>++</span> <span class='str'>", "</span> <span class='varop'>++</span> <span class='varid'>isoLatin1</span> <span class='varop'>++</span> <span class='str'>", "</span> <span class='varop'>++</span> <span class='varid'>usAscii</span> <span class='varop'>++</span> <span class='str'>")"</span> <span class='layout'>)</span>+<a name="line-112"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"f"</span>	<span class='keyglyph'>[</span><span class='varid'>a_output_file</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>ReqArg</span> <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_output_file</span><span class='layout'>)</span>        <span class='str'>"FILE"</span><span class='layout'>)</span>	<span class='str'>"output file for resulting document (default: stdout)"</span>+<a name="line-113"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_output_html</span><span class='keyglyph'>]</span>	        <span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_output_html</span>           <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='str'>"output of none ASCII chars as HTMl entity references"</span>+<a name="line-114"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>       <span class='keyglyph'>[</span><span class='varid'>a_no_xml_pi</span><span class='keyglyph'>]</span>	        <span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>att</span> <span class='varid'>a_no_xml_pi</span>             <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>      <span class='layout'>(</span><span class='str'>"output without &lt;?xml ...?&gt; processing instruction, useful in combination with --"</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>a_output_html</span><span class='layout'>)</span>+<a name="line-115"></a>      <span class='keyglyph'>]</span>+<a name="line-116"></a>    <span class='keyword'>where</span>+<a name="line-117"></a>    <span class='varid'>att</span> <span class='varid'>n</span> <span class='varid'>v</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>+<a name="line-118"></a>+<a name="line-119"></a><span class='comment'>-- |</span>+<a name="line-120"></a><span class='comment'>-- commonly useful options</span>+<a name="line-121"></a><span class='comment'>--</span>+<a name="line-122"></a><span class='comment'>-- defines options: 'a_verbose', 'a_help'</span>+<a name="line-123"></a>+<a name="line-124"></a><a name="generalOptions"></a><span class='definition'>generalOptions</span> 	<span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>+<a name="line-125"></a><span class='definition'>generalOptions</span>+<a name="line-126"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='conid'>Option</span> <span class='str'>"v"</span>	<span class='keyglyph'>[</span><span class='varid'>a_verbose</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>a_verbose</span><span class='layout'>,</span> <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>		<span class='str'>"verbose output"</span>+<a name="line-127"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>"h?"</span>	<span class='keyglyph'>[</span><span class='varid'>a_help</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>a_help</span><span class='layout'>,</span>    <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>		<span class='str'>"this message"</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'>-- defines 'a_version' option</span>+<a name="line-132"></a>+<a name="line-133"></a><a name="versionOptions"></a><span class='definition'>versionOptions</span> 	<span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>+<a name="line-134"></a><span class='definition'>versionOptions</span>+<a name="line-135"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='conid'>Option</span> <span class='str'>"V"</span>	<span class='keyglyph'>[</span><span class='varid'>a_version</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>a_version</span><span class='layout'>,</span> <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>		<span class='str'>"show program version"</span>+<a name="line-136"></a>      <span class='keyglyph'>]</span>+<a name="line-137"></a>+<a name="line-138"></a><span class='comment'>-- |</span>+<a name="line-139"></a><span class='comment'>-- debug output options</span>+<a name="line-140"></a>+<a name="line-141"></a><a name="showOptions"></a><span class='definition'>showOptions</span>	<span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>+<a name="line-142"></a><span class='definition'>showOptions</span>+<a name="line-143"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_show_tree</span><span class='keyglyph'>]</span>		<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>a_show_tree</span><span class='layout'>,</span>    <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>		<span class='str'>"output tree representation instead of document source"</span>+<a name="line-144"></a>      <span class='layout'>,</span> <span class='conid'>Option</span> <span class='str'>""</span>	<span class='keyglyph'>[</span><span class='varid'>a_show_haskell</span><span class='keyglyph'>]</span>	<span class='layout'>(</span><span class='conid'>NoArg</span>  <span class='layout'>(</span><span class='varid'>a_show_haskell</span><span class='layout'>,</span> <span class='varid'>v_1</span><span class='layout'>)</span><span class='layout'>)</span>		<span class='str'>"output internal Haskell representation instead of document source"</span>+<a name="line-145"></a>      <span class='keyglyph'>]</span>+<a name="line-146"></a>+<a name="line-147"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-148"></a>+<a name="line-149"></a><span class='comment'>-- |</span>+<a name="line-150"></a><span class='comment'>-- select options from a predefined list of option desciptions</span> <a name="line-151"></a>-<a name="line-152"></a><a name="removeOptions"></a><span class='definition'>removeOptions</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='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-153"></a><span class='definition'>removeOptions</span> <span class='varid'>ol</span> <span class='varid'>os</span>-<a name="line-154"></a>    <span class='keyglyph'>=</span> <span class='varid'>filter</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='layout'>(</span><span class='conid'>Option</span> <span class='keyword'>_</span> <span class='varid'>ons</span> <span class='keyword'>_</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>any</span> <span class='layout'>(</span><span class='varop'>`elem`</span> <span class='varid'>ol</span><span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>ons</span> <span class='layout'>)</span> <span class='varid'>os</span>+<a name="line-152"></a><a name="selectOptions"></a><span class='definition'>selectOptions</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='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>+<a name="line-153"></a><span class='definition'>selectOptions</span> <span class='varid'>ol</span> <span class='varid'>os</span>+<a name="line-154"></a>    <span class='keyglyph'>=</span> <span class='varid'>concat</span> <span class='varop'>.</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='varid'>on</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>filter</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='layout'>(</span><span class='conid'>Option</span> <span class='keyword'>_</span> <span class='varid'>ons</span> <span class='keyword'>_</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>on</span> <span class='varop'>`elem`</span> <span class='varid'>ons</span><span class='layout'>)</span> <span class='varid'>os</span><span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>ol</span> <a name="line-155"></a>-<a name="line-156"></a><span class='comment'>-- |</span>-<a name="line-157"></a><span class='comment'>-- check whether an option is set</span>-<a name="line-158"></a><span class='comment'>--</span>-<a name="line-159"></a><span class='comment'>-- reads the value of an attribute, usually applied to a document root node,</span>-<a name="line-160"></a><span class='comment'>-- and checks if the value represents True. The following strings are interpreted</span>-<a name="line-161"></a><span class='comment'>-- as true: \"1\", \"True\", \"true\", \"yes\", \"Yes\".</span>-<a name="line-162"></a>-<a name="line-163"></a><a name="optionIsSet"></a><span class='definition'>optionIsSet</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>-<a name="line-164"></a><span class='definition'>optionIsSet</span> <span class='varid'>n</span>-<a name="line-165"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</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><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>lookupDef</span> <span class='str'>""</span> <span class='varid'>n</span>+<a name="line-156"></a><a name="removeOptions"></a><span class='definition'>removeOptions</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='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>OptDescr</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>+<a name="line-157"></a><span class='definition'>removeOptions</span> <span class='varid'>ol</span> <span class='varid'>os</span>+<a name="line-158"></a>    <span class='keyglyph'>=</span> <span class='varid'>filter</span> <span class='layout'>(</span><span class='keyglyph'>\</span> <span class='layout'>(</span><span class='conid'>Option</span> <span class='keyword'>_</span> <span class='varid'>ons</span> <span class='keyword'>_</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>not</span> <span class='varop'>.</span> <span class='varid'>any</span> <span class='layout'>(</span><span class='varop'>`elem`</span> <span class='varid'>ol</span><span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>ons</span> <span class='layout'>)</span> <span class='varid'>os</span>+<a name="line-159"></a>+<a name="line-160"></a><span class='comment'>-- |</span>+<a name="line-161"></a><span class='comment'>-- check whether an option is set</span>+<a name="line-162"></a><span class='comment'>--</span>+<a name="line-163"></a><span class='comment'>-- reads the value of an attribute, usually applied to a document root node,</span>+<a name="line-164"></a><span class='comment'>-- and checks if the value represents True. The following strings are interpreted</span>+<a name="line-165"></a><span class='comment'>-- as true: \"1\", \"True\", \"true\", \"yes\", \"Yes\".</span> <a name="line-166"></a>-<a name="line-167"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-167"></a><a name="optionIsSet"></a><span class='definition'>optionIsSet</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Attributes</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>+<a name="line-168"></a><span class='definition'>optionIsSet</span> <span class='varid'>n</span>	<span class='keyglyph'>=</span> <span class='varid'>isTrueValue</span> <span class='varop'>.</span> <span class='varid'>lookupDef</span> <span class='str'>""</span> <span class='varid'>n</span>+<a name="line-169"></a>+<a name="line-170"></a><span class='comment'>-- | check whether a string represents True</span>+<a name="line-171"></a><span class='comment'>--</span>+<a name="line-172"></a><span class='comment'>-- definition:</span>+<a name="line-173"></a><span class='comment'>--</span>+<a name="line-174"></a><span class='comment'>-- &gt; isTrueValue	= (`elem` ["1", "True", "true", "Yes", "yes"])</span>+<a name="line-175"></a>+<a name="line-176"></a><a name="isTrueValue"></a><span class='definition'>isTrueValue</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>+<a name="line-177"></a><span class='definition'>isTrueValue</span>	<span class='keyglyph'>=</span> <span class='layout'>(</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><span class='layout'>)</span>+<a name="line-178"></a>+<a name="line-179"></a><span class='comment'>-- ------------------------------------------------------------</span> </pre></body> </html>
− doc/hdoc/src/Text-XML-HXT-DOM-XmlState.html
@@ -1,699 +0,0 @@-<!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><span class='comment'>--</span>-<a name="line-14"></a><span class='comment'>-- Version : $Id: XmlState.hs,v 1.3 2005/05/27 13:15:23 hxml Exp $</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'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</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'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>-<a name="line-18"></a>    <span class='layout'>)</span>-<a name="line-19"></a><span class='keyword'>where</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'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>-<a name="line-22"></a>-<a name="line-23"></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-24"></a>-<a name="line-25"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>IO</span>-<a name="line-26"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>-<a name="line-27"></a>-<a name="line-28"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-29"></a>-<a name="line-30"></a><span class='comment'>-- |</span>-<a name="line-31"></a><span class='comment'>-- The internal system state consists of a list of name-value pairs</span>-<a name="line-32"></a><span class='comment'>-- of type @(String, XmlTrees)@, so arbitrary lists of trees can be stored.</span>-<a name="line-33"></a><span class='comment'>-- For options, often only strings are used as values, so a set of access</span>-<a name="line-34"></a><span class='comment'>-- functions with string values is available</span>-<a name="line-35"></a><span class='comment'>-- The error handling method can be controlled by an error handler filter,</span>-<a name="line-36"></a><span class='comment'>-- the default filter issues the errors on stderr</span>-<a name="line-37"></a>-<a name="line-38"></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-39"></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-40"></a>					   <span class='layout'>}</span>-<a name="line-41"></a>-<a name="line-42"></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-43"></a>-<a name="line-44"></a><span class='comment'>-- |</span>-<a name="line-45"></a><span class='comment'>-- The State has a system and a user part</span>-<a name="line-46"></a><span class='comment'>-- the user state is a type parameter</span>-<a name="line-47"></a>-<a name="line-48"></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-49"></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-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'>-- The monad type for commands. It is an instance of "StateIO" from the</span>-<a name="line-54"></a><span class='comment'>-- general module "Control.Monad.MonadStateIO".</span>-<a name="line-55"></a>-<a name="line-56"></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-57"></a>-<a name="line-58"></a><span class='comment'>-- |</span>-<a name="line-59"></a><span class='comment'>-- The "XmlFilter" type for filters working on a state</span>-<a name="line-60"></a>-<a name="line-61"></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-62"></a>-<a name="line-63"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-64"></a><span class='comment'>--</span>-<a name="line-65"></a><span class='comment'>-- user defined state</span>-<a name="line-66"></a><span class='comment'>-- access functions</span>-<a name="line-67"></a>-<a name="line-68"></a><span class='comment'>-- |</span>-<a name="line-69"></a><span class='comment'>-- change the user state</span>-<a name="line-70"></a><span class='comment'>--</span>-<a name="line-71"></a><span class='comment'>--    * 1.parameter fct :  the user state change function</span>-<a name="line-72"></a><span class='comment'>--</span>-<a name="line-73"></a><span class='comment'>--    - returns : the new state</span>-<a name="line-74"></a>-<a name="line-75"></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-76"></a><span class='definition'>changeState</span> <span class='varid'>f</span>-<a name="line-77"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-78"></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-79"></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-80"></a>      <span class='keyword'>where</span>-<a name="line-81"></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-82"></a>-<a name="line-83"></a><span class='comment'>-- |</span>-<a name="line-84"></a><span class='comment'>-- set the user state.</span>-<a name="line-85"></a><span class='comment'>--</span>-<a name="line-86"></a><span class='comment'>--    * 1.parameter s :  the new state</span>-<a name="line-87"></a><span class='comment'>--</span>-<a name="line-88"></a><span class='comment'>--    - returns : the new state</span>-<a name="line-89"></a>-<a name="line-90"></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-91"></a><span class='definition'>setState</span> <span class='varid'>s</span>-<a name="line-92"></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-93"></a>-<a name="line-94"></a><span class='comment'>-- |</span>-<a name="line-95"></a><span class='comment'>-- read the user state</span>-<a name="line-96"></a><span class='comment'>--</span>-<a name="line-97"></a><span class='comment'>--    - returns : the current state</span>-<a name="line-98"></a>-<a name="line-99"></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-100"></a><span class='definition'>getState</span>-<a name="line-101"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeState</span> <span class='varid'>id</span>-<a name="line-102"></a>-<a name="line-103"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-104"></a>-<a name="line-105"></a><span class='comment'>-- |</span>-<a name="line-106"></a><span class='comment'>-- change the system part of the state.</span>-<a name="line-107"></a><span class='comment'>--</span>-<a name="line-108"></a><span class='comment'>-- see also : 'changeState'</span>-<a name="line-109"></a>-<a name="line-110"></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-111"></a><span class='definition'>changeSysState</span> <span class='varid'>f</span>-<a name="line-112"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-113"></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-114"></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-115"></a>      <span class='keyword'>where</span>-<a name="line-116"></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-117"></a>-<a name="line-118"></a><span class='comment'>-- |</span>-<a name="line-119"></a><span class='comment'>-- set the system part of the state.</span>-<a name="line-120"></a><span class='comment'>--</span>-<a name="line-121"></a><span class='comment'>-- see also : 'setState'</span>-<a name="line-122"></a>-<a name="line-123"></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-124"></a><span class='definition'>setSysState</span> <span class='varid'>s</span>-<a name="line-125"></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-126"></a>-<a name="line-127"></a><span class='comment'>-- |</span>-<a name="line-128"></a><span class='comment'>-- read the system part of the state.</span>-<a name="line-129"></a><span class='comment'>--</span>-<a name="line-130"></a><span class='comment'>-- see also : 'getState'</span>-<a name="line-131"></a>-<a name="line-132"></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-133"></a><span class='definition'>getSysState</span>-<a name="line-134"></a>    <span class='keyglyph'>=</span> <span class='varid'>changeSysState</span> <span class='varid'>id</span>-<a name="line-135"></a>-<a name="line-136"></a><span class='comment'>-- |</span>-<a name="line-137"></a><span class='comment'>-- the initial system state</span>-<a name="line-138"></a><span class='comment'>--</span>-<a name="line-139"></a><span class='comment'>-- an empty list of attribute value pairs</span>-<a name="line-140"></a>-<a name="line-141"></a><a name="initialSysState"></a><span class='definition'>initialSysState</span>		<span class='keyglyph'>::</span> <span class='conid'>SysState</span>-<a name="line-142"></a><span class='definition'>initialSysState</span>-<a name="line-143"></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-144"></a>	       <span class='layout'>,</span> <span class='varid'>sysStateErrorHandler</span> <span class='keyglyph'>=</span> <span class='varid'>errorMsgToStderr</span>-<a name="line-145"></a>	       <span class='layout'>}</span>-<a name="line-146"></a>-<a name="line-147"></a><span class='comment'>-- |</span>-<a name="line-148"></a><span class='comment'>-- change the attributes in the system state</span>-<a name="line-149"></a>-<a name="line-150"></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-151"></a><span class='definition'>changeSysStateAttrs</span> <span class='varid'>cf</span> <span class='varid'>sstate</span>-<a name="line-152"></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-153"></a>-<a name="line-154"></a>-<a name="line-155"></a><span class='comment'>-- |</span>-<a name="line-156"></a><span class='comment'>-- set the error message handler</span>-<a name="line-157"></a>-<a name="line-158"></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-159"></a><span class='definition'>setSysErrorHandler</span> <span class='varid'>ehf</span>-<a name="line-160"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-161"></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-162"></a>      <span class='varid'>return</span> <span class='conid'>()</span>-<a name="line-163"></a>-<a name="line-164"></a><span class='comment'>-- |</span>-<a name="line-165"></a><span class='comment'>-- get the error handler</span>-<a name="line-166"></a>-<a name="line-167"></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-168"></a><span class='definition'>getSysErrorHandler</span>-<a name="line-169"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-170"></a>      <span class='varid'>s</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysState</span>-<a name="line-171"></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-172"></a>-<a name="line-173"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-174"></a>-<a name="line-175"></a><span class='comment'>-- |</span>-<a name="line-176"></a><span class='comment'>-- set or change a single system parameter.</span>-<a name="line-177"></a><span class='comment'>--</span>-<a name="line-178"></a><span class='comment'>--    * 1.parameter name :  the name of the parameter</span>-<a name="line-179"></a><span class='comment'>--</span>-<a name="line-180"></a><span class='comment'>--    - 2.parameter value :  the list of associated trees</span>-<a name="line-181"></a><span class='comment'>--</span>-<a name="line-182"></a><span class='comment'>--    - returns : nothing</span>-<a name="line-183"></a><span class='comment'>--</span>-<a name="line-184"></a><span class='comment'>-- see also : 'setSysParam', 'setSysParamInt'</span>-<a name="line-185"></a>-<a name="line-186"></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-187"></a><span class='definition'>setSysParamTree</span> <span class='varid'>name</span> <span class='varid'>val</span>-<a name="line-188"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-189"></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-190"></a>      <span class='varid'>return</span> <span class='conid'>()</span>-<a name="line-191"></a>-<a name="line-192"></a><span class='comment'>-- |</span>-<a name="line-193"></a><span class='comment'>-- set or change a single system parameter of type string.</span>-<a name="line-194"></a><span class='comment'>--</span>-<a name="line-195"></a><span class='comment'>--    * 1.parameter name :  the name of the parameter</span>-<a name="line-196"></a><span class='comment'>--</span>-<a name="line-197"></a><span class='comment'>--    - 2.parameter value :  the (new) string value</span>-<a name="line-198"></a><span class='comment'>--</span>-<a name="line-199"></a><span class='comment'>--    - returns : nothing</span>-<a name="line-200"></a><span class='comment'>--</span>-<a name="line-201"></a><span class='comment'>-- see also : 'setSysParamTree', setSysParamInt</span>-<a name="line-202"></a>-<a name="line-203"></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-204"></a><span class='definition'>setSysParam</span> <span class='varid'>name</span> <span class='varid'>val</span>-<a name="line-205"></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-206"></a>-<a name="line-207"></a><span class='comment'>-- |</span>-<a name="line-208"></a><span class='comment'>-- set or change a single integer type system parameter</span>-<a name="line-209"></a><span class='comment'>--</span>-<a name="line-210"></a><span class='comment'>-- see also : 'setSysParam'</span>-<a name="line-211"></a>-<a name="line-212"></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-213"></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-214"></a>-<a name="line-215"></a><span class='comment'>-- |</span>-<a name="line-216"></a><span class='comment'>-- add (or change) all attributes of the document root to the system state</span>-<a name="line-217"></a><span class='comment'>--     - returns : this</span>-<a name="line-218"></a>-<a name="line-219"></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-220"></a><span class='definition'>setSystemParams</span> <span class='varid'>t</span>-<a name="line-221"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-222"></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-223"></a>      <span class='varid'>thisM</span> <span class='varid'>t</span>-<a name="line-224"></a>-<a name="line-225"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-226"></a>-<a name="line-227"></a><span class='comment'>-- |</span>-<a name="line-228"></a><span class='comment'>-- read a system parameter</span>-<a name="line-229"></a><span class='comment'>--</span>-<a name="line-230"></a><span class='comment'>--    * 1.parameter name :  the name of the parameter</span>-<a name="line-231"></a><span class='comment'>--</span>-<a name="line-232"></a><span class='comment'>--    - returns : the list of tres associated with the key, or the empty list for unknown parameters</span>-<a name="line-233"></a>-<a name="line-234"></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-235"></a><span class='definition'>getSysParamTree</span> <span class='varid'>name</span>-<a name="line-236"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-237"></a>      <span class='varid'>s</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysState</span>-<a name="line-238"></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-239"></a>-<a name="line-240"></a><span class='comment'>-- |</span>-<a name="line-241"></a><span class='comment'>-- read a system string parameter</span>-<a name="line-242"></a><span class='comment'>--</span>-<a name="line-243"></a><span class='comment'>--    * 1.parameter name :  the name of the parameter</span>-<a name="line-244"></a><span class='comment'>--</span>-<a name="line-245"></a><span class='comment'>--    - returns : the value, or the empty string for unknown parameters</span>-<a name="line-246"></a>-<a name="line-247"></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-248"></a><span class='definition'>getSysParam</span> <span class='varid'>name</span>-<a name="line-249"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-250"></a>      <span class='varid'>ts</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParamTree</span> <span class='varid'>name</span>-<a name="line-251"></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-252"></a>-<a name="line-253"></a><span class='comment'>-- |</span>-<a name="line-254"></a><span class='comment'>-- read a system parameter or return a default value</span>-<a name="line-255"></a><span class='comment'>--</span>-<a name="line-256"></a><span class='comment'>--    * 1.parameter name :  the name of the parameter</span>-<a name="line-257"></a><span class='comment'>--</span>-<a name="line-258"></a><span class='comment'>--    - 2.parameter default :  the default value</span>-<a name="line-259"></a><span class='comment'>--</span>-<a name="line-260"></a><span class='comment'>--    - returns : the value if found, else the default</span>-<a name="line-261"></a>-<a name="line-262"></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-263"></a><span class='definition'>getSysParamWithDefault</span> <span class='varid'>name</span> <span class='varid'>def</span>-<a name="line-264"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-265"></a>      <span class='varid'>val</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParam</span> <span class='varid'>name</span>-<a name="line-266"></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-267"></a>	       <span class='keyword'>then</span> <span class='varid'>def</span>-<a name="line-268"></a>	       <span class='keyword'>else</span> <span class='varid'>val</span>-<a name="line-269"></a>	     <span class='layout'>)</span>-<a name="line-270"></a>-<a name="line-271"></a><span class='comment'>-- |</span>-<a name="line-272"></a><span class='comment'>-- read an integer system parameter</span>-<a name="line-273"></a><span class='comment'>--</span>-<a name="line-274"></a><span class='comment'>--    * 1.parameter name : </span>-<a name="line-275"></a><span class='comment'>--</span>-<a name="line-276"></a><span class='comment'>--    - 2.parameter default : </span>-<a name="line-277"></a><span class='comment'>--</span>-<a name="line-278"></a><span class='comment'>-- see also : 'getSysParamWithDefault'</span>-<a name="line-279"></a>-<a name="line-280"></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-281"></a><span class='definition'>getSysParamInt</span> <span class='varid'>var</span> <span class='varid'>def</span>-<a name="line-282"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-283"></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-284"></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-285"></a>-<a name="line-286"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-287"></a>-<a name="line-288"></a><span class='comment'>-- |</span>-<a name="line-289"></a><span class='comment'>-- exec a XState command with initial state.</span>-<a name="line-290"></a><span class='comment'>--</span>-<a name="line-291"></a><span class='comment'>--    * 1.parameter initalState :  the inital user state</span>-<a name="line-292"></a><span class='comment'>--</span>-<a name="line-293"></a><span class='comment'>--    - 2.parameter cmd :  the command</span>-<a name="line-294"></a><span class='comment'>--</span>-<a name="line-295"></a><span class='comment'>--    - returns : the i\/o command with result and user state</span>-<a name="line-296"></a>-<a name="line-297"></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-298"></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-299"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-300"></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-301"></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-302"></a>-<a name="line-303"></a><span class='comment'>-- |</span>-<a name="line-304"></a><span class='comment'>-- exec a XState command with initial user state.</span>-<a name="line-305"></a><span class='comment'>-- ignore final user state.</span>-<a name="line-306"></a><span class='comment'>-- like run0, but ignore the resulting user state</span>-<a name="line-307"></a>-<a name="line-308"></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-309"></a><span class='definition'>run</span> <span class='varid'>initialUserState</span> <span class='varid'>cmd</span>-<a name="line-310"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-311"></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-312"></a>      <span class='varid'>return</span> <span class='varid'>res</span>-<a name="line-313"></a>-<a name="line-314"></a><span class='comment'>-- |</span>-<a name="line-315"></a><span class='comment'>-- exec a XState command in th IO monad.</span>-<a name="line-316"></a><span class='comment'>-- like run with the empty state ().</span>-<a name="line-317"></a>-<a name="line-318"></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-319"></a><span class='definition'>run'</span>		<span class='keyglyph'>=</span> <span class='varid'>run</span> <span class='conid'>()</span>-<a name="line-320"></a>-<a name="line-321"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-322"></a>-<a name="line-323"></a><span class='comment'>-- |</span>-<a name="line-324"></a><span class='comment'>-- run a command in a new user state.</span>-<a name="line-325"></a><span class='comment'>-- chain the system state part,</span>-<a name="line-326"></a><span class='comment'>-- init new system state with the current one, run the command and</span>-<a name="line-327"></a><span class='comment'>-- update the old system state with the resulting new system state</span>-<a name="line-328"></a><span class='comment'>--</span>-<a name="line-329"></a><span class='comment'>--    * 1.parameter initialUserState :  the initial user state</span>-<a name="line-330"></a><span class='comment'>--</span>-<a name="line-331"></a><span class='comment'>--    - 2.parameter cmd :  the command</span>-<a name="line-332"></a><span class='comment'>--</span>-<a name="line-333"></a><span class='comment'>--    - returns : the result of executing cmd and the final state</span>-<a name="line-334"></a>-<a name="line-335"></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-336"></a><span class='definition'>chain'</span> <span class='varid'>initialUserState1</span> <span class='varid'>cmd1</span>-<a name="line-337"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-338"></a>      <span class='varid'>sysState0</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysState</span>-<a name="line-339"></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-340"></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-341"></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-342"></a>-<a name="line-343"></a><span class='comment'>-- |</span>-<a name="line-344"></a><span class='comment'>-- like chain' but forget the final user state</span>-<a name="line-345"></a><span class='comment'>--</span>-<a name="line-346"></a><span class='comment'>--    * 1.parameter initialUserState :  the initial user state</span>-<a name="line-347"></a><span class='comment'>--</span>-<a name="line-348"></a><span class='comment'>--    - 2.parameter cmd :  the command</span>-<a name="line-349"></a><span class='comment'>--</span>-<a name="line-350"></a><span class='comment'>--    - returns : only the result of executing cmd</span>-<a name="line-351"></a>-<a name="line-352"></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-353"></a><span class='definition'>chain</span> <span class='varid'>initialUserState1</span> <span class='varid'>cmd1</span>-<a name="line-354"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-355"></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-356"></a>      <span class='varid'>return</span> <span class='varid'>res</span>-<a name="line-357"></a>-<a name="line-358"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-359"></a><span class='comment'>--</span>-<a name="line-360"></a><span class='comment'>-- lift functions</span>-<a name="line-361"></a>-<a name="line-362"></a><span class='comment'>-- |</span>-<a name="line-363"></a><span class='comment'>-- lift a XmlFilter to a XmlStateFilter filter</span>-<a name="line-364"></a><span class='comment'>-- issue all error nodes as error messages</span>-<a name="line-365"></a><span class='comment'>-- and remove the error nodes from the result</span>-<a name="line-366"></a><span class='comment'>--</span>-<a name="line-367"></a><span class='comment'>--    * 1.parameter f :  the filter</span>-<a name="line-368"></a><span class='comment'>--</span>-<a name="line-369"></a><span class='comment'>--    - returns : the filter running in the state monad</span>-<a name="line-370"></a><span class='comment'>--</span>-<a name="line-371"></a><span class='comment'>--		  all errors are filtered from the result and issued on stderr</span>-<a name="line-372"></a>-<a name="line-373"></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-374"></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-375"></a>-<a name="line-376"></a><span class='comment'>-- |</span>-<a name="line-377"></a><span class='comment'>-- lift an I\/O command</span>-<a name="line-378"></a><span class='comment'>--</span>-<a name="line-379"></a><span class='comment'>--    * 1.parameter cmd :  the i\/o command</span>-<a name="line-380"></a><span class='comment'>--</span>-<a name="line-381"></a><span class='comment'>--    - returns : the i\/o command lifted to the XML state monad</span>-<a name="line-382"></a>-<a name="line-383"></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-384"></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-385"></a>-<a name="line-386"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-387"></a><span class='comment'>--</span>-<a name="line-388"></a>-<a name="line-389"></a><span class='comment'>-- |</span>-<a name="line-390"></a><span class='comment'>-- set the trace level.</span>-<a name="line-391"></a><span class='comment'>--</span>-<a name="line-392"></a><span class='comment'>-- convention:</span>-<a name="line-393"></a><span class='comment'>--</span>-<a name="line-394"></a><span class='comment'>-- 0: no trace output (default)</span>-<a name="line-395"></a><span class='comment'>--</span>-<a name="line-396"></a><span class='comment'>-- 1: trace important computation steps, e.g. accessing a document</span>-<a name="line-397"></a><span class='comment'>--</span>-<a name="line-398"></a><span class='comment'>-- 2: trace small computation steps</span>-<a name="line-399"></a><span class='comment'>--</span>-<a name="line-400"></a><span class='comment'>-- 3: output an intermediate result XmlTree in XML source format</span>-<a name="line-401"></a><span class='comment'>--</span>-<a name="line-402"></a><span class='comment'>-- 4: output an intermediate result XmlTree in tree representation</span>-<a name="line-403"></a><span class='comment'>--</span>-<a name="line-404"></a><span class='comment'>--    * 1.parameter level :  the trace level</span>-<a name="line-405"></a><span class='comment'>--</span>-<a name="line-406"></a><span class='comment'>--    - returns : nothing</span>-<a name="line-407"></a>-<a name="line-408"></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-409"></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-410"></a>-<a name="line-411"></a><span class='comment'>-- |</span>-<a name="line-412"></a><span class='comment'>-- get the current trace level.</span>-<a name="line-413"></a><span class='comment'>--</span>-<a name="line-414"></a><span class='comment'>--    - returns : the current trace level</span>-<a name="line-415"></a>-<a name="line-416"></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-417"></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-418"></a>-<a name="line-419"></a><span class='comment'>-- |</span>-<a name="line-420"></a><span class='comment'>-- trace output for arbitray commands.</span>-<a name="line-421"></a><span class='comment'>--</span>-<a name="line-422"></a><span class='comment'>--    * 1.parameter level :  the trace level,</span>-<a name="line-423"></a><span class='comment'>--			  for which the command will be execuded</span>-<a name="line-424"></a><span class='comment'>--			  if level \&lt;= current trace level</span>-<a name="line-425"></a><span class='comment'>--</span>-<a name="line-426"></a><span class='comment'>--    - 2.parameter cmd :  the command to be executed</span>-<a name="line-427"></a><span class='comment'>--</span>-<a name="line-428"></a><span class='comment'>--    - returns : nothing</span>-<a name="line-429"></a>-<a name="line-430"></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-431"></a><span class='definition'>traceCmd</span> <span class='varid'>level</span> <span class='varid'>cmd</span>-<a name="line-432"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-433"></a>      <span class='varid'>trcLevel</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getTraceLevel</span>-<a name="line-434"></a>      <span class='keyword'>if</span> <span class='varid'>level</span> <span class='varop'>&lt;=</span> <span class='varid'>trcLevel</span>-<a name="line-435"></a>        <span class='keyword'>then</span> <span class='keyword'>do</span>-<a name="line-436"></a>	     <span class='keyword'>_</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>cmd</span>-<a name="line-437"></a>	     <span class='varid'>return</span> <span class='conid'>()</span>-<a name="line-438"></a>        <span class='keyword'>else</span> <span class='varid'>return</span> <span class='conid'>()</span>-<a name="line-439"></a>-<a name="line-440"></a><span class='comment'>-- |</span>-<a name="line-441"></a><span class='comment'>-- trace output function for simple text.</span>-<a name="line-442"></a><span class='comment'>--</span>-<a name="line-443"></a><span class='comment'>--    * 1.parameter level :  like in traceCmd</span>-<a name="line-444"></a><span class='comment'>--</span>-<a name="line-445"></a><span class='comment'>--    - 2.parameter str :  the test</span>-<a name="line-446"></a><span class='comment'>--</span>-<a name="line-447"></a><span class='comment'>--    - returns : nothing</span>-<a name="line-448"></a>-<a name="line-449"></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-450"></a><span class='definition'>trace</span> <span class='varid'>level</span> <span class='varid'>str</span>-<a name="line-451"></a>    <span class='keyglyph'>=</span> <span class='varid'>traceCmd</span> <span class='varid'>level</span>-<a name="line-452"></a>      <span class='varop'>$</span> <span class='keyword'>do</span>-<a name="line-453"></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-454"></a>-<a name="line-455"></a><span class='comment'>-- |</span>-<a name="line-456"></a><span class='comment'>-- trace output of the user part of the program state.</span>-<a name="line-457"></a><span class='comment'>--</span>-<a name="line-458"></a><span class='comment'>--    * 1.parameter level :  like in traceCmd</span>-<a name="line-459"></a><span class='comment'>--</span>-<a name="line-460"></a><span class='comment'>--    - 2.parameter showFct :  the toString function</span>-<a name="line-461"></a><span class='comment'>--</span>-<a name="line-462"></a><span class='comment'>--    - returns : nothing</span>-<a name="line-463"></a>-<a name="line-464"></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-465"></a><span class='definition'>traceState</span> <span class='varid'>level</span> <span class='varid'>fct</span>-<a name="line-466"></a>    <span class='keyglyph'>=</span> <span class='varid'>traceCmd</span> <span class='varid'>level</span>-<a name="line-467"></a>      <span class='varop'>$</span> <span class='keyword'>do</span>-<a name="line-468"></a>	<span class='varid'>s</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getState</span>-<a name="line-469"></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-470"></a>-<a name="line-471"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-472"></a><span class='comment'>--</span>-<a name="line-473"></a><span class='comment'>-- error functions</span>-<a name="line-474"></a>-<a name="line-475"></a><span class='comment'>-- |</span>-<a name="line-476"></a><span class='comment'>-- filter to reset the state attribute 'a_status'</span>-<a name="line-477"></a><span class='comment'>--    - returns : this</span>-<a name="line-478"></a>-<a name="line-479"></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-480"></a><span class='definition'>clearStatus</span> <span class='varid'>t</span>-<a name="line-481"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-482"></a>      <span class='varid'>setSysParamInt</span> <span class='varid'>a_status</span> <span class='varid'>c_ok</span>-<a name="line-483"></a>      <span class='varid'>thisM</span> <span class='varid'>t</span>-<a name="line-484"></a>-<a name="line-485"></a><span class='comment'>-- |</span>-<a name="line-486"></a><span class='comment'>-- report an error message.</span>-<a name="line-487"></a><span class='comment'>--</span>-<a name="line-488"></a><span class='comment'>--    - returns : if the input tree n represents an error, @res = []@</span>-<a name="line-489"></a><span class='comment'>--		  and the error is processed by the errror handler filter (default: error is issued on stderr)</span>-<a name="line-490"></a><span class='comment'>--		  else @res = [n]@</span>-<a name="line-491"></a><span class='comment'>--</span>-<a name="line-492"></a><span class='comment'>-- see also : 'issueErr'</span>-<a name="line-493"></a>-<a name="line-494"></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-495"></a><span class='definition'>issueError</span>-<a name="line-496"></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-497"></a>      <span class='varop'>`whenM`</span>-<a name="line-498"></a>      <span class='varid'>isXError</span>-<a name="line-499"></a>-<a name="line-500"></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-501"></a><span class='definition'>errorMsgHandler</span>-<a name="line-502"></a>    <span class='keyglyph'>=</span> <span class='varid'>performAction</span>-<a name="line-503"></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-504"></a>			   <span class='varid'>ehf</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysErrorHandler</span>-<a name="line-505"></a>			   <span class='varid'>ehf</span> <span class='varid'>t</span>-<a name="line-506"></a>			   <span class='varid'>return</span> <span class='conid'>()</span>-<a name="line-507"></a>			 <span class='layout'>)</span>-<a name="line-508"></a>      <span class='layout'>)</span>-<a name="line-509"></a>-<a name="line-510"></a><span class='comment'>-- |</span>-<a name="line-511"></a><span class='comment'>-- set the error level in system state</span>-<a name="line-512"></a>-<a name="line-513"></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-514"></a><span class='definition'>setErrorMsgLevel</span>-<a name="line-515"></a>    <span class='keyglyph'>=</span> <span class='varid'>performAction</span>-<a name="line-516"></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-517"></a>	<span class='keyword'>do</span>-<a name="line-518"></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-519"></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-520"></a>      <span class='layout'>)</span>-<a name="line-521"></a>-<a name="line-522"></a><span class='comment'>-- |</span>-<a name="line-523"></a><span class='comment'>-- default error handler for writing errors to stderr</span>-<a name="line-524"></a>-<a name="line-525"></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-526"></a><span class='definition'>errorMsgToStderr</span>-<a name="line-527"></a>    <span class='keyglyph'>=</span> <span class='varid'>performAction</span>-<a name="line-528"></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-529"></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-530"></a>      <span class='layout'>)</span>-<a name="line-531"></a>-<a name="line-532"></a><span class='comment'>-- |</span>-<a name="line-533"></a><span class='comment'>-- error message handler for collecting all error messages</span>-<a name="line-534"></a><span class='comment'>-- all messages are stored under attribute 'a_error_log'</span>-<a name="line-535"></a><span class='comment'>-- they can be read with @getSysParamTree a_error_log@ or by</span>-<a name="line-536"></a><span class='comment'>-- applying the filter 'getErrorMsg' to the root node</span>-<a name="line-537"></a>-<a name="line-538"></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-539"></a><span class='definition'>errorMsgLogging</span>-<a name="line-540"></a>    <span class='keyglyph'>=</span> <span class='varid'>performAction</span>-<a name="line-541"></a>      <span class='layout'>(</span> <span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span>-<a name="line-542"></a>	<span class='keyword'>do</span>-<a name="line-543"></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-544"></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-545"></a>      <span class='layout'>)</span>-<a name="line-546"></a>-<a name="line-547"></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-548"></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-549"></a>-<a name="line-550"></a><span class='comment'>-- |</span>-<a name="line-551"></a><span class='comment'>-- the filter for reading all collected error mesages</span>-<a name="line-552"></a><span class='comment'>--</span>-<a name="line-553"></a><span class='comment'>-- result is the list of error messages, the input tree is ignored</span>-<a name="line-554"></a>-<a name="line-555"></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-556"></a><span class='definition'>getErrorMsg</span> <span class='sel'>_t</span>-<a name="line-557"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-558"></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-559"></a>      <span class='varid'>setSysParamTree</span> <span class='varid'>a_error_log</span> <span class='conid'>[]</span>-<a name="line-560"></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-561"></a>-<a name="line-562"></a><span class='comment'>-- |</span>-<a name="line-563"></a><span class='comment'>-- error level translation</span>-<a name="line-564"></a><span class='comment'>-- 'c_warn' (1) : warning,</span>-<a name="line-565"></a><span class='comment'>-- 'c_err' (2): error (e.g. parse error, validation error, ...),</span>-<a name="line-566"></a><span class='comment'>-- 'c_fatal' (3) : fatal error (document access error, internal error, ...)</span>-<a name="line-567"></a>-<a name="line-568"></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-569"></a><span class='definition'>errClass</span> <span class='varid'>l</span>-<a name="line-570"></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-571"></a>      <span class='keyword'>where</span>-<a name="line-572"></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-573"></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-574"></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-575"></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-576"></a>		  <span class='keyglyph'>]</span>-<a name="line-577"></a>-<a name="line-578"></a><span class='comment'>-- |</span>-<a name="line-579"></a><span class='comment'>-- short cut for issuing a warning</span>-<a name="line-580"></a><span class='comment'>--</span>-<a name="line-581"></a><span class='comment'>-- see also : 'issueError', 'issueErr'</span>-<a name="line-582"></a>-<a name="line-583"></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-584"></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-585"></a>-<a name="line-586"></a><span class='comment'>-- |</span>-<a name="line-587"></a><span class='comment'>-- short cut for issuing an error</span>-<a name="line-588"></a><span class='comment'>--</span>-<a name="line-589"></a><span class='comment'>-- see also : 'issueError'</span>-<a name="line-590"></a>-<a name="line-591"></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-592"></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-593"></a>-<a name="line-594"></a><span class='comment'>-- |</span>-<a name="line-595"></a><span class='comment'>-- short cut for issuing a fatal error</span>-<a name="line-596"></a><span class='comment'>--</span>-<a name="line-597"></a><span class='comment'>-- see also : 'issueError', 'issueErr'</span>-<a name="line-598"></a>-<a name="line-599"></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-600"></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-601"></a>-<a name="line-602"></a>-<a name="line-603"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-604"></a><span class='comment'>--</span>-<a name="line-605"></a><span class='comment'>-- issue an error, add the error to the document root tree</span>-<a name="line-606"></a><span class='comment'>-- and return the tree</span>-<a name="line-607"></a>-<a name="line-608"></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-609"></a><span class='definition'>addFatal</span> <span class='varid'>msg</span>-<a name="line-610"></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-611"></a>	      <span class='varop'>+++</span>-<a name="line-612"></a>	      <span class='varid'>setStatus</span> <span class='varid'>c_fatal</span> <span class='str'>"accessing documents"</span>-<a name="line-613"></a>	    <span class='layout'>)</span>-<a name="line-614"></a>-<a name="line-615"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-616"></a>-<a name="line-617"></a><span class='comment'>-- |</span>-<a name="line-618"></a><span class='comment'>-- checks the value of the attribute 'a_status' in a document root.</span>-<a name="line-619"></a><span class='comment'>-- if it contains a value greater or equal to 'c_err', an error with error message</span>-<a name="line-620"></a><span class='comment'>-- stored in attribute 'a_module' is issued and the filter acts as the 'noneM' filter</span>-<a name="line-621"></a><span class='comment'>-- else its the 'thisM' filter</span>-<a name="line-622"></a>-<a name="line-623"></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-624"></a><span class='definition'>checkStatus</span> <span class='varid'>t</span>-<a name="line-625"></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-626"></a>      <span class='keyword'>then</span> <span class='keyword'>do</span>-<a name="line-627"></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-628"></a>	   <span class='varid'>noneM</span> <span class='varid'>t</span>-<a name="line-629"></a>	<span class='keyword'>else</span>-<a name="line-630"></a>           <span class='varid'>thisM</span> <span class='varid'>t</span>-<a name="line-631"></a>    <span class='keyword'>where</span>-<a name="line-632"></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-633"></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-634"></a>-<a name="line-635"></a><span class='comment'>-- |</span>-<a name="line-636"></a><span class='comment'>-- add the error level and the module where the error occured</span>-<a name="line-637"></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-638"></a>-<a name="line-639"></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-640"></a><span class='definition'>setStatus</span> <span class='varid'>level</span> <span class='varid'>msg</span>-<a name="line-641"></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-642"></a>	<span class='varop'>.&gt;</span>-<a name="line-643"></a>	<span class='varid'>addAttr</span> <span class='varid'>a_module</span> <span class='varid'>msg</span>-<a name="line-644"></a>	<span class='varop'>.&gt;</span>-<a name="line-645"></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-646"></a>	  <span class='keyword'>then</span> <span class='varid'>replaceChildren</span> <span class='conid'>[]</span>-<a name="line-647"></a>	  <span class='keyword'>else</span> <span class='varid'>this</span>-<a name="line-648"></a>	<span class='layout'>)</span>-<a name="line-649"></a>      <span class='layout'>)</span>-<a name="line-650"></a>      <span class='varop'>`when`</span> <span class='varid'>isRoot</span>-<a name="line-651"></a>-<a name="line-652"></a><span class='comment'>-- |</span>-<a name="line-653"></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-654"></a>-<a name="line-655"></a><a name="statusOk"></a><span class='definition'>statusOk</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-656"></a><span class='definition'>statusOk</span>-<a name="line-657"></a>    <span class='keyglyph'>=</span> <span class='varid'>isRoot</span>-<a name="line-658"></a>      <span class='varop'>.&gt;</span>-<a name="line-659"></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-660"></a><span class='comment'>-- |</span>-<a name="line-661"></a><span class='comment'>-- check whether the error level attribute in the system state</span>-<a name="line-662"></a><span class='comment'>-- is set to error, in this case the children of the document root are</span>-<a name="line-663"></a><span class='comment'>-- removed and error info is added as attributes with 'setStatus'</span>-<a name="line-664"></a><span class='comment'>-- else nothing is changed</span>-<a name="line-665"></a>-<a name="line-666"></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-667"></a><span class='definition'>checkResult</span> <span class='varid'>msg</span> <span class='varid'>t</span>-<a name="line-668"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-669"></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-670"></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-671"></a>	<span class='keyword'>then</span> <span class='varid'>thisM</span>-<a name="line-672"></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-673"></a>        <span class='layout'>)</span> <span class='varid'>t</span>-<a name="line-674"></a>-<a name="line-675"></a><span class='comment'>-- |</span>-<a name="line-676"></a><span class='comment'>-- monadic filter for processing the attribute list of a tag.</span>-<a name="line-677"></a><span class='comment'>-- for other trees this filter acts like 'noneM'</span>-<a name="line-678"></a><span class='comment'>--</span>-<a name="line-679"></a><span class='comment'>-- see also : 'processAttr', 'processAttrl'</span>-<a name="line-680"></a>-<a name="line-681"></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-682"></a><span class='definition'>processAttrM</span> <span class='varid'>f</span> <span class='varid'>t</span>-<a name="line-683"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-684"></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-685"></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-686"></a>    <span class='keyword'>where</span>-<a name="line-687"></a>    <span class='varid'>al</span> <span class='keyglyph'>=</span> <span class='varid'>getAttrl</span> <span class='varid'>t</span>-<a name="line-688"></a>-<a name="line-689"></a><span class='comment'>-- ------------------------------------------------------------</span>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-DOM.html
@@ -1,38 +0,0 @@-<!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'>-- Version : $Id: DOM.hs,v 1.2 2006/11/12 14:52:59 hxml Exp $</span>-<a name="line-5"></a><span class='comment'>--</span>-<a name="line-6"></a><span class='comment'>--</span>-<a name="line-7"></a><span class='comment'>-- export of all basic datatypes and functions of the toolbox DOM.</span>-<a name="line-8"></a><span class='comment'>--</span>-<a name="line-9"></a>-<a name="line-10"></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-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'>XmlTree</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'>XmlState</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'>DOM</span><span class='varop'>.</span><span class='conid'>EditFilters</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'>DOM</span><span class='varop'>.</span><span class='conid'>FormatXmlTree</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'>Namespace</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'>DOM</span><span class='varop'>.</span><span class='conid'>XmlOptions</span>-<a name="line-17"></a>    <span class='layout'>)</span>-<a name="line-18"></a><span class='keyword'>where</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'>XmlTree</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'>XmlState</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'>DOM</span><span class='varop'>.</span><span class='conid'>EditFilters</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'>DOM</span><span class='varop'>.</span><span class='conid'>FormatXmlTree</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'>DOM</span><span class='varop'>.</span><span class='conid'>Namespace</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'>XmlOptions</span>-<a name="line-26"></a>-<a name="line-27"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-28"></a>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-IO-GetHTTPCurl.html
@@ -1,179 +0,0 @@-<!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'>-- GET for http access with curl</span>-<a name="line-4"></a><span class='comment'>--</span>-<a name="line-5"></a><span class='comment'>-- Version : $Id: GetHTTPCurl.hs,v 1.3 2005/04/14 12:52:52 hxml Exp $</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'>IO</span><span class='varop'>.</span><span class='conid'>GetHTTPCurl</span>-<a name="line-8"></a>    <span class='layout'>(</span> <span class='varid'>getCont</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'>XmlKeywords</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> <span class='keyword'>as</span> <span class='conid'>Parsec</span> <span class='layout'>(</span><span class='varid'>try</span><span class='layout'>)</span>	<span class='comment'>-- try</span>-<a name="line-34"></a>-<a name="line-35"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>PipeOpen</span>-<a name="line-36"></a>    <span class='layout'>(</span> <span class='varid'>popen</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'>Data</span><span class='varop'>.</span><span class='conid'>Char</span>-<a name="line-40"></a>    <span class='layout'>(</span> <span class='varid'>toLower</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'>System</span><span class='varop'>.</span><span class='conid'>IO</span>-<a name="line-44"></a>-<a name="line-45"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-46"></a><span class='comment'>--</span>-<a name="line-47"></a><span class='comment'>-- the http protocol handler implemented by calling external program curl</span>-<a name="line-48"></a>-<a name="line-49"></a><a name="getCont"></a><span class='definition'>getCont</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> <span class='keyglyph'>-&gt;</span> <span class='conid'>IO</span> <span class='layout'>(</span><span class='conid'>Either</span> <span class='conid'>String</span> <span class='layout'>(</span><span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='layout'>)</span>-<a name="line-50"></a><span class='definition'>getCont</span> <span class='varid'>curlOptions</span> <span class='varid'>uri</span> <span class='varid'>proxy</span>-<a name="line-51"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-52"></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'>popen</span> <span class='varid'>cmd</span> <span class='varid'>allArgs</span>-<a name="line-53"></a>      <span class='keyword'>if</span> <span class='varid'>rc</span> <span class='varop'>/=</span> <span class='num'>0</span>-<a name="line-54"></a>	 <span class='keyword'>then</span> <span class='varid'>return</span> <span class='varop'>$</span> <span class='conid'>Left</span> <span class='layout'>(</span> <span class='str'>"http error when requesting URI "</span>-<a name="line-55"></a>			      <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>uri</span>-<a name="line-56"></a>			      <span class='varop'>++</span> <span class='str'>": (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-57"></a>			      <span class='varop'>++</span> <span class='varid'>errs</span>-<a name="line-58"></a>			    <span class='layout'>)</span>-<a name="line-59"></a>	 <span class='keyword'>else</span> <span class='keyword'>let</span>-<a name="line-60"></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-61"></a>	      <span class='keyword'>in</span>-<a name="line-62"></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-63"></a>		 <span class='keyword'>then</span> <span class='varid'>return</span> <span class='varop'>$</span> <span class='conid'>Right</span> <span class='layout'>(</span><span class='varid'>al</span><span class='layout'>,</span> <span class='varid'>contents</span><span class='layout'>)</span>-<a name="line-64"></a>		 <span class='keyword'>else</span> <span class='varid'>return</span> <span class='varop'>$</span> <span class='conid'>Left</span> <span class='layout'>(</span> <span class='str'>"http error when accessing URI "</span>-<a name="line-65"></a>				      <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>uri</span>-<a name="line-66"></a>				      <span class='varop'>++</span> <span class='str'>": "</span>-<a name="line-67"></a>				      <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>st</span>-<a name="line-68"></a>				    <span class='layout'>)</span>-<a name="line-69"></a>    <span class='keyword'>where</span>-<a name="line-70"></a>    <span class='varid'>cmd</span>		<span class='keyglyph'>=</span> <span class='str'>"curl"</span>-<a name="line-71"></a>-<a name="line-72"></a>    <span class='varid'>allArgs</span>	<span class='keyglyph'>=</span> <span class='varid'>args</span>-<a name="line-73"></a>		  <span class='varop'>++</span> <span class='varid'>proxyArgs</span> <span class='varid'>proxy</span>-<a name="line-74"></a>		  <span class='varop'>++</span> <span class='varid'>words</span> <span class='varid'>curlOptions</span>-<a name="line-75"></a>-<a name="line-76"></a>    <span class='varid'>args</span> 	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='str'>"--silent"</span>-<a name="line-77"></a>		  <span class='layout'>,</span> <span class='str'>"--show-error"</span>-<a name="line-78"></a>		  <span class='layout'>,</span> <span class='str'>"--dump-header"</span><span class='layout'>,</span> <span class='str'>"-"</span>-<a name="line-79"></a>		  <span class='layout'>,</span> <span class='varid'>uri</span>-<a name="line-80"></a>		  <span class='keyglyph'>]</span>-<a name="line-81"></a>    <span class='varid'>proxyArgs</span> <span class='str'>""</span>-<a name="line-82"></a>		<span class='keyglyph'>=</span> <span class='conid'>[]</span>-<a name="line-83"></a>    <span class='varid'>proxyArgs</span> <span class='varid'>prx</span>-<a name="line-84"></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-85"></a>-<a name="line-86"></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='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span>-<a name="line-87"></a><span class='definition'>parseResponse</span> <span class='varid'>inp</span>-<a name="line-88"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>either</span>-<a name="line-89"></a>          <span class='layout'>(</span> <span class='varid'>const</span> <span class='layout'>(</span><span class='num'>999</span><span class='layout'>,</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='varid'>transferMessage</span><span class='layout'>,</span> <span class='str'>"illegal HTTP response"</span><span class='layout'>)</span><span class='keyglyph'>]</span><span class='layout'>,</span> <span class='varid'>inp</span><span class='layout'>)</span><span class='layout'>)</span>-<a name="line-90"></a>          <span class='varid'>id</span>-<a name="line-91"></a>	<span class='varop'>.</span>-<a name="line-92"></a>	<span class='varid'>parse</span> <span class='varid'>parseHttpResponse</span> <span class='str'>"HTTP Header"</span>-<a name="line-93"></a>      <span class='layout'>)</span> <span class='varid'>inp</span>-<a name="line-94"></a>-<a name="line-95"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-96"></a>-<a name="line-97"></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='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span>-<a name="line-98"></a><span class='definition'>parseHttpResponse</span>-<a name="line-99"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-100"></a>      <span class='varid'>allResponses</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>many1</span> <span class='varid'>parse1Response</span>-<a name="line-101"></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-102"></a>      <span class='varid'>content</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getInput</span>-<a name="line-103"></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-104"></a>    <span class='keyword'>where</span>-<a name="line-105"></a>-<a name="line-106"></a>    <span class='varid'>parse1Response</span>-<a name="line-107"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-108"></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-109"></a>	  <span class='varid'>rhs</span>      <span class='keyglyph'>&lt;-</span> <span class='varid'>parseHeaders</span>-<a name="line-110"></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-111"></a>-<a name="line-112"></a>    <span class='varid'>crlf</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>()</span>-<a name="line-113"></a>    <span class='varid'>crlf</span>-<a name="line-114"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-115"></a>	  <span class='layout'>(</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-116"></a>	  <span class='varid'>return</span> <span class='conid'>()</span>-<a name="line-117"></a>-<a name="line-118"></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='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span><span class='layout'>)</span>-<a name="line-119"></a>    <span class='varid'>parseResp</span>-<a name="line-120"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-121"></a>	  <span class='varid'>vers</span> <span class='keyglyph'>&lt;-</span> <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-122"></a>		    <span class='varid'>http</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>string</span> <span class='str'>"HTTP/"</span>-<a name="line-123"></a>		    <span class='varid'>mav</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>many1</span> <span class='varid'>digit</span>-<a name="line-124"></a>		    <span class='varid'>char</span> <span class='chr'>'.'</span>-<a name="line-125"></a>		    <span class='varid'>miv</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>many1</span> <span class='varid'>digit</span>-<a name="line-126"></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-127"></a>		  <span class='layout'>)</span>-<a name="line-128"></a>	  <span class='varid'>spaces</span>-<a name="line-129"></a>	  <span class='varid'>ds</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>many1</span> <span class='varid'>digit</span>-<a name="line-130"></a>	  <span class='varid'>spaces</span>-<a name="line-131"></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-132"></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-133"></a>		   <span class='keyglyph'>[</span><span class='layout'>(</span><span class='varid'>transferMessage</span><span class='layout'>,</span> <span class='varid'>reason</span><span class='layout'>)</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>transferVersion</span><span class='layout'>,</span> <span class='varid'>vers</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-134"></a>		 <span class='layout'>)</span>-<a name="line-135"></a>-<a name="line-136"></a>    <span class='varid'>parseHeaders</span>	<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-137"></a>    <span class='varid'>parseHeaders</span>-<a name="line-138"></a>	<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-139"></a>	    <span class='varid'>crlf</span>-<a name="line-140"></a>	    <span class='varid'>return</span> <span class='conid'>[]</span>-<a name="line-141"></a>	  <span class='layout'>)</span>-<a name="line-142"></a>	  <span class='varop'>&lt;|&gt;</span>-<a name="line-143"></a>	  <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-144"></a>	    <span class='varid'>header1</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>parse1Header</span>-<a name="line-145"></a>	    <span class='varid'>rest</span>    <span class='keyglyph'>&lt;-</span> <span class='varid'>parseHeaders</span>-<a name="line-146"></a>	    <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>header1</span> <span class='varop'>++</span> <span class='varid'>rest</span><span class='layout'>)</span>-<a name="line-147"></a>	  <span class='layout'>)</span>-<a name="line-148"></a>	  <span class='varop'>&lt;|&gt;</span>-<a name="line-149"></a>	  <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-150"></a>	    <span class='varid'>return</span> <span class='keyglyph'>[</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><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-151"></a>	  <span class='layout'>)</span>-<a name="line-152"></a>-<a name="line-153"></a>    <span class='varid'>parse1Header</span>	<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-154"></a>    <span class='varid'>parse1Header</span>-<a name="line-155"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-156"></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-157"></a>	  <span class='varid'>spaces</span>-<a name="line-158"></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-159"></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-160"></a>	  <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>ct</span> <span class='varop'>++</span> <span class='keyglyph'>[</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><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-161"></a>	<span class='keyword'>where</span>-<a name="line-162"></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='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-163"></a>	<span class='varid'>parseCT</span> <span class='varid'>h</span> <span class='varid'>v</span>-<a name="line-164"></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-165"></a>		<span class='keyglyph'>=</span> <span class='varid'>either</span> <span class='layout'>(</span><span class='varid'>const</span> <span class='conid'>[]</span><span class='layout'>)</span> <span class='varid'>id</span> <span class='varop'>.</span> <span class='varid'>parse</span> <span class='varid'>parseContentType</span> <span class='varid'>h</span> <span class='varop'>$</span> <span class='varid'>v</span>-<a name="line-166"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>-<a name="line-167"></a>		<span class='keyglyph'>=</span> <span class='conid'>[]</span>-<a name="line-168"></a>-<a name="line-169"></a><span class='comment'>-- ------------------------------------------------------------</span>-</pre></body>-</html>
+ doc/hdoc/src/Text-XML-HXT-IO-GetHTTPLibCurl.html view
@@ -0,0 +1,249 @@+<!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'>-- GET for http access with curl</span>+<a name="line-4"></a><span class='comment'>--</span>+<a name="line-5"></a><span class='comment'>-- Version : $Id: GetHTTPCurl.hs,v 1.3 2005/04/14 12:52:52 hxml Exp $</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'>IO</span><span class='varop'>.</span><span class='conid'>GetHTTPLibCurl</span>+<a name="line-8"></a>    <span class='layout'>(</span> <span class='varid'>getCont</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'>Control</span><span class='varop'>.</span><span class='conid'>Arrow</span>+<a name="line-14"></a>    <span class='layout'>(</span> <span class='varid'>first</span> <span class='layout'>)</span>+<a name="line-15"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Concurrent</span><span class='varop'>.</span><span class='conid'>MVar</span>+<a name="line-16"></a><span class='keyword'>import</span> <span class='conid'>Control</span><span class='varop'>.</span><span class='conid'>Monad</span>+<a name="line-17"></a>    <span class='layout'>(</span> <span class='varid'>when</span> <span class='layout'>)</span>+<a name="line-18"></a>+<a name="line-19"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Char</span>+<a name="line-20"></a>    <span class='layout'>(</span> <span class='varid'>isDigit</span>+<a name="line-21"></a>    <span class='layout'>,</span> <span class='varid'>toLower</span>+<a name="line-22"></a>    <span class='layout'>)</span>+<a name="line-23"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>List</span>+<a name="line-24"></a>    <span class='layout'>(</span> <span class='varid'>isPrefixOf</span>+<a name="line-25"></a>    <span class='layout'>)</span>+<a name="line-26"></a>+<a name="line-27"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>Curl</span>+<a name="line-28"></a>+<a name="line-29"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>IO</span>+<a name="line-30"></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'>Unsafe</span>+<a name="line-31"></a>    <span class='layout'>(</span> <span class='varid'>unsafePerformIO</span>+<a name="line-32"></a>    <span class='layout'>)</span>+<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'>ParserCombinators</span><span class='varop'>.</span><span class='conid'>Parsec</span>+<a name="line-35"></a>    <span class='layout'>(</span> <span class='varid'>parse</span>+<a name="line-36"></a>    <span class='layout'>)</span>+<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'>DOM</span><span class='varop'>.</span><span class='conid'>XmlKeywords</span>+<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'>XmlOptions</span>+<a name="line-39"></a>    <span class='layout'>(</span> <span class='varid'>isTrueValue</span>+<a name="line-40"></a>    <span class='layout'>)</span>+<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'>ProtocolHandlerUtil</span>+<a name="line-42"></a>    <span class='layout'>(</span> <span class='varid'>parseContentType</span>+<a name="line-43"></a>    <span class='layout'>)</span>+<a name="line-44"></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'>Version</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 global flag for initializing curl in the 1. call</span>+<a name="line-49"></a>+<a name="line-50"></a><a name="isInitCurl"></a><span class='definition'>isInitCurl</span>	<span class='keyglyph'>::</span> <span class='conid'>MVar</span> <span class='conid'>Bool</span>+<a name="line-51"></a><span class='definition'>isInitCurl</span>	<span class='keyglyph'>=</span> <span class='varid'>unsafePerformIO</span> <span class='varop'>$</span> <span class='varid'>newMVar</span> <span class='conid'>False</span>+<a name="line-52"></a>+<a name="line-53"></a><a name="initCurl"></a><span class='definition'>initCurl</span>	<span class='keyglyph'>::</span> <span class='conid'>IO</span> <span class='conid'>()</span>+<a name="line-54"></a><span class='definition'>initCurl</span>+<a name="line-55"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-56"></a>      <span class='varid'>i</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>takeMVar</span> <span class='varid'>isInitCurl</span>+<a name="line-57"></a>      <span class='varid'>when</span> <span class='layout'>(</span><span class='varid'>not</span> <span class='varid'>i</span><span class='layout'>)</span> <span class='layout'>(</span> <span class='keyword'>do</span>+<a name="line-58"></a>		     <span class='varid'>curl_global_init</span> <span class='num'>3</span>+<a name="line-59"></a>		     <span class='varid'>return</span> <span class='conid'>()</span>+<a name="line-60"></a>		   <span class='layout'>)</span>+<a name="line-61"></a>      <span class='varid'>putMVar</span> <span class='varid'>isInitCurl</span> <span class='conid'>True</span>+<a name="line-62"></a>+<a name="line-63"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-64"></a><span class='comment'>--</span>+<a name="line-65"></a><span class='comment'>-- the http protocol handler implemented by calling libcurl</span>+<a name="line-66"></a><span class='comment'>-- (&lt;<a href="http://curl.haxx.se/">http://curl.haxx.se/</a>&gt;)</span>+<a name="line-67"></a><span class='comment'>-- via the curl binding</span>+<a name="line-68"></a><span class='comment'>-- &lt;<a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/curl">http://hackage.haskell.org/cgi-bin/hackage-scripts/package/curl</a>&gt;</span>+<a name="line-69"></a><span class='comment'>-- This function tries to support mostly all curl options concerning HTTP requests.</span>+<a name="line-70"></a><span class='comment'>-- The naming convetion is as follows: A curl option must be prefixed by the string</span>+<a name="line-71"></a><span class='comment'>-- \"curl\" and then written exactly as described in the curl man page</span>+<a name="line-72"></a><span class='comment'>-- (&lt;<a href="http://curl.haxx.se/docs/manpage.html">http://curl.haxx.se/docs/manpage.html</a>&gt;).</span>+<a name="line-73"></a><span class='comment'>-- Example:</span>+<a name="line-74"></a><span class='comment'>--</span>+<a name="line-75"></a><span class='comment'>-- &gt; getCont [("curl--user-agent","My first HXT app"),("curl-e","<a href="http://the.referer.url/">http://the.referer.url/</a>")] "<a href="http://...">http://...</a>"</span>+<a name="line-76"></a><span class='comment'>--</span>+<a name="line-77"></a><span class='comment'>-- will set the user agent and the referer URL for this request.</span>+<a name="line-78"></a>+<a name="line-79"></a><a name="getCont"></a><span class='definition'>getCont</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'>String</span><span class='layout'>)</span><span class='keyglyph'>]</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'>Either</span> <span class='conid'>String</span> <span class='layout'>(</span><span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='layout'>)</span>+<a name="line-80"></a><span class='definition'>getCont</span> <span class='varid'>options</span> <span class='varid'>uri</span> <span class='comment'>-- curlOptions uri proxy</span>+<a name="line-81"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-82"></a>      <span class='varid'>initCurl</span>+<a name="line-83"></a>      <span class='varid'>resp</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>curlGetResponse</span> <span class='varid'>uri</span> <span class='varid'>curlOptions</span>+<a name="line-84"></a>      <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>evalResponse</span> <span class='varid'>resp</span>+<a name="line-85"></a>    <span class='keyword'>where</span>+<a name="line-86"></a>    <span class='varid'>curlOptions</span> <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='layout'>(</span><span class='varid'>uncurry</span> <span class='varid'>copt</span><span class='layout'>)</span> <span class='varid'>options</span> <span class='varop'>++</span> <span class='varid'>defaultOptions</span>+<a name="line-87"></a>    <span class='varid'>defaultOptions</span>+<a name="line-88"></a>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='conid'>CurlFailOnError</span> <span class='conid'>False</span>+<a name="line-89"></a>	  <span class='layout'>,</span> <span class='conid'>CurlHeader</span> <span class='conid'>True</span>+<a name="line-90"></a>	  <span class='layout'>,</span> <span class='conid'>CurlNoProgress</span> <span class='conid'>True</span>+<a name="line-91"></a>	  <span class='layout'>,</span> <span class='conid'>CurlFollowLocation</span> <span class='conid'>True</span>+<a name="line-92"></a>	  <span class='layout'>,</span> <span class='conid'>CurlUserAgent</span> <span class='layout'>(</span><span class='str'>"hxt/"</span> <span class='varop'>++</span> <span class='varid'>hxt_version</span> <span class='varop'>++</span> <span class='str'>" via libcurl"</span><span class='layout'>)</span>+<a name="line-93"></a>	  <span class='keyglyph'>]</span>+<a name="line-94"></a>    <span class='varid'>evalResponse</span> <span class='varid'>r</span>+<a name="line-95"></a>	<span class='keyglyph'>|</span> <span class='varid'>rc</span> <span class='varop'>/=</span> <span class='conid'>CurlOK</span>+<a name="line-96"></a>	    <span class='keyglyph'>=</span> <span class='conid'>Left</span> <span class='layout'>(</span> <span class='str'>"http error when requesting URI "</span>+<a name="line-97"></a>		     <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>uri</span>+<a name="line-98"></a>		     <span class='varop'>++</span> <span class='str'>": (curl return code="</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-99"></a>		   <span class='layout'>)</span>+<a name="line-100"></a>	<span class='keyglyph'>|</span> <span class='varid'>rs</span> <span class='varop'>&lt;</span> <span class='num'>200</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>rs</span> <span class='varop'>&gt;=</span> <span class='num'>300</span>+<a name="line-101"></a>	    <span class='keyglyph'>=</span> <span class='conid'>Left</span> <span class='layout'>(</span> <span class='str'>"http error when accessing URI "</span>+<a name="line-102"></a>		     <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>uri</span>+<a name="line-103"></a>		     <span class='varop'>++</span> <span class='str'>": "</span>+<a name="line-104"></a>		     <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>rsl</span>+<a name="line-105"></a>		   <span class='layout'>)</span>+<a name="line-106"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>+<a name="line-107"></a>	    <span class='keyglyph'>=</span> <span class='conid'>Right</span> <span class='layout'>(</span> <span class='varid'>contentT</span> <span class='varop'>++</span> <span class='varid'>headers</span><span class='layout'>,</span> <span class='varid'>respBody</span> <span class='varid'>r</span>+<a name="line-108"></a>		    <span class='layout'>)</span>+<a name="line-109"></a>	<span class='keyword'>where</span>+<a name="line-110"></a>	<span class='varid'>headers</span>+<a name="line-111"></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'>v</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>httpPrefix</span> <span class='varop'>++</span> <span class='varid'>k</span><span class='layout'>,</span> <span class='varid'>v</span><span class='layout'>)</span><span class='layout'>)</span> <span class='varid'>rsh</span>+<a name="line-112"></a>	      <span class='varop'>++</span> <span class='varid'>statusLine</span> <span class='layout'>(</span><span class='varid'>words</span> <span class='varid'>rsl</span><span class='layout'>)</span>+<a name="line-113"></a>+<a name="line-114"></a>	<span class='varid'>contentT</span>+<a name="line-115"></a>	    <span class='keyglyph'>=</span> <span class='varid'>concat</span>+<a name="line-116"></a>	      <span class='varop'>.</span> <span class='varid'>map</span> <span class='layout'>(</span> <span class='varid'>either</span> <span class='layout'>(</span><span class='varid'>const</span> <span class='conid'>[]</span><span class='layout'>)</span> <span class='varid'>id</span>+<a name="line-117"></a>		      <span class='varop'>.</span> <span class='varid'>parse</span> <span class='varid'>parseContentType</span> <span class='str'>""</span>+<a name="line-118"></a>		    <span class='layout'>)</span>+<a name="line-119"></a>	      <span class='varop'>.</span> <span class='varid'>map</span> <span class='varid'>snd</span>+<a name="line-120"></a>	      <span class='varop'>.</span> <span class='varid'>take</span> <span class='num'>1</span>+<a name="line-121"></a>              <span class='varop'>.</span> <span class='varid'>filter</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varop'>==</span> <span class='str'>"content-type"</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>fst</span><span class='layout'>)</span>+<a name="line-122"></a>              <span class='varop'>.</span> <span class='varid'>map</span> <span class='layout'>(</span><span class='varid'>first</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='varid'>toLower</span><span class='layout'>)</span><span class='layout'>)</span>+<a name="line-123"></a>              <span class='varop'>$</span> <span class='varid'>rsh</span>+<a name="line-124"></a>+<a name="line-125"></a>	<span class='varid'>statusLine</span> <span class='layout'>(</span><span class='varid'>vers</span> <span class='conop'>:</span> <span class='varid'>code</span> <span class='conop'>:</span> <span class='varid'>msg</span><span class='layout'>)</span>+<a name="line-126"></a>	    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='layout'>(</span><span class='varid'>transferVersion</span><span class='layout'>,</span> <span class='varid'>vers</span><span class='layout'>)</span>+<a name="line-127"></a>	      <span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>transferMessage</span><span class='layout'>,</span> <span class='varid'>unwords</span> <span class='varid'>msg</span><span class='layout'>)</span>+<a name="line-128"></a>	      <span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>transferStatus</span><span class='layout'>,</span> <span class='varid'>code</span><span class='layout'>)</span>+<a name="line-129"></a>	      <span class='keyglyph'>]</span>+<a name="line-130"></a>        <span class='varid'>statusLine</span> <span class='keyword'>_</span>+<a name="line-131"></a>	    <span class='keyglyph'>=</span> <span class='conid'>[]</span>+<a name="line-132"></a>+<a name="line-133"></a>	<span class='varid'>rc</span>  <span class='keyglyph'>=</span> <span class='varid'>respCurlCode</span>    <span class='varid'>r</span>+<a name="line-134"></a>	<span class='varid'>rs</span>  <span class='keyglyph'>=</span> <span class='varid'>respStatus</span>      <span class='varid'>r</span>+<a name="line-135"></a>	<span class='varid'>rsl</span> <span class='keyglyph'>=</span> <span class='varid'>respStatusLine</span>  <span class='varid'>r</span>+<a name="line-136"></a>	<span class='varid'>rsh</span> <span class='keyglyph'>=</span> <span class='varid'>respHeaders</span>     <span class='varid'>r</span>+<a name="line-137"></a>+<a name="line-138"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-139"></a>+<a name="line-140"></a><a name="copt"></a><span class='definition'>copt</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='keyglyph'>[</span><span class='conid'>CurlOption</span><span class='keyglyph'>]</span>+<a name="line-141"></a><span class='definition'>copt</span> <span class='varid'>k</span> <span class='varid'>v</span>+<a name="line-142"></a>    <span class='keyglyph'>|</span> <span class='str'>"curl"</span> <span class='varop'>`isPrefixOf`</span> <span class='varid'>k</span>+<a name="line-143"></a>	<span class='keyglyph'>=</span> <span class='varid'>opt2copt</span> <span class='layout'>(</span><span class='varid'>drop</span> <span class='num'>4</span> <span class='varid'>k</span><span class='layout'>)</span> <span class='varid'>v</span>+<a name="line-144"></a>+<a name="line-145"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>==</span> <span class='varid'>a_proxy</span>+<a name="line-146"></a>	<span class='keyglyph'>=</span> <span class='varid'>opt2copt</span> <span class='varid'>k</span> <span class='varid'>v</span>+<a name="line-147"></a>+<a name="line-148"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>==</span> <span class='varid'>a_options_curl</span>+<a name="line-149"></a>	<span class='keyglyph'>=</span> <span class='varid'>curlOptionString</span> <span class='varid'>v</span>+<a name="line-150"></a>+<a name="line-151"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>+<a name="line-152"></a>	<span class='keyglyph'>=</span> <span class='conid'>[]</span>+<a name="line-153"></a>+<a name="line-154"></a><a name="opt2copt"></a><span class='definition'>opt2copt</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='keyglyph'>[</span><span class='conid'>CurlOption</span><span class='keyglyph'>]</span>+<a name="line-155"></a><span class='definition'>opt2copt</span> <span class='varid'>k</span> <span class='varid'>v</span>+<a name="line-156"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-A"</span><span class='layout'>,</span> <span class='str'>"--user-agent"</span><span class='keyglyph'>]</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlUserAgent</span> <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-157"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-b"</span><span class='layout'>,</span> <span class='str'>"--cookie"</span><span class='keyglyph'>]</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlCookie</span> <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-158"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>==</span> <span class='str'>"--connect-timeout"</span>+<a name="line-159"></a>      <span class='varop'>&amp;&amp;</span>+<a name="line-160"></a>      <span class='varid'>isIntArg</span> <span class='varid'>v</span>			<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlConnectTimeout</span>      <span class='varop'>$</span> <span class='varid'>read</span>    <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-161"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>==</span> <span class='str'>"--crlf"</span>			<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlCRLF</span>                <span class='varop'>$</span> <span class='varid'>isTrue</span>  <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-162"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-d"</span><span class='layout'>,</span> <span class='str'>"--data"</span><span class='keyglyph'>]</span>		<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlPostFields</span>          <span class='varop'>$</span> <span class='varid'>lines</span>   <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-163"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-e"</span><span class='layout'>,</span> <span class='str'>"--referer"</span><span class='keyglyph'>]</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlReferer</span>                       <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-164"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-H"</span><span class='layout'>,</span> <span class='str'>"--header"</span><span class='keyglyph'>]</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlHttpHeaders</span>         <span class='varop'>$</span> <span class='varid'>lines</span>   <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-165"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>==</span> <span class='str'>"--ignore-content-length"</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlIgnoreContentLength</span> <span class='varop'>$</span> <span class='varid'>isTrue</span>  <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-166"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-I"</span><span class='layout'>,</span> <span class='str'>"--head"</span><span class='keyglyph'>]</span>		<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlNoBody</span>              <span class='varop'>$</span> <span class='varid'>isTrue</span>  <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-167"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-L"</span><span class='layout'>,</span> <span class='str'>"--location"</span><span class='keyglyph'>]</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlFollowLocation</span>      <span class='varop'>$</span> <span class='varid'>isTrue</span>  <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-168"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>==</span> <span class='str'>"--max-filesize"</span>+<a name="line-169"></a>      <span class='varop'>&amp;&amp;</span>+<a name="line-170"></a>      <span class='varid'>isIntArg</span> <span class='varid'>v</span>			<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlMaxFileSizeLarge</span>    <span class='varop'>$</span> <span class='varid'>read</span>    <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-171"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-m"</span><span class='layout'>,</span> <span class='str'>"--max-time"</span><span class='keyglyph'>]</span>+<a name="line-172"></a>      <span class='varop'>&amp;&amp;</span>+<a name="line-173"></a>      <span class='varid'>isIntArg</span> <span class='varid'>v</span>			<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlTimeoutMS</span>           <span class='varop'>$</span> <span class='varid'>read</span>    <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-174"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-n"</span><span class='layout'>,</span> <span class='str'>"--netrc"</span><span class='keyglyph'>]</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlNetrcFile</span>                     <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-175"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-R"</span><span class='layout'>,</span> <span class='str'>"--remote-time"</span><span class='keyglyph'>]</span>  <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlFiletime</span>            <span class='varop'>$</span> <span class='varid'>isTrue</span>  <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-176"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-u"</span><span class='layout'>,</span> <span class='str'>"--user"</span><span class='keyglyph'>]</span>		<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlUserPwd</span>                       <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-177"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-U"</span><span class='layout'>,</span> <span class='str'>"--proxy-user"</span><span class='keyglyph'>]</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlProxyUserPwd</span>                  <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-178"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-x"</span><span class='layout'>,</span> <span class='str'>"--proxy"</span><span class='keyglyph'>]</span>        <span class='keyglyph'>=</span>  <span class='varid'>proxyOptions</span>+<a name="line-179"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-X"</span><span class='layout'>,</span> <span class='str'>"--request"</span><span class='keyglyph'>]</span>      <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlCustomRequest</span>                 <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-180"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-y"</span><span class='layout'>,</span> <span class='str'>"--speed-time"</span><span class='keyglyph'>]</span>+<a name="line-181"></a>      <span class='varop'>&amp;&amp;</span>+<a name="line-182"></a>      <span class='varid'>isIntArg</span> <span class='varid'>v</span>                        <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlLowSpeedTime</span>        <span class='varop'>$</span> <span class='varid'>read</span>    <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-183"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-Y"</span><span class='layout'>,</span> <span class='str'>"--speed-limit"</span><span class='keyglyph'>]</span>+<a name="line-184"></a>      <span class='varop'>&amp;&amp;</span>+<a name="line-185"></a>      <span class='varid'>isIntArg</span> <span class='varid'>v</span>			<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlLowSpeed</span>            <span class='varop'>$</span> <span class='varid'>read</span>    <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-186"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-z"</span><span class='layout'>,</span> <span class='str'>"--time-cond"</span><span class='keyglyph'>]</span>	<span class='keyglyph'>=</span>  <span class='varid'>ifModifiedOptions</span>+<a name="line-187"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>==</span> <span class='str'>"--max-redirs"</span>+<a name="line-188"></a>      <span class='varop'>&amp;&amp;</span>+<a name="line-189"></a>      <span class='varid'>isIntArg</span> <span class='varid'>v</span>			<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlMaxRedirs</span>           <span class='varop'>$</span> <span class='varid'>read</span>    <span class='varid'>v</span><span class='keyglyph'>]</span>+<a name="line-190"></a>    <span class='keyglyph'>|</span> <span class='varid'>k</span> <span class='varop'>`elem`</span> <span class='keyglyph'>[</span><span class='str'>"-0"</span><span class='layout'>,</span> <span class='str'>"--http1.0"</span><span class='keyglyph'>]</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlHttpVersion</span>       <span class='conid'>HttpVersion10</span><span class='keyglyph'>]</span>+<a name="line-191"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>				<span class='keyglyph'>=</span> <span class='conid'>[]</span>+<a name="line-192"></a>    <span class='keyword'>where</span>+<a name="line-193"></a>    <span class='varid'>ifModifiedOptions</span>+<a name="line-194"></a>	<span class='keyglyph'>|</span> <span class='str'>"-"</span> <span class='varop'>`isPrefixOf`</span> <span class='varid'>v</span>+<a name="line-195"></a>	  <span class='varop'>&amp;&amp;</span>+<a name="line-196"></a>	  <span class='varid'>isIntArg</span> <span class='varid'>v'</span>			<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlTimeCondition</span> <span class='conid'>TimeCondIfUnmodSince</span>+<a name="line-197"></a>					  <span class='layout'>,</span><span class='conid'>CurlTimeValue</span>           <span class='varop'>$</span> <span class='varid'>read</span>   <span class='varid'>v'</span>+<a name="line-198"></a>					  <span class='keyglyph'>]</span>+<a name="line-199"></a>	<span class='keyglyph'>|</span> <span class='varid'>isIntArg</span> <span class='varid'>v</span>			<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>CurlTimeCondition</span> <span class='conid'>TimeCondIfModSince</span>+<a name="line-200"></a>					  <span class='layout'>,</span><span class='conid'>CurlTimeValue</span>           <span class='varop'>$</span> <span class='varid'>read</span>   <span class='varid'>v'</span>+<a name="line-201"></a>					  <span class='keyglyph'>]</span>+<a name="line-202"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>=</span> <span class='conid'>[]</span>+<a name="line-203"></a>	<span class='keyword'>where</span>+<a name="line-204"></a>	<span class='varid'>v'</span> <span class='keyglyph'>=</span> <span class='varid'>tail</span> <span class='varid'>v</span>+<a name="line-205"></a>+<a name="line-206"></a>    <span class='varid'>proxyOptions</span>+<a name="line-207"></a>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='conid'>CurlProxyPort</span> <span class='varid'>pport</span>+<a name="line-208"></a>	  <span class='layout'>,</span> <span class='conid'>CurlProxy</span>     <span class='varid'>phost</span>+<a name="line-209"></a>	  <span class='keyglyph'>]</span>+<a name="line-210"></a>	<span class='keyword'>where</span>+<a name="line-211"></a>	<span class='varid'>pport</span>+<a name="line-212"></a>	    <span class='keyglyph'>|</span> <span class='varid'>isIntArg</span> <span class='varid'>ppp</span>	<span class='keyglyph'>=</span> <span class='varid'>read</span> <span class='varid'>v</span>+<a name="line-213"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>		<span class='keyglyph'>=</span> <span class='num'>1080</span>+<a name="line-214"></a>	<span class='layout'>(</span><span class='varid'>phost</span><span class='layout'>,</span> <span class='varid'>pp</span><span class='layout'>)</span> 		<span class='keyglyph'>=</span> <span class='varid'>span</span> <span class='layout'>(</span><span class='varop'>/=</span><span class='chr'>':'</span><span class='layout'>)</span> <span class='varid'>v</span>+<a name="line-215"></a>	<span class='varid'>ppp</span>      		<span class='keyglyph'>=</span> <span class='varid'>drop</span> <span class='num'>1</span> <span class='varid'>pp</span>+<a name="line-216"></a>+<a name="line-217"></a>+<a name="line-218"></a>+<a name="line-219"></a><a name="isTrue"></a><span class='definition'>isTrue</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>+<a name="line-220"></a><span class='definition'>isTrue</span> <span class='varid'>s</span>  	<span class='keyglyph'>=</span> <span class='varid'>null</span> <span class='varid'>s</span> <span class='varop'>||</span> <span class='varid'>isTrueValue</span> <span class='varid'>s</span>+<a name="line-221"></a>+<a name="line-222"></a><a name="isIntArg"></a><span class='definition'>isIntArg</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span>+<a name="line-223"></a><span class='definition'>isIntArg</span> <span class='varid'>s</span> 	<span class='keyglyph'>=</span> <span class='varid'>not</span> <span class='layout'>(</span><span class='varid'>null</span> <span class='varid'>s</span><span class='layout'>)</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>all</span> <span class='varid'>isDigit</span> <span class='varid'>s</span>+<a name="line-224"></a>+<a name="line-225"></a><a name="curlOptionString"></a><span class='definition'>curlOptionString</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>CurlOption</span><span class='keyglyph'>]</span>+<a name="line-226"></a><span class='definition'>curlOptionString</span>+<a name="line-227"></a>    <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='layout'>(</span><span class='varid'>uncurry</span> <span class='varid'>copt</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>opts</span> <span class='varop'>.</span> <span class='varid'>words</span>+<a name="line-228"></a>    <span class='keyword'>where</span>+<a name="line-229"></a>    <span class='varid'>opts</span> <span class='varid'>l</span>+<a name="line-230"></a>	<span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='varid'>l</span>			<span class='keyglyph'>=</span> <span class='conid'>[]</span>+<a name="line-231"></a>	<span class='keyglyph'>|</span> <span class='varid'>not</span> <span class='layout'>(</span><span class='str'>"-"</span> <span class='varop'>`isPrefixOf`</span> <span class='varid'>k</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>opts</span> <span class='varid'>l1</span>		<span class='comment'>-- k not an option: ignore</span>+<a name="line-232"></a>	<span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='varid'>l1</span>			<span class='keyglyph'>=</span> <span class='varid'>opts</span> <span class='layout'>(</span><span class='varid'>k</span><span class='conop'>:</span><span class='str'>""</span><span class='conop'>:</span><span class='varid'>l1</span><span class='layout'>)</span>	<span class='comment'>-- last option</span>+<a name="line-233"></a>	<span class='keyglyph'>|</span> <span class='str'>"-"</span> <span class='varop'>`isPrefixOf`</span> <span class='varid'>v</span>		<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>k</span><span class='layout'>,</span> <span class='str'>""</span><span class='layout'>)</span> <span class='conop'>:</span> <span class='varid'>opts</span> <span class='layout'>(</span><span class='varid'>v</span><span class='conop'>:</span><span class='varid'>l</span><span class='layout'>)</span>	<span class='comment'>-- k option without arg</span>+<a name="line-234"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</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='conop'>:</span> <span class='varid'>opts</span> <span class='varid'>l2</span>	<span class='comment'>-- k with value</span>+<a name="line-235"></a>	<span class='keyword'>where</span>+<a name="line-236"></a>	<span class='layout'>(</span><span class='varid'>k</span><span class='conop'>:</span><span class='varid'>l1</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>l</span>+<a name="line-237"></a>	<span class='layout'>(</span><span class='varid'>v</span><span class='conop'>:</span><span class='varid'>l2</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>l1</span>+<a name="line-238"></a>+<a name="line-239"></a><span class='comment'>-- ------------------------------------------------------------</span>+</pre></body>+</html>
− doc/hdoc/src/Text-XML-HXT-IO-GetHTTPNative.html
@@ -1,161 +0,0 @@-<!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'>-- GET for native http access</span>-<a name="line-4"></a><span class='comment'>--</span>-<a name="line-5"></a><span class='comment'>-- Version : $Id: GetHTTPNative.hs,v 1.2 2005/04/14 12:52:52 hxml Exp $</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'>IO</span><span class='varop'>.</span><span class='conid'>GetHTTPNative</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'>IO</span><span class='varop'>.</span><span class='conid'>GetHTTPNative</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'>XmlKeywords</span>-<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'>Util</span>			<span class='layout'>(</span> <span class='varid'>stringTrim</span> <span class='layout'>)</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'>Parser</span><span class='varop'>.</span><span class='conid'>ProtocolHandlerUtil</span>	<span class='layout'>(</span> <span class='varid'>parseContentType</span> <span class='layout'>)</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'>ParserCombinators</span><span class='varop'>.</span><span class='conid'>Parsec</span>		<span class='layout'>(</span> <span class='varid'>parse</span> <span class='layout'>)</span>-<a name="line-18"></a>-<a name="line-19"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>	<span class='layout'>(</span> <span class='varid'>fromJust</span>-<a name="line-20"></a>			<span class='layout'>)</span>-<a name="line-21"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>IO</span>	<span class='layout'>(</span> <span class='varid'>hPutStrLn</span>-<a name="line-22"></a>			<span class='layout'>,</span> <span class='varid'>stderr</span>-<a name="line-23"></a>			<span class='layout'>)</span>-<a name="line-24"></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>	<span class='layout'>(</span> <span class='varid'>ioeGetErrorString</span>-<a name="line-25"></a>			<span class='layout'>,</span> <span class='varid'>try</span>-<a name="line-26"></a>			<span class='layout'>)</span>-<a name="line-27"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>Browser</span>	<span class='layout'>(</span> <span class='conid'>Proxy</span><span class='layout'>(</span><span class='keyglyph'>..</span><span class='layout'>)</span>-<a name="line-28"></a>			<span class='layout'>,</span> <span class='varid'>browse</span>-<a name="line-29"></a>			<span class='layout'>,</span> <span class='varid'>defaultGETRequest</span>-<a name="line-30"></a>			<span class='layout'>,</span> <span class='varid'>request</span>-<a name="line-31"></a>			<span class='layout'>,</span> <span class='varid'>setOutHandler</span>-<a name="line-32"></a>			<span class='layout'>,</span> <span class='varid'>setErrHandler</span>-<a name="line-33"></a>			<span class='layout'>,</span> <span class='varid'>setProxy</span>-<a name="line-34"></a>			<span class='layout'>)</span>-<a name="line-35"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>HTTP</span>	<span class='layout'>(</span> <span class='conid'>Header</span><span class='layout'>(</span><span class='keyglyph'>..</span><span class='layout'>)</span>-<a name="line-36"></a>			<span class='layout'>,</span> <span class='conid'>HeaderName</span><span class='layout'>(</span><span class='keyglyph'>..</span><span class='layout'>)</span>-<a name="line-37"></a>			<span class='layout'>,</span> <span class='conid'>Response</span><span class='layout'>(</span><span class='keyglyph'>..</span><span class='layout'>)</span>-<a name="line-38"></a>			<span class='layout'>,</span> <span class='varid'>httpVersion</span>-<a name="line-39"></a>			<span class='layout'>)</span>-<a name="line-40"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>Socket</span>	<span class='layout'>(</span> <span class='varid'>withSocketsDo</span>-<a name="line-41"></a>			<span class='layout'>)</span>-<a name="line-42"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>URI</span>	<span class='layout'>(</span> <span class='conid'>URI</span>-<a name="line-43"></a>			<span class='layout'>,</span> <span class='varid'>parseURIReference</span>-<a name="line-44"></a>			<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'>--</span>-<a name="line-48"></a><span class='comment'>-- the native http protocol handler</span>-<a name="line-49"></a>-<a name="line-50"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-51"></a><span class='comment'>--</span>-<a name="line-52"></a><span class='comment'>-- the http protocol handler, haskell implementation</span>-<a name="line-53"></a>-<a name="line-54"></a><a name="getCont"></a><span class='definition'>getCont</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'>IO</span> <span class='layout'>(</span><span class='conid'>Either</span> <span class='conid'>String</span> <span class='layout'>(</span><span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='layout'>)</span>-<a name="line-55"></a><span class='definition'>getCont</span> <span class='varid'>uri</span> <span class='varid'>proxy</span>-<a name="line-56"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-57"></a>      <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>try</span> <span class='layout'>(</span><span class='varid'>getHttp</span> <span class='conid'>False</span> <span class='varid'>uri1</span> <span class='varid'>proxy</span><span class='layout'>)</span>-<a name="line-58"></a>      <span class='varid'>either</span> <span class='varid'>processError</span> <span class='varid'>processResponse</span> <span class='varid'>res</span>-<a name="line-59"></a>    <span class='keyword'>where</span>-<a name="line-60"></a>    <span class='varid'>uri1</span> <span class='keyglyph'>=</span> <span class='varid'>fromJust</span> <span class='layout'>(</span><span class='varid'>parseURIReference</span> <span class='varid'>uri</span><span class='layout'>)</span>-<a name="line-61"></a>-<a name="line-62"></a>    <span class='varid'>processError</span> <span class='varid'>e</span>-<a name="line-63"></a>	<span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='varop'>$</span> <span class='conid'>Left</span> <span class='layout'>(</span> <span class='str'>"http error when requesting URI "</span>-<a name="line-64"></a>			  <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>uri</span>-<a name="line-65"></a>			  <span class='varop'>++</span> <span class='str'>": "</span>-<a name="line-66"></a>			  <span class='varop'>++</span> <span class='varid'>ioeGetErrorString</span> <span class='varid'>e</span>-<a name="line-67"></a>			  <span class='varop'>++</span> <span class='str'>" (perhaps server does not understand HTTP/1.1) "</span>-<a name="line-68"></a>			<span class='layout'>)</span>-<a name="line-69"></a>-<a name="line-70"></a>    <span class='varid'>processResponse</span> <span class='varid'>response</span>-<a name="line-71"></a>	<span class='keyglyph'>|</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='keyglyph'>=</span> <span class='varid'>return</span> <span class='varop'>$</span> <span class='conid'>Right</span> <span class='layout'>(</span><span class='varid'>al</span><span class='layout'>,</span> <span class='varid'>cs</span><span class='layout'>)</span>-<a name="line-73"></a>-<a name="line-74"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>-<a name="line-75"></a>	    <span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='varop'>$</span> <span class='conid'>Left</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='varid'>uri</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'>al</span> <span class='keyglyph'>=</span> <span class='varid'>convertResponseHeaders</span> <span class='varid'>response</span>-<a name="line-84"></a>	<span class='varid'>cs</span> <span class='keyglyph'>=</span> <span class='varid'>rspBody</span> <span class='varid'>response</span>-<a name="line-85"></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-86"></a>-<a name="line-87"></a>    <span class='varid'>getHttp</span>		<span class='keyglyph'>::</span> <span class='conid'>Bool</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-88"></a>    <span class='varid'>getHttp</span> <span class='varid'>trc'</span> <span class='varid'>uri'</span> <span class='varid'>proxy'</span>-<a name="line-89"></a>	<span class='keyglyph'>=</span> <span class='varid'>withSocketsDo</span> <span class='varop'>$</span>-<a name="line-90"></a>	  <span class='varid'>browse</span> <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-91"></a>		   <span class='varid'>setOutHandler</span> <span class='layout'>(</span><span class='varid'>trcFct</span><span class='layout'>)</span>-<a name="line-92"></a>		   <span class='varid'>setErrHandler</span> <span class='layout'>(</span><span class='varid'>trcFct</span><span class='layout'>)</span>-<a name="line-93"></a>-<a name="line-94"></a>		   <span class='varid'>setProxy'</span> <span class='varid'>proxy'</span>-<a name="line-95"></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-96"></a>		   <span class='varid'>return</span> <span class='varid'>rsp</span>-<a name="line-97"></a>		 <span class='layout'>)</span>-<a name="line-98"></a>	<span class='keyword'>where</span>-<a name="line-99"></a>	<span class='varid'>trcFct</span> <span class='varid'>s</span>-<a name="line-100"></a>	    <span class='keyglyph'>|</span> <span class='varid'>trc'</span>-<a name="line-101"></a>		<span class='keyglyph'>=</span> <span class='varid'>hPutStrLn</span> <span class='varid'>stderr</span> <span class='layout'>(</span><span class='str'>"-- (5) http: "</span> <span class='varop'>++</span> <span class='varid'>s</span><span class='layout'>)</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='varid'>return</span> <span class='conid'>()</span>-<a name="line-104"></a>-<a name="line-105"></a>	<span class='varid'>rq</span> <span class='keyglyph'>=</span> <span class='varid'>defaultGETRequest</span> <span class='varid'>uri'</span>-<a name="line-106"></a>	-<a name="line-107"></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-108"></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-109"></a>-<a name="line-110"></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-111"></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-112"></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-113"></a>-<a name="line-114"></a>    <span class='varid'>convertResponseHeaders</span>	<span class='keyglyph'>::</span> <span class='conid'>Response</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-115"></a>    <span class='varid'>convertResponseHeaders</span> <span class='varid'>r'</span>-<a name="line-116"></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-117"></a>	  <span class='varop'>++</span>-<a name="line-118"></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-119"></a>          <span class='varop'>++</span>-<a name="line-120"></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-121"></a>	<span class='keyword'>where</span>-<a name="line-122"></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='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-123"></a>	<span class='varid'>cvResponseCode</span> <span class='varid'>st'</span>-<a name="line-124"></a>	    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='layout'>(</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-125"></a>	      <span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>transferVersion</span><span class='layout'>,</span>	<span class='varid'>httpVersion</span><span class='layout'>)</span>-<a name="line-126"></a>	      <span class='keyglyph'>]</span>-<a name="line-127"></a>-<a name="line-128"></a>	<span class='varid'>cvResponseReason</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-129"></a>	<span class='varid'>cvResponseReason</span> <span class='varid'>r''</span>-<a name="line-130"></a>	    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='layout'>(</span><span class='varid'>transferMessage</span><span class='layout'>,</span> <span class='layout'>(</span><span class='varid'>stringTrim</span> <span class='varid'>r''</span><span class='layout'>)</span><span class='layout'>)</span> <span class='keyglyph'>]</span>-<a name="line-131"></a>-<a name="line-132"></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='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-133"></a>	<span class='varid'>cvResponseHeaders</span>-<a name="line-134"></a>	    <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='varid'>cvResponseHeader</span>-<a name="line-135"></a>-<a name="line-136"></a>	<span class='varid'>cvResponseHeader</span>	<span class='keyglyph'>::</span> <span class='conid'>Header</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-137"></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-138"></a>	    <span class='keyglyph'>|</span> <span class='varid'>name</span> <span class='varop'>==</span> <span class='conid'>HdrContentType</span>-<a name="line-139"></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-140"></a>		    <span class='conid'>Right</span> <span class='varid'>res</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>res</span>-<a name="line-141"></a>		    <span class='conid'>Left</span>  <span class='keyword'>_</span>   <span class='keyglyph'>-&gt;</span> <span class='conid'>[]</span>-<a name="line-142"></a>		  <span class='layout'>)</span>-<a name="line-143"></a>                  <span class='varop'>++</span>-<a name="line-144"></a>		  <span class='varid'>addHttpAttr</span>-<a name="line-145"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>-<a name="line-146"></a>		<span class='keyglyph'>=</span> <span class='varid'>addHttpAttr</span>-<a name="line-147"></a>	    <span class='keyword'>where</span>-<a name="line-148"></a>	    <span class='varid'>addHttpAttr</span> <span class='keyglyph'>=</span> <span class='keyglyph'>[</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><span class='layout'>)</span> <span class='keyglyph'>]</span>-<a name="line-149"></a>-<a name="line-150"></a>-<a name="line-151"></a><span class='comment'>-- ------------------------------------------------------------</span>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-Parser-DTDProcessing.html
@@ -1,942 +0,0 @@-<!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>   Version    : $Id: DTDProcessing.hs,v 1.15 2006/11/12 14:53:00 hxml Exp $-<a name="line-12"></a>-<a name="line-13"></a>   DTD processing function for-<a name="line-14"></a>   including external parts of a DTD-<a name="line-15"></a>   parameter entity substitution and general entity substitution-<a name="line-16"></a>-<a name="line-17"></a>-}</span>-<a name="line-18"></a>-<a name="line-19"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-20"></a>-<a name="line-21"></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-22"></a>    <span class='layout'>(</span> <span class='varid'>getWellformedDoc</span>-<a name="line-23"></a>    <span class='layout'>,</span> <span class='varid'>checkWellformedDoc</span>-<a name="line-24"></a>    <span class='layout'>,</span> <span class='varid'>processDTD</span>-<a name="line-25"></a>    <span class='layout'>,</span> <span class='varid'>processGeneralEntities</span>-<a name="line-26"></a>    <span class='layout'>)</span>-<a name="line-27"></a><span class='keyword'>where</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>-<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'>Parser</span><span class='varop'>.</span><span class='conid'>XmlOutput</span>-<a name="line-32"></a>    <span class='layout'>(</span> <span class='varid'>traceTree</span>-<a name="line-33"></a>    <span class='layout'>,</span> <span class='varid'>traceSource</span>-<a name="line-34"></a>    <span class='layout'>,</span> <span class='varid'>traceMsg</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'>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-38"></a>    <span class='layout'>(</span> <span class='varid'>parseXmlDoc</span>-<a name="line-39"></a>    <span class='layout'>,</span> <span class='varid'>parseXmlDTDPart</span>-<a name="line-40"></a>    <span class='layout'>,</span> <span class='varid'>parseXmlAttrValue</span>-<a name="line-41"></a>    <span class='layout'>,</span> <span class='varid'>parseXmlGeneralEntityValue</span>-<a name="line-42"></a>    <span class='layout'>)</span>-<a name="line-43"></a>-<a name="line-44"></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-45"></a>    <span class='layout'>(</span> <span class='varid'>parseXmlDTDdecl</span>-<a name="line-46"></a>    <span class='layout'>,</span> <span class='varid'>parseXmlDTDdeclPart</span>-<a name="line-47"></a>    <span class='layout'>,</span> <span class='varid'>parseXmlDTDEntityValue</span>-<a name="line-48"></a>    <span class='layout'>)</span>-<a name="line-49"></a>-<a name="line-50"></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-51"></a>    <span class='layout'>(</span> <span class='varid'>getXmlContents</span>-<a name="line-52"></a>    <span class='layout'>,</span> <span class='varid'>getXmlEntityContents</span>-<a name="line-53"></a>    <span class='layout'>,</span> <span class='varid'>runInLocalURIContext</span>-<a name="line-54"></a>    <span class='layout'>,</span> <span class='varid'>runInNewURIContext</span>-<a name="line-55"></a>    <span class='layout'>,</span> <span class='varid'>getBaseURI</span>-<a name="line-56"></a>    <span class='layout'>,</span> <span class='varid'>setBaseURI</span>-<a name="line-57"></a>    <span class='layout'>,</span> <span class='varid'>getAbsolutURI</span>-<a name="line-58"></a>    <span class='layout'>,</span> <span class='varid'>isStandaloneDocument</span>-<a name="line-59"></a>    <span class='layout'>)</span>-<a name="line-60"></a>-<a name="line-61"></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-62"></a>    <span class='layout'>(</span> <span class='varid'>transfCharRef</span>-<a name="line-63"></a>    <span class='layout'>,</span> <span class='varid'>transfAllCharRef</span>-<a name="line-64"></a>    <span class='layout'>)</span>-<a name="line-65"></a>-<a name="line-66"></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-67"></a>-<a name="line-68"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>-<a name="line-69"></a>-<a name="line-70"></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-71"></a>    <span class='layout'>(</span> <span class='conid'>Map</span>-<a name="line-72"></a>    <span class='layout'>,</span> <span class='varid'>empty</span>-<a name="line-73"></a>    <span class='layout'>,</span> <span class='varid'>lookup</span>-<a name="line-74"></a>    <span class='layout'>,</span> <span class='varid'>insert</span>-<a name="line-75"></a>    <span class='comment'>-- , foldWithKey</span>-<a name="line-76"></a>    <span class='layout'>)</span>-<a name="line-77"></a>-<a name="line-78"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-79"></a><span class='comment'>--</span>-<a name="line-80"></a><span class='comment'>-- the "main" building blocks</span>-<a name="line-81"></a>-<a name="line-82"></a><span class='comment'>-- |</span>-<a name="line-83"></a><span class='comment'>-- monadic filter for reading, parsing and checking a wellformed document.</span>-<a name="line-84"></a><span class='comment'>-- the input tree must consist of a root node with a source attribute</span>-<a name="line-85"></a><span class='comment'>-- in its attribute list.</span>-<a name="line-86"></a><span class='comment'>--</span>-<a name="line-87"></a><span class='comment'>-- All attributes from the document root are copied into the system state,</span>-<a name="line-88"></a><span class='comment'>-- and may be queried by the monadic filters, e.g. trace options.</span>-<a name="line-89"></a><span class='comment'>--</span>-<a name="line-90"></a><span class='comment'>-- Result is the single element list containing the well-formed document tree</span>-<a name="line-91"></a><span class='comment'>-- or, in case of errors, the document root with an empty list as children</span>-<a name="line-92"></a><span class='comment'>-- and attributes 'a_status' and 'a_module' for error level and the module,</span>-<a name="line-93"></a><span class='comment'>-- where the error occured.</span>-<a name="line-94"></a><span class='comment'>--</span>-<a name="line-95"></a><span class='comment'>-- this is a shortcut for 'getXmlContents' .\&gt;\&gt; 'checkWellformedDoc'</span>-<a name="line-96"></a><span class='comment'>--</span>-<a name="line-97"></a><span class='comment'>-- example for a main program:</span>-<a name="line-98"></a><span class='comment'>--</span>-<a name="line-99"></a><span class='comment'>-- @</span>-<a name="line-100"></a><span class='comment'>-- main =</span>-<a name="line-101"></a><span class='comment'>--   run\' \$</span>-<a name="line-102"></a><span class='comment'>--   do</span>-<a name="line-103"></a><span class='comment'>--   res  \&lt;- getWellformedDoc \$ newDocument \"myfile.xml\"</span>-<a name="line-104"></a><span class='comment'>--   ...</span>-<a name="line-105"></a><span class='comment'>-- @</span>-<a name="line-106"></a>-<a name="line-107"></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-108"></a><span class='definition'>getWellformedDoc</span>-<a name="line-109"></a>    <span class='keyglyph'>=</span> <span class='varid'>setSystemParams</span>-<a name="line-110"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-111"></a>      <span class='varid'>getXmlContents</span>-<a name="line-112"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-113"></a>      <span class='varid'>checkWellformedDoc</span>-<a name="line-114"></a>-<a name="line-115"></a><span class='comment'>-- |</span>-<a name="line-116"></a><span class='comment'>-- parses a text node with 'parseXmlDoc', processes the DTD and general entities</span>-<a name="line-117"></a><span class='comment'>-- and transforms all char references into characters</span>-<a name="line-118"></a>-<a name="line-119"></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-120"></a><span class='definition'>checkWellformedDoc</span>-<a name="line-121"></a>    <span class='keyglyph'>=</span> <span class='varid'>parseXmlDoc</span>-<a name="line-122"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-123"></a>      <span class='varid'>processDTD</span>-<a name="line-124"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-125"></a>      <span class='varid'>processGeneralEntities</span>-<a name="line-126"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-127"></a>      <span class='varid'>liftMf</span> <span class='varid'>transfAllCharRef</span>-<a name="line-128"></a>-<a name="line-129"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-130"></a><span class='comment'>--</span>-<a name="line-131"></a>-<a name="line-132"></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-133"></a>-<a name="line-134"></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-135"></a>-<a name="line-136"></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-137"></a>-<a name="line-138"></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-139"></a>			<span class='keyglyph'>|</span> <span class='conid'>External</span>-<a name="line-140"></a>			  <span class='keyword'>deriving</span> <span class='layout'>(</span><span class='conid'>Eq</span><span class='layout'>)</span>-<a name="line-141"></a>-<a name="line-142"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-143"></a>-<a name="line-144"></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-145"></a>-<a name="line-146"></a><a name="emptyPeEnv"></a><span class='definition'>emptyPeEnv</span>	<span class='keyglyph'>::</span> <span class='conid'>PeEnv</span>-<a name="line-147"></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-148"></a>-<a name="line-149"></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-150"></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-151"></a>-<a name="line-152"></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-153"></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-154"></a>-<a name="line-155"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-156"></a>-<a name="line-157"></a><span class='comment'>-- |</span>-<a name="line-158"></a><span class='comment'>-- a filter for DTD processing</span>-<a name="line-159"></a><span class='comment'>--</span>-<a name="line-160"></a><span class='comment'>-- inclusion of external parts of DTD,</span>-<a name="line-161"></a><span class='comment'>-- parameter entity substitution</span>-<a name="line-162"></a><span class='comment'>-- conditional section evaluation</span>-<a name="line-163"></a><span class='comment'>--</span>-<a name="line-164"></a><span class='comment'>-- input tree must represent a complete document including root node</span>-<a name="line-165"></a>-<a name="line-166"></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-167"></a><span class='definition'>processDTD</span>-<a name="line-168"></a>    <span class='keyglyph'>=</span> <span class='varid'>runInLocalURIContext</span>-<a name="line-169"></a>         <span class='layout'>(</span> <span class='varid'>processRoot</span>-<a name="line-170"></a>	   <span class='varop'>.&gt;&gt;</span>-<a name="line-171"></a>	   <span class='varid'>traceTree</span>-<a name="line-172"></a>	   <span class='varop'>.&gt;&gt;</span>-<a name="line-173"></a>	   <span class='varid'>traceSource</span>-<a name="line-174"></a>	 <span class='layout'>)</span>-<a name="line-175"></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-176"></a>      <span class='keyword'>where</span>-<a name="line-177"></a>-<a name="line-178"></a>      <span class='varid'>processRoot</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>-<a name="line-179"></a>      <span class='varid'>processRoot</span> <span class='varid'>t</span>-<a name="line-180"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-181"></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-182"></a>	    <span class='varid'>setSysParam</span> <span class='varid'>a_standalone</span> <span class='str'>""</span>-<a name="line-183"></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-184"></a>	      <span class='varop'>.&gt;&gt;</span>-<a name="line-185"></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-186"></a>	      <span class='varop'>.&gt;&gt;</span>-<a name="line-187"></a>	      <span class='varid'>processChildrenM</span> <span class='varid'>substParamEntities</span>-<a name="line-188"></a>	      <span class='varop'>.&gt;&gt;</span>-<a name="line-189"></a>	      <span class='varid'>checkResult</span> <span class='str'>"in XML DTD processing"</span>-<a name="line-190"></a>	      <span class='layout'>)</span> <span class='varop'>`whenM`</span> <span class='varid'>statusOk</span>-<a name="line-191"></a>	      <span class='varop'>$</span> <span class='varid'>t</span>-<a name="line-192"></a>-<a name="line-193"></a>      <span class='comment'>-- Adds an empty DOCTYPE node to document. Needed for documents without a DTD.</span>-<a name="line-194"></a>      <span class='comment'>-- Otherwise processor can not substitute predefined entities. If an xml declaration</span>-<a name="line-195"></a>      <span class='comment'>-- is present, the node is inserted after this node.</span>-<a name="line-196"></a>      <span class='varid'>addDoctype</span> <span class='keyglyph'>::</span> <span class='conid'>XmlSFilter</span>-<a name="line-197"></a>      <span class='varid'>addDoctype</span> <span class='varid'>docChilds</span>-<a name="line-198"></a>          <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>doctype</span>-<a name="line-199"></a>            <span class='keyword'>then</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>xmlDecl</span>-<a name="line-200"></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-201"></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-202"></a>            <span class='keyword'>else</span> <span class='varid'>docChilds</span>-<a name="line-203"></a>            <span class='keyword'>where</span>-<a name="line-204"></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-205"></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-206"></a>-<a name="line-207"></a>-<a name="line-208"></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-209"></a><span class='definition'>substParamEntities</span>-<a name="line-210"></a>    <span class='keyglyph'>=</span> <span class='varid'>processParamEntities</span>-<a name="line-211"></a>      <span class='varop'>`whenM`</span>-<a name="line-212"></a>      <span class='varid'>isDoctype</span>-<a name="line-213"></a>      <span class='keyword'>where</span>-<a name="line-214"></a>-<a name="line-215"></a>      <span class='varid'>processParamEntities</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlStateFilter</span> <span class='varid'>a</span>-<a name="line-216"></a>      <span class='varid'>processParamEntities</span> <span class='varid'>t'</span>-<a name="line-217"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-218"></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-219"></a>-<a name="line-220"></a>	    <span class='comment'>-- process internal part of DTD with initial empty env for parameter entities</span>-<a name="line-221"></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-222"></a>-<a name="line-223"></a>	    <span class='comment'>-- process external part of DTD with resulting env from internal DTD</span>-<a name="line-224"></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-225"></a>-<a name="line-226"></a>	    <span class='comment'>-- merge predefined, internal and external part</span>-<a name="line-227"></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-228"></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-229"></a>-<a name="line-230"></a>      <span class='varid'>processPredef</span>-<a name="line-231"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-232"></a>	    <span class='varid'>trace</span> <span class='num'>2</span> <span class='str'>"substParamEntities: substitute predefined entities"</span>-<a name="line-233"></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-234"></a>-<a name="line-235"></a>      <span class='varid'>processInt</span> <span class='varid'>env'</span> <span class='varid'>n'</span>-<a name="line-236"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-237"></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-238"></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-239"></a>-<a name="line-240"></a>      <span class='varid'>processExt</span> <span class='varid'>env'</span> <span class='varid'>n'</span>-<a name="line-241"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-242"></a>	    <span class='varid'>trace</span> <span class='num'>2</span> <span class='str'>"substParamEntities: process external part of DTD"</span>-<a name="line-243"></a>            <span class='varid'>extDtd</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>processExternalDTD</span> <span class='varid'>n'</span>-<a name="line-244"></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-245"></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-246"></a>-<a name="line-247"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-248"></a><span class='comment'>-- |</span>-<a name="line-249"></a><span class='comment'>-- substitute parameter entities</span>-<a name="line-250"></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-251"></a>-<a name="line-252"></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-253"></a>-<a name="line-254"></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-255"></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-256"></a>-<a name="line-257"></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-258"></a>-<a name="line-259"></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-260"></a>-<a name="line-261"></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-262"></a>    <span class='keyword'>where</span>-<a name="line-263"></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-264"></a>    <span class='varid'>peName'</span>		<span class='keyglyph'>=</span> <span class='varid'>show</span> <span class='varid'>peName</span>-<a name="line-265"></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-266"></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-267"></a>    <span class='varid'>isUndefinedRef</span>	<span class='keyglyph'>=</span> <span class='varid'>isNothing</span> <span class='varid'>peVal</span>-<a name="line-268"></a>-<a name="line-269"></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-270"></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-271"></a>-<a name="line-272"></a>    <span class='comment'>-- peContent		= getChildren $ fromJust peVal</span>-<a name="line-273"></a>-<a name="line-274"></a><span class='definition'>substPEref'</span> <span class='keyword'>_</span> <span class='keyword'>_</span> <span class='varid'>n</span>-<a name="line-275"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>n</span><span class='keyglyph'>]</span>-<a name="line-276"></a>-<a name="line-277"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-278"></a>-<a name="line-279"></a><span class='comment'>{--<a name="line-280"></a>dumpPE	:: DTDStateFilter-<a name="line-281"></a>dumpPE t-<a name="line-282"></a>    = do-<a name="line-283"></a>      env &lt;- getState-<a name="line-284"></a>      ( traceMsg 2 ("dumpPE: parameter entity environment\n" ++ M.foldWithKey showPE "" env)-<a name="line-285"></a>	.&gt;&gt;-<a name="line-286"></a>	thisM ) t-<a name="line-287"></a>    where-<a name="line-288"></a>    showPE k v b = k ++ "\t" ++ show v ++ "\n" ++ b-<a name="line-289"></a>-}</span>-<a name="line-290"></a>-<a name="line-291"></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-292"></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-293"></a>-<a name="line-294"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-295"></a>-<a name="line-296"></a><a name="getExternalParamEntityValue"></a><span class='definition'>getExternalParamEntityValue</span>	<span class='keyglyph'>::</span> <span class='conid'>DTDStateFilter</span>-<a name="line-297"></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-298"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-299"></a>      <span class='varid'>rl</span> <span class='keyglyph'>&lt;-</span> <span class='layout'>(</span> <span class='varid'>getXmlEntityContents</span>-<a name="line-300"></a>	      <span class='varop'>.&gt;&gt;</span>-<a name="line-301"></a>	      <span class='varid'>liftMf</span> <span class='varid'>getChildren</span>-<a name="line-302"></a>	    <span class='layout'>)</span>-<a name="line-303"></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-304"></a>      <span class='varid'>base</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getBaseURI</span>-<a name="line-305"></a>      <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>rl</span>-<a name="line-306"></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-307"></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-308"></a>    <span class='keyword'>where</span>-<a name="line-309"></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-310"></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-311"></a>-<a name="line-312"></a><span class='definition'>getExternalParamEntityValue</span> <span class='varid'>n</span>-<a name="line-313"></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-314"></a>-<a name="line-315"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-316"></a>-<a name="line-317"></a><span class='comment'>-- |</span>-<a name="line-318"></a><span class='comment'>-- the dtd parameter entity substitution filter</span>-<a name="line-319"></a>-<a name="line-320"></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-321"></a>-<a name="line-322"></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-323"></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-324"></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-325"></a>	  <span class='varop'>.&gt;&gt;</span>-<a name="line-326"></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-327"></a>          <span class='varop'>.&gt;&gt;</span>-<a name="line-328"></a>	  <span class='varid'>liftF</span> <span class='varid'>parseXmlDTDdecl</span>-<a name="line-329"></a>          <span class='varop'>.&gt;&gt;</span>-<a name="line-330"></a>	  <span class='varid'>substRefsInEntityValue</span>-<a name="line-331"></a>          <span class='varop'>.&gt;&gt;</span>-<a name="line-332"></a>	  <span class='varid'>processEntityDecl</span>-<a name="line-333"></a>          <span class='varop'>.&gt;&gt;</span>-<a name="line-334"></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-335"></a>          <span class='varop'>$</span> <span class='varid'>n</span>-<a name="line-336"></a>-<a name="line-337"></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-338"></a>	<span class='keyglyph'>=</span> <span class='varid'>substPeRefsInDTDpart</span> <span class='conid'>[]</span> <span class='varid'>n</span>-<a name="line-339"></a>-<a name="line-340"></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-341"></a>      <span class='varop'>||</span>-<a name="line-342"></a>      <span class='varid'>isDTDElemNode</span> <span class='conid'>ATTLIST</span> <span class='varid'>xn</span>-<a name="line-343"></a>      <span class='varop'>||</span>-<a name="line-344"></a>      <span class='varid'>isDTDElemNode</span> <span class='conid'>NOTATION</span> <span class='varid'>xn</span>-<a name="line-345"></a>	<span class='keyglyph'>=</span> <span class='varid'>traceDTD</span>  <span class='str'>"DTD declaration before PE substitution"</span>-<a name="line-346"></a>	  <span class='varop'>.&gt;&gt;</span>-<a name="line-347"></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-348"></a>          <span class='varop'>.&gt;&gt;</span>-<a name="line-349"></a>	  <span class='varid'>liftF</span> <span class='varid'>parseXmlDTDdecl</span>-<a name="line-350"></a>          <span class='varop'>.&gt;&gt;</span>-<a name="line-351"></a>	  <span class='varid'>traceDTD</span> <span class='str'>"DTD declaration after DTD declaration parsing"</span>-<a name="line-352"></a>	  <span class='varop'>$</span> <span class='varid'>n</span>-<a name="line-353"></a>-<a name="line-354"></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-355"></a>      <span class='varop'>&amp;&amp;</span>-<a name="line-356"></a>      <span class='varid'>loc</span> <span class='varop'>==</span> <span class='conid'>Internal</span>-<a name="line-357"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-358"></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-359"></a>            <span class='varid'>return</span> <span class='conid'>[]</span>-<a name="line-360"></a>-<a name="line-361"></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-362"></a>      <span class='varop'>&amp;&amp;</span>-<a name="line-363"></a>      <span class='varid'>loc</span> <span class='varop'>==</span> <span class='conid'>External</span>-<a name="line-364"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>let</span>-<a name="line-365"></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-366"></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-367"></a>	    <span class='keyword'>in</span>-<a name="line-368"></a>	    <span class='varid'>traceDTD</span> <span class='str'>"substParamEntity: process conditional section"</span>-<a name="line-369"></a>	    <span class='varop'>.&gt;&gt;</span>-<a name="line-370"></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-371"></a>            <span class='varop'>.&gt;&gt;</span>-<a name="line-372"></a>	    <span class='varid'>liftF</span> <span class='varid'>parseXmlDTDdecl</span>-<a name="line-373"></a>	    <span class='varop'>.&gt;&gt;</span>-<a name="line-374"></a>            <span class='varid'>evalCond</span> <span class='varid'>content</span>-<a name="line-375"></a>	    <span class='varop'>$</span> <span class='varid'>n</span>-<a name="line-376"></a>-<a name="line-377"></a>    <span class='keyglyph'>|</span> <span class='varid'>isXCmtNode</span> <span class='varid'>xn</span>						<span class='comment'>-- remove comments</span>-<a name="line-378"></a>	<span class='keyglyph'>=</span> <span class='varid'>noneM</span> <span class='varid'>n</span>-<a name="line-379"></a>-<a name="line-380"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>							<span class='comment'>-- default: keep things unchanged (should not occur)</span>-<a name="line-381"></a>	<span class='keyglyph'>=</span> <span class='varid'>thisM</span> <span class='varid'>n</span>-<a name="line-382"></a>    <span class='keyword'>where</span>-<a name="line-383"></a>-<a name="line-384"></a>    <span class='varid'>processEntityDecl</span>	<span class='keyglyph'>::</span> <span class='conid'>DTDStateFilter</span>-<a name="line-385"></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-386"></a>	  <span class='keyword'>then</span> <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-387"></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-388"></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-389"></a>	       <span class='layout'>)</span>-<a name="line-390"></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-391"></a>	<span class='keyword'>where</span>-<a name="line-392"></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-393"></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-394"></a>      -<a name="line-395"></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-396"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-397"></a>	  <span class='varid'>env</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getState</span>-<a name="line-398"></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-399"></a>	     <span class='keyword'>then</span>-<a name="line-400"></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-401"></a>	     <span class='keyword'>else</span>-<a name="line-402"></a>	     <span class='layout'>(</span> <span class='varid'>ifM</span> <span class='varid'>isExternalParameterEntity</span>-<a name="line-403"></a>	           <span class='layout'>(</span> <span class='varid'>runInLocalURIContext</span> <span class='varid'>getExternalParamEntityValue</span> <span class='layout'>)</span>-<a name="line-404"></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-405"></a>	       <span class='varop'>.&gt;&gt;</span>-<a name="line-406"></a>	       <span class='varid'>addPE</span> <span class='varid'>peName</span>-<a name="line-407"></a>	     <span class='layout'>)</span> <span class='varid'>n'</span>-<a name="line-408"></a>	  <span class='keyword'>where</span>-<a name="line-409"></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-410"></a>-<a name="line-411"></a>    <span class='varid'>processEntityDecl</span> <span class='varid'>n'</span>-<a name="line-412"></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-413"></a>-<a name="line-414"></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-415"></a>    <span class='varid'>addPE</span> <span class='varid'>name</span> <span class='varid'>t</span>-<a name="line-416"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-417"></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-418"></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-419"></a>	  <span class='varid'>return</span> <span class='conid'>[]</span>-<a name="line-420"></a>-<a name="line-421"></a>    <span class='varid'>substPEref</span>	<span class='keyglyph'>::</span> <span class='conid'>DTDStateFilter</span>-<a name="line-422"></a>    <span class='varid'>substPEref</span> <span class='varid'>n'</span>-<a name="line-423"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-424"></a>	  <span class='varid'>env</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getState</span>-<a name="line-425"></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-426"></a>-<a name="line-427"></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-428"></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-429"></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-430"></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-431"></a>	    <span class='keyword'>else</span> <span class='layout'>(</span> <span class='varid'>substPEref</span>-<a name="line-432"></a>		   <span class='varop'>.&gt;&gt;</span>-<a name="line-433"></a>		   <span class='varid'>liftF</span> <span class='varid'>parseXmlDTDEntityValue</span>-<a name="line-434"></a>		   <span class='varop'>.&gt;&gt;</span>-<a name="line-435"></a>		   <span class='varid'>liftF</span> <span class='varid'>transfCharRef</span>-<a name="line-436"></a>		   <span class='varop'>.&gt;&gt;</span>-<a name="line-437"></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-438"></a>		     <span class='varop'>`whenM`</span>-<a name="line-439"></a>		     <span class='varid'>isPeRef</span>-<a name="line-440"></a>		   <span class='layout'>)</span>-<a name="line-441"></a>		 <span class='layout'>)</span>-<a name="line-442"></a>	  <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>n'</span>-<a name="line-443"></a>	<span class='keyword'>where</span>-<a name="line-444"></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-445"></a>-<a name="line-446"></a>    <span class='varid'>substPeRefsInValue</span> <span class='keyword'>_</span> <span class='varid'>n'</span>-<a name="line-447"></a>	<span class='keyglyph'>=</span> <span class='varid'>thisM</span> <span class='varid'>n'</span>-<a name="line-448"></a>-<a name="line-449"></a>    <span class='varid'>substRefsInEntityValue</span>	<span class='keyglyph'>::</span> <span class='conid'>DTDStateFilter</span>-<a name="line-450"></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-451"></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-452"></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-453"></a>		<span class='keyword'>then</span> <span class='varid'>thisM</span>							<span class='comment'>-- externals not yet handled ??? really</span>-<a name="line-454"></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-455"></a>					<span class='varop'>.&gt;&gt;</span>-<a name="line-456"></a>					<span class='varid'>substPeRefsInValue</span> <span class='conid'>[]</span>-<a name="line-457"></a>				      <span class='layout'>)</span>-<a name="line-458"></a>	      <span class='layout'>)</span> <span class='varid'>n'</span>-<a name="line-459"></a>    <span class='varid'>substRefsInEntityValue</span>  <span class='varid'>n'</span>-<a name="line-460"></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-461"></a>-<a name="line-462"></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-463"></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-464"></a>	<span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='varid'>base</span>-<a name="line-465"></a>	    <span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varid'>n'</span>-<a name="line-466"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>-<a name="line-467"></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-468"></a>	<span class='keyword'>where</span>-<a name="line-469"></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-470"></a>-<a name="line-471"></a>    <span class='varid'>runInPeContext</span> <span class='varid'>f</span> <span class='varid'>n'</span>-<a name="line-472"></a>	<span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varid'>n'</span>-<a name="line-473"></a>-<a name="line-474"></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-475"></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-476"></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-477"></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-478"></a>	    <span class='keyword'>else</span> <span class='layout'>(</span> <span class='varid'>substPEref</span>-<a name="line-479"></a>		   <span class='varop'>.&gt;&gt;</span>-<a name="line-480"></a>		   <span class='varid'>traceDTD</span> <span class='str'>"substPeRefsInDTDdecl: parseXmlDTDdeclPart"</span>-<a name="line-481"></a>		   <span class='varop'>.&gt;&gt;</span>-<a name="line-482"></a>		   <span class='layout'>(</span> <span class='varid'>runInPeContext</span>-<a name="line-483"></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-484"></a>		       <span class='varop'>.&gt;&gt;</span>-<a name="line-485"></a>		       <span class='varid'>traceDTD</span> <span class='str'>"substPeRefsInDTDdecl: after parseXmlDTDdeclPart"</span>-<a name="line-486"></a>		       <span class='varop'>.&gt;&gt;</span>-<a name="line-487"></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-488"></a>		     <span class='layout'>)</span>-<a name="line-489"></a>		     <span class='varop'>`whenM`</span>-<a name="line-490"></a>		     <span class='varid'>isPeRef</span>-<a name="line-491"></a>		   <span class='layout'>)</span>-<a name="line-492"></a>		 <span class='layout'>)</span>-<a name="line-493"></a>	  <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>n'</span>-<a name="line-494"></a>	<span class='keyword'>where</span>-<a name="line-495"></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-496"></a>-<a name="line-497"></a>    <span class='varid'>substPeRefsInDTDdecl</span> <span class='keyword'>_</span> <span class='varid'>n'</span>-<a name="line-498"></a>	<span class='keyglyph'>=</span> <span class='varid'>thisM</span> <span class='varid'>n'</span>-<a name="line-499"></a>-<a name="line-500"></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-501"></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-502"></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-503"></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-504"></a>	    <span class='keyword'>else</span> <span class='layout'>(</span> <span class='varid'>substPEref</span>-<a name="line-505"></a>		   <span class='varop'>.&gt;&gt;</span>-<a name="line-506"></a>		   <span class='varid'>traceDTD</span> <span class='str'>"substPeRefsInDTDpart: parseXmlDTDPart"</span>-<a name="line-507"></a>		   <span class='varop'>.&gt;&gt;</span>-<a name="line-508"></a>		   <span class='varid'>runInPeContext</span>-<a name="line-509"></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-510"></a>		     <span class='varop'>.&gt;&gt;</span>-<a name="line-511"></a>		     <span class='varid'>traceDTD</span> <span class='str'>"substPeRefsInDTDdecl: after parseXmlDTDPart"</span>-<a name="line-512"></a>		     <span class='varop'>.&gt;&gt;</span>-<a name="line-513"></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-514"></a>		   <span class='layout'>)</span>-<a name="line-515"></a>		 <span class='layout'>)</span>-<a name="line-516"></a>	  <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>n'</span>-<a name="line-517"></a>	<span class='keyword'>where</span>-<a name="line-518"></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-519"></a>-<a name="line-520"></a>    <span class='varid'>substPeRefsInDTDpart</span> <span class='keyword'>_</span> <span class='varid'>n'</span>-<a name="line-521"></a>	<span class='keyglyph'>=</span> <span class='varid'>thisM</span> <span class='varid'>n'</span>-<a name="line-522"></a>-<a name="line-523"></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-524"></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-525"></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-526"></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-527"></a>	    <span class='keyword'>else</span> <span class='layout'>(</span> <span class='varid'>substPEref</span>-<a name="line-528"></a>		   <span class='varop'>.&gt;&gt;</span>-<a name="line-529"></a>		   <span class='varid'>traceDTD</span> <span class='str'>"substPeRefsInCondSect: parseXmlDTDdeclPart"</span>-<a name="line-530"></a>		   <span class='varop'>.&gt;&gt;</span>-<a name="line-531"></a>		   <span class='layout'>(</span> <span class='varid'>runInPeContext</span>-<a name="line-532"></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-533"></a>		       <span class='varop'>.&gt;&gt;</span>-<a name="line-534"></a>		       <span class='varid'>traceDTD</span> <span class='str'>"substPeRefsInCondSect: after parseXmlDTDdeclPart"</span>-<a name="line-535"></a>		       <span class='varop'>.&gt;&gt;</span>-<a name="line-536"></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-537"></a>		     <span class='layout'>)</span>-<a name="line-538"></a>		     <span class='varop'>`whenM`</span>-<a name="line-539"></a>		     <span class='varid'>isPeRef</span>-<a name="line-540"></a>		   <span class='layout'>)</span>-<a name="line-541"></a>		 <span class='layout'>)</span>-<a name="line-542"></a>	  <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>n'</span>-<a name="line-543"></a>	<span class='keyword'>where</span>-<a name="line-544"></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-545"></a>-<a name="line-546"></a>    <span class='varid'>substPeRefsInCondSect</span> <span class='keyword'>_</span> <span class='varid'>n'</span>-<a name="line-547"></a>	<span class='keyglyph'>=</span> <span class='varid'>thisM</span> <span class='varid'>n'</span>-<a name="line-548"></a>-<a name="line-549"></a>-<a name="line-550"></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-551"></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-552"></a>    <span class='keyglyph'>|</span> <span class='varid'>c</span> <span class='varop'>==</span> <span class='varid'>k_include</span>-<a name="line-553"></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-554"></a>	  <span class='varop'>.&gt;&gt;</span>-<a name="line-555"></a>	  <span class='varid'>traceDTD</span> <span class='str'>"evalCond: DTD part"</span>-<a name="line-556"></a>	  <span class='varop'>.&gt;&gt;</span>-<a name="line-557"></a>	  <span class='varid'>substParamEntity</span> <span class='conid'>External</span>-<a name="line-558"></a>          <span class='varop'>$</span> <span class='varid'>content</span> -<a name="line-559"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>-<a name="line-560"></a>	<span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='conid'>[]</span>-<a name="line-561"></a>    <span class='keyword'>where</span>-<a name="line-562"></a>    <span class='varid'>c</span> <span class='keyglyph'>=</span> <span class='varid'>textOfXNode</span> <span class='varid'>n</span>-<a name="line-563"></a>-<a name="line-564"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-565"></a>-<a name="line-566"></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-567"></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-568"></a>    <span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='varid'>sysVal</span>-<a name="line-569"></a>	<span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='conid'>[]</span>-<a name="line-570"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>-<a name="line-571"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-572"></a>	  <span class='varid'>checkStandalone</span>-<a name="line-573"></a>	  <span class='varid'>dtdContent</span> <span class='keyglyph'>&lt;-</span> <span class='layout'>(</span> <span class='varid'>getXmlEntityContents</span>-<a name="line-574"></a>			  <span class='varop'>.&gt;&gt;</span>-<a name="line-575"></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-576"></a>			  <span class='varop'>.&gt;&gt;</span>-<a name="line-577"></a>			  <span class='varid'>liftMf</span> <span class='varid'>getChildren</span>-<a name="line-578"></a>			  <span class='varop'>.&gt;&gt;</span>-<a name="line-579"></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-580"></a>			<span class='layout'>)</span>-<a name="line-581"></a>		       <span class='varop'>$</span> <span class='varid'>newDocument</span> <span class='varid'>sysVal</span>-<a name="line-582"></a>	  <span class='varid'>trace</span> <span class='num'>2</span> <span class='str'>"processExternalDTD: parsing DTD part done"</span>-<a name="line-583"></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-584"></a>	  <span class='varid'>return</span> <span class='varid'>dtdContent</span>-<a name="line-585"></a>    <span class='keyword'>where</span>-<a name="line-586"></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-587"></a>    <span class='varid'>checkStandalone</span>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-588"></a>			  <span class='sel'>_isAlone</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>isStandaloneDocument</span>-<a name="line-589"></a>			  <span class='keyword'>if</span> <span class='conid'>False</span> <span class='comment'>-- isAlone</span>-<a name="line-590"></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-591"></a>			     <span class='keyword'>else</span> <span class='varid'>return</span> <span class='conid'>[]</span>-<a name="line-592"></a>-<a name="line-593"></a><span class='definition'>processExternalDTD</span>  <span class='keyword'>_</span>-<a name="line-594"></a>    <span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='conid'>[]</span>-<a name="line-595"></a>-<a name="line-596"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-597"></a><span class='comment'>-- |</span>-<a name="line-598"></a><span class='comment'>-- merge the external and the internal part of a DTD into one internal part.</span>-<a name="line-599"></a><span class='comment'>-- parameter entity substitution should be made before applying this filter</span>-<a name="line-600"></a><span class='comment'>-- internal definitions shadow external ones</span>-<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'>-- preliminary: no real merge is done</span>-<a name="line-604"></a>-<a name="line-605"></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-606"></a><span class='definition'>mergeDTDs</span> <span class='varid'>dtdInt</span> <span class='varid'>dtdExt</span>-<a name="line-607"></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-608"></a>-<a name="line-609"></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-610"></a><span class='definition'>mergeDTDentry</span> <span class='varid'>dtdPart</span>-<a name="line-611"></a>    <span class='keyglyph'>=</span> <span class='varid'>none</span> <span class='varop'>`when`</span> <span class='varid'>found</span>-<a name="line-612"></a>      <span class='keyword'>where</span>-<a name="line-613"></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-614"></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-615"></a>-<a name="line-616"></a>-<a name="line-617"></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-618"></a>-<a name="line-619"></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-620"></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-621"></a>	<span class='keyglyph'>=</span> <span class='varid'>filterElement</span>-<a name="line-622"></a>	  <span class='keyword'>where</span>-<a name="line-623"></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-624"></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-625"></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-626"></a>		  <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>n</span><span class='keyglyph'>]</span>-<a name="line-627"></a>	      <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>-<a name="line-628"></a>		  <span class='keyglyph'>=</span> <span class='conid'>[]</span>-<a name="line-629"></a>	  <span class='varid'>filterElement</span> <span class='keyword'>_</span>-<a name="line-630"></a>	      <span class='keyglyph'>=</span> <span class='conid'>[]</span>-<a name="line-631"></a>-<a name="line-632"></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-633"></a>    <span class='keyglyph'>=</span> <span class='varid'>filterAttlist</span>-<a name="line-634"></a>      <span class='keyword'>where</span>-<a name="line-635"></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-636"></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-637"></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-638"></a>		<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>n</span><span class='keyglyph'>]</span>-<a name="line-639"></a>      <span class='varid'>filterAttlist</span> <span class='keyword'>_</span>-<a name="line-640"></a>	  <span class='keyglyph'>=</span> <span class='conid'>[]</span>-<a name="line-641"></a>-<a name="line-642"></a><span class='definition'>filterDTDNode</span> <span class='keyword'>_</span>-<a name="line-643"></a>    <span class='keyglyph'>=</span>  <span class='varid'>none</span>-<a name="line-644"></a>-<a name="line-645"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-646"></a>-<a name="line-647"></a><a name="predefinedEntities"></a><span class='definition'>predefinedEntities</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>-<a name="line-648"></a><span class='definition'>predefinedEntities</span>-<a name="line-649"></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-650"></a>	     <span class='layout'>,</span> <span class='str'>"&lt;!ENTITY gt   '&amp;#62;'&gt;"</span>-<a name="line-651"></a>	     <span class='layout'>,</span> <span class='str'>"&lt;!ENTITY amp  '&amp;#38;#38;'&gt;"</span>-<a name="line-652"></a>	     <span class='layout'>,</span> <span class='str'>"&lt;!ENTITY apos '&amp;#39;'&gt;"</span>-<a name="line-653"></a>	     <span class='layout'>,</span> <span class='str'>"&lt;!ENTITY quot '&amp;#34;'&gt;"</span>-<a name="line-654"></a>	     <span class='keyglyph'>]</span>-<a name="line-655"></a>-<a name="line-656"></a><a name="predefDTDPart"></a><span class='definition'>predefDTDPart</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span>-<a name="line-657"></a><span class='definition'>predefDTDPart</span>-<a name="line-658"></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-659"></a>-<a name="line-660"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-661"></a><span class='comment'>--</span>-<a name="line-662"></a><span class='comment'>-- 4.4 XML Processor Treatment of General Entities and References</span>-<a name="line-663"></a>-<a name="line-664"></a><a name="GeContext"></a><span class='keyword'>data</span> <span class='conid'>GeContext</span>-<a name="line-665"></a>    <span class='keyglyph'>=</span> <span class='conid'>ReferenceInContent</span>-<a name="line-666"></a>    <span class='keyglyph'>|</span> <span class='conid'>ReferenceInAttributeValue</span>-<a name="line-667"></a>    <span class='keyglyph'>|</span> <span class='conid'>ReferenceInEntityValue</span>-<a name="line-668"></a>    <span class='comment'>-- or OccursInAttributeValue				-- not used during substitution but during validation</span>-<a name="line-669"></a>    <span class='comment'>-- or ReferenceInDTD					-- not used: syntax check detects errors</span>-<a name="line-670"></a>-<a name="line-671"></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-672"></a>-<a name="line-673"></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-674"></a>-<a name="line-675"></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-676"></a>-<a name="line-677"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-678"></a>-<a name="line-679"></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-680"></a>-<a name="line-681"></a><a name="emptyGeEnv"></a><span class='definition'>emptyGeEnv</span>	<span class='keyglyph'>::</span> <span class='conid'>GeEnv</span>-<a name="line-682"></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-683"></a>-<a name="line-684"></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-685"></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-686"></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-687"></a>-<a name="line-688"></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-689"></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-690"></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-691"></a>-<a name="line-692"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-693"></a>-<a name="line-694"></a><span class='comment'>-- |</span>-<a name="line-695"></a><span class='comment'>-- substitution of general entities</span>-<a name="line-696"></a><span class='comment'>--</span>-<a name="line-697"></a><span class='comment'>-- input: a complete document tree including root node</span>-<a name="line-698"></a>-<a name="line-699"></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-700"></a><span class='definition'>processGeneralEntities</span>-<a name="line-701"></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-702"></a>	<span class='varop'>.&gt;&gt;</span>-<a name="line-703"></a>	<span class='varid'>processEntities</span>-<a name="line-704"></a>	<span class='varop'>.&gt;&gt;</span>-<a name="line-705"></a>	<span class='varid'>checkResult</span> <span class='str'>"in general entity processing"</span>-<a name="line-706"></a>	<span class='varop'>.&gt;&gt;</span>-<a name="line-707"></a>	<span class='varid'>traceTree</span>-<a name="line-708"></a>	<span class='varop'>.&gt;&gt;</span>-<a name="line-709"></a>	<span class='varid'>traceSource</span>-<a name="line-710"></a>      <span class='layout'>)</span>-<a name="line-711"></a>      <span class='varop'>`whenM`</span> <span class='varid'>statusOk</span>-<a name="line-712"></a>      <span class='keyword'>where</span>-<a name="line-713"></a>      <span class='varid'>processEntities</span> <span class='varid'>t'</span>-<a name="line-714"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-715"></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-716"></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-717"></a>	    <span class='keyword'>where</span>-<a name="line-718"></a>	    <span class='varid'>initialEnv</span> <span class='keyglyph'>=</span> <span class='varid'>emptyGeEnv</span>-<a name="line-719"></a>-<a name="line-720"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-721"></a>-<a name="line-722"></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-723"></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-724"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-725"></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-726"></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-727"></a>-<a name="line-728"></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-729"></a>    <span class='keyglyph'>|</span> <span class='varid'>isIntern</span>-<a name="line-730"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-731"></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-732"></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-733"></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-734"></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-735"></a>    <span class='keyglyph'>|</span> <span class='varid'>isExtern</span>-<a name="line-736"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-737"></a>	  <span class='varid'>baseUri</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getBaseURI</span>-<a name="line-738"></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-739"></a>-<a name="line-740"></a>    <span class='keyglyph'>|</span> <span class='varid'>isUnparsed</span>-<a name="line-741"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-742"></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-743"></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-744"></a>    <span class='keyword'>where</span>-<a name="line-745"></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-746"></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-747"></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-748"></a>-<a name="line-749"></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-750"></a>    <span class='comment'>-- sysVal	= lookup1 k_system al</span>-<a name="line-751"></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-752"></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-753"></a>-<a name="line-754"></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-755"></a>    <span class='varid'>processExternalEntityContents</span> <span class='varid'>cl'</span>-<a name="line-756"></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-757"></a>	    <span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='conid'>[]</span>-<a name="line-758"></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-759"></a>	    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-760"></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-761"></a>	      <span class='varid'>return</span> <span class='conid'>[]</span>-<a name="line-762"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>						<span class='comment'>-- o.k.: parse the contents</span>-<a name="line-763"></a>	    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-764"></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-765"></a>	      <span class='layout'>(</span> <span class='varid'>traceSource</span>-<a name="line-766"></a>		<span class='varop'>.&gt;&gt;</span>-<a name="line-767"></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-768"></a>	      <span class='varid'>return</span> <span class='varid'>res'</span>-<a name="line-769"></a>	<span class='keyword'>where</span>-<a name="line-770"></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-771"></a>-<a name="line-772"></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-773"></a>    <span class='varid'>insertEntity</span> <span class='varid'>name'</span> <span class='varid'>fct'</span>-<a name="line-774"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-775"></a>	  <span class='varid'>geEnv'</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getState</span>-<a name="line-776"></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-777"></a>	    <span class='conid'>Just</span> <span class='sel'>_fct</span>-<a name="line-778"></a>		<span class='keyglyph'>-&gt;</span> <span class='keyword'>do</span>-<a name="line-779"></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-780"></a>		   <span class='varid'>return</span> <span class='conid'>[]</span>-<a name="line-781"></a>            <span class='conid'>Nothing</span>-<a name="line-782"></a>		<span class='keyglyph'>-&gt;</span> <span class='keyword'>do</span>-<a name="line-783"></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-784"></a>		   <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>this</span> <span class='varid'>n</span>-<a name="line-785"></a>-<a name="line-786"></a>    <span class='comment'>-- --------</span>-<a name="line-787"></a>    <span class='comment'>--</span>-<a name="line-788"></a>    <span class='comment'>-- 4.4 XML Processor Treatment of Entities and References</span>-<a name="line-789"></a>-<a name="line-790"></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-791"></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-792"></a>	<span class='keyglyph'>=</span> <span class='varid'>included</span> <span class='varid'>nl</span> <span class='varid'>rl'</span>-<a name="line-793"></a>-<a name="line-794"></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-795"></a>	<span class='keyglyph'>=</span> <span class='varid'>includedInLiteral</span> <span class='varid'>nl</span> <span class='varid'>rl'</span>-<a name="line-796"></a>-<a name="line-797"></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-798"></a>	<span class='keyglyph'>=</span> <span class='varid'>bypassed</span> <span class='varid'>n'</span>-<a name="line-799"></a>-<a name="line-800"></a>    <span class='comment'>-- --------</span>-<a name="line-801"></a>-<a name="line-802"></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-803"></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-804"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-805"></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-806"></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-807"></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-808"></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-809"></a>	  <span class='keyword'>where</span>-<a name="line-810"></a>	  <span class='varid'>getContents'</span>	<span class='keyglyph'>::</span> <span class='conid'>GeStateFilter</span>-<a name="line-811"></a>	  <span class='varid'>getContents'</span> <span class='varid'>t''</span>-<a name="line-812"></a>	      <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-813"></a>		<span class='varid'>setBaseURI</span> <span class='varid'>baseUri'</span>-<a name="line-814"></a>		<span class='varid'>rs'</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getXmlEntityContents</span> <span class='varid'>t''</span>-<a name="line-815"></a>		<span class='varid'>processExternalEntityContents</span> <span class='varid'>rs'</span>-<a name="line-816"></a>-<a name="line-817"></a>-<a name="line-818"></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-819"></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-820"></a>	<span class='keyglyph'>=</span> <span class='varid'>includedIfValidating</span> <span class='varid'>nl</span> <span class='varid'>rl'</span>-<a name="line-821"></a>-<a name="line-822"></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-823"></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-824"></a>-<a name="line-825"></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-826"></a>	<span class='keyglyph'>=</span> <span class='varid'>bypassed</span> <span class='varid'>n'</span>-<a name="line-827"></a>-<a name="line-828"></a>    <span class='comment'>-- --------</span>-<a name="line-829"></a>-<a name="line-830"></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-831"></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-832"></a>	<span class='keyglyph'>=</span> <span class='varid'>forbidden</span> <span class='str'>"unparsed"</span> <span class='str'>"content"</span>-<a name="line-833"></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-834"></a>	<span class='keyglyph'>=</span> <span class='varid'>forbidden</span> <span class='str'>"unparsed"</span> <span class='str'>"attribute value"</span>-<a name="line-835"></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-836"></a>	<span class='keyglyph'>=</span> <span class='varid'>forbidden</span> <span class='str'>"unparsed"</span> <span class='str'>"entity value"</span>-<a name="line-837"></a>-<a name="line-838"></a>    <span class='comment'>-- --------</span>-<a name="line-839"></a>							<span class='comment'>-- see XML 1.0 chapter:</span>-<a name="line-840"></a>-<a name="line-841"></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-842"></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-843"></a>-<a name="line-844"></a>    <span class='varid'>includedIfValidating</span>				<span class='comment'>-- 4.4.3</span>-<a name="line-845"></a>	<span class='keyglyph'>=</span> <span class='varid'>included</span>-<a name="line-846"></a>-<a name="line-847"></a>    <span class='varid'>includedInLiteral</span>					<span class='comment'>-- 4.4.5</span>-<a name="line-848"></a>	<span class='keyglyph'>=</span> <span class='varid'>included</span>-<a name="line-849"></a>-<a name="line-850"></a>    <span class='varid'>bypassed</span> <span class='varid'>n'</span>						<span class='comment'>-- 4.4.7</span>-<a name="line-851"></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-852"></a>-<a name="line-853"></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-854"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-855"></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-856"></a>          <span class='varid'>return</span> <span class='conid'>[]</span>-<a name="line-857"></a>-<a name="line-858"></a>							<span class='comment'>-- normalize default value in ATTLIST</span>-<a name="line-859"></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-860"></a>    <span class='keyglyph'>|</span> <span class='varid'>hasDefaultValue</span>-<a name="line-861"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-862"></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-863"></a>                   <span class='varop'>.&gt;&gt;</span>-<a name="line-864"></a>		   <span class='varid'>substGeneralEntityInAValue</span> <span class='varid'>rl</span>-<a name="line-865"></a>		 <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>mkXTextTree</span> <span class='varid'>defaultValue</span>-<a name="line-866"></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-867"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>-<a name="line-868"></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-869"></a>    <span class='keyword'>where</span>-<a name="line-870"></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-871"></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-872"></a>-<a name="line-873"></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-874"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-875"></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-876"></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-877"></a>      <span class='varid'>geEnv</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getState</span>-<a name="line-878"></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-879"></a>        <span class='conid'>Just</span> <span class='varid'>fct</span>-<a name="line-880"></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-881"></a>	     <span class='keyword'>then</span> <span class='keyword'>do</span>-<a name="line-882"></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-883"></a>		  <span class='varid'>return</span> <span class='varid'>nl</span>-<a name="line-884"></a>	     <span class='keyword'>else</span> <span class='keyword'>do</span>-<a name="line-885"></a>		  <span class='varid'>fct</span> <span class='varid'>cx</span> <span class='varid'>rl</span> <span class='varid'>n</span>-<a name="line-886"></a>        <span class='conid'>Nothing</span>-<a name="line-887"></a>	  <span class='keyglyph'>-&gt;</span> <span class='keyword'>do</span>-<a name="line-888"></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-889"></a>	     <span class='varid'>return</span> <span class='varid'>nl</span>-<a name="line-890"></a>      <span class='keyword'>where</span>-<a name="line-891"></a>      <span class='varid'>nl</span>  <span class='keyglyph'>=</span> <span class='varid'>this</span> <span class='varid'>n</span>-<a name="line-892"></a>      <span class='varid'>ref</span> <span class='keyglyph'>=</span> <span class='varid'>xshow</span> <span class='varid'>nl</span>-<a name="line-893"></a>-<a name="line-894"></a>-<a name="line-895"></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-896"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-897"></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-898"></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-899"></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-900"></a>-<a name="line-901"></a><span class='definition'>processGeneralEntity</span> <span class='sel'>_cx</span> <span class='sel'>_rl</span> <span class='varid'>n</span>-<a name="line-902"></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-903"></a>-<a name="line-904"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-905"></a>-<a name="line-906"></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-907"></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-908"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-909"></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-910"></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-911"></a>-<a name="line-912"></a><span class='definition'>substGeneralEntityInAttr</span> <span class='keyword'>_</span> <span class='keyword'>_</span>-<a name="line-913"></a>    <span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='conid'>[]</span>-<a name="line-914"></a>-<a name="line-915"></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-916"></a><span class='definition'>substGeneralEntityInAValue</span> <span class='varid'>rl</span>-<a name="line-917"></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-918"></a>	<span class='varop'>`whenM`</span>-<a name="line-919"></a>	<span class='varid'>isXEntityRef</span>-<a name="line-920"></a>      <span class='layout'>)</span>-<a name="line-921"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-922"></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-923"></a>	      <span class='varop'>.&gt;</span>-<a name="line-924"></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-925"></a>	    <span class='layout'>)</span>-<a name="line-926"></a>      <span class='keyword'>where</span>-<a name="line-927"></a>      <span class='varid'>normalizeWhiteSpace</span>-<a name="line-928"></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-929"></a>-<a name="line-930"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-931"></a>-<a name="line-932"></a>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-Parser-DefaultURI.html
@@ -1,59 +0,0 @@-<!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><span class='comment'>--</span>-<a name="line-7"></a><span class='comment'>-- Version : $Id: DefaultURI.hs,v 1.4 2006/03/02 10:13:57 hxml Exp $</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'>DefaultURI</span>-<a name="line-10"></a>    <span class='layout'>(</span> <span class='varid'>setDefaultURI</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>-<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>-<a name="line-19"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>Directory</span>-<a name="line-20"></a>    <span class='layout'>(</span> <span class='varid'>getCurrentDirectory</span>-<a name="line-21"></a>    <span class='layout'>)</span>-<a name="line-22"></a>-<a name="line-23"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>URI</span>-<a name="line-24"></a>    <span class='layout'>(</span> <span class='varid'>escapeURIChar</span>-<a name="line-25"></a>    <span class='layout'>,</span> <span class='varid'>isUnescapedInURI</span>-<a name="line-26"></a>    <span class='layout'>)</span>-<a name="line-27"></a>-<a name="line-28"></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-29"></a><span class='definition'>setDefaultURI</span>-<a name="line-30"></a>     <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-31"></a>       <span class='varid'>wd</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>io</span> <span class='varid'>getCurrentDirectory</span>-<a name="line-32"></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-33"></a>-<a name="line-34"></a>       <span class='keyword'>where</span>-<a name="line-35"></a>-<a name="line-36"></a>       <span class='comment'>-- under Windows getCurrentDirectory returns something like: "c:\path\to\file"</span>-<a name="line-37"></a>       <span class='comment'>-- backslaches are not allowed in URIs and paths must start with a /</span>-<a name="line-38"></a>       <span class='comment'>-- so this is transformed into "/c:/path/to/file"</span>-<a name="line-39"></a>-<a name="line-40"></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-41"></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-42"></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-43"></a>       <span class='varid'>normalize</span> <span class='varid'>wd'</span>-<a name="line-44"></a>	   <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='varid'>escapeNonUriChar</span> <span class='varid'>wd'</span>-<a name="line-45"></a>				 -<a name="line-46"></a>       <span class='varid'>win32ToUriChar</span> <span class='chr'>'\\'</span> <span class='keyglyph'>=</span> <span class='str'>"/"</span>-<a name="line-47"></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-48"></a>-<a name="line-49"></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>
− doc/hdoc/src/Text-XML-HXT-Parser-HtmlParser.html
@@ -1,180 +0,0 @@-<!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>
− doc/hdoc/src/Text-XML-HXT-Parser-MainFunctions.html
@@ -1,468 +0,0 @@-<!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'>-- Version : $Id: MainFunctions.hs,v 1.2 2004/11/20 16:53:15 hxml Exp $</span>-<a name="line-5"></a><span class='comment'>--</span>-<a name="line-6"></a><span class='comment'>--</span>-<a name="line-7"></a><span class='comment'>-- the main building blocks for an application.</span>-<a name="line-8"></a><span class='comment'>-- this module exports complex filters and functions for</span>-<a name="line-9"></a><span class='comment'>-- common tasks for input and parsing, output and option handling.</span>-<a name="line-10"></a><span class='comment'>--</span>-<a name="line-11"></a>-<a name="line-12"></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-13"></a>    <span class='layout'>(</span> <span class='varid'>getXmlDocument</span>-<a name="line-14"></a>    <span class='layout'>,</span> <span class='varid'>putXmlDocument</span>-<a name="line-15"></a>-<a name="line-16"></a>    <span class='layout'>,</span> <span class='varid'>parseDocument</span>-<a name="line-17"></a>    <span class='layout'>,</span> <span class='varid'>writeDocument</span>-<a name="line-18"></a>    <span class='layout'>)</span>-<a name="line-19"></a><span class='keyword'>where</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'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</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'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</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'>HtmlParser</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'>Parser</span><span class='varop'>.</span><span class='conid'>XmlInput</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'>Parser</span><span class='varop'>.</span><span class='conid'>XmlOutput</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'>DTDProcessing</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'>Validator</span><span class='varop'>.</span><span class='conid'>Validation</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'>DOM</span><span class='varop'>.</span><span class='conid'>EditFilters</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'>DOM</span><span class='varop'>.</span><span class='conid'>Namespace</span>-<a name="line-30"></a>-<a name="line-31"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>IO</span>-<a name="line-32"></a>-<a name="line-33"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-34"></a>-<a name="line-35"></a><span class='comment'>-- |</span>-<a name="line-36"></a><span class='comment'>-- convenient function for reading a XML document without</span>-<a name="line-37"></a><span class='comment'>-- dealing with state monads, error messages collection and other details</span>-<a name="line-38"></a><span class='comment'>--</span>-<a name="line-39"></a><span class='comment'>-- getXmlDocument calls 'parseDocument' with the list of parsing options</span>-<a name="line-40"></a><span class='comment'>-- and an url or filename as document source.</span>-<a name="line-41"></a><span class='comment'>--</span>-<a name="line-42"></a><span class='comment'>-- result is a triple</span>-<a name="line-43"></a><span class='comment'>--</span>-<a name="line-44"></a><span class='comment'>-- * the resulting document tree with a root node containing all</span>-<a name="line-45"></a><span class='comment'>--   meta info about the document (options, status info, http header, ...)</span>-<a name="line-46"></a><span class='comment'>--</span>-<a name="line-47"></a><span class='comment'>-- - the list of errors and warnings</span>-<a name="line-48"></a><span class='comment'>--</span>-<a name="line-49"></a><span class='comment'>-- - the error level: one of 'c_ok', 'c_warn', 'c_err', 'c_fatal'</span>-<a name="line-50"></a><span class='comment'>--</span>-<a name="line-51"></a><span class='comment'>-- example for input (see also example in 'putXmlDocument' and example in 'writeDocument')</span>-<a name="line-52"></a><span class='comment'>--</span>-<a name="line-53"></a><span class='comment'>-- &gt; main :: IO ()</span>-<a name="line-54"></a><span class='comment'>-- &gt; main</span>-<a name="line-55"></a><span class='comment'>-- &gt;   = do</span>-<a name="line-56"></a><span class='comment'>-- &gt;     (res, errs, rc) &lt;- getXmlDocument [] "test.xml"</span>-<a name="line-57"></a><span class='comment'>-- &gt;     if rc &gt;= c_err</span>-<a name="line-58"></a><span class='comment'>-- &gt;       then issueErrors errs</span>-<a name="line-59"></a><span class='comment'>-- &gt;       else processTree res</span>-<a name="line-60"></a><span class='comment'>-- &gt;</span>-<a name="line-61"></a><span class='comment'>-- &gt; issueErrors :: XmlTrees -&gt; IO ()</span>-<a name="line-62"></a><span class='comment'>-- &gt;</span>-<a name="line-63"></a><span class='comment'>-- &gt; processTree :: XmlTree  -&gt; IO ()</span>-<a name="line-64"></a><span class='comment'>--</span>-<a name="line-65"></a><span class='comment'>-- for options see 'parseDocument', 'a_collect_errors' is set implicitly</span>-<a name="line-66"></a>-<a name="line-67"></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-68"></a><span class='definition'>getXmlDocument</span> <span class='varid'>options</span> <span class='varid'>url</span>-<a name="line-69"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-70"></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-71"></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-72"></a>		     <span class='keyglyph'>]</span>					<span class='comment'>-- can be overwritten by supporting other values in options</span>-<a name="line-73"></a>	             <span class='varop'>++</span>-<a name="line-74"></a>		     <span class='varid'>options</span>-<a name="line-75"></a>		     <span class='varop'>++</span>-<a name="line-76"></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-77"></a>		     <span class='keyglyph'>]</span>-<a name="line-78"></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-79"></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-80"></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-81"></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-82"></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-83"></a>-<a name="line-84"></a>-<a name="line-85"></a><span class='comment'>-- |</span>-<a name="line-86"></a><span class='comment'>-- the inverse operation to 'getXmlDocument'</span>-<a name="line-87"></a><span class='comment'>--</span>-<a name="line-88"></a><span class='comment'>-- writes a complete document tree to a file, writing can be</span>-<a name="line-89"></a><span class='comment'>-- controlled by options, the real work is done with filter 'writeDocument'.</span>-<a name="line-90"></a><span class='comment'>-- useful options are the options of 'writeDocument'.</span>-<a name="line-91"></a><span class='comment'>--</span>-<a name="line-92"></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-93"></a><span class='comment'>-- the status info of the write filter</span>-<a name="line-94"></a><span class='comment'>--</span>-<a name="line-95"></a><span class='comment'>-- this filter is useful, when processing XML in an arbitray context in the IO monad</span>-<a name="line-96"></a><span class='comment'>--</span>-<a name="line-97"></a><span class='comment'>-- an example main program for such an application is:</span>-<a name="line-98"></a><span class='comment'>--</span>-<a name="line-99"></a><span class='comment'>-- &gt; main :: IO ()</span>-<a name="line-100"></a><span class='comment'>-- &gt; main</span>-<a name="line-101"></a><span class='comment'>-- &gt;   = do</span>-<a name="line-102"></a><span class='comment'>-- &gt;     (input, readErrs, rc) &lt;- getXmlDocument [...] "test.xml"</span>-<a name="line-103"></a><span class='comment'>-- &gt;     if rc &gt;= c_err</span>-<a name="line-104"></a><span class='comment'>-- &gt;       then issueErrors readErrs</span>-<a name="line-105"></a><span class='comment'>-- &gt;       else processTree input</span>-<a name="line-106"></a><span class='comment'>-- &gt;</span>-<a name="line-107"></a><span class='comment'>-- &gt; processTree :: XmlTree -&gt; IO ()</span>-<a name="line-108"></a><span class='comment'>-- &gt; processTree t</span>-<a name="line-109"></a><span class='comment'>-- &gt;   = let res = computeNewTree input</span>-<a name="line-110"></a><span class='comment'>-- &gt;     in do</span>-<a name="line-111"></a><span class='comment'>-- &gt;        (writeErrs, rc2) &lt;- putXmlDocument [...] "out.xml" res</span>-<a name="line-112"></a><span class='comment'>-- &gt;        if rc2 &gt;= c_err</span>-<a name="line-113"></a><span class='comment'>-- &gt;          then issueErrors writeErrs</span>-<a name="line-114"></a><span class='comment'>-- &gt;          else return ()</span>-<a name="line-115"></a><span class='comment'>-- &gt;</span>-<a name="line-116"></a><span class='comment'>-- &gt; issueErrors :: XmlTrees -&gt; IO ()</span>-<a name="line-117"></a><span class='comment'>-- &gt;</span>-<a name="line-118"></a><span class='comment'>-- &gt; computeNewTree :: XmlTree -&gt; XmlTree</span>-<a name="line-119"></a>-<a name="line-120"></a>-<a name="line-121"></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-122"></a><span class='definition'>putXmlDocument</span> <span class='varid'>options</span> <span class='varid'>fileName</span> <span class='varid'>t</span>-<a name="line-123"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-124"></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-125"></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-126"></a>		     <span class='keyglyph'>]</span>					<span class='comment'>-- can be overwritten by supporting other values in options</span>-<a name="line-127"></a>	             <span class='varop'>++</span>-<a name="line-128"></a>		     <span class='varid'>options</span>-<a name="line-129"></a>		     <span class='varop'>++</span>-<a name="line-130"></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-131"></a>		     <span class='keyglyph'>]</span>-<a name="line-132"></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-133"></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-134"></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-135"></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-136"></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-137"></a>-<a name="line-138"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-139"></a>-<a name="line-140"></a><span class='comment'>-- |</span>-<a name="line-141"></a><span class='comment'>-- the main parsing filter</span>-<a name="line-142"></a><span class='comment'>--</span>-<a name="line-143"></a><span class='comment'>-- this filter can be configured by an option list, a list of</span>-<a name="line-144"></a><span class='comment'>-- option name, option value pairs.</span>-<a name="line-145"></a><span class='comment'>-- the input tree must be a possibly empty document root tree.</span>-<a name="line-146"></a><span class='comment'>-- all the options are stored as attributes in this root node to control processing.</span>-<a name="line-147"></a><span class='comment'>--</span>-<a name="line-148"></a><span class='comment'>-- available options:</span>-<a name="line-149"></a><span class='comment'>--</span>-<a name="line-150"></a><span class='comment'>-- * 'a_parse_html': use HTML parser, else use XML parser (default)</span>-<a name="line-151"></a><span class='comment'>--</span>-<a name="line-152"></a><span class='comment'>-- - 'a_validate' : validate document (default), else skip validation</span>-<a name="line-153"></a><span class='comment'>--</span>-<a name="line-154"></a><span class='comment'>-- - 'a_check_namespaces' : check namespaces, else skip namespace processing (default)</span>-<a name="line-155"></a><span class='comment'>--</span>-<a name="line-156"></a><span class='comment'>-- - 'a_canonicalize' : canonicalize document (default), else skip canonicalization</span>-<a name="line-157"></a><span class='comment'>--</span>-<a name="line-158"></a><span class='comment'>-- - 'a_preserve_comment' : preserve comments during canonicalization, else remove comments (default)</span>-<a name="line-159"></a><span class='comment'>--</span>-<a name="line-160"></a><span class='comment'>-- - 'a_remove_whitespace' : remove all whitespace, used for document indentation, else skip this step (default)</span>-<a name="line-161"></a><span class='comment'>--</span>-<a name="line-162"></a><span class='comment'>-- - 'a_indent' : indent document by inserting whitespace, else skip this step (default)</span>-<a name="line-163"></a><span class='comment'>--</span>-<a name="line-164"></a><span class='comment'>-- - 'a_issue_warnings' : issue warnings, when parsing HTML (default), else ignore HTML parser warnings</span>-<a name="line-165"></a><span class='comment'>--</span>-<a name="line-166"></a><span class='comment'>-- - 'a_issue_errors' : issue all error messages on stderr (default), or ignore all error messages</span>-<a name="line-167"></a><span class='comment'>--</span>-<a name="line-168"></a><span class='comment'>-- - 'a_collect_errors' : all error messages are collected during processing and appended to the result document</span>-<a name="line-169"></a><span class='comment'>-- 			  for further processing within the calling modules</span>-<a name="line-170"></a><span class='comment'>--</span>-<a name="line-171"></a><span class='comment'>-- - 'a_trace' : trace level: values: 0 -4</span>-<a name="line-172"></a><span class='comment'>--</span>-<a name="line-173"></a><span class='comment'>-- - 'a_proxy' : proxy for http access, e.g. www-cache:3128</span>-<a name="line-174"></a><span class='comment'>--</span>-<a name="line-175"></a><span class='comment'>-- - 'a_use_curl' : for http access via external programm curl, default is native HTTP access</span>-<a name="line-176"></a><span class='comment'>--</span>-<a name="line-177"></a><span class='comment'>-- - 'a_options_curl' : more options for external program curl</span>-<a name="line-178"></a><span class='comment'>--</span>-<a name="line-179"></a><span class='comment'>-- - 'a_source' : the document source url</span>-<a name="line-180"></a><span class='comment'>--</span>-<a name="line-181"></a><span class='comment'>-- - 'a_encoding' : default document encoding ('utf8', 'isoLatin1', 'usAscii', ...)</span>-<a name="line-182"></a><span class='comment'>--</span>-<a name="line-183"></a><span class='comment'>-- examples:</span>-<a name="line-184"></a><span class='comment'>--</span>-<a name="line-185"></a><span class='comment'>-- &gt; parseDocument [ (a_source,   "test.xml")</span>-<a name="line-186"></a><span class='comment'>-- &gt;               , (a_validate, "0")</span>-<a name="line-187"></a><span class='comment'>-- &gt;               , (a_encoding, isoLatin1)</span>-<a name="line-188"></a><span class='comment'>-- &gt;               ] emptyRoot</span>-<a name="line-189"></a><span class='comment'>--</span>-<a name="line-190"></a><span class='comment'>-- reads document \"test.xml\" without validation and default encoding 'isoLatin1'</span>-<a name="line-191"></a><span class='comment'>--</span>-<a name="line-192"></a><span class='comment'>-- &gt; parseDocument [ (a_source,         "<a href="http://www.haskell.org/">http://www.haskell.org/</a>")</span>-<a name="line-193"></a><span class='comment'>-- &gt;               , (a_parse_html,     "1")</span>-<a name="line-194"></a><span class='comment'>-- &gt;               , (a_proxy,          "www-cache:3128")</span>-<a name="line-195"></a><span class='comment'>-- &gt;               , (a_curl,           "1")</span>-<a name="line-196"></a><span class='comment'>-- &gt;               , (a_issue_warnings, "0")</span>-<a name="line-197"></a><span class='comment'>-- &gt;               ] emptyRoot</span>-<a name="line-198"></a><span class='comment'>--</span>-<a name="line-199"></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-200"></a><span class='comment'>--</span>-<a name="line-201"></a><span class='comment'>-- &gt; parseDocument [ (a_source,            "<a href="http://www.w3c.org/">http://www.w3c.org/</a>")</span>-<a name="line-202"></a><span class='comment'>-- &gt;               , (a_parse_html,        "0")                       -- default</span>-<a name="line-203"></a><span class='comment'>-- &gt;               , (a_validate,          "1")                       -- default</span>-<a name="line-204"></a><span class='comment'>-- &gt;               , (a_check_namespace,   "1")</span>-<a name="line-205"></a><span class='comment'>-- &gt;               , (a_remove_whitespace, "1")</span>-<a name="line-206"></a><span class='comment'>-- &gt;               , (a_trace,             "2")</span>-<a name="line-207"></a><span class='comment'>-- &gt;               ] emptyRoot</span>-<a name="line-208"></a><span class='comment'>--</span>-<a name="line-209"></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-210"></a><span class='comment'>--</span>-<a name="line-211"></a><span class='comment'>-- &gt; parseDocument [ (a_source,   "test.xml")</span>-<a name="line-212"></a><span class='comment'>-- &gt;               , (a_validate,        "1")</span>-<a name="line-213"></a><span class='comment'>-- &gt;               , (a_check_namespace, "1")</span>-<a name="line-214"></a><span class='comment'>-- &gt;               , (a_collect_errors,  "1")</span>-<a name="line-215"></a><span class='comment'>-- &gt;               , (a_issue_errors,    "0")</span>-<a name="line-216"></a><span class='comment'>-- &gt;               ] emptyRoot</span>-<a name="line-217"></a><span class='comment'>--</span>-<a name="line-218"></a><span class='comment'>-- reads file \"test.xml\", validates it, checks namespaces, does not issue any erros</span>-<a name="line-219"></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-220"></a><span class='comment'>-- this enables the calling application to define own error handlers.</span>-<a name="line-221"></a>-<a name="line-222"></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-223"></a><span class='definition'>parseDocument</span> <span class='varid'>userOptions</span>-<a name="line-224"></a>    <span class='keyglyph'>=</span> <span class='varid'>processDocument</span> <span class='varid'>userOptions</span> <span class='varid'>defaultOptions</span>-<a name="line-225"></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-226"></a>	<span class='varop'>.&gt;&gt;</span>-<a name="line-227"></a>	<span class='varid'>traceTree</span>-<a name="line-228"></a>	<span class='varop'>.&gt;&gt;</span>-<a name="line-229"></a>	<span class='varid'>getXmlContents</span>					<span class='comment'>-- get the content as text</span>-<a name="line-230"></a>	<span class='varop'>.&gt;&gt;</span>-<a name="line-231"></a>	<span class='varid'>choiceM</span>						<span class='comment'>-- select parser</span>-<a name="line-232"></a>	<span class='keyglyph'>[</span> <span class='varid'>hasOption</span> <span class='varid'>a_parse_html</span>-<a name="line-233"></a>		<span class='conop'>:-&gt;</span> <span class='varid'>parseHtmlDoc</span>			<span class='comment'>-- parse everything as HTML</span>-<a name="line-234"></a>	<span class='layout'>,</span> <span class='varid'>this</span>-<a name="line-235"></a>		<span class='conop'>:-&gt;</span> <span class='varid'>checkWellformedDoc</span>			<span class='comment'>-- parse XML and process entities</span>-<a name="line-236"></a>	            <span class='varop'>.&gt;&gt;</span>-<a name="line-237"></a>                    <span class='layout'>(</span> <span class='varid'>getValidatedDoc</span>			<span class='comment'>-- validate</span>-<a name="line-238"></a>		      <span class='varop'>`whenM`</span>-<a name="line-239"></a>		      <span class='varid'>hasOption</span> <span class='varid'>a_validate</span>-<a name="line-240"></a>		    <span class='layout'>)</span>-<a name="line-241"></a>	<span class='keyglyph'>]</span>-<a name="line-242"></a>	<span class='varop'>.&gt;&gt;</span>-<a name="line-243"></a>	<span class='layout'>(</span> <span class='varid'>propagateAndValidateNamespaces</span>			<span class='comment'>-- namespace processing</span>-<a name="line-244"></a>	  <span class='varop'>`whenM`</span>-<a name="line-245"></a>	  <span class='varid'>hasOption</span> <span class='varid'>a_check_namespaces</span>-<a name="line-246"></a>	<span class='layout'>)</span>-<a name="line-247"></a>	<span class='varop'>.&gt;&gt;</span>-<a name="line-248"></a>	<span class='varid'>liftMf</span>						<span class='comment'>-- canonicalization</span>-<a name="line-249"></a>	<span class='layout'>(</span> <span class='varid'>choice</span>-<a name="line-250"></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-251"></a> 	  	<span class='conop'>:-&gt;</span> <span class='varid'>canonicalizeForXPath</span>-<a name="line-252"></a>	  <span class='layout'>,</span> <span class='varid'>this</span>-<a name="line-253"></a>		<span class='conop'>:-&gt;</span> <span class='varid'>canonicalizeAllNodes</span>		<span class='comment'>-- do normal canonicaliazion</span>-<a name="line-254"></a>	  <span class='keyglyph'>]</span>-<a name="line-255"></a>	  <span class='varop'>`when`</span>-<a name="line-256"></a>	  <span class='varid'>hasOption</span> <span class='varid'>a_canonicalize</span>			<span class='comment'>-- caconicalization can be switched off</span>-<a name="line-257"></a>	<span class='layout'>)</span>-<a name="line-258"></a>	<span class='varop'>.&gt;&gt;</span>-<a name="line-259"></a>	<span class='varid'>liftMf</span>-<a name="line-260"></a>	<span class='layout'>(</span> <span class='varid'>removeDocWhiteSpace</span>				<span class='comment'>-- remove all whitespace between tags</span>-<a name="line-261"></a>	  <span class='varop'>`when`</span>-<a name="line-262"></a>	  <span class='varid'>hasOption</span> <span class='varid'>a_remove_whitespace</span>-<a name="line-263"></a>	<span class='layout'>)</span>-<a name="line-264"></a>	<span class='varop'>.&gt;&gt;</span>-<a name="line-265"></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-266"></a>	<span class='varop'>.&gt;&gt;</span>-<a name="line-267"></a>	<span class='varid'>traceSource</span>-<a name="line-268"></a>	<span class='varop'>.&gt;&gt;</span>-<a name="line-269"></a>	<span class='varid'>traceTree</span>-<a name="line-270"></a>      <span class='layout'>)</span>-<a name="line-271"></a>    <span class='keyword'>where</span>-<a name="line-272"></a>    <span class='varid'>defaultOptions</span>-<a name="line-273"></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-274"></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-275"></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-276"></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-277"></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-278"></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-279"></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-280"></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-281"></a>	  <span class='keyglyph'>]</span>-<a name="line-282"></a>-<a name="line-283"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-284"></a>-<a name="line-285"></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-286"></a><span class='definition'>addOptions</span>-<a name="line-287"></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-288"></a>-<a name="line-289"></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-290"></a><span class='definition'>addDefaultOptions</span>-<a name="line-291"></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-292"></a>-<a name="line-293"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-294"></a>-<a name="line-295"></a><span class='comment'>-- |</span>-<a name="line-296"></a><span class='comment'>-- the main filter for writing documents</span>-<a name="line-297"></a><span class='comment'>--</span>-<a name="line-298"></a><span class='comment'>-- this filter can be configured by an option list like 'getXmlDocument'</span>-<a name="line-299"></a><span class='comment'>--</span>-<a name="line-300"></a><span class='comment'>-- available options are</span>-<a name="line-301"></a><span class='comment'>--</span>-<a name="line-302"></a><span class='comment'>-- * 'a_indent' : indent document for readability, (default: no indentation)</span>-<a name="line-303"></a><span class='comment'>--</span>-<a name="line-304"></a><span class='comment'>-- - 'a_remove_whitespace' : remove all redundant whitespace for shorten text (default: no removal)</span>-<a name="line-305"></a><span class='comment'>--</span>-<a name="line-306"></a><span class='comment'>-- - 'a_output_file' : destination file for document, default is \"-\" for stdout</span>-<a name="line-307"></a><span class='comment'>--</span>-<a name="line-308"></a><span class='comment'>-- - 'a_output_encoding' : encoding of document, default is 'a_encoding' or 'utf8'</span>-<a name="line-309"></a><span class='comment'>--</span>-<a name="line-310"></a><span class='comment'>-- - 'a_output_xml' : (default) issue XML: quote special XML chars \&gt;,\&lt;,\",\',&amp;</span>-<a name="line-311"></a><span class='comment'>--                    add XML processing instruction</span>-<a name="line-312"></a><span class='comment'>--                    and encode document with respect to 'a_output_encoding',</span>-<a name="line-313"></a><span class='comment'>--                    if explizitly switched of, the plain text is issued, this is useful</span>-<a name="line-314"></a><span class='comment'>--                    for non XML output, e.g. generated Haskell code, LaTex, Java, ...</span>-<a name="line-315"></a><span class='comment'>--</span>-<a name="line-316"></a><span class='comment'>-- - 'a_show_tree' : show tree representation of document (for debugging)</span>-<a name="line-317"></a><span class='comment'>--</span>-<a name="line-318"></a><span class='comment'>-- - 'a_show_haskell' : show Haskell representaion of document (for debugging)</span>-<a name="line-319"></a><span class='comment'>--</span>-<a name="line-320"></a><span class='comment'>-- - 'a_issue_errors', 'a_collect_errors' : see 'parseDocument'</span>-<a name="line-321"></a><span class='comment'>--</span>-<a name="line-322"></a><span class='comment'>--  a typical main program running in the XmlState monad</span>-<a name="line-323"></a><span class='comment'>--  has the following structure:</span>-<a name="line-324"></a><span class='comment'>--</span>-<a name="line-325"></a><span class='comment'>-- &gt;</span>-<a name="line-326"></a><span class='comment'>-- &gt; main :: IO ()</span>-<a name="line-327"></a><span class='comment'>-- &gt; main</span>-<a name="line-328"></a><span class='comment'>-- &gt;     = do</span>-<a name="line-329"></a><span class='comment'>-- &gt;       argv &lt;- getArgs                                              -- get the commandline arguments</span>-<a name="line-330"></a><span class='comment'>-- &gt;       (inp, outp, options) &lt;- cmdlineOpts argv                     -- and evaluate them, return a key-value list</span>-<a name="line-331"></a><span class='comment'>-- &gt;                                                                    -- and input and output</span>-<a name="line-332"></a><span class='comment'>-- &gt;       res  &lt;- run' $ application inp outp options $ emptyRoot      -- run the application</span>-<a name="line-333"></a><span class='comment'>-- &gt; </span>-<a name="line-334"></a><span class='comment'>-- &gt;       exitWith (if null res</span>-<a name="line-335"></a><span class='comment'>-- &gt;                 then ExitFailure (-1)</span>-<a name="line-336"></a><span class='comment'>-- &gt;                 else exitSuccess</span>-<a name="line-337"></a><span class='comment'>-- &gt;                )</span>-<a name="line-338"></a><span class='comment'>-- &gt;</span>-<a name="line-339"></a><span class='comment'>-- &gt; application :: String -&gt; String -&gt; Attributes -&gt; XmlStateFilter ()</span>-<a name="line-340"></a><span class='comment'>-- &gt; application inp outp al</span>-<a name="line-341"></a><span class='comment'>-- &gt;   = parseDocument (al ++ [(a_source, inp)])                        -- set options and source</span>-<a name="line-342"></a><span class='comment'>-- &gt;     .&gt;&gt;                                                            -- and parse document</span>-<a name="line-343"></a><span class='comment'>-- &gt;     processDocument                                                -- the hard work</span>-<a name="line-344"></a><span class='comment'>-- &gt;     .&gt;&gt;</span>-<a name="line-345"></a><span class='comment'>-- &gt;     writeDocument [(a_output_file, outp)]                          -- issue results</span>-<a name="line-346"></a><span class='comment'>-- &gt;     .&gt;&gt;</span>-<a name="line-347"></a><span class='comment'>-- &gt;     checkStatus                                                    -- check errors</span>-<a name="line-348"></a><span class='comment'>-- &gt;</span>-<a name="line-349"></a>-<a name="line-350"></a>-<a name="line-351"></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-352"></a><span class='definition'>writeDocument</span> <span class='varid'>userOptions</span>-<a name="line-353"></a>    <span class='keyglyph'>=</span> <span class='varid'>processDocument</span> <span class='varid'>userOptions</span> <span class='varid'>defaultOptions</span>-<a name="line-354"></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-355"></a>	<span class='varop'>.&gt;&gt;</span>-<a name="line-356"></a>	<span class='varid'>liftMf</span>-<a name="line-357"></a>	<span class='layout'>(</span> <span class='varid'>choice</span>-<a name="line-358"></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-359"></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-360"></a>	  <span class='layout'>,</span> <span class='varid'>this</span>				<span class='conop'>:-&gt;</span> <span class='varid'>this</span>-<a name="line-361"></a>	  <span class='keyglyph'>]</span>-<a name="line-362"></a>	<span class='layout'>)</span>-<a name="line-363"></a>	<span class='varop'>.&gt;&gt;</span>-<a name="line-364"></a>	<span class='varid'>liftMf</span>-<a name="line-365"></a>	<span class='layout'>(</span> <span class='varid'>choice</span>-<a name="line-366"></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-367"></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-368"></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-369"></a>					      <span class='varop'>.&gt;</span>-<a name="line-370"></a>					      <span class='varid'>addXmlPiToDoc</span>		<span class='comment'>-- add &lt;?xml ... &gt; pi</span>-<a name="line-371"></a>					      <span class='varop'>.&gt;</span>-<a name="line-372"></a>					      <span class='varid'>unparseXmlDoc</span>		<span class='comment'>-- convert doc into text with respect to output encoding</span>-<a name="line-373"></a>					    <span class='layout'>)</span>-<a name="line-374"></a>	  <span class='layout'>,</span> <span class='varid'>this</span>			<span class='conop'>:-&gt;</span> <span class='varid'>this</span>-<a name="line-375"></a>	  <span class='keyglyph'>]</span>-<a name="line-376"></a>	<span class='layout'>)</span>-<a name="line-377"></a>	<span class='varop'>.&gt;&gt;</span>-<a name="line-378"></a>	<span class='varid'>writeXmlDoc</span>-<a name="line-379"></a>	<span class='varop'>.&gt;&gt;</span>-<a name="line-380"></a>	<span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='str'>"writeDocument: finished"</span>-<a name="line-381"></a>      <span class='layout'>)</span>-<a name="line-382"></a>    <span class='keyword'>where</span>-<a name="line-383"></a>    <span class='varid'>defaultOptions</span>-<a name="line-384"></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-385"></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-386"></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-387"></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-388"></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-389"></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-390"></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-391"></a>	  <span class='keyglyph'>]</span>-<a name="line-392"></a>-<a name="line-393"></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-394"></a><span class='definition'>writeXmlDoc</span> <span class='varid'>t'</span>-<a name="line-395"></a>    <span class='keyglyph'>=</span> <span class='varid'>put</span> <span class='varid'>t'</span>-<a name="line-396"></a>    <span class='keyword'>where</span>-<a name="line-397"></a>    <span class='varid'>put</span>-<a name="line-398"></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-399"></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-400"></a>-<a name="line-401"></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-402"></a>-<a name="line-403"></a>-<a name="line-404"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-405"></a><span class='comment'>--</span>-<a name="line-406"></a>-<a name="line-407"></a><span class='comment'>-- |</span>-<a name="line-408"></a><span class='comment'>-- wrapper filter for running a monadic filter</span>-<a name="line-409"></a><span class='comment'>-- controlled by common options</span>-<a name="line-410"></a><span class='comment'>--</span>-<a name="line-411"></a><span class='comment'>-- input tree must be a complete document</span>-<a name="line-412"></a><span class='comment'>-- parameters and default parameters can be used to contol</span>-<a name="line-413"></a><span class='comment'>-- the filer and common tasks like error message handling</span>-<a name="line-414"></a>-<a name="line-415"></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-416"></a><span class='definition'>processDocument</span> <span class='varid'>userOptions</span> <span class='varid'>defaultOptions</span> <span class='varid'>processFilter</span>-<a name="line-417"></a>    <span class='keyglyph'>=</span> <span class='varid'>liftMf</span> <span class='varid'>isRoot</span>-<a name="line-418"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-419"></a>      <span class='varid'>liftMf</span> <span class='layout'>(</span><span class='varid'>addOptions</span> <span class='varid'>userOptions</span>-<a name="line-420"></a>	      <span class='varop'>.&gt;</span>-<a name="line-421"></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-422"></a>	     <span class='layout'>)</span>-<a name="line-423"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-424"></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-425"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-426"></a>      <span class='varid'>setSystemParams</span>							<span class='comment'>-- store options in system state</span>-<a name="line-427"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-428"></a>      <span class='varid'>choiceM</span>-<a name="line-429"></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-430"></a>		<span class='conop'>:-&gt;</span> <span class='varid'>thisM</span>-<a name="line-431"></a>-<a name="line-432"></a>      <span class='layout'>,</span> <span class='varid'>hasOption</span> <span class='varid'>a_collect_errors</span>-<a name="line-433"></a>	<span class='varop'>.&gt;</span>-<a name="line-434"></a>	<span class='varid'>hasOption</span> <span class='varid'>a_issue_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='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-436"></a>-<a name="line-437"></a>      <span class='layout'>,</span> <span class='varid'>hasOption</span> <span class='varid'>a_collect_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'>errorMsgLogging</span>	<span class='layout'>)</span>-<a name="line-439"></a>-<a name="line-440"></a>      <span class='layout'>,</span> <span class='varid'>hasOption</span> <span class='varid'>a_issue_errors</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'>errorMsgToStderr</span>	<span class='layout'>)</span>-<a name="line-442"></a>-<a name="line-443"></a>      <span class='layout'>,</span> <span class='varid'>this</span>-<a name="line-444"></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-445"></a>      <span class='keyglyph'>]</span>-<a name="line-446"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-447"></a>      <span class='varid'>processFilter</span>-<a name="line-448"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-449"></a>      <span class='layout'>(</span> <span class='varid'>thisM</span>-<a name="line-450"></a>        <span class='varop'>+++&gt;&gt;</span>-<a name="line-451"></a>	<span class='layout'>(</span> <span class='varid'>hasOption</span> <span class='varid'>a_collect_errors</span>-<a name="line-452"></a>          <span class='varop'>`guardsM`</span>-<a name="line-453"></a>	  <span class='varid'>getErrorMsg</span>-<a name="line-454"></a>	<span class='layout'>)</span>-<a name="line-455"></a>      <span class='layout'>)</span>-<a name="line-456"></a>-<a name="line-457"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-458"></a>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-Parser-ProtocolHandler.html
@@ -1,125 +0,0 @@-<!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</span>-<a name="line-4"></a><span class='comment'>-- configuration file</span>-<a name="line-5"></a><span class='comment'>-- real handler is generated with cpp</span>-<a name="line-6"></a><span class='comment'>--</span>-<a name="line-7"></a><span class='comment'>-- Version : $Id: ProtocolHandler.hs,v 1.4 2006/03/03 14:20:17 hxml Exp $</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'>ProtocolHandler</span>-<a name="line-10"></a>    <span class='layout'>(</span> <span class='varid'>getProtocolHandler</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'>XmlState</span>-<a name="line-16"></a>-<a name="line-17"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-18"></a><span class='comment'>--</span>-<a name="line-19"></a><span class='comment'>-- file io and network</span>-<a name="line-20"></a>-<a name="line-21"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>-<a name="line-22"></a>    <span class='layout'>(</span> <span class='varid'>fromMaybe</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'>Network</span><span class='varop'>.</span><span class='conid'>URI</span>-<a name="line-26"></a>    <span class='layout'>(</span> <span class='conid'>URI</span>-<a name="line-27"></a>    <span class='layout'>,</span> <span class='varid'>uriScheme</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'>ProtocolHandlerFile</span>-<a name="line-31"></a>    <span class='layout'>(</span> <span class='varid'>getFileContents</span>-<a name="line-32"></a>    <span class='layout'>)</span>-<a name="line-33"></a>-<a name="line-34"></a>-<a name="line-35"></a>-<a name="line-36"></a>-<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>-<a name="line-43"></a>-<a name="line-44"></a>-<a name="line-45"></a>-<a name="line-46"></a>-<a name="line-47"></a>-<a name="line-48"></a>-<a name="line-49"></a>-<a name="line-50"></a>-<a name="line-51"></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-52"></a>    <span class='layout'>(</span> <span class='varid'>getHttpContentsNativeOrWithCurl</span>-<a name="line-53"></a>    <span class='layout'>)</span>-<a name="line-54"></a>-<a name="line-55"></a>-<a name="line-56"></a>-<a name="line-57"></a>-<a name="line-58"></a>-<a name="line-59"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-60"></a><span class='comment'>--</span>-<a name="line-61"></a>-<a name="line-62"></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-63"></a><span class='definition'>getProtocolHandler</span> <span class='varid'>proto</span>-<a name="line-64"></a>    <span class='keyglyph'>=</span> <span class='varid'>fromMaybe</span> <span class='varid'>getUnsupported</span> <span class='varid'>handler</span>-<a name="line-65"></a>      <span class='keyword'>where</span>-<a name="line-66"></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-67"></a>-<a name="line-68"></a><span class='comment'>--</span>-<a name="line-69"></a><span class='comment'>-- the fall back protocol handler</span>-<a name="line-70"></a>-<a name="line-71"></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-72"></a><span class='definition'>getUnsupported</span> <span class='varid'>uri</span>-<a name="line-73"></a>    <span class='keyglyph'>=</span> <span class='varid'>addFatal</span> <span class='layout'>(</span> <span class='str'>"unsupported protocol "</span>-<a name="line-74"></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-75"></a>		 <span class='varop'>++</span> <span class='str'>" in URI: "</span>-<a name="line-76"></a>		 <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>uri</span>-<a name="line-77"></a>	       <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'>--</span>-<a name="line-81"></a><span class='comment'>-- the table of potocol handlers</span>-<a name="line-82"></a><span class='comment'>-- looked up in getProtocolHandler</span>-<a name="line-83"></a>-<a name="line-84"></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-85"></a><span class='definition'>protocolHandler</span>-<a name="line-86"></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-87"></a>      <span class='layout'>,</span> <span class='layout'>(</span><span class='str'>"http"</span><span class='layout'>,</span>-<a name="line-88"></a>-<a name="line-89"></a>-<a name="line-90"></a>-<a name="line-91"></a>-<a name="line-92"></a>-<a name="line-93"></a>-<a name="line-94"></a>-<a name="line-95"></a>-<a name="line-96"></a>-<a name="line-97"></a>-<a name="line-98"></a>-<a name="line-99"></a>-<a name="line-100"></a>-<a name="line-101"></a>-<a name="line-102"></a>-<a name="line-103"></a>-<a name="line-104"></a>-<a name="line-105"></a>	 <span class='varid'>getHttpContentsNativeOrWithCurl</span>-<a name="line-106"></a>-<a name="line-107"></a>-<a name="line-108"></a>-<a name="line-109"></a>-<a name="line-110"></a>	<span class='layout'>)</span>-<a name="line-111"></a>      <span class='keyglyph'>]</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>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-Parser-ProtocolHandlerFile.html
@@ -1,89 +0,0 @@-<!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><span class='comment'>--</span>-<a name="line-6"></a><span class='comment'>-- Version : $Id: ProtocolHandlerFile.hs,v 1.5 2006/03/03 14:20:17 hxml Exp $</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'>ProtocolHandlerFile</span>-<a name="line-9"></a>    <span class='layout'>(</span> <span class='varid'>getFileContents</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'>XmlTree</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'>XmlState</span>-<a name="line-17"></a>-<a name="line-18"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>Directory</span>-<a name="line-19"></a>    <span class='layout'>(</span> <span class='varid'>doesFileExist</span>-<a name="line-20"></a>    <span class='layout'>,</span> <span class='varid'>getPermissions</span>-<a name="line-21"></a>    <span class='layout'>,</span> <span class='varid'>readable</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'>unEscapeString</span>-<a name="line-27"></a>    <span class='layout'>,</span> <span class='varid'>uriPath</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'>System</span><span class='varop'>.</span><span class='conid'>IO</span>-<a name="line-31"></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-32"></a>-<a name="line-33"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-34"></a><span class='comment'>--</span>-<a name="line-35"></a><span class='comment'>-- the file protocol handler</span>-<a name="line-36"></a>-<a name="line-37"></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-38"></a><span class='definition'>getFileContents</span> <span class='varid'>uri</span> <span class='varid'>n</span>-<a name="line-39"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-40"></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-41"></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-42"></a>      <span class='keyword'>if</span> <span class='varid'>exists</span>-<a name="line-43"></a>	 <span class='keyword'>then</span> <span class='keyword'>do</span>-<a name="line-44"></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-45"></a>	      <span class='keyword'>if</span> <span class='varid'>readable</span> <span class='varid'>perm</span>-<a name="line-46"></a>		 <span class='keyword'>then</span> <span class='keyword'>do</span>-<a name="line-47"></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-48"></a>		      <span class='keyword'>case</span> <span class='varid'>h</span> <span class='keyword'>of</span>-<a name="line-49"></a>			     <span class='conid'>Left</span> <span class='varid'>e</span>-<a name="line-50"></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-51"></a>					      <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>source</span>-<a name="line-52"></a>					      <span class='varop'>++</span> <span class='str'>": "</span>-<a name="line-53"></a>					      <span class='varop'>++</span> <span class='varid'>ioeGetErrorString</span> <span class='varid'>e</span>-<a name="line-54"></a>					    <span class='layout'>)</span>-<a name="line-55"></a>			     <span class='conid'>Right</span> <span class='varid'>h'</span>-<a name="line-56"></a>				 <span class='keyglyph'>-&gt;</span> <span class='keyword'>do</span>-<a name="line-57"></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-58"></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-59"></a>					       <span class='varop'>.&gt;</span>-<a name="line-60"></a>					       <span class='varid'>addAttr</span> <span class='varid'>transferMessage</span> <span class='str'>"OK"</span>-<a name="line-61"></a>					       <span class='varop'>.&gt;</span>-<a name="line-62"></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-63"></a>					     <span class='layout'>)</span> <span class='varid'>n</span>-<a name="line-64"></a>					   <span class='layout'>)</span>-<a name="line-65"></a>-<a name="line-66"></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-67"></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-68"></a>    <span class='keyword'>where</span>-<a name="line-69"></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-70"></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-71"></a>-<a name="line-72"></a>    <span class='comment'>-- remove leading / if file starts with windows drive letter, e.g. /c:/windows -&gt; c:/windows</span>-<a name="line-73"></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-74"></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-75"></a>	    <span class='keyglyph'>=</span> <span class='varid'>file</span>-<a name="line-76"></a>    <span class='varid'>fileUriPath</span> <span class='varid'>file</span>-<a name="line-77"></a>	<span class='keyglyph'>=</span> <span class='varid'>file</span>-<a name="line-78"></a>-<a name="line-79"></a><span class='comment'>-- ------------------------------------------------------------</span>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-Parser-ProtocolHandlerHttpCurl.html
@@ -1,204 +0,0 @@-<!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><span class='comment'>-- Version : $Id: ProtocolHandlerHttpCurl.hs,v 1.3 2005/04/14 12:52:53 hxml Exp $</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'>ProtocolHandlerHttpCurl</span>-<a name="line-8"></a>    <span class='layout'>(</span> <span class='varid'>getHttpContentsWithCurl</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'>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-18"></a>    <span class='layout'>(</span> <span class='varid'>parseContentType</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'>ParserCombinators</span><span class='varop'>.</span><span class='conid'>Parsec</span>-<a name="line-22"></a>    <span class='layout'>(</span> <span class='conid'>Parser</span>-<a name="line-23"></a>    <span class='layout'>,</span> <span class='varid'>parse</span>-<a name="line-24"></a>    <span class='layout'>,</span> <span class='varid'>anyChar</span>-<a name="line-25"></a>    <span class='layout'>,</span> <span class='varid'>char</span>-<a name="line-26"></a>    <span class='layout'>,</span> <span class='varid'>digit</span>-<a name="line-27"></a>    <span class='layout'>,</span> <span class='varid'>getInput</span>-<a name="line-28"></a>    <span class='layout'>,</span> <span class='varid'>many1</span>-<a name="line-29"></a>    <span class='layout'>,</span> <span class='varid'>manyTill</span>-<a name="line-30"></a>    <span class='layout'>,</span> <span class='varid'>spaces</span>-<a name="line-31"></a>    <span class='layout'>,</span> <span class='varid'>string</span>-<a name="line-32"></a>    <span class='layout'>,</span> <span class='layout'>(</span><span class='varop'>&lt;|&gt;</span><span class='layout'>)</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='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-36"></a>    <span class='layout'>(</span> <span class='varid'>try</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'>URI</span>-<a name="line-40"></a>    <span class='layout'>(</span> <span class='conid'>URI</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'>System</span><span class='varop'>.</span><span class='conid'>PipeOpen</span>-<a name="line-44"></a>    <span class='layout'>(</span> <span class='varid'>popen</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'>Data</span><span class='varop'>.</span><span class='conid'>Char</span>-<a name="line-48"></a>    <span class='layout'>(</span> <span class='varid'>toLower</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><span class='comment'>--</span>-<a name="line-53"></a><span class='comment'>-- the http protocol handler implemented by calling external program curl</span>-<a name="line-54"></a>-<a name="line-55"></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-56"></a><span class='definition'>getHttpContentsWithCurl</span> <span class='varid'>uri</span> <span class='varid'>n</span>-<a name="line-57"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-58"></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-59"></a>-<a name="line-60"></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-61"></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-62"></a>-<a name="line-63"></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-64"></a>-<a name="line-65"></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-66"></a>-<a name="line-67"></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-68"></a>-<a name="line-69"></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-70"></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-71"></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-72"></a>-<a name="line-73"></a>      <span class='keyword'>if</span> <span class='varid'>rc</span> <span class='varop'>/=</span> <span class='num'>0</span>-<a name="line-74"></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-75"></a>			 <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>uri</span>-<a name="line-76"></a>			 <span class='varop'>++</span> <span class='str'>": "</span>-<a name="line-77"></a>			 <span class='varop'>++</span> <span class='varid'>errs</span>-<a name="line-78"></a>		       <span class='layout'>)</span> <span class='varid'>n</span>-<a name="line-79"></a>	 <span class='keyword'>else</span> <span class='keyword'>let</span>-<a name="line-80"></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-81"></a>	      <span class='keyword'>in</span>-<a name="line-82"></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-83"></a>		       <span class='varop'>.&gt;</span>-<a name="line-84"></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-85"></a>		     <span class='layout'>)</span>-<a name="line-86"></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-87"></a>		    <span class='keyword'>then</span> <span class='varid'>thisM</span>-<a name="line-88"></a>		    <span class='keyword'>else</span>-<a name="line-89"></a>		    <span class='varid'>addFatal</span> <span class='layout'>(</span> <span class='str'>"http error when accessing URI "</span>-<a name="line-90"></a>			       <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>uri</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='varid'>show</span> <span class='varid'>st</span>-<a name="line-93"></a>			       <span class='varop'>++</span> <span class='str'>" "</span>-<a name="line-94"></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-95"></a>			     <span class='layout'>)</span>-<a name="line-96"></a>		  <span class='layout'>)</span>-<a name="line-97"></a>	      <span class='varop'>$</span> <span class='varid'>n</span>-<a name="line-98"></a>    <span class='keyword'>where</span>-<a name="line-99"></a>    <span class='varid'>cmd</span>  <span class='keyglyph'>=</span> <span class='str'>"curl"</span>-<a name="line-100"></a>    <span class='varid'>args</span> <span class='keyglyph'>=</span> <span class='keyglyph'>[</span> <span class='str'>"--silent"</span>-<a name="line-101"></a>	   <span class='layout'>,</span> <span class='str'>"--show-error"</span>-<a name="line-102"></a>	   <span class='layout'>,</span> <span class='str'>"--dump-header"</span><span class='layout'>,</span> <span class='str'>"-"</span>-<a name="line-103"></a>	   <span class='layout'>,</span> <span class='varid'>show</span> <span class='varid'>uri</span>-<a name="line-104"></a>	   <span class='keyglyph'>]</span>-<a name="line-105"></a>    <span class='varid'>proxyArgs</span> <span class='str'>""</span>-<a name="line-106"></a>	<span class='keyglyph'>=</span> <span class='conid'>[]</span>-<a name="line-107"></a>    <span class='varid'>proxyArgs</span> <span class='varid'>prx</span>-<a name="line-108"></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-109"></a>-<a name="line-110"></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-111"></a><span class='definition'>parseResponse</span> <span class='varid'>inp</span>-<a name="line-112"></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-113"></a>      <span class='conid'>Right</span> <span class='varid'>res</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>res</span>-<a name="line-114"></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-115"></a>-<a name="line-116"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-117"></a><span class='comment'>--</span>-<a name="line-118"></a><span class='comment'>-- parsers for HTTP response</span>-<a name="line-119"></a>-<a name="line-120"></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-121"></a><span class='definition'>parseHttpResponse</span>-<a name="line-122"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-123"></a>      <span class='varid'>allResponses</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>many1</span>-<a name="line-124"></a>		      <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-125"></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-126"></a>			<span class='varid'>rhs</span>      <span class='keyglyph'>&lt;-</span> <span class='varid'>parseHeaders</span>-<a name="line-127"></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-128"></a>		      <span class='layout'>)</span>-<a name="line-129"></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-130"></a>      <span class='varid'>content</span>  <span class='keyglyph'>&lt;-</span> <span class='varid'>getInput</span>-<a name="line-131"></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-132"></a>    <span class='keyword'>where</span>-<a name="line-133"></a>-<a name="line-134"></a>    <span class='varid'>crlf</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>()</span>-<a name="line-135"></a>    <span class='varid'>crlf</span>-<a name="line-136"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-137"></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-138"></a>	  <span class='varid'>return</span> <span class='conid'>()</span>-<a name="line-139"></a>-<a name="line-140"></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-141"></a>    <span class='varid'>parseResp</span>-<a name="line-142"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-143"></a>	  <span class='varid'>vers</span> <span class='keyglyph'>&lt;-</span> <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-144"></a>		    <span class='varid'>http</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>string</span> <span class='str'>"HTTP/"</span>-<a name="line-145"></a>		    <span class='varid'>mav</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>many1</span> <span class='varid'>digit</span>-<a name="line-146"></a>		    <span class='varid'>char</span> <span class='chr'>'.'</span>-<a name="line-147"></a>		    <span class='varid'>miv</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>many1</span> <span class='varid'>digit</span>-<a name="line-148"></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-149"></a>		  <span class='layout'>)</span>-<a name="line-150"></a>	  <span class='varid'>spaces</span>-<a name="line-151"></a>	  <span class='varid'>ds</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>many1</span> <span class='varid'>digit</span>-<a name="line-152"></a>	  <span class='varid'>spaces</span>-<a name="line-153"></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-154"></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-155"></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-156"></a>		 <span class='layout'>)</span>-<a name="line-157"></a>-<a name="line-158"></a>    <span class='varid'>parseHeaders</span>	<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>XmlTrees</span>-<a name="line-159"></a>    <span class='varid'>parseHeaders</span>-<a name="line-160"></a>	<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-161"></a>	    <span class='varid'>crlf</span>-<a name="line-162"></a>	    <span class='varid'>return</span> <span class='conid'>[]</span>-<a name="line-163"></a>	  <span class='layout'>)</span>-<a name="line-164"></a>	  <span class='varop'>&lt;|&gt;</span>-<a name="line-165"></a>	  <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-166"></a>	    <span class='varid'>header1</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>parse1Header</span>-<a name="line-167"></a>	    <span class='varid'>rest</span>    <span class='keyglyph'>&lt;-</span> <span class='varid'>parseHeaders</span>-<a name="line-168"></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-169"></a>	  <span class='layout'>)</span>-<a name="line-170"></a>	  <span class='varop'>&lt;|&gt;</span>-<a name="line-171"></a>	  <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-172"></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-173"></a>	  <span class='layout'>)</span>-<a name="line-174"></a>-<a name="line-175"></a>    <span class='varid'>parse1Header</span>	<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>XmlTrees</span>-<a name="line-176"></a>    <span class='varid'>parse1Header</span>-<a name="line-177"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-178"></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-179"></a>	  <span class='varid'>spaces</span>-<a name="line-180"></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-181"></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-182"></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-183"></a>	<span class='keyword'>where</span>-<a name="line-184"></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-185"></a>	<span class='varid'>parseCT</span> <span class='varid'>h</span> <span class='varid'>v</span>-<a name="line-186"></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-187"></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-188"></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-189"></a>		    <span class='conid'>Left</span>  <span class='keyword'>_</span>   <span class='keyglyph'>-&gt;</span> <span class='conid'>[]</span>-<a name="line-190"></a>		  <span class='layout'>)</span>-<a name="line-191"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>-<a name="line-192"></a>		<span class='keyglyph'>=</span> <span class='conid'>[]</span>-<a name="line-193"></a>-<a name="line-194"></a><span class='comment'>-- ------------------------------------------------------------</span>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-Parser-ProtocolHandlerHttpNative.html
@@ -1,160 +0,0 @@-<!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><span class='comment'>-- Version : $Id: ProtocolHandlerHttpNative.hs,v 1.3 2005/04/14 12:52:53 hxml Exp $</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'>ProtocolHandlerHttpNative</span>-<a name="line-8"></a>    <span class='layout'>(</span> <span class='varid'>getHttpContentsWithHttp</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'>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-18"></a>    <span class='layout'>(</span> <span class='varid'>parseContentType</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'>DOM</span><span class='varop'>.</span><span class='conid'>Util</span>-<a name="line-22"></a>    <span class='layout'>(</span> <span class='varid'>stringTrim</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'>ParserCombinators</span><span class='varop'>.</span><span class='conid'>Parsec</span>-<a name="line-26"></a>    <span class='layout'>(</span> <span class='varid'>parse</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'>System</span><span class='varop'>.</span><span class='conid'>IO</span>-<a name="line-30"></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-31"></a>-<a name="line-32"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>URI</span>-<a name="line-33"></a>    <span class='layout'>(</span> <span class='conid'>URI</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'>Network</span><span class='varop'>.</span><span class='conid'>Socket</span>-<a name="line-37"></a>    <span class='layout'>(</span> <span class='varid'>withSocketsDo</span>-<a name="line-38"></a>    <span class='layout'>)</span>-<a name="line-39"></a>-<a name="line-40"></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-41"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>Browser</span>-<a name="line-42"></a>-<a name="line-43"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-44"></a><span class='comment'>--</span>-<a name="line-45"></a><span class='comment'>-- the native http protocol handler</span>-<a name="line-46"></a>-<a name="line-47"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-48"></a><span class='comment'>--</span>-<a name="line-49"></a><span class='comment'>-- the http protocol handler, haskell implementation</span>-<a name="line-50"></a>-<a name="line-51"></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-52"></a><span class='definition'>getHttpContentsWithHttp</span> <span class='varid'>uri</span> <span class='varid'>n</span>-<a name="line-53"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-54"></a>      <span class='varid'>traceLevel</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getTraceLevel</span>-<a name="line-55"></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-56"></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-57"></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-58"></a>      <span class='keyword'>case</span> <span class='varid'>res</span> <span class='keyword'>of</span>-<a name="line-59"></a>	       <span class='conid'>Left</span> <span class='varid'>e</span>-<a name="line-60"></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-61"></a>				<span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>uri</span>-<a name="line-62"></a>				<span class='varop'>++</span> <span class='str'>": "</span>-<a name="line-63"></a>				<span class='varop'>++</span> <span class='varid'>ioeGetErrorString</span> <span class='varid'>e</span>-<a name="line-64"></a>				<span class='varop'>++</span> <span class='str'>" (perhaps server does not understand HTTP/1.1) "</span>-<a name="line-65"></a>			      <span class='layout'>)</span>-<a name="line-66"></a>	       <span class='conid'>Right</span> <span class='varid'>response</span>-<a name="line-67"></a>		   <span class='keyglyph'>-&gt;</span> <span class='keyword'>let</span>-<a name="line-68"></a>		      <span class='varid'>al</span> <span class='keyglyph'>=</span> <span class='varid'>convertResponseHeaders</span> <span class='varid'>response</span>-<a name="line-69"></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-70"></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-71"></a>		      <span class='keyword'>in</span>-<a name="line-72"></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-73"></a>			 <span class='keyword'>then</span>-<a name="line-74"></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-75"></a>			 <span class='keyword'>else</span> -<a name="line-76"></a>			 <span class='varid'>readErr</span> <span class='layout'>(</span> <span class='str'>"http error when accessing URI "</span>-<a name="line-77"></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-78"></a>				   <span class='varop'>++</span> <span class='str'>": "</span>-<a name="line-79"></a>				   <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>st</span>-<a name="line-80"></a>				   <span class='varop'>++</span> <span class='str'>" "</span>-<a name="line-81"></a>				   <span class='varop'>++</span> <span class='varid'>rspReason</span> <span class='varid'>response</span>-<a name="line-82"></a>				 <span class='layout'>)</span>-<a name="line-83"></a>    <span class='keyword'>where</span>-<a name="line-84"></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-85"></a>-<a name="line-86"></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-87"></a>    <span class='varid'>getHttp</span> <span class='varid'>trc'</span> <span class='varid'>uri'</span> <span class='varid'>proxy'</span>-<a name="line-88"></a>	<span class='keyglyph'>=</span> <span class='varid'>withSocketsDo</span> <span class='varop'>$</span>-<a name="line-89"></a>	  <span class='varid'>browse</span> <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-90"></a>		   <span class='varid'>setOutHandler</span> <span class='layout'>(</span><span class='varid'>trcFct</span><span class='layout'>)</span>-<a name="line-91"></a>		   <span class='varid'>setErrHandler</span> <span class='layout'>(</span><span class='varid'>trcFct</span><span class='layout'>)</span>-<a name="line-92"></a>-<a name="line-93"></a>		   <span class='varid'>setProxy'</span> <span class='varid'>proxy'</span>-<a name="line-94"></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-95"></a>		   <span class='varid'>return</span> <span class='varid'>rsp</span>-<a name="line-96"></a>		 <span class='layout'>)</span>-<a name="line-97"></a>	<span class='keyword'>where</span>-<a name="line-98"></a>	<span class='varid'>trcFct</span> <span class='varid'>s</span>-<a name="line-99"></a>	    <span class='keyglyph'>|</span> <span class='varid'>trc'</span> <span class='varop'>&gt;=</span> <span class='num'>5</span>-<a name="line-100"></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-101"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>-<a name="line-102"></a>		<span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='conid'>()</span>-<a name="line-103"></a>-<a name="line-104"></a>	<span class='varid'>rq</span> <span class='keyglyph'>=</span> <span class='varid'>defaultGETRequest</span> <span class='varid'>uri'</span>-<a name="line-105"></a>	-<a name="line-106"></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-107"></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-108"></a>-<a name="line-109"></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-110"></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-111"></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-112"></a>-<a name="line-113"></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-114"></a>    <span class='varid'>convertResponseHeaders</span> <span class='varid'>r'</span>-<a name="line-115"></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-116"></a>	  <span class='varop'>++</span>-<a name="line-117"></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-118"></a>          <span class='varop'>++</span>-<a name="line-119"></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-120"></a>	<span class='keyword'>where</span>-<a name="line-121"></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-122"></a>	<span class='varid'>cvResponseCode</span> <span class='varid'>st'</span>-<a name="line-123"></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-124"></a>	      <span class='varop'>++</span>-<a name="line-125"></a>	      <span class='varid'>xattr</span> <span class='varid'>transferVersion</span> <span class='varid'>httpVersion</span>-<a name="line-126"></a>-<a name="line-127"></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-128"></a>	<span class='varid'>cvResponseReason</span> <span class='varid'>r''</span>-<a name="line-129"></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-130"></a>-<a name="line-131"></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-132"></a>	<span class='varid'>cvResponseHeaders</span>-<a name="line-133"></a>	    <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='varid'>cvResponseHeader</span>-<a name="line-134"></a>-<a name="line-135"></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-136"></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-137"></a>	    <span class='keyglyph'>|</span> <span class='varid'>name</span> <span class='varop'>==</span> <span class='conid'>HdrContentType</span>-<a name="line-138"></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-139"></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-140"></a>		    <span class='conid'>Left</span>  <span class='keyword'>_</span>   <span class='keyglyph'>-&gt;</span> <span class='conid'>[]</span>-<a name="line-141"></a>		  <span class='layout'>)</span>-<a name="line-142"></a>                  <span class='varop'>++</span>-<a name="line-143"></a>		  <span class='varid'>addHttpAttr</span>-<a name="line-144"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>-<a name="line-145"></a>		<span class='keyglyph'>=</span> <span class='varid'>addHttpAttr</span>-<a name="line-146"></a>	    <span class='keyword'>where</span>-<a name="line-147"></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-148"></a>-<a name="line-149"></a>-<a name="line-150"></a><span class='comment'>-- ------------------------------------------------------------</span>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-Parser-ProtocolHandlerHttpNativeOrCurl.html
@@ -1,55 +0,0 @@-<!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><span class='comment'>-- Version : $Id: ProtocolHandlerHttpNativeOrCurl.hs,v 1.1 2004/09/02 19:12:01 hxml Exp $</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'>ProtocolHandlerHttpNativeOrCurl</span>-<a name="line-8"></a>    <span class='layout'>(</span> <span class='varid'>getHttpContentsNativeOrWithCurl</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'>XmlKeywords</span>-<a name="line-14"></a>    <span class='layout'>(</span> <span class='varid'>a_use_curl</span>-<a name="line-15"></a>    <span class='layout'>)</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'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</span>-<a name="line-18"></a>-<a name="line-19"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>URI</span>-<a name="line-20"></a>    <span class='layout'>(</span> <span class='conid'>URI</span>-<a name="line-21"></a>    <span class='layout'>)</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'>Parser</span><span class='varop'>.</span><span class='conid'>ProtocolHandlerHttpNative</span>-<a name="line-24"></a>    <span class='layout'>(</span> <span class='varid'>getHttpContentsWithHttp</span>-<a name="line-25"></a>    <span class='layout'>)</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'>Parser</span><span class='varop'>.</span><span class='conid'>ProtocolHandlerHttpCurl</span>-<a name="line-28"></a>    <span class='layout'>(</span> <span class='varid'>getHttpContentsWithCurl</span>-<a name="line-29"></a>    <span class='layout'>)</span>-<a name="line-30"></a>-<a name="line-31"></a>-<a name="line-32"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-33"></a><span class='comment'>--</span>-<a name="line-34"></a><span class='comment'>-- the http protocol handler switch for internal / external access</span>-<a name="line-35"></a>-<a name="line-36"></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-37"></a><span class='definition'>getHttpContentsNativeOrWithCurl</span> <span class='varid'>uri</span> <span class='varid'>n</span>-<a name="line-38"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-39"></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-40"></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-41"></a>	<span class='keyword'>then</span> <span class='varid'>getHttpContentsWithCurl</span>-<a name="line-42"></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-43"></a>-<a name="line-44"></a>-<a name="line-45"></a><span class='comment'>-- ------------------------------------------------------------</span>-</pre></body>-</html>
doc/hdoc/src/Text-XML-HXT-Parser-TagSoup.html view
@@ -31,442 +31,461 @@ <a name="line-23"></a> <a name="line-24"></a><span class='comment'>-- ------------------------------------------------------------</span> <a name="line-25"></a>-<a name="line-26"></a><span class='comment'>-- The table contains the id map. All element and attribute names are stored</span>-<a name="line-27"></a><span class='comment'>-- the first time they are ecountered, and later always this name is used,</span>-<a name="line-28"></a><span class='comment'>-- not a string built by the parser.</span>+<a name="line-26"></a><span class='keyword'>import</span>           <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Char</span> <span class='layout'>(</span><span class='varid'>toLower</span><span class='layout'>)</span>+<a name="line-27"></a><span class='keyword'>import</span>           <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>+<a name="line-28"></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-29"></a>-<a name="line-30"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>HTML</span><span class='varop'>.</span><span class='conid'>TagSoup</span>-<a name="line-31"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>HTML</span><span class='varop'>.</span><span class='conid'>TagSoup</span><span class='varop'>.</span><span class='conid'>Entity</span>-<a name="line-32"></a>    <span class='layout'>(</span> <span class='varid'>lookupNumericEntity</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'>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-36"></a>    <span class='layout'>(</span> <span class='varid'>isXmlSpaceChar</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'>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-40"></a>    <span class='layout'>(</span> <span class='varid'>isWellformedQualifiedName</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'>XmlEntities</span>-<a name="line-44"></a>    <span class='layout'>(</span> <span class='comment'>-- xmlEntities</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='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-52"></a>    <span class='layout'>(</span> <span class='varid'>isEmptyHtmlTag</span>-<a name="line-53"></a>    <span class='layout'>,</span> <span class='varid'>isInnerHtmlTagOf</span>-<a name="line-54"></a>    <span class='layout'>,</span> <span class='varid'>closesHtmlTag</span>-<a name="line-55"></a>    <span class='layout'>)</span>-<a name="line-56"></a>-<a name="line-57"></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'>Interface</span>-<a name="line-58"></a>    <span class='layout'>(</span> <span class='conid'>XmlTrees</span>-<a name="line-59"></a>    <span class='layout'>,</span> <span class='conid'>QName</span>-<a name="line-60"></a>    <span class='layout'>,</span> <span class='conid'>NsEnv</span>-<a name="line-61"></a>    <span class='layout'>,</span> <span class='varid'>mkQName</span>-<a name="line-62"></a>    <span class='layout'>,</span> <span class='varid'>mkName</span>-<a name="line-63"></a>    <span class='layout'>,</span> <span class='varid'>mkPrefixLocalPart</span>-<a name="line-64"></a>    <span class='layout'>,</span> <span class='varid'>c_warn</span>-<a name="line-65"></a>    <span class='layout'>,</span> <span class='varid'>a_xml</span>-<a name="line-66"></a>    <span class='layout'>,</span> <span class='varid'>a_xmlns</span>-<a name="line-67"></a>    <span class='layout'>,</span> <span class='varid'>xmlNamespace</span>-<a name="line-68"></a>    <span class='layout'>,</span> <span class='varid'>xmlnsNamespace</span>-<a name="line-69"></a>    <span class='layout'>)</span>-<a name="line-70"></a>-<a name="line-71"></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'>XmlNode</span>-<a name="line-72"></a>    <span class='layout'>(</span> <span class='varid'>isElem</span>-<a name="line-73"></a>    <span class='layout'>,</span> <span class='varid'>mkError</span>-<a name="line-74"></a>    <span class='layout'>,</span> <span class='varid'>mkCmt</span>-<a name="line-75"></a>    <span class='layout'>,</span> <span class='varid'>mkText</span>-<a name="line-76"></a>    <span class='layout'>,</span> <span class='varid'>mkElement</span>-<a name="line-77"></a>    <span class='layout'>,</span> <span class='varid'>mkAttr</span>-<a name="line-78"></a>    <span class='layout'>)</span>-<a name="line-79"></a>-<a name="line-80"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>-<a name="line-81"></a>-<a name="line-82"></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-83"></a>-<a name="line-84"></a><span class='comment'>-- ---------------------------------------- </span>-<a name="line-85"></a>-<a name="line-86"></a><a name="Tags"></a><span class='keyword'>type</span> <span class='conid'>Tags</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>Tag</span><span class='keyglyph'>]</span>-<a name="line-87"></a>-<a name="line-88"></a><a name="NameTable"></a><span class='keyword'>type</span> <span class='conid'>NameTable</span>	<span class='keyglyph'>=</span> <span class='conid'>M</span><span class='varop'>.</span><span class='conid'>Map</span> <span class='conid'>QName</span> <span class='conid'>QName</span>-<a name="line-89"></a>-<a name="line-90"></a><a name="Context"></a><span class='keyword'>type</span> <span class='conid'>Context</span>	<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span><span class='layout'>,</span> <span class='conid'>NsEnv</span><span class='layout'>)</span>-<a name="line-91"></a>-<a name="line-92"></a><a name="State"></a><span class='keyword'>data</span> <span class='conid'>State</span>	<span class='keyglyph'>=</span> <span class='conid'>S</span> <span class='varop'>!</span><span class='conid'>Tags</span> <span class='varop'>!</span><span class='conid'>NameTable</span>		<span class='comment'>-- the name table must be evaluated striktly, else a stack overflow occurs</span>-<a name="line-93"></a>-<a name="line-94"></a><a name="Parser"></a><span class='keyword'>newtype</span> <span class='conid'>Parser</span> <span class='varid'>a</span> <span class='keyglyph'>=</span> <span class='conid'>P</span> <span class='layout'>{</span> <span class='varid'>parse</span> <span class='keyglyph'>::</span> <span class='conid'>State</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>State</span><span class='layout'>)</span><span class='layout'>}</span>-<a name="line-95"></a>-<a name="line-96"></a><span class='keyword'>instance</span> <span class='conid'>Monad</span> <span class='conid'>Parser</span> <span class='keyword'>where</span>-<a name="line-97"></a>    <span class='varid'>return</span> <span class='varid'>x</span>	<span class='keyglyph'>=</span> <span class='conid'>P</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>ts</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>x</span><span class='layout'>,</span> <span class='varid'>ts</span><span class='layout'>)</span>-<a name="line-98"></a>    <span class='varid'>p</span> <span class='varop'>&gt;&gt;=</span> <span class='varid'>f</span>	<span class='keyglyph'>=</span> <span class='conid'>P</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>ts</span> <span class='keyglyph'>-&gt;</span> <span class='keyword'>let</span>-<a name="line-99"></a>			      <span class='layout'>(</span><span class='varid'>res</span><span class='layout'>,</span> <span class='varid'>ts'</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>parse</span> <span class='varid'>p</span> <span class='varid'>ts</span>-<a name="line-100"></a>                              <span class='keyword'>in</span>-<a name="line-101"></a>			      <span class='varid'>parse</span> <span class='layout'>(</span><span class='varid'>f</span> <span class='varid'>res</span><span class='layout'>)</span> <span class='varid'>ts'</span>-<a name="line-102"></a>-<a name="line-103"></a><a name="runParser"></a><span class='definition'>runParser</span>	<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Tags</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span>-<a name="line-104"></a><span class='definition'>runParser</span> <span class='varid'>p</span> <span class='varid'>ts</span>	<span class='keyglyph'>=</span> <span class='varid'>fst</span> <span class='varop'>.</span> <span class='varid'>parse</span> <span class='varid'>p</span> <span class='varop'>$</span> <span class='conid'>S</span> <span class='varid'>ts</span> <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>empty</span>-<a name="line-105"></a>-<a name="line-106"></a><span class='comment'>-- ----------------------------------------</span>-<a name="line-107"></a>-<a name="line-108"></a><a name="cond"></a><span class='definition'>cond</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='varid'>a</span>-<a name="line-109"></a><span class='definition'>cond</span> <span class='varid'>c</span> <span class='varid'>t</span> <span class='varid'>e</span>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-110"></a>		  <span class='varid'>p</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>c</span>-<a name="line-111"></a>		  <span class='keyword'>if</span> <span class='varid'>p</span> <span class='keyword'>then</span> <span class='varid'>t</span> <span class='keyword'>else</span> <span class='varid'>e</span>-<a name="line-112"></a>-<a name="line-113"></a><a name="lookAhead"></a><span class='definition'>lookAhead</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Tag</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span>-<a name="line-114"></a><span class='definition'>lookAhead</span> <span class='varid'>p</span>	<span class='keyglyph'>=</span> <span class='conid'>P</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>S</span> <span class='varid'>ts</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>not</span> <span class='layout'>(</span><span class='varid'>null</span> <span class='varid'>ts</span><span class='layout'>)</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>p</span> <span class='layout'>(</span><span class='varid'>head</span> <span class='varid'>ts</span><span class='layout'>)</span><span class='layout'>,</span> <span class='varid'>s</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'>-- primitive look ahead tests</span>-<a name="line-118"></a>-<a name="line-119"></a><a name="isEof"></a><span class='definition'>isEof</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span>-<a name="line-120"></a><span class='definition'>isEof</span>		<span class='keyglyph'>=</span> <span class='conid'>P</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>S</span> <span class='varid'>ts</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>null</span> <span class='varid'>ts</span><span class='layout'>,</span> <span class='varid'>s</span><span class='layout'>)</span>-<a name="line-121"></a>-<a name="line-122"></a><a name="isText"></a><span class='definition'>isText</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span>-<a name="line-123"></a><span class='definition'>isText</span>		<span class='keyglyph'>=</span> <span class='varid'>lookAhead</span> <span class='varid'>is</span>-<a name="line-124"></a>		  <span class='keyword'>where</span>-<a name="line-125"></a>		  <span class='varid'>is</span> <span class='layout'>(</span><span class='conid'>TagText</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='conid'>True</span>-<a name="line-126"></a>		  <span class='varid'>is</span> <span class='keyword'>_</span>		 <span class='keyglyph'>=</span> <span class='conid'>False</span>-<a name="line-127"></a>-<a name="line-128"></a><a name="isCmt"></a><span class='definition'>isCmt</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span>-<a name="line-129"></a><span class='definition'>isCmt</span>		<span class='keyglyph'>=</span> <span class='varid'>lookAhead</span> <span class='varid'>is</span>-<a name="line-130"></a>		  <span class='keyword'>where</span>-<a name="line-131"></a>		  <span class='varid'>is</span> <span class='layout'>(</span><span class='conid'>TagComment</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='conid'>True</span>-<a name="line-132"></a>		  <span class='varid'>is</span> <span class='keyword'>_</span>		    <span class='keyglyph'>=</span> <span class='conid'>False</span>-<a name="line-133"></a>-<a name="line-134"></a><a name="isWarn"></a><span class='definition'>isWarn</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span>-<a name="line-135"></a><span class='definition'>isWarn</span>		<span class='keyglyph'>=</span> <span class='varid'>lookAhead</span> <span class='varid'>is</span>-<a name="line-136"></a>		  <span class='keyword'>where</span>-<a name="line-137"></a>		  <span class='varid'>is</span> <span class='layout'>(</span><span class='conid'>TagWarning</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='conid'>True</span>-<a name="line-138"></a>		  <span class='varid'>is</span> <span class='keyword'>_</span>		    <span class='keyglyph'>=</span> <span class='conid'>False</span>-<a name="line-139"></a>-<a name="line-140"></a><a name="isPos"></a><span class='definition'>isPos</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span>-<a name="line-141"></a><span class='definition'>isPos</span>		<span class='keyglyph'>=</span> <span class='varid'>lookAhead</span> <span class='varid'>is</span>-<a name="line-142"></a>		  <span class='keyword'>where</span>-<a name="line-143"></a>		  <span class='varid'>is</span> <span class='layout'>(</span><span class='conid'>TagPosition</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-144"></a>		  <span class='varid'>is</span> <span class='keyword'>_</span>		 <span class='keyglyph'>=</span> <span class='conid'>False</span>-<a name="line-145"></a>-<a name="line-146"></a><a name="isCls"></a><span class='definition'>isCls</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span>-<a name="line-147"></a><span class='definition'>isCls</span>		<span class='keyglyph'>=</span> <span class='varid'>lookAhead</span> <span class='varid'>is</span>-<a name="line-148"></a>		  <span class='keyword'>where</span>-<a name="line-149"></a>		  <span class='varid'>is</span> <span class='layout'>(</span><span class='conid'>TagClose</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='conid'>True</span>-<a name="line-150"></a>		  <span class='varid'>is</span> <span class='keyword'>_</span>		  <span class='keyglyph'>=</span> <span class='conid'>False</span>-<a name="line-151"></a>-<a name="line-152"></a><a name="isOpn"></a><span class='definition'>isOpn</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span>-<a name="line-153"></a><span class='definition'>isOpn</span>		<span class='keyglyph'>=</span> <span class='varid'>lookAhead</span> <span class='varid'>is</span>-<a name="line-154"></a>		  <span class='keyword'>where</span>-<a name="line-155"></a>		  <span class='varid'>is</span> <span class='layout'>(</span><span class='conid'>TagOpen</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-156"></a>		  <span class='varid'>is</span> <span class='keyword'>_</span>		   <span class='keyglyph'>=</span> <span class='conid'>False</span>-<a name="line-157"></a>-<a name="line-158"></a><span class='comment'>-- ----------------------------------------</span>-<a name="line-159"></a><span class='comment'>-- primitive symbol parsers</span>-<a name="line-160"></a>-<a name="line-161"></a><a name="getTag"></a><span class='definition'>getTag</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Tag</span>-<a name="line-162"></a><span class='definition'>getTag</span>		<span class='keyglyph'>=</span> <span class='conid'>P</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='layout'>(</span><span class='conid'>S</span> <span class='layout'>(</span><span class='varid'>t1</span><span class='conop'>:</span><span class='varid'>ts1</span><span class='layout'>)</span> <span class='varid'>nt</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>t1</span><span class='layout'>,</span> <span class='conid'>S</span> <span class='varid'>ts1</span> <span class='varid'>nt</span><span class='layout'>)</span>-<a name="line-163"></a>-<a name="line-164"></a><a name="getSym"></a><span class='definition'>getSym</span>		<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Tag</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='varid'>a</span>-<a name="line-165"></a><span class='definition'>getSym</span> <span class='varid'>f</span>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-166"></a>		  <span class='varid'>t</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getTag</span>-<a name="line-167"></a>		  <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>f</span> <span class='varid'>t</span><span class='layout'>)</span>-<a name="line-168"></a>-<a name="line-169"></a><a name="getText"></a><span class='definition'>getText</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>String</span>-<a name="line-170"></a><span class='definition'>getText</span>		<span class='keyglyph'>=</span> <span class='varid'>getSym</span> <span class='varid'>sym</span>-<a name="line-171"></a>    		  <span class='keyword'>where</span>-<a name="line-172"></a>		  <span class='varid'>sym</span> <span class='layout'>(</span><span class='conid'>TagText</span> <span class='varid'>t</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>t</span>-<a name="line-173"></a>		  <span class='varid'>sym</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='varid'>undefined</span>-<a name="line-174"></a>-<a name="line-175"></a><a name="getCmt"></a><span class='definition'>getCmt</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>String</span>-<a name="line-176"></a><span class='definition'>getCmt</span>		<span class='keyglyph'>=</span> <span class='varid'>getSym</span> <span class='varid'>sym</span>-<a name="line-177"></a>		  <span class='keyword'>where</span>-<a name="line-178"></a>		  <span class='varid'>sym</span> <span class='layout'>(</span><span class='conid'>TagComment</span> <span class='varid'>c</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>c</span>-<a name="line-179"></a>	  	  <span class='varid'>sym</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='varid'>undefined</span>-<a name="line-180"></a>-<a name="line-181"></a><a name="getWarn"></a><span class='definition'>getWarn</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>String</span>-<a name="line-182"></a><span class='definition'>getWarn</span>		<span class='keyglyph'>=</span> <span class='varid'>getSym</span> <span class='varid'>sym</span>-<a name="line-183"></a>	  	  <span class='keyword'>where</span>-<a name="line-184"></a>		  <span class='varid'>sym</span> <span class='layout'>(</span><span class='conid'>TagWarning</span> <span class='varid'>w</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>w</span>-<a name="line-185"></a>		  <span class='varid'>sym</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='varid'>undefined</span>-<a name="line-186"></a>-<a name="line-187"></a><a name="getPos"></a><span class='definition'>getPos</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'>Int</span><span class='layout'>)</span>-<a name="line-188"></a><span class='definition'>getPos</span>		<span class='keyglyph'>=</span> <span class='varid'>getSym</span> <span class='varid'>sym</span>-<a name="line-189"></a>		  <span class='keyword'>where</span>-<a name="line-190"></a>		  <span class='varid'>sym</span> <span class='layout'>(</span><span class='conid'>TagPosition</span> <span class='varid'>l</span> <span class='varid'>c</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>l</span><span class='layout'>,</span> <span class='varid'>c</span><span class='layout'>)</span>-<a name="line-191"></a>		  <span class='varid'>sym</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='varid'>undefined</span>-<a name="line-192"></a>-<a name="line-193"></a><a name="getCls"></a><span class='definition'>getCls</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>String</span>-<a name="line-194"></a><span class='definition'>getCls</span>		<span class='keyglyph'>=</span> <span class='varid'>getSym</span> <span class='varid'>sym</span>-<a name="line-195"></a>		  <span class='keyword'>where</span>-<a name="line-196"></a>		  <span class='varid'>sym</span> <span class='layout'>(</span><span class='conid'>TagClose</span> <span class='varid'>n</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>n</span>-<a name="line-197"></a>		  <span class='varid'>sym</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='varid'>undefined</span>-<a name="line-198"></a>-<a name="line-199"></a><a name="getOpn"></a><span class='definition'>getOpn</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span><span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span><span class='layout'>)</span>-<a name="line-200"></a><span class='definition'>getOpn</span>		<span class='keyglyph'>=</span> <span class='varid'>getSym</span> <span class='varid'>sym</span>-<a name="line-201"></a>		  <span class='keyword'>where</span>-<a name="line-202"></a>		  <span class='varid'>sym</span> <span class='layout'>(</span><span class='conid'>TagOpen</span> <span class='varid'>n</span> <span class='varid'>al</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'>al</span><span class='layout'>)</span>-<a name="line-203"></a>		  <span class='varid'>sym</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='varid'>undefined</span>-<a name="line-204"></a>-<a name="line-205"></a><span class='comment'>-- ----------------------------------------</span>-<a name="line-206"></a><span class='comment'>-- pushback parsers for inserting missing tags</span>-<a name="line-207"></a>-<a name="line-208"></a><a name="pushBack"></a><span class='definition'>pushBack</span>	<span class='keyglyph'>::</span> <span class='conid'>Tag</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>()</span>-<a name="line-209"></a><span class='definition'>pushBack</span> <span class='varid'>t</span>	<span class='keyglyph'>=</span> <span class='conid'>P</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='layout'>(</span><span class='conid'>S</span> <span class='varid'>ts</span> <span class='varid'>nt</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='conid'>()</span><span class='layout'>,</span> <span class='conid'>S</span> <span class='layout'>(</span><span class='varid'>t</span><span class='conop'>:</span><span class='varid'>ts</span><span class='layout'>)</span> <span class='varid'>nt</span><span class='layout'>)</span>-<a name="line-210"></a>-<a name="line-211"></a><a name="insCls"></a><span class='definition'>insCls</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>()</span>-<a name="line-212"></a><span class='definition'>insCls</span> <span class='varid'>n</span>	<span class='keyglyph'>=</span> <span class='varid'>pushBack</span> <span class='layout'>(</span><span class='conid'>TagClose</span> <span class='varid'>n</span><span class='layout'>)</span>-<a name="line-213"></a>-<a name="line-214"></a><a name="insOpn"></a><span class='definition'>insOpn</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>()</span>-<a name="line-215"></a><span class='definition'>insOpn</span> <span class='varid'>n</span> <span class='varid'>al</span>	<span class='keyglyph'>=</span> <span class='varid'>pushBack</span> <span class='layout'>(</span><span class='conid'>TagOpen</span> <span class='varid'>n</span> <span class='varid'>al</span><span class='layout'>)</span>-<a name="line-216"></a>-<a name="line-217"></a><span class='comment'>-- ----------------------------------------</span>-<a name="line-218"></a>-<a name="line-219"></a><a name="insertQName"></a><span class='definition'>insertQName</span>	<span class='keyglyph'>::</span> <span class='conid'>QName</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>QName</span>-<a name="line-220"></a><span class='definition'>insertQName</span> <span class='varid'>n</span>	<span class='keyglyph'>=</span> <span class='conid'>P</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='layout'>(</span><span class='conid'>S</span> <span class='varid'>ts</span> <span class='varid'>nt</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='keyword'>let</span>-<a name="line-221"></a>				     <span class='layout'>(</span><span class='varid'>n'</span><span class='layout'>,</span> <span class='varid'>nt'</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>insert</span> <span class='varid'>n</span> <span class='varid'>nt</span>-<a name="line-222"></a>				     <span class='keyword'>in</span>-<a name="line-223"></a>				     <span class='layout'>(</span><span class='varid'>n'</span><span class='layout'>,</span> <span class='conid'>S</span> <span class='varid'>ts</span> <span class='varid'>nt'</span><span class='layout'>)</span>-<a name="line-224"></a>		  <span class='keyword'>where</span>-<a name="line-225"></a>		  <span class='varid'>insert</span> <span class='varid'>s</span> <span class='varid'>nt</span>-<a name="line-226"></a>		      <span class='keyglyph'>|</span> <span class='varid'>isJust</span> <span class='varid'>r</span>	<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>fromJust</span> <span class='varid'>r</span><span class='layout'>,</span> <span class='varid'>nt</span><span class='layout'>)</span>-<a name="line-227"></a>		      <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>s</span><span class='layout'>,</span> <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>insert</span> <span class='varid'>s</span> <span class='varid'>s</span> <span class='varid'>nt</span><span class='layout'>)</span>-<a name="line-228"></a>		      <span class='keyword'>where</span>-<a name="line-229"></a>		      <span class='varid'>r</span> <span class='keyglyph'>=</span> <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>lookup</span> <span class='varid'>s</span> <span class='varid'>nt</span>-<a name="line-230"></a>-<a name="line-231"></a><a name="mkQN"></a><span class='definition'>mkQN</span>		<span class='keyglyph'>::</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>NsEnv</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>QName</span>-<a name="line-232"></a><span class='definition'>mkQN</span> <span class='varid'>withNamespaces</span> <span class='varid'>isAttr</span> <span class='varid'>env</span> <span class='varid'>s</span>-<a name="line-233"></a>    <span class='keyglyph'>|</span> <span class='varid'>withNamespaces</span>-<a name="line-234"></a>	<span class='keyglyph'>=</span> <span class='varid'>insertQName</span> <span class='varid'>qn1</span>-<a name="line-235"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>-<a name="line-236"></a>	<span class='keyglyph'>=</span> <span class='varid'>insertQName</span> <span class='varid'>qn0</span>-<a name="line-237"></a>    <span class='keyword'>where</span>-<a name="line-238"></a>    <span class='varid'>qn1</span>-<a name="line-239"></a>	<span class='keyglyph'>|</span> <span class='varid'>isAttr</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>isSimpleName</span>	<span class='keyglyph'>=</span> <span class='varid'>mkName</span> <span class='varid'>s</span>-<a name="line-240"></a>	<span class='keyglyph'>|</span> <span class='varid'>isSimpleName</span>			<span class='keyglyph'>=</span> <span class='varid'>mkQName</span> <span class='str'>""</span> <span class='varid'>s</span> <span class='layout'>(</span><span class='varid'>nsUri</span> <span class='str'>""</span><span class='layout'>)</span>-<a name="line-241"></a>	<span class='keyglyph'>|</span> <span class='varid'>isWellformedQualifiedName</span> <span class='varid'>s</span>	<span class='keyglyph'>=</span> <span class='varid'>mkQName</span> <span class='varid'>px</span> <span class='varid'>lp</span> <span class='layout'>(</span><span class='varid'>nsUri</span> <span class='varid'>px</span><span class='layout'>)</span>-<a name="line-242"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>=</span> <span class='varid'>mkName</span> <span class='varid'>s</span>-<a name="line-243"></a>    <span class='varid'>qn0</span>-<a name="line-244"></a>	<span class='keyglyph'>|</span> <span class='varid'>isSimpleName</span>			<span class='keyglyph'>=</span> <span class='varid'>mkName</span> <span class='varid'>s</span>-<a name="line-245"></a>	<span class='keyglyph'>|</span> <span class='varid'>isWellformedQualifiedName</span> <span class='varid'>s</span>	<span class='keyglyph'>=</span> <span class='varid'>mkPrefixLocalPart</span> <span class='varid'>px</span> <span class='varid'>lp</span>-<a name="line-246"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>=</span> <span class='varid'>mkName</span> <span class='varid'>s</span>-<a name="line-247"></a>-<a name="line-248"></a>    <span class='varid'>nsUri</span> <span class='varid'>x</span>		<span class='keyglyph'>=</span> <span class='varid'>fromMaybe</span> <span class='str'>""</span> <span class='varop'>.</span> <span class='varid'>lookup</span> <span class='varid'>x</span> <span class='varop'>$</span> <span class='varid'>env</span>-<a name="line-249"></a>    <span class='varid'>isSimpleName</span>	<span class='keyglyph'>=</span> <span class='varid'>all</span> <span class='layout'>(</span><span class='varop'>/=</span> <span class='chr'>':'</span><span class='layout'>)</span> <span class='varid'>s</span>-<a name="line-250"></a>    <span class='layout'>(</span><span class='varid'>px</span><span class='layout'>,</span> <span class='layout'>(</span><span class='keyword'>_</span> <span class='conop'>:</span> <span class='varid'>lp</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>span</span><span class='layout'>(</span><span class='varop'>/=</span> <span class='chr'>':'</span><span class='layout'>)</span> <span class='varid'>s</span>-<a name="line-251"></a>-<a name="line-252"></a><a name="extendNsEnv"></a><span class='definition'>extendNsEnv</span>	<span class='keyglyph'>::</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>NsEnv</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>NsEnv</span>-<a name="line-253"></a><span class='definition'>extendNsEnv</span> <span class='varid'>withNamespaces</span> <span class='varid'>al1</span> <span class='varid'>env</span>-<a name="line-254"></a>    <span class='keyglyph'>|</span> <span class='varid'>withNamespaces</span>-<a name="line-255"></a>	<span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='layout'>(</span><span class='varid'>uncurry</span> <span class='varid'>addNs</span><span class='layout'>)</span> <span class='varid'>al1</span> <span class='varop'>++</span> <span class='varid'>env</span>-<a name="line-256"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>-<a name="line-257"></a>	<span class='keyglyph'>=</span> <span class='varid'>env</span>-<a name="line-258"></a>    <span class='keyword'>where</span>-<a name="line-259"></a>    <span class='varid'>addNs</span> <span class='varid'>n</span> <span class='varid'>v</span>-<a name="line-260"></a>	<span class='keyglyph'>|</span> <span class='varid'>px</span> <span class='varop'>==</span> <span class='varid'>a_xmlns</span>-<a name="line-261"></a>	  <span class='varop'>&amp;&amp;</span>-<a name="line-262"></a>	  <span class='layout'>(</span><span class='varid'>null</span> <span class='varid'>lp</span> <span class='varop'>||</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'>tail</span> <span class='varop'>$</span> <span class='varid'>lp</span><span class='layout'>)</span><span class='layout'>)</span>-<a name="line-263"></a>	    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='varid'>drop</span> <span class='num'>1</span> <span class='varid'>lp</span><span class='layout'>,</span> <span class='varid'>v</span><span class='layout'>)</span><span class='keyglyph'>]</span>-<a name="line-264"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>-<a name="line-265"></a>	    <span class='keyglyph'>=</span> <span class='conid'>[]</span>-<a name="line-266"></a>	<span class='keyword'>where</span>-<a name="line-267"></a>	<span class='layout'>(</span><span class='varid'>px</span><span class='layout'>,</span> <span class='varid'>lp</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>span</span> <span class='layout'>(</span><span class='varop'>/=</span> <span class='chr'>':'</span><span class='layout'>)</span> <span class='varid'>n</span>-<a name="line-268"></a>-<a name="line-269"></a><span class='comment'>-- ----------------------------------------</span>-<a name="line-270"></a>-<a name="line-271"></a><span class='comment'>-- own entity lookup to prevent problems with &amp;amp; and tagsoup hack for IE</span>-<a name="line-272"></a>-<a name="line-273"></a><a name="lookupEntity"></a><span class='definition'>lookupEntity</span>	<span class='keyglyph'>::</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>Tag</span><span class='keyglyph'>]</span>-<a name="line-274"></a><span class='definition'>lookupEntity</span> <span class='varid'>withWarnings</span> <span class='sel'>_asHtml</span> <span class='varid'>e0</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='chr'>'#'</span><span class='conop'>:</span><span class='varid'>e</span><span class='layout'>)</span>-<a name="line-275"></a>    <span class='keyglyph'>=</span> <span class='keyword'>case</span> <span class='varid'>lookupNumericEntity</span> <span class='varid'>e</span> <span class='keyword'>of</span>-<a name="line-276"></a>      <span class='conid'>Just</span> <span class='varid'>c</span>  <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span> <span class='conid'>TagText</span> <span class='keyglyph'>[</span><span class='varid'>c</span><span class='keyglyph'>]</span> <span class='keyglyph'>]</span>-<a name="line-277"></a>      <span class='conid'>Nothing</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span> <span class='conid'>TagText</span> <span class='varop'>$</span> <span class='str'>"&amp;"</span> <span class='varop'>++</span> <span class='varid'>e0</span> <span class='varop'>++</span> <span class='str'>";"</span><span class='layout'>)</span> <span class='conop'>:</span>-<a name="line-278"></a>		 <span class='keyword'>if</span> <span class='varid'>withWarnings</span>-<a name="line-279"></a>		 <span class='keyword'>then</span> <span class='keyglyph'>[</span><span class='conid'>TagWarning</span> <span class='varop'>$</span> <span class='str'>"illegal char reference: &amp;"</span> <span class='varop'>++</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>";"</span><span class='keyglyph'>]</span>-<a name="line-280"></a>		 <span class='keyword'>else</span> <span class='conid'>[]</span>-<a name="line-281"></a>-<a name="line-282"></a><span class='definition'>lookupEntity</span> <span class='varid'>withWarnings</span> <span class='varid'>asHtml</span> <span class='varid'>e</span>-<a name="line-283"></a>    <span class='keyglyph'>=</span> <span class='keyword'>case</span> <span class='layout'>(</span><span class='varid'>lookup</span> <span class='varid'>e</span> <span class='varid'>entities</span><span class='layout'>)</span> <span class='keyword'>of</span>-<a name="line-284"></a>      <span class='conid'>Just</span> <span class='varid'>x</span>  <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span> <span class='conid'>TagText</span> <span class='keyglyph'>[</span><span class='varid'>toEnum</span> <span class='varid'>x</span><span class='keyglyph'>]</span><span class='keyglyph'>]</span>-<a name="line-285"></a>      <span class='conid'>Nothing</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='conid'>TagText</span> <span class='varop'>$</span> <span class='str'>"&amp;"</span> <span class='varop'>++</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>";"</span><span class='layout'>)</span> <span class='conop'>:</span>-<a name="line-286"></a>		 <span class='keyword'>if</span> <span class='varid'>withWarnings</span>-<a name="line-287"></a>		 <span class='keyword'>then</span> <span class='keyglyph'>[</span><span class='conid'>TagWarning</span> <span class='varop'>$</span> <span class='str'>"Unknown entity reference: &amp;"</span> <span class='varop'>++</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>";"</span><span class='keyglyph'>]</span>-<a name="line-288"></a>		 <span class='keyword'>else</span> <span class='conid'>[]</span>-<a name="line-289"></a>    <span class='keyword'>where</span>-<a name="line-290"></a>    <span class='varid'>entities</span>-<a name="line-291"></a>	<span class='keyglyph'>|</span> <span class='varid'>asHtml</span>    <span class='keyglyph'>=</span> <span class='varid'>xhtmlEntities</span>-<a name="line-292"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span> <span class='keyglyph'>=</span> <span class='varid'>xhtmlEntities</span> <span class='comment'>-- xmlEntities (TODO: xhtml is xml and html)</span>-<a name="line-293"></a>-<a name="line-294"></a><span class='comment'>-- ----------------------------------------</span>-<a name="line-295"></a><span class='comment'>-- the main parser</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'>HTML</span><span class='varop'>.</span><span class='conid'>TagSoup</span>+<a name="line-32"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>HTML</span><span class='varop'>.</span><span class='conid'>TagSoup</span><span class='varop'>.</span><span class='conid'>Entity</span>+<a name="line-33"></a>    <span class='layout'>(</span> <span class='varid'>lookupNumericEntity</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'>isXmlSpaceChar</span>+<a name="line-38"></a>    <span class='layout'>)</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'>NamespacePredicates</span>+<a name="line-41"></a>    <span class='layout'>(</span> <span class='varid'>isWellformedQualifiedName</span>+<a name="line-42"></a>    <span class='layout'>)</span>+<a name="line-43"></a>+<a name="line-44"></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-45"></a>    <span class='layout'>(</span> <span class='comment'>-- xmlEntities</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'>XhtmlEntities</span>+<a name="line-49"></a>    <span class='layout'>(</span> <span class='varid'>xhtmlEntities</span>+<a name="line-50"></a>    <span class='layout'>)</span>+<a name="line-51"></a>+<a name="line-52"></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-53"></a>    <span class='layout'>(</span> <span class='varid'>isEmptyHtmlTag</span>+<a name="line-54"></a>    <span class='layout'>,</span> <span class='varid'>isInnerHtmlTagOf</span>+<a name="line-55"></a>    <span class='layout'>,</span> <span class='varid'>closesHtmlTag</span>+<a name="line-56"></a>    <span class='layout'>)</span>+<a name="line-57"></a>+<a name="line-58"></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'>Interface</span>+<a name="line-59"></a>    <span class='layout'>(</span> <span class='conid'>XmlTrees</span>+<a name="line-60"></a>    <span class='layout'>,</span> <span class='conid'>QName</span>+<a name="line-61"></a>    <span class='layout'>,</span> <span class='conid'>NsEnv</span>+<a name="line-62"></a>    <span class='layout'>,</span> <span class='varid'>mkQName</span>+<a name="line-63"></a>    <span class='layout'>,</span> <span class='varid'>mkName</span>+<a name="line-64"></a>    <span class='layout'>,</span> <span class='varid'>mkPrefixLocalPart</span>+<a name="line-65"></a>    <span class='layout'>,</span> <span class='varid'>c_warn</span>+<a name="line-66"></a>    <span class='layout'>,</span> <span class='varid'>a_xml</span>+<a name="line-67"></a>    <span class='layout'>,</span> <span class='varid'>a_xmlns</span>+<a name="line-68"></a>    <span class='layout'>,</span> <span class='varid'>xmlNamespace</span>+<a name="line-69"></a>    <span class='layout'>,</span> <span class='varid'>xmlnsNamespace</span>+<a name="line-70"></a>    <span class='layout'>)</span>+<a name="line-71"></a>+<a name="line-72"></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'>XmlNode</span>+<a name="line-73"></a>    <span class='layout'>(</span> <span class='varid'>isElem</span>+<a name="line-74"></a>    <span class='layout'>,</span> <span class='varid'>mkError</span>+<a name="line-75"></a>    <span class='layout'>,</span> <span class='varid'>mkCmt</span>+<a name="line-76"></a>    <span class='layout'>,</span> <span class='varid'>mkText</span>+<a name="line-77"></a>    <span class='layout'>,</span> <span class='varid'>mkElement</span>+<a name="line-78"></a>    <span class='layout'>,</span> <span class='varid'>mkAttr</span>+<a name="line-79"></a>    <span class='layout'>)</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><span class='comment'>-- The name table contains the id map. All element and attribute names are stored</span>+<a name="line-84"></a><span class='comment'>-- the first time they are ecountered, and later always this name is used,</span>+<a name="line-85"></a><span class='comment'>-- not a string built by the parser.</span>+<a name="line-86"></a>+<a name="line-87"></a><a name="Tags"></a><span class='keyword'>type</span> <span class='conid'>Tags</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>Tag</span><span class='keyglyph'>]</span>+<a name="line-88"></a>+<a name="line-89"></a><a name="NameTable"></a><span class='keyword'>type</span> <span class='conid'>NameTable</span>	<span class='keyglyph'>=</span> <span class='conid'>M</span><span class='varop'>.</span><span class='conid'>Map</span> <span class='conid'>QName</span> <span class='conid'>QName</span>+<a name="line-90"></a>+<a name="line-91"></a><a name="Context"></a><span class='keyword'>type</span> <span class='conid'>Context</span>	<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span><span class='layout'>,</span> <span class='conid'>NsEnv</span><span class='layout'>)</span>+<a name="line-92"></a>+<a name="line-93"></a><a name="State"></a><span class='keyword'>data</span> <span class='conid'>State</span>	<span class='keyglyph'>=</span> <span class='conid'>S</span> <span class='varop'>!</span><span class='conid'>Tags</span> <span class='varop'>!</span><span class='conid'>NameTable</span>		<span class='comment'>-- the name table must be evaluated striktly, else a stack overflow occurs</span>+<a name="line-94"></a>+<a name="line-95"></a><a name="Parser"></a><span class='keyword'>newtype</span> <span class='conid'>Parser</span> <span class='varid'>a</span> <span class='keyglyph'>=</span> <span class='conid'>P</span> <span class='layout'>{</span> <span class='varid'>parse</span> <span class='keyglyph'>::</span> <span class='conid'>State</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>a</span><span class='layout'>,</span> <span class='conid'>State</span><span class='layout'>)</span><span class='layout'>}</span>+<a name="line-96"></a>+<a name="line-97"></a><span class='keyword'>instance</span> <span class='conid'>Monad</span> <span class='conid'>Parser</span> <span class='keyword'>where</span>+<a name="line-98"></a>    <span class='varid'>return</span> <span class='varid'>x</span>	<span class='keyglyph'>=</span> <span class='conid'>P</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>ts</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>x</span><span class='layout'>,</span> <span class='varid'>ts</span><span class='layout'>)</span>+<a name="line-99"></a>    <span class='varid'>p</span> <span class='varop'>&gt;&gt;=</span> <span class='varid'>f</span>	<span class='keyglyph'>=</span> <span class='conid'>P</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>ts</span> <span class='keyglyph'>-&gt;</span> <span class='keyword'>let</span>+<a name="line-100"></a>			      <span class='layout'>(</span><span class='varid'>res</span><span class='layout'>,</span> <span class='varid'>ts'</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>parse</span> <span class='varid'>p</span> <span class='varid'>ts</span>+<a name="line-101"></a>                              <span class='keyword'>in</span>+<a name="line-102"></a>			      <span class='varid'>parse</span> <span class='layout'>(</span><span class='varid'>f</span> <span class='varid'>res</span><span class='layout'>)</span> <span class='varid'>ts'</span>+<a name="line-103"></a>+<a name="line-104"></a><a name="runParser"></a><span class='definition'>runParser</span>	<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Tags</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span>+<a name="line-105"></a><span class='definition'>runParser</span> <span class='varid'>p</span> <span class='varid'>ts</span>	<span class='keyglyph'>=</span> <span class='varid'>fst</span> <span class='varop'>.</span> <span class='varid'>parse</span> <span class='varid'>p</span> <span class='varop'>$</span> <span class='conid'>S</span> <span class='varid'>ts</span> <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>empty</span>+<a name="line-106"></a>+<a name="line-107"></a><span class='comment'>-- ----------------------------------------</span>+<a name="line-108"></a>+<a name="line-109"></a><a name="cond"></a><span class='definition'>cond</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='varid'>a</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='varid'>a</span>+<a name="line-110"></a><span class='definition'>cond</span> <span class='varid'>c</span> <span class='varid'>t</span> <span class='varid'>e</span>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-111"></a>		  <span class='varid'>p</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>c</span>+<a name="line-112"></a>		  <span class='keyword'>if</span> <span class='varid'>p</span> <span class='keyword'>then</span> <span class='varid'>t</span> <span class='keyword'>else</span> <span class='varid'>e</span>+<a name="line-113"></a>+<a name="line-114"></a><a name="lookAhead"></a><span class='definition'>lookAhead</span>	<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Tag</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span>+<a name="line-115"></a><span class='definition'>lookAhead</span> <span class='varid'>p</span>	<span class='keyglyph'>=</span> <span class='conid'>P</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>S</span> <span class='varid'>ts</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>not</span> <span class='layout'>(</span><span class='varid'>null</span> <span class='varid'>ts</span><span class='layout'>)</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>p</span> <span class='layout'>(</span><span class='varid'>head</span> <span class='varid'>ts</span><span class='layout'>)</span><span class='layout'>,</span> <span class='varid'>s</span><span class='layout'>)</span>+<a name="line-116"></a>+<a name="line-117"></a><span class='comment'>-- ----------------------------------------</span>+<a name="line-118"></a><span class='comment'>-- primitive look ahead tests</span>+<a name="line-119"></a>+<a name="line-120"></a><a name="isEof"></a><span class='definition'>isEof</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span>+<a name="line-121"></a><span class='definition'>isEof</span>		<span class='keyglyph'>=</span> <span class='conid'>P</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='varid'>s</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='conid'>S</span> <span class='varid'>ts</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>null</span> <span class='varid'>ts</span><span class='layout'>,</span> <span class='varid'>s</span><span class='layout'>)</span>+<a name="line-122"></a>+<a name="line-123"></a><a name="isText"></a><span class='definition'>isText</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span>+<a name="line-124"></a><span class='definition'>isText</span>		<span class='keyglyph'>=</span> <span class='varid'>lookAhead</span> <span class='varid'>is</span>+<a name="line-125"></a>		  <span class='keyword'>where</span>+<a name="line-126"></a>		  <span class='varid'>is</span> <span class='layout'>(</span><span class='conid'>TagText</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='conid'>True</span>+<a name="line-127"></a>		  <span class='varid'>is</span> <span class='keyword'>_</span>		 <span class='keyglyph'>=</span> <span class='conid'>False</span>+<a name="line-128"></a>+<a name="line-129"></a><a name="isCmt"></a><span class='definition'>isCmt</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span>+<a name="line-130"></a><span class='definition'>isCmt</span>		<span class='keyglyph'>=</span> <span class='varid'>lookAhead</span> <span class='varid'>is</span>+<a name="line-131"></a>		  <span class='keyword'>where</span>+<a name="line-132"></a>		  <span class='varid'>is</span> <span class='layout'>(</span><span class='conid'>TagComment</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='conid'>True</span>+<a name="line-133"></a>		  <span class='varid'>is</span> <span class='keyword'>_</span>		    <span class='keyglyph'>=</span> <span class='conid'>False</span>+<a name="line-134"></a>+<a name="line-135"></a><a name="isWarn"></a><span class='definition'>isWarn</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span>+<a name="line-136"></a><span class='definition'>isWarn</span>		<span class='keyglyph'>=</span> <span class='varid'>lookAhead</span> <span class='varid'>is</span>+<a name="line-137"></a>		  <span class='keyword'>where</span>+<a name="line-138"></a>		  <span class='varid'>is</span> <span class='layout'>(</span><span class='conid'>TagWarning</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='conid'>True</span>+<a name="line-139"></a>		  <span class='varid'>is</span> <span class='keyword'>_</span>		    <span class='keyglyph'>=</span> <span class='conid'>False</span>+<a name="line-140"></a>+<a name="line-141"></a><a name="isPos"></a><span class='definition'>isPos</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span>+<a name="line-142"></a><span class='definition'>isPos</span>		<span class='keyglyph'>=</span> <span class='varid'>lookAhead</span> <span class='varid'>is</span>+<a name="line-143"></a>		  <span class='keyword'>where</span>+<a name="line-144"></a>		  <span class='varid'>is</span> <span class='layout'>(</span><span class='conid'>TagPosition</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-145"></a>		  <span class='varid'>is</span> <span class='keyword'>_</span>		 <span class='keyglyph'>=</span> <span class='conid'>False</span>+<a name="line-146"></a>+<a name="line-147"></a><a name="isCls"></a><span class='definition'>isCls</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span>+<a name="line-148"></a><span class='definition'>isCls</span>		<span class='keyglyph'>=</span> <span class='varid'>lookAhead</span> <span class='varid'>is</span>+<a name="line-149"></a>		  <span class='keyword'>where</span>+<a name="line-150"></a>		  <span class='varid'>is</span> <span class='layout'>(</span><span class='conid'>TagClose</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='conid'>True</span>+<a name="line-151"></a>		  <span class='varid'>is</span> <span class='keyword'>_</span>		  <span class='keyglyph'>=</span> <span class='conid'>False</span>+<a name="line-152"></a>+<a name="line-153"></a><a name="isOpn"></a><span class='definition'>isOpn</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Bool</span>+<a name="line-154"></a><span class='definition'>isOpn</span>		<span class='keyglyph'>=</span> <span class='varid'>lookAhead</span> <span class='varid'>is</span>+<a name="line-155"></a>		  <span class='keyword'>where</span>+<a name="line-156"></a>		  <span class='varid'>is</span> <span class='layout'>(</span><span class='conid'>TagOpen</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-157"></a>		  <span class='varid'>is</span> <span class='keyword'>_</span>		   <span class='keyglyph'>=</span> <span class='conid'>False</span>+<a name="line-158"></a>+<a name="line-159"></a><span class='comment'>-- ----------------------------------------</span>+<a name="line-160"></a><span class='comment'>-- primitive symbol parsers</span>+<a name="line-161"></a>+<a name="line-162"></a><a name="getTag"></a><span class='definition'>getTag</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>Tag</span>+<a name="line-163"></a><span class='definition'>getTag</span>		<span class='keyglyph'>=</span> <span class='conid'>P</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='layout'>(</span><span class='conid'>S</span> <span class='layout'>(</span><span class='varid'>t1</span><span class='conop'>:</span><span class='varid'>ts1</span><span class='layout'>)</span> <span class='varid'>nt</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='varid'>t1</span><span class='layout'>,</span> <span class='conid'>S</span> <span class='varid'>ts1</span> <span class='varid'>nt</span><span class='layout'>)</span>+<a name="line-164"></a>+<a name="line-165"></a><a name="getSym"></a><span class='definition'>getSym</span>		<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='conid'>Tag</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>a</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='varid'>a</span>+<a name="line-166"></a><span class='definition'>getSym</span> <span class='varid'>f</span>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-167"></a>		  <span class='varid'>t</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getTag</span>+<a name="line-168"></a>		  <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>f</span> <span class='varid'>t</span><span class='layout'>)</span>+<a name="line-169"></a>+<a name="line-170"></a><a name="getText"></a><span class='definition'>getText</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>String</span>+<a name="line-171"></a><span class='definition'>getText</span>		<span class='keyglyph'>=</span> <span class='varid'>getSym</span> <span class='varid'>sym</span>+<a name="line-172"></a>    		  <span class='keyword'>where</span>+<a name="line-173"></a>		  <span class='varid'>sym</span> <span class='layout'>(</span><span class='conid'>TagText</span> <span class='varid'>t</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>t</span>+<a name="line-174"></a>		  <span class='varid'>sym</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='varid'>undefined</span>+<a name="line-175"></a>+<a name="line-176"></a><a name="getCmt"></a><span class='definition'>getCmt</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>String</span>+<a name="line-177"></a><span class='definition'>getCmt</span>		<span class='keyglyph'>=</span> <span class='varid'>getSym</span> <span class='varid'>sym</span>+<a name="line-178"></a>		  <span class='keyword'>where</span>+<a name="line-179"></a>		  <span class='varid'>sym</span> <span class='layout'>(</span><span class='conid'>TagComment</span> <span class='varid'>c</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>c</span>+<a name="line-180"></a>	  	  <span class='varid'>sym</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='varid'>undefined</span>+<a name="line-181"></a>+<a name="line-182"></a><a name="getWarn"></a><span class='definition'>getWarn</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>String</span>+<a name="line-183"></a><span class='definition'>getWarn</span>		<span class='keyglyph'>=</span> <span class='varid'>getSym</span> <span class='varid'>sym</span>+<a name="line-184"></a>	  	  <span class='keyword'>where</span>+<a name="line-185"></a>		  <span class='varid'>sym</span> <span class='layout'>(</span><span class='conid'>TagWarning</span> <span class='varid'>w</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>w</span>+<a name="line-186"></a>		  <span class='varid'>sym</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='varid'>undefined</span>+<a name="line-187"></a>+<a name="line-188"></a><a name="getPos"></a><span class='definition'>getPos</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'>Int</span><span class='layout'>)</span>+<a name="line-189"></a><span class='definition'>getPos</span>		<span class='keyglyph'>=</span> <span class='varid'>getSym</span> <span class='varid'>sym</span>+<a name="line-190"></a>		  <span class='keyword'>where</span>+<a name="line-191"></a>		  <span class='varid'>sym</span> <span class='layout'>(</span><span class='conid'>TagPosition</span> <span class='varid'>l</span> <span class='varid'>c</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>l</span><span class='layout'>,</span> <span class='varid'>c</span><span class='layout'>)</span>+<a name="line-192"></a>		  <span class='varid'>sym</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='varid'>undefined</span>+<a name="line-193"></a>+<a name="line-194"></a><a name="getCls"></a><span class='definition'>getCls</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='conid'>String</span>+<a name="line-195"></a><span class='definition'>getCls</span>		<span class='keyglyph'>=</span> <span class='varid'>getSym</span> <span class='varid'>sym</span>+<a name="line-196"></a>		  <span class='keyword'>where</span>+<a name="line-197"></a>		  <span class='varid'>sym</span> <span class='layout'>(</span><span class='conid'>TagClose</span> <span class='varid'>n</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>n</span>+<a name="line-198"></a>		  <span class='varid'>sym</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='varid'>undefined</span>+<a name="line-199"></a>+<a name="line-200"></a><a name="getOpn"></a><span class='definition'>getOpn</span>		<span class='keyglyph'>::</span> <span class='conid'>Parser</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span><span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span><span class='layout'>)</span>+<a name="line-201"></a><span class='definition'>getOpn</span>		<span class='keyglyph'>=</span> <span class='varid'>getSym</span> <span class='varid'>sym</span>+<a name="line-202"></a>		  <span class='keyword'>where</span>+<a name="line-203"></a>		  <span class='varid'>sym</span> <span class='layout'>(</span><span class='conid'>TagOpen</span> <span class='varid'>n</span> <span class='varid'>al</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'>al</span><span class='layout'>)</span>+<a name="line-204"></a>		  <span class='varid'>sym</span> <span class='keyword'>_</span>			<span class='keyglyph'>=</span> <span class='varid'>undefined</span>+<a name="line-205"></a>+<a name="line-206"></a><span class='comment'>-- ----------------------------------------</span>+<a name="line-207"></a><span class='comment'>-- pushback parsers for inserting missing tags</span>+<a name="line-208"></a>+<a name="line-209"></a><a name="pushBack"></a><span class='definition'>pushBack</span>	<span class='keyglyph'>::</span> <span class='conid'>Tag</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>()</span>+<a name="line-210"></a><span class='definition'>pushBack</span> <span class='varid'>t</span>	<span class='keyglyph'>=</span> <span class='conid'>P</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='layout'>(</span><span class='conid'>S</span> <span class='varid'>ts</span> <span class='varid'>nt</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='conid'>()</span><span class='layout'>,</span> <span class='conid'>S</span> <span class='layout'>(</span><span class='varid'>t</span><span class='conop'>:</span><span class='varid'>ts</span><span class='layout'>)</span> <span class='varid'>nt</span><span class='layout'>)</span>+<a name="line-211"></a>+<a name="line-212"></a><a name="insCls"></a><span class='definition'>insCls</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>()</span>+<a name="line-213"></a><span class='definition'>insCls</span> <span class='varid'>n</span>	<span class='keyglyph'>=</span> <span class='varid'>pushBack</span> <span class='layout'>(</span><span class='conid'>TagClose</span> <span class='varid'>n</span><span class='layout'>)</span>+<a name="line-214"></a>+<a name="line-215"></a><a name="insOpn"></a><span class='definition'>insOpn</span>		<span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>()</span>+<a name="line-216"></a><span class='definition'>insOpn</span> <span class='varid'>n</span> <span class='varid'>al</span>	<span class='keyglyph'>=</span> <span class='varid'>pushBack</span> <span class='layout'>(</span><span class='conid'>TagOpen</span> <span class='varid'>n</span> <span class='varid'>al</span><span class='layout'>)</span>+<a name="line-217"></a>+<a name="line-218"></a><span class='comment'>-- ----------------------------------------</span>+<a name="line-219"></a>+<a name="line-220"></a><a name="insertQName"></a><span class='definition'>insertQName</span>	<span class='keyglyph'>::</span> <span class='conid'>QName</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>QName</span>+<a name="line-221"></a><span class='definition'>insertQName</span> <span class='varid'>n</span>	<span class='keyglyph'>=</span> <span class='conid'>P</span> <span class='varop'>$</span> <span class='keyglyph'>\</span> <span class='layout'>(</span><span class='conid'>S</span> <span class='varid'>ts</span> <span class='varid'>nt</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='keyword'>let</span>+<a name="line-222"></a>				     <span class='layout'>(</span><span class='varid'>n'</span><span class='layout'>,</span> <span class='varid'>nt'</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>insert</span> <span class='varid'>n</span> <span class='varid'>nt</span>+<a name="line-223"></a>				     <span class='keyword'>in</span>+<a name="line-224"></a>				     <span class='layout'>(</span><span class='varid'>n'</span><span class='layout'>,</span> <span class='conid'>S</span> <span class='varid'>ts</span> <span class='varid'>nt'</span><span class='layout'>)</span>+<a name="line-225"></a>		  <span class='keyword'>where</span>+<a name="line-226"></a>		  <span class='varid'>insert</span> <span class='varid'>s</span> <span class='varid'>nt</span>+<a name="line-227"></a>		      <span class='keyglyph'>|</span> <span class='varid'>isJust</span> <span class='varid'>r</span>	<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>fromJust</span> <span class='varid'>r</span><span class='layout'>,</span> <span class='varid'>nt</span><span class='layout'>)</span>+<a name="line-228"></a>		      <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>s</span><span class='layout'>,</span> <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>insert</span> <span class='varid'>s</span> <span class='varid'>s</span> <span class='varid'>nt</span><span class='layout'>)</span>+<a name="line-229"></a>		      <span class='keyword'>where</span>+<a name="line-230"></a>		      <span class='varid'>r</span> <span class='keyglyph'>=</span> <span class='conid'>M</span><span class='varop'>.</span><span class='varid'>lookup</span> <span class='varid'>s</span> <span class='varid'>nt</span>+<a name="line-231"></a>+<a name="line-232"></a><a name="mkQN"></a><span class='definition'>mkQN</span>		<span class='keyglyph'>::</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>NsEnv</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>QName</span>+<a name="line-233"></a><span class='definition'>mkQN</span> <span class='varid'>withNamespaces</span> <span class='varid'>isAttr</span> <span class='varid'>env</span> <span class='varid'>s</span>+<a name="line-234"></a>    <span class='keyglyph'>|</span> <span class='varid'>withNamespaces</span>+<a name="line-235"></a>	<span class='keyglyph'>=</span> <span class='varid'>insertQName</span> <span class='varid'>qn1</span>+<a name="line-236"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>+<a name="line-237"></a>	<span class='keyglyph'>=</span> <span class='varid'>insertQName</span> <span class='varid'>qn0</span>+<a name="line-238"></a>    <span class='keyword'>where</span>+<a name="line-239"></a>    <span class='varid'>qn1</span>+<a name="line-240"></a>	<span class='keyglyph'>|</span> <span class='varid'>isAttr</span> <span class='varop'>&amp;&amp;</span> <span class='varid'>isSimpleName</span>	<span class='keyglyph'>=</span> <span class='varid'>mkName</span> <span class='varid'>s</span>+<a name="line-241"></a>	<span class='keyglyph'>|</span> <span class='varid'>isSimpleName</span>			<span class='keyglyph'>=</span> <span class='varid'>mkQName</span> <span class='str'>""</span> <span class='varid'>s</span> <span class='layout'>(</span><span class='varid'>nsUri</span> <span class='str'>""</span><span class='layout'>)</span>+<a name="line-242"></a>	<span class='keyglyph'>|</span> <span class='varid'>isWellformedQualifiedName</span> <span class='varid'>s</span>	<span class='keyglyph'>=</span> <span class='varid'>mkQName</span> <span class='varid'>px</span> <span class='varid'>lp</span> <span class='layout'>(</span><span class='varid'>nsUri</span> <span class='varid'>px</span><span class='layout'>)</span>+<a name="line-243"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>=</span> <span class='varid'>mkName</span> <span class='varid'>s</span>+<a name="line-244"></a>    <span class='varid'>qn0</span>+<a name="line-245"></a>	<span class='keyglyph'>|</span> <span class='varid'>isSimpleName</span>			<span class='keyglyph'>=</span> <span class='varid'>mkName</span> <span class='varid'>s</span>+<a name="line-246"></a>	<span class='keyglyph'>|</span> <span class='varid'>isWellformedQualifiedName</span> <span class='varid'>s</span>	<span class='keyglyph'>=</span> <span class='varid'>mkPrefixLocalPart</span> <span class='varid'>px</span> <span class='varid'>lp</span>+<a name="line-247"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>			<span class='keyglyph'>=</span> <span class='varid'>mkName</span> <span class='varid'>s</span>+<a name="line-248"></a>+<a name="line-249"></a>    <span class='varid'>nsUri</span> <span class='varid'>x</span>		<span class='keyglyph'>=</span> <span class='varid'>fromMaybe</span> <span class='str'>""</span> <span class='varop'>.</span> <span class='varid'>lookup</span> <span class='varid'>x</span> <span class='varop'>$</span> <span class='varid'>env</span>+<a name="line-250"></a>    <span class='varid'>isSimpleName</span>	<span class='keyglyph'>=</span> <span class='varid'>all</span> <span class='layout'>(</span><span class='varop'>/=</span> <span class='chr'>':'</span><span class='layout'>)</span> <span class='varid'>s</span>+<a name="line-251"></a>    <span class='layout'>(</span><span class='varid'>px</span><span class='layout'>,</span> <span class='layout'>(</span><span class='keyword'>_</span> <span class='conop'>:</span> <span class='varid'>lp</span><span class='layout'>)</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>span</span><span class='layout'>(</span><span class='varop'>/=</span> <span class='chr'>':'</span><span class='layout'>)</span> <span class='varid'>s</span>+<a name="line-252"></a>+<a name="line-253"></a><a name="extendNsEnv"></a><span class='definition'>extendNsEnv</span>	<span class='keyglyph'>::</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>NsEnv</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>NsEnv</span>+<a name="line-254"></a><span class='definition'>extendNsEnv</span> <span class='varid'>withNamespaces</span> <span class='varid'>al1</span> <span class='varid'>env</span>+<a name="line-255"></a>    <span class='keyglyph'>|</span> <span class='varid'>withNamespaces</span>+<a name="line-256"></a>	<span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='layout'>(</span><span class='varid'>uncurry</span> <span class='varid'>addNs</span><span class='layout'>)</span> <span class='varid'>al1</span> <span class='varop'>++</span> <span class='varid'>env</span>+<a name="line-257"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>+<a name="line-258"></a>	<span class='keyglyph'>=</span> <span class='varid'>env</span>+<a name="line-259"></a>    <span class='keyword'>where</span>+<a name="line-260"></a>    <span class='varid'>addNs</span> <span class='varid'>n</span> <span class='varid'>v</span>+<a name="line-261"></a>	<span class='keyglyph'>|</span> <span class='varid'>px</span> <span class='varop'>==</span> <span class='varid'>a_xmlns</span>+<a name="line-262"></a>	  <span class='varop'>&amp;&amp;</span>+<a name="line-263"></a>	  <span class='layout'>(</span><span class='varid'>null</span> <span class='varid'>lp</span> <span class='varop'>||</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'>tail</span> <span class='varop'>$</span> <span class='varid'>lp</span><span class='layout'>)</span><span class='layout'>)</span>+<a name="line-264"></a>	    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='varid'>drop</span> <span class='num'>1</span> <span class='varid'>lp</span><span class='layout'>,</span> <span class='varid'>v</span><span class='layout'>)</span><span class='keyglyph'>]</span>+<a name="line-265"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>+<a name="line-266"></a>	    <span class='keyglyph'>=</span> <span class='conid'>[]</span>+<a name="line-267"></a>	<span class='keyword'>where</span>+<a name="line-268"></a>	<span class='layout'>(</span><span class='varid'>px</span><span class='layout'>,</span> <span class='varid'>lp</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>span</span> <span class='layout'>(</span><span class='varop'>/=</span> <span class='chr'>':'</span><span class='layout'>)</span> <span class='varid'>n</span>+<a name="line-269"></a>+<a name="line-270"></a><span class='comment'>-- ----------------------------------------</span>+<a name="line-271"></a>+<a name="line-272"></a><span class='comment'>-- own entity lookup to prevent problems with &amp;amp; and tagsoup hack for IE</span>+<a name="line-273"></a>+<a name="line-274"></a><a name="lookupEntity"></a><span class='definition'>lookupEntity</span>	<span class='keyglyph'>::</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>Tag</span><span class='keyglyph'>]</span>+<a name="line-275"></a><span class='definition'>lookupEntity</span> <span class='varid'>withWarnings</span> <span class='sel'>_asHtml</span> <span class='varid'>e0</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='chr'>'#'</span><span class='conop'>:</span><span class='varid'>e</span><span class='layout'>)</span>+<a name="line-276"></a>    <span class='keyglyph'>=</span> <span class='keyword'>case</span> <span class='varid'>lookupNumericEntity</span> <span class='varid'>e</span> <span class='keyword'>of</span>+<a name="line-277"></a>      <span class='conid'>Just</span> <span class='varid'>c</span>  <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span> <span class='conid'>TagText</span> <span class='keyglyph'>[</span><span class='varid'>c</span><span class='keyglyph'>]</span> <span class='keyglyph'>]</span>+<a name="line-278"></a>      <span class='conid'>Nothing</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span> <span class='conid'>TagText</span> <span class='varop'>$</span> <span class='str'>"&amp;"</span> <span class='varop'>++</span> <span class='varid'>e0</span> <span class='varop'>++</span> <span class='str'>";"</span><span class='layout'>)</span> <span class='conop'>:</span>+<a name="line-279"></a>		 <span class='keyword'>if</span> <span class='varid'>withWarnings</span>+<a name="line-280"></a>		 <span class='keyword'>then</span> <span class='keyglyph'>[</span><span class='conid'>TagWarning</span> <span class='varop'>$</span> <span class='str'>"illegal char reference: &amp;"</span> <span class='varop'>++</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>";"</span><span class='keyglyph'>]</span>+<a name="line-281"></a>		 <span class='keyword'>else</span> <span class='conid'>[]</span>+<a name="line-282"></a>+<a name="line-283"></a><span class='definition'>lookupEntity</span> <span class='varid'>withWarnings</span> <span class='varid'>asHtml</span> <span class='varid'>e</span>+<a name="line-284"></a>    <span class='keyglyph'>=</span> <span class='keyword'>case</span> <span class='layout'>(</span><span class='varid'>lookup</span> <span class='varid'>e</span> <span class='varid'>entities</span><span class='layout'>)</span> <span class='keyword'>of</span>+<a name="line-285"></a>      <span class='conid'>Just</span> <span class='varid'>x</span>  <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span> <span class='conid'>TagText</span> <span class='keyglyph'>[</span><span class='varid'>toEnum</span> <span class='varid'>x</span><span class='keyglyph'>]</span><span class='keyglyph'>]</span>+<a name="line-286"></a>      <span class='conid'>Nothing</span> <span class='keyglyph'>-&gt;</span> <span class='layout'>(</span><span class='conid'>TagText</span> <span class='varop'>$</span> <span class='str'>"&amp;"</span> <span class='varop'>++</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>";"</span><span class='layout'>)</span> <span class='conop'>:</span>+<a name="line-287"></a>		 <span class='keyword'>if</span> <span class='varid'>withWarnings</span>+<a name="line-288"></a>		 <span class='keyword'>then</span> <span class='keyglyph'>[</span><span class='conid'>TagWarning</span> <span class='varop'>$</span> <span class='str'>"Unknown entity reference: &amp;"</span> <span class='varop'>++</span> <span class='varid'>e</span> <span class='varop'>++</span> <span class='str'>";"</span><span class='keyglyph'>]</span>+<a name="line-289"></a>		 <span class='keyword'>else</span> <span class='conid'>[]</span>+<a name="line-290"></a>    <span class='keyword'>where</span>+<a name="line-291"></a>    <span class='varid'>entities</span>+<a name="line-292"></a>	<span class='keyglyph'>|</span> <span class='varid'>asHtml</span>    <span class='keyglyph'>=</span> <span class='varid'>xhtmlEntities</span>+<a name="line-293"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span> <span class='keyglyph'>=</span> <span class='varid'>xhtmlEntities</span> <span class='comment'>-- xmlEntities (TODO: xhtml is xml and html)</span>+<a name="line-294"></a>+<a name="line-295"></a><span class='comment'>-- ----------------------------------------</span> <a name="line-296"></a>-<a name="line-297"></a><a name="parseHtmlTagSoup"></a><span class='definition'>parseHtmlTagSoup</span>	<span class='keyglyph'>::</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</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-298"></a><span class='definition'>parseHtmlTagSoup</span> <span class='varid'>withNamespaces</span> <span class='varid'>withWarnings</span> <span class='varid'>withComment</span> <span class='varid'>removeWhiteSpace</span> <span class='varid'>asHtml</span> <span class='varid'>doc</span>-<a name="line-299"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>docRootElem</span>-<a name="line-300"></a>	<span class='varop'>.</span> <span class='varid'>runParser</span> <span class='layout'>(</span><span class='varid'>buildCont</span> <span class='varid'>initContext</span><span class='layout'>)</span>-<a name="line-301"></a>	<span class='varop'>.</span> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>asHtml</span>-<a name="line-302"></a>	    <span class='keyword'>then</span> <span class='varid'>canonicalizeTags</span>-<a name="line-303"></a>	    <span class='keyword'>else</span> <span class='varid'>id</span>-<a name="line-304"></a>	  <span class='layout'>)</span>-<a name="line-305"></a>	<span class='varop'>.</span> <span class='varid'>parseTagsOptions</span> <span class='layout'>(</span><span class='varid'>parseOptions</span> <span class='layout'>{</span> <span class='varid'>optTagWarning</span>   <span class='keyglyph'>=</span> <span class='varid'>withWarnings</span>-<a name="line-306"></a>					 <span class='layout'>,</span> <span class='varid'>optLookupEntity</span> <span class='keyglyph'>=</span> <span class='varid'>lookupEntity</span> <span class='varid'>withWarnings</span> <span class='varid'>asHtml</span>-<a name="line-307"></a>					 <span class='layout'>}</span>-<a name="line-308"></a>			   <span class='layout'>)</span>-<a name="line-309"></a>      <span class='layout'>)</span>-<a name="line-310"></a>    <span class='keyword'>where</span>-<a name="line-311"></a>    <span class='comment'>-- This is essential for lasy parsing:</span>-<a name="line-312"></a>    <span class='comment'>-- the call of "take 1" stops parsing, when the first element is detected</span>-<a name="line-313"></a>    <span class='comment'>-- no check on end of input sequence is required to build this (0- or 1-element list)</span>-<a name="line-314"></a>    <span class='comment'>-- so eof is never checked unneccessarily</span>+<a name="line-297"></a><span class='comment'>-- |</span>+<a name="line-298"></a><span class='comment'>-- Turns all element and attribute names to lower case</span>+<a name="line-299"></a><span class='comment'>-- even !DOCTYPE stuff. But this is discarded when parsing the tagsoup</span>+<a name="line-300"></a>+<a name="line-301"></a><a name="lowerCaseNames"></a><span class='definition'>lowerCaseNames</span> <span class='keyglyph'>::</span> <span class='keyglyph'>[</span><span class='conid'>Tag</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='conid'>Tag</span><span class='keyglyph'>]</span>+<a name="line-302"></a><span class='definition'>lowerCaseNames</span>+<a name="line-303"></a>    <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='varid'>f</span>+<a name="line-304"></a>    <span class='keyword'>where</span>+<a name="line-305"></a>    <span class='varid'>f</span> <span class='layout'>(</span><span class='conid'>TagOpen</span> <span class='varid'>name</span> <span class='varid'>attrs</span><span class='layout'>)</span>+<a name="line-306"></a>        <span class='keyglyph'>=</span> <span class='conid'>TagOpen</span> <span class='layout'>(</span><span class='varid'>nameToLower</span> <span class='varid'>name</span><span class='layout'>)</span> <span class='layout'>(</span><span class='varid'>map</span> <span class='varid'>attrToLower</span> <span class='varid'>attrs</span><span class='layout'>)</span>+<a name="line-307"></a>    <span class='varid'>f</span> <span class='layout'>(</span><span class='conid'>TagClose</span> <span class='varid'>name</span><span class='layout'>)</span>+<a name="line-308"></a>	<span class='keyglyph'>=</span> <span class='conid'>TagClose</span> <span class='layout'>(</span><span class='varid'>nameToLower</span> <span class='varid'>name</span><span class='layout'>)</span>+<a name="line-309"></a>    <span class='varid'>f</span> <span class='varid'>a</span> <span class='keyglyph'>=</span> <span class='varid'>a</span>+<a name="line-310"></a>    <span class='varid'>nameToLower</span>          <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='varid'>toLower</span>+<a name="line-311"></a>    <span class='varid'>attrToLower</span> <span class='layout'>(</span><span class='varid'>an</span><span class='layout'>,</span> <span class='varid'>av</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>nameToLower</span> <span class='varid'>an</span><span class='layout'>,</span> <span class='varid'>av</span><span class='layout'>)</span>+<a name="line-312"></a>+<a name="line-313"></a><span class='comment'>-- ----------------------------------------</span>+<a name="line-314"></a><span class='comment'>-- the main parser</span> <a name="line-315"></a>-<a name="line-316"></a>    <span class='varid'>docRootElem</span>-<a name="line-317"></a>	<span class='keyglyph'>=</span> <span class='varid'>take</span> <span class='num'>1</span> <span class='varop'>.</span> <span class='varid'>filter</span> <span class='varid'>isElem</span>-<a name="line-318"></a>-<a name="line-319"></a>    <span class='varid'>initContext</span>		<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='conid'>[]</span>-<a name="line-320"></a>			  <span class='layout'>,</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>-<a name="line-321"></a>			    <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>-<a name="line-322"></a>			    <span class='keyglyph'>]</span>-<a name="line-323"></a>			  <span class='layout'>)</span>-<a name="line-324"></a>-<a name="line-325"></a>    <span class='varid'>wrap</span>		<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='conop'>:</span><span class='conid'>[]</span><span class='layout'>)</span>-<a name="line-326"></a>-<a name="line-327"></a>    <span class='varid'>warn</span>-<a name="line-328"></a>	<span class='keyglyph'>|</span> <span class='varid'>withWarnings</span>	<span class='keyglyph'>=</span> <span class='varid'>wrap</span> <span class='varop'>.</span> <span class='varid'>mkError</span> <span class='varid'>c_warn</span> <span class='varop'>.</span> <span class='varid'>show</span> <span class='varop'>.</span> <span class='layout'>(</span><span class='varid'>doc</span> <span class='varop'>++</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='layout'>(</span><span class='str'>" "</span> <span class='varop'>++</span><span class='layout'>)</span>-<a name="line-329"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>=</span> <span class='varid'>const</span> <span class='conid'>[]</span>-<a name="line-330"></a>    <span class='varid'>cmt</span>-<a name="line-331"></a>	<span class='keyglyph'>|</span> <span class='varid'>withComment</span>	<span class='keyglyph'>=</span> <span class='varid'>wrap</span> <span class='varop'>.</span> <span class='varid'>mkCmt</span>-<a name="line-332"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>=</span> <span class='varid'>const</span> <span class='conid'>[]</span>-<a name="line-333"></a>    <span class='varid'>txt</span>-<a name="line-334"></a>	<span class='keyglyph'>|</span> <span class='varid'>removeWhiteSpace</span>-<a name="line-335"></a>			<span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span>-<a name="line-336"></a>			  <span class='keyword'>if</span> <span class='varid'>all</span> <span class='varid'>isXmlSpaceChar</span> <span class='varid'>t</span>-<a name="line-337"></a>			  <span class='keyword'>then</span> <span class='conid'>[]</span>-<a name="line-338"></a>			  <span class='keyword'>else</span> <span class='varid'>wrap</span> <span class='varop'>.</span> <span class='varid'>mkText</span> <span class='varop'>$</span> <span class='varid'>t</span>-<a name="line-339"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>=</span> <span class='varid'>wrap</span> <span class='varop'>.</span> <span class='varid'>mkText</span>-<a name="line-340"></a>-<a name="line-341"></a>    <span class='varid'>isEmptyElem</span>-<a name="line-342"></a>	<span class='keyglyph'>|</span> <span class='varid'>asHtml</span>	<span class='keyglyph'>=</span> <span class='varid'>isEmptyHtmlTag</span>-<a name="line-343"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>=</span> <span class='varid'>const</span> <span class='conid'>False</span>-<a name="line-344"></a>-<a name="line-345"></a>    <span class='varid'>isInnerElem</span>-<a name="line-346"></a>	<span class='keyglyph'>|</span> <span class='varid'>asHtml</span>	<span class='keyglyph'>=</span> <span class='varid'>isInnerHtmlTagOf</span>-<a name="line-347"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>=</span> <span class='varid'>const</span> <span class='layout'>(</span><span class='varid'>const</span> <span class='conid'>False</span><span class='layout'>)</span>-<a name="line-348"></a>-<a name="line-349"></a>    <span class='varid'>closesElem</span>-<a name="line-350"></a>	<span class='keyglyph'>|</span> <span class='varid'>asHtml</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>ns</span> <span class='varid'>n1</span> <span class='keyglyph'>-&gt;</span>-<a name="line-351"></a>			  <span class='varid'>not</span> <span class='layout'>(</span><span class='varid'>null</span> <span class='varid'>ns</span><span class='layout'>)</span>-<a name="line-352"></a>			  <span class='varop'>&amp;&amp;</span>-<a name="line-353"></a>			  <span class='varid'>n1</span> <span class='varop'>`closesHtmlTag`</span> <span class='layout'>(</span><span class='varid'>head</span> <span class='varid'>ns</span><span class='layout'>)</span>-<a name="line-354"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>=</span> <span class='varid'>const</span> <span class='layout'>(</span><span class='varid'>const</span> <span class='conid'>False</span><span class='layout'>)</span>-<a name="line-355"></a>-<a name="line-356"></a>    <span class='varid'>buildCont</span>	<span class='keyglyph'>::</span> <span class='conid'>Context</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>XmlTrees</span>-<a name="line-357"></a>    <span class='varid'>buildCont</span> <span class='varid'>ns</span>-<a name="line-358"></a>	<span class='keyglyph'>=</span> <span class='varid'>cond</span> <span class='varid'>isText</span> <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-359"></a>			<span class='varid'>t</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getText</span>-<a name="line-360"></a>			<span class='varid'>rl</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>buildCont</span> <span class='varid'>ns</span>-<a name="line-361"></a>			<span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>txt</span> <span class='varid'>t</span> <span class='varop'>++</span> <span class='varid'>rl</span><span class='layout'>)</span>-<a name="line-362"></a>		      <span class='layout'>)</span>-<a name="line-363"></a>	  <span class='layout'>(</span> <span class='varid'>cond</span> <span class='varid'>isOpn</span> <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-364"></a>			 <span class='layout'>(</span><span class='varid'>n</span><span class='layout'>,</span><span class='varid'>al</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getOpn</span>-<a name="line-365"></a>			 <span class='varid'>openTag</span> <span class='varid'>ns</span> <span class='varid'>n</span> <span class='varid'>al</span>-<a name="line-366"></a>		       <span class='layout'>)</span>-<a name="line-367"></a>	    <span class='layout'>(</span> <span class='varid'>cond</span> <span class='varid'>isCls</span> <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-368"></a>			   <span class='varid'>n</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getCls</span>-<a name="line-369"></a>			   <span class='varid'>closeTag</span> <span class='varid'>ns</span> <span class='varid'>n</span>-<a name="line-370"></a>			 <span class='layout'>)</span>-<a name="line-371"></a>	      <span class='layout'>(</span> <span class='varid'>cond</span> <span class='varid'>isCmt</span> <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-372"></a>			     <span class='varid'>c</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getCmt</span>-<a name="line-373"></a>			     <span class='varid'>rl</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>buildCont</span> <span class='varid'>ns</span>-<a name="line-374"></a>			     <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>cmt</span> <span class='varid'>c</span> <span class='varop'>++</span> <span class='varid'>rl</span><span class='layout'>)</span>-<a name="line-375"></a>			   <span class='layout'>)</span>-<a name="line-376"></a>		<span class='layout'>(</span> <span class='varid'>cond</span> <span class='varid'>isWarn</span> <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-377"></a>				<span class='varid'>w</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getWarn</span>-<a name="line-378"></a>				<span class='varid'>rl</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>buildCont</span> <span class='varid'>ns</span>-<a name="line-379"></a>				<span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>warn</span> <span class='varid'>w</span> <span class='varop'>++</span> <span class='varid'>rl</span><span class='layout'>)</span>-<a name="line-380"></a>			      <span class='layout'>)</span>-<a name="line-381"></a>		  <span class='layout'>(</span> <span class='varid'>cond</span> <span class='varid'>isPos</span> <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-382"></a>				 <span class='varid'>getPos</span>-<a name="line-383"></a>				 <span class='varid'>buildCont</span> <span class='varid'>ns</span>-<a name="line-384"></a>			       <span class='layout'>)</span>-<a name="line-385"></a>		    <span class='layout'>(</span> <span class='varid'>cond</span> <span class='varid'>isEof</span> <span class='layout'>(</span> <span class='keyword'>do</span>-<a name="line-386"></a>				   <span class='varid'>isEof</span>-<a name="line-387"></a>				   <span class='varid'>closeAll</span> <span class='varid'>ns</span>-<a name="line-388"></a>				 <span class='layout'>)</span>-<a name="line-389"></a>		      <span class='layout'>(</span> <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>warn</span> <span class='str'>"parse error in tagsoup tree construction"</span><span class='layout'>)</span>-<a name="line-390"></a>		      <span class='layout'>)</span>-<a name="line-391"></a>		    <span class='layout'>)</span>-<a name="line-392"></a>		  <span class='layout'>)</span>-<a name="line-393"></a>		<span class='layout'>)</span>-<a name="line-394"></a>	      <span class='layout'>)</span>-<a name="line-395"></a>	    <span class='layout'>)</span>-<a name="line-396"></a>	  <span class='layout'>)</span>-<a name="line-397"></a>	<span class='keyword'>where</span>-<a name="line-398"></a>	<span class='varid'>closeTag</span>		<span class='keyglyph'>::</span> <span class='conid'>Context</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>XmlTrees</span>-<a name="line-399"></a>	<span class='varid'>closeTag</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>n'</span><span class='conop'>:</span><span class='keyword'>_</span><span class='layout'>)</span><span class='layout'>,</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>n1</span>-<a name="line-400"></a>	    <span class='keyglyph'>|</span> <span class='varid'>n'</span> <span class='varop'>==</span> <span class='varid'>n1</span>		<span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='conid'>[]</span>			<span class='comment'>-- a normal closing tag</span>-<a name="line-401"></a>								<span class='comment'>-- all other cases try to repair wrong html</span>-<a name="line-402"></a>	<span class='varid'>closeTag</span> <span class='varid'>ns'</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='layout'>(</span><span class='varid'>n'</span><span class='conop'>:</span><span class='keyword'>_</span><span class='layout'>)</span><span class='layout'>,</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>n1</span>				<span class='comment'>-- n1 closes n implicitly</span>-<a name="line-403"></a>	    <span class='keyglyph'>|</span> <span class='varid'>n'</span> <span class='varop'>`isInnerElem`</span> <span class='varid'>n1</span>				<span class='comment'>-- e.g. &lt;td&gt;...&lt;/tr&gt;</span>-<a name="line-404"></a>				<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-405"></a>				  <span class='varid'>insCls</span> <span class='varid'>n1</span>			<span class='comment'>-- pushback &lt;/n1&gt;</span>-<a name="line-406"></a>				  <span class='varid'>insCls</span> <span class='varid'>n'</span>			<span class='comment'>-- insert a &lt;/n'&gt;</span>-<a name="line-407"></a>				  <span class='varid'>buildCont</span> <span class='varid'>ns'</span>			<span class='comment'>-- try again</span>-<a name="line-408"></a>	<span class='varid'>closeTag</span> <span class='varid'>ns'</span> <span class='varid'>n1</span>-<a name="line-409"></a>	    <span class='keyglyph'>|</span> <span class='varid'>isEmptyElem</span> <span class='varid'>n1</span>	<span class='keyglyph'>=</span> <span class='varid'>buildCont</span> <span class='varid'>ns'</span>			<span class='comment'>-- ignore a redundant closing tag for empty element</span>-<a name="line-410"></a>	<span class='varid'>closeTag</span> <span class='varid'>ns'</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='layout'>(</span><span class='varid'>n'</span><span class='conop'>:</span><span class='varid'>ns1'</span><span class='layout'>)</span><span class='layout'>,</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>n1</span>				<span class='comment'>-- insert a missing closing tag</span>-<a name="line-411"></a>	    <span class='keyglyph'>|</span> <span class='varid'>n1</span> <span class='varop'>`elem`</span> <span class='varid'>ns1'</span>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-412"></a>				  <span class='varid'>insCls</span> <span class='varid'>n1</span>-<a name="line-413"></a>				  <span class='varid'>insCls</span> <span class='varid'>n'</span>-<a name="line-414"></a>				  <span class='varid'>rl</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>buildCont</span> <span class='varid'>ns'</span>-<a name="line-415"></a>				  <span class='varid'>return</span> <span class='layout'>(</span> <span class='varid'>warn</span> <span class='layout'>(</span><span class='str'>"closing tag "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n'</span> <span class='varop'>++</span>-<a name="line-416"></a>						 <span class='str'>" expected, but "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n1</span> <span class='varop'>++</span> <span class='str'>" found"</span><span class='layout'>)</span>-<a name="line-417"></a>					   <span class='varop'>++</span> <span class='varid'>rl</span>-<a name="line-418"></a>					 <span class='layout'>)</span>-<a name="line-419"></a>	<span class='varid'>closeTag</span> <span class='varid'>ns'</span> <span class='varid'>n1</span>						<span class='comment'>-- ignore a wrong closing tag</span>-<a name="line-420"></a>				<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-421"></a>				  <span class='varid'>rl</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>buildCont</span> <span class='varid'>ns'</span>-<a name="line-422"></a>				  <span class='varid'>return</span> <span class='layout'>(</span> <span class='varid'>warn</span> <span class='layout'>(</span><span class='str'>"no opening tag for closing tag "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n1</span><span class='layout'>)</span>-<a name="line-423"></a>					   <span class='varop'>++</span> <span class='varid'>rl</span>-<a name="line-424"></a>					 <span class='layout'>)</span>-<a name="line-425"></a>-<a name="line-426"></a>	<span class='varid'>openTag</span>			<span class='keyglyph'>::</span> <span class='conid'>Context</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>XmlTrees</span>-<a name="line-427"></a>	<span class='varid'>openTag</span> <span class='varid'>cx'</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='varid'>ns'</span><span class='layout'>,</span><span class='varid'>env'</span><span class='layout'>)</span> <span class='varid'>n1</span> <span class='varid'>al1</span>-<a name="line-428"></a>	    <span class='keyglyph'>|</span> <span class='varid'>isPiDT</span> <span class='varid'>n1</span>		<span class='keyglyph'>=</span> <span class='varid'>buildCont</span> <span class='varid'>cx'</span>-<a name="line-429"></a>	    <span class='keyglyph'>|</span> <span class='varid'>isEmptyElem</span> <span class='varid'>n1</span>-<a name="line-430"></a>				<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-431"></a>				  <span class='varid'>qn</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>mkElemQN</span> <span class='varid'>nenv</span> <span class='varid'>n1</span>-<a name="line-432"></a>				  <span class='varid'>al</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>mkAttrs</span> <span class='varid'>al1</span>-<a name="line-433"></a>				  <span class='varid'>rl</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>buildCont</span> <span class='varid'>cx'</span>-<a name="line-434"></a>				  <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>mkElement</span> <span class='varid'>qn</span> <span class='varid'>al</span> <span class='conid'>[]</span> <span class='conop'>:</span> <span class='varid'>rl</span><span class='layout'>)</span>-<a name="line-435"></a>	    <span class='keyglyph'>|</span> <span class='varid'>closesElem</span> <span class='varid'>ns'</span> <span class='varid'>n1</span>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-436"></a>				  <span class='varid'>insOpn</span> <span class='varid'>n1</span> <span class='varid'>al1</span>-<a name="line-437"></a>				  <span class='varid'>insCls</span> <span class='layout'>(</span><span class='varid'>head</span> <span class='varid'>ns'</span><span class='layout'>)</span>-<a name="line-438"></a>				  <span class='varid'>buildCont</span> <span class='varid'>cx'</span>-<a name="line-439"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>		<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-440"></a>				  <span class='varid'>qn</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>mkElemQN</span> <span class='varid'>nenv</span> <span class='varid'>n1</span>-<a name="line-441"></a>				  <span class='varid'>al</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>mkAttrs</span> <span class='varid'>al1</span>-<a name="line-442"></a>				  <span class='varid'>cs</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>buildCont</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>n1</span> <span class='conop'>:</span> <span class='varid'>ns'</span><span class='layout'>)</span><span class='layout'>,</span> <span class='varid'>nenv</span><span class='layout'>)</span>-<a name="line-443"></a>				  <span class='varid'>rl</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>buildCont</span> <span class='varid'>cx'</span>-<a name="line-444"></a>				  <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>mkElement</span> <span class='varid'>qn</span> <span class='varid'>al</span> <span class='varid'>cs</span> <span class='conop'>:</span> <span class='varid'>rl</span><span class='layout'>)</span>-<a name="line-445"></a>	    <span class='keyword'>where</span>-<a name="line-446"></a>	    <span class='varid'>nenv</span>		<span class='keyglyph'>=</span> <span class='varid'>extendNsEnv</span> <span class='varid'>withNamespaces</span> <span class='varid'>al1</span> <span class='varid'>env'</span>-<a name="line-447"></a>	    <span class='varid'>mkElemQN</span>		<span class='keyglyph'>=</span> <span class='varid'>mkQN</span> <span class='varid'>withNamespaces</span> <span class='conid'>False</span>-<a name="line-448"></a>	    <span class='varid'>mkAttrQN</span>		<span class='keyglyph'>=</span> <span class='varid'>mkQN</span> <span class='varid'>withNamespaces</span> <span class='conid'>True</span>-<a name="line-449"></a>	    <span class='varid'>isPiDT</span> <span class='layout'>(</span><span class='chr'>'?'</span><span class='conop'>:</span><span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>True</span>-<a name="line-450"></a>	    <span class='varid'>isPiDT</span> <span class='layout'>(</span><span class='chr'>'!'</span><span class='conop'>:</span><span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>True</span>-<a name="line-451"></a>	    <span class='varid'>isPiDT</span> <span class='keyword'>_</span>		<span class='keyglyph'>=</span> <span class='conid'>False</span>-<a name="line-452"></a>	    <span class='varid'>mkAttrs</span>		<span class='keyglyph'>=</span> <span class='varid'>mapM</span> <span class='layout'>(</span><span class='varid'>uncurry</span> <span class='varid'>mkA</span><span class='layout'>)</span>-<a name="line-453"></a>	    <span class='varid'>mkA</span> <span class='varid'>an</span> <span class='varid'>av</span>		<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-454"></a>				  <span class='varid'>qan</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>mkAttrQN</span> <span class='varid'>nenv</span> <span class='varid'>an</span>-<a name="line-455"></a>				  <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>mkAttr</span> <span class='varid'>qan</span> <span class='layout'>(</span><span class='varid'>wrap</span> <span class='varop'>.</span> <span class='varid'>mkText</span> <span class='varop'>$</span> <span class='varid'>av</span><span class='layout'>)</span><span class='layout'>)</span>-<a name="line-456"></a>-<a name="line-457"></a>	<span class='varid'>closeAll</span>		<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span><span class='layout'>,</span> <span class='conid'>NsEnv</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>XmlTrees</span>-<a name="line-458"></a>	<span class='varid'>closeAll</span> <span class='layout'>(</span><span class='varid'>ns'</span><span class='layout'>,</span><span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>concatMap</span> <span class='varid'>wrn</span> <span class='varid'>ns'</span><span class='layout'>)</span>-<a name="line-459"></a>				  <span class='keyword'>where</span>-<a name="line-460"></a>				  <span class='varid'>wrn</span> <span class='keyglyph'>=</span> <span class='varid'>warn</span> <span class='varop'>.</span> <span class='layout'>(</span><span class='str'>"insert missing closing tag "</span> <span class='varop'>++</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>show</span>-<a name="line-461"></a>-<a name="line-462"></a><span class='comment'>-- ------------------------------------------------------------</span>+<a name="line-316"></a><a name="parseHtmlTagSoup"></a><span class='definition'>parseHtmlTagSoup</span>	<span class='keyglyph'>::</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Bool</span> <span class='keyglyph'>-&gt;</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-317"></a><span class='definition'>parseHtmlTagSoup</span> <span class='varid'>withNamespaces</span> <span class='varid'>withWarnings</span> <span class='varid'>withComment</span> <span class='varid'>removeWhiteSpace</span> <span class='varid'>asHtml</span> <span class='varid'>doc</span>+<a name="line-318"></a>    <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>docRootElem</span>+<a name="line-319"></a>	<span class='varop'>.</span> <span class='varid'>runParser</span> <span class='layout'>(</span><span class='varid'>buildCont</span> <span class='varid'>initContext</span><span class='layout'>)</span>+<a name="line-320"></a>	<span class='varop'>.</span> <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>asHtml</span>+<a name="line-321"></a>	    <span class='keyword'>then</span> <span class='varid'>lowerCaseNames</span>+<a name="line-322"></a>	    <span class='keyword'>else</span> <span class='varid'>id</span>+<a name="line-323"></a>	  <span class='layout'>)</span>+<a name="line-324"></a>	<span class='varop'>.</span> <span class='varid'>parseTagsOptions</span> <span class='layout'>(</span><span class='varid'>parseOptions</span> <span class='layout'>{</span> <span class='varid'>optTagWarning</span>   <span class='keyglyph'>=</span> <span class='varid'>withWarnings</span>+<a name="line-325"></a>					 <span class='layout'>,</span> <span class='varid'>optLookupEntity</span> <span class='keyglyph'>=</span> <span class='varid'>lookupEntity</span> <span class='varid'>withWarnings</span> <span class='varid'>asHtml</span>+<a name="line-326"></a>					 <span class='layout'>}</span>+<a name="line-327"></a>			   <span class='layout'>)</span>+<a name="line-328"></a>      <span class='layout'>)</span>+<a name="line-329"></a>    <span class='keyword'>where</span>+<a name="line-330"></a>    <span class='comment'>-- This is essential for lasy parsing:</span>+<a name="line-331"></a>    <span class='comment'>-- the call of "take 1" stops parsing, when the first element is detected</span>+<a name="line-332"></a>    <span class='comment'>-- no check on end of input sequence is required to build this (0- or 1-element list)</span>+<a name="line-333"></a>    <span class='comment'>-- so eof is never checked unneccessarily</span>+<a name="line-334"></a>+<a name="line-335"></a>    <span class='varid'>docRootElem</span>+<a name="line-336"></a>	<span class='keyglyph'>=</span> <span class='varid'>take</span> <span class='num'>1</span> <span class='varop'>.</span> <span class='varid'>filter</span> <span class='varid'>isElem</span>+<a name="line-337"></a>+<a name="line-338"></a>    <span class='varid'>initContext</span>		<span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='conid'>[]</span>+<a name="line-339"></a>			  <span class='layout'>,</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>+<a name="line-340"></a>			    <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>+<a name="line-341"></a>			    <span class='keyglyph'>]</span>+<a name="line-342"></a>			  <span class='layout'>)</span>+<a name="line-343"></a>+<a name="line-344"></a>    <span class='varid'>wrap</span>		<span class='keyglyph'>=</span> <span class='layout'>(</span><span class='conop'>:</span><span class='conid'>[]</span><span class='layout'>)</span>+<a name="line-345"></a>+<a name="line-346"></a>    <span class='varid'>warn</span>+<a name="line-347"></a>	<span class='keyglyph'>|</span> <span class='varid'>withWarnings</span>	<span class='keyglyph'>=</span> <span class='varid'>wrap</span> <span class='varop'>.</span> <span class='varid'>mkError</span> <span class='varid'>c_warn</span> <span class='varop'>.</span> <span class='varid'>show</span> <span class='varop'>.</span> <span class='layout'>(</span><span class='varid'>doc</span> <span class='varop'>++</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='layout'>(</span><span class='str'>" "</span> <span class='varop'>++</span><span class='layout'>)</span>+<a name="line-348"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>=</span> <span class='varid'>const</span> <span class='conid'>[]</span>+<a name="line-349"></a>    <span class='varid'>cmt</span>+<a name="line-350"></a>	<span class='keyglyph'>|</span> <span class='varid'>withComment</span>	<span class='keyglyph'>=</span> <span class='varid'>wrap</span> <span class='varop'>.</span> <span class='varid'>mkCmt</span>+<a name="line-351"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>=</span> <span class='varid'>const</span> <span class='conid'>[]</span>+<a name="line-352"></a>    <span class='varid'>txt</span>+<a name="line-353"></a>	<span class='keyglyph'>|</span> <span class='varid'>removeWhiteSpace</span>+<a name="line-354"></a>			<span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>t</span> <span class='keyglyph'>-&gt;</span>+<a name="line-355"></a>			  <span class='keyword'>if</span> <span class='varid'>all</span> <span class='varid'>isXmlSpaceChar</span> <span class='varid'>t</span>+<a name="line-356"></a>			  <span class='keyword'>then</span> <span class='conid'>[]</span>+<a name="line-357"></a>			  <span class='keyword'>else</span> <span class='varid'>wrap</span> <span class='varop'>.</span> <span class='varid'>mkText</span> <span class='varop'>$</span> <span class='varid'>t</span>+<a name="line-358"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>=</span> <span class='varid'>wrap</span> <span class='varop'>.</span> <span class='varid'>mkText</span>+<a name="line-359"></a>+<a name="line-360"></a>    <span class='varid'>isEmptyElem</span>+<a name="line-361"></a>	<span class='keyglyph'>|</span> <span class='varid'>asHtml</span>	<span class='keyglyph'>=</span> <span class='varid'>isEmptyHtmlTag</span>+<a name="line-362"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>=</span> <span class='varid'>const</span> <span class='conid'>False</span>+<a name="line-363"></a>+<a name="line-364"></a>    <span class='varid'>isInnerElem</span>+<a name="line-365"></a>	<span class='keyglyph'>|</span> <span class='varid'>asHtml</span>	<span class='keyglyph'>=</span> <span class='varid'>isInnerHtmlTagOf</span>+<a name="line-366"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>=</span> <span class='varid'>const</span> <span class='layout'>(</span><span class='varid'>const</span> <span class='conid'>False</span><span class='layout'>)</span>+<a name="line-367"></a>+<a name="line-368"></a>    <span class='varid'>closesElem</span>+<a name="line-369"></a>	<span class='keyglyph'>|</span> <span class='varid'>asHtml</span>	<span class='keyglyph'>=</span> <span class='keyglyph'>\</span> <span class='varid'>ns</span> <span class='varid'>n1</span> <span class='keyglyph'>-&gt;</span>+<a name="line-370"></a>			  <span class='varid'>not</span> <span class='layout'>(</span><span class='varid'>null</span> <span class='varid'>ns</span><span class='layout'>)</span>+<a name="line-371"></a>			  <span class='varop'>&amp;&amp;</span>+<a name="line-372"></a>			  <span class='varid'>n1</span> <span class='varop'>`closesHtmlTag`</span> <span class='layout'>(</span><span class='varid'>head</span> <span class='varid'>ns</span><span class='layout'>)</span>+<a name="line-373"></a>	<span class='keyglyph'>|</span> <span class='varid'>otherwise</span>	<span class='keyglyph'>=</span> <span class='varid'>const</span> <span class='layout'>(</span><span class='varid'>const</span> <span class='conid'>False</span><span class='layout'>)</span>+<a name="line-374"></a>+<a name="line-375"></a>    <span class='varid'>buildCont</span>	<span class='keyglyph'>::</span> <span class='conid'>Context</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>XmlTrees</span>+<a name="line-376"></a>    <span class='varid'>buildCont</span> <span class='varid'>ns</span>+<a name="line-377"></a>	<span class='keyglyph'>=</span> <span class='varid'>cond</span> <span class='varid'>isText</span> <span class='layout'>(</span> <span class='keyword'>do</span>+<a name="line-378"></a>			<span class='varid'>t</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getText</span>+<a name="line-379"></a>			<span class='varid'>rl</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>buildCont</span> <span class='varid'>ns</span>+<a name="line-380"></a>			<span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>txt</span> <span class='varid'>t</span> <span class='varop'>++</span> <span class='varid'>rl</span><span class='layout'>)</span>+<a name="line-381"></a>		      <span class='layout'>)</span>+<a name="line-382"></a>	  <span class='layout'>(</span> <span class='varid'>cond</span> <span class='varid'>isOpn</span> <span class='layout'>(</span> <span class='keyword'>do</span>+<a name="line-383"></a>			 <span class='layout'>(</span><span class='varid'>n</span><span class='layout'>,</span><span class='varid'>al</span><span class='layout'>)</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getOpn</span>+<a name="line-384"></a>			 <span class='varid'>openTag</span> <span class='varid'>ns</span> <span class='varid'>n</span> <span class='varid'>al</span>+<a name="line-385"></a>		       <span class='layout'>)</span>+<a name="line-386"></a>	    <span class='layout'>(</span> <span class='varid'>cond</span> <span class='varid'>isCls</span> <span class='layout'>(</span> <span class='keyword'>do</span>+<a name="line-387"></a>			   <span class='varid'>n</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getCls</span>+<a name="line-388"></a>			   <span class='varid'>closeTag</span> <span class='varid'>ns</span> <span class='varid'>n</span>+<a name="line-389"></a>			 <span class='layout'>)</span>+<a name="line-390"></a>	      <span class='layout'>(</span> <span class='varid'>cond</span> <span class='varid'>isCmt</span> <span class='layout'>(</span> <span class='keyword'>do</span>+<a name="line-391"></a>			     <span class='varid'>c</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getCmt</span>+<a name="line-392"></a>			     <span class='varid'>rl</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>buildCont</span> <span class='varid'>ns</span>+<a name="line-393"></a>			     <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>cmt</span> <span class='varid'>c</span> <span class='varop'>++</span> <span class='varid'>rl</span><span class='layout'>)</span>+<a name="line-394"></a>			   <span class='layout'>)</span>+<a name="line-395"></a>		<span class='layout'>(</span> <span class='varid'>cond</span> <span class='varid'>isWarn</span> <span class='layout'>(</span> <span class='keyword'>do</span>+<a name="line-396"></a>				<span class='varid'>w</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getWarn</span>+<a name="line-397"></a>				<span class='varid'>rl</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>buildCont</span> <span class='varid'>ns</span>+<a name="line-398"></a>				<span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>warn</span> <span class='varid'>w</span> <span class='varop'>++</span> <span class='varid'>rl</span><span class='layout'>)</span>+<a name="line-399"></a>			      <span class='layout'>)</span>+<a name="line-400"></a>		  <span class='layout'>(</span> <span class='varid'>cond</span> <span class='varid'>isPos</span> <span class='layout'>(</span> <span class='keyword'>do</span>+<a name="line-401"></a>				 <span class='varid'>getPos</span>+<a name="line-402"></a>				 <span class='varid'>buildCont</span> <span class='varid'>ns</span>+<a name="line-403"></a>			       <span class='layout'>)</span>+<a name="line-404"></a>		    <span class='layout'>(</span> <span class='varid'>cond</span> <span class='varid'>isEof</span> <span class='layout'>(</span> <span class='keyword'>do</span>+<a name="line-405"></a>				   <span class='varid'>isEof</span>+<a name="line-406"></a>				   <span class='varid'>closeAll</span> <span class='varid'>ns</span>+<a name="line-407"></a>				 <span class='layout'>)</span>+<a name="line-408"></a>		      <span class='layout'>(</span> <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>warn</span> <span class='str'>"parse error in tagsoup tree construction"</span><span class='layout'>)</span>+<a name="line-409"></a>		      <span class='layout'>)</span>+<a name="line-410"></a>		    <span class='layout'>)</span>+<a name="line-411"></a>		  <span class='layout'>)</span>+<a name="line-412"></a>		<span class='layout'>)</span>+<a name="line-413"></a>	      <span class='layout'>)</span>+<a name="line-414"></a>	    <span class='layout'>)</span>+<a name="line-415"></a>	  <span class='layout'>)</span>+<a name="line-416"></a>	<span class='keyword'>where</span>+<a name="line-417"></a>	<span class='varid'>closeTag</span>		<span class='keyglyph'>::</span> <span class='conid'>Context</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>XmlTrees</span>+<a name="line-418"></a>	<span class='varid'>closeTag</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>n'</span><span class='conop'>:</span><span class='keyword'>_</span><span class='layout'>)</span><span class='layout'>,</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>n1</span>+<a name="line-419"></a>	    <span class='keyglyph'>|</span> <span class='varid'>n'</span> <span class='varop'>==</span> <span class='varid'>n1</span>		<span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='conid'>[]</span>			<span class='comment'>-- a normal closing tag</span>+<a name="line-420"></a>								<span class='comment'>-- all other cases try to repair wrong html</span>+<a name="line-421"></a>	<span class='varid'>closeTag</span> <span class='varid'>ns'</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='layout'>(</span><span class='varid'>n'</span><span class='conop'>:</span><span class='keyword'>_</span><span class='layout'>)</span><span class='layout'>,</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>n1</span>				<span class='comment'>-- n1 closes n implicitly</span>+<a name="line-422"></a>	    <span class='keyglyph'>|</span> <span class='varid'>n'</span> <span class='varop'>`isInnerElem`</span> <span class='varid'>n1</span>				<span class='comment'>-- e.g. &lt;td&gt;...&lt;/tr&gt;</span>+<a name="line-423"></a>				<span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-424"></a>				  <span class='varid'>insCls</span> <span class='varid'>n1</span>			<span class='comment'>-- pushback &lt;/n1&gt;</span>+<a name="line-425"></a>				  <span class='varid'>insCls</span> <span class='varid'>n'</span>			<span class='comment'>-- insert a &lt;/n'&gt;</span>+<a name="line-426"></a>				  <span class='varid'>buildCont</span> <span class='varid'>ns'</span>			<span class='comment'>-- try again</span>+<a name="line-427"></a>	<span class='varid'>closeTag</span> <span class='varid'>ns'</span> <span class='varid'>n1</span>+<a name="line-428"></a>	    <span class='keyglyph'>|</span> <span class='varid'>isEmptyElem</span> <span class='varid'>n1</span>	<span class='keyglyph'>=</span> <span class='varid'>buildCont</span> <span class='varid'>ns'</span>			<span class='comment'>-- ignore a redundant closing tag for empty element</span>+<a name="line-429"></a>	<span class='varid'>closeTag</span> <span class='varid'>ns'</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='layout'>(</span><span class='varid'>n'</span><span class='conop'>:</span><span class='varid'>ns1'</span><span class='layout'>)</span><span class='layout'>,</span> <span class='keyword'>_</span><span class='layout'>)</span> <span class='varid'>n1</span>				<span class='comment'>-- insert a missing closing tag</span>+<a name="line-430"></a>	    <span class='keyglyph'>|</span> <span class='varid'>n1</span> <span class='varop'>`elem`</span> <span class='varid'>ns1'</span>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-431"></a>				  <span class='varid'>insCls</span> <span class='varid'>n1</span>+<a name="line-432"></a>				  <span class='varid'>insCls</span> <span class='varid'>n'</span>+<a name="line-433"></a>				  <span class='varid'>rl</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>buildCont</span> <span class='varid'>ns'</span>+<a name="line-434"></a>				  <span class='varid'>return</span> <span class='layout'>(</span> <span class='varid'>warn</span> <span class='layout'>(</span><span class='str'>"closing tag "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n'</span> <span class='varop'>++</span>+<a name="line-435"></a>						 <span class='str'>" expected, but "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n1</span> <span class='varop'>++</span> <span class='str'>" found"</span><span class='layout'>)</span>+<a name="line-436"></a>					   <span class='varop'>++</span> <span class='varid'>rl</span>+<a name="line-437"></a>					 <span class='layout'>)</span>+<a name="line-438"></a>	<span class='varid'>closeTag</span> <span class='varid'>ns'</span> <span class='varid'>n1</span>						<span class='comment'>-- ignore a wrong closing tag</span>+<a name="line-439"></a>				<span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-440"></a>				  <span class='varid'>rl</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>buildCont</span> <span class='varid'>ns'</span>+<a name="line-441"></a>				  <span class='varid'>return</span> <span class='layout'>(</span> <span class='varid'>warn</span> <span class='layout'>(</span><span class='str'>"no opening tag for closing tag "</span> <span class='varop'>++</span> <span class='varid'>show</span> <span class='varid'>n1</span><span class='layout'>)</span>+<a name="line-442"></a>					   <span class='varop'>++</span> <span class='varid'>rl</span>+<a name="line-443"></a>					 <span class='layout'>)</span>+<a name="line-444"></a>+<a name="line-445"></a>	<span class='varid'>openTag</span>			<span class='keyglyph'>::</span> <span class='conid'>Context</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>String</span> <span class='keyglyph'>-&gt;</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>)</span><span class='keyglyph'>]</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>XmlTrees</span>+<a name="line-446"></a>	<span class='varid'>openTag</span> <span class='varid'>cx'</span><span class='keyglyph'>@</span><span class='layout'>(</span><span class='varid'>ns'</span><span class='layout'>,</span><span class='varid'>env'</span><span class='layout'>)</span> <span class='varid'>n1</span> <span class='varid'>al1</span>+<a name="line-447"></a>	    <span class='keyglyph'>|</span> <span class='varid'>isPiDT</span> <span class='varid'>n1</span>		<span class='keyglyph'>=</span> <span class='varid'>buildCont</span> <span class='varid'>cx'</span>+<a name="line-448"></a>	    <span class='keyglyph'>|</span> <span class='varid'>isEmptyElem</span> <span class='varid'>n1</span>+<a name="line-449"></a>				<span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-450"></a>				  <span class='varid'>qn</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>mkElemQN</span> <span class='varid'>nenv</span> <span class='varid'>n1</span>+<a name="line-451"></a>				  <span class='varid'>al</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>mkAttrs</span> <span class='varid'>al1</span>+<a name="line-452"></a>				  <span class='varid'>rl</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>buildCont</span> <span class='varid'>cx'</span>+<a name="line-453"></a>				  <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>mkElement</span> <span class='varid'>qn</span> <span class='varid'>al</span> <span class='conid'>[]</span> <span class='conop'>:</span> <span class='varid'>rl</span><span class='layout'>)</span>+<a name="line-454"></a>	    <span class='keyglyph'>|</span> <span class='varid'>closesElem</span> <span class='varid'>ns'</span> <span class='varid'>n1</span>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-455"></a>				  <span class='varid'>insOpn</span> <span class='varid'>n1</span> <span class='varid'>al1</span>+<a name="line-456"></a>				  <span class='varid'>insCls</span> <span class='layout'>(</span><span class='varid'>head</span> <span class='varid'>ns'</span><span class='layout'>)</span>+<a name="line-457"></a>				  <span class='varid'>buildCont</span> <span class='varid'>cx'</span>+<a name="line-458"></a>	    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>		<span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-459"></a>				  <span class='varid'>qn</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>mkElemQN</span> <span class='varid'>nenv</span> <span class='varid'>n1</span>+<a name="line-460"></a>				  <span class='varid'>al</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>mkAttrs</span> <span class='varid'>al1</span>+<a name="line-461"></a>				  <span class='varid'>cs</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>buildCont</span> <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>n1</span> <span class='conop'>:</span> <span class='varid'>ns'</span><span class='layout'>)</span><span class='layout'>,</span> <span class='varid'>nenv</span><span class='layout'>)</span>+<a name="line-462"></a>				  <span class='varid'>rl</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>buildCont</span> <span class='varid'>cx'</span>+<a name="line-463"></a>				  <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>mkElement</span> <span class='varid'>qn</span> <span class='varid'>al</span> <span class='varid'>cs</span> <span class='conop'>:</span> <span class='varid'>rl</span><span class='layout'>)</span>+<a name="line-464"></a>	    <span class='keyword'>where</span>+<a name="line-465"></a>	    <span class='varid'>nenv</span>		<span class='keyglyph'>=</span> <span class='varid'>extendNsEnv</span> <span class='varid'>withNamespaces</span> <span class='varid'>al1</span> <span class='varid'>env'</span>+<a name="line-466"></a>	    <span class='varid'>mkElemQN</span>		<span class='keyglyph'>=</span> <span class='varid'>mkQN</span> <span class='varid'>withNamespaces</span> <span class='conid'>False</span>+<a name="line-467"></a>	    <span class='varid'>mkAttrQN</span>		<span class='keyglyph'>=</span> <span class='varid'>mkQN</span> <span class='varid'>withNamespaces</span> <span class='conid'>True</span>+<a name="line-468"></a>	    <span class='varid'>isPiDT</span> <span class='layout'>(</span><span class='chr'>'?'</span><span class='conop'>:</span><span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>True</span>+<a name="line-469"></a>	    <span class='varid'>isPiDT</span> <span class='layout'>(</span><span class='chr'>'!'</span><span class='conop'>:</span><span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='conid'>True</span>+<a name="line-470"></a>	    <span class='varid'>isPiDT</span> <span class='keyword'>_</span>		<span class='keyglyph'>=</span> <span class='conid'>False</span>+<a name="line-471"></a>	    <span class='varid'>mkAttrs</span>		<span class='keyglyph'>=</span> <span class='varid'>mapM</span> <span class='layout'>(</span><span class='varid'>uncurry</span> <span class='varid'>mkA</span><span class='layout'>)</span>+<a name="line-472"></a>	    <span class='varid'>mkA</span> <span class='varid'>an</span> <span class='varid'>av</span>		<span class='keyglyph'>=</span> <span class='keyword'>do</span>+<a name="line-473"></a>				  <span class='varid'>qan</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>mkAttrQN</span> <span class='varid'>nenv</span> <span class='varid'>an</span>+<a name="line-474"></a>				  <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>mkAttr</span> <span class='varid'>qan</span> <span class='layout'>(</span><span class='varid'>wrap</span> <span class='varop'>.</span> <span class='varid'>mkText</span> <span class='varop'>$</span> <span class='varid'>av</span><span class='layout'>)</span><span class='layout'>)</span>+<a name="line-475"></a>+<a name="line-476"></a>	<span class='varid'>closeAll</span>		<span class='keyglyph'>::</span> <span class='layout'>(</span><span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span><span class='layout'>,</span> <span class='conid'>NsEnv</span><span class='layout'>)</span> <span class='keyglyph'>-&gt;</span> <span class='conid'>Parser</span> <span class='conid'>XmlTrees</span>+<a name="line-477"></a>	<span class='varid'>closeAll</span> <span class='layout'>(</span><span class='varid'>ns'</span><span class='layout'>,</span><span class='keyword'>_</span><span class='layout'>)</span>	<span class='keyglyph'>=</span> <span class='varid'>return</span> <span class='layout'>(</span><span class='varid'>concatMap</span> <span class='varid'>wrn</span> <span class='varid'>ns'</span><span class='layout'>)</span>+<a name="line-478"></a>				  <span class='keyword'>where</span>+<a name="line-479"></a>				  <span class='varid'>wrn</span> <span class='keyglyph'>=</span> <span class='varid'>warn</span> <span class='varop'>.</span> <span class='layout'>(</span><span class='str'>"insert missing closing tag "</span> <span class='varop'>++</span><span class='layout'>)</span> <span class='varop'>.</span> <span class='varid'>show</span>+<a name="line-480"></a>+<a name="line-481"></a><span class='comment'>-- ------------------------------------------------------------</span> </pre></body> </html>
− doc/hdoc/src/Text-XML-HXT-Parser-XmlInput.html
@@ -1,394 +0,0 @@-<!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><span class='comment'>--</span>-<a name="line-6"></a><span class='comment'>-- Version : $Id: XmlInput.hs,v 1.9 2006/03/03 14:20:17 hxml Exp $</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'>XmlInput</span>-<a name="line-9"></a>    <span class='layout'>(</span> <span class='varid'>getXmlContents</span>-<a name="line-10"></a>    <span class='layout'>,</span> <span class='varid'>getXmlEntityContents</span>-<a name="line-11"></a>    <span class='layout'>,</span> <span class='varid'>getUrlContents</span>-<a name="line-12"></a>    <span class='layout'>,</span> <span class='varid'>getContentLength</span>-<a name="line-13"></a>    <span class='layout'>,</span> <span class='varid'>guessDocEncoding</span>-<a name="line-14"></a>    <span class='layout'>,</span> <span class='varid'>runInLocalURIContext</span>-<a name="line-15"></a>    <span class='layout'>,</span> <span class='varid'>runInNewURIContext</span>-<a name="line-16"></a>    <span class='layout'>,</span> <span class='varid'>getBaseURI</span>-<a name="line-17"></a>    <span class='layout'>,</span> <span class='varid'>setBaseURI</span>-<a name="line-18"></a>    <span class='layout'>,</span> <span class='varid'>getAbsolutURI</span>-<a name="line-19"></a>    <span class='layout'>,</span> <span class='varid'>isStandaloneDocument</span>-<a name="line-20"></a>    <span class='layout'>)</span>-<a name="line-21"></a>-<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'>XmlTree</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'>DOM</span><span class='varop'>.</span><span class='conid'>XmlState</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'>Parser</span><span class='varop'>.</span><span class='conid'>DefaultURI</span>-<a name="line-29"></a>    <span class='layout'>(</span> <span class='varid'>setDefaultURI</span>-<a name="line-30"></a>    <span class='layout'>)</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'>Parser</span><span class='varop'>.</span><span class='conid'>XmlParser</span>-<a name="line-33"></a>    <span class='layout'>(</span> <span class='varid'>parseXmlDocEncodingSpec</span>-<a name="line-34"></a>    <span class='layout'>,</span> <span class='varid'>parseXmlEntityEncodingSpec</span>-<a name="line-35"></a>    <span class='layout'>,</span> <span class='varid'>removeEncodingSpec</span>-<a name="line-36"></a>    <span class='layout'>)</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'>Unicode</span>-<a name="line-39"></a>    <span class='layout'>(</span> <span class='varid'>getDecodingFct</span>-<a name="line-40"></a>    <span class='layout'>,</span> <span class='varid'>guessEncoding</span>-<a name="line-41"></a>    <span class='layout'>,</span> <span class='varid'>normalizeNL</span>-<a name="line-42"></a>    <span class='layout'>)</span>-<a name="line-43"></a>-<a name="line-44"></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-45"></a>    <span class='layout'>(</span> <span class='varid'>traceTree</span>-<a name="line-46"></a>    <span class='layout'>,</span> <span class='varid'>traceSource</span>-<a name="line-47"></a>    <span class='layout'>,</span> <span class='varid'>traceMsg</span>-<a name="line-48"></a>    <span class='layout'>)</span>-<a name="line-49"></a>-<a name="line-50"></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-51"></a>    <span class='layout'>(</span> <span class='varid'>getProtocolHandler</span>-<a name="line-52"></a>    <span class='layout'>)</span>-<a name="line-53"></a>-<a name="line-54"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-55"></a><span class='comment'>--</span>-<a name="line-56"></a><span class='comment'>-- URI manipulation</span>-<a name="line-57"></a>-<a name="line-58"></a><span class='keyword'>import</span> <span class='conid'>Network</span><span class='varop'>.</span><span class='conid'>URI</span>-<a name="line-59"></a>    <span class='layout'>(</span> <span class='varid'>parseURIReference</span>-<a name="line-60"></a>    <span class='layout'>,</span> <span class='varid'>relativeTo</span>-<a name="line-61"></a>    <span class='layout'>,</span> <span class='varid'>uriScheme</span>-<a name="line-62"></a>    <span class='layout'>)</span>-<a name="line-63"></a>-<a name="line-64"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-65"></a><span class='comment'>--</span>-<a name="line-66"></a><span class='comment'>-- utilities</span>-<a name="line-67"></a>-<a name="line-68"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>-<a name="line-69"></a>-<a name="line-70"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-71"></a><span class='comment'>--</span>-<a name="line-72"></a><span class='comment'>-- filter for reading the content</span>-<a name="line-73"></a><span class='comment'>-- input: a root node with arguments in tag attribute list</span>-<a name="line-74"></a><span class='comment'>-- and without any children.</span>-<a name="line-75"></a>-<a name="line-76"></a><span class='comment'>-- attribute a_source   ("source")   for input file or uri</span>-<a name="line-77"></a><span class='comment'>--</span>-<a name="line-78"></a><span class='comment'>-- attribute a_encoding ("encoding") for encoding scheme</span>-<a name="line-79"></a><span class='comment'>--</span>-<a name="line-80"></a><span class='comment'>-- attribute a_proxy    ("proxy")    for proxy tob be used in http access</span>-<a name="line-81"></a>-<a name="line-82"></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-83"></a><span class='definition'>getXmlContents'</span> <span class='varid'>parseEncodingSpec</span>-<a name="line-84"></a>    <span class='keyglyph'>=</span> <span class='varid'>getContent'</span>-<a name="line-85"></a>      <span class='varop'>`whenM`</span> <span class='varid'>isRoot</span>-<a name="line-86"></a>      <span class='keyword'>where</span>-<a name="line-87"></a>      <span class='varid'>getContent'</span> <span class='varid'>t'</span>-<a name="line-88"></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-89"></a>	      <span class='varop'>.&gt;&gt;</span>-<a name="line-90"></a>	      <span class='varid'>getUrlContents</span>-<a name="line-91"></a>	      <span class='varop'>.&gt;&gt;</span>-<a name="line-92"></a>	      <span class='varid'>liftF</span> <span class='varid'>parseEncodingSpec</span>-<a name="line-93"></a>	      <span class='varop'>.&gt;&gt;</span>-<a name="line-94"></a>	      <span class='varid'>guessDocEncoding</span>-<a name="line-95"></a>	      <span class='varop'>.&gt;&gt;</span>-<a name="line-96"></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-97"></a>	      <span class='varop'>.&gt;&gt;</span>-<a name="line-98"></a>	      <span class='varid'>traceTree</span>-<a name="line-99"></a>	      <span class='varop'>.&gt;&gt;</span>-<a name="line-100"></a>	      <span class='varid'>traceSource</span>-<a name="line-101"></a>	    <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'>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-104"></a>-<a name="line-105"></a><span class='comment'>-- |</span>-<a name="line-106"></a><span class='comment'>-- filter for reading the content of a XML document</span>-<a name="line-107"></a><span class='comment'>--</span>-<a name="line-108"></a><span class='comment'>-- input is a root node with the source as an attibute</span>-<a name="line-109"></a><span class='comment'>-- the text is read, the encoding scheme is parsed and selected</span>-<a name="line-110"></a><span class='comment'>-- and the input is translated into the internal UTF-8 string representation</span>-<a name="line-111"></a>-<a name="line-112"></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-113"></a><span class='definition'>getXmlContents</span>-<a name="line-114"></a>    <span class='keyglyph'>=</span> <span class='varid'>getXmlContents'</span> <span class='varid'>parseXmlDocEncodingSpec</span>-<a name="line-115"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-116"></a>      <span class='varid'>setBaseURIFilter</span>-<a name="line-117"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-118"></a>      <span class='varid'>setStandAloneFilter</span>-<a name="line-119"></a>-<a name="line-120"></a><span class='comment'>-- |</span>-<a name="line-121"></a><span class='comment'>-- filter for reading the content of an external XML entity</span>-<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'>-- see also : 'getXmlContents'</span>-<a name="line-125"></a>-<a name="line-126"></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-127"></a><span class='definition'>getXmlEntityContents</span>-<a name="line-128"></a>    <span class='keyglyph'>=</span> <span class='varid'>getXmlContents'</span> <span class='varid'>parseXmlEntityEncodingSpec</span>-<a name="line-129"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-130"></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-131"></a>      <span class='varop'>.&gt;&gt;</span> -<a name="line-132"></a>      <span class='varid'>setBaseURIFilter</span>-<a name="line-133"></a>-<a name="line-134"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-135"></a>-<a name="line-136"></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-137"></a><span class='definition'>setBaseURIFilter</span>-<a name="line-138"></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-139"></a>      <span class='varop'>`whenM`</span> <span class='varid'>isRoot</span>-<a name="line-140"></a>-<a name="line-141"></a><span class='comment'>-- |</span>-<a name="line-142"></a><span class='comment'>-- filter command for saving and restoring</span>-<a name="line-143"></a><span class='comment'>-- the base URI</span>-<a name="line-144"></a><span class='comment'>--</span>-<a name="line-145"></a><span class='comment'>--    * 1.parameter f :  the filter that possible changes the base URI</span>-<a name="line-146"></a><span class='comment'>--</span>-<a name="line-147"></a><span class='comment'>--</span>-<a name="line-148"></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-149"></a>-<a name="line-150"></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-151"></a><span class='definition'>runInLocalURIContext</span> <span class='varid'>f</span> <span class='varid'>t</span>-<a name="line-152"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-153"></a>      <span class='varid'>oldContext</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getBaseURI</span>-<a name="line-154"></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-155"></a>      <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>f</span> <span class='varid'>t</span>-<a name="line-156"></a>      <span class='varid'>setBaseURI</span> <span class='varid'>oldContext</span>-<a name="line-157"></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-158"></a>      <span class='varid'>return</span> <span class='varid'>res</span>-<a name="line-159"></a>-<a name="line-160"></a><span class='comment'>-- |</span>-<a name="line-161"></a><span class='comment'>-- filter command for running an action in a new URI context</span>-<a name="line-162"></a>-<a name="line-163"></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-164"></a><span class='definition'>runInNewURIContext</span> <span class='varid'>uri</span> <span class='varid'>f</span>-<a name="line-165"></a>    <span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='varid'>uri</span>-<a name="line-166"></a>	<span class='keyglyph'>=</span> <span class='varid'>f</span>-<a name="line-167"></a>    <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>-<a name="line-168"></a>	<span class='keyglyph'>=</span> <span class='varid'>runInLocalURIContext</span>-<a name="line-169"></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-170"></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-171"></a>		     <span class='varid'>setBaseURI</span> <span class='varid'>uri</span>-<a name="line-172"></a>		     <span class='varid'>f</span> <span class='varid'>t</span>-<a name="line-173"></a>		   <span class='layout'>)</span>-<a name="line-174"></a>	  <span class='layout'>)</span>-<a name="line-175"></a>-<a name="line-176"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-177"></a><span class='comment'>-- |</span>-<a name="line-178"></a><span class='comment'>-- guessEncoding uses encoding attribute and content</span>-<a name="line-179"></a><span class='comment'>-- to determine the encoding scheme.</span>-<a name="line-180"></a><span class='comment'>--</span>-<a name="line-181"></a><span class='comment'>-- it's assumed that an encoding spec has been tried to parse before guessing the encoding.</span>-<a name="line-182"></a><span class='comment'>--</span>-<a name="line-183"></a><span class='comment'>-- UTF-8 is the default encoding</span>-<a name="line-184"></a><span class='comment'>--</span>-<a name="line-185"></a><span class='comment'>-- other supported encodings are ISO-8859-1 (also known as ISO-Latin-1),</span>-<a name="line-186"></a><span class='comment'>-- US-ASCII, UTF-16 or ISO-10646-UCS-2, UTF-16BE, UTF-16LE</span>-<a name="line-187"></a>-<a name="line-188"></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-189"></a><span class='definition'>guessDocEncoding</span>-<a name="line-190"></a>    <span class='keyglyph'>=</span> <span class='varid'>addDocEncoding</span>-<a name="line-191"></a>      <span class='varop'>`whenM`</span> <span class='varid'>isRoot</span>-<a name="line-192"></a>    <span class='keyword'>where</span>-<a name="line-193"></a>    <span class='varid'>addDocEncoding</span> <span class='varid'>n'</span>-<a name="line-194"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-195"></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-196"></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-197"></a>	    <span class='varop'>.&gt;&gt;</span>-<a name="line-198"></a>	    <span class='varid'>issueError</span>-<a name="line-199"></a>	    <span class='varop'>.&gt;&gt;</span>-<a name="line-200"></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-201"></a>	  <span class='keyword'>where</span>-<a name="line-202"></a>	  <span class='varid'>guess</span>	<span class='keyglyph'>::</span> <span class='conid'>String</span>-<a name="line-203"></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-204"></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-205"></a>		    <span class='layout'>,</span> <span class='varid'>valueOf</span> <span class='varid'>transferEncoding</span> <span class='varid'>n'</span>-<a name="line-206"></a>		    <span class='layout'>,</span> <span class='varid'>valueOf</span> <span class='varid'>a_encoding</span> <span class='varid'>n'</span>-<a name="line-207"></a>		    <span class='layout'>,</span> <span class='varid'>utf8</span>-<a name="line-208"></a>		    <span class='keyglyph'>]</span>-<a name="line-209"></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-210"></a>	      <span class='keyglyph'>=</span> <span class='varid'>decodeDoc</span> <span class='varid'>fct</span>-<a name="line-211"></a>-<a name="line-212"></a>	  <span class='varid'>encFilter</span> <span class='conid'>Nothing</span>-<a name="line-213"></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-214"></a>-<a name="line-215"></a>	  <span class='varid'>decodeDoc</span> <span class='varid'>df</span> <span class='varid'>n''</span>-<a name="line-216"></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-217"></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-218"></a>				    <span class='varop'>.&gt;&gt;</span>-<a name="line-219"></a>				    <span class='layout'>(</span> <span class='varid'>issueDecodingErrs</span>-<a name="line-220"></a>				      <span class='varop'>+++&gt;&gt;</span>-<a name="line-221"></a>				      <span class='varid'>addFatal</span> <span class='str'>"decoding errors detected"</span>-<a name="line-222"></a>				    <span class='layout'>)</span>-<a name="line-223"></a>				  <span class='layout'>)</span> <span class='varid'>n''</span>-<a name="line-224"></a>	      <span class='keyword'>where</span>-<a name="line-225"></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-226"></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-227"></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-228"></a>-<a name="line-229"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-230"></a>-<a name="line-231"></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-232"></a><span class='definition'>getDefaultURI</span>-<a name="line-233"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-234"></a>      <span class='varid'>uri</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParam</span> <span class='varid'>transferDefaultURI</span>-<a name="line-235"></a>      <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>uri</span>-<a name="line-236"></a>	 <span class='keyword'>then</span> <span class='keyword'>do</span>-<a name="line-237"></a>	      <span class='varid'>setDefaultURI</span>-<a name="line-238"></a>	      <span class='varid'>getDefaultURI</span>-<a name="line-239"></a>	 <span class='keyword'>else</span> <span class='varid'>return</span> <span class='varid'>uri</span>-<a name="line-240"></a>-<a name="line-241"></a><span class='comment'>-- |</span>-<a name="line-242"></a><span class='comment'>-- set the base URI, all other URIs are handled relative to this base URI</span>-<a name="line-243"></a><span class='comment'>--</span>-<a name="line-244"></a><span class='comment'>-- the default base URI is @file:\/\/\/\&lt;current-working-dir\&gt;\/@</span>-<a name="line-245"></a><span class='comment'>--</span>-<a name="line-246"></a><span class='comment'>-- see also : 'getBaseURI'</span>-<a name="line-247"></a>-<a name="line-248"></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-249"></a><span class='definition'>setBaseURI</span> <span class='varid'>str</span>-<a name="line-250"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-251"></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-252"></a>      <span class='varid'>setSysParam</span> <span class='varid'>transferURI</span> <span class='varid'>str</span>-<a name="line-253"></a>-<a name="line-254"></a><span class='comment'>-- |</span>-<a name="line-255"></a><span class='comment'>-- read the current base URI</span>-<a name="line-256"></a><span class='comment'>--</span>-<a name="line-257"></a><span class='comment'>-- see also : 'setBaseURI'</span>-<a name="line-258"></a>-<a name="line-259"></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-260"></a><span class='definition'>getBaseURI</span>-<a name="line-261"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-262"></a>      <span class='varid'>uri</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getSysParam</span> <span class='varid'>transferURI</span>-<a name="line-263"></a>      <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>uri</span>-<a name="line-264"></a>	 <span class='keyword'>then</span> <span class='keyword'>do</span>-<a name="line-265"></a>	      <span class='varid'>res</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getDefaultURI</span>-<a name="line-266"></a>	      <span class='varid'>setBaseURI</span> <span class='varid'>res</span>-<a name="line-267"></a>	      <span class='varid'>getBaseURI</span>-<a name="line-268"></a>	 <span class='keyword'>else</span> <span class='varid'>return</span> <span class='varid'>uri</span>-<a name="line-269"></a>-<a name="line-270"></a><span class='comment'>-- |</span>-<a name="line-271"></a><span class='comment'>-- transform an URI into an absolut URI using the current base URI</span>-<a name="line-272"></a><span class='comment'>--</span>-<a name="line-273"></a><span class='comment'>--</span>-<a name="line-274"></a><span class='comment'>--    * 1.parameter uri :  the URI as string</span>-<a name="line-275"></a><span class='comment'>--</span>-<a name="line-276"></a><span class='comment'>--</span>-<a name="line-277"></a><span class='comment'>--    - returns : the absolut URI as string or \"\" in case of an error</span>-<a name="line-278"></a>-<a name="line-279"></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-280"></a><span class='definition'>getAbsolutURI</span> <span class='varid'>uri</span>-<a name="line-281"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-282"></a>      <span class='varid'>baseUri</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getBaseURI</span>-<a name="line-283"></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-284"></a>-<a name="line-285"></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-286"></a><span class='definition'>expandURI</span> <span class='varid'>uri</span> <span class='varid'>base</span>-<a name="line-287"></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-288"></a>    <span class='keyword'>where</span>-<a name="line-289"></a>    <span class='varid'>expand</span> <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-290"></a>	     <span class='varid'>base'</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>parseURIReference</span> <span class='varid'>base</span>-<a name="line-291"></a>	     <span class='varid'>uri'</span>  <span class='keyglyph'>&lt;-</span> <span class='varid'>parseURIReference</span> <span class='varid'>uri</span>-<a name="line-292"></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-293"></a>	     <span class='varid'>return</span> <span class='varop'>$</span> <span class='varid'>show</span> <span class='varid'>abs'</span>-<a name="line-294"></a>-<a name="line-295"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-296"></a>-<a name="line-297"></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-298"></a><span class='definition'>setStandAloneFilter</span>-<a name="line-299"></a>    <span class='keyglyph'>=</span> <span class='varid'>performAction</span> <span class='varid'>setStandAlone</span>-<a name="line-300"></a>      <span class='keyword'>where</span>-<a name="line-301"></a>      <span class='varid'>setStandAlone</span> <span class='varid'>t</span>-<a name="line-302"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-303"></a>	    <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>standalone</span>-<a name="line-304"></a>	       <span class='keyword'>then</span> <span class='varid'>return</span> <span class='conid'>()</span>-<a name="line-305"></a>	       <span class='keyword'>else</span> <span class='keyword'>do</span>-<a name="line-306"></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-307"></a>		    <span class='varid'>setSysParam</span> <span class='varid'>a_standalone</span> <span class='varid'>standaloneVal</span>-<a name="line-308"></a>	    <span class='keyword'>where</span>-<a name="line-309"></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-310"></a>	    <span class='varid'>standaloneVal</span>	<span class='keyglyph'>=</span> <span class='varid'>showXText</span> <span class='varid'>standalone</span>-<a name="line-311"></a>-<a name="line-312"></a><span class='comment'>-- |</span>-<a name="line-313"></a><span class='comment'>-- predicate for testing the standalone document attribute</span>-<a name="line-314"></a>-<a name="line-315"></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-316"></a><span class='definition'>isStandaloneDocument</span>-<a name="line-317"></a>    <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-318"></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-319"></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-320"></a>-<a name="line-321"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-322"></a>-<a name="line-323"></a><span class='comment'>-- |</span>-<a name="line-324"></a><span class='comment'>-- the hard io operations</span>-<a name="line-325"></a><span class='comment'>--</span>-<a name="line-326"></a><span class='comment'>-- for reading a file or accessing a document via http</span>-<a name="line-327"></a><span class='comment'>-- input must be a root node with a @source@ attribute specifying the URI</span>-<a name="line-328"></a>-<a name="line-329"></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-330"></a><span class='definition'>getUrlContents</span>-<a name="line-331"></a>    <span class='keyglyph'>=</span>  <span class='varid'>getCont</span>-<a name="line-332"></a>      <span class='varop'>`whenM`</span> <span class='varid'>isRoot</span>-<a name="line-333"></a>    <span class='keyword'>where</span>-<a name="line-334"></a>    <span class='varid'>getCont</span> <span class='varid'>n'</span>-<a name="line-335"></a>	<span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-336"></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-337"></a>	  <span class='varid'>uri</span> <span class='keyglyph'>&lt;-</span> <span class='varid'>getAbsolutURI</span> <span class='varid'>src</span>-<a name="line-338"></a>	  <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>uri</span>-<a name="line-339"></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-340"></a>	     <span class='keyword'>else</span> <span class='keyword'>let</span>-<a name="line-341"></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-342"></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-343"></a>		  <span class='varid'>handler</span>  <span class='keyglyph'>=</span> <span class='varid'>getProtocolHandler</span> <span class='varid'>proto</span>-<a name="line-344"></a>		  <span class='keyword'>in</span>-<a name="line-345"></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-346"></a>			   <span class='varop'>.&gt;</span>-<a name="line-347"></a>			   <span class='varid'>addAttr</span> <span class='varid'>transferURI</span> <span class='varid'>uri</span>-<a name="line-348"></a>			  <span class='layout'>)</span>-<a name="line-349"></a>		    <span class='varop'>.&gt;&gt;</span>-<a name="line-350"></a>		    <span class='varid'>handler</span> <span class='varid'>uri'</span>-<a name="line-351"></a>		  <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>n'</span>-<a name="line-352"></a>	<span class='keyword'>where</span>-<a name="line-353"></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-354"></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-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'>-- compute the length of the data for a document read previously</span>-<a name="line-360"></a><span class='comment'>-- by a call of 'getUrlContents. The result is stored as an attribute</span>-<a name="line-361"></a><span class='comment'>-- value in the document root node. the attribute name is 'a_contentLength'</span>-<a name="line-362"></a>-<a name="line-363"></a><a name="getContentLength"></a><span class='definition'>getContentLength</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-364"></a><span class='definition'>getContentLength</span>-<a name="line-365"></a>    <span class='keyglyph'>=</span> <span class='varid'>addAttrl</span> <span class='varid'>contentLengthAttr</span>-<a name="line-366"></a>      <span class='varop'>`when`</span> <span class='varid'>isRoot</span>-<a name="line-367"></a>      <span class='keyword'>where</span>-<a name="line-368"></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-369"></a>-<a name="line-370"></a>      <span class='varid'>contentLengthAttr</span>		<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-371"></a>      <span class='varid'>contentLengthAttr</span> <span class='varid'>t</span>-<a name="line-372"></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-373"></a>		     <span class='conop'>:-&gt;</span> <span class='varid'>none</span>-<a name="line-374"></a>		   <span class='layout'>,</span> <span class='varid'>hasAttr</span> <span class='varid'>http_contentLength</span>-<a name="line-375"></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-376"></a>		   <span class='layout'>,</span> <span class='varid'>this</span>-<a name="line-377"></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-378"></a>		   <span class='keyglyph'>]</span> <span class='varid'>t</span>-<a name="line-379"></a>-<a name="line-380"></a>      <span class='varid'>getLength</span>			<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-381"></a>      <span class='varid'>getLength</span> <span class='varid'>t</span>-<a name="line-382"></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-383"></a>-<a name="line-384"></a><span class='comment'>-- ------------------------------------------------------------</span>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-Parser.html
@@ -1,48 +0,0 @@-<!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'>-- Version : $Id: Parser.hs,v 1.2 2006/11/09 20:27:42 hxml Exp $</span>-<a name="line-5"></a><span class='comment'>--</span>-<a name="line-6"></a><span class='comment'>--</span>-<a name="line-7"></a><span class='comment'>-- the "main" building blocks for an application.</span>-<a name="line-8"></a><span class='comment'>-- this module exports all important functions for parsing, validating and transforming XML.</span>-<a name="line-9"></a><span class='comment'>-- it also exports all basic datatypes and functions of the toolbox.</span>-<a name="line-10"></a><span class='comment'>--</span>-<a name="line-11"></a>-<a name="line-12"></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-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'>DOM</span>-<a name="line-14"></a>-<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'>XmlParser</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'>HtmlParser</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'>XmlInput</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'>Parser</span><span class='varop'>.</span><span class='conid'>XmlOutput</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'>Parser</span><span class='varop'>.</span><span class='conid'>DTDProcessing</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'>Parser</span><span class='varop'>.</span><span class='conid'>MainFunctions</span>-<a name="line-21"></a>-<a name="line-22"></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-23"></a>    <span class='layout'>)</span>-<a name="line-24"></a><span class='keyword'>where</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'>DOM</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'>Parser</span><span class='varop'>.</span><span class='conid'>XmlParser</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'>HtmlParser</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'>XmlInput</span>-<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'>Parser</span><span class='varop'>.</span><span class='conid'>XmlOutput</span>-<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'>Parser</span><span class='varop'>.</span><span class='conid'>DTDProcessing</span>-<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'>Parser</span><span class='varop'>.</span><span class='conid'>MainFunctions</span>-<a name="line-34"></a>-<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'>Validation</span>-<a name="line-36"></a>-<a name="line-37"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-38"></a>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-Validator-AttributeValueValidation.html
@@ -1,368 +0,0 @@-<!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><span class='comment'>-- Version : $Id: AttributeValueValidation.hs,v 1.1 2004/09/02 19:12:02 hxml Exp $</span>-<a name="line-18"></a><span class='comment'>--</span>-<a name="line-19"></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-20"></a>    <span class='layout'>(</span> <span class='varid'>checkAttributeValue</span>-<a name="line-21"></a>    <span class='layout'>,</span> <span class='varid'>normalizeAttributeValue</span>-<a name="line-22"></a>    <span class='layout'>)</span>-<a name="line-23"></a><span class='keyword'>where</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='layout'>(</span> <span class='varid'>parseNMToken</span>-<a name="line-27"></a>    <span class='layout'>,</span> <span class='varid'>parseName</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'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>-<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'>Util</span>-<a name="line-32"></a>-<a name="line-33"></a><span class='comment'>-- |</span>-<a name="line-34"></a><span class='comment'>-- Checks if the attribute value meets the lexical constraints of its type.</span>-<a name="line-35"></a><span class='comment'>--</span>-<a name="line-36"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>-<a name="line-37"></a><span class='comment'>--</span>-<a name="line-38"></a><span class='comment'>--    - 2.parameter attrDecl :  the declaration of the attribute from the DTD</span>-<a name="line-39"></a><span class='comment'>--</span>-<a name="line-40"></a><span class='comment'>--    - returns : a function which takes an element (XTag or XDTD ATTLIST),</span>-<a name="line-41"></a><span class='comment'>--                    checks if the attribute value meets the lexical constraints</span>-<a name="line-42"></a><span class='comment'>--                    of its type and returns a list of errors</span>-<a name="line-43"></a>-<a name="line-44"></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-45"></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-46"></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-47"></a>      <span class='keyword'>where</span>-<a name="line-48"></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-49"></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-50"></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-51"></a>-<a name="line-52"></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-53"></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-54"></a>      <span class='keyword'>where</span>-<a name="line-55"></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-56"></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-57"></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-58"></a>-<a name="line-59"></a><span class='definition'>checkAttributeValue</span> <span class='keyword'>_</span> <span class='varid'>nd</span> <span class='varid'>n</span>-<a name="line-60"></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-61"></a>-<a name="line-62"></a>-<a name="line-63"></a><span class='comment'>-- |</span>-<a name="line-64"></a><span class='comment'>-- Dispatches the attibute check by the attribute type.</span>-<a name="line-65"></a><span class='comment'>--</span>-<a name="line-66"></a><span class='comment'>--    * 1.parameter typ :  the attribute type</span>-<a name="line-67"></a><span class='comment'>--</span>-<a name="line-68"></a><span class='comment'>--    - 2.parameter dtdPart :  the children of the @DOCTYPE@ node</span>-<a name="line-69"></a><span class='comment'>--</span>-<a name="line-70"></a><span class='comment'>--    - 3.parameter attrValue :  the normalized attribute value to be checked</span>-<a name="line-71"></a><span class='comment'>--</span>-<a name="line-72"></a><span class='comment'>--    - 4.parameter attrDecl :  the declaration of the attribute from the DTD</span>-<a name="line-73"></a><span class='comment'>--</span>-<a name="line-74"></a><span class='comment'>--    - returns : a functions which takes an element (XTag or XDTD ATTLIST),</span>-<a name="line-75"></a><span class='comment'>--                        checks if the attribute value meets the lexical constraints</span>-<a name="line-76"></a><span class='comment'>--                        of its type and returns a list of errors</span>-<a name="line-77"></a>-<a name="line-78"></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-79"></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-80"></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-81"></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-82"></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-83"></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-84"></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-85"></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-86"></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-87"></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-88"></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-89"></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-90"></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-91"></a>-<a name="line-92"></a><span class='comment'>-- |</span>-<a name="line-93"></a><span class='comment'>-- Checks the value of Enumeration attribute types. (3.3.1 \/ p.27 in Spec)</span>-<a name="line-94"></a><span class='comment'>--</span>-<a name="line-95"></a><span class='comment'>--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD</span>-<a name="line-96"></a><span class='comment'>--</span>-<a name="line-97"></a><span class='comment'>--    - 2.parameter attrValue :  the normalized attribute value to be checked</span>-<a name="line-98"></a>-<a name="line-99"></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-100"></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-101"></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-102"></a>      <span class='keyword'>then</span> <span class='varid'>none</span>-<a name="line-103"></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-104"></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-105"></a>      <span class='keyword'>where</span>-<a name="line-106"></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-107"></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-108"></a>-<a name="line-109"></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-110"></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-111"></a>      <span class='varid'>getEnumVal</span> <span class='keyword'>_</span>                         <span class='keyglyph'>=</span> <span class='str'>""</span>-<a name="line-112"></a>-<a name="line-113"></a><span class='definition'>checkValueEnumeration</span> <span class='varid'>n</span> <span class='keyword'>_</span>-<a name="line-114"></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-115"></a>-<a name="line-116"></a>-<a name="line-117"></a><span class='comment'>-- |</span>-<a name="line-118"></a><span class='comment'>-- Checks the value of ENTITY attribute types. (3.3.1 \/ p.26 in Spec)</span>-<a name="line-119"></a><span class='comment'>--</span>-<a name="line-120"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node, to get the</span>-<a name="line-121"></a><span class='comment'>--                    unparsed entity declarations</span>-<a name="line-122"></a><span class='comment'>--</span>-<a name="line-123"></a><span class='comment'>--    - 2.parameter attrDecl :  the declaration of the attribute from the DTD</span>-<a name="line-124"></a><span class='comment'>--</span>-<a name="line-125"></a><span class='comment'>--    - 3.parameter attrValue :  the normalized attribute value to be checked</span>-<a name="line-126"></a>-<a name="line-127"></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-128"></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-129"></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-130"></a>      <span class='keyword'>then</span> <span class='varid'>none</span>-<a name="line-131"></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-132"></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-133"></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-134"></a>      <span class='keyword'>where</span>-<a name="line-135"></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-136"></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-137"></a>-<a name="line-138"></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-139"></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-140"></a>      <span class='varid'>getEnumVal</span> <span class='keyword'>_</span>                           <span class='keyglyph'>=</span> <span class='str'>""</span>-<a name="line-141"></a>-<a name="line-142"></a>-<a name="line-143"></a><span class='definition'>checkValueEntity</span> <span class='keyword'>_</span> <span class='varid'>n</span> <span class='keyword'>_</span>-<a name="line-144"></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-145"></a>-<a name="line-146"></a>-<a name="line-147"></a><span class='comment'>-- |</span>-<a name="line-148"></a><span class='comment'>-- Checks the value of ENTITIES attribute types. (3.3.1 \/ p.26 in Spec)</span>-<a name="line-149"></a><span class='comment'>--</span>-<a name="line-150"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node, to get the</span>-<a name="line-151"></a><span class='comment'>--                    unparsed entity declarations</span>-<a name="line-152"></a><span class='comment'>--</span>-<a name="line-153"></a><span class='comment'>--    - 2.parameter attrDecl :  the declaration of the attribute from the DTD</span>-<a name="line-154"></a><span class='comment'>--</span>-<a name="line-155"></a><span class='comment'>--    - 3.parameter attrValue :  the normalized attribute value to be checked</span>-<a name="line-156"></a>-<a name="line-157"></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-158"></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-159"></a>    <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>valueList</span>-<a name="line-160"></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-161"></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-162"></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-163"></a>      <span class='keyword'>where</span>-<a name="line-164"></a>      <span class='varid'>valueList</span> <span class='keyglyph'>=</span> <span class='varid'>words</span> <span class='varid'>attrValue</span>-<a name="line-165"></a>-<a name="line-166"></a><span class='definition'>checkValueEntities</span> <span class='keyword'>_</span> <span class='varid'>n</span> <span class='keyword'>_</span>-<a name="line-167"></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-168"></a>-<a name="line-169"></a>-<a name="line-170"></a><span class='comment'>-- |</span>-<a name="line-171"></a><span class='comment'>-- Checks the value of NMTOKEN attribute types. (3.3.1 \/ p.26 in Spec)</span>-<a name="line-172"></a><span class='comment'>--</span>-<a name="line-173"></a><span class='comment'>--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD</span>-<a name="line-174"></a><span class='comment'>--</span>-<a name="line-175"></a><span class='comment'>--    - 2.parameter attrValue :  the normalized attribute value to be checked</span>-<a name="line-176"></a>-<a name="line-177"></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-178"></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-179"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkNmtoken</span> <span class='varid'>parseRes</span>-<a name="line-180"></a>      <span class='keyword'>where</span>-<a name="line-181"></a>      <span class='varid'>parseRes</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span>-<a name="line-182"></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-183"></a>-<a name="line-184"></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-185"></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-186"></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-187"></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-188"></a>-<a name="line-189"></a>      <span class='varid'>checkNmtoken</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='varid'>none</span>-<a name="line-190"></a>-<a name="line-191"></a>-<a name="line-192"></a><span class='definition'>checkValueNmtoken</span> <span class='varid'>n</span> <span class='keyword'>_</span>-<a name="line-193"></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-194"></a>-<a name="line-195"></a>-<a name="line-196"></a><span class='comment'>-- |</span>-<a name="line-197"></a><span class='comment'>-- Checks the value of NMTOKENS attribute types. (3.3.1 \/ p.26 in Spec)</span>-<a name="line-198"></a><span class='comment'>--</span>-<a name="line-199"></a><span class='comment'>--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD</span>-<a name="line-200"></a><span class='comment'>--</span>-<a name="line-201"></a><span class='comment'>--    - 2.parameter attrValue :  the normalized attribute value to be checked</span>-<a name="line-202"></a>-<a name="line-203"></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-204"></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-205"></a>    <span class='keyglyph'>=</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>valueList</span>-<a name="line-206"></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-207"></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-208"></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-209"></a>      <span class='keyword'>where</span>-<a name="line-210"></a>      <span class='varid'>valueList</span> <span class='keyglyph'>=</span> <span class='varid'>words</span> <span class='varid'>attrValue</span>-<a name="line-211"></a>-<a name="line-212"></a><span class='definition'>checkValueNmtokens</span> <span class='varid'>n</span> <span class='keyword'>_</span>-<a name="line-213"></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-214"></a>-<a name="line-215"></a>-<a name="line-216"></a><span class='comment'>-- |</span>-<a name="line-217"></a><span class='comment'>-- Checks the value of ID attribute types. (3.3.1 \/ p.25 in Spec)</span>-<a name="line-218"></a><span class='comment'>--</span>-<a name="line-219"></a><span class='comment'>--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD</span>-<a name="line-220"></a><span class='comment'>--</span>-<a name="line-221"></a><span class='comment'>--    - 2.parameter attrValue :  the normalized attribute value to be checked</span>-<a name="line-222"></a>-<a name="line-223"></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-224"></a><span class='definition'>checkValueId</span> <span class='varid'>attrDecl</span> <span class='varid'>attrValue</span>-<a name="line-225"></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-226"></a>-<a name="line-227"></a>-<a name="line-228"></a><span class='comment'>-- |</span>-<a name="line-229"></a><span class='comment'>-- Checks the value of IDREF attribute types. (3.3.1 \/ p.26 in Spec)</span>-<a name="line-230"></a><span class='comment'>--</span>-<a name="line-231"></a><span class='comment'>--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD</span>-<a name="line-232"></a><span class='comment'>--</span>-<a name="line-233"></a><span class='comment'>--    - 2.parameter attrValue :  the normalized attribute value to be checked</span>-<a name="line-234"></a>-<a name="line-235"></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-236"></a><span class='definition'>checkValueIdref</span> <span class='varid'>attrDecl</span> <span class='varid'>attrValue</span>-<a name="line-237"></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-238"></a>-<a name="line-239"></a>-<a name="line-240"></a><span class='comment'>-- |</span>-<a name="line-241"></a><span class='comment'>-- Checks the value of IDREFS attribute types. (3.3.1 \/ p.26 in Spec)</span>-<a name="line-242"></a><span class='comment'>--</span>-<a name="line-243"></a><span class='comment'>--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD</span>-<a name="line-244"></a><span class='comment'>--</span>-<a name="line-245"></a><span class='comment'>--    - 2.parameter attrValue :  the normalized attribute value to be checked</span>-<a name="line-246"></a>-<a name="line-247"></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-248"></a><span class='definition'>checkValueIdrefs</span> <span class='varid'>attrDecl</span> <span class='varid'>attrValue</span>-<a name="line-249"></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-250"></a>-<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'>-- General helper functions for checking attribute values</span>-<a name="line-255"></a><span class='comment'>--</span>-<a name="line-256"></a>-<a name="line-257"></a><span class='comment'>-- |</span>-<a name="line-258"></a><span class='comment'>-- Checks if the value of an attribute is a name.</span>-<a name="line-259"></a><span class='comment'>--</span>-<a name="line-260"></a><span class='comment'>--    * 1.parameter msg :  error message, should be "Entity" or "Attribute value"</span>-<a name="line-261"></a><span class='comment'>--</span>-<a name="line-262"></a><span class='comment'>--    - 2.parameter attrDecl :  the declaration of the attribute from the DTD</span>-<a name="line-263"></a><span class='comment'>--</span>-<a name="line-264"></a><span class='comment'>--    - 3.parameter attrValue :  the normalized attribute value to be checked</span>-<a name="line-265"></a>-<a name="line-266"></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-267"></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-268"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkName</span> <span class='varid'>parseRes</span>-<a name="line-269"></a>      <span class='keyword'>where</span>-<a name="line-270"></a>      <span class='varid'>parseRes</span> <span class='keyglyph'>::</span> <span class='conid'>XmlTrees</span>-<a name="line-271"></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-272"></a>-<a name="line-273"></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-274"></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-275"></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-276"></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-277"></a>-<a name="line-278"></a>      <span class='varid'>checkName</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='varid'>none</span>-<a name="line-279"></a>-<a name="line-280"></a>-<a name="line-281"></a><span class='definition'>checkForName</span> <span class='keyword'>_</span> <span class='varid'>n</span> <span class='keyword'>_</span>-<a name="line-282"></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-283"></a>-<a name="line-284"></a>-<a name="line-285"></a><span class='comment'>-- |</span>-<a name="line-286"></a><span class='comment'>-- Gets the element name from an attribute list of an XDTD ATTLIST node.</span>-<a name="line-287"></a><span class='comment'>--</span>-<a name="line-288"></a><span class='comment'>--    * 1.parameter tag :  the attibute list of an XDTD ATTLIST</span>-<a name="line-289"></a><span class='comment'>--</span>-<a name="line-290"></a><span class='comment'>--    - returns : the element name</span>-<a name="line-291"></a>-<a name="line-292"></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-293"></a><span class='definition'>getElemName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span>-<a name="line-294"></a>-<a name="line-295"></a>-<a name="line-296"></a><span class='comment'>-- |</span>-<a name="line-297"></a><span class='comment'>-- Gets the attribute name from an attribute list of an XDTD ATTLIST node.</span>-<a name="line-298"></a><span class='comment'>--</span>-<a name="line-299"></a><span class='comment'>--    * 1.parameter tag :  the attibute list of an XDTD ATTLIST</span>-<a name="line-300"></a><span class='comment'>--</span>-<a name="line-301"></a><span class='comment'>--    - returns : the attribute name</span>-<a name="line-302"></a>-<a name="line-303"></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-304"></a><span class='definition'>getAttrName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_value</span>-<a name="line-305"></a>-<a name="line-306"></a>-<a name="line-307"></a>-<a name="line-308"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>-<a name="line-309"></a>-<a name="line-310"></a>-<a name="line-311"></a><a name="normalizeAttributeValue"></a><span class='comment'>-- |</span>-<a name="line-312"></a><span class='comment'>-- Normalizes an attribute value with respect to its type. (3.3.3 \/ p.29 in Spec)</span>-<a name="line-313"></a><span class='comment'>--</span>-<a name="line-314"></a><span class='comment'>--    * 1.parameter attrDecl :  the declaration of the attribute from the DTD. Expected</span>-<a name="line-315"></a><span class='comment'>--                   is a list. If the list is empty, no declaration exists.</span>-<a name="line-316"></a><span class='comment'>--</span>-<a name="line-317"></a><span class='comment'>--    - 2.parameter value :  the attribute value to be normalized</span>-<a name="line-318"></a><span class='comment'>--</span>-<a name="line-319"></a><span class='comment'>--    - returns : the normalized value</span>-<a name="line-320"></a><span class='comment'>--</span>-<a name="line-321"></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-322"></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-323"></a>    <span class='keyglyph'>=</span> <span class='varid'>normalizeAttribute</span> <span class='varid'>attrType</span>-<a name="line-324"></a>      <span class='keyword'>where</span>-<a name="line-325"></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-326"></a>-<a name="line-327"></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-328"></a>      <span class='varid'>normalizeAttribute</span> <span class='varid'>typ</span>-<a name="line-329"></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-330"></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-331"></a>-<a name="line-332"></a>-<a name="line-333"></a><span class='comment'>-- Attribute not declared in DTD, normalization as CDATA</span>-<a name="line-334"></a><span class='definition'>normalizeAttributeValue</span> <span class='keyword'>_</span> <span class='varid'>value</span>-<a name="line-335"></a>    <span class='keyglyph'>=</span> <span class='varid'>cdataNormalization</span> <span class='varid'>value</span>-<a name="line-336"></a>-<a name="line-337"></a>-<a name="line-338"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-339"></a><span class='comment'>-- Helper functions for normalization</span>-<a name="line-340"></a>-<a name="line-341"></a>-<a name="line-342"></a><a name="cdataNormalization"></a><span class='comment'>-- |</span>-<a name="line-343"></a><span class='comment'>-- Normalization of CDATA attribute values.</span>-<a name="line-344"></a><span class='comment'>-- is already done when parsing</span>-<a name="line-345"></a><span class='comment'>-- during entity substituion for attribute values</span>-<a name="line-346"></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-347"></a><span class='definition'>cdataNormalization</span> <span class='keyglyph'>=</span> <span class='varid'>id</span>-<a name="line-348"></a>-<a name="line-349"></a>-<a name="line-350"></a><a name="otherNormalization"></a><span class='comment'>-- | Normalization of attribute values other than CDATA.</span>-<a name="line-351"></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-352"></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-353"></a>-<a name="line-354"></a><a name="reduceWSSequences"></a><span class='comment'>-- | Reduce whitespace sequences to a single whitespace.</span>-<a name="line-355"></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-356"></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-357"></a>-<a name="line-358"></a>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-Validator-DTDValidation.html
@@ -1,638 +0,0 @@-<!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><span class='comment'>-- Version : $Id: DTDValidation.hs,v 1.1 2004/09/02 19:12:02 hxml Exp $</span>-<a name="line-25"></a>-<a name="line-26"></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-27"></a>    <span class='layout'>(</span> <span class='varid'>removeDoublicateDefs</span>-<a name="line-28"></a>    <span class='layout'>,</span> <span class='varid'>validateDTD</span>-<a name="line-29"></a>    <span class='layout'>)</span>-<a name="line-30"></a><span class='keyword'>where</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'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>-<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'>Validator</span><span class='varop'>.</span><span class='conid'>AttributeValueValidation</span>-<a name="line-35"></a>-<a name="line-36"></a>-<a name="line-37"></a>-<a name="line-38"></a><span class='comment'>-- |</span>-<a name="line-39"></a><span class='comment'>-- Validate a DTD.</span>-<a name="line-40"></a><span class='comment'>--</span>-<a name="line-41"></a><span class='comment'>--    - returns : a functions which takes the DTD subset of the XmlTree, checks</span>-<a name="line-42"></a><span class='comment'>--                  if the DTD is valid and returns a list of errors</span>-<a name="line-43"></a>-<a name="line-44"></a><a name="validateDTD"></a><span class='definition'>validateDTD</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-45"></a><span class='definition'>validateDTD</span> <span class='varid'>dtdPart</span>-<a name="line-46"></a>    <span class='keyglyph'>=</span> <span class='comment'>{-# SCC "validateNotations" #-}</span> <span class='varid'>validateNotations</span> <span class='varid'>dtdPart'</span>-<a name="line-47"></a>      <span class='varop'>++</span>-<a name="line-48"></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-49"></a>      <span class='varop'>++</span>-<a name="line-50"></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-51"></a>      <span class='varop'>++</span>-<a name="line-52"></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-53"></a>-<a name="line-54"></a>      <span class='keyword'>where</span>-<a name="line-55"></a>      <span class='varid'>dtdPart'</span> <span class='keyglyph'>=</span> <span class='varid'>getChildren</span> <span class='varid'>dtdPart</span>-<a name="line-56"></a>-<a name="line-57"></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-58"></a>      <span class='varid'>notationNames</span>-<a name="line-59"></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-60"></a>-<a name="line-61"></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-62"></a>      <span class='varid'>elemNames</span>-<a name="line-63"></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-64"></a>-<a name="line-65"></a>-<a name="line-66"></a>-<a name="line-67"></a>-<a name="line-68"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-69"></a>-<a name="line-70"></a><span class='comment'>-- |</span>-<a name="line-71"></a><span class='comment'>-- Returns a list of XText values.</span>-<a name="line-72"></a><span class='comment'>--</span>-<a name="line-73"></a><span class='comment'>--    * 1.parameter xtextList :  a list of XText nodes</span>-<a name="line-74"></a><span class='comment'>--</span>-<a name="line-75"></a><span class='comment'>--    - returns : the values of the XText nodes</span>-<a name="line-76"></a>-<a name="line-77"></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-78"></a><span class='definition'>getXTextValues</span>-<a name="line-79"></a>  <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='varid'>showT</span>-<a name="line-80"></a>  <span class='keyword'>where</span>-<a name="line-81"></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-82"></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-83"></a>    <span class='varid'>showT</span> <span class='keyword'>_</span>             <span class='keyglyph'>=</span> <span class='conid'>[]</span>-<a name="line-84"></a>-<a name="line-85"></a>-<a name="line-86"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-87"></a>-<a name="line-88"></a>-<a name="line-89"></a><span class='comment'>-- |</span>-<a name="line-90"></a><span class='comment'>-- Validation of Notations, checks if all notation names are unique.</span>-<a name="line-91"></a><span class='comment'>-- Validity constraint: Unique Notation Name (4.7 \/ p.44 in Spec)</span>-<a name="line-92"></a><span class='comment'>--</span>-<a name="line-93"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>-<a name="line-94"></a><span class='comment'>--</span>-<a name="line-95"></a><span class='comment'>--    - returns : a list of errors</span>-<a name="line-96"></a>-<a name="line-97"></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-98"></a><span class='definition'>validateNotations</span> <span class='varid'>dtdPart</span>-<a name="line-99"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkForUniqueNotation</span> <span class='varid'>notations</span> <span class='conid'>[]</span>-<a name="line-100"></a>      <span class='keyword'>where</span>-<a name="line-101"></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-102"></a>-<a name="line-103"></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-104"></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-105"></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-106"></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-107"></a>		 <span class='varop'>++</span>-<a name="line-108"></a>		 <span class='varid'>checkForUniqueNotation</span> <span class='varid'>xs</span> <span class='varid'>used</span>-<a name="line-109"></a>-<a name="line-110"></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-111"></a>	    <span class='keyword'>where</span>-<a name="line-112"></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-113"></a>-<a name="line-114"></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-115"></a>-<a name="line-116"></a>      <span class='varid'>checkForUniqueNotation</span> <span class='varid'>nd</span> <span class='keyword'>_</span>-<a name="line-117"></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-118"></a>-<a name="line-119"></a>-<a name="line-120"></a><span class='comment'>-- |</span>-<a name="line-121"></a><span class='comment'>-- Validation of Entities.</span>-<a name="line-122"></a><span class='comment'>--</span>-<a name="line-123"></a><span class='comment'>-- 1. Issues a warning if entities are declared multiple times.</span>-<a name="line-124"></a><span class='comment'>--</span>-<a name="line-125"></a><span class='comment'>--    Optional warning: (4.2 \/ p.35 in Spec) </span>-<a name="line-126"></a><span class='comment'>--</span>-<a name="line-127"></a><span class='comment'>--</span>-<a name="line-128"></a><span class='comment'>-- 2. Validates that a notation is declared for an unparsed entity.</span>-<a name="line-129"></a><span class='comment'>--</span>-<a name="line-130"></a><span class='comment'>--    Validity constraint: Notation Declared (4.2.2 \/ p.36 in Spec)</span>-<a name="line-131"></a><span class='comment'>--</span>-<a name="line-132"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>-<a name="line-133"></a><span class='comment'>--</span>-<a name="line-134"></a><span class='comment'>--    - 2.parameter notationNames :  list of all notation names declared in the DTD</span>-<a name="line-135"></a><span class='comment'>--</span>-<a name="line-136"></a><span class='comment'>--    - returns : a list of errors</span>-<a name="line-137"></a>-<a name="line-138"></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-139"></a><span class='definition'>validateEntities</span> <span class='varid'>dtdPart</span> <span class='varid'>notationNames</span>-<a name="line-140"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkForUniqueEntity</span> <span class='varid'>entities</span> <span class='conid'>[]</span>-<a name="line-141"></a>      <span class='varop'>++</span>-<a name="line-142"></a>      <span class='varid'>checkNotationDecls</span> <span class='varid'>notationNames</span> <span class='varid'>upEntities</span>-<a name="line-143"></a>-<a name="line-144"></a>      <span class='keyword'>where</span>-<a name="line-145"></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-146"></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-147"></a>-<a name="line-148"></a>      <span class='comment'>-- Check if entities are declared multiple times</span>-<a name="line-149"></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-150"></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-151"></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-152"></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-153"></a>	               <span class='str'>"First declaration will be used."</span><span class='layout'>)</span> <span class='varid'>x</span>-<a name="line-154"></a>		 <span class='varop'>++</span>-<a name="line-155"></a>		 <span class='varid'>checkForUniqueEntity</span> <span class='varid'>xs</span> <span class='varid'>used</span>-<a name="line-156"></a>-<a name="line-157"></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-158"></a>	    <span class='keyword'>where</span>-<a name="line-159"></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-160"></a>-<a name="line-161"></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-162"></a>-<a name="line-163"></a>      <span class='varid'>checkForUniqueEntity</span> <span class='varid'>nd</span> <span class='keyword'>_</span>-<a name="line-164"></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-165"></a>-<a name="line-166"></a>-<a name="line-167"></a>      <span class='comment'>-- Find unparsed entities for which no notation is specified</span>-<a name="line-168"></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-169"></a>      <span class='varid'>checkNotationDecls</span> <span class='varid'>notationNames'</span> <span class='varid'>upEntities'</span>-<a name="line-170"></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-171"></a>          <span class='keyword'>where</span>-<a name="line-172"></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-173"></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-174"></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-175"></a>	        <span class='keyword'>then</span> <span class='conid'>[]</span>-<a name="line-176"></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-177"></a>	                  <span class='str'>"when referenced in the unparsed entity declaration for "</span> <span class='varop'>++</span>-<a name="line-178"></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-179"></a>                <span class='keyword'>where</span>-<a name="line-180"></a>		<span class='varid'>notationName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>k_ndata</span>-<a name="line-181"></a>                <span class='varid'>upEntityName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span>-<a name="line-182"></a>-<a name="line-183"></a>          <span class='varid'>checkNotationDecl</span> <span class='varid'>nd</span>-<a name="line-184"></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-185"></a>-<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'>-- Validation of Element declarations.</span>-<a name="line-190"></a><span class='comment'>--</span>-<a name="line-191"></a><span class='comment'>-- 1. Validates that an element is not declared multiple times.</span>-<a name="line-192"></a><span class='comment'>--</span>-<a name="line-193"></a><span class='comment'>--    Validity constraint: Unique Element Type Declaration (3.2 \/ p.21 in Spec) </span>-<a name="line-194"></a><span class='comment'>--</span>-<a name="line-195"></a><span class='comment'>--</span>-<a name="line-196"></a><span class='comment'>-- 2. Validates that an element name only appears once in a mixed-content declaration.</span>-<a name="line-197"></a><span class='comment'>--</span>-<a name="line-198"></a><span class='comment'>--    Validity constraint: No Duplicate Types (3.2 \/ p.21 in Spec) </span>-<a name="line-199"></a><span class='comment'>--</span>-<a name="line-200"></a><span class='comment'>--</span>-<a name="line-201"></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-202"></a><span class='comment'>--    DTD.</span>-<a name="line-203"></a><span class='comment'>--</span>-<a name="line-204"></a><span class='comment'>--    Optional warning: (3.2 \/ p.21 in Spec)</span>-<a name="line-205"></a><span class='comment'>--</span>-<a name="line-206"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>-<a name="line-207"></a><span class='comment'>--</span>-<a name="line-208"></a><span class='comment'>--    - 2.parameter elemNames :  list of all element names declared in the DTD</span>-<a name="line-209"></a><span class='comment'>--</span>-<a name="line-210"></a><span class='comment'>--    - returns : a list of errors</span>-<a name="line-211"></a>-<a name="line-212"></a>-<a name="line-213"></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-214"></a><span class='definition'>validateElements</span> <span class='varid'>dtdPart</span> <span class='varid'>elemNames</span>-<a name="line-215"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkForUniqueElement</span> <span class='varid'>elements</span> <span class='conid'>[]</span>-<a name="line-216"></a>      <span class='varop'>++</span>-<a name="line-217"></a>      <span class='varid'>checkMixedContents</span> <span class='varid'>mixedContentElems</span>-<a name="line-218"></a>      <span class='varop'>++</span>-<a name="line-219"></a>      <span class='varid'>checkContentModels</span> <span class='varid'>elemNames</span> <span class='varid'>elements</span>-<a name="line-220"></a>-<a name="line-221"></a>      <span class='keyword'>where</span>-<a name="line-222"></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-223"></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-224"></a>-<a name="line-225"></a>-<a name="line-226"></a>      <span class='comment'>-- Validates that an element is not declared multiple times</span>-<a name="line-227"></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-228"></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-229"></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-230"></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-231"></a>		      <span class='str'>" must not be declared more than once."</span><span class='layout'>)</span> <span class='varid'>x</span>-<a name="line-232"></a>		 <span class='varop'>++</span>-<a name="line-233"></a>		 <span class='varid'>checkForUniqueElement</span> <span class='varid'>xs</span> <span class='varid'>used</span>-<a name="line-234"></a>-<a name="line-235"></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-236"></a>	    <span class='keyword'>where</span>-<a name="line-237"></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-238"></a>-<a name="line-239"></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-240"></a>-<a name="line-241"></a>      <span class='varid'>checkForUniqueElement</span> <span class='varid'>nd</span> <span class='keyword'>_</span>-<a name="line-242"></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-243"></a>-<a name="line-244"></a>-<a name="line-245"></a>      <span class='comment'>-- Validates that an element name only appears once in a mixed-content declaration</span>-<a name="line-246"></a>      <span class='varid'>checkMixedContents</span> <span class='varid'>elems</span>-<a name="line-247"></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-248"></a>	  <span class='keyword'>where</span>-<a name="line-249"></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-250"></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-251"></a>	      <span class='keyword'>where</span>-<a name="line-252"></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-253"></a>-<a name="line-254"></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-255"></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-256"></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-257"></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-258"></a>			      <span class='str'>" was already specified in the mixed-content model of the element declaration "</span> <span class='varop'>++</span>-<a name="line-259"></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-260"></a>		         <span class='varop'>++</span>-<a name="line-261"></a>		         <span class='varid'>checkMC</span> <span class='varid'>xs</span> <span class='varid'>used</span>-<a name="line-262"></a>-<a name="line-263"></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-264"></a>	            <span class='keyword'>where</span>-<a name="line-265"></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-266"></a>-<a name="line-267"></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-268"></a>-<a name="line-269"></a>              <span class='varid'>checkMC</span> <span class='varid'>nd</span> <span class='keyword'>_</span>-<a name="line-270"></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-271"></a>-<a name="line-272"></a>	  <span class='varid'>checkMixedContent</span> <span class='varid'>nd</span>-<a name="line-273"></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-274"></a>-<a name="line-275"></a>-<a name="line-276"></a>      <span class='comment'>-- Issues a warning if an element mentioned in a content model is not</span>-<a name="line-277"></a>      <span class='comment'>-- declared in the DTD.</span>-<a name="line-278"></a>      <span class='varid'>checkContentModels</span> <span class='varid'>names</span> <span class='varid'>elems</span>-<a name="line-279"></a>          <span class='keyglyph'>=</span> <span class='varid'>concatMap</span> <span class='varid'>checkContentModel</span> <span class='varid'>elems</span>-<a name="line-280"></a>	  <span class='keyword'>where</span>-<a name="line-281"></a>          <span class='varid'>checkContentModel</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-282"></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-283"></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-284"></a>	      <span class='keyword'>where</span>-<a name="line-285"></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-286"></a>-<a name="line-287"></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-288"></a>	      <span class='varid'>validateContent</span> <span class='varid'>cm</span>-<a name="line-289"></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-290"></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-291"></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-292"></a>-<a name="line-293"></a>	      <span class='varid'>checkContent</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-294"></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-295"></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-296"></a>	            <span class='keyword'>then</span> <span class='conid'>[]</span>-<a name="line-297"></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-298"></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-299"></a>			       <span class='str'>", is not declared."</span><span class='layout'>)</span> <span class='varid'>n</span>-<a name="line-300"></a>	            <span class='keyword'>where</span>-<a name="line-301"></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-302"></a>-<a name="line-303"></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-304"></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-305"></a>-<a name="line-306"></a>	      <span class='varid'>checkContent</span> <span class='varid'>nd</span>-<a name="line-307"></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-308"></a>-<a name="line-309"></a>          <span class='varid'>checkContentModel</span> <span class='varid'>nd</span>-<a name="line-310"></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-311"></a>-<a name="line-312"></a>-<a name="line-313"></a><span class='comment'>-- |</span>-<a name="line-314"></a><span class='comment'>-- Validation of Attribute declarations.</span>-<a name="line-315"></a><span class='comment'>--</span>-<a name="line-316"></a><span class='comment'>-- (1) Issues a warning if an attribute is declared for an element type not itself</span>-<a name="line-317"></a><span class='comment'>--    decared.</span>-<a name="line-318"></a><span class='comment'>--</span>-<a name="line-319"></a><span class='comment'>--    Optinal warning: (3.3 \/ p. 24 in Spec)</span>-<a name="line-320"></a><span class='comment'>--</span>-<a name="line-321"></a><span class='comment'>--</span>-<a name="line-322"></a><span class='comment'>-- 2. Issues a warning if more than one definition is provided for the same</span>-<a name="line-323"></a><span class='comment'>--    attribute of a given element type. Fist declaration is binding, later</span>-<a name="line-324"></a><span class='comment'>--    definitions are ignored.</span>-<a name="line-325"></a><span class='comment'>--</span>-<a name="line-326"></a><span class='comment'>--    Optional warning: (3.3 \/ p.24 in Spec)</span>-<a name="line-327"></a><span class='comment'>--</span>-<a name="line-328"></a><span class='comment'>--</span>-<a name="line-329"></a><span class='comment'>-- 3. Issues a warning if the same Nmtoken occures more than once in enumerated</span>-<a name="line-330"></a><span class='comment'>--    attribute types of a single element type.</span>-<a name="line-331"></a><span class='comment'>--</span>-<a name="line-332"></a><span class='comment'>--    Optional warning: (3.3.1 \/ p.27 in Spec) </span>-<a name="line-333"></a><span class='comment'>--</span>-<a name="line-334"></a><span class='comment'>--</span>-<a name="line-335"></a><span class='comment'>-- 4. Validates that an element type has not more than one ID attribute defined.</span>-<a name="line-336"></a><span class='comment'>--</span>-<a name="line-337"></a><span class='comment'>--    Validity constraint: One ID per Element Type (3.3.1 \/ p.26 in Spec) </span>-<a name="line-338"></a><span class='comment'>--</span>-<a name="line-339"></a><span class='comment'>--</span>-<a name="line-340"></a><span class='comment'>-- 5. Validates that an element type has not more than one NOTATION attribute defined.</span>-<a name="line-341"></a><span class='comment'>--</span>-<a name="line-342"></a><span class='comment'>--    Validity constraint: One Notation per Element Type (3.3.1 \/ p.27 in Spec) </span>-<a name="line-343"></a><span class='comment'>--</span>-<a name="line-344"></a><span class='comment'>--</span>-<a name="line-345"></a><span class='comment'>-- 6. Validates that an ID attributes has the type #IMPLIED or #REQUIRED.</span>-<a name="line-346"></a><span class='comment'>--</span>-<a name="line-347"></a><span class='comment'>--    Validity constraint: ID Attribute Default (3.3.1 \/ p.26 in Spec) </span>-<a name="line-348"></a><span class='comment'>--</span>-<a name="line-349"></a><span class='comment'>--</span>-<a name="line-350"></a><span class='comment'>-- 7. Validates that all referenced notations are declared.</span>-<a name="line-351"></a><span class='comment'>--</span>-<a name="line-352"></a><span class='comment'>--    Validity constraint: Notation Attributes (3.3.1 \/ p.27 in Spec) </span>-<a name="line-353"></a><span class='comment'>--</span>-<a name="line-354"></a><span class='comment'>--</span>-<a name="line-355"></a><span class='comment'>-- 8. Validates that notations are not declared for EMPTY elements.</span>-<a name="line-356"></a><span class='comment'>--</span>-<a name="line-357"></a><span class='comment'>--    Validity constraint: No Notation on Empty Element (3.3.1 \/p.27 in Spec) </span>-<a name="line-358"></a><span class='comment'>--</span>-<a name="line-359"></a><span class='comment'>--</span>-<a name="line-360"></a><span class='comment'>-- 9. Validates that the default value matches the lexical constraints of it's type.</span>-<a name="line-361"></a><span class='comment'>--</span>-<a name="line-362"></a><span class='comment'>--    Validity constraint: Attribute default legal (3.3.2 \/ p.28 in Spec)</span>-<a name="line-363"></a><span class='comment'>--</span>-<a name="line-364"></a><span class='comment'>--</span>-<a name="line-365"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>-<a name="line-366"></a><span class='comment'>--</span>-<a name="line-367"></a><span class='comment'>--    - 2.parameter elemNames :  list of all element names declared in the DTD</span>-<a name="line-368"></a><span class='comment'>--</span>-<a name="line-369"></a><span class='comment'>--    - 3.parameter notationNames :  list of all notation names declared in the DTD</span>-<a name="line-370"></a><span class='comment'>--</span>-<a name="line-371"></a><span class='comment'>--    - returns : a list of errors</span>-<a name="line-372"></a>-<a name="line-373"></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-374"></a><span class='definition'>validateAttributes</span> <span class='varid'>dtdPart</span> <span class='varid'>elemNames</span> <span class='varid'>notationNames</span>-<a name="line-375"></a>    <span class='keyglyph'>=</span> <span class='comment'>-- 1. Find attributes for which no elements are declared</span>-<a name="line-376"></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-377"></a>      <span class='varop'>++</span>-<a name="line-378"></a>      <span class='comment'>-- 2. Find attributes which are declared more than once</span>-<a name="line-379"></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-380"></a>      <span class='varop'>++</span>-<a name="line-381"></a>      <span class='comment'>-- 3. Find enumerated attribute types which nmtokens are declared more than once</span>-<a name="line-382"></a>      <span class='layout'>(</span><span class='varid'>checkEnumeratedTypes</span>-<a name="line-383"></a>      <span class='varop'>`o`</span>-<a name="line-384"></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-385"></a>      <span class='varop'>++</span>-<a name="line-386"></a>      <span class='comment'>-- 4. Validate that there exists only one ID attribute for an element</span>-<a name="line-387"></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-388"></a>      <span class='varop'>++</span>-<a name="line-389"></a>      <span class='comment'>-- 5. Validate that there exists only one NOTATION attribute for an element</span>-<a name="line-390"></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-391"></a>      <span class='varop'>++</span>-<a name="line-392"></a>      <span class='comment'>-- 6. Validate that ID attributes have the type #IMPLIED or #REQUIRED</span>-<a name="line-393"></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-394"></a>      <span class='varop'>++</span>-<a name="line-395"></a>      <span class='comment'>-- 7. Validate that all referenced notations are declared</span>-<a name="line-396"></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-397"></a>      <span class='varop'>++</span>-<a name="line-398"></a>      <span class='comment'>-- 8. Validate that notations are not declared for EMPTY elements</span>-<a name="line-399"></a>      <span class='layout'>(</span><span class='layout'>(</span><span class='varid'>checkNoNotationForEmptyElement</span>-<a name="line-400"></a>      	  <span class='layout'>(</span>-<a name="line-401"></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-402"></a>       	  <span class='layout'>)</span>-<a name="line-403"></a>        <span class='layout'>)</span> <span class='varop'>$$</span> <span class='varid'>notationAttributes</span><span class='layout'>)</span>-<a name="line-404"></a>      <span class='varop'>++</span>-<a name="line-405"></a>      <span class='comment'>-- 9. Validate that the default value matches the lexical constraints of it's type</span>-<a name="line-406"></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-407"></a>-<a name="line-408"></a>      <span class='keyword'>where</span>-<a name="line-409"></a>      <span class='comment'>--------------------------------------------------------------------------</span>-<a name="line-410"></a>      <span class='comment'>-- helper functions</span>-<a name="line-411"></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-412"></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-413"></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-414"></a>-<a name="line-415"></a>-<a name="line-416"></a>      <span class='varid'>elemName</span> <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_name</span>-<a name="line-417"></a>      <span class='varid'>attName</span>  <span class='keyglyph'>=</span> <span class='varid'>lookup1</span> <span class='varid'>a_value</span>-<a name="line-418"></a>-<a name="line-419"></a>      <span class='comment'>--------------------------------------------------------------------------</span>-<a name="line-420"></a>      <span class='comment'>-- 1. Find attributes for which no elements are declared</span>-<a name="line-421"></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-422"></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-423"></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-424"></a>	    <span class='keyword'>then</span> <span class='conid'>[]</span>-<a name="line-425"></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-426"></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-427"></a>-<a name="line-428"></a>      <span class='varid'>checkDeclaredElements</span> <span class='keyword'>_</span> <span class='varid'>nd</span>-<a name="line-429"></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-430"></a>-<a name="line-431"></a>      <span class='comment'>--------------------------------------------------------------------------</span>-<a name="line-432"></a>      <span class='comment'>-- 2. Find attributes which are declared more than once</span>-<a name="line-433"></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-434"></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-435"></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-436"></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-437"></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-438"></a>		        <span class='str'>"declaration will be used."</span><span class='layout'>)</span> <span class='varid'>x</span>-<a name="line-439"></a>		 <span class='varop'>++</span>-<a name="line-440"></a>		 <span class='varid'>checkForUniqueAttributeDeclaration</span> <span class='varid'>xs</span> <span class='varid'>used</span>-<a name="line-441"></a>-<a name="line-442"></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-443"></a>	    <span class='keyword'>where</span>-<a name="line-444"></a>	    <span class='varid'>ename</span> <span class='keyglyph'>=</span> <span class='varid'>elemName</span> <span class='varid'>al</span>-<a name="line-445"></a>	    <span class='varid'>aname</span> <span class='keyglyph'>=</span> <span class='varid'>attName</span> <span class='varid'>al</span>-<a name="line-446"></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-447"></a>-<a name="line-448"></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-449"></a>-<a name="line-450"></a>      <span class='varid'>checkForUniqueAttributeDeclaration</span> <span class='varid'>nd</span> <span class='keyword'>_</span>-<a name="line-451"></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-452"></a>-<a name="line-453"></a>-<a name="line-454"></a>      <span class='comment'>--------------------------------------------------------------------------</span>-<a name="line-455"></a>      <span class='comment'>-- 3. Find enumerated attribute types which nmtokens are declared more than once</span>-<a name="line-456"></a>      <span class='varid'>checkEnumeratedTypes</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-457"></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-458"></a>          <span class='keyglyph'>=</span> <span class='varid'>checkForUniqueType</span> <span class='varid'>cs</span> <span class='conid'>[]</span>-<a name="line-459"></a>	  <span class='keyword'>where</span>-<a name="line-460"></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-461"></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-462"></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-463"></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-464"></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-465"></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-466"></a>		     <span class='varop'>++</span>-<a name="line-467"></a>		     <span class='varid'>checkForUniqueType</span> <span class='varid'>xs</span> <span class='varid'>used</span>-<a name="line-468"></a>-<a name="line-469"></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-470"></a>	        <span class='keyword'>where</span>-<a name="line-471"></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-472"></a>-<a name="line-473"></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-474"></a>-<a name="line-475"></a>          <span class='varid'>checkForUniqueType</span> <span class='varid'>nd</span> <span class='keyword'>_</span>-<a name="line-476"></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-477"></a>-<a name="line-478"></a>      <span class='varid'>checkEnumeratedTypes</span> <span class='varid'>nd</span>-<a name="line-479"></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-480"></a>-<a name="line-481"></a>-<a name="line-482"></a>      <span class='comment'>--------------------------------------------------------------------------</span>-<a name="line-483"></a>      <span class='comment'>-- 4. Validate that there exists only one ID attribute for an element</span>-<a name="line-484"></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-485"></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-486"></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-487"></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-488"></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-489"></a>		       <span class='str'>"not permitted."</span><span class='layout'>)</span> <span class='varid'>x</span>-<a name="line-490"></a>		 <span class='varop'>++</span>-<a name="line-491"></a>		 <span class='varid'>checkForUniqueId</span> <span class='varid'>xs</span> <span class='varid'>used</span>-<a name="line-492"></a>-<a name="line-493"></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-494"></a>	    <span class='keyword'>where</span>-<a name="line-495"></a>	    <span class='varid'>ename</span> <span class='keyglyph'>=</span> <span class='varid'>elemName</span> <span class='varid'>al</span>-<a name="line-496"></a>-<a name="line-497"></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-498"></a>-<a name="line-499"></a>      <span class='varid'>checkForUniqueId</span> <span class='varid'>nd</span> <span class='keyword'>_</span>-<a name="line-500"></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-501"></a>-<a name="line-502"></a>      <span class='comment'>--------------------------------------------------------------------------</span>-<a name="line-503"></a>      <span class='comment'>-- 5. Validate that there exists only one NOTATION attribute for an element</span>-<a name="line-504"></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-505"></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-506"></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-507"></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-508"></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-509"></a>		       <span class='str'>"is not permitted."</span><span class='layout'>)</span> <span class='varid'>x</span>-<a name="line-510"></a>		 <span class='varop'>++</span>-<a name="line-511"></a>		 <span class='varid'>checkForUniqueNotation</span> <span class='varid'>xs</span> <span class='varid'>used</span>-<a name="line-512"></a>-<a name="line-513"></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-514"></a>	    <span class='keyword'>where</span>-<a name="line-515"></a>	    <span class='varid'>ename</span> <span class='keyglyph'>=</span> <span class='varid'>elemName</span> <span class='varid'>al</span>-<a name="line-516"></a>-<a name="line-517"></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-518"></a>-<a name="line-519"></a>      <span class='varid'>checkForUniqueNotation</span> <span class='varid'>nd</span> <span class='keyword'>_</span>-<a name="line-520"></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-521"></a>-<a name="line-522"></a>      <span class='comment'>--------------------------------------------------------------------------</span>-<a name="line-523"></a>      <span class='comment'>-- 6. Validate that ID attributes have the type #IMPLIED or #REQUIRED</span>-<a name="line-524"></a>      <span class='varid'>checkIdKindConstraint</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-525"></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-526"></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-527"></a>	    <span class='keyword'>then</span> <span class='conid'>[]</span>-<a name="line-528"></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-529"></a>	              <span class='str'>"of \"#IMPLIED\" or \"REQUIRED\""</span><span class='layout'>)</span> <span class='varid'>nd</span>-<a name="line-530"></a>	    <span class='keyword'>where</span>-<a name="line-531"></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-532"></a>-<a name="line-533"></a>      <span class='varid'>checkIdKindConstraint</span> <span class='varid'>nd</span>-<a name="line-534"></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-535"></a>-<a name="line-536"></a>-<a name="line-537"></a>      <span class='comment'>--------------------------------------------------------------------------</span>-<a name="line-538"></a>      <span class='comment'>-- 7. Validate that all referenced notations are declared</span>-<a name="line-539"></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-540"></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-541"></a>          <span class='keyglyph'>=</span> <span class='varid'>checkNotations</span> <span class='varop'>$$</span> <span class='varid'>cs</span>-<a name="line-542"></a>	  <span class='keyword'>where</span>-<a name="line-543"></a>	  <span class='varid'>checkNotations</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-544"></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-545"></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-546"></a>	        <span class='keyword'>then</span> <span class='conid'>[]</span>-<a name="line-547"></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-548"></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-549"></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-550"></a>                <span class='keyword'>where</span>-<a name="line-551"></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-552"></a>-<a name="line-553"></a>          <span class='varid'>checkNotations</span> <span class='varid'>nd</span>-<a name="line-554"></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-555"></a>-<a name="line-556"></a>      <span class='varid'>checkNotationDeclaration</span> <span class='keyword'>_</span> <span class='varid'>nd</span>-<a name="line-557"></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-558"></a>-<a name="line-559"></a>      <span class='comment'>--------------------------------------------------------------------------</span>-<a name="line-560"></a>      <span class='comment'>-- 8. Validate that notations are not declared for EMPTY elements</span>-<a name="line-561"></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-562"></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-563"></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-564"></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-565"></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-566"></a>		      <span class='varid'>nd</span>-<a name="line-567"></a>	    <span class='keyword'>else</span> <span class='conid'>[]</span>-<a name="line-568"></a>-<a name="line-569"></a>      <span class='varid'>checkNoNotationForEmptyElement</span> <span class='keyword'>_</span> <span class='varid'>nd</span>-<a name="line-570"></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-571"></a>-<a name="line-572"></a>      <span class='comment'>--------------------------------------------------------------------------</span>-<a name="line-573"></a>      <span class='comment'>-- 9. Validate that default values meet the lexical constraints of the attribute types</span>-<a name="line-574"></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-575"></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-576"></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-577"></a>-<a name="line-578"></a>      <span class='varid'>checkDefaultValueTypes</span> <span class='keyword'>_</span> <span class='varid'>nd</span>-<a name="line-579"></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-580"></a>-<a name="line-581"></a>-<a name="line-582"></a>-<a name="line-583"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-584"></a>-<a name="line-585"></a><span class='comment'>-- |</span>-<a name="line-586"></a><span class='comment'>-- Removes doublicate declarations from the DTD, which first declaration is</span>-<a name="line-587"></a><span class='comment'>-- binding. This is the case for ATTLIST and ENTITY declarations.</span>-<a name="line-588"></a><span class='comment'>--</span>-<a name="line-589"></a><span class='comment'>--    - returns : A function that replaces the children of DOCTYPE nodes by a list</span>-<a name="line-590"></a><span class='comment'>--               where all multiple declarations are removed.</span>-<a name="line-591"></a>-<a name="line-592"></a><a name="removeDoublicateDefs"></a><span class='definition'>removeDoublicateDefs</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-593"></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-594"></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-595"></a>      <span class='keyword'>where</span>-<a name="line-596"></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-597"></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-598"></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-599"></a>            <span class='keyword'>then</span> <span class='varid'>removeDoubleDefs</span> <span class='varid'>used</span> <span class='varid'>xs</span>-<a name="line-600"></a>            <span class='keyword'>else</span> <span class='varid'>x</span>-<a name="line-601"></a>	         <span class='conop'>:</span>-<a name="line-602"></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-603"></a>            <span class='keyword'>where</span>-<a name="line-604"></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-605"></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-606"></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-607"></a>-<a name="line-608"></a>-<a name="line-609"></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-610"></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-611"></a>            <span class='keyword'>then</span> <span class='varid'>removeDoubleDefs</span> <span class='varid'>used</span> <span class='varid'>xs</span>-<a name="line-612"></a>            <span class='keyword'>else</span> <span class='varid'>x</span>-<a name="line-613"></a>	         <span class='conop'>:</span>-<a name="line-614"></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-615"></a>            <span class='keyword'>where</span>-<a name="line-616"></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-617"></a>-<a name="line-618"></a>-<a name="line-619"></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-620"></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-621"></a>-<a name="line-622"></a>      <span class='varid'>removeDoubleDefs</span> <span class='keyword'>_</span> <span class='conid'>[]</span>-<a name="line-623"></a>          <span class='keyglyph'>=</span> <span class='conid'>[]</span>-<a name="line-624"></a>-<a name="line-625"></a>-<a name="line-626"></a><span class='definition'>removeDoublicateDefs</span> <span class='varid'>n</span>-<a name="line-627"></a>    <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='varid'>n</span><span class='keyglyph'>]</span>-<a name="line-628"></a>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-Validator-DocTransformation.html
@@ -1,245 +0,0 @@-<!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><span class='comment'>-- Version : $Id: DocTransformation.hs,v 1.1 2004/09/02 19:12:03 hxml Exp $</span>-<a name="line-31"></a>-<a name="line-32"></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-33"></a>    <span class='layout'>(</span> <span class='varid'>transform</span>-<a name="line-34"></a>    <span class='layout'>)</span>-<a name="line-35"></a><span class='keyword'>where</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'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>-<a name="line-38"></a>-<a name="line-39"></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-40"></a>-<a name="line-41"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>-<a name="line-42"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>List</span>-<a name="line-43"></a>-<a name="line-44"></a>-<a name="line-45"></a>-<a name="line-46"></a><span class='comment'>-- |</span>-<a name="line-47"></a><span class='comment'>-- Lookup-table which maps element names to their transformation functions. The</span>-<a name="line-48"></a><span class='comment'>-- transformation functions are XmlFilters.</span>-<a name="line-49"></a>-<a name="line-50"></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-51"></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-52"></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-53"></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-54"></a>-<a name="line-55"></a>-<a name="line-56"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-57"></a>-<a name="line-58"></a>-<a name="line-59"></a><span class='comment'>-- |</span>-<a name="line-60"></a><span class='comment'>-- filter for transforming the document.</span>-<a name="line-61"></a><span class='comment'>--</span>-<a name="line-62"></a><span class='comment'>--    * 1.parameter dtdPart :  the DTD subset (Node @DOCTYPE@) of the XmlTree</span>-<a name="line-63"></a><span class='comment'>--</span>-<a name="line-64"></a><span class='comment'>--    - 2.parameter doc :  the document subset of the XmlTree</span>-<a name="line-65"></a><span class='comment'>--</span>-<a name="line-66"></a><span class='comment'>--    - returns : a list of errors</span>-<a name="line-67"></a>-<a name="line-68"></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-69"></a><span class='definition'>transform</span> <span class='varid'>dtdPart</span> <span class='varid'>dom</span>-<a name="line-70"></a>    <span class='keyglyph'>=</span> <span class='varid'>traverseTree</span> <span class='varid'>transTable</span> <span class='varid'>dom</span>-<a name="line-71"></a>    <span class='keyword'>where</span>-<a name="line-72"></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-73"></a>-<a name="line-74"></a>-<a name="line-75"></a>-<a name="line-76"></a><span class='comment'>-- |</span>-<a name="line-77"></a><span class='comment'>-- Traverse the XmlTree in preorder.</span>-<a name="line-78"></a><span class='comment'>--</span>-<a name="line-79"></a><span class='comment'>--    * 1.parameter transEnv :  lookup-table which maps element names to their transformation functions</span>-<a name="line-80"></a><span class='comment'>--</span>-<a name="line-81"></a><span class='comment'>--    - returns : the whole transformed document</span>-<a name="line-82"></a>-<a name="line-83"></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-84"></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-85"></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-86"></a>      <span class='keyword'>where</span>-<a name="line-87"></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-88"></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-89"></a>	  <span class='conid'>Just</span> <span class='varid'>f</span>  <span class='keyglyph'>-&gt;</span> <span class='varid'>f</span>-<a name="line-90"></a>-<a name="line-91"></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-92"></a>-<a name="line-93"></a>-<a name="line-94"></a><span class='comment'>-- |</span>-<a name="line-95"></a><span class='comment'>-- Build all transformation functions.</span>-<a name="line-96"></a><span class='comment'>--</span>-<a name="line-97"></a><span class='comment'>--    * 1.parameter dtdPart :  the DTD subset, root node should be of type @DOCTYPE@</span>-<a name="line-98"></a><span class='comment'>--</span>-<a name="line-99"></a><span class='comment'>--    - returns : lookup-table which maps element names to their transformation functions</span>-<a name="line-100"></a>-<a name="line-101"></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-102"></a><span class='definition'>buildAllTransformationFunctions</span> <span class='varid'>dtdPart</span>-<a name="line-103"></a>    <span class='keyglyph'>=</span> <span class='varid'>buildTransRoot</span>-<a name="line-104"></a>      <span class='conop'>:</span>-<a name="line-105"></a>      <span class='comment'>-- construct the list of filters</span>-<a name="line-106"></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-107"></a>      <span class='keyword'>where</span>-<a name="line-108"></a>      <span class='varid'>dtdNodes</span> <span class='keyglyph'>=</span> <span class='varid'>getChildren</span> <span class='varid'>dtdPart</span>-<a name="line-109"></a>-<a name="line-110"></a>-<a name="line-111"></a><span class='comment'>-- |</span>-<a name="line-112"></a><span class='comment'>-- Build a transformation function for the document root. By root @\/@</span>-<a name="line-113"></a><span class='comment'>-- is meant, which is the topmost dummy created by the parser. This function is only a</span>-<a name="line-114"></a><span class='comment'>-- dummy, too.</span>-<a name="line-115"></a><span class='comment'>--</span>-<a name="line-116"></a><span class='comment'>--    * returns : entry for the lookup-table</span>-<a name="line-117"></a>-<a name="line-118"></a><a name="buildTransRoot"></a><span class='definition'>buildTransRoot</span> <span class='keyglyph'>::</span> <span class='conid'>TransEnv</span>-<a name="line-119"></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-120"></a>-<a name="line-121"></a>-<a name="line-122"></a>-<a name="line-123"></a><span class='comment'>-- |</span>-<a name="line-124"></a><span class='comment'>-- Build transformation functions for an element.</span>-<a name="line-125"></a><span class='comment'>--</span>-<a name="line-126"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>-<a name="line-127"></a><span class='comment'>--</span>-<a name="line-128"></a><span class='comment'>--    * 1.parameter nd :  element declaration for which the transformation functions are</span>-<a name="line-129"></a><span class='comment'>--                    created</span>-<a name="line-130"></a><span class='comment'>--</span>-<a name="line-131"></a><span class='comment'>--    - returns : entry for the lookup-table</span>-<a name="line-132"></a>-<a name="line-133"></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-134"></a>-<a name="line-135"></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-136"></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-137"></a>    <span class='keyword'>where</span>-<a name="line-138"></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-139"></a>    <span class='varid'>transFct</span> <span class='keyglyph'>=</span> <span class='varid'>lexicographicAttributeOrder</span>-<a name="line-140"></a>               <span class='varop'>`o`</span>-<a name="line-141"></a>	       <span class='varid'>normalizeAttributeValues</span> <span class='varid'>n</span> <span class='varid'>dtdPart</span>-<a name="line-142"></a>	       <span class='varop'>`o`</span>-<a name="line-143"></a>	       <span class='varid'>setDefaultAttributeValues</span> <span class='varid'>n</span> <span class='varid'>dtdPart</span>-<a name="line-144"></a>-<a name="line-145"></a><span class='definition'>buildTransformationFunctions</span> <span class='keyword'>_</span> <span class='varid'>n</span>-<a name="line-146"></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-147"></a>-<a name="line-148"></a>-<a name="line-149"></a>-<a name="line-150"></a><span class='comment'>-- ------------------------------------------------------------</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'>-- Sort the attributes of an element in lexicographic order.</span>-<a name="line-155"></a><span class='comment'>--</span>-<a name="line-156"></a><span class='comment'>--    * returns : a function which takes an element (XTag), sorts its</span>-<a name="line-157"></a><span class='comment'>--                  attributes in lexicographic order and returns the changed element</span>-<a name="line-158"></a>-<a name="line-159"></a><a name="lexicographicAttributeOrder"></a><span class='definition'>lexicographicAttributeOrder</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-160"></a><span class='definition'>lexicographicAttributeOrder</span>-<a name="line-161"></a>    <span class='keyglyph'>=</span> <span class='varid'>processAttrl</span> <span class='varid'>sortAttrl</span>-<a name="line-162"></a>      <span class='keyword'>where</span>-<a name="line-163"></a>      <span class='varid'>sortAttrl</span> <span class='varid'>al</span>-<a name="line-164"></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-165"></a>	    <span class='keyword'>where</span>-<a name="line-166"></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-167"></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-168"></a>-<a name="line-169"></a><span class='comment'>-- |</span>-<a name="line-170"></a><span class='comment'>-- Normalize attribute values.</span>-<a name="line-171"></a><span class='comment'>--</span>-<a name="line-172"></a><span class='comment'>--    * returns : a function which takes an element (XTag), normalizes its</span>-<a name="line-173"></a><span class='comment'>--                  attribute values and returns the changed element</span>-<a name="line-174"></a>-<a name="line-175"></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-176"></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-177"></a>    <span class='keyglyph'>=</span> <span class='varid'>processAttr</span> <span class='varid'>normalizeAttr</span>-<a name="line-178"></a>      <span class='keyword'>where</span>-<a name="line-179"></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-180"></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-181"></a>-<a name="line-182"></a>      <span class='varid'>normalizeAttr</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-183"></a>      <span class='varid'>normalizeAttr</span> <span class='varid'>att</span>-<a name="line-184"></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-185"></a>				<span class='keyword'>then</span> <span class='conid'>Nothing</span>-<a name="line-186"></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-187"></a>	    <span class='keyword'>where</span>-<a name="line-188"></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-189"></a>-<a name="line-190"></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-191"></a>      <span class='varid'>normalizeAttrValue</span> <span class='varid'>descr</span>-<a name="line-192"></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-193"></a>-<a name="line-194"></a><span class='definition'>normalizeAttributeValues</span> <span class='varid'>n</span> <span class='keyword'>_</span>-<a name="line-195"></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-196"></a>-<a name="line-197"></a>-<a name="line-198"></a>-<a name="line-199"></a><span class='comment'>-- |</span>-<a name="line-200"></a><span class='comment'>-- Set default attribute values if they are not set.</span>-<a name="line-201"></a><span class='comment'>--</span>-<a name="line-202"></a><span class='comment'>--    * returns : a function which takes an element (XTag), adds missing attribute</span>-<a name="line-203"></a><span class='comment'>--                  defaults and returns the changed element</span>-<a name="line-204"></a>-<a name="line-205"></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-206"></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-207"></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-208"></a>      <span class='keyword'>where</span>-<a name="line-209"></a>						<span class='comment'>-- select the element name from the dtd</span>-<a name="line-210"></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-211"></a>-<a name="line-212"></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-213"></a>		      <span class='varop'>`orElse`</span>-<a name="line-214"></a>		      <span class='varid'>isDefaultAttrKind</span>-<a name="line-215"></a>		    <span class='layout'>)</span>-<a name="line-216"></a>                    <span class='varop'>$$</span>-<a name="line-217"></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-218"></a>-<a name="line-219"></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-220"></a>      <span class='varid'>setDefault</span> <span class='varid'>attrDescr</span>			<span class='comment'>-- add the default attributes</span>-<a name="line-221"></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-222"></a>	      <span class='varop'>`whenNot`</span>-<a name="line-223"></a>	      <span class='varid'>hasAttr</span> <span class='varid'>attName</span>-<a name="line-224"></a>	    <span class='layout'>)</span>-<a name="line-225"></a>	    <span class='varop'>`when`</span>-<a name="line-226"></a>	    <span class='varid'>isXTag</span>-<a name="line-227"></a>	    <span class='keyword'>where</span>-<a name="line-228"></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-229"></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-230"></a>-<a name="line-231"></a>-<a name="line-232"></a><span class='definition'>setDefaultAttributeValues</span> <span class='varid'>n</span> <span class='keyword'>_</span>-<a name="line-233"></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-234"></a>-<a name="line-235"></a>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-Validator-DocValidation.html
@@ -1,548 +0,0 @@-<!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><span class='comment'>-- Version : $Id: DocValidation.hs,v 1.1 2004/09/02 19:12:03 hxml Exp $</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'>Validator</span><span class='varop'>.</span><span class='conid'>DocValidation</span>-<a name="line-24"></a>    <span class='layout'>(</span> <span class='varid'>validateDoc</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'>Validator</span><span class='varop'>.</span><span class='conid'>AttributeValueValidation</span>-<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'>Validator</span><span class='varop'>.</span><span class='conid'>XmlRE</span>-<a name="line-32"></a>-<a name="line-33"></a><span class='keyword'>import</span> <span class='conid'>Data</span><span class='varop'>.</span><span class='conid'>Maybe</span>-<a name="line-34"></a>-<a name="line-35"></a><span class='comment'>-- |</span>-<a name="line-36"></a><span class='comment'>-- Lookup-table which maps element names to their validation functions. The</span>-<a name="line-37"></a><span class='comment'>-- validation functions are XmlFilters.</span>-<a name="line-38"></a>-<a name="line-39"></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-40"></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-41"></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-42"></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-43"></a>-<a name="line-44"></a>-<a name="line-45"></a>-<a name="line-46"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-47"></a>-<a name="line-48"></a>-<a name="line-49"></a><span class='comment'>-- |</span>-<a name="line-50"></a><span class='comment'>-- Validate a document.</span>-<a name="line-51"></a><span class='comment'>--</span>-<a name="line-52"></a><span class='comment'>--    * 1.parameter dtdPart :  the DTD subset (Node @DOCTYPE@) of the XmlTree</span>-<a name="line-53"></a><span class='comment'>--</span>-<a name="line-54"></a><span class='comment'>--    - 2.parameter doc :  the document subset of the XmlTree</span>-<a name="line-55"></a><span class='comment'>--</span>-<a name="line-56"></a><span class='comment'>--    - returns : a list of errors</span>-<a name="line-57"></a>-<a name="line-58"></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-59"></a><span class='definition'>validateDoc</span> <span class='varid'>dtdPart</span> <span class='varid'>doc</span>-<a name="line-60"></a>    <span class='keyglyph'>=</span> <span class='varid'>traverseTree</span> <span class='varid'>valTable</span> <span class='varid'>doc</span>-<a name="line-61"></a>    <span class='keyword'>where</span>-<a name="line-62"></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-63"></a>-<a name="line-64"></a>-<a name="line-65"></a><span class='comment'>-- |</span>-<a name="line-66"></a><span class='comment'>-- Traverse the XmlTree in preorder.</span>-<a name="line-67"></a><span class='comment'>--</span>-<a name="line-68"></a><span class='comment'>--    * 1.parameter valiEnv :  lookup-table which maps element names to their validation functions</span>-<a name="line-69"></a><span class='comment'>--</span>-<a name="line-70"></a><span class='comment'>--    - returns : list of errors</span>-<a name="line-71"></a>-<a name="line-72"></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-73"></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-74"></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-75"></a>      <span class='keyword'>where</span>-<a name="line-76"></a>      <span class='varid'>valFct</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-77"></a>      <span class='varid'>valFct</span>-<a name="line-78"></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-79"></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-80"></a>	    <span class='conid'>Just</span> <span class='varid'>f</span>  <span class='keyglyph'>-&gt;</span> <span class='varid'>f</span>-<a name="line-81"></a>-<a name="line-82"></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-83"></a>-<a name="line-84"></a>-<a name="line-85"></a>-<a name="line-86"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-87"></a>-<a name="line-88"></a>-<a name="line-89"></a><span class='comment'>-- |</span>-<a name="line-90"></a><span class='comment'>-- Build all validation functions.</span>-<a name="line-91"></a><span class='comment'>--</span>-<a name="line-92"></a><span class='comment'>--    * 1.parameter dtdPart :  DTD subset, root node should be of type @DOCTYPE@</span>-<a name="line-93"></a><span class='comment'>--</span>-<a name="line-94"></a><span class='comment'>--    - returns : lookup-table which maps element names to their validation functions</span>-<a name="line-95"></a>-<a name="line-96"></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-97"></a><span class='definition'>buildAllValidationFunctions</span> <span class='varid'>dtdPart</span>-<a name="line-98"></a>    <span class='keyglyph'>=</span> <span class='varid'>buildValidateRoot</span> <span class='varid'>dtdPart</span>-<a name="line-99"></a>      <span class='conop'>:</span>-<a name="line-100"></a>      <span class='comment'>-- construct a list of validation filters for all element declarations</span>-<a name="line-101"></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-102"></a>      <span class='keyword'>where</span>-<a name="line-103"></a>      <span class='varid'>dtdNodes</span> <span class='keyglyph'>=</span> <span class='varid'>getChildren</span> <span class='varid'>dtdPart</span>-<a name="line-104"></a>-<a name="line-105"></a>-<a name="line-106"></a><span class='comment'>-- |</span>-<a name="line-107"></a><span class='comment'>-- Build a validation function for the document root. By root node @\/@</span>-<a name="line-108"></a><span class='comment'>-- is meant, which is the topmost dummy created by the parser.</span>-<a name="line-109"></a><span class='comment'>--</span>-<a name="line-110"></a><span class='comment'>--    * 1.parameter dtdPart :  DTD subset, root node should be of type @DOCTYPE@</span>-<a name="line-111"></a><span class='comment'>--</span>-<a name="line-112"></a><span class='comment'>--    - returns : entry for the lookup-table</span>-<a name="line-113"></a>-<a name="line-114"></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-115"></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-116"></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-117"></a>      <span class='keyword'>where</span>-<a name="line-118"></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-119"></a>-<a name="line-120"></a>      <span class='varid'>valFct</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-121"></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-122"></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-123"></a>            <span class='keyword'>then</span> <span class='conid'>[]</span>-<a name="line-124"></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-125"></a>	    <span class='keyword'>where</span>-<a name="line-126"></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-127"></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-128"></a>-<a name="line-129"></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-130"></a>-<a name="line-131"></a><span class='definition'>buildValidateRoot</span> <span class='varid'>nd</span>-<a name="line-132"></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-133"></a>-<a name="line-134"></a>-<a name="line-135"></a><span class='comment'>-- |</span>-<a name="line-136"></a><span class='comment'>-- Build validation functions for an element.</span>-<a name="line-137"></a><span class='comment'>--</span>-<a name="line-138"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>-<a name="line-139"></a><span class='comment'>--</span>-<a name="line-140"></a><span class='comment'>--    - 2.parameter nd :  element declaration for which the validation functions are</span>-<a name="line-141"></a><span class='comment'>--                   created</span>-<a name="line-142"></a><span class='comment'>--</span>-<a name="line-143"></a><span class='comment'>--    - returns : entry for the lookup-table</span>-<a name="line-144"></a>-<a name="line-145"></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-146"></a>-<a name="line-147"></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-148"></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-149"></a>      <span class='keyword'>where</span>-<a name="line-150"></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-151"></a>-<a name="line-152"></a>      <span class='varid'>valFct</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-153"></a>      <span class='varid'>valFct</span> <span class='keyglyph'>=</span> <span class='varid'>buildContentValidation</span> <span class='varid'>nd</span>-<a name="line-154"></a>               <span class='varop'>+++</span>-<a name="line-155"></a>	       <span class='varid'>buildAttributeValidation</span> <span class='varid'>dtdPart</span> <span class='varid'>nd</span>-<a name="line-156"></a>-<a name="line-157"></a><span class='definition'>buildValidateFunctions</span> <span class='keyword'>_</span> <span class='varid'>nd</span>-<a name="line-158"></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-159"></a>-<a name="line-160"></a>-<a name="line-161"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-162"></a>-<a name="line-163"></a>-<a name="line-164"></a><span class='comment'>-- |</span>-<a name="line-165"></a><span class='comment'>-- Build validation functions for the content model of an element.</span>-<a name="line-166"></a><span class='comment'>-- Validity constraint: Element Valid (3 \/ p.18 in Spec)</span>-<a name="line-167"></a><span class='comment'>--</span>-<a name="line-168"></a><span class='comment'>--    * 1.parameter nd :  element declaration for which the content validation functions</span>-<a name="line-169"></a><span class='comment'>--                  are built</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), checks if its</span>-<a name="line-172"></a><span class='comment'>--                  children match its content model and returns a list of errors</span>-<a name="line-173"></a>-<a name="line-174"></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-175"></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-176"></a>    <span class='keyglyph'>=</span> <span class='varid'>contentValidation</span> <span class='varid'>attrType</span> <span class='varid'>nd</span>-<a name="line-177"></a>      <span class='keyword'>where</span>-<a name="line-178"></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-179"></a>-<a name="line-180"></a>-<a name="line-181"></a>      <span class='comment'>-- Delegates construction of the validation function on the basis of the</span>-<a name="line-182"></a>      <span class='comment'>-- content model type</span>-<a name="line-183"></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-184"></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-185"></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-186"></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-187"></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-188"></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-189"></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-190"></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-191"></a>-<a name="line-192"></a>      <span class='varid'>contentValidation</span> <span class='keyword'>_</span> <span class='varid'>nd'</span>-<a name="line-193"></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-194"></a>-<a name="line-195"></a>-<a name="line-196"></a>      <span class='comment'>-- Checks #PCDATA content models</span>-<a name="line-197"></a>      <span class='varid'>contentValidationPcdata</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-198"></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-199"></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-200"></a>            <span class='keyword'>then</span> <span class='conid'>[]</span>-<a name="line-201"></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-202"></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-203"></a>	    <span class='keyword'>where</span>-<a name="line-204"></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-205"></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-206"></a>-<a name="line-207"></a>      <span class='varid'>contentValidationPcdata</span> <span class='varid'>n</span>-<a name="line-208"></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-209"></a>-<a name="line-210"></a>-<a name="line-211"></a>      <span class='comment'>-- Checks EMPTY content models</span>-<a name="line-212"></a>      <span class='varid'>contentValidationEmpty</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-213"></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-214"></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-215"></a>            <span class='keyword'>then</span> <span class='conid'>[]</span>-<a name="line-216"></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-217"></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-218"></a>	    <span class='keyword'>where</span>-<a name="line-219"></a>	    <span class='varid'>re</span> <span class='keyglyph'>=</span> <span class='varid'>re_unit</span>-<a name="line-220"></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-221"></a>-<a name="line-222"></a>      <span class='varid'>contentValidationEmpty</span> <span class='varid'>n</span>-<a name="line-223"></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-224"></a>-<a name="line-225"></a>-<a name="line-226"></a>      <span class='comment'>-- Checks ANY content models</span>-<a name="line-227"></a>      <span class='varid'>contentValidationAny</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-228"></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-229"></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-230"></a>            <span class='keyword'>then</span> <span class='conid'>[]</span>-<a name="line-231"></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-232"></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-233"></a>	    <span class='keyword'>where</span>-<a name="line-234"></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-235"></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-236"></a>-<a name="line-237"></a>      <span class='varid'>contentValidationAny</span> <span class='varid'>n</span>-<a name="line-238"></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-239"></a>-<a name="line-240"></a>-<a name="line-241"></a>      <span class='comment'>-- Checks "children" content models</span>-<a name="line-242"></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-243"></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-244"></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-245"></a>            <span class='keyword'>then</span> <span class='conid'>[]</span>-<a name="line-246"></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-247"></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-248"></a>	    <span class='keyword'>where</span>-<a name="line-249"></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-250"></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-251"></a>-<a name="line-252"></a>      <span class='varid'>contentValidationChildren</span> <span class='keyword'>_</span> <span class='varid'>n</span>-<a name="line-253"></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-254"></a>-<a name="line-255"></a>-<a name="line-256"></a>      <span class='comment'>-- Checks "mixed content" content models</span>-<a name="line-257"></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-258"></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-259"></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-260"></a>            <span class='keyword'>then</span> <span class='conid'>[]</span>-<a name="line-261"></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-262"></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-263"></a>	    <span class='keyword'>where</span>-<a name="line-264"></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-265"></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-266"></a>-<a name="line-267"></a>      <span class='varid'>contentValidationMixed</span> <span class='keyword'>_</span> <span class='varid'>n</span>-<a name="line-268"></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-269"></a>-<a name="line-270"></a>-<a name="line-271"></a><span class='definition'>buildContentValidation</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'>"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-273"></a>-<a name="line-274"></a>-<a name="line-275"></a>-<a name="line-276"></a><span class='comment'>-- |</span>-<a name="line-277"></a><span class='comment'>-- Build a regular expression from the content model. The regular expression</span>-<a name="line-278"></a><span class='comment'>-- is provided by the module XmlRE.</span>-<a name="line-279"></a><span class='comment'>--</span>-<a name="line-280"></a><span class='comment'>--    * 1.parameter nd :  node of the content model. Expected: @CONTENT@ or</span>-<a name="line-281"></a><span class='comment'>--              @NAME@</span>-<a name="line-282"></a><span class='comment'>--</span>-<a name="line-283"></a><span class='comment'>--    - returns : regular expression of the content model</span>-<a name="line-284"></a>-<a name="line-285"></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-286"></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-287"></a>    <span class='keyglyph'>=</span> <span class='varid'>processModifier</span> <span class='varid'>modifier</span>-<a name="line-288"></a>      <span class='keyword'>where</span>-<a name="line-289"></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-290"></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-291"></a>-<a name="line-292"></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-293"></a>      <span class='varid'>processModifier</span> <span class='varid'>m</span>-<a name="line-294"></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-295"></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-296"></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-297"></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-298"></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-299"></a>-<a name="line-300"></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-301"></a>      <span class='varid'>processKind</span> <span class='varid'>k</span>-<a name="line-302"></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-303"></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-304"></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-305"></a>-<a name="line-306"></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-307"></a>      <span class='varid'>makeSequence</span> <span class='conid'>[]</span>     <span class='keyglyph'>=</span> <span class='varid'>re_unit</span>-<a name="line-308"></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-309"></a>-<a name="line-310"></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-311"></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-312"></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-313"></a>-<a name="line-314"></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-315"></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-316"></a>-<a name="line-317"></a><span class='definition'>createRE</span> <span class='varid'>nd</span>-<a name="line-318"></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-319"></a>-<a name="line-320"></a>-<a name="line-321"></a>-<a name="line-322"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-323"></a>-<a name="line-324"></a>-<a name="line-325"></a>-<a name="line-326"></a><span class='comment'>-- |</span>-<a name="line-327"></a><span class='comment'>-- Build validation functions for the attributes of an element.</span>-<a name="line-328"></a><span class='comment'>--</span>-<a name="line-329"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>-<a name="line-330"></a><span class='comment'>--</span>-<a name="line-331"></a><span class='comment'>--    - 2.parameter nd :  element declaration for which the attribute validation functions</span>-<a name="line-332"></a><span class='comment'>--                  are created</span>-<a name="line-333"></a><span class='comment'>--</span>-<a name="line-334"></a><span class='comment'>--    - returns : a function which takes an element (XTag), checks if its</span>-<a name="line-335"></a><span class='comment'>--                  attributes are valid and returns a list of errors</span>-<a name="line-336"></a>-<a name="line-337"></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-338"></a><span class='definition'>buildAttributeValidation</span> <span class='varid'>dtdPart</span> <span class='varid'>nd</span> <span class='keyglyph'>=</span>-<a name="line-339"></a>    <span class='varid'>noDoublicateAttributes</span>-<a name="line-340"></a>    <span class='varop'>+++</span>-<a name="line-341"></a>    <span class='varid'>checkNotDeclardAttributes</span> <span class='varid'>attrDecls</span> <span class='varid'>nd</span>-<a name="line-342"></a>    <span class='varop'>+++</span>-<a name="line-343"></a>    <span class='varid'>checkRequiredAttributes</span> <span class='varid'>attrDecls</span> <span class='varid'>nd</span>-<a name="line-344"></a>    <span class='varop'>+++</span>-<a name="line-345"></a>    <span class='varid'>checkFixedAttributes</span> <span class='varid'>attrDecls</span> <span class='varid'>nd</span>-<a name="line-346"></a>    <span class='varop'>+++</span>-<a name="line-347"></a>    <span class='varid'>checkValuesOfAttributes</span> <span class='varid'>attrDecls</span> <span class='varid'>dtdPart</span> <span class='varid'>nd</span>-<a name="line-348"></a>    <span class='keyword'>where</span>-<a name="line-349"></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-350"></a>-<a name="line-351"></a>-<a name="line-352"></a><span class='comment'>-- |</span>-<a name="line-353"></a><span class='comment'>-- Validate that all attributes of an element are unique.</span>-<a name="line-354"></a><span class='comment'>-- Well-formdness constraint: Unique AttSpec (3.1 \/ p.19 in Spec)</span>-<a name="line-355"></a><span class='comment'>--</span>-<a name="line-356"></a><span class='comment'>--    - returns : a function which takes an element (XTag), checks if its</span>-<a name="line-357"></a><span class='comment'>--                  attributes are unique and returns a list of errors</span>-<a name="line-358"></a>-<a name="line-359"></a><a name="noDoublicateAttributes"></a><span class='definition'>noDoublicateAttributes</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-360"></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-361"></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-362"></a>      <span class='keyword'>where</span>-<a name="line-363"></a>      <span class='varid'>tagname</span> <span class='keyglyph'>=</span> <span class='varid'>nameOf</span> <span class='varid'>n</span>-<a name="line-364"></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-365"></a>-<a name="line-366"></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-367"></a>      <span class='varid'>doubles</span> <span class='conid'>[]</span>-<a name="line-368"></a>	  <span class='keyglyph'>=</span> <span class='conid'>[]</span>-<a name="line-369"></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-370"></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-371"></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-372"></a>	      <span class='keyword'>else</span> <span class='conid'>[]</span>-<a name="line-373"></a>	    <span class='layout'>)</span> <span class='varop'>++</span> <span class='varid'>doubles</span> <span class='varid'>ns</span>-<a name="line-374"></a>-<a name="line-375"></a><span class='definition'>noDoublicateAttributes</span> <span class='varid'>n</span>-<a name="line-376"></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-377"></a>-<a name="line-378"></a>-<a name="line-379"></a><span class='comment'>-- |</span>-<a name="line-380"></a><span class='comment'>-- Validate that all \#REQUIRED attributes are provided.</span>-<a name="line-381"></a><span class='comment'>-- Validity constraint: Required Attributes (3.3.2 \/ p.28 in Spec)</span>-<a name="line-382"></a><span class='comment'>--</span>-<a name="line-383"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>-<a name="line-384"></a><span class='comment'>--</span>-<a name="line-385"></a><span class='comment'>--    - 2.parameter nd :  element declaration which attributes have to be checked</span>-<a name="line-386"></a><span class='comment'>--</span>-<a name="line-387"></a><span class='comment'>--    - returns : a function which takes an element (XTag), checks if all</span>-<a name="line-388"></a><span class='comment'>--                  required attributes are provided and returns a list of errors</span>-<a name="line-389"></a>-<a name="line-390"></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-391"></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-392"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkRequired</span> <span class='varid'>requiredAtts</span>-<a name="line-393"></a>      <span class='keyword'>where</span>-<a name="line-394"></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-395"></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-396"></a>-<a name="line-397"></a>-<a name="line-398"></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-399"></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-400"></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-401"></a>	    <span class='keyword'>then</span> <span class='varid'>checkRequired</span> <span class='varid'>xs</span> <span class='varid'>n</span>-<a name="line-402"></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-403"></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-404"></a>	         <span class='varop'>++</span>-<a name="line-405"></a>		 <span class='varid'>checkRequired</span> <span class='varid'>xs</span> <span class='varid'>n</span>-<a name="line-406"></a>	    <span class='keyword'>where</span>-<a name="line-407"></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-408"></a>-<a name="line-409"></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-410"></a>-<a name="line-411"></a>      <span class='varid'>checkRequired</span> <span class='varid'>nd</span> <span class='varid'>n</span>-<a name="line-412"></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-413"></a>-<a name="line-414"></a>-<a name="line-415"></a><span class='definition'>checkRequiredAttributes</span> <span class='keyword'>_</span> <span class='varid'>nd</span>-<a name="line-416"></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-417"></a>-<a name="line-418"></a>-<a name="line-419"></a>-<a name="line-420"></a><span class='comment'>-- |</span>-<a name="line-421"></a><span class='comment'>-- Validate that \#FIXED attributes match the default value.</span>-<a name="line-422"></a><span class='comment'>-- Validity constraint: Fixed Attribute Default (3.3.2 \/ p.28 in Spec)</span>-<a name="line-423"></a><span class='comment'>--</span>-<a name="line-424"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>-<a name="line-425"></a><span class='comment'>--</span>-<a name="line-426"></a><span class='comment'>--    - 2.parameter nd :  element declaration which attributes have to be checked</span>-<a name="line-427"></a><span class='comment'>--</span>-<a name="line-428"></a><span class='comment'>--    - returns : a function which takes an element (XTag), checks if all</span>-<a name="line-429"></a><span class='comment'>--                  fixed attributes match the default value and returns a list of errors</span>-<a name="line-430"></a>-<a name="line-431"></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-432"></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-433"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkFixed</span> <span class='varid'>fixedAtts</span>-<a name="line-434"></a>      <span class='keyword'>where</span>-<a name="line-435"></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-436"></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-437"></a>-<a name="line-438"></a>-<a name="line-439"></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-440"></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-441"></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-442"></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-443"></a>	         <span class='keyword'>then</span> <span class='varid'>checkFixed</span> <span class='varid'>xs</span> <span class='varid'>n</span>-<a name="line-444"></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-445"></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-446"></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-447"></a>	              <span class='varop'>++</span>-<a name="line-448"></a>		      <span class='varid'>checkFixed</span> <span class='varid'>xs</span> <span class='varid'>n</span>-<a name="line-449"></a>	    <span class='keyword'>else</span> <span class='varid'>checkFixed</span> <span class='varid'>xs</span> <span class='varid'>n</span>-<a name="line-450"></a>	    <span class='keyword'>where</span>-<a name="line-451"></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-452"></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-453"></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-454"></a>-<a name="line-455"></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-456"></a>-<a name="line-457"></a>      <span class='varid'>checkFixed</span> <span class='varid'>nd</span> <span class='varid'>n</span>-<a name="line-458"></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-459"></a>-<a name="line-460"></a>-<a name="line-461"></a><span class='definition'>checkFixedAttributes</span> <span class='keyword'>_</span> <span class='varid'>nd</span>-<a name="line-462"></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-463"></a>-<a name="line-464"></a>-<a name="line-465"></a><span class='comment'>-- |</span>-<a name="line-466"></a><span class='comment'>-- Validate that an element has no attributes which are not declared.</span>-<a name="line-467"></a><span class='comment'>-- Validity constraint: Attribute Value Type (3.1 \/ p.19 in Spec)</span>-<a name="line-468"></a><span class='comment'>--</span>-<a name="line-469"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>-<a name="line-470"></a><span class='comment'>--</span>-<a name="line-471"></a><span class='comment'>--    - 2.parameter nd :  element declaration which attributes have to be checked</span>-<a name="line-472"></a><span class='comment'>--</span>-<a name="line-473"></a><span class='comment'>--    - returns : a function which takes an element (XTag), checks if all</span>-<a name="line-474"></a><span class='comment'>--                  attributes are declared and returns a list of errors</span>-<a name="line-475"></a>-<a name="line-476"></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-477"></a><span class='definition'>checkNotDeclardAttributes</span> <span class='varid'>attrDecls</span> <span class='varid'>elemDescr</span>-<a name="line-478"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkNotDeclared</span>-<a name="line-479"></a>      <span class='keyword'>where</span>-<a name="line-480"></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-481"></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-482"></a>-<a name="line-483"></a>      <span class='varid'>checkNotDeclared</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-484"></a>      <span class='varid'>checkNotDeclared</span> <span class='varid'>n</span>-<a name="line-485"></a>	  <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>isXTag</span>-<a name="line-486"></a>	      <span class='varop'>`guards`</span>-<a name="line-487"></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-488"></a>	    <span class='layout'>)</span> <span class='varid'>n</span>-<a name="line-489"></a>-<a name="line-490"></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-491"></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-492"></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-493"></a>            <span class='keyword'>then</span> <span class='varid'>none</span>-<a name="line-494"></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-495"></a>-<a name="line-496"></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-497"></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-498"></a>-<a name="line-499"></a>      <span class='varid'>searchForDeclaredAtt</span> <span class='keyword'>_</span> <span class='varid'>nd</span> <span class='varid'>a</span>-<a name="line-500"></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-501"></a>-<a name="line-502"></a><span class='comment'>-- |</span>-<a name="line-503"></a><span class='comment'>-- Validate that the attribute value meets the lexical constraints of its type.</span>-<a name="line-504"></a><span class='comment'>-- Validity constaint: Attribute Value Type (3.1 \/ p.19 in Spec)</span>-<a name="line-505"></a><span class='comment'>--</span>-<a name="line-506"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>-<a name="line-507"></a><span class='comment'>--</span>-<a name="line-508"></a><span class='comment'>--    - 2.parameter nd :  element declaration which attributes have to be checked</span>-<a name="line-509"></a><span class='comment'>--</span>-<a name="line-510"></a><span class='comment'>--    - returns : a function which takes an element (XTag), checks if all</span>-<a name="line-511"></a><span class='comment'>--                  attributes meet the lexical constraints and returns a list of errors</span>-<a name="line-512"></a>-<a name="line-513"></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-514"></a><span class='definition'>checkValuesOfAttributes</span> <span class='varid'>attrDecls</span> <span class='varid'>dtdPart</span> <span class='varid'>elemDescr</span>-<a name="line-515"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkValues</span>-<a name="line-516"></a>      <span class='keyword'>where</span>-<a name="line-517"></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-518"></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-519"></a>-<a name="line-520"></a>      <span class='varid'>checkValues</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-521"></a>      <span class='varid'>checkValues</span> <span class='varid'>n</span>-<a name="line-522"></a>          <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='varid'>isXTag</span>-<a name="line-523"></a>	      <span class='varop'>`guards`</span>-<a name="line-524"></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-525"></a>	    <span class='layout'>)</span> <span class='varid'>n</span>-<a name="line-526"></a>-<a name="line-527"></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-528"></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-529"></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-530"></a>            <span class='keyword'>then</span> <span class='varid'>checkAttributeValue</span> <span class='varid'>dtdPart</span> <span class='varid'>attrDecl</span>-<a name="line-531"></a>	    <span class='keyword'>else</span> <span class='varid'>checkValue</span> <span class='varid'>xs</span> <span class='varid'>att</span>-<a name="line-532"></a>-<a name="line-533"></a>      <span class='varid'>checkValue</span> <span class='conid'>[]</span> <span class='keyword'>_</span>-<a name="line-534"></a>          <span class='keyglyph'>=</span> <span class='varid'>none</span>  <span class='comment'>-- undeclared attribute, reported by separate function</span>-<a name="line-535"></a>-<a name="line-536"></a>      <span class='varid'>checkValue</span> <span class='varid'>n</span> <span class='keyword'>_</span>-<a name="line-537"></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-538"></a>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-Validator-IdValidation.html
@@ -1,279 +0,0 @@-<!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><span class='comment'>-- Version : $Id: IdValidation.hs,v 1.1 2004/09/02 19:12:03 hxml Exp $</span>-<a name="line-28"></a>-<a name="line-29"></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-30"></a>    <span class='layout'>(</span> <span class='varid'>validateIds</span>-<a name="line-31"></a>    <span class='layout'>)</span>-<a name="line-32"></a><span class='keyword'>where</span>-<a name="line-33"></a>-<a name="line-34"></a>-<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'>DOM</span><span class='varop'>.</span><span class='conid'>XmlTree</span>-<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'>Validator</span><span class='varop'>.</span><span class='conid'>AttributeValueValidation</span>-<a name="line-37"></a>-<a name="line-38"></a>-<a name="line-39"></a>-<a name="line-40"></a><span class='comment'>-- |</span>-<a name="line-41"></a><span class='comment'>-- Lookup-table which maps element names to their validation functions. The</span>-<a name="line-42"></a><span class='comment'>-- validation functions are XmlFilters.</span>-<a name="line-43"></a>-<a name="line-44"></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-45"></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-46"></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-47"></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-48"></a>-<a name="line-49"></a>-<a name="line-50"></a>-<a name="line-51"></a><span class='comment'>-- |</span>-<a name="line-52"></a><span class='comment'>-- Perform the validation of the ID/IDREF/IDREFS constraints.</span>-<a name="line-53"></a><span class='comment'>--</span>-<a name="line-54"></a><span class='comment'>--    * 1.parameter dtdPart :  the DTD subset (Node @DOCTYPE@) of the XmlTree</span>-<a name="line-55"></a><span class='comment'>--</span>-<a name="line-56"></a><span class='comment'>--    - 2.parameter doc :  the document subset of the XmlTree</span>-<a name="line-57"></a><span class='comment'>--</span>-<a name="line-58"></a><span class='comment'>--    - returns : a list of errors</span>-<a name="line-59"></a>-<a name="line-60"></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-61"></a><span class='definition'>validateIds</span> <span class='varid'>dtdPart</span> <span class='varid'>doc</span>-<a name="line-62"></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-63"></a>      <span class='varop'>++</span>-<a name="line-64"></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-65"></a>      <span class='keyword'>where</span>-<a name="line-66"></a>      <span class='varid'>idEnv</span>      <span class='keyglyph'>=</span> <span class='varid'>buildIdCollectorFcts</span> <span class='varid'>dtdNodes</span>-<a name="line-67"></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-68"></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-69"></a>      <span class='varid'>dtdNodes</span>   <span class='keyglyph'>=</span> <span class='varid'>getChildren</span> <span class='varid'>dtdPart</span>-<a name="line-70"></a>-<a name="line-71"></a>-<a name="line-72"></a><span class='comment'>-- |</span>-<a name="line-73"></a><span class='comment'>-- Traverse the XmlTree in preorder.</span>-<a name="line-74"></a><span class='comment'>--</span>-<a name="line-75"></a><span class='comment'>--    * 1.parameter idEnv :  lookup-table which maps element names to their validation functions</span>-<a name="line-76"></a><span class='comment'>--</span>-<a name="line-77"></a><span class='comment'>--    - returns : list of errors</span>-<a name="line-78"></a>-<a name="line-79"></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-80"></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-81"></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-82"></a>      <span class='keyword'>where</span>-<a name="line-83"></a>      <span class='varid'>idFct</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-84"></a>      <span class='varid'>idFct</span>-<a name="line-85"></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-86"></a>	    <span class='conid'>Nothing</span> <span class='keyglyph'>-&gt;</span> <span class='varid'>none</span>-<a name="line-87"></a>	    <span class='conid'>Just</span> <span class='varid'>f</span>  <span class='keyglyph'>-&gt;</span> <span class='varid'>f</span>-<a name="line-88"></a>-<a name="line-89"></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-90"></a>-<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'>-- Returns the value of an element's ID attribute. The attribute name has to be</span>-<a name="line-95"></a><span class='comment'>-- retrieved first from the DTD.</span>-<a name="line-96"></a><span class='comment'>--</span>-<a name="line-97"></a><span class='comment'>--    * 1.parameter dtdPart :  list of ID attribute definitions from the DTD</span>-<a name="line-98"></a><span class='comment'>--</span>-<a name="line-99"></a><span class='comment'>--    - 2.parameter n :  element which ID attribute value should be returned</span>-<a name="line-100"></a><span class='comment'>--</span>-<a name="line-101"></a><span class='comment'>--    - returns : normalized value of the ID attribute</span>-<a name="line-102"></a>-<a name="line-103"></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-104"></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-105"></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-106"></a>      <span class='keyword'>then</span> <span class='varid'>attrValue</span>-<a name="line-107"></a>      <span class='keyword'>else</span> <span class='varid'>getIdValue</span> <span class='varid'>xs</span> <span class='varid'>n</span>-<a name="line-108"></a>      <span class='keyword'>where</span>-<a name="line-109"></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-110"></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-111"></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-112"></a>-<a name="line-113"></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-114"></a>-<a name="line-115"></a>-<a name="line-116"></a>-<a name="line-117"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-118"></a>-<a name="line-119"></a>-<a name="line-120"></a><span class='comment'>-- |</span>-<a name="line-121"></a><span class='comment'>-- Build collector functions which return XTag nodes with ID attributes from</span>-<a name="line-122"></a><span class='comment'>-- a document.</span>-<a name="line-123"></a><span class='comment'>--</span>-<a name="line-124"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>-<a name="line-125"></a><span class='comment'>--</span>-<a name="line-126"></a><span class='comment'>--    - returns : lookup-table which maps element names to their collector function</span>-<a name="line-127"></a>-<a name="line-128"></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-129"></a><span class='definition'>buildIdCollectorFcts</span> <span class='varid'>dtdPart</span>-<a name="line-130"></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-131"></a>      <span class='keyword'>where</span>-<a name="line-132"></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-133"></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-134"></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-135"></a>            <span class='keyword'>where</span>-<a name="line-136"></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-137"></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-138"></a>-<a name="line-139"></a>      <span class='varid'>buildIdCollectorFct</span> <span class='varid'>nd</span>-<a name="line-140"></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-141"></a>-<a name="line-142"></a>-<a name="line-143"></a><span class='comment'>-- |</span>-<a name="line-144"></a><span class='comment'>-- Build validation functions for checking if IDREF\/IDREFS values match a value</span>-<a name="line-145"></a><span class='comment'>-- of some ID attributes.</span>-<a name="line-146"></a><span class='comment'>--</span>-<a name="line-147"></a><span class='comment'>--    * 1.parameter dtdPart :  the children of the @DOCTYPE@ node</span>-<a name="line-148"></a><span class='comment'>--</span>-<a name="line-149"></a><span class='comment'>--    - 2.parameter idNodeList :  list of all XTag nodes with ID attributes</span>-<a name="line-150"></a><span class='comment'>--</span>-<a name="line-151"></a><span class='comment'>--    - returns : lookup-table which maps element names to their validation function</span>-<a name="line-152"></a>-<a name="line-153"></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-154"></a><span class='definition'>buildIdrefValidationFcts</span> <span class='varid'>dtdPart</span> <span class='varid'>idNodeList</span>-<a name="line-155"></a>    <span class='keyglyph'>=</span> <span class='varid'>map</span> <span class='varid'>buildElemValidationFct</span> <span class='varid'>elements</span>-<a name="line-156"></a>      <span class='keyword'>where</span>-<a name="line-157"></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-158"></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-159"></a>-<a name="line-160"></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-161"></a>      <span class='varid'>getIdValues</span> <span class='varid'>idAttrTypes</span>-<a name="line-162"></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-163"></a>-<a name="line-164"></a>-<a name="line-165"></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-166"></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-167"></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-168"></a>	  <span class='keyword'>where</span>-<a name="line-169"></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-170"></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-171"></a>-<a name="line-172"></a>      <span class='varid'>buildElemValidationFct</span> <span class='varid'>nd</span>-<a name="line-173"></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-174"></a>-<a name="line-175"></a>-<a name="line-176"></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-177"></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-178"></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-179"></a>            <span class='keyword'>where</span>-<a name="line-180"></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-181"></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-182"></a>-<a name="line-183"></a>            <span class='varid'>checkIdref</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-184"></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-185"></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-186"></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-187"></a>		       <span class='keyword'>then</span> <span class='varid'>checkValueDeclared</span> <span class='varid'>n</span> <span class='varid'>attrValue</span>-<a name="line-188"></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-189"></a>		            <span class='keyword'>in</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>valueList</span>-<a name="line-190"></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-191"></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-192"></a>					 <span class='str'>" must have at least one name."</span><span class='layout'>)</span> <span class='varid'>n</span>-<a name="line-193"></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-194"></a>	          <span class='keyword'>else</span> <span class='conid'>[]</span>-<a name="line-195"></a>		  <span class='keyword'>where</span>-<a name="line-196"></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-197"></a>-<a name="line-198"></a>	    <span class='varid'>checkIdref</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>[]</span>-<a name="line-199"></a>-<a name="line-200"></a>-<a name="line-201"></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-202"></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-203"></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-204"></a>		  <span class='keyword'>then</span> <span class='conid'>[]</span>-<a name="line-205"></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-206"></a>		            <span class='str'>" must appear in the document."</span><span class='layout'>)</span> <span class='varid'>n</span>-<a name="line-207"></a>-<a name="line-208"></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-209"></a>-<a name="line-210"></a>      <span class='varid'>buildIdrefValidationFct</span> <span class='conid'>[]</span>-<a name="line-211"></a>          <span class='keyglyph'>=</span> <span class='varid'>none</span>-<a name="line-212"></a>-<a name="line-213"></a>      <span class='varid'>buildIdrefValidationFct</span> <span class='varid'>nd</span>-<a name="line-214"></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-215"></a>-<a name="line-216"></a>-<a name="line-217"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-218"></a>-<a name="line-219"></a>-<a name="line-220"></a><span class='comment'>-- |</span>-<a name="line-221"></a><span class='comment'>-- Validate that all ID values are unique within a document.</span>-<a name="line-222"></a><span class='comment'>-- Validity constraint: ID (3.3.1 \/p. 25 in Spec)</span>-<a name="line-223"></a><span class='comment'>--</span>-<a name="line-224"></a><span class='comment'>--    * 1.parameter idNodeList :  list of all XTag nodes with ID attributes</span>-<a name="line-225"></a><span class='comment'>--</span>-<a name="line-226"></a><span class='comment'>--    - 2.parameter dtdPart :  the children of the @DOCTYPE@ node</span>-<a name="line-227"></a><span class='comment'>--</span>-<a name="line-228"></a><span class='comment'>--    - returns : a list of errors</span>-<a name="line-229"></a>-<a name="line-230"></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-231"></a><span class='definition'>checkForUniqueIds</span> <span class='varid'>idNodeList</span> <span class='varid'>dtdPart</span>-<a name="line-232"></a>    <span class='keyglyph'>=</span> <span class='varid'>checkForUniqueId</span> <span class='varid'>idNodeList</span> <span class='conid'>[]</span>-<a name="line-233"></a>      <span class='keyword'>where</span>-<a name="line-234"></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-235"></a>-<a name="line-236"></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-237"></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-238"></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-239"></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-240"></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-241"></a>		 <span class='varop'>++</span>-<a name="line-242"></a>		 <span class='varid'>checkForUniqueId</span> <span class='varid'>xs</span> <span class='varid'>used</span>-<a name="line-243"></a>-<a name="line-244"></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-245"></a>	    <span class='keyword'>where</span>-<a name="line-246"></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-247"></a>-<a name="line-248"></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-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'>-- Validate that all IDREF\/IDREFS values match the value of some ID attribute.</span>-<a name="line-254"></a><span class='comment'>-- Validity constraint: IDREF (3.3.1 \/ p.26 in Spec)</span>-<a name="line-255"></a><span class='comment'>--</span>-<a name="line-256"></a><span class='comment'>--    * 1.parameter idRefEnv :  lookup-table which maps element names to their validation function</span>-<a name="line-257"></a><span class='comment'>--</span>-<a name="line-258"></a><span class='comment'>--    - 2.parameter doc :  the document to validate</span>-<a name="line-259"></a><span class='comment'>--</span>-<a name="line-260"></a><span class='comment'>--    - returns : a list of errors</span>-<a name="line-261"></a>-<a name="line-262"></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-263"></a><span class='definition'>checkIdReferences</span> <span class='varid'>idRefEnv</span> <span class='varid'>doc</span>-<a name="line-264"></a>    <span class='keyglyph'>=</span> <span class='varid'>traverseTree</span> <span class='varid'>idRefEnv</span> <span class='varid'>doc</span>-<a name="line-265"></a>-<a name="line-266"></a>-<a name="line-267"></a>-<a name="line-268"></a>-<a name="line-269"></a>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-Validator-RE.html
@@ -1,340 +0,0 @@-<!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><span class='comment'>--</span>-<a name="line-18"></a><span class='comment'>-- Version : $Id: RE.hs,v 1.1 2004/09/02 19:12:03 hxml Exp $</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'>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>
− doc/hdoc/src/Text-XML-HXT-Validator-Validation.html
@@ -1,75 +0,0 @@-<!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><span class='comment'>-- Version : $Id: Validation.hs,v 1.2 2004/11/23 15:50:23 hxml Exp $</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'>Validator</span><span class='varop'>.</span><span class='conid'>Validation</span>-<a name="line-10"></a>    <span class='layout'>(</span> <span class='varid'>getValidatedDoc</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'>Validator</span><span class='varop'>.</span><span class='conid'>ValidationFilter</span>-<a name="line-12"></a>    <span class='layout'>)</span>-<a name="line-13"></a>-<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>-<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'>Validator</span><span class='varop'>.</span><span class='conid'>ValidationFilter</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'>XmlOutput</span>-<a name="line-22"></a>    <span class='layout'>(</span> <span class='varid'>traceTree</span>-<a name="line-23"></a>    <span class='layout'>,</span> <span class='varid'>traceSource</span>-<a name="line-24"></a>    <span class='layout'>,</span> <span class='varid'>traceMsg</span>-<a name="line-25"></a>    <span class='layout'>)</span>-<a name="line-26"></a>-<a name="line-27"></a><span class='comment'>-- ------------------------------------------------------------</span>-<a name="line-28"></a>-<a name="line-29"></a><span class='comment'>-- |</span>-<a name="line-30"></a><span class='comment'>-- monadic filter for validating and transforming a wellformed document.</span>-<a name="line-31"></a><span class='comment'>--</span>-<a name="line-32"></a><span class='comment'>-- the "main" function for validation.</span>-<a name="line-33"></a><span class='comment'>--</span>-<a name="line-34"></a><span class='comment'>-- the input tree must consist of a root node with a complete document and DTD.</span>-<a name="line-35"></a><span class='comment'>-- Result is the single element list containing same tree but tranformed with respect to the DTD,</span>-<a name="line-36"></a><span class='comment'>-- or, in case of errors, the root with an empty list of children</span>-<a name="line-37"></a>-<a name="line-38"></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-39"></a><span class='definition'>getValidatedDoc</span>-<a name="line-40"></a>    <span class='keyglyph'>=</span> <span class='varid'>traceMsg</span> <span class='num'>1</span> <span class='str'>"validating document"</span>-<a name="line-41"></a>      <span class='varop'>.&gt;&gt;</span>-<a name="line-42"></a>      <span class='layout'>(</span> <span class='layout'>(</span> <span class='varid'>runValidation</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>-<a name="line-48"></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-49"></a>      <span class='layout'>)</span>-<a name="line-50"></a>      <span class='keyword'>where</span>-<a name="line-51"></a>      <span class='varid'>runValidation</span> <span class='varid'>t</span>-<a name="line-52"></a>	  <span class='keyglyph'>=</span> <span class='keyword'>do</span>-<a name="line-53"></a>	    <span class='varid'>issueError</span> <span class='varop'>$$&lt;</span> <span class='varid'>res</span>-<a name="line-54"></a>	    <span class='layout'>(</span> <span class='keyword'>if</span> <span class='varid'>null</span> <span class='varid'>errs</span>-<a name="line-55"></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-56"></a>		     <span class='varop'>.&gt;&gt;</span>-<a name="line-57"></a>		     <span class='varid'>liftMf</span> <span class='varid'>transform</span>-<a name="line-58"></a>		   <span class='layout'>)</span>-<a name="line-59"></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-60"></a>	      <span class='layout'>)</span> <span class='varid'>t</span>-<a name="line-61"></a>	    <span class='keyword'>where</span>-<a name="line-62"></a>	    <span class='varid'>res</span>  <span class='keyglyph'>=</span> <span class='varid'>validate</span> <span class='varid'>t</span>-<a name="line-63"></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-64"></a>-<a name="line-65"></a><span class='comment'>-- ------------------------------------------------------------</span>-</pre></body>-</html>
− doc/hdoc/src/Text-XML-HXT-Validator-ValidationFilter.html
@@ -1,136 +0,0 @@-<!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><span class='comment'>-- Version : $Id: ValidationFilter.hs,v 1.1 2004/11/23 15:50:23 hxml Exp $</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'>Validator</span><span class='varop'>.</span><span class='conid'>ValidationFilter</span>-<a name="line-18"></a>    <span class='layout'>(</span> <span class='varid'>getDTDSubset</span>-<a name="line-19"></a>    <span class='layout'>,</span> <span class='varid'>validate</span>-<a name="line-20"></a>    <span class='layout'>,</span> <span class='varid'>validateDTD</span>-<a name="line-21"></a>    <span class='layout'>,</span> <span class='varid'>validateDoc</span>-<a name="line-22"></a>    <span class='layout'>,</span> <span class='varid'>removeDoublicateDefs</span>-<a name="line-23"></a>    <span class='layout'>,</span> <span class='varid'>transform</span>-<a name="line-24"></a>    <span class='layout'>)</span>-<a name="line-25"></a>-<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='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-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'>DocValidation</span> <span class='keyword'>as</span> <span class='conid'>DocValidation</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'>IdValidation</span> <span class='keyword'>as</span> <span class='conid'>IdValidation</span>-<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'>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-34"></a>-<a name="line-35"></a><span class='comment'>-- |</span>-<a name="line-36"></a><span class='comment'>-- Main validation filter. Check if the DTD and the document are valid.</span>-<a name="line-37"></a><span class='comment'>--</span>-<a name="line-38"></a><span class='comment'>--</span>-<a name="line-39"></a><span class='comment'>--    - returns : a function which expects a complete document as XmlTree input</span>-<a name="line-40"></a><span class='comment'>--                     and returns a list of all errors found.</span>-<a name="line-41"></a>-<a name="line-42"></a><a name="validate"></a><span class='definition'>validate</span> 	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-43"></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-44"></a>-<a name="line-45"></a><span class='comment'>-- |</span>-<a name="line-46"></a><span class='comment'>-- Check if the DTD is valid.</span>-<a name="line-47"></a><span class='comment'>--</span>-<a name="line-48"></a><span class='comment'>--</span>-<a name="line-49"></a><span class='comment'>--    - returns : a function which expects an XmlTree from the parser as input</span>-<a name="line-50"></a><span class='comment'>--                     and returns a list of all errors found in the DTD.</span>-<a name="line-51"></a>-<a name="line-52"></a><a name="validateDTD"></a><span class='definition'>validateDTD</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-53"></a><span class='definition'>validateDTD</span>-<a name="line-54"></a>    <span class='keyglyph'>=</span> <span class='varid'>choice</span> <span class='keyglyph'>[</span> <span class='varid'>getDTDSubset</span>-<a name="line-55"></a>	       <span class='conop'>:-&gt;</span> <span class='conid'>DTDValidation</span><span class='varop'>.</span><span class='varid'>validateDTD</span>-<a name="line-56"></a>	     <span class='layout'>,</span> <span class='varid'>this</span>-<a name="line-57"></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-58"></a>	     <span class='keyglyph'>]</span>-<a name="line-59"></a><span class='comment'>-- |</span>-<a name="line-60"></a><span class='comment'>-- Check if the document corresponds to the given DTD.</span>-<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'>--    - returns : a function which expects a complete document as XmlTree input</span>-<a name="line-64"></a><span class='comment'>--                     and returns a list of all errors found in the content part.</span>-<a name="line-65"></a>-<a name="line-66"></a><a name="validateDoc"></a><span class='definition'>validateDoc</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-67"></a><span class='definition'>validateDoc</span> <span class='varid'>t</span>-<a name="line-68"></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-69"></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-70"></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-71"></a>               <span class='varop'>+++</span>-<a name="line-72"></a>	       <span class='conid'>IdValidation</span><span class='varop'>.</span><span class='varid'>validateIds</span> <span class='varid'>dtdPart</span>-<a name="line-73"></a>	     <span class='layout'>)</span>-<a name="line-74"></a>      <span class='layout'>)</span> <span class='varop'>$</span> <span class='varid'>t</span>-<a name="line-75"></a>      <span class='keyword'>where</span>-<a name="line-76"></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-77"></a>      <span class='varid'>dtdPart</span>  <span class='keyglyph'>=</span> <span class='varid'>head</span> <span class='varid'>dtds</span>-<a name="line-78"></a>-<a name="line-79"></a><span class='comment'>-- |</span>-<a name="line-80"></a><span class='comment'>-- filter for transforming a document with respect to the given DTD.</span>-<a name="line-81"></a><span class='comment'>--</span>-<a name="line-82"></a><span class='comment'>-- Validating parsers</span>-<a name="line-83"></a><span class='comment'>-- are expected to  normalize attribute values and add default values.</span>-<a name="line-84"></a><span class='comment'>-- This function should be called after a successful validation.</span>-<a name="line-85"></a><span class='comment'>--</span>-<a name="line-86"></a><span class='comment'>--</span>-<a name="line-87"></a><span class='comment'>--    - returns : a function which expects a complete XML document tree</span>-<a name="line-88"></a><span class='comment'>--                and returns the transformed XmlTree</span>-<a name="line-89"></a>-<a name="line-90"></a><a name="transform"></a><span class='definition'>transform</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-91"></a><span class='definition'>transform</span>-<a name="line-92"></a>    <span class='keyglyph'>=</span> <span class='varid'>choice</span> <span class='keyglyph'>[</span> <span class='varid'>isRoot</span>-<a name="line-93"></a>               <span class='conop'>:-&gt;</span> <span class='varid'>transformDoc</span>-<a name="line-94"></a>	     <span class='layout'>,</span> <span class='varid'>this</span>-<a name="line-95"></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-96"></a>	     <span class='keyglyph'>]</span>-<a name="line-97"></a>      <span class='keyword'>where</span>-<a name="line-98"></a>      <span class='varid'>transformDoc</span> <span class='varid'>t</span>-<a name="line-99"></a>	  <span class='keyglyph'>|</span> <span class='varid'>null</span> <span class='varid'>dtds</span>-<a name="line-100"></a>	      <span class='keyglyph'>=</span> <span class='varid'>this</span> <span class='varid'>t</span>-<a name="line-101"></a>	  <span class='keyglyph'>|</span> <span class='varid'>otherwise</span>-<a name="line-102"></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-103"></a>	  <span class='keyword'>where</span>-<a name="line-104"></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-105"></a>-<a name="line-106"></a><span class='comment'>-- |</span>-<a name="line-107"></a><span class='comment'>-- Removes doublicate declarations from the DTD which first declaration is</span>-<a name="line-108"></a><span class='comment'>-- binding. This is the case for ATTLIST and ENTITY declarations.</span>-<a name="line-109"></a><span class='comment'>--</span>-<a name="line-110"></a><span class='comment'>--</span>-<a name="line-111"></a><span class='comment'>--    - returns : A function that replaces the children of DOCTYPE nodes by a list</span>-<a name="line-112"></a><span class='comment'>--               where all multiple declarations are removed.</span>-<a name="line-113"></a>-<a name="line-114"></a><a name="removeDoublicateDefs"></a><span class='definition'>removeDoublicateDefs</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-115"></a><span class='definition'>removeDoublicateDefs</span>-<a name="line-116"></a>    <span class='keyglyph'>=</span> <span class='conid'>DTDValidation</span><span class='varop'>.</span><span class='varid'>removeDoublicateDefs</span>-<a name="line-117"></a>-<a name="line-118"></a><span class='comment'>--</span>-<a name="line-119"></a><span class='comment'>-- selects the DTD part of a document</span>-<a name="line-120"></a><span class='comment'>-- but only, if there is more than the internal part for the 4 predefined XML entities</span>-<a name="line-121"></a>-<a name="line-122"></a><a name="getDTDSubset"></a><span class='definition'>getDTDSubset</span>	<span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-123"></a><span class='definition'>getDTDSubset</span>-<a name="line-124"></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-125"></a>      <span class='keyword'>where</span>-<a name="line-126"></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>
− doc/hdoc/src/Text-XML-HXT-Validator-XmlRE.html
@@ -1,115 +0,0 @@-<!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='comment'>-- Version : $Id: XmlRE.hs,v 1.1 2004/09/02 19:12:03 hxml Exp $</span>-<a name="line-9"></a>-<a name="line-10"></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-11"></a>    <span class='layout'>(</span> <span class='conid'>RE</span>-<a name="line-12"></a>-<a name="line-13"></a>    <span class='layout'>,</span> <span class='varid'>checkRE</span>-<a name="line-14"></a>    <span class='layout'>,</span> <span class='varid'>matches</span>-<a name="line-15"></a>    <span class='layout'>,</span> <span class='varid'>printRE</span>-<a name="line-16"></a>-<a name="line-17"></a>    <span class='layout'>,</span> <span class='varid'>re_unit</span>-<a name="line-18"></a>    <span class='layout'>,</span> <span class='varid'>re_zero</span>-<a name="line-19"></a>    <span class='layout'>,</span> <span class='varid'>re_sym</span>-<a name="line-20"></a>    <span class='layout'>,</span> <span class='varid'>re_rep</span>-<a name="line-21"></a>    <span class='layout'>,</span> <span class='varid'>re_plus</span>-<a name="line-22"></a>    <span class='layout'>,</span> <span class='varid'>re_opt</span>-<a name="line-23"></a>    <span class='layout'>,</span> <span class='varid'>re_seq</span>-<a name="line-24"></a>    <span class='layout'>,</span> <span class='varid'>re_alt</span>-<a name="line-25"></a>    <span class='layout'>,</span> <span class='varid'>re_dot</span>-<a name="line-26"></a>    <span class='layout'>)</span>-<a name="line-27"></a><span class='keyword'>where</span>-<a name="line-28"></a>-<a name="line-29"></a><span class='comment'>-- import Debug.Trace(trace)</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'>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-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>-<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'>DOM</span><span class='varop'>.</span><span class='conid'>EditFilters</span>-<a name="line-36"></a>    <span class='layout'>(</span> <span class='varid'>removeComment</span>-<a name="line-37"></a>    <span class='layout'>,</span> <span class='varid'>removeWhiteSpace</span>-<a name="line-38"></a>    <span class='layout'>)</span>-<a name="line-39"></a>-<a name="line-40"></a><span class='comment'>-- |</span>-<a name="line-41"></a><span class='comment'>-- Derives a regular expression with respect to a list of elements.</span>-<a name="line-42"></a><span class='comment'>--</span>-<a name="line-43"></a><span class='comment'>--    * 1.parameter re :  regular expression</span>-<a name="line-44"></a><span class='comment'>--</span>-<a name="line-45"></a><span class='comment'>--    - 2.parameter list :  list of elements to which the regular expression is applied</span>-<a name="line-46"></a><span class='comment'>--</span>-<a name="line-47"></a><span class='comment'>--    - returns : the derived regular expression</span>-<a name="line-48"></a>-<a name="line-49"></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-50"></a><span class='definition'>matches</span> <span class='varid'>re</span> <span class='varid'>list</span>-<a name="line-51"></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-52"></a>      <span class='keyword'>where</span>-<a name="line-53"></a>      <span class='varid'>removeUnimportantStuff</span> <span class='keyglyph'>::</span> <span class='conid'>XmlFilter</span>-<a name="line-54"></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-55"></a>      <span class='comment'>-- trace of growth of REs</span>-<a name="line-56"></a>      <span class='comment'>-- delta' re el = delta (trace (("RE : " ++) . (++ "\n" ) . show $ re) re) el</span>-<a name="line-57"></a>-<a name="line-58"></a>-<a name="line-59"></a><span class='comment'>-- |</span>-<a name="line-60"></a><span class='comment'>-- Derives a regular expression with respect to one element.</span>-<a name="line-61"></a><span class='comment'>--</span>-<a name="line-62"></a><span class='comment'>-- L(delta e x) = x \ L(e)</span>-<a name="line-63"></a><span class='comment'>--</span>-<a name="line-64"></a><span class='comment'>--    * 1.parameter re :  regular expression to be derived</span>-<a name="line-65"></a><span class='comment'>--</span>-<a name="line-66"></a><span class='comment'>--    - 2.parameter el :  the element on which the regular expression is applied</span>-<a name="line-67"></a><span class='comment'>--</span>-<a name="line-68"></a><span class='comment'>--    - returns : the derived regular expression</span>-<a name="line-69"></a>-<a name="line-70"></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-71"></a><span class='definition'>delta</span> <span class='varid'>re</span> <span class='varid'>el</span>-<a name="line-72"></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-73"></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-74"></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-75"></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-76"></a>        <span class='conid'>RE_SYM</span> <span class='varid'>sym</span>-<a name="line-77"></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-78"></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-79"></a>				    <span class='keyword'>then</span> <span class='varid'>re_unit</span>-<a name="line-80"></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-81"></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-82"></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-83"></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-84"></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-85"></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-86"></a>        <span class='conid'>RE_SEQ</span> <span class='varid'>e</span> <span class='varid'>f</span>-<a name="line-87"></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-88"></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-89"></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-90"></a>        <span class='conid'>RE_DOT</span>                    <span class='keyglyph'>-&gt;</span> <span class='varid'>re_unit</span>-<a name="line-91"></a>-<a name="line-92"></a>    <span class='keyword'>where</span>-<a name="line-93"></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-94"></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-95"></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-96"></a>-<a name="line-97"></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-98"></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-99"></a>    <span class='varid'>elemName</span> <span class='keyword'>_</span>				<span class='keyglyph'>=</span> <span class='str'>"character data"</span>-<a name="line-100"></a>-<a name="line-101"></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-102"></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-103"></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-104"></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-105"></a>    <span class='varid'>allowed</span> <span class='keyword'>_</span>				<span class='keyglyph'>=</span> <span class='conid'>False</span>-</pre></body>-</html>
+ doc/hdoc/src/Text-XML-HXT-Version.html view
@@ -0,0 +1,14 @@+<!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='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'>Version</span>+<a name="line-2"></a><span class='keyword'>where</span>+<a name="line-3"></a><a name="hxt_version"></a><span class='definition'>hxt_version</span> <span class='keyglyph'>::</span> <span class='conid'>String</span>+<a name="line-4"></a><span class='definition'>hxt_version</span> <span class='keyglyph'>=</span> <span class='str'>"8.1.0"</span>+</pre></body>+</html>
doc/index.html view
@@ -1,12 +1,12 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html>   <head>-    <title>Haskell XML Toolbox 8.0.0</title>+    <title>Haskell XML Toolbox 8.1.0</title>     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">   </head>    <body style="background-color: #ffffff;">-    <h1>Haskell XML Toolbox 8.0.0</h1>+    <h1>Haskell XML Toolbox 8.1.0</h1>      <h3>Contents</h3>     <ul>@@ -173,7 +173,7 @@     <a name="req"></a>     <h3>Requirements</h3>     <ul>-      <li>ghc-6.8 or ghc-6.6 with cabal 1.2, HXT 8.0.0 works with+      <li>ghc-6.8 or ghc-6.6 with cabal 1.2, HXT 8.1.0 works with 	ghc-6.6 and cabal &lt; 1.2</li>       <li><a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HTTP">HTTP package >= 3001.0.4</a></li>       <li><a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/tagsoup">tagsoup package >= 0.6</a></li>@@ -186,8 +186,8 @@     <a name="down"></a>     <h3>Downloads</h3>     <p>-      <a href="hxt-8.0.0.tar.gz">Haskell XML Toolbox 8.0.0</a>,-      released 2008-04-24:+      <a href="hxt-8.1.0.tar.gz">Haskell XML Toolbox 8.1.0</a>,+      released 2008-06-23:     </p>     <ul>       <li>This version works with ghc 6.8 and ghc 6.6 with cabal@@ -229,7 +229,7 @@     <p>       Before installing this version, install the <a href="http://www.haskell.org/">Haskell HTTP module</a>.       For a quick install with Cabal execute the following commands in-      <tt>.../HXT-8.0.0</tt>+      <tt>.../HXT-8.1.0</tt>     </p>     <pre>     make setup@@ -256,6 +256,37 @@     <a name="change"></a>     <h3>Change History</h3>     <ul>+      <li>In <a href="hxt-8.1.0.tar.gz">Version 8.1.0</a>+	<ul>+	  <li>+	    HTTP interface changed to work with libcurl+	    via curl bindings with package <a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/curl">curl</a>.+	    So the HTTP package is not longer needed, also the old+	    and somewhat inefficent interface to curl by starting an external process and+	    communicate via a pipe is not longer needed.+	    When installing the curl bindings, be aware that the+	    libcurl development packages including the C header files+	    must be installed. Otherwise the Setup.hs will complain of+	    missing files.+	  </li>+	  <li>+	    New input option for ignoring none XML/HTML contents+	    when reading documents (useful for crawler like applications).+	  </li>+	  <li>+	    Mime type support for the <tt>file:</tt> protocol. Mime type mapping+	    can be controlled by a config file in the format of+	    <tt>/etc/mime.types</tt> on some linux systems.+	  </li+	  <li>+	    A few more picklers for de-serialization from/to XML, e.g. for maps.+	  </li>+	  <li>+	    A new option for ignoring decoding errors when reading XML documents.+	    This may be useful for crawler like applications.+	  </li>+	</ul>+      </li>       <li>In <a href="hxt-8.0.0.tar.gz">Version 8.0.0</a> 	<ul> 	  <li>@@ -518,7 +549,7 @@ 	    </a> 	  </td> 	</tr>-	<tr><td><i>Last modified: 2008-04-24</i></td><td>&nbsp;</td></tr>+	<tr><td><i>Last modified: 2008-06-23</i></td><td>&nbsp;</td></tr>     </table>    </body>
− examples/arrows/AGentleIntroductionToHXT/AGentleIntroductionToHXT/PicklerExample/Baseball.
@@ -1,313 +0,0 @@-{- |-  Example for usage of pickler functions-  to de-/serialise from/to XML--  Example data is taken from haskell wiki-  http://www.haskell.org/haskellwiki/HXT/Practical/Simple2--}--module Main-where--import           Data.Map (Map, fromList, toList)-import qualified Data.Map as M--import Text.XML.HXT.Arrow---- Example data drawn from:--- http://www.ibiblio.org/xml/books/bible/examples/05/5-1.xml---- --------------------------------------------------------------- the data modell--data Season = Season-    { sYear    :: Int-    , sLeagues :: Leagues-    }-	      deriving (Show, Eq)--type Leagues   = Map String Divisions--type Divisions = Map String [Team]--data Team = Team-    { teamName :: String-    , city     :: String-    , players  :: [Player]-    }-	    deriving (Show, Eq)-	     -data Player = Player-    { firstName :: String-    , lastName  :: String-    , position  :: String-    , atBats    :: Maybe Int-    , hits      :: Maybe Int-    , era       :: Maybe Float-    }-	      deriving (Show, Eq)---- --------------------------------------------------------------- the pickler instance declarations--- in this case just for uniform naming--instance XmlPickler Season where-    xpickle = xpSeason--instance XmlPickler Team where-    xpickle = xpTeam--instance XmlPickler Player where-    xpickle = xpPlayer---- --------------------------------------------------------------- for every data type there is a pickler---- the XML root element--xpSeason	:: PU Season-xpSeason-    = xpElem "SEASON" $-      xpWrap ( uncurry Season-	     , \ s -> (sYear s, sLeagues s)) $-      xpPair (xpAttr "YEAR" xpickle) xpLeagues--xpLeagues	:: PU Leagues-xpLeagues-    = xpWrap ( fromList-	     , toList ) $-      xpList $-      xpElem "LEAGUE" $-      xpPair (xpAttr "NAME" xpText) xpDivisions--xpDivisions	:: PU Divisions-xpDivisions-    = xpWrap ( fromList-	     , toList-	     ) $-      xpList $-      xpElem "DIVISION" $-      xpPair (xpAttr "NAME" xpText) xpickle--xpTeam	:: PU Team-xpTeam-    = xpElem "TEAM" $-      xpWrap ( uncurry3 Team-	     , \ t -> (teamName t, city t, players t)) $-      xpTriple (xpAttr "NAME" xpText) (xpAttr "CITY" xpText) (xpList xpickle)--xpPlayer	:: PU Player-xpPlayer-    = xpElem "PLAYER" $-      xpWrap ( \ ((f,l,p),(a,h,e)) -> Player f l p a h e-	     , \ t -> ((firstName t, lastName t, position t),(atBats t, hits t, era t))) $-      xpPair (xpTriple (xpAttr "GIVEN_NAME" xpText)-	               (xpAttr "SURNAME"    xpText)-	               (xpAttr "POSITION"   xpText))-             (xpTriple (xpOption (xpAttr "AT_BATS" xpickle))-	               (xpOption (xpAttr "HITS"    xpickle))-	               (xpOption (xpAttr "ERA"     xpPrim )))----- ---------------------------------------------------------------- a simple pickle/unpickle application--main	:: IO ()-main-    = do-      runX ( xunpickleDocument xpSeason [ (a_validate,v_0)-					, (a_trace, v_1)-					, (a_remove_whitespace,v_1)-					, (a_preserve_comment, v_0)-					] "simple2.xml"-	     >>>-	     processSeason-	     >>>-	     xpickleDocument xpSeason [ (a_indent, v_1)-				      ] "new-simple2.xml"-	   )-      return ()---- the dummy for processing the unpickled data--processSeason	:: IOSArrow Season Season-processSeason-    = arrIO ( \ x -> do {print x ; return x})---- ---------------------------------------------------------------- the internal data of "simple2.xml"--season1998	:: Season-season1998-    = Season-      { sYear = 1998-      , sLeagues = fromList-	[ ( "American League"-	  , fromList-	    [ ( "Central"-	      , [ Team { teamName = "White Sox"-		       , city = "Chicago"-		       , players = []}-		, Team { teamName = "Royals"-		       , city = "Kansas City"-		       , players = []}-		, Team { teamName = "Tigers"-		       , city = "Detroit"-		       , players = []}-		, Team { teamName = "Indians"-		       , city = "Cleveland"-		       , players = []}-		, Team { teamName = "Twins"-		       , city = "Minnesota"-		       , players = []}-		])-	    , ( "East"-	      , [ Team { teamName = "Orioles"-		       , city = "Baltimore"-		       , players = []}-		, Team { teamName = "Red Sox"-		       , city = "Boston"-		       , players = []}-		, Team { teamName = "Yankees"-		       , city = "New York"-		       , players = []}-		, Team { teamName = "Devil Rays"-		       , city = "Tampa Bay"-		       , players = []}-		, Team { teamName = "Blue Jays"-		       , city = "Toronto"-		       , players = []}-		])-	    , ( "West"-	      , [ Team { teamName = "Angels"-		       , city = "Anaheim"-		       , players = []}-		, Team { teamName = "Athletics"-		       , city = "Oakland"-		       , players = []}-		, Team { teamName = "Mariners"-		       , city = "Seattle"-		       , players = []}-		, Team { teamName = "Rangers"-		       , city = "Texas"-		       , players = []}-		])-	    ])-	, ( "National League"-	  , fromList-	    [ ( "Central"-	      , [ Team { teamName = "Cubs"-		       , city = "Chicago"-		       , players = []}-		, Team { teamName = "Reds"-		       , city = "Cincinnati"-		       , players = []}-		, Team { teamName = "Astros"-		       , city = "Houston"-		       , players = []}-		, Team { teamName = "Brewers"-		       , city = "Milwaukee"-		       , players = []}-		, Team { teamName = "Pirates"-		       , city = "Pittsburgh"-		       , players = []}-		, Team { teamName = "Cardinals"-		       , city = "St. Louis"-		       , players = []}-		])-	    , ( "East"-	      , [ Team { teamName = "Braves"-		       , city = "Atlanta"-		       , players =-			 [ Player { firstName = "Marty"-				  , lastName = "Malloy"-				  , position = "Second Base"-				  , atBats = Just 28-				  , hits = Just 5-				  , era = Nothing}-			 , Player { firstName = "Ozzie"-				  , lastName = "Guillen"-				  , position = "Shortstop"-				  , atBats = Just 264-				  , hits = Just 73-				  , era = Nothing}-			 , Player { firstName = "Danny"-				  , lastName = "Bautista"-				  , position = "Outfield"-				  , atBats = Just 144-				  , hits = Just 36-				  , era = Nothing}-			 , Player { firstName = "Gerald"-				  , lastName = "Williams"-				  , position = "Outfield"-				  , atBats = Just 266-				  , hits = Just 81-				  , era = Nothing}-			 , Player { firstName = "Tom"-				  , lastName = "Glavine"-				  , position = "Starting Pitcher"-				  , atBats = Nothing-				  , hits = Nothing-				  , era = Just 2.47}-			 , Player { firstName = "Javier"-				  , lastName = "Lopez"-				  , position = "Catcher"-				  , atBats = Just 489-				  , hits = Just 139-				  , era = Nothing}-			 , Player { firstName = "Ryan"-				  , lastName = "Klesko"-				  , position = "Outfield"-				  , atBats = Just 427-				  , hits = Just 117-				  , era = Nothing}-			 , Player { firstName = "Andres"-				  , lastName = "Galarraga"-				  , position = "First Base"-				  , atBats = Just 555-				  , hits = Just 169-				  , era = Nothing}-			 , Player { firstName = "Wes"-				  , lastName = "Helms"-				  , position = "Third Base"-				  , atBats = Just 13-				  , hits = Just 4-				  , era = Nothing}-			 ]}-		, Team { teamName = "Marlins"-		       , city = "Florida"-		       , players = []}-		, Team { teamName = "Expos"-		       , city = "Montreal"-		       , players = []}-		, Team { teamName = "Mets"-		       , city = "New York"-		       , players = []}-		, Team { teamName = "Phillies"-		       , city = "Philadelphia"-		       , players = []}-		])-	    , ( "West"-	      , [ Team { teamName = "Diamondbacks"-		       , city = "Arizona"-		       , players = []}-		, Team { teamName = "Rockies"-		       , city = "Colorado"-		       , players = []}-		, Team { teamName = "Dodgers"-		       , city = "Los Angeles"-		       , players = []}-		, Team { teamName = "Padres"-		       , city = "San Diego"-		       , players = []}-		, Team { teamName = "Giants"-		       , city = "San Francisco"-		       , players = []}-		])-	    ])-	]-      }---- ------------------------------------------------------------
− examples/arrows/AGentleIntroductionToHXT/AGentleIntroductionToHXT/PicklerExample/Football.
@@ -1,313 +0,0 @@-{- |-  Example for usage of pickler functions-  to de-/serialise from/to XML--  Example data is taken from haskell wiki-  http://www.haskell.org/haskellwiki/HXT/Practical/Simple2--}--module Main-where--import           Data.Map (Map, fromList, toList)-import qualified Data.Map as M--import Text.XML.HXT.Arrow---- Example data drawn from:--- http://www.ibiblio.org/xml/books/bible/examples/05/5-1.xml---- --------------------------------------------------------------- the data modell--data Season = Season-    { sYear    :: Int-    , sLeagues :: Leagues-    }-	      deriving (Show, Eq)--type Leagues   = Map String Divisions--type Divisions = Map String [Team]--data Team = Team-    { teamName :: String-    , city     :: String-    , players  :: [Player]-    }-	    deriving (Show, Eq)-	     -data Player = Player-    { firstName :: String-    , lastName  :: String-    , position  :: String-    , atBats    :: Maybe Int-    , hits      :: Maybe Int-    , era       :: Maybe Float-    }-	      deriving (Show, Eq)---- --------------------------------------------------------------- the pickler instance declarations--- in this case just for uniform naming--instance XmlPickler Season where-    xpickle = xpSeason--instance XmlPickler Team where-    xpickle = xpTeam--instance XmlPickler Player where-    xpickle = xpPlayer---- --------------------------------------------------------------- for every data type there is a pickler---- the XML root element--xpSeason	:: PU Season-xpSeason-    = xpElem "SEASON" $-      xpWrap ( uncurry Season-	     , \ s -> (sYear s, sLeagues s)) $-      xpPair (xpAttr "YEAR" xpickle) xpLeagues--xpLeagues	:: PU Leagues-xpLeagues-    = xpWrap ( fromList-	     , toList ) $-      xpList $-      xpElem "LEAGUE" $-      xpPair (xpAttr "NAME" xpText) xpDivisions--xpDivisions	:: PU Divisions-xpDivisions-    = xpWrap ( fromList-	     , toList-	     ) $-      xpList $-      xpElem "DIVISION" $-      xpPair (xpAttr "NAME" xpText) xpickle--xpTeam	:: PU Team-xpTeam-    = xpElem "TEAM" $-      xpWrap ( uncurry3 Team-	     , \ t -> (teamName t, city t, players t)) $-      xpTriple (xpAttr "NAME" xpText) (xpAttr "CITY" xpText) (xpList xpickle)--xpPlayer	:: PU Player-xpPlayer-    = xpElem "PLAYER" $-      xpWrap ( \ ((f,l,p),(a,h,e)) -> Player f l p a h e-	     , \ t -> ((firstName t, lastName t, position t),(atBats t, hits t, era t))) $-      xpPair (xpTriple (xpAttr "GIVEN_NAME" xpText)-	               (xpAttr "SURNAME"    xpText)-	               (xpAttr "POSITION"   xpText))-             (xpTriple (xpOption (xpAttr "AT_BATS" xpickle))-	               (xpOption (xpAttr "HITS"    xpickle))-	               (xpOption (xpAttr "ERA"     xpPrim )))----- ---------------------------------------------------------------- a simple pickle/unpickle application--main	:: IO ()-main-    = do-      runX ( xunpickleDocument xpSeason [ (a_validate,v_0)-					, (a_trace, v_1)-					, (a_remove_whitespace,v_1)-					, (a_preserve_comment, v_0)-					] "simple2.xml"-	     >>>-	     processSeason-	     >>>-	     xpickleDocument xpSeason [ (a_indent, v_1)-				      ] "new-simple2.xml"-	   )-      return ()---- the dummy for processing the unpickled data--processSeason	:: IOSArrow Season Season-processSeason-    = arrIO ( \ x -> do {print x ; return x})---- ---------------------------------------------------------------- the internal data of "simple2.xml"--season1998	:: Season-season1998-    = Season-      { sYear = 1998-      , sLeagues = fromList-	[ ( "American League"-	  , fromList-	    [ ( "Central"-	      , [ Team { teamName = "White Sox"-		       , city = "Chicago"-		       , players = []}-		, Team { teamName = "Royals"-		       , city = "Kansas City"-		       , players = []}-		, Team { teamName = "Tigers"-		       , city = "Detroit"-		       , players = []}-		, Team { teamName = "Indians"-		       , city = "Cleveland"-		       , players = []}-		, Team { teamName = "Twins"-		       , city = "Minnesota"-		       , players = []}-		])-	    , ( "East"-	      , [ Team { teamName = "Orioles"-		       , city = "Baltimore"-		       , players = []}-		, Team { teamName = "Red Sox"-		       , city = "Boston"-		       , players = []}-		, Team { teamName = "Yankees"-		       , city = "New York"-		       , players = []}-		, Team { teamName = "Devil Rays"-		       , city = "Tampa Bay"-		       , players = []}-		, Team { teamName = "Blue Jays"-		       , city = "Toronto"-		       , players = []}-		])-	    , ( "West"-	      , [ Team { teamName = "Angels"-		       , city = "Anaheim"-		       , players = []}-		, Team { teamName = "Athletics"-		       , city = "Oakland"-		       , players = []}-		, Team { teamName = "Mariners"-		       , city = "Seattle"-		       , players = []}-		, Team { teamName = "Rangers"-		       , city = "Texas"-		       , players = []}-		])-	    ])-	, ( "National League"-	  , fromList-	    [ ( "Central"-	      , [ Team { teamName = "Cubs"-		       , city = "Chicago"-		       , players = []}-		, Team { teamName = "Reds"-		       , city = "Cincinnati"-		       , players = []}-		, Team { teamName = "Astros"-		       , city = "Houston"-		       , players = []}-		, Team { teamName = "Brewers"-		       , city = "Milwaukee"-		       , players = []}-		, Team { teamName = "Pirates"-		       , city = "Pittsburgh"-		       , players = []}-		, Team { teamName = "Cardinals"-		       , city = "St. Louis"-		       , players = []}-		])-	    , ( "East"-	      , [ Team { teamName = "Braves"-		       , city = "Atlanta"-		       , players =-			 [ Player { firstName = "Marty"-				  , lastName = "Malloy"-				  , position = "Second Base"-				  , atBats = Just 28-				  , hits = Just 5-				  , era = Nothing}-			 , Player { firstName = "Ozzie"-				  , lastName = "Guillen"-				  , position = "Shortstop"-				  , atBats = Just 264-				  , hits = Just 73-				  , era = Nothing}-			 , Player { firstName = "Danny"-				  , lastName = "Bautista"-				  , position = "Outfield"-				  , atBats = Just 144-				  , hits = Just 36-				  , era = Nothing}-			 , Player { firstName = "Gerald"-				  , lastName = "Williams"-				  , position = "Outfield"-				  , atBats = Just 266-				  , hits = Just 81-				  , era = Nothing}-			 , Player { firstName = "Tom"-				  , lastName = "Glavine"-				  , position = "Starting Pitcher"-				  , atBats = Nothing-				  , hits = Nothing-				  , era = Just 2.47}-			 , Player { firstName = "Javier"-				  , lastName = "Lopez"-				  , position = "Catcher"-				  , atBats = Just 489-				  , hits = Just 139-				  , era = Nothing}-			 , Player { firstName = "Ryan"-				  , lastName = "Klesko"-				  , position = "Outfield"-				  , atBats = Just 427-				  , hits = Just 117-				  , era = Nothing}-			 , Player { firstName = "Andres"-				  , lastName = "Galarraga"-				  , position = "First Base"-				  , atBats = Just 555-				  , hits = Just 169-				  , era = Nothing}-			 , Player { firstName = "Wes"-				  , lastName = "Helms"-				  , position = "Third Base"-				  , atBats = Just 13-				  , hits = Just 4-				  , era = Nothing}-			 ]}-		, Team { teamName = "Marlins"-		       , city = "Florida"-		       , players = []}-		, Team { teamName = "Expos"-		       , city = "Montreal"-		       , players = []}-		, Team { teamName = "Mets"-		       , city = "New York"-		       , players = []}-		, Team { teamName = "Phillies"-		       , city = "Philadelphia"-		       , players = []}-		])-	    , ( "West"-	      , [ Team { teamName = "Diamondbacks"-		       , city = "Arizona"-		       , players = []}-		, Team { teamName = "Rockies"-		       , city = "Colorado"-		       , players = []}-		, Team { teamName = "Dodgers"-		       , city = "Los Angeles"-		       , players = []}-		, Team { teamName = "Padres"-		       , city = "San Diego"-		       , players = []}-		, Team { teamName = "Giants"-		       , city = "San Francisco"-		       , players = []}-		])-	    ])-	]-      }---- ------------------------------------------------------------
− examples/arrows/AGentleIntroductionToHXT/AGentleIntroductionToHXT/PicklerExample/Makefile
@@ -1,41 +0,0 @@-# $Id: Makefile,v 1.2 2006/11/17 17:16:24 hxml Exp $-#-# hello world application of Haskell XML Toolbox--HXT_HOME	= ../../../..-PKGFLAGS	= -GHCFLAGS	= -W -O2-GHC		= ghc $(GHCFLAGS) $(PKGFLAGS)--DIST		= $(HXT_HOME)/dist/examples/arrows/AGentleIntroductionToHXT/-DIST_DIR	= $(DIST)/AGentleIntroductionToHXT/PicklerExample/--src		= Baseball.hs-prog		= ./Baseball--all		:-		$(MAKE) $(prog)--force		:-		$(MAKE) distclean all--test		: $(prog)-		$(prog)--dist		:-		[ -d $(DIST_DIR) ] || mkdir -p $(DIST_DIR)-		cp $(src) simple2.xm new-simple2.xm Makefile $(DIST_DIR)--clean		:-		rm -f *.o *.hi--distclean	:-		$(MAKE) clean-		rm -f $(prog)--.PHONY		: all test dist clean distclean force--$(prog)		: $(src)-		$(GHC) --make -o $@ $<--
examples/arrows/AGentleIntroductionToHXT/Makefile view
@@ -2,6 +2,8 @@ # # hello world application of Haskell XML Toolbox +EXAMPLES	= PicklerExample+ HXT_HOME	= ../../.. PKGFLAGS	=  GHCFLAGS	= -W -O2@@ -29,22 +31,24 @@ 		toAbsRefs \ 		toAbsRefs1 -all		: $(prog)+all		:+		$(MAKE) $(prog)+		$(foreach i,$(EXAMPLES),$(MAKE) -C $i PKGFLAGS="$(PKGFLAGS)" $@ ;)  force		: 		$(MAKE) distclean all  test		: $(prog)-		for op in $(tests) ; \-		do \-			$(prog) $$op "http://www.haskell.org/" "-" ; \-		done+		$(foreach op,$(tests),$(prog) $(op) "http://www.haskell.org/" "-" ;)+		$(foreach i,$(EXAMPLES),$(MAKE) -C $i $@ ;)  dist		: 		[ -d $(DIST_DIR) ] || mkdir -p $(DIST_DIR)+		$(foreach i,$(EXAMPLES),$(MAKE) -C $i dist DIST=../$(DIST_DIR) ;) 		cp $(src) Makefile $(DIST_DIR)  clean		:+		$(foreach i,$(EXAMPLES),$(MAKE) -C $i $@ ;) 		rm -f *.o *.hi  distclean	:
+ examples/arrows/AGentleIntroductionToHXT/PicklerExample/Baseball.hs view
@@ -0,0 +1,313 @@+{- |+  Example for usage of pickler functions+  to de-/serialise from/to XML++  Example data is taken from haskell wiki+  http://www.haskell.org/haskellwiki/HXT/Practical/Simple2+-}++module Main+where++import           Data.Map (Map, fromList, toList)+import qualified Data.Map as M++import Text.XML.HXT.Arrow++-- Example data drawn from:+-- http://www.ibiblio.org/xml/books/bible/examples/05/5-1.xml++-- ------------------------------------------------------------+-- the data modell++data Season = Season+    { sYear    :: Int+    , sLeagues :: Leagues+    }+	      deriving (Show, Eq)++type Leagues   = Map String Divisions++type Divisions = Map String [Team]++data Team = Team+    { teamName :: String+    , city     :: String+    , players  :: [Player]+    }+	    deriving (Show, Eq)+	     +data Player = Player+    { firstName :: String+    , lastName  :: String+    , position  :: String+    , atBats    :: Maybe Int+    , hits      :: Maybe Int+    , era       :: Maybe Float+    }+	      deriving (Show, Eq)++-- ------------------------------------------------------------+-- the pickler instance declarations+-- in this case just for uniform naming++instance XmlPickler Season where+    xpickle = xpSeason++instance XmlPickler Team where+    xpickle = xpTeam++instance XmlPickler Player where+    xpickle = xpPlayer++-- ------------------------------------------------------------+-- for every data type there is a pickler++-- the XML root element++xpSeason	:: PU Season+xpSeason+    = xpElem "SEASON" $+      xpWrap ( uncurry Season+	     , \ s -> (sYear s, sLeagues s)) $+      xpPair (xpAttr "YEAR" xpickle) xpLeagues++xpLeagues	:: PU Leagues+xpLeagues+    = xpWrap ( fromList+	     , toList ) $+      xpList $+      xpElem "LEAGUE" $+      xpPair (xpAttr "NAME" xpText) xpDivisions++xpDivisions	:: PU Divisions+xpDivisions+    = xpWrap ( fromList+	     , toList+	     ) $+      xpList $+      xpElem "DIVISION" $+      xpPair (xpAttr "NAME" xpText) xpickle++xpTeam	:: PU Team+xpTeam+    = xpElem "TEAM" $+      xpWrap ( uncurry3 Team+	     , \ t -> (teamName t, city t, players t)) $+      xpTriple (xpAttr "NAME" xpText) (xpAttr "CITY" xpText) (xpList xpickle)++xpPlayer	:: PU Player+xpPlayer+    = xpElem "PLAYER" $+      xpWrap ( \ ((f,l,p),(a,h,e)) -> Player f l p a h e+	     , \ t -> ((firstName t, lastName t, position t),(atBats t, hits t, era t))) $+      xpPair (xpTriple (xpAttr "GIVEN_NAME" xpText)+	               (xpAttr "SURNAME"    xpText)+	               (xpAttr "POSITION"   xpText))+             (xpTriple (xpOption (xpAttr "AT_BATS" xpickle))+	               (xpOption (xpAttr "HITS"    xpickle))+	               (xpOption (xpAttr "ERA"     xpPrim )))+++-- ------------------------------------------------------------++-- a simple pickle/unpickle application++main	:: IO ()+main+    = do+      runX ( xunpickleDocument xpSeason [ (a_validate,v_0)+					, (a_trace, v_1)+					, (a_remove_whitespace,v_1)+					, (a_preserve_comment, v_0)+					] "simple2.xml"+	     >>>+	     processSeason+	     >>>+	     xpickleDocument xpSeason [ (a_indent, v_1)+				      ] "new-simple2.xml"+	   )+      return ()++-- the dummy for processing the unpickled data++processSeason	:: IOSArrow Season Season+processSeason+    = arrIO ( \ x -> do {print x ; return x})++-- ------------------------------------------------------------++-- the internal data of "simple2.xml"++season1998	:: Season+season1998+    = Season+      { sYear = 1998+      , sLeagues = fromList+	[ ( "American League"+	  , fromList+	    [ ( "Central"+	      , [ Team { teamName = "White Sox"+		       , city = "Chicago"+		       , players = []}+		, Team { teamName = "Royals"+		       , city = "Kansas City"+		       , players = []}+		, Team { teamName = "Tigers"+		       , city = "Detroit"+		       , players = []}+		, Team { teamName = "Indians"+		       , city = "Cleveland"+		       , players = []}+		, Team { teamName = "Twins"+		       , city = "Minnesota"+		       , players = []}+		])+	    , ( "East"+	      , [ Team { teamName = "Orioles"+		       , city = "Baltimore"+		       , players = []}+		, Team { teamName = "Red Sox"+		       , city = "Boston"+		       , players = []}+		, Team { teamName = "Yankees"+		       , city = "New York"+		       , players = []}+		, Team { teamName = "Devil Rays"+		       , city = "Tampa Bay"+		       , players = []}+		, Team { teamName = "Blue Jays"+		       , city = "Toronto"+		       , players = []}+		])+	    , ( "West"+	      , [ Team { teamName = "Angels"+		       , city = "Anaheim"+		       , players = []}+		, Team { teamName = "Athletics"+		       , city = "Oakland"+		       , players = []}+		, Team { teamName = "Mariners"+		       , city = "Seattle"+		       , players = []}+		, Team { teamName = "Rangers"+		       , city = "Texas"+		       , players = []}+		])+	    ])+	, ( "National League"+	  , fromList+	    [ ( "Central"+	      , [ Team { teamName = "Cubs"+		       , city = "Chicago"+		       , players = []}+		, Team { teamName = "Reds"+		       , city = "Cincinnati"+		       , players = []}+		, Team { teamName = "Astros"+		       , city = "Houston"+		       , players = []}+		, Team { teamName = "Brewers"+		       , city = "Milwaukee"+		       , players = []}+		, Team { teamName = "Pirates"+		       , city = "Pittsburgh"+		       , players = []}+		, Team { teamName = "Cardinals"+		       , city = "St. Louis"+		       , players = []}+		])+	    , ( "East"+	      , [ Team { teamName = "Braves"+		       , city = "Atlanta"+		       , players =+			 [ Player { firstName = "Marty"+				  , lastName = "Malloy"+				  , position = "Second Base"+				  , atBats = Just 28+				  , hits = Just 5+				  , era = Nothing}+			 , Player { firstName = "Ozzie"+				  , lastName = "Guillen"+				  , position = "Shortstop"+				  , atBats = Just 264+				  , hits = Just 73+				  , era = Nothing}+			 , Player { firstName = "Danny"+				  , lastName = "Bautista"+				  , position = "Outfield"+				  , atBats = Just 144+				  , hits = Just 36+				  , era = Nothing}+			 , Player { firstName = "Gerald"+				  , lastName = "Williams"+				  , position = "Outfield"+				  , atBats = Just 266+				  , hits = Just 81+				  , era = Nothing}+			 , Player { firstName = "Tom"+				  , lastName = "Glavine"+				  , position = "Starting Pitcher"+				  , atBats = Nothing+				  , hits = Nothing+				  , era = Just 2.47}+			 , Player { firstName = "Javier"+				  , lastName = "Lopez"+				  , position = "Catcher"+				  , atBats = Just 489+				  , hits = Just 139+				  , era = Nothing}+			 , Player { firstName = "Ryan"+				  , lastName = "Klesko"+				  , position = "Outfield"+				  , atBats = Just 427+				  , hits = Just 117+				  , era = Nothing}+			 , Player { firstName = "Andres"+				  , lastName = "Galarraga"+				  , position = "First Base"+				  , atBats = Just 555+				  , hits = Just 169+				  , era = Nothing}+			 , Player { firstName = "Wes"+				  , lastName = "Helms"+				  , position = "Third Base"+				  , atBats = Just 13+				  , hits = Just 4+				  , era = Nothing}+			 ]}+		, Team { teamName = "Marlins"+		       , city = "Florida"+		       , players = []}+		, Team { teamName = "Expos"+		       , city = "Montreal"+		       , players = []}+		, Team { teamName = "Mets"+		       , city = "New York"+		       , players = []}+		, Team { teamName = "Phillies"+		       , city = "Philadelphia"+		       , players = []}+		])+	    , ( "West"+	      , [ Team { teamName = "Diamondbacks"+		       , city = "Arizona"+		       , players = []}+		, Team { teamName = "Rockies"+		       , city = "Colorado"+		       , players = []}+		, Team { teamName = "Dodgers"+		       , city = "Los Angeles"+		       , players = []}+		, Team { teamName = "Padres"+		       , city = "San Diego"+		       , players = []}+		, Team { teamName = "Giants"+		       , city = "San Francisco"+		       , players = []}+		])+	    ])+	]+      }++-- ------------------------------------------------------------
+ examples/arrows/AGentleIntroductionToHXT/PicklerExample/Makefile view
@@ -0,0 +1,41 @@+# $Id: Makefile,v 1.2 2006/11/17 17:16:24 hxml Exp $+#+# hello world application of Haskell XML Toolbox++HXT_HOME	= ../../../..+PKGFLAGS	= +GHCFLAGS	= -W -O2+GHC		= ghc $(GHCFLAGS) $(PKGFLAGS)++DIST		= $(HXT_HOME)/dist/examples/arrows/AGentleIntroductionToHXT+DIST_DIR	= $(DIST)/PicklerExample++src		= Baseball.hs+prog		= ./Baseball++all		:+		$(MAKE) $(prog)++force		:+		$(MAKE) distclean all++test		: $(prog)+		$(prog)++dist		:+		[ -d $(DIST_DIR) ] || mkdir -p $(DIST_DIR)+		cp $(src) simple2.xml new-simple2.xml Makefile $(DIST_DIR)++clean		:+		rm -f *.o *.hi++distclean	:+		$(MAKE) clean+		rm -f $(prog)++.PHONY		: all test dist clean distclean force++$(prog)		: $(src)+		$(GHC) --make -o $@ $<++
+ examples/arrows/AGentleIntroductionToHXT/PicklerExample/new-simple2.xml view
@@ -0,0 +1,60 @@+<?xml version="1.0" encoding="UTF-8"?>+<SEASON YEAR="1998">+  <LEAGUE NAME="American League">+    <DIVISION NAME="Central">+      <TEAM NAME="White Sox" CITY="Chicago"/>+      <TEAM NAME="Royals" CITY="Kansas City"/>+      <TEAM NAME="Tigers" CITY="Detroit"/>+      <TEAM NAME="Indians" CITY="Cleveland"/>+      <TEAM NAME="Twins" CITY="Minnesota"/>+    </DIVISION>+    <DIVISION NAME="East">+      <TEAM NAME="Orioles" CITY="Baltimore"/>+      <TEAM NAME="Red Sox" CITY="Boston"/>+      <TEAM NAME="Yankees" CITY="New York"/>+      <TEAM NAME="Devil Rays" CITY="Tampa Bay"/>+      <TEAM NAME="Blue Jays" CITY="Toronto"/>+    </DIVISION>+    <DIVISION NAME="West">+      <TEAM NAME="Angels" CITY="Anaheim"/>+      <TEAM NAME="Athletics" CITY="Oakland"/>+      <TEAM NAME="Mariners" CITY="Seattle"/>+      <TEAM NAME="Rangers" CITY="Texas"/>+    </DIVISION>+  </LEAGUE>+  <LEAGUE NAME="National League">+    <DIVISION NAME="Central">+      <TEAM NAME="Cubs" CITY="Chicago"/>+      <TEAM NAME="Reds" CITY="Cincinnati"/>+      <TEAM NAME="Astros" CITY="Houston"/>+      <TEAM NAME="Brewers" CITY="Milwaukee"/>+      <TEAM NAME="Pirates" CITY="Pittsburgh"/>+      <TEAM NAME="Cardinals" CITY="St. Louis"/>+    </DIVISION>+    <DIVISION NAME="East">+      <TEAM NAME="Braves" CITY="Atlanta">+        <PLAYER GIVEN_NAME="Marty" SURNAME="Malloy" POSITION="Second Base" AT_BATS="28" HITS="5"/>+        <PLAYER GIVEN_NAME="Ozzie" SURNAME="Guillen" POSITION="Shortstop" AT_BATS="264" HITS="73"/>+        <PLAYER GIVEN_NAME="Danny" SURNAME="Bautista" POSITION="Outfield" AT_BATS="144" HITS="36"/>+        <PLAYER GIVEN_NAME="Gerald" SURNAME="Williams" POSITION="Outfield" AT_BATS="266" HITS="81"/>+        <PLAYER GIVEN_NAME="Tom" SURNAME="Glavine" POSITION="Starting Pitcher" ERA="2.47"/>+        <PLAYER GIVEN_NAME="Javier" SURNAME="Lopez" POSITION="Catcher" AT_BATS="489" HITS="139"/>+        <PLAYER GIVEN_NAME="Ryan" SURNAME="Klesko" POSITION="Outfield" AT_BATS="427" HITS="117"/>+        <PLAYER GIVEN_NAME="Andres" SURNAME="Galarraga" POSITION="First Base" AT_BATS="555" HITS="169"/>+        <PLAYER GIVEN_NAME="Wes" SURNAME="Helms" POSITION="Third Base" AT_BATS="13" HITS="4"/>+      </TEAM>+      <TEAM NAME="Marlins" CITY="Florida"/>+      <TEAM NAME="Expos" CITY="Montreal"/>+      <TEAM NAME="Mets" CITY="New York"/>+      <TEAM NAME="Phillies" CITY="Philadelphia"/>+    </DIVISION>+    <DIVISION NAME="West">+      <TEAM NAME="Diamondbacks" CITY="Arizona"/>+      <TEAM NAME="Rockies" CITY="Colorado"/>+      <TEAM NAME="Dodgers" CITY="Los Angeles"/>+      <TEAM NAME="Padres" CITY="San Diego"/>+      <TEAM NAME="Giants" CITY="San Francisco"/>+    </DIVISION>+  </LEAGUE>+</SEASON>+
+ examples/arrows/AGentleIntroductionToHXT/PicklerExample/simple2.xml view
@@ -0,0 +1,103 @@+<SEASON YEAR="1998">+<LEAGUE NAME="National League">+  <DIVISION NAME="East">++  <TEAM CITY="Atlanta" NAME="Braves">+<PLAYER GIVEN_NAME="Marty" SURNAME="Malloy" POSITION="Second Base" GAMES="11" GAMES_STARTED="8" AT_BATS="28" RUNS="3" HITS="5" DOUBLES="1" TRIPLES="0" HOME_RUNS="1" RBI="1" STEALS="0" CAUGHT_STEALING="0" SACRIFICE_HITS="0" SACRIFICE_FLIES="0" ERRORS="0" WALKS="2" STRUCK_OUT="2" HIT_BY_PITCH="0">+        </PLAYER>+<PLAYER GIVEN_NAME="Ozzie" SURNAME="Guillen" POSITION="Shortstop" GAMES="83" GAMES_STARTED="59" AT_BATS="264" RUNS="35" HITS="73" DOUBLES="15" TRIPLES="1" HOME_RUNS="1" RBI="22" STEALS="1" CAUGHT_STEALING="4" SACRIFICE_HITS="4" SACRIFICE_FLIES="2" ERRORS="6" WALKS="24" STRUCK_OUT="25" HIT_BY_PITCH="1">+        </PLAYER>+<PLAYER GIVEN_NAME="Danny" SURNAME="Bautista" POSITION="Outfield" GAMES="82" GAMES_STARTED="27" AT_BATS="144" RUNS="17" HITS="36" DOUBLES="11" TRIPLES="0" HOME_RUNS="3" RBI="17" STEALS="1" CAUGHT_STEALING="0" SACRIFICE_HITS="3" SACRIFICE_FLIES="2" ERRORS="2" WALKS="7" STRUCK_OUT="21" HIT_BY_PITCH="0">+        </PLAYER>+<PLAYER GIVEN_NAME="Gerald" SURNAME="Williams" POSITION="Outfield" GAMES="129" GAMES_STARTED="51" AT_BATS="266" RUNS="46" HITS="81" DOUBLES="18" TRIPLES="3" HOME_RUNS="10" RBI="44" STEALS="11" CAUGHT_STEALING="5" SACRIFICE_HITS="2" SACRIFICE_FLIES="1" ERRORS="5" WALKS="17" STRUCK_OUT="48" HIT_BY_PITCH="3">+        </PLAYER>+<PLAYER GIVEN_NAME="Tom" SURNAME="Glavine" POSITION="Starting Pitcher" GAMES="33" GAMES_STARTED="33" WINS="20" LOSSES="6" SAVES="0" COMPLETE_GAMES="4" SHUT_OUTS="3" ERA="2.47" INNINGS="229.1" HOME_RUNS_AGAINST="13" RUNS_AGAINST="67" EARNED_RUNS="63" HIT_BATTER="2" WILD_PITCHES="3" BALK="0" WALKED_BATTER="74" STRUCK_OUT_BATTER="157">+        </PLAYER>+<PLAYER GIVEN_NAME="Javier" SURNAME="Lopez" POSITION="Catcher" GAMES="133" GAMES_STARTED="124" AT_BATS="489" RUNS="73" HITS="139" DOUBLES="21" TRIPLES="1" HOME_RUNS="34" RBI="106" STEALS="5" CAUGHT_STEALING="3" SACRIFICE_HITS="1" SACRIFICE_FLIES="8" ERRORS="5" WALKS="30" STRUCK_OUT="85" HIT_BY_PITCH="6">+        </PLAYER>+<PLAYER GIVEN_NAME="Ryan" SURNAME="Klesko" POSITION="Outfield" GAMES="129" GAMES_STARTED="124" AT_BATS="427" RUNS="69" HITS="117" DOUBLES="29" TRIPLES="1" HOME_RUNS="18" RBI="70" STEALS="5" CAUGHT_STEALING="3" SACRIFICE_HITS="0" SACRIFICE_FLIES="4" ERRORS="2" WALKS="56" STRUCK_OUT="66" HIT_BY_PITCH="3">+        </PLAYER>+<PLAYER GIVEN_NAME="Andres" SURNAME="Galarraga" POSITION="First Base" GAMES="153" GAMES_STARTED="151" AT_BATS="555" RUNS="103" HITS="169" DOUBLES="27" TRIPLES="1" HOME_RUNS="44" RBI="121" STEALS="7" CAUGHT_STEALING="6" SACRIFICE_HITS="0" SACRIFICE_FLIES="5" ERRORS="11" WALKS="63" STRUCK_OUT="146" HIT_BY_PITCH="25">+        </PLAYER>+<PLAYER GIVEN_NAME="Wes" SURNAME="Helms" POSITION="Third Base" GAMES="7" GAMES_STARTED="2" AT_BATS="13" RUNS="2" HITS="4" DOUBLES="1" TRIPLES="0" HOME_RUNS="1" RBI="2" STEALS="0" CAUGHT_STEALING="0" SACRIFICE_HITS="0" SACRIFICE_FLIES="0" ERRORS="1" WALKS="0" STRUCK_OUT="4" HIT_BY_PITCH="0">+        </PLAYER>+</TEAM>+<TEAM CITY="Florida" NAME="Marlins">+      </TEAM>+<TEAM CITY="Montreal" NAME="Expos">+      </TEAM>+<TEAM CITY="New York" NAME="Mets">+      </TEAM>+<TEAM CITY="Philadelphia" NAME="Phillies">+      </TEAM>+</DIVISION>++  <DIVISION NAME="Central">+<TEAM CITY="Chicago" NAME="Cubs">+      </TEAM>+<TEAM CITY="Cincinnati" NAME="Reds">+      </TEAM>+<TEAM CITY="Houston" NAME="Astros">+      </TEAM>+<TEAM CITY="Milwaukee" NAME="Brewers">+      </TEAM>+<TEAM CITY="Pittsburgh" NAME="Pirates">+      </TEAM>+<TEAM CITY="St. Louis" NAME="Cardinals">+      </TEAM>+</DIVISION>++  <DIVISION NAME="West">+<TEAM CITY="Arizona" NAME="Diamondbacks">+      </TEAM>+<TEAM CITY="Colorado" NAME="Rockies">+      </TEAM>+<TEAM CITY="Los Angeles" NAME="Dodgers">+      </TEAM>+<TEAM CITY="San Diego" NAME="Padres">+      </TEAM>+<TEAM CITY="San Francisco" NAME="Giants">+      </TEAM>+</DIVISION>+</LEAGUE>++  <LEAGUE NAME="American League">++  <DIVISION NAME="East">+<TEAM CITY="Baltimore" NAME="Orioles">+      </TEAM>+<TEAM CITY="Boston" NAME="Red Sox">+      </TEAM>+<TEAM CITY="New York" NAME="Yankees">+      </TEAM>+<TEAM CITY="Tampa Bay" NAME="Devil Rays">+      </TEAM>+<TEAM CITY="Toronto" NAME="Blue Jays">+      </TEAM>+</DIVISION>++  <DIVISION NAME="Central">+<TEAM CITY="Chicago" NAME="White Sox">+      </TEAM>+<TEAM CITY="Kansas City" NAME="Royals">+      </TEAM>+<TEAM CITY="Detroit" NAME="Tigers">+      </TEAM>+<TEAM CITY="Cleveland" NAME="Indians">+      </TEAM>+<TEAM CITY="Minnesota" NAME="Twins">+      </TEAM>+</DIVISION>++  <DIVISION NAME="West">+<TEAM CITY="Anaheim" NAME="Angels">+      </TEAM>+<TEAM CITY="Oakland" NAME="Athletics">+      </TEAM>+<TEAM CITY="Seattle" NAME="Mariners">+      </TEAM>+<TEAM CITY="Texas" NAME="Rangers">+      </TEAM>+</DIVISION>+</LEAGUE>+</SEASON>
hxt.cabal view
@@ -1,6 +1,6 @@ -- arch-tag: Haskell XML Toolbox main description file name: hxt-version: 8.0.0+version: 8.1.0 license: OtherLicense license-file: LICENCE maintainer: Uwe Schmidt <uwe@fh-wedel.de>@@ -36,7 +36,6 @@   Data.Tree.Class,   Data.Tree.NTree.Filter,   Data.Tree.NTree.TypeDefs,-  System.PipeOpen,   Text.XML.HXT.Arrow,   Text.XML.HXT.Arrow.DTDProcessing,   Text.XML.HXT.Arrow.DocumentInput,@@ -60,6 +59,8 @@   Text.XML.HXT.DOM.FormatXmlTree,   Text.XML.HXT.DOM.Interface,   Text.XML.HXT.DOM.IsoLatinTables,+  Text.XML.HXT.DOM.MimeTypeDefaults,+  Text.XML.HXT.DOM.MimeTypes,   Text.XML.HXT.DOM.NamespacePredicates,   Text.XML.HXT.DOM.QualifiedName,   Text.XML.HXT.DOM.ShowXml,@@ -81,8 +82,7 @@   Text.XML.HXT.DTDValidation.Validation,   Text.XML.HXT.DTDValidation.XmlRE,   Text.XML.HXT.IO.GetFILE,-  Text.XML.HXT.IO.GetHTTPCurl,-  Text.XML.HXT.IO.GetHTTPNative,+  Text.XML.HXT.IO.GetHTTPLibCurl,   Text.XML.HXT.Parser.HtmlParsec,   Text.XML.HXT.Parser.ProtocolHandlerUtil,   Text.XML.HXT.Parser.TagSoup,@@ -113,6 +113,7 @@   Text.XML.HXT.RelaxNG.XmlSchema.DataTypeLibW3C,   Text.XML.HXT.RelaxNG.XmlSchema.Regex,   Text.XML.HXT.RelaxNG.XmlSchema.RegexParser,+  Text.XML.HXT.Version,   Text.XML.HXT.XPath,   Text.XML.HXT.XPath.NavTree,   Text.XML.HXT.XPath.XPathArithmetic,@@ -133,9 +134,9 @@  ghc-options: -Wall  extensions: MultiParamTypeClasses DeriveDataTypeable FunctionalDependencies FlexibleInstances - build-depends: base, haskell98 >= 1, parsec >= 2.1 && < 3, HTTP >= 3001.0.4, HUnit >= 1.2, network >= 2.1, tagsoup >= 0.6+ build-depends: base, haskell98 >= 1, parsec >= 2.1 && < 3, HUnit >= 1.2, network >= 2.1, tagsoup >= 0.6, curl >= 1.3  if flag(splitBase)-   build-depends: base >= 3, containers >= 0.1, directory >= 1, process >= 1+   build-depends: base >= 3, containers >= 0.1, directory >= 1, filepath >= 1  else    build-depends: base < 3 
src/Control/Arrow/ArrowTree.hs view
@@ -42,6 +42,16 @@  class (ArrowPlus a, ArrowIf a) => ArrowTree a where +    -- | construct a leaf++    mkLeaf		:: Tree t => b -> a c (t b)+    mkLeaf		= constA . T.mkLeaf++    -- | construct an inner node++    mkTree		:: Tree t => b -> [t b] -> a c (t b)+    mkTree n		= constA . T.mkTree n+     -- | select the children of the root of a tree      getChildren		:: Tree t => a (t b) (t b)
src/Makefile view
@@ -71,7 +71,6 @@ 	Data/Tree/Class.hs \ 	Data/Tree/NTree/Filter.hs \ 	Data/Tree/NTree/TypeDefs.hs \-	System/PipeOpen.hs \ 	Text/XML/HXT/Arrow/DocumentInput.hs \ 	Text/XML/HXT/Arrow/DocumentOutput.hs \ 	Text/XML/HXT/Arrow/DTDProcessing.hs \@@ -95,6 +94,8 @@ 	Text/XML/HXT/DOM/FormatXmlTree.hs \ 	Text/XML/HXT/DOM/Interface.hs \ 	Text/XML/HXT/DOM/IsoLatinTables.hs \+	Text/XML/HXT/DOM/MimeTypeDefaults.hs \+	Text/XML/HXT/DOM/MimeTypes.hs \ 	Text/XML/HXT/DOM/NamespacePredicates.hs \ 	Text/XML/HXT/DOM/QualifiedName.hs \ 	Text/XML/HXT/DOM/ShowXml.hs \@@ -116,8 +117,7 @@ 	Text/XML/HXT/DTDValidation/Validation.hs \ 	Text/XML/HXT/DTDValidation/XmlRE.hs \ 	Text/XML/HXT/IO/GetFILE.hs \-	Text/XML/HXT/IO/GetHTTPCurl.hs \-	Text/XML/HXT/IO/GetHTTPNative.hs \+	Text/XML/HXT/IO/GetHTTPLibCurl.hs \ 	Text/XML/HXT/Parser/HtmlParsec.hs \ 	Text/XML/HXT/Parser/ProtocolHandlerUtil.hs \ 	Text/XML/HXT/Parser/TagSoup.hs \@@ -148,6 +148,7 @@ 	Text/XML/HXT/RelaxNG/XmlSchema/DataTypeLibW3C.hs \ 	Text/XML/HXT/RelaxNG/XmlSchema/Regex.hs \ 	Text/XML/HXT/RelaxNG/XmlSchema/RegexParser.hs \+	Text/XML/HXT/Version.hs \ 	Text/XML/HXT/XPath.hs \ 	Text/XML/HXT/XPath/NavTree.hs \ 	Text/XML/HXT/XPath/XPathArithmetic.hs \@@ -164,6 +165,17 @@ 	Text/XML/HXT/XSLT/CompiledStylesheet.hs \ 	Text/XML/HXT/XSLT/Names.hs \ 	Text/XML/HXT/XSLT/XsltArrows.hs++# no longer in use	System/PipeOpen.hs+# no longer in use	Text/XML/HXT/IO/GetHTTPNative.hs+# no longer in use	Text/XML/HXT/IO/GetHTTPCurl.hs++Text/XML/HXT/Version.hs	: ../Version.mk Makefile+		( echo "module Text.XML.HXT.Version" \+		; echo "where" \+		; echo "hxt_version :: String" \+		; echo "hxt_version = \"$(VERSION)\"" \+		) > $@  HXT_OBJ		= $(HXT_SRC:.hs=.o) HXT_HI		= $(HXT_SRC:.hs=.hi)
− src/System/PipeOpen.hs
@@ -1,60 +0,0 @@--- --------------------------------------------------------------{- |-   Module     : System.PipeOpen-   Copyright  : Copyright (C) 2005 Uwe Schmidt-   License    : MIT--   Maintainer : Uwe Schmidt (uwe\@fh-wedel.de)-   Stability  : experimental-   Portability: none portable-   Version    : $Id: PipeOpen.hs,v 1.2 2005/09/02 17:09:39 hxml Exp $--pipe open implemented with System.Process functions---}---- --------------------------------------------------------------module System.PipeOpen-    ( popen )-where--import IO-    ( hGetContents-    , hClose-    )--import System.Exit-    ( ExitCode(..)-    )--import System.Process-    ( runInteractiveProcess-    , waitForProcess-    )---- | call an external program with a list of command line arguments--- and return content of stdout, content of stderr and return code--popen	:: String -> [String] -> IO (String, String, Int)-popen prg argl-    = do-      (inpH, outH, errH, pH) <- runInteractiveProcess prg argl Nothing Nothing-      hClose inpH-      res  <- hGetContents outH-      errs <- hGetContents errH--      -- hack: stdout and stderr must be read completely, otherwise waitForProcess blocks-      if (length res  == 0) then return () else return ()-      if (length errs == 0) then return () else return ()--      rc <- waitForProcess pH-      return ( res-	     , errs-	     , case rc of-	       ExitSuccess -> 0-	       ExitFailure i -> i-	     )---- eof ------------------------------------------------------------
src/Text/XML/HXT/Arrow.hs view
@@ -40,6 +40,8 @@     , module Text.XML.HXT.Arrow.Pickle      , module Text.XML.HXT.XSLT.XsltArrows++    , module Text.XML.HXT.Version     ) where @@ -63,5 +65,7 @@        Text.XML.HXT.Arrow.XPathSimple as XPS ()  import Text.XML.HXT.XSLT.XsltArrows++import Text.XML.HXT.Version  -- ------------------------------------------------------------
src/Text/XML/HXT/Arrow/DocumentInput.hs view
@@ -30,6 +30,17 @@ import Control.Arrow.ArrowTree import Control.Arrow.ArrowIO +import Data.Char+    ( toLower+    )+import Data.List+    ( isPrefixOf+    )+import Data.Maybe++import System.FilePath+    ( takeExtension )+ import Text.XML.HXT.DOM.Unicode     ( getDecodingFct     , guessEncoding@@ -37,29 +48,23 @@     )  import qualified Text.XML.HXT.IO.GetFILE	as FILE+import qualified Text.XML.HXT.IO.GetHTTPLibCurl	as LibCURL++{- not longer needed, libcurl is used import qualified Text.XML.HXT.IO.GetHTTPNative	as HTTP import qualified Text.XML.HXT.IO.GetHTTPCurl	as CURL+-}  import Text.XML.HXT.DOM.Interface+ import Text.XML.HXT.Arrow.XmlArrow import Text.XML.HXT.Arrow.XmlIOStateArrow- import Text.XML.HXT.Arrow.ParserInterface     ( parseXmlDocEncodingSpec     , parseXmlEntityEncodingSpec     , removeEncodingSpec     ) -import Data.List-    ( isPrefixOf-    )--import Data.Char-    ( toLower-    )--import Data.Maybe- -- ----------------------------------------------------------  protocolHandlers	:: AssocList String (IOStateArrow s XmlTree XmlTree)@@ -116,9 +121,11 @@ 	       >>> 	       ( arr addError		-- io error occured 		 |||-		 arr addTxtContent		-- content read+		 arr addTxtContent	-- content read 	       ) 	     )+      >>>+      addMimeType  getStdinContents		:: IOStateArrow s XmlTree XmlTree getStdinContents@@ -126,7 +133,7 @@ 	       >>> 	       ( arr addError		-- io error occured 		 |||-		 arr addTxtContent		-- content read+		 arr addTxtContent	-- content read 	       ) 	     ) @@ -136,6 +143,18 @@       >>>       setDocumentStatusFromSystemState "accessing documents" +addMimeType	:: IOStateArrow s XmlTree XmlTree+addMimeType+    = addMime $< ( getAttrValue transferURI+		   >>>+		   ( uriToMime $< getSysParam xio_mimeTypes )+		 )+    where+    addMime mt+	= addAttr transferMimeType mt+    uriToMime mtt+	= arr $ ( \ uri -> extensionToMimeType (drop 1 . takeExtension $ uri) mtt )+ addTxtContent	:: String -> IOStateArrow s XmlTree XmlTree addTxtContent c     = replaceChildren (txt c)@@ -146,21 +165,37 @@  getHttpContents		:: IOStateArrow s XmlTree XmlTree getHttpContents-    = getCont $<<<< ( getAttrValue transferURI-		      &&&-		      getOpt a_proxy-		      &&&-		      getOpt a_use_curl-		      &&&-		      getOpt a_options_curl+    = getCont $<< ( getAttrValue transferURI+		    &&&+		    ( ( getAttrlAsAssoc	-- get all attributes of root node+			&&&+			getAllParamsString	-- get all system params+		      )+		      >>^ uncurry addEntries	-- merge them, attributes overwrite system params 		    )+		  )       where-      getOpt opt-	  = getAttrValue0 opt-	    `orElse`-	    getParamString opt+      getAttrlAsAssoc				-- get the attributes as assoc list+	  = listA ( getAttrl+		    >>> ( getName+			  &&&+			  xshow getChildren+			)+		  ) -      getCont uri proxy curl curlOpt+      getCont uri options+	  = applyA ( ( traceMsg 2 ( "get HTTP via libcurl, uri=" ++ show uri ++ " options=" ++ show options )+		       >>>+		       arrIO0 ( LibCURL.getCont options uri )+		     )+		     >>>+		     ( arr addError+		       |||+		       arr addContent+		     )+		   )+		    +{- old stuff 	  = applyA ( ( if curl == v_1 		       then ( traceMsg 2 ( "get HTTP via " 					   ++ show ( "curl "@@ -180,6 +215,11 @@ 		       arr addContent 		     ) 		   )+	    where+	    proxy   = lookup1 a_proxy        options+	    curl    = lookup1 a_use_curl     options+	    curlOpt = lookup1 a_options_curl options+-}        addContent	:: (AssocList String String, String) -> IOStateArrow s XmlTree XmlTree       addContent (al, c)@@ -227,7 +267,7 @@     getCont 	= applyA ( getBaseURI				-- compute the handler and call it 		   >>>-		   traceString 2 (("getURIContents: reading" ++) . show)+		   traceString 2 (("getURIContents: reading " ++) . show) 		   >>> 		   getSchemeFromURI 		   >>>@@ -286,11 +326,15 @@ getXmlContents' parseEncodingSpec     = ( getURIContents 	>>>-	parseEncodingSpec-	>>>-	filterErrorMsg-	>>>-	decodeDocument+	( ( parseEncodingSpec+	    >>>+	    filterErrorMsg+	    >>>+	    decodeDocument+	  )+	  `when`+	  isXmlHtml+	) 	>>> 	perform ( getAttrValue transferURI 		  >>>@@ -303,6 +347,11 @@       )       `when`       isRoot+    where+    isXmlHtml+	= getAttrValue transferMimeType+	  >>>+	  arr (\ mt -> isHtmlMimeType mt || isXmlMimeType mt)  -- ------------------------------------------------------------ @@ -337,7 +386,7 @@ 	found df 	    = traceMsg 2 ("decodeDocument: encoding is " ++ show enc) 	      >>>-	      processChildren (decodeText df)+	      ( decodeText df $< getAttrValue a_ignore_encoding_errors ) 	      >>> 	      addAttr transferEncoding enc @@ -346,19 +395,25 @@ 	      >>> 	      setDocumentStatusFromSystemState "decoding document" -	decodeText df-	    = getText-	      >>> arr df					-- result is (string, [errMsg])-	      >>> ( ( (normalizeNL . fst) ^>> mkText )		-- take string, normalize newline and build text node-		    <+>-		    ( arrL snd					-- take the error messages-		      >>>-		      arr ((enc ++) . (" encoding error" ++))	-- prefix with enc error-		      >>>-		      applyA (arr issueErr)			-- build issueErr arrow and apply-		      >>>-		      none					-- neccessary for type match with <+>+	decodeText df ignoreErrs+	    = processChildren+	      ( getText							-- get the document content+		>>> arr df						-- decode the text, result is (string, [errMsg])+		>>> ( ( (normalizeNL . fst) ^>> mkText )		-- take decoded string, normalize newline and build text node+		      <+>+		      ( if isTrueValue ignoreErrs+			then none					-- encoding errors are ignored+			else+			( arrL snd					-- take the error messages+			  >>>+			  arr ((enc ++) . (" encoding error" ++))	-- prefix with enc error+			  >>>+			  applyA (arr issueErr)				-- build issueErr arrow and apply+			  >>>+			  none						-- neccessary for type match with <+>+			)+		      ) 		    )-		  )+	      )        -- ------------------------------------------------------------
src/Text/XML/HXT/Arrow/Edit.hs view
@@ -737,10 +737,11 @@ addDoctypeDecl rootElem public system     = fromLA $       replaceChildren-      ( mkDTDDoctype [ (a_name, rootElem)-		     , (k_public, public)-		     , (k_system, system)-		     ] none+      ( mkDTDDoctype ( ( if null public then id else ( (k_public, public) : ) )+		       .+		       ( if null system then id else ( (k_system, system) : ) )+		       $  [ (a_name, rootElem) ]+		     ) none 	<+> 	txt "\n" 	<+>
src/Text/XML/HXT/Arrow/Pickle.hs view
@@ -56,6 +56,7 @@      , xp4Tuple     , xp5Tuple+    , xp6Tuple     , xpAddFixedAttr     , xpAlt     , xpAttr@@ -63,12 +64,15 @@     , xpAttrImplied     , xpChoice     , xpCondSeq+    , xpDefault     , xpElem+    , xpElemWithAttrValue     , xpickle     , xpLift     , xpLiftMaybe     , xpList     , xpList1+    , xpMap     , xpOption     , xpPair     , xpPrim@@ -78,10 +82,12 @@     , xpTextDT     , xpText0DT     , xpTree+    , xpTrees     , xpTriple     , xpUnit     , xpWrap     , xpWrapMaybe+    , xpXmlText     , xpZero        -- from Text.XML.HXT.Arrow.Pickle.Schema
src/Text/XML/HXT/Arrow/Pickle/Xml.hs view
@@ -40,6 +40,8 @@ where  import           Data.Maybe+import		 Data.Map (Map)+import qualified Data.Map as M  import           Text.XML.HXT.DOM.Interface import qualified Text.XML.HXT.DOM.XmlNode as XN@@ -47,6 +49,7 @@ import           Control.Arrow.ListArrows import           Text.XML.HXT.Arrow.XmlArrow import           Text.XML.HXT.Arrow.Pickle.Schema+import           Text.XML.HXT.Arrow.ReadDocument (xread)  -- ------------------------------------------------------------ @@ -112,7 +115,7 @@ 				   , contents   =            XN.getChildren t 				   }     | otherwise-	= Nothing+	= unpickleDoc p (XN.mkRoot [] [t])  -- ------------------------------------------------------------ @@ -196,7 +199,7 @@ -- Run two picklers in sequence like with xpSeq. -- When during unpickling the first one fails, -- an alternative pickler (first argument) is applied.--- This pickler only is used as combinator for unpickling.+-- This pickler is only used as combinator for unpickling.   xpChoice		:: PU b -> PU a -> (a -> PU b) -> PU b xpChoice pb	= xpCondSeq pb undefined@@ -334,6 +337,8 @@ 	val [(x,"")] = Just x 	val _        = Nothing +-- ------------------------------------------------------------+ -- | Pickle an XmlTree by just adding it -- -- Usefull for components of type XmlTree in other data structures@@ -349,6 +354,28 @@ 	  t <- getCont st 	  return (Just t, dropCont st) +-- | Pickle a whole list of XmlTrees by just adding the list, unpickle is done by taking all element contens.+--+-- This pickler should always combined with 'xpElem' for taking the whole contents of an element.++xpTrees	:: PU [XmlTree]+xpTrees	= (xpList xpTree) { theSchema = Any }++-- | Pickle a string representing XML contents by inserting the tree representation into the XML document.+--+-- Unpickling is done by converting the contents with+-- 'Text.XML.HXT.Arrow.XmlArrow.xshow' into a string,+-- pickling is done with 'Text.XML.HXT.Arrow.ReadDocument.xread'++xpXmlText	:: PU String+xpXmlText+    = xpWrap ( showXML, readXML ) $ xpTrees+    where+    showXML = concat . runLA ( xshow unlistA )+    readXML = runLA xread++-- ------------------------------------------------------------+ -- | Encoding of optional data by ignoring the Nothing case during pickling -- and relying on failure during unpickling to recompute the Nothing case --@@ -368,6 +395,20 @@          , theSchema   = scOption (theSchema pa) 	 } +-- | Optional conversion with default value+--+-- The default value is not encoded in the XML document,+-- during unpickling the default value is inserted if the pickler fails++xpDefault	:: (Eq a) => a -> PU a -> PU a+xpDefault df+    = xpWrap ( fromMaybe df+	     , \ x -> if x == df then Nothing else Just x+	     ) .+      xpOption++-- ------------------------------------------------------------+ -- | Encoding of list values by pickling all list elements sequentially. -- -- Unpickler relies on failure for detecting the end of the list.@@ -405,6 +446,27 @@ 	xpPair pa (xpList pa)       ) { theSchema = scList1 (theSchema pa) } +-- ------------------------------------------------------------++-- | Standard pickler for maps+--+-- This pickler converts a map into a list of pairs.+-- All key value pairs are mapped to an element with name (1.arg),+-- the key is encoded as an attribute named by the 2. argument,+-- the 3. arg is the pickler for the keys, the last one for the values++xpMap	:: Ord k => String -> String -> PU k -> PU v -> PU (Map k v)+xpMap en an xpk xpv+    = xpWrap ( M.fromList+	     , M.toList+	     ) $+      xpList $+      xpElem en $+      xpPair ( xpAttr an $ xpk ) xpv+++-- ------------------------------------------------------------+ -- | Pickler for sum data types. -- -- Every constructor is mapped to an index into the list of picklers.@@ -426,10 +488,20 @@ 	 , theSchema   = scAlts (map theSchema ps) 	 } +-- ------------------------------------------------------------+ -- | Pickler for wrapping\/unwrapping data into an XML element -- -- Extra parameter is the element name. THE pickler for constructing -- nested structures+--+-- Example:+--+-- > xpElem "number" $ xpickle+--+-- will map an (42::Int) onto+--+-- > <number>42</number>  xpElem	:: String -> PU a -> PU a xpElem name pa@@ -454,6 +526,63 @@ 		    al <- XN.getAttrl t 		    res <- fst . appUnPickle pa $ St {attributes = al, contents = cs} 		    return (Just res, dropCont st)++-- ------------------------------------------------------------++-- | Pickler for wrapping\/unwrapping data into an XML element with an attribute with given value+--+-- To make XML structures flexible but limit the number of different elements, it's sometimes+-- useful to use a kind of generic element with a key value structure+--+-- Example:+--+-- > <attr name="key1">value1</attr>+-- > <attr name="key2">value2</attr>+-- > <attr name="key3">value3</attr>+--+-- the Haskell datatype may look like this+--+-- > type T = T { key1 :: Int ; key2 :: String ; key3 :: Double }+--+-- Then the picker for that type looks like this+--+-- > xpT :: PU T+-- > xpT = xpWrap ( uncurry3 T, \ t -> (key1 t, key2 t, key3 t) ) $+-- >       xpTriple (xpElemWithAttrValue "attr" "name" "key1" $ xpickle)+-- >                (xpElemWithAttrValue "attr" "name" "key2" $ xpText0)+-- >                (xpElemWithAttrValue "attr" "name" "key3" $ xpickle)++xpElemWithAttrValue	:: String -> String -> String -> PU a -> PU a+xpElemWithAttrValue name an av pa+    = PU { appPickle   = ( \ (a, st) ->+			   let+	                   st' = appPickle pa' (a, emptySt)+			   in+			   addCont (XN.mkElement (mkName name) (attributes st') (contents st')) st+			 )+	 , appUnPickle = \ st -> fromMaybe (Nothing, st) (unpickleElement st)+	 , theSchema   = scElem name (theSchema pa')+	 }+      where+      pa' = xpAddFixedAttr an av $ pa+      noMatch = null . runLA ( isElem+			       >>>+			       hasName name+			       >>>+			       hasAttrValue an (==av)+			     )+      unpickleElement st+	  = do+	    t <- getCont st+	    if noMatch t+	       then fail "element name or attr value does not match"+	       else do+		    let cs = XN.getChildren t+		    al <- XN.getAttrl t+		    res <- fst . appUnPickle pa $ St {attributes = al, contents = cs}+		    return (Just res, dropCont st)++-- ------------------------------------------------------------  -- | Pickler for storing\/retreiving data into\/from an attribute value --
src/Text/XML/HXT/Arrow/ProcessDocument.hs view
@@ -243,9 +243,7 @@ 	>>> 	propagateNamespaces 	>>>-	traceTree-	>>>-	traceSource+	traceDoc "propagating namespaces done" 	>>> 	traceMsg 1 "validating namespaces" 	>>>
src/Text/XML/HXT/Arrow/ReadDocument.hs view
@@ -95,18 +95,34 @@  - '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 (default)+- 'a_issue_errors' : issue all error messages on stderr (default), or ignore all error messages +- 'a_ignore_encoding_errors': ignore all encoding errors, default is issue all encoding errors++- 'a_ignore_none_xml_contents': ignore document contents of none XML\/HTML documents.+                                This option can be useful for implementing crawler like applications, e.g. an URL checker.+                                In those cases net traffic can be reduced.+ - '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_use_curl' : obsolete and ignored, HTTP acccess is always done with curl bindings for libcurl -- 'a_options_curl' : more options for external program curl+- 'a_options_curl' : deprecated but for compatibility reasons still supported.+                     More options passed to the curl binding.+                     Instead of using this option to set a whole bunch of options at once for curl+                     it is recomended to use the @curl-.*@ options syntax described below. -- 'a_encoding' : default document encoding ('utf8', 'isoLatin1', 'usAscii', 'iso8859_2', ... , 'iso8859_16', ...)+- 'a_encoding' : default document encoding ('utf8', 'isoLatin1', 'usAscii', 'iso8859_2', ... , 'iso8859_16', ...).+                 Only XML and HTML documents are decoded, documents with none XML\/HTML mime types are not decoded. The whole content is returned in a single text node +- 'a_mime_types' : set the mime type table for file input with given file. The format of this config file must be in the syntax of a debian linux \"mime.types\" config file++- curl options : the HTTP interface with libcurl can be configured with a lot of options. To support these options in an easy way, there is a naming convetion:+                 Every option, which has the prefix @curl@ and the rest of the name forms an option as described in the curl man page, is passed to the curl binding lib.+                 See 'Text.XML.HXT.IO.GetHTTPLibCurl.getCont' for examples. Currently most of the options concerning HTTP requests are implemented.+ All attributes not evaluated by readDocument are stored in the created document root node for easy access of the various options in e.g. the input\/output modules @@ -120,19 +136,27 @@  > readDocument [ (a_validate, "0") >              , (a_encoding, isoLatin1)->              ] "test.xml"+>              , (a_parse_by_mimetype, "1")+>              ] "http://localhost/test.php" -reads document \"test.xml\" without validation, default encoding 'isoLatin1'.+reads document \"test.php\", parses it as HTML or XML depending on the mimetype given from the server, but without validation, default encoding 'isoLatin1'.   > readDocument [ (a_parse_html, "1") >              , (a_encoding, isoLatin1)->              , (a_tagsoup,    "1") >              ] ""  reads a HTML document from standard input, no validation is done when parsing HTML, default encoding is 'isoLatin1', parsing is done with tagsoup parser +> readDocument [ (a_encoding, isoLatin1)+>              , (a_mime_type,    "/etc/mime.types")+>              , (a_tagsoup,    "1")+>              ] "test.svg"++reads an SVG document from standard input, sets the mime type by looking in the system mimetype config file, default encoding is 'isoLatin1',+parsing is done with the lightweight tagsoup parser, which implies no validation.+ > readDocument [ (a_parse_html,     "1") >              , (a_proxy,          "www-cache:3128") >              , (a_curl,           "1")@@ -172,31 +196,37 @@  	= addEntries userOptions defaultOptions      defaultOptions-	= [ ( a_parse_html,		v_0 )-	  , ( a_tagsoup,		v_0 )-	  , ( a_validate,		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 )-	  , ( a_parse_by_mimetype,	v_0 )+	= [ ( a_parse_html,		  v_0 )+	  , ( a_tagsoup,		  v_0 )+	  , ( a_validate,		  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 )+	  , ( a_parse_by_mimetype,	  v_0 )+	  , ( a_ignore_encoding_errors,   v_0 )+	  , ( a_ignore_none_xml_contents, v_0 ) 	  ]      httpOptions-	= [a_proxy, a_use_curl, a_options_curl]+	= [a_proxy, a_use_curl, a_options_curl, a_mime_types]      remainingOptions-	 = filter (not . flip hasEntry defaultOptions . fst) options+	 = options -- filter (not . flip hasEntry defaultOptions . fst) options      traceLevel 	= maybe this (setTraceLevel . read) . lookup a_trace $ options      addInputOptionsToSystemState 	= addSysOptions (filter ((`elem` httpOptions) . fst) remainingOptions)+	  >>>+	  loadMineTypes (lookup1 a_mime_types userOptions) 	  where 	  addSysOptions 	      = seqA . map (uncurry setParamString)+	  loadMineTypes ""	= this+	  loadMineTypes f	= setMimeTypeTableFromFile f      getMimeType 	= getAttrValue transferMimeType >>^ map toLower@@ -230,7 +260,8 @@ 					  isHtml 	    | validateWithRelax		= parseXmlDocument False		-- for Relax NG use XML parser without validation 	    | isXml			= parseXmlDocument validate		-- parse as XML-	    | otherwise			= this					-- don't parse, mime type is not XML nor HTML+	    | removeNoneXml		= replaceChildren none			-- don't parse, if mime type is not XML nore HTML+	    | otherwise			= this					-- but remove contents when option is set 	checknamespaces 	    | (withNamespaces && not withTagSoup) 	      ||@@ -255,15 +286,17 @@ 	validateWithRelax	= hasEntry a_relax_schema options 	relaxSchema		= lookup1 a_relax_schema options 	parseHtml		= hasOption a_parse_html-	parseXml		= hasOption a_parse_xml 	isHtml			= parseHtml				-- force HTML 				  ||-				  mimeTypeIsHtml-	isXml			= parseXml				-- force XML parsing+				  ( parseByMimeType && isHtmlMimeType mimeType )+	isXml			= ( not parseByMimeType && not parseHtml ) 				  ||-				  ( not parseHtml+				  ( parseByMimeType 				    &&-				    ( mimeTypeIsXml || null mimeType )	-- mime type is XML or not there+				    ( isXmlMimeType mimeType+				      ||+				      null mimeType+				    )					-- mime type is XML or not known 				  ) 	isXmlOrHtml	= isHtml || isXml 	parseByMimeType	= hasOption a_parse_by_mimetype@@ -273,8 +306,7 @@ 	issueW		= hasOption a_issue_warnings 	removeWS	= hasOption a_remove_whitespace 	preserveCmt	= hasOption a_preserve_comment-	mimeTypeIsHtml	= parseByMimeType && isHtmlMimeType mimeType-	mimeTypeIsXml	= parseByMimeType && isXmlMimeType  mimeType+	removeNoneXml	= hasOption a_ignore_none_xml_contents 	hasOption n	= optionIsSet n options  -- ------------------------------------------------------------
src/Text/XML/HXT/Arrow/XmlIOStateArrow.hs view
@@ -59,6 +59,7 @@       unsetParam,       getParam,       getAllParams,+      getAllParamsString,       setParamString,       getParamString,       setParamInt,@@ -117,7 +118,11 @@       getQueryFromURI,       getRegNameFromURI,       getSchemeFromURI,-      getUserInfoFromURI+      getUserInfoFromURI,++      -- * Mime Type Handling+      setMimeTypeTable,+      setMimeTypeTableFromFile       ) where @@ -184,11 +189,12 @@ 				  , xio_baseURI			:: ! String 				  , xio_defaultBaseURI		:: ! String 				  , xio_attrList		:: ! (AssocList String XmlTrees)+				  , xio_mimeTypes		::   MimeTypeTable 				  }  instance DeepSeq XIOSysState where-    deepSeq (XIOSys tr es em emh emc eml bu du al) y-	= deepSeq tr $ deepSeq es $ deepSeq em $ deepSeq emh $ deepSeq emc $ deepSeq eml $ deepSeq bu $ deepSeq du $ deepSeq al y+    deepSeq (XIOSys tr es em _emh emc eml bu du al _mt) y+	= deepSeq tr $ deepSeq es $ deepSeq em $ deepSeq emc $ deepSeq eml $ deepSeq bu $ deepSeq du $ deepSeq al y  -- | -- state datatype consists of a system state and a user state@@ -232,6 +238,7 @@ 			 , xio_baseURI		= "" 			 , xio_defaultBaseURI	= "" 			 , xio_attrList		= []+			 , xio_mimeTypes	= defaultMimeTypeTable 			 }  -- ------------------------------------------------------------@@ -380,6 +387,18 @@ getAllParams     = getSysParam xio_attrList +-- | read all attributes from global state+-- and convert the values to strings++getAllParamsString	:: IOStateArrow s b (AssocList String String)+getAllParamsString+    = getAllParams+      >>>+      listA ( unlistA+	      >>>+	      second (xshow unlistA)+	    )+ setParamString	:: String -> String -> IOStateArrow s b b setParamString n v     = perform ( txt v@@ -898,5 +917,28 @@       getPart s = do 		  uri <- parseURIReference s 		  return (sel uri)++-- ------------------------------------------------------------++-- | set the table mapping of file extensions to mime types in the system state+--+-- Default table is defined in 'Text.XML.HXT.DOM.MimeTypeDefaults'.+-- This table is used when reading loacl files, (file: protocol) to determine the mime type++setMimeTypeTable	:: MimeTypeTable -> IOStateArrow s b b+setMimeTypeTable mtt+    = changeSysParam (\ _ s -> s {xio_mimeTypes = mtt})++-- | set the table mapping of file extensions to mime types by an external config file+--+-- The config file must follow the conventions of /etc/mime.types on a debian linux system,+-- that means all empty lines and all lines starting with a # are ignored. The other lines+-- must consist of a mime type followed by a possible empty list of extensions.+-- The list of extenstions and mime types overwrites the default list in the system state+-- of the IOStateArrow++setMimeTypeTableFromFile	:: FilePath -> IOStateArrow s b b+setMimeTypeTableFromFile file+    = setMimeTypeTable $< arrIO0 ( readMimeTypeTable file)  -- ------------------------------------------------------------
src/Text/XML/HXT/DOM/Interface.hs view
@@ -23,6 +23,7 @@     , module Text.XML.HXT.DOM.NamespacePredicates     , module Text.XML.HXT.DOM.Util     , module Text.XML.HXT.DOM.XmlOptions+    , module Text.XML.HXT.DOM.MimeTypes     ) where @@ -31,6 +32,7 @@ import Text.XML.HXT.DOM.NamespacePredicates import Text.XML.HXT.DOM.Util import Text.XML.HXT.DOM.XmlOptions		-- predefined options+import Text.XML.HXT.DOM.MimeTypes		-- mime types related stuff   -- ------------------------------------------------------------
+ src/Text/XML/HXT/DOM/MimeTypeDefaults.hs view
@@ -0,0 +1,584 @@+-- | default mime type table+-- +-- this file is generated from file /etc/mime.types++module Text.XML.HXT.DOM.MimeTypeDefaults+where++-- | the table with the mapping from file name extensions to mime types++mimeTypeDefaults :: [(String, String)]+mimeTypeDefaults+  = [ ("123",	"application/vnd.lotus-1-2-3")+    , ("3ds",	"image/x-3ds")+    , ("3g2",	"video/x-3gpp2")+    , ("3gp",	"video/3gpp")+    , ("669",	"audio/x-mod")+    , ("BAY",	"image/x-dcraw")+    , ("BLEND",	"application/x-blender")+    , ("BMQ",	"image/x-dcraw")+    , ("C",	"text/x-c++src")+    , ("CR2",	"image/x-dcraw")+    , ("CRW",	"image/x-dcraw")+    , ("CS1",	"image/x-dcraw")+    , ("CSSL",	"text/css")+    , ("DC2",	"image/x-dcraw")+    , ("DCR",	"image/x-dcraw")+    , ("FFF",	"image/x-dcraw")+    , ("K25",	"image/x-dcraw")+    , ("KDC",	"image/x-dcraw")+    , ("MOS",	"image/x-dcraw")+    , ("MRW",	"image/x-dcraw")+    , ("NEF",	"image/x-dcraw")+    , ("NSV",	"video/x-nsv")+    , ("ORF",	"image/x-dcraw")+    , ("PAR2",	"application/x-par2")+    , ("PEF",	"image/x-dcraw")+    , ("RAF",	"image/x-dcraw")+    , ("RDC",	"image/x-dcraw")+    , ("SRF",	"image/x-dcraw")+    , ("TTC",	"application/x-font-ttf")+    , ("X3F",	"image/x-dcraw")+    , ("XM",	"audio/x-mod")+    , ("Z",	"application/x-compress")+    , ("a",	"application/x-archive")+    , ("aac",	"audio/x-aac")+    , ("abw",	"application/x-abiword")+    , ("abw.CRASHED",	"application/x-abiword")+    , ("abw.gz",	"application/x-abiword")+    , ("ac3",	"audio/ac3")+    , ("adb",	"text/x-adasrc")+    , ("ads",	"text/x-adasrc")+    , ("afm",	"application/x-font-afm")+    , ("ag",	"image/x-applix-graphics")+    , ("ai",	"application/illustrator")+    , ("aif",	"audio/x-aiff")+    , ("aif",	"audio/x-aiff")+    , ("aifc",	"audio/x-aiff")+    , ("aiff",	"audio/x-aiff")+    , ("aiff",	"audio/x-aiff")+    , ("al",	"application/x-perl")+    , ("anim[1-9j]",	"video/x-anim")+    , ("aop",	"application/x-frontline")+    , ("arj",	"application/x-arj")+    , ("as",	"application/x-applix-spreadsheet")+    , ("asax",	"application/x-asax")+    , ("asc",	"text/plain")+    , ("ascx",	"application/x-ascx")+    , ("asf",	"video/x-ms-asf")+    , ("ashx",	"application/x-ashx")+    , ("asix",	"application/x-asix")+    , ("asmx",	"application/x-asmx")+    , ("asp",	"application/x-asp")+    , ("aspx",	"application/x-aspx")+    , ("asx",	"video/x-ms-asf")+    , ("au",	"audio/basic")+    , ("avi",	"video/x-msvideo")+    , ("aw",	"application/x-applix-word")+    , ("axd",	"application/x-axd")+    , ("bak",	"application/x-trash")+    , ("bay",	"image/x-dcraw")+    , ("bcpio",	"application/x-bcpio")+    , ("bdf",	"application/x-font-bdf")+    , ("bib",	"text/x-bibtex")+    , ("bin",	"application/octet-stream")+    , ("bin",	"application/x-stuffit")+    , ("blend",	"application/x-blender")+    , ("blender",	"application/x-blender")+    , ("bmp",	"image/bmp")+    , ("bmq",	"image/x-dcraw")+    , ("boo",	"text/x-boo")+    , ("bz",	"application/x-bzip")+    , ("bz",	"application/x-bzip")+    , ("bz2",	"application/x-bzip")+    , ("bz2",	"application/x-bzip")+    , ("c",	"text/x-csrc")+    , ("c++",	"text/x-c++src")+    , ("caves",	"application/x-gnome-stones")+    , ("cc",	"text/x-c++src")+    , ("cdf",	"application/x-netcdf")+    , ("cdr",	"application/vnd.corel-draw")+    , ("cer",	"application/x-x509-ca-cert")+    , ("cert",	"application/x-x509-ca-cert")+    , ("cgi",	"application/x-cgi")+    , ("cgm",	"image/cgm")+    , ("chm",	"application/x-chm")+    , ("chrt",	"application/x-kchart")+    , ("cht",	"application/chemtool")+    , ("class",	"application/x-java")+    , ("cls",	"text/x-tex")+    , ("cmbx",	"application/x-cmbx")+    , ("config",	"application/x-config")+    , ("connection",	"application/x-gnome-db-connection")+    , ("cpio",	"application/x-cpio")+    , ("cpio.gz",	"application/x-cpio-compressed")+    , ("cpp",	"text/x-c++src")+    , ("cr2",	"image/x-dcraw")+    , ("crt",	"application/x-x509-ca-cert")+    , ("crw",	"image/x-dcraw")+    , ("cs",	"text/x-csharp")+    , ("cs1",	"image/x-dcraw")+    , ("csh",	"application/x-csh")+    , ("css",	"text/css")+    , ("csv",	"text/x-comma-separated-values")+    , ("cue",	"application/x-cue")+    , ("cur",	"image/x-win-bitmap")+    , ("cxx",	"text/x-c++src")+    , ("d",	"text/x-dsrc")+    , ("dat",	"video/mpeg")+    , ("database",	"application/x-gnome-db-database")+    , ("dbf",	"application/x-dbase")+    , ("dc",	"application/x-dc-rom")+    , ("dc2",	"image/x-dcraw")+    , ("dcl",	"text/x-dcl")+    , ("dcm",	"application/dicom")+    , ("dcr",	"image/x-dcraw")+    , ("deb",	"application/x-deb")+    , ("der",	"application/x-x509-ca-cert")+    , ("desktop",	"application/x-desktop")+    , ("devhelp",	"application/x-devhelp")+    , ("dia",	"application/x-dia-diagram")+    , ("dif",	"video/dv")+    , ("diff",	"text/x-patch")+    , ("disco",	"application/x-disco")+    , ("display",	"application/x-gdesklets-display")+    , ("djv",	"image/vnd.djvu")+    , ("djvu",	"image/vnd.djvu")+    , ("doc",	"application/msword")+    , ("docbook",	"application/docbook+xml")+    , ("dsl",	"text/x-dsl")+    , ("dtd",	"text/x-dtd")+    , ("dv",	"video/dv")+    , ("dvi",	"application/x-dvi")+    , ("dwg",	"image/vnd.dwg")+    , ("dxf",	"image/vnd.dxf")+    , ("ear",	"application/x-java-archive")+    , ("egon",	"application/x-egon")+    , ("el",	"text/x-emacs-lisp")+    , ("eps",	"image/x-eps")+    , ("epsf",	"image/x-eps")+    , ("epsi",	"image/x-eps")+    , ("etheme",	"application/x-e-theme")+    , ("etx",	"text/x-setext")+    , ("exe",	"application/x-executable")+    , ("exe",	"application/x-ms-dos-executable")+    , ("ez",	"application/andrew-inset")+    , ("f",	"text/x-fortran")+    , ("fff",	"image/x-dcraw")+    , ("fig",	"image/x-xfig")+    , ("fits",	"image/x-fits")+    , ("flac",	"audio/x-flac")+    , ("flc",	"video/x-flic")+    , ("fli",	"video/x-flic")+    , ("flw",	"application/x-kivio")+    , ("fo",	"text/x-xslfo")+    , ("g3",	"image/fax-g3")+    , ("gb",	"application/x-gameboy-rom")+    , ("gcrd",	"text/directory")+    , ("gen",	"application/x-genesis-rom")+    , ("gf",	"application/x-tex-gf")+    , ("gg",	"application/x-sms-rom")+    , ("gif",	"image/gif")+    , ("glabels",	"application/x-glabels")+    , ("glade",	"application/x-glade")+    , ("gmo",	"application/x-gettext-translation")+    , ("gnc",	"application/x-gnucash")+    , ("gnucash",	"application/x-gnucash")+    , ("gnumeric",	"application/x-gnumeric")+    , ("gpg",	"application/pgp-encrypted")+    , ("gra",	"application/x-graphite")+    , ("gsf",	"application/x-font-type1")+    , ("gtar",	"application/x-gtar")+    , ("gz",	"application/x-gzip")+    , ("h",	"text/x-chdr")+    , ("h++",	"text/x-chdr")+    , ("hdf",	"application/x-hdf")+    , ("hh",	"text/x-c++hdr")+    , ("hp",	"text/x-chdr")+    , ("hpgl",	"application/vnd.hp-hpgl")+    , ("hs",	"text/x-haskell")+    , ("htm",	"text/html")+    , ("html",	"text/html")+    , ("ica",	"application/x-ica")+    , ("icb",	"image/x-icb")+    , ("ico",	"image/x-ico")+    , ("ics",	"text/calendar")+    , ("idl",	"text/x-idl")+    , ("ief",	"image/ief")+    , ("iff",	"image/x-iff")+    , ("il",	"text/x-msil")+    , ("ilbm",	"image/x-ilbm")+    , ("iso",	"application/x-cd-image")+    , ("it",	"audio/x-it")+    , ("jam",	"application/x-jamin")+    , ("jar",	"application/x-jar")+    , ("jar",	"application/x-java-archive")+    , ("java",	"text/x-java")+    , ("jng",	"image/x-jng")+    , ("jnlp",	"application/x-java-jnlp-file")+    , ("jp2",	"image/jpeg2000")+    , ("jpe",	"image/jpeg")+    , ("jpeg",	"image/jpeg")+    , ("jpg",	"image/jpeg")+    , ("jpr",	"application/x-jbuilder-project")+    , ("jpx",	"application/x-jbuilder-project")+    , ("js",	"application/x-javascript")+    , ("js",	"text/x-js")+    , ("k",	"application/x-tex-pk")+    , ("k25",	"image/x-dcraw")+    , ("karbon",	"application/x-karbon")+    , ("kdc",	"image/x-dcraw")+    , ("kdelnk",	"application/x-desktop")+    , ("kfo",	"application/x-kformula")+    , ("kil",	"application/x-killustrator")+    , ("kino",	"application/x-smil")+    , ("kon",	"application/x-kontour")+    , ("kpm",	"application/x-kpovmodeler")+    , ("kpr",	"application/x-kpresenter")+    , ("kpt",	"application/x-kpresenter")+    , ("kra",	"application/x-krita")+    , ("ksp",	"application/x-kspread")+    , ("kud",	"application/x-kugar")+    , ("kwd",	"application/x-kword")+    , ("kwt",	"application/x-kword")+    , ("la",	"application/x-shared-library-la")+    , ("lha",	"application/x-lha")+    , ("lhs",	"text/x-literate-haskell")+    , ("lhz",	"application/x-lhz")+    , ("log",	"text/x-log")+    , ("ltx",	"text/x-tex")+    , ("lwo",	"image/x-lwo")+    , ("lwob",	"image/x-lwo")+    , ("lws",	"image/x-lws")+    , ("lyx",	"application/x-lyx")+    , ("lzh",	"application/x-lha")+    , ("lzh",	"application/x-lha")+    , ("lzo",	"application/x-lzop")+    , ("m",	"text/x-objcsrc")+    , ("m15",	"audio/x-mod")+    , ("m3u",	"audio/x-mpegurl")+    , ("m4a",	"audio/x-m4a")+    , ("man",	"application/x-troff-man")+    , ("master",	"application/x-master-page")+    , ("md",	"application/x-genesis-rom")+    , ("mdp",	"application/x-mdp")+    , ("mds",	"application/x-mds")+    , ("mdsx",	"application/x-mdsx")+    , ("me",	"text/x-troff-me")+    , ("mergeant",	"application/x-mergeant")+    , ("mgp",	"application/x-magicpoint")+    , ("mid",	"audio/midi")+    , ("midi",	"audio/midi")+    , ("mif",	"application/x-mif")+    , ("mkv",	"application/x-matroska")+    , ("mm",	"text/x-troff-mm")+    , ("mml",	"text/mathml")+    , ("mng",	"video/x-mng")+    , ("moc",	"text/x-moc")+    , ("mod",	"audio/x-mod")+    , ("moov",	"video/quicktime")+    , ("mos",	"image/x-dcraw")+    , ("mov",	"video/quicktime")+    , ("movie",	"video/x-sgi-movie")+    , ("mp2",	"video/mpeg")+    , ("mp3",	"audio/mpeg")+    , ("mpe",	"video/mpeg")+    , ("mpeg",	"video/mpeg")+    , ("mpg",	"video/mpeg")+    , ("mps",	"application/x-mps")+    , ("mrproject",	"application/x-planner")+    , ("mrw",	"image/x-dcraw")+    , ("ms",	"text/x-troff-ms")+    , ("msod",	"image/x-msod")+    , ("msx",	"application/x-msx-rom")+    , ("mtm",	"audio/x-mod")+    , ("n",	"text/x-nemerle")+    , ("n64",	"application/x-n64-rom")+    , ("nb",	"application/mathematica")+    , ("nc",	"application/x-netcdf")+    , ("nef",	"image/x-dcraw")+    , ("nes",	"application/x-nes-rom")+    , ("nsv",	"video/x-nsv")+    , ("o",	"application/x-object")+    , ("obj",	"application/x-tgif")+    , ("oda",	"application/oda")+    , ("odb",	"application/vnd.oasis.opendocument.database")+    , ("odc",	"application/vnd.oasis.opendocument.chart")+    , ("odf",	"application/vnd.oasis.opendocument.formula")+    , ("odg",	"application/vnd.oasis.opendocument.graphics")+    , ("odi",	"application/vnd.oasis.opendocument.image")+    , ("odm",	"application/vnd.oasis.opendocument.text-master")+    , ("odp",	"application/vnd.oasis.opendocument.presentation")+    , ("ods",	"application/vnd.oasis.opendocument.spreadsheet")+    , ("odt",	"application/vnd.oasis.opendocument.text")+    , ("ogg",	"application/ogg")+    , ("old",	"application/x-trash")+    , ("oleo",	"application/x-oleo")+    , ("orf",	"image/x-dcraw")+    , ("otg",	"application/vnd.oasis.opendocument.graphics-template")+    , ("oth",	"application/vnd.oasis.opendocument.text-web")+    , ("otp",	"application/vnd.oasis.opendocument.presentation-template")+    , ("ots",	"application/vnd.oasis.opendocument.spreadsheet-template")+    , ("ott",	"application/vnd.oasis.opendocument.text-template")+    , ("p",	"text/x-pascal")+    , ("p12",	"application/x-pkcs12")+    , ("p7s",	"application/pkcs7-signature")+    , ("par2",	"application/x-par2")+    , ("pas",	"text/x-pascal")+    , ("patch",	"text/x-patch")+    , ("pbm",	"image/x-portable-bitmap")+    , ("pcd",	"image/x-photo-cd")+    , ("pcf",	"application/x-font-pcf")+    , ("pcf.Z",	"application/x-font-type1")+    , ("pcf.gz",	"application/x-font-pcf")+    , ("pcl",	"application/vnd.hp-pcl")+    , ("pdb",	"application/vnd.palm")+    , ("pdb",	"application/x-palm-database")+    , ("pdf",	"application/pdf")+    , ("pef",	"image/x-dcraw")+    , ("pem",	"application/x-x509-ca-cert")+    , ("perl",	"application/x-perl")+    , ("pfa",	"application/x-font-type1")+    , ("pfb",	"application/x-font-type1")+    , ("pfx",	"application/x-pkcs12")+    , ("pgm",	"image/x-portable-graymap")+    , ("pgn",	"application/x-chess-pgn")+    , ("pgp",	"application/pgp")+    , ("pgp",	"application/pgp-encrypted")+    , ("php",	"application/x-php")+    , ("php3",	"application/x-php")+    , ("php4",	"application/x-php")+    , ("pict",	"image/x-pict")+    , ("pict1",	"image/x-pict")+    , ("pict2",	"image/x-pict")+    , ("pkr",	"application/pgp-keys")+    , ("pl",	"application/x-perl")+    , ("planner",	"application/x-planner")+    , ("pln",	"application/x-planperfect")+    , ("pls",	"audio/x-scpls")+    , ("pls",	"audio/x-scpls")+    , ("pm",	"application/x-perl")+    , ("png",	"image/png")+    , ("pnm",	"image/x-portable-anymap")+    , ("po",	"text/x-gettext-translation")+    , ("pot",	"application/vnd.ms-powerpoint")+    , ("pot",	"text/x-gettext-translation-template")+    , ("ppm",	"image/x-portable-pixmap")+    , ("pps",	"application/vnd.ms-powerpoint")+    , ("ppt",	"application/vnd.ms-powerpoint")+    , ("ppz",	"application/vnd.ms-powerpoint")+    , ("prc",	"application/x-palm-database")+    , ("prj",	"application/x-anjuta-project")+    , ("prjx",	"application/x-prjx")+    , ("ps",	"application/postscript")+    , ("ps.gz",	"application/x-gzpostscript")+    , ("psd",	"image/x-psd")+    , ("psf",	"application/x-font-linux-psf")+    , ("psid",	"audio/prs.sid")+    , ("pto",	"application/x-ptoptimizer-script")+    , ("pw",	"application/x-pw")+    , ("py",	"text/x-python")+    , ("pyc",	"application/x-python-bytecode")+    , ("pyo",	"application/x-python-bytecode")+    , ("qif",	"application/x-qw")+    , ("qt",	"video/quicktime")+    , ("qtvr",	"video/quicktime")+    , ("ra",	"audio/vnd.rn-realaudio")+    , ("ra",	"audio/x-pn-realaudio")+    , ("raf",	"image/x-dcraw")+    , ("ram",	"audio/x-pn-realaudio")+    , ("ram",	"audio/x-pn-realaudio")+    , ("rar",	"application/x-rar")+    , ("rar",	"application/x-rar-compressed")+    , ("ras",	"image/x-cmu-raster")+    , ("rdc",	"image/x-dcraw")+    , ("rdf",	"text/rdf")+    , ("rdp",	"application/x-rdp")+    , ("rej",	"application/x-reject")+    , ("rem",	"application/x-remoting")+    , ("resources",	"application/x-resources")+    , ("resx",	"application/x-resourcesx")+    , ("rgb",	"image/x-rgb")+    , ("rle",	"image/rle")+    , ("rm",	"application/vnd.rn-realmedia")+    , ("rm",	"audio/x-pn-realaudio")+    , ("rmm",	"audio/x-pn-realaudio")+    , ("rms",	"application/vnd.rn-realmedia-secure")+    , ("rmvb",	"application/vnd.rn-realmedia-vbr")+    , ("rng",	"text/x-rng")+    , ("roff",	"application/x-troff")+    , ("rpm",	"application/x-rpm")+    , ("rss",	"text/rss")+    , ("rt",	"text/vnd.rn-realtext")+    , ("rtf",	"application/rtf")+    , ("rtx",	"text/richtext")+    , ("rv",	"video/vnd.rn-realvideo")+    , ("s3m",	"audio/x-s3m")+    , ("sam",	"application/x-amipro")+    , ("sc",	"application/x-sc")+    , ("scd",	"application/x-scribus")+    , ("scd.gz",	"application/x-scribus")+    , ("scm",	"text/x-scheme")+    , ("sda",	"application/vnd.stardivision.draw")+    , ("sdc",	"application/vnd.stardivision.calc")+    , ("sdd",	"application/vnd.stardivision.impress")+    , ("sdp",	"application/sdp")+    , ("sdp",	"application/vnd.stardivision.impress")+    , ("sds",	"application/vnd.stardivision.chart")+    , ("sdw",	"application/vnd.stardivision.writer")+    , ("sgi",	"image/x-sgi")+    , ("sgl",	"application/vnd.stardivision.writer")+    , ("sgm",	"text/sgml")+    , ("sgml",	"text/sgml")+    , ("sh",	"application/x-shellscript")+    , ("shar",	"application/x-shar")+    , ("siag",	"application/x-siag")+    , ("sid",	"audio/prs.sid")+    , ("sig",	"application/pgp-signature")+    , ("sik",	"application/x-trash")+    , ("sit",	"application/stuffit")+    , ("sit",	"application/x-stuffit")+    , ("skr",	"application/pgp-keys")+    , ("sla",	"application/x-scribus")+    , ("sla.gz",	"application/x-scribus")+    , ("slk",	"text/spreadsheet")+    , ("smd",	"application/vnd.stardivision.mail")+    , ("smf",	"application/vnd.stardivision.math")+    , ("smi",	"application/smil")+    , ("smi",	"application/x-smil")+    , ("smil",	"application/smil")+    , ("smil",	"application/x-smil")+    , ("sml",	"application/smil")+    , ("sms",	"application/x-sms-rom")+    , ("snd",	"audio/basic")+    , ("so",	"application/x-sharedlib")+    , ("soap",	"application/x-soap-remoting")+    , ("spd",	"application/x-font-speedo")+    , ("sql",	"text/x-sql")+    , ("src",	"application/x-wais-source")+    , ("srf",	"image/x-dcraw")+    , ("ssm",	"application/x-streamingmedia")+    , ("stc",	"application/vnd.sun.xml.calc.template")+    , ("std",	"application/vnd.sun.xml.draw.template")+    , ("sti",	"application/vnd.sun.xml.impress.template")+    , ("stm",	"audio/x-stm")+    , ("stw",	"application/vnd.sun.xml.writer.template")+    , ("sty",	"text/x-tex")+    , ("sun",	"image/x-sun-raster")+    , ("sv4cpio",	"application/x-sv4cpio")+    , ("sv4crc",	"application/x-sv4crc")+    , ("svg",	"image/svg+xml")+    , ("swf",	"application/x-shockwave-flash")+    , ("sxc",	"application/vnd.sun.xml.calc")+    , ("sxd",	"application/vnd.sun.xml.draw")+    , ("sxg",	"application/vnd.sun.xml.writer.global")+    , ("sxi",	"application/vnd.sun.xml.impress")+    , ("sxm",	"application/vnd.sun.xml.math")+    , ("sxw",	"application/vnd.sun.xml.writer")+    , ("sylk",	"text/spreadsheet")+    , ("t",	"application/x-troff")+    , ("tar",	"application/x-tar")+    , ("tar.Z",	"application/x-compressed-tar")+    , ("tar.Z",	"application/x-tarz")+    , ("tar.bz",	"application/x-bzip-compressed-tar")+    , ("tar.bz",	"application/x-bzip-compressed-tar")+    , ("tar.bz2",	"application/x-bzip-compressed-tar")+    , ("tar.bz2",	"application/x-bzip-compressed-tar")+    , ("tar.gz",	"application/x-compressed-tar")+    , ("tar.gz",	"application/x-compressed-tar")+    , ("tar.lzo",	"application/x-lzop-compressed-tar")+    , ("tar.lzo",	"application/x-tzo")+    , ("taz",	"application/x-compressed-tar")+    , ("tbz",	"application/x-bzip-compressed-tar")+    , ("tbz2",	"application/x-bzip-compressed-tar")+    , ("tcl",	"text/x-tcl")+    , ("tex",	"text/x-tex")+    , ("texi",	"text/x-texinfo")+    , ("texinfo",	"text/x-texinfo")+    , ("tga",	"image/x-tga")+    , ("tgz",	"application/x-compressed-tar")+    , ("tgz",	"application/x-compressed-tar")+    , ("theme",	"application/x-theme")+    , ("tif",	"image/tiff")+    , ("tiff",	"image/tiff")+    , ("tk",	"text/x-tcl")+    , ("tm",	"text/x-texmacs")+    , ("toc",	"application/x-toc")+    , ("torrent",	"application/x-bittorrent")+    , ("tr",	"application/x-troff")+    , ("ts",	"application/x-linguist")+    , ("ts",	"text/x-texmacs")+    , ("tsv",	"text/tab-separated-values")+    , ("ttc",	"application/x-font-ttf")+    , ("ttf",	"application/x-font-ttf")+    , ("txt",	"text/plain")+    , ("tzo",	"application/x-lzop-compressed-tar")+    , ("tzo",	"application/x-tzo")+    , ("ui",	"application/x-designer")+    , ("uil",	"text/x-uil")+    , ("ult",	"audio/x-mod")+    , ("uni",	"audio/x-mod")+    , ("uri",	"text/x-uri")+    , ("url",	"text/x-uri")+    , ("ustar",	"application/x-ustar")+    , ("vb",	"text/x-vb")+    , ("vcf",	"text/directory")+    , ("vcs",	"text/calendar")+    , ("vct",	"text/directory")+    , ("vob",	"video/mpeg")+    , ("voc",	"audio/x-voc")+    , ("vor",	"application/vnd.stardivision.writer")+    , ("war",	"application/x-java-archive")+    , ("wav",	"audio/x-wav")+    , ("wb1",	"application/x-quattro-pro")+    , ("wb1",	"application/x-quattropro")+    , ("wb2",	"application/x-quattro-pro")+    , ("wb2",	"application/x-quattropro")+    , ("wb3",	"application/x-quattro-pro")+    , ("wb3",	"application/x-quattropro")+    , ("wk1",	"application/vnd.lotus-1-2-3")+    , ("wk3",	"application/vnd.lotus-1-2-3")+    , ("wk4",	"application/vnd.lotus-1-2-3")+    , ("wks",	"application/vnd.lotus-1-2-3")+    , ("wmf",	"image/x-wmf")+    , ("wml",	"text/vnd.wap.wml")+    , ("wmv",	"video/x-ms-wmv")+    , ("wpd",	"application/vnd.wordperfect")+    , ("wpg",	"application/x-wpg")+    , ("wri",	"application/x-mswrite")+    , ("wrl",	"model/vrml")+    , ("wsdl",	"application/x-wsdl")+    , ("x3f",	"image/x-dcraw")+    , ("xac",	"application/x-gnucash")+    , ("xbel",	"application/x-xbel")+    , ("xbm",	"image/x-xbitmap")+    , ("xcf",	"image/x-xcf")+    , ("xcf.bz2",	"image/x-compressed-xcf")+    , ("xcf.gz",	"image/x-compressed-xcf")+    , ("xds",	"text/x-xds")+    , ("xhtml",	"application/xhtml+xml")+    , ("xi",	"audio/x-xi")+    , ("xla",	"application/vnd.ms-excel")+    , ("xlc",	"application/vnd.ms-excel")+    , ("xld",	"application/vnd.ms-excel")+    , ("xll",	"application/vnd.ms-excel")+    , ("xlm",	"application/vnd.ms-excel")+    , ("xls",	"application/vnd.ms-excel")+    , ("xlt",	"application/vnd.ms-excel")+    , ("xlw",	"application/vnd.ms-excel")+    , ("xm",	"audio/x-xm")+    , ("xmi",	"text/x-xmi")+    , ("xml",	"text/xml")+    , ("xpl",	"audio/x-scpls")+    , ("xpm",	"image/x-xpixmap")+    , ("xsl",	"text/x-xsl")+    , ("xsl",	"text/x-xslt")+    , ("xslfo",	"text/x-xslfo")+    , ("xslt",	"text/x-xslt")+    , ("xul",	"application/vnd.mozilla.xul+xml")+    , ("xwd",	"image/x-xwindowdump")+    , ("zabw",	"application/x-abiword")+    , ("zip",	"application/zip")+    , ("zoo",	"application/x-zoo")+   ]+
+ src/Text/XML/HXT/DOM/MimeTypes.hs view
@@ -0,0 +1,113 @@+-- ------------------------------------------------------------++{- |+   Module     : Text.XML.HXT.DOM.MimeTypes+   Copyright  : Copyright (C) 2008 Uwe Schmidt+   License    : MIT++   Maintainer : Uwe Schmidt (uwe@fh-wedel.de)+   Stability  : experimental+   Portability: portable++   mime type related data and functions++-}++-- ------------------------------------------------------------++module Text.XML.HXT.DOM.MimeTypes+where++import           Control.Monad (mplus)++import           Data.Char+import           Data.List+import qualified Data.Map as M+import           Data.Maybe++import           System.IO++import           Text.XML.HXT.DOM.MimeTypeDefaults++-- ------------------------------------------------------------++type MimeTypeTable	= M.Map String String++-- ------------------------------------------------------------++-- mime types+--+-- see RFC \"http:\/\/www.rfc-editor.org\/rfc\/rfc3023.txt\"++application_xhtml,+ application_xml,+ application_xml_external_parsed_entity,+ application_xml_dtd,+ text_html,+ text_xml,+ text_xml_external_parsed_entity	:: String++application_xhtml			= "application/xhtml+xml"+application_xml				= "application/xml"+application_xml_external_parsed_entity	= "application/xml-external-parsed-entity"+application_xml_dtd			= "application/xml-dtd"++text_html				= "text/html"+text_xml				= "text/xml"+text_xml_external_parsed_entity		= "text/xml-external-parsed-entity"++isHtmlMimeType	:: String -> Bool+isHtmlMimeType t+    = t == text_html++isXmlMimeType	:: String -> Bool+isXmlMimeType t+    = ( t `elem` [ application_xhtml+		 , application_xml+		 , application_xml_external_parsed_entity+		 , application_xml_dtd+		 , text_xml+		 , text_xml_external_parsed_entity+		 ]+	||+	"+xml" `isSuffixOf` t		-- application/mathml+xml+      )					-- or image/svg+xml++defaultMimeTypeTable	:: MimeTypeTable+defaultMimeTypeTable+    = M.fromList mimeTypeDefaults++extensionToMimeType	:: String -> MimeTypeTable -> String+extensionToMimeType e+    = fromMaybe "" . lookupMime +    where+    lookupMime t+	= M.lookup e t			-- try exact match+	  `mplus`+	  M.lookup (map toLower e) t	-- else try lowercase match+          `mplus`+	  M.lookup (map toUpper e) t	-- else try uppercase match++-- ------------------------------------------------------------++readMimeTypeTable	:: FilePath -> IO MimeTypeTable+readMimeTypeTable inp+    = do+      h <- openFile inp ReadMode+      c <- hGetContents h+      return . M.fromList . parseMimeTypeTable $ c++parseMimeTypeTable	:: String -> [(String, String)]+parseMimeTypeTable+    = concat+      . map buildPairs+      . map words+      . filter (not . ("#" `isPrefixOf`))+      . filter (not . all (isSpace))+      . lines+    where+    buildPairs	:: [String] -> [(String, String)]+    buildPairs	[] = []+    buildPairs	(mt:exts) = map (\ x -> (x, mt)) $ exts++-- ------------------------------------------------------------
src/Text/XML/HXT/DOM/XmlKeywords.hs view
@@ -8,7 +8,6 @@    Maintainer : Uwe Schmidt (uwe@fh-wedel.de)    Stability  : experimental    Portability: portable-   Version    : $Id: XmlKeywords.hs,v 1.10 2006/11/02 09:34:09 hxml Exp $     Constants for XML keywords, for special attribute names    and special attribute values@@ -20,10 +19,6 @@ module Text.XML.HXT.DOM.XmlKeywords where -import Data.List-    ( isSuffixOf-    )- -- ------------------------------------------------------------ -- -- string constants for representing DTD keywords and attributes@@ -50,11 +45,14 @@  a_error,  a_error_log,  a_help,+ a_ignore_encoding_errors,+ a_ignore_none_xml_contents,  a_indent,  a_issue_errors,  a_issue_warnings,  a_kind,  a_line,+ a_mime_types,  a_module,  a_modifier,  a_name,@@ -153,11 +151,14 @@ a_error				= "error" a_error_log			= "errorLog" a_help				= "help"+a_ignore_encoding_errors	= "ignore-encoding-errors"+a_ignore_none_xml_contents	= "ignore-none-xml-contents" a_indent			= "indent" a_issue_warnings		= "issue-warnings" a_issue_errors			= "issue-errors" a_kind				= "kind" a_line				= "line"+a_mime_types			= "mimetypes" a_module			= "module" a_modifier			= "modifier" a_name				= "name"@@ -349,45 +350,5 @@ a_validate_include            = "validate-include" a_output_changes              = "output-pattern-transformations" a_do_not_collect_errors       = "do-not-collect-errors"---- ---------------------------------------------------------------- mime types------ see RFC \"http:\/\/www.rfc-editor.org\/rfc\/rfc3023.txt\"--application_xhtml,- application_xml,- application_xml_external_parsed_entity,- application_xml_dtd,- text_html,- text_xml,- text_xml_external_parsed_entity	:: String--application_xhtml			= "application/xhtml+xml"-application_xml				= "application/xml"-application_xml_external_parsed_entity	= "application/xml-external-parsed-entity"-application_xml_dtd			= "application/xml-dtd"--text_html				= "text/html"-text_xml				= "text/xml"-text_xml_external_parsed_entity		= "text/xml-external-parsed-entity"--isHtmlMimeType	:: String -> Bool-isHtmlMimeType t-    = t == text_html--isXmlMimeType	:: String -> Bool-isXmlMimeType t-    = ( t `elem` [ application_xhtml-		, application_xml-		, application_xml_external_parsed_entity-		, application_xml_dtd-		, text_xml-		, text_xml_external_parsed_entity-		]-	||-	"+xml" `isSuffixOf` t		-- application/mathml+xml-      )					-- or image/svg+xml  -- ------------------------------------------------------------
src/Text/XML/HXT/DOM/XmlOptions.hs view
@@ -16,6 +16,7 @@     , selectOptions     , removeOptions     , optionIsSet+    , isTrueValue     ) where @@ -44,19 +45,22 @@ inputOptions     = [ Option "t"	[a_trace]			(OptArg trc "LEVEL")			"trace level (0-4), default 1"       , Option "p"	[a_proxy]			(ReqArg (att a_proxy)         "PROXY")	"proxy for http access (e.g. \"www-cache:3128\")"-      , Option ""	[a_use_curl]			(NoArg  (att a_use_curl          v_1))	"HTTP access via external program \"curl\", more functionality, supports HTTP/1.0, less efficient"-      , Option ""	[a_do_not_use_curl]		(NoArg  (att a_use_curl          v_0))	"HTTP access via built in HTTP/1.1 module (default)"+      , Option ""	[a_use_curl]			(NoArg  (att a_use_curl          v_1))	"obsolete, since hxt-8.1 HTTP access is always done with curl bindings"+      , Option ""	[a_do_not_use_curl]		(NoArg  (att a_use_curl          v_0))	"obsolete, since hxt-8.1 HTTP access is always done with curl bindings"       , Option ""	[a_options_curl]		(ReqArg (att a_options_curl)    "STR")	"additional curl options, e.g. for timeout, ..."       , Option ""	[a_default_baseuri]		(ReqArg (att transferURI) 	"URI")	"default base URI, default: \"file:///<cwd>/\""       , Option "e"	[a_encoding]			(ReqArg (att a_encoding)    "CHARSET")	( "default document encoding (" ++ utf8 ++ ", " ++ isoLatin1 ++ ", " ++ usAscii ++ ", ...)" )+      , Option ""       [a_mime_types]                  (ReqArg (att a_mime_types)     "FILE")  "set mime type configuration file, e.g. \"/etc/mime.types\""       , Option ""	[a_issue_errors]		(NoArg	(att a_issue_errors      v_1))	"issue all errorr messages on stderr (default)"       , Option ""	[a_do_not_issue_errors]		(NoArg	(att a_issue_errors      v_0))	"ignore all error messages"+      , Option ""	[a_ignore_encoding_errors]	(NoArg  (att a_ignore_encoding_errors v_1))   "ignore encoding errors"+      , Option ""	[a_ignore_none_xml_contents]    (NoArg  (att a_ignore_none_xml_contents v_1)) "discards all contents of none XML/HTML documents, only the meta info remains stays in the doc tree"       , Option "H"	[a_parse_html]			(NoArg	(att a_parse_html        v_1))	"parse input as HTML, try to interprete everything as HTML, no validation"-      , Option "M"	[a_parse_by_mimetype]		(NoArg  (att a_parse_by_mimetype v_1))	"parse dependent on mime type: text/html as HTML, text/xml and text/xhtml as XML, else no parse"+      , Option "M"	[a_parse_by_mimetype]		(NoArg  (att a_parse_by_mimetype v_1))	"parse dependent on mime type: text/html as HTML, text/xml and text/xhtml and others as XML, else no parse"+      , Option ""	[a_parse_xml]			(NoArg	(att a_parse_html        v_0))	"parse input as XML, (default)"       , Option "T"	[a_tagsoup]			(NoArg	(att a_tagsoup           v_1))	"lasy tagsoup parser, for HTML and XML, no DTD, no validation, no PIs, only XHTML entityrefs"       , Option ""	[a_issue_warnings]		(NoArg	(att a_issue_warnings    v_1))	"issue warnings, when parsing HTML (default)"       , Option "Q"	[a_do_not_issue_warnings]	(NoArg	(att a_issue_warnings    v_0))	"ignore warnings, when parsing HTML"-      , Option ""	[a_parse_xml]			(NoArg	(att a_parse_html        v_0))	"parse input as XML (default)"       , Option ""	[a_validate]			(NoArg  (att a_validate          v_1))	"document validation when parsing XML (default)"       , Option "w"	[a_do_not_validate]		(NoArg  (att a_validate          v_0))	"only wellformed check, no validation"       , Option ""	[a_canonicalize]		(NoArg  (att a_canonicalize      v_1))	"canonicalize document, remove DTD, comment, transform CDATA, CharRef's, ... (default)"@@ -161,7 +165,15 @@ -- as true: \"1\", \"True\", \"true\", \"yes\", \"Yes\".  optionIsSet	:: String -> Attributes -> Bool-optionIsSet n-    = (`elem` ["1", "True", "true", "Yes", "yes"]) . lookupDef "" n+optionIsSet n	= isTrueValue . lookupDef "" n++-- | check whether a string represents True+--+-- definition:+--+-- > isTrueValue	= (`elem` ["1", "True", "true", "Yes", "yes"])++isTrueValue	:: String -> Bool+isTrueValue	= (`elem` ["1", "True", "true", "Yes", "yes"])  -- ------------------------------------------------------------
− src/Text/XML/HXT/IO/GetHTTPCurl.hs
@@ -1,169 +0,0 @@--- ------------------------------------------------------------------ GET for http access with curl------ Version : $Id: GetHTTPCurl.hs,v 1.3 2005/04/14 12:52:52 hxml Exp $--module Text.XML.HXT.IO.GetHTTPCurl-    ( getCont-    )--where--import Text.XML.HXT.DOM.XmlKeywords--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 as Parsec (try)	-- try--import System.PipeOpen-    ( popen-    )--import Data.Char-    ( toLower-    )--import System.IO---- ------------------------------------------------------------------ the http protocol handler implemented by calling external program curl--getCont		:: String -> String -> String -> IO (Either String ([(String, String)], String))-getCont curlOptions uri proxy-    = do-      (res, errs, rc) <- popen cmd allArgs-      if rc /= 0-	 then return $ Left ( "http error when requesting URI "-			      ++ show uri-			      ++ ": (rc=" ++ show rc ++ ") "-			      ++ errs-			    )-	 else let-	      (st, al, contents) = parseResponse res-	      in-	      if st >= 200 && st < 300-		 then return $ Right (al, contents)-		 else return $ Left ( "http error when accessing URI "-				      ++ show uri-				      ++ ": "-				      ++ show st-				    )-    where-    cmd		= "curl"--    allArgs	= args-		  ++ proxyArgs proxy-		  ++ words curlOptions--    args 	= [ "--silent"-		  , "--show-error"-		  , "--dump-header", "-"-		  , uri-		  ]-    proxyArgs ""-		= []-    proxyArgs prx-		= [ "--proxy", prx ]--parseResponse	:: String -> (Int, [(String, String)], String)-parseResponse inp-    = ( either-          ( const (999, [(transferMessage, "illegal HTTP response")], inp))-          id-	.-	parse parseHttpResponse "HTTP Header"-      ) inp---- --------------------------------------------------------------parseHttpResponse		:: Parser (Int, [(String, String)], String)-parseHttpResponse-    = do-      allResponses <- many1 parse1Response-      let (rc, rh, rhs) = last allResponses-      content <- getInput-      return (rc, rh ++ rhs, content)-    where--    parse1Response-	= do-	  (rc, rh) <- parseResp-	  rhs      <- parseHeaders-	  return (rc, rh, rhs)--    crlf		:: Parser ()-    crlf-	= do-	  ( Parsec.try (string "\r\n") <|> string "\n" )-	  return ()--    parseResp		:: Parser (Int, [(String, String)])-    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,-		   [(transferMessage, reason), (transferVersion, vers)]-		 )--    parseHeaders	:: Parser [(String, String)]-    parseHeaders-	= ( do-	    crlf-	    return []-	  )-	  <|>-	  ( do-	    header1 <- parse1Header-	    rest    <- parseHeaders-	    return (header1 ++ rest)-	  )-	  <|>-	  ( do-	    return [(httpPrefix ++ "IllegalHeaders", "")]-	  )--    parse1Header	:: Parser [(String, String)]-    parse1Header-	= do-	  header <- manyTill anyChar (char ':')-	  spaces-	  value  <- manyTill anyChar crlf-	  let ct = parseCT header value-	  return $ ct ++ [(httpPrefix ++ header, value)]-	where-	parseCT	:: String -> String -> [(String, String)]-	parseCT h v-	    | map toLower h == "content-type"-		= either (const []) id . parse parseContentType h $ v-	    | otherwise-		= []---- ------------------------------------------------------------
+ src/Text/XML/HXT/IO/GetHTTPLibCurl.hs view
@@ -0,0 +1,239 @@+-- ------------------------------------------------------------+--+-- GET for http access with curl+--+-- Version : $Id: GetHTTPCurl.hs,v 1.3 2005/04/14 12:52:52 hxml Exp $++module Text.XML.HXT.IO.GetHTTPLibCurl+    ( getCont+    )++where++import Control.Arrow+    ( first )+import Control.Concurrent.MVar+import Control.Monad+    ( when )++import Data.Char+    ( isDigit+    , toLower+    )+import Data.List+    ( isPrefixOf+    )++import Network.Curl++import System.IO+import System.IO.Unsafe+    ( unsafePerformIO+    )++import Text.ParserCombinators.Parsec+    ( parse+    )+import Text.XML.HXT.DOM.XmlKeywords+import Text.XML.HXT.DOM.XmlOptions+    ( isTrueValue+    )+import Text.XML.HXT.Parser.ProtocolHandlerUtil+    ( parseContentType+    )+import Text.XML.HXT.Version++-- ------------------------------------------------------------+--+-- the global flag for initializing curl in the 1. call++isInitCurl	:: MVar Bool+isInitCurl	= unsafePerformIO $ newMVar False++initCurl	:: IO ()+initCurl+    = do+      i <- takeMVar isInitCurl+      when (not i) ( do+		     curl_global_init 3+		     return ()+		   )+      putMVar isInitCurl True++-- ------------------------------------------------------------+--+-- the http protocol handler implemented by calling libcurl+-- (<http://curl.haxx.se/>)+-- via the curl binding+-- <http://hackage.haskell.org/cgi-bin/hackage-scripts/package/curl>+-- This function tries to support mostly all curl options concerning HTTP requests.+-- The naming convetion is as follows: A curl option must be prefixed by the string+-- \"curl\" and then written exactly as described in the curl man page+-- (<http://curl.haxx.se/docs/manpage.html>).+-- Example:+--+-- > getCont [("curl--user-agent","My first HXT app"),("curl-e","http://the.referer.url/")] "http://..."+--+-- will set the user agent and the referer URL for this request.++getCont		:: [(String, String)] -> String -> IO (Either String ([(String, String)], String))+getCont options uri -- curlOptions uri proxy+    = do+      initCurl+      resp <- curlGetResponse uri curlOptions+      return $ evalResponse resp+    where+    curlOptions = concatMap (uncurry copt) options ++ defaultOptions+    defaultOptions+	= [ CurlFailOnError False+	  , CurlHeader True+	  , CurlNoProgress True+	  , CurlFollowLocation True+	  , CurlUserAgent ("hxt/" ++ hxt_version ++ " via libcurl")+	  ]+    evalResponse r+	| rc /= CurlOK+	    = Left ( "http error when requesting URI "+		     ++ show uri+		     ++ ": (curl return code=" ++ show rc ++ ") "+		   )+	| rs < 200 && rs >= 300+	    = Left ( "http error when accessing URI "+		     ++ show uri+		     ++ ": "+		     ++ show rsl+		   )+	| otherwise+	    = Right ( contentT ++ headers, respBody r+		    )+	where+	headers+	    = map (\ (k, v) -> (httpPrefix ++ k, v)) rsh+	      ++ statusLine (words rsl)++	contentT+	    = concat+	      . map ( either (const []) id+		      . parse parseContentType ""+		    )+	      . map snd+	      . take 1+              . filter ((== "content-type") . fst)+              . map (first (map toLower))+              $ rsh++	statusLine (vers : code : msg)+	    = [ (transferVersion, vers)+	      , (transferMessage, unwords msg)+	      , (transferStatus, code)+	      ]+        statusLine _+	    = []++	rc  = respCurlCode    r+	rs  = respStatus      r+	rsl = respStatusLine  r+	rsh = respHeaders     r++-- ------------------------------------------------------------++copt	:: String -> String -> [CurlOption]+copt k v+    | "curl" `isPrefixOf` k+	= opt2copt (drop 4 k) v++    | k == a_proxy+	= opt2copt k v++    | k == a_options_curl+	= curlOptionString v++    | otherwise+	= []++opt2copt	:: String -> String -> [CurlOption]+opt2copt k v+    | k `elem` ["-A", "--user-agent"]	= [CurlUserAgent v]+    | k `elem` ["-b", "--cookie"]	= [CurlCookie v]+    | k == "--connect-timeout"+      &&+      isIntArg v			= [CurlConnectTimeout      $ read    v]+    | k == "--crlf"			= [CurlCRLF                $ isTrue  v]+    | k `elem` ["-d", "--data"]		= [CurlPostFields          $ lines   v]+    | k `elem` ["-e", "--referer"]	= [CurlReferer                       v]+    | k `elem` ["-H", "--header"]	= [CurlHttpHeaders         $ lines   v]+    | k == "--ignore-content-length"	= [CurlIgnoreContentLength $ isTrue  v]+    | k `elem` ["-I", "--head"]		= [CurlNoBody              $ isTrue  v]+    | k `elem` ["-L", "--location"]	= [CurlFollowLocation      $ isTrue  v]+    | k == "--max-filesize"+      &&+      isIntArg v			= [CurlMaxFileSizeLarge    $ read    v]+    | k `elem` ["-m", "--max-time"]+      &&+      isIntArg v			= [CurlTimeoutMS           $ read    v]+    | k `elem` ["-n", "--netrc"]	= [CurlNetrcFile                     v]+    | k `elem` ["-R", "--remote-time"]  = [CurlFiletime            $ isTrue  v]+    | k `elem` ["-u", "--user"]		= [CurlUserPwd                       v]+    | k `elem` ["-U", "--proxy-user"]	= [CurlProxyUserPwd                  v]+    | k `elem` ["-x", "--proxy"]        =  proxyOptions+    | k `elem` ["-X", "--request"]      = [CurlCustomRequest                 v]+    | k `elem` ["-y", "--speed-time"]+      &&+      isIntArg v                        = [CurlLowSpeedTime        $ read    v]+    | k `elem` ["-Y", "--speed-limit"]+      &&+      isIntArg v			= [CurlLowSpeed            $ read    v]+    | k `elem` ["-z", "--time-cond"]	=  ifModifiedOptions+    | k == "--max-redirs"+      &&+      isIntArg v			= [CurlMaxRedirs           $ read    v]+    | k `elem` ["-0", "--http1.0"]	= [CurlHttpVersion       HttpVersion10]+    | otherwise				= []+    where+    ifModifiedOptions+	| "-" `isPrefixOf` v+	  &&+	  isIntArg v'			= [CurlTimeCondition TimeCondIfUnmodSince+					  ,CurlTimeValue           $ read   v'+					  ]+	| isIntArg v			= [CurlTimeCondition TimeCondIfModSince+					  ,CurlTimeValue           $ read   v'+					  ]+	| otherwise			= []+	where+	v' = tail v++    proxyOptions+	= [ CurlProxyPort pport+	  , CurlProxy     phost+	  ]+	where+	pport+	    | isIntArg ppp	= read v+	    | otherwise		= 1080+	(phost, pp) 		= span (/=':') v+	ppp      		= drop 1 pp++++isTrue		:: String -> Bool+isTrue s  	= null s || isTrueValue s++isIntArg	:: String -> Bool+isIntArg s 	= not (null s) && all isDigit s++curlOptionString	:: String -> [CurlOption]+curlOptionString+    = concatMap (uncurry copt) . opts . words+    where+    opts l+	| null l			= []+	| not ("-" `isPrefixOf` k)	= opts l1		-- k not an option: ignore+	| null l1			= opts (k:"":l1)	-- last option+	| "-" `isPrefixOf` v		= (k, "") : opts (v:l)	-- k option without arg+	| otherwise			= (k, v) : opts l2	-- k with value+	where+	(k:l1) = l+	(v:l2) = l1++-- ------------------------------------------------------------
− src/Text/XML/HXT/IO/GetHTTPNative.hs
@@ -1,151 +0,0 @@--- ------------------------------------------------------------------ GET for native http access------ Version : $Id: GetHTTPNative.hs,v 1.2 2005/04/14 12:52:52 hxml Exp $--module Text.XML.HXT.IO.GetHTTPNative-    ( module Text.XML.HXT.IO.GetHTTPNative-    )--where--import Text.XML.HXT.DOM.XmlKeywords-import Text.XML.HXT.DOM.Util			( stringTrim )-import Text.XML.HXT.Parser.ProtocolHandlerUtil	( parseContentType )--import Text.ParserCombinators.Parsec		( parse )--import Data.Maybe	( fromJust-			)-import System.IO	( hPutStrLn-			, stderr-			)-import System.IO.Error	( ioeGetErrorString-			, try-			)-import Network.Browser	( Proxy(..)-			, browse-			, defaultGETRequest-			, request-			, setOutHandler-			, setErrHandler-			, setProxy-			)-import Network.HTTP	( Header(..)-			, HeaderName(..)-			, Response(..)-			, httpVersion-			)-import Network.Socket	( withSocketsDo-			)-import Network.URI	( URI-			, parseURIReference-			)---- ------------------------------------------------------------------ the native http protocol handler---- ------------------------------------------------------------------ the http protocol handler, haskell implementation--getCont		:: String -> String -> IO (Either String ([(String, String)], String))-getCont uri proxy-    = do-      res <- try (getHttp False uri1 proxy)-      either processError processResponse res-    where-    uri1 = fromJust (parseURIReference uri)--    processError e-	= return $ Left ( "http error when requesting URI "-			  ++ show uri-			  ++ ": "-			  ++ ioeGetErrorString e-			  ++ " (perhaps server does not understand HTTP/1.1) "-			)--    processResponse response-	| st >= 200 && st < 300-	    = return $ Right (al, cs)--	| otherwise-	    = return $ Left ( "http error when accessing URI "-			      ++ show uri-			      ++ ": "-			      ++ show st-			      ++ " "-			      ++ rspReason response-			    )-	where-	al = convertResponseHeaders response-	cs = rspBody response-	st = convertResponseStatus (rspCode response)--    getHttp		:: Bool -> 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'-		= hPutStrLn stderr ("-- (5) 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 -> [(String, String)]-    convertResponseHeaders r'-	= cvResponseCode (rspCode r')-	  ++-	  cvResponseReason (rspReason r')-          ++-	  cvResponseHeaders (rspHeaders r')-	where-	cvResponseCode	:: (Int, Int, Int) -> [(String, String)]-	cvResponseCode st'-	    = [ (transferStatus,	show (convertResponseStatus st'))-	      , (transferVersion,	httpVersion)-	      ]--	cvResponseReason	:: String -> [(String, String)]-	cvResponseReason r''-	    = [ (transferMessage, (stringTrim r'')) ]--	cvResponseHeaders	:: [Header] -> [(String, String)]-	cvResponseHeaders-	    = concatMap cvResponseHeader--	cvResponseHeader	:: Header -> [(String, String)]-	cvResponseHeader (Header name value)-	    | name == HdrContentType-		= ( case (parse parseContentType (show HdrContentType) value) of-		    Right res -> res-		    Left  _   -> []-		  )-                  ++-		  addHttpAttr-	    | otherwise-		= addHttpAttr-	    where-	    addHttpAttr = [ (httpPrefix ++ (show name), value) ]----- ------------------------------------------------------------
src/Text/XML/HXT/Parser/TagSoup.hs view
@@ -23,10 +23,11 @@  -- ------------------------------------------------------------ --- The table contains the id map. All element and attribute names are stored--- the first time they are ecountered, and later always this name is used,--- not a string built by the parser.+import           Data.Char (toLower)+import           Data.Maybe+import qualified Data.Map as M + import Text.HTML.TagSoup import Text.HTML.TagSoup.Entity     ( lookupNumericEntity@@ -77,12 +78,12 @@     , mkAttr     ) -import Data.Maybe--import qualified Data.Map as M- -- ----------------------------------------  +-- The name table contains the id map. All element and attribute names are stored+-- the first time they are ecountered, and later always this name is used,+-- not a string built by the parser.+ type Tags	= [Tag]  type NameTable	= M.Map QName QName@@ -292,6 +293,24 @@ 	| otherwise = xhtmlEntities -- xmlEntities (TODO: xhtml is xml and html)  -- ----------------------------------------++-- |+-- Turns all element and attribute names to lower case+-- even !DOCTYPE stuff. But this is discarded when parsing the tagsoup++lowerCaseNames :: [Tag] -> [Tag]+lowerCaseNames+    = map f+    where+    f (TagOpen name attrs)+        = TagOpen (nameToLower name) (map attrToLower attrs)+    f (TagClose name)+	= TagClose (nameToLower name)+    f a = a+    nameToLower          = map toLower+    attrToLower (an, av) = (nameToLower an, av)++-- ---------------------------------------- -- the main parser  parseHtmlTagSoup	:: Bool -> Bool -> Bool -> Bool -> Bool -> String -> String -> XmlTrees@@ -299,7 +318,7 @@     = ( docRootElem 	. runParser (buildCont initContext) 	. ( if asHtml-	    then canonicalizeTags+	    then lowerCaseNames 	    else id 	  ) 	. parseTagsOptions (parseOptions { optTagWarning   = withWarnings
− src/Text/XML/HXT/ProtocolHandler/Makefile
@@ -1,45 +0,0 @@-# $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
− src/Text/XML/HXT/ProtocolHandler/ProtocolHandler.hs
@@ -1,115 +0,0 @@--- ------------------------------------------------------------------ protocol handler functions--- configuration file--- real handler is generated with cpp------ Version : $Id: ProtocolHandler.hs,v 1.2 2006/03/03 10:06:24 hxml Exp $--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-	)-      ]---- --------------------------------------------------------------
+ src/Text/XML/HXT/Version.hs view
@@ -0,0 +1,4 @@+module Text.XML.HXT.Version+where+hxt_version :: String+hxt_version = "8.1.0"
src/hxt-package.hs view
@@ -59,7 +59,7 @@       , "import-dirs: " ++ dir ++ "/imports"       , "library-dirs: " ++ dir       , "hs-libraries: HShxt"-      , "depends: base, haskell98, parsec, HTTP, HUnit, network, containers, directory, process, tagsoup-0.6"+      , "depends: base, haskell98, parsec, HUnit, network, containers, directory, tagsoup-0.6, curl"       ]  part4b :: [String]@@ -68,9 +68,9 @@       , " ghc-options: -Wall"       , " extensions: MultiParamTypeClasses DeriveDataTypeable FunctionalDependencies FlexibleInstances"       , ""-      , " build-depends: base, haskell98 >= 1, parsec >= 2.1 && < 3, HTTP >= 3001.0.4, HUnit >= 1.2, network >= 2.1, tagsoup >= 0.6"+      , " build-depends: base, haskell98 >= 1, parsec >= 2.1 && < 3, HUnit >= 1.2, network >= 2.1, tagsoup >= 0.6, curl >= 1.3"       , " if flag(splitBase)"-      , "   build-depends: base >= 3, containers >= 0.1, directory >= 1, process >= 1"+      , "   build-depends: base >= 3, containers >= 0.1, directory >= 1, filepath >= 1"       , " else"       , "   build-depends: base < 3"       ]